Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 40 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Exchange | 15118036 | 914 days ago | IN | 0 ETH | 0.00734407 | ||||
Exchange | 14980472 | 937 days ago | IN | 0 ETH | 0.02473264 | ||||
Exchange | 14975168 | 938 days ago | IN | 0 ETH | 0.01528225 | ||||
Exchange | 14966071 | 940 days ago | IN | 0 ETH | 0.01059139 | ||||
Exchange | 14956838 | 941 days ago | IN | 0 ETH | 0.06841505 | ||||
Exchange | 14892125 | 952 days ago | IN | 0 ETH | 0.03031199 | ||||
Exchange | 14784691 | 970 days ago | IN | 0 ETH | 0.0136358 | ||||
Exchange | 14781976 | 970 days ago | IN | 0 ETH | 0.01273743 | ||||
Exchange | 14772276 | 972 days ago | IN | 0 ETH | 0.01609585 | ||||
Exchange | 14772009 | 972 days ago | IN | 0 ETH | 0.01510974 | ||||
Exchange | 14768704 | 972 days ago | IN | 0 ETH | 0.01321444 | ||||
Exchange | 14767939 | 972 days ago | IN | 0 ETH | 0.0398752 | ||||
Exchange | 14767432 | 972 days ago | IN | 0 ETH | 0.02999135 | ||||
Exchange | 14766897 | 972 days ago | IN | 0 ETH | 0.02012401 | ||||
Exchange | 14765997 | 973 days ago | IN | 0 ETH | 0.02984379 | ||||
Exchange | 14765908 | 973 days ago | IN | 0 ETH | 0.02760457 | ||||
Exchange | 14765190 | 973 days ago | IN | 0 ETH | 0.04266084 | ||||
Exchange | 14764423 | 973 days ago | IN | 0 ETH | 0.08774214 | ||||
Exchange | 14763251 | 973 days ago | IN | 0 ETH | 0.04405689 | ||||
Exchange | 14751380 | 975 days ago | IN | 0 ETH | 0.01846707 | ||||
Exchange | 14750690 | 975 days ago | IN | 0 ETH | 0.02565524 | ||||
Exchange | 14748043 | 975 days ago | IN | 0 ETH | 0.0555944 | ||||
Exchange | 14746930 | 976 days ago | IN | 0 ETH | 0.08822563 | ||||
Exchange | 14744841 | 976 days ago | IN | 0 ETH | 0.03095968 | ||||
Exchange | 14718066 | 980 days ago | IN | 0 ETH | 0.02542361 |
Advanced mode: Intended for advanced users or developers and will display all Internal Transactions including zero value transfers. Name tag integration is not available in advanced view.
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
||||
---|---|---|---|---|---|---|---|
15118036 | 914 days ago | 0 ETH | |||||
15118036 | 914 days ago | 0 ETH | |||||
15118036 | 914 days ago | 0 ETH | |||||
15118036 | 914 days ago | 0 ETH | |||||
15118036 | 914 days ago | 0 ETH | |||||
15118036 | 914 days ago | 0 ETH | |||||
15118036 | 914 days ago | 0 ETH | |||||
15118036 | 914 days ago | 0 ETH | |||||
15118036 | 914 days ago | 0 ETH | |||||
15118036 | 914 days ago | 0 ETH | |||||
14980472 | 937 days ago | 0 ETH | |||||
14980472 | 937 days ago | 0 ETH | |||||
14980472 | 937 days ago | 0 ETH | |||||
14980472 | 937 days ago | 0 ETH | |||||
14980472 | 937 days ago | 0 ETH | |||||
14980472 | 937 days ago | 0 ETH | |||||
14980472 | 937 days ago | 0 ETH | |||||
14980472 | 937 days ago | 0 ETH | |||||
14980472 | 937 days ago | 0 ETH | |||||
14980472 | 937 days ago | 0 ETH | |||||
14975168 | 938 days ago | 0 ETH | |||||
14975168 | 938 days ago | 0 ETH | |||||
14975168 | 938 days ago | 0 ETH | |||||
14975168 | 938 days ago | 0 ETH | |||||
14975168 | 938 days ago | 0 ETH |
Loading...
Loading
Contract Name:
GroGvtBridgeSwapper
Compiler Version
v0.8.3+commit.8d00100c
Optimization Enabled:
Yes with 1000 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
//SPDX-License-Identifier: Unlicense pragma solidity ^0.8.3; import "./ZkSyncBridgeSwapper.sol"; import "./interfaces/IGroController.sol"; import "./interfaces/IGroToken.sol"; import "./interfaces/IGroDepositHandler.sol"; import "./interfaces/IGroWithdrawHandler.sol"; import "./interfaces/IGroBuoy.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; /** * @notice Exchanges a stablecoin for Gro Vault LP tokens. * Example indexes: * 0: DAI * 1: GVT */ contract GroGvtBridgeSwapper is ZkSyncBridgeSwapper { address public immutable depositHandler; address public immutable withdrawHandler; address public immutable stablecoin; uint256 public immutable stablecoinIndex; address public immutable gvt; address public immutable buoy; address public immutable groReferral; constructor( address _zkSync, address _l2Account, address _groController, uint256 _stablecoinIndex, address _groReferral ) ZkSyncBridgeSwapper(_zkSync, _l2Account) { require(_groController != address(0), "null _groController"); IGroController controller = IGroController(_groController); require(_stablecoinIndex < 3, "invalid _stablecoinIndex"); stablecoin = controller.stablecoins()[_stablecoinIndex]; stablecoinIndex = _stablecoinIndex; depositHandler = controller.depositHandler(); withdrawHandler = controller.withdrawHandler(); gvt = controller.gvt(); buoy = controller.buoy(); groReferral = _groReferral; } function exchange(uint256 _indexIn, uint256 _indexOut, uint256 _amountIn) external override returns (uint256 amountOut) { require(_indexIn + _indexOut == 1, "invalid indexes"); if (_indexIn == 0) { transferFromZkSync(stablecoin); amountOut = swapStablecoinForGvt(_amountIn); transferToZkSync(gvt, amountOut); emit Swapped(stablecoin, _amountIn, gvt, amountOut); } else { transferFromZkSync(gvt); amountOut = swapGvtForStablecoin(_amountIn); transferToZkSync(stablecoin, amountOut); emit Swapped(gvt, _amountIn, stablecoin, amountOut); } } function swapStablecoinForGvt(uint256 _amountIn) public returns (uint256) { uint256[3] memory inAmounts; inAmounts[stablecoinIndex] = _amountIn; uint256 balanceBefore = IGroToken(gvt).balanceOf(address(this)); IERC20(stablecoin).approve(depositHandler, _amountIn); uint256 minLpAmount = getMinAmountOut(IGroBuoy(buoy).stableToLp(inAmounts, true)); IGroDepositHandler(depositHandler).depositGvt(inAmounts, minLpAmount, groReferral); uint256 balanceAfter = IGroToken(gvt).balanceOf(address(this)); return balanceAfter - balanceBefore; } function swapGvtForStablecoin(uint256 _amountIn) public returns (uint256) { uint256 balanceBefore = IERC20(stablecoin).balanceOf(address(this)); uint256 usdAmount = IGroToken(gvt).getShareAssets(_amountIn); uint256 lpAmount = IGroBuoy(buoy).usdToLp(usdAmount); uint256 stableAmount = IGroBuoy(buoy).singleStableFromUsd(usdAmount, int128(uint128(stablecoinIndex))); uint256 minAmount = getMinAmountOut(stableAmount); IGroWithdrawHandler(withdrawHandler).withdrawByStablecoin(false, stablecoinIndex, lpAmount, minAmount); uint256 balanceAfter = IERC20(stablecoin).balanceOf(address(this)); return balanceAfter - balanceBefore; } function tokens(uint256 _index) external view returns (address) { if (_index == 0) { return stablecoin; } else if (_index == 1) { return gvt; } revert("invalid _index"); } }
//SPDX-License-Identifier: Unlicense pragma solidity ^0.8.3; import "./interfaces/IZkSync.sol"; import "./interfaces/IBridgeSwapper.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; abstract contract ZkSyncBridgeSwapper is IBridgeSwapper { // The owner of the contract address public owner; // The max slippage accepted for swapping. Defaults to 1% with 6 decimals. uint256 public slippagePercent = 1e6; // The ZkSync bridge contract address public immutable zkSync; // The L2 market maker account address public immutable l2Account; address constant internal ETH_TOKEN = address(0); event OwnerChanged(address _owner, address _newOwner); event SlippageChanged(uint256 _slippagePercent); modifier onlyOwner { require(msg.sender == owner, "unauthorised"); _; } constructor(address _zkSync, address _l2Account) { zkSync = _zkSync; l2Account = _l2Account; owner = msg.sender; } function changeOwner(address _newOwner) external onlyOwner { require(_newOwner != address(0), "invalid input"); owner = _newOwner; emit OwnerChanged(owner, _newOwner); } function changeSlippage(uint256 _slippagePercent) external onlyOwner { require(_slippagePercent != slippagePercent && _slippagePercent <= 100e6, "invalid slippage"); slippagePercent = _slippagePercent; emit SlippageChanged(slippagePercent); } /** * @dev Check if there is a pending balance to withdraw in zkSync and withdraw it if applicable. * @param _token The token to withdraw. */ function transferFromZkSync(address _token) internal { uint128 pendingBalance = IZkSync(zkSync).getPendingBalance(address(this), _token); if (pendingBalance > 0) { IZkSync(zkSync).withdrawPendingBalance(payable(address(this)), _token, pendingBalance); } } /** * @dev Deposit the ETH or ERC20 token to zkSync. * @param _outputToken The token that was given. * @param _amountOut The amount of given token. */ function transferToZkSync(address _outputToken, uint256 _amountOut) internal { if (_outputToken == ETH_TOKEN) { // deposit Eth to L2 bridge IZkSync(zkSync).depositETH{value: _amountOut}(l2Account); } else { // approve the zkSync bridge to take the output token IERC20(_outputToken).approve(zkSync, _amountOut); // deposit the output token to the L2 bridge IZkSync(zkSync).depositERC20(IERC20(_outputToken), toUint104(_amountOut), l2Account); } } /** * @dev Safety method to recover ETH or ERC20 tokens that are sent to the contract by error. * @param _token The token to recover. */ function recoverToken(address _recipient, address _token) external onlyOwner returns (uint256 balance) { bool success; if (_token == ETH_TOKEN) { balance = address(this).balance; (success, ) = _recipient.call{value: balance}(""); } else { balance = IERC20(_token).balanceOf(address(this)); success = IERC20(_token).transfer(_recipient, balance); } require(success, "failed to recover"); } /** * @dev fallback method to make sure we can receive ETH */ receive() external payable { } /** * @dev Returns the minimum accepted out amount. */ function getMinAmountOut(uint256 _amountIn) internal view returns (uint256) { return _amountIn * (100e6 - slippagePercent) / 100e6; } /** * @dev Returns the downcasted uint104 from uint256, reverting on * overflow (when the input is greater than largest uint104). */ function toUint104(uint256 value) internal pure returns (uint104) { require(value <= type(uint104).max, "SafeCast: value doesn't fit in 104 bits"); return uint104(value); } }
//SPDX-License-Identifier: Unlicense pragma solidity ^0.8.3; interface IGroController { function DAI() external view returns (address); function USDC() external view returns (address); function USDT() external view returns (address); function stablecoins() external view returns (address[3] memory); function buoy() external view returns (address); function depositHandler() external view returns (address); function withdrawHandler() external view returns (address); function gvt() external view returns (address); function pwrd() external view returns (address); }
//SPDX-License-Identifier: Unlicense pragma solidity ^0.8.3; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; interface IGroToken is IERC20 { function pricePerShare() external view returns (uint256); function getShareAssets(uint256) external view returns (uint256); }
//SPDX-License-Identifier: Unlicense pragma solidity ^0.8.3; interface IGroDepositHandler { function depositGvt( uint256[3] calldata inAmounts, uint256 minAmount, address referral ) external; function depositPwrd( uint256[3] calldata inAmounts, uint256 minAmount, address referral ) external; }
//SPDX-License-Identifier: Unlicense pragma solidity ^0.8.3; interface IGroWithdrawHandler { function withdrawalFee(bool pwrd) external view returns (uint256); function withdrawByLPToken( bool pwrd, uint256 lpAmount, uint256[3] calldata minAmounts ) external; function withdrawByStablecoin( bool pwrd, uint256 index, uint256 lpAmount, uint256 minAmount ) external; function withdrawAllSingle( bool pwrd, uint256 index, uint256 minAmount ) external; function withdrawAllBalanced(bool pwrd, uint256[3] calldata minAmounts) external; }
//SPDX-License-Identifier: Unlicense pragma solidity ^0.8.3; interface IGroBuoy { function safetyCheck() external view returns (bool); function updateRatios() external returns (bool); function updateRatiosWithTolerance(uint256 tolerance) external returns (bool); function lpToUsd(uint256 inAmount) external view returns (uint256); function usdToLp(uint256 inAmount) external view returns (uint256); function stableToUsd(uint256[3] calldata inAmount, bool deposit) external view returns (uint256); function stableToLp(uint256[3] calldata inAmount, bool deposit) external view returns (uint256); function singleStableFromLp(uint256 inAmount, int128 i) external view returns (uint256); function getVirtualPrice() external view returns (uint256); function singleStableFromUsd(uint256 inAmount, int128 i) external view returns (uint256); function singleStableToUsd(uint256 inAmount, uint256 i) external view returns (uint256); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @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 `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, 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 `sender` to `recipient` 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 sender, address recipient, uint256 amount ) external returns (bool); /** * @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); }
//SPDX-License-Identifier: Unlicense pragma solidity ^0.8.3; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; interface IZkSync { function getPendingBalance(address _address, address _token) external view returns (uint128); function withdrawPendingBalance(address payable _owner, address _token, uint128 _amount) external; function depositETH(address _zkSyncAddress) external payable; function depositERC20(IERC20 _token, uint104 _amount, address _zkSyncAddress) external; }
//SPDX-License-Identifier: Unlicense pragma solidity ^0.8.3; interface IBridgeSwapper { event Swapped(address _inputToken, uint256 _amountIn, address _outputToken, uint256 _amountOut); /** * @notice Perform an exchange between two tokens * @dev Index values can usually be found via the constructor arguments (if not hardcoded) * @param _indexIn Index value for the token to send * @param _indexOut Index valie of the token to receive * @param _amountIn Amount of `_indexIn` being exchanged * @return Actual amount of `_indexOut` received */ function exchange(uint256 _indexIn, uint256 _indexOut, uint256 _amountIn) external returns (uint256); }
{ "optimizer": { "enabled": true, "runs": 1000 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_zkSync","type":"address"},{"internalType":"address","name":"_l2Account","type":"address"},{"internalType":"address","name":"_groController","type":"address"},{"internalType":"uint256","name":"_stablecoinIndex","type":"uint256"},{"internalType":"address","name":"_groReferral","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_owner","type":"address"},{"indexed":false,"internalType":"address","name":"_newOwner","type":"address"}],"name":"OwnerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_slippagePercent","type":"uint256"}],"name":"SlippageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_inputToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amountIn","type":"uint256"},{"indexed":false,"internalType":"address","name":"_outputToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amountOut","type":"uint256"}],"name":"Swapped","type":"event"},{"inputs":[],"name":"buoy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"changeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_slippagePercent","type":"uint256"}],"name":"changeSlippage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"depositHandler","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_indexIn","type":"uint256"},{"internalType":"uint256","name":"_indexOut","type":"uint256"},{"internalType":"uint256","name":"_amountIn","type":"uint256"}],"name":"exchange","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"groReferral","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gvt","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"l2Account","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"address","name":"_token","type":"address"}],"name":"recoverToken","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"slippagePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stablecoin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stablecoinIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amountIn","type":"uint256"}],"name":"swapGvtForStablecoin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amountIn","type":"uint256"}],"name":"swapStablecoinForGvt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"tokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawHandler","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"zkSync","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6101a0604052620f42406001553480156200001957600080fd5b5060405162002154380380620021548339810160408190526200003c916200046b565b6001600160601b0319606086811b821660805285901b1660a052600080546001600160a01b031916331790556001600160a01b038316620000c45760405162461bcd60e51b815260206004820152601360248201527f6e756c6c205f67726f436f6e74726f6c6c65720000000000000000000000000060448201526064015b60405180910390fd5b8260038310620001175760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964205f737461626c65636f696e496e64657800000000000000006044820152606401620000bb565b806001600160a01b031663a8fb4c506040518163ffffffff1660e01b815260040160606040518083038186803b1580156200015157600080fd5b505afa15801562000166573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018c9190620004d1565b8360038110620001ac57634e487b7160e01b600052603260045260246000fd5b60200201516001600160a01b0316610100816001600160a01b031660601b81525050826101208181525050806001600160a01b0316639c8b2cfb6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200021157600080fd5b505afa15801562000226573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024c919062000447565b6001600160a01b031660c0816001600160a01b031660601b81525050806001600160a01b031663083473ef6040518163ffffffff1660e01b815260040160206040518083038186803b158015620002a257600080fd5b505afa158015620002b7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002dd919062000447565b6001600160a01b031660e0816001600160a01b031660601b81525050806001600160a01b0316639e574a1e6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200033357600080fd5b505afa15801562000348573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036e919062000447565b6001600160a01b0316610140816001600160a01b031660601b81525050806001600160a01b031663b1cbf3ad6040518163ffffffff1660e01b815260040160206040518083038186803b158015620003c557600080fd5b505afa158015620003da573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000400919062000447565b6001600160601b0319606091821b81166101605292901b90911661018052506200057a9350505050565b80516001600160a01b03811681146200044257600080fd5b919050565b60006020828403121562000459578081fd5b62000464826200042a565b9392505050565b600080600080600060a0868803121562000483578081fd5b6200048e866200042a565b94506200049e602087016200042a565b9350620004ae604087016200042a565b925060608601519150620004c5608087016200042a565b90509295509295909350565b600060608284031215620004e3578081fd5b82601f830112620004f2578081fd5b604051606081016001600160401b038111828210171562000517576200051762000564565b6040528083606081018610156200052c578384fd5b835b6003811015620005595762000543826200042a565b835260209283019291909101906001016200052e565b509195945050505050565b634e487b7160e01b600052604160045260246000fd5b60805160601c60a05160601c60c05160601c60e05160601c6101005160601c610120516101405160601c6101605160601c6101805160601c611a6a620006ea6000396000818161019c0152610e2501526000818161037a01528181610690015281816107700152610d1f0152600081816103240152818161048a015281816105d901528181610bce01528181610e9601528181610fc8015281816110280152818161108901526110e801526000818161024801528181610739015281816108260152610b7401526000818161040e0152818161045a01528181610522015281816108d801528181610c9901528181610f9401528181610ff3015281816110bd015261111d01526000818161014b015261085d0152600081816102f001528181610c670152610df40152600081816101d00152818161159f015261175a01526000818161027c01528181611413015281816114ff015281816115c70152818161164101526116cf0152611a6a6000f3fe60806040526004361061012d5760003560e01c80639c8b2cfb116100a5578063bec872b011610074578063d42abed311610059578063d42abed3146103dc578063e9cbd822146103fc578063feaea5861461043057610134565b8063bec872b01461039c578063cfa87fe1146103bc57610134565b80639c8b2cfb146102de5780639e574a1e14610312578063a6f9dae114610346578063b1cbf3ad1461036857610134565b80635825a150116100fc5780637c19f005116100e15780637c19f0051461026a5780638da5cb5b1461029e57806394af2357146102be57610134565b80635825a15014610212578063628fe8cc1461023657610134565b8063083473ef146101395780632e11eb9b1461018a57806335aa6df8146101be5780634f64b2be146101f257610134565b3661013457005b600080fd5b34801561014557600080fd5b5061016d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561019657600080fd5b5061016d7f000000000000000000000000000000000000000000000000000000000000000081565b3480156101ca57600080fd5b5061016d7f000000000000000000000000000000000000000000000000000000000000000081565b3480156101fe57600080fd5b5061016d61020d3660046118e4565b610450565b34801561021e57600080fd5b5061022860015481565b604051908152602001610181565b34801561024257600080fd5b506102287f000000000000000000000000000000000000000000000000000000000000000081565b34801561027657600080fd5b5061016d7f000000000000000000000000000000000000000000000000000000000000000081565b3480156102aa57600080fd5b5060005461016d906001600160a01b031681565b3480156102ca57600080fd5b506102286102d93660046118e4565b610500565b3480156102ea57600080fd5b5061016d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561031e57600080fd5b5061016d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561035257600080fd5b50610366610361366004611848565b610973565b005b34801561037457600080fd5b5061016d7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103a857600080fd5b506103666103b73660046118e4565b610a86565b3480156103c857600080fd5b506102286103d73660046118e4565b610b66565b3480156103e857600080fd5b506102286103f7366004611914565b610f2f565b34801561040857600080fd5b5061016d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561043c57600080fd5b5061022861044b366004611862565b61117c565b60008161047e57507f00000000000000000000000000000000000000000000000000000000000000006104fb565b81600114156104ae57507f00000000000000000000000000000000000000000000000000000000000000006104fb565b60405162461bcd60e51b815260206004820152600e60248201527f696e76616c6964205f696e64657800000000000000000000000000000000000060448201526064015b60405180910390fd5b919050565b6040516370a0823160e01b815230600482015260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a082319060240160206040518083038186803b15801561056457600080fd5b505afa158015610578573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059c91906118fc565b6040517f11d1dcd2000000000000000000000000000000000000000000000000000000008152600481018590529091506000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906311d1dcd29060240160206040518083038186803b15801561061b57600080fd5b505afa15801561062f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061065391906118fc565b6040517fe8ad4885000000000000000000000000000000000000000000000000000000008152600481018290529091506000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063e8ad48859060240160206040518083038186803b1580156106d257600080fd5b505afa1580156106e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070a91906118fc565b6040517f10a2862a000000000000000000000000000000000000000000000000000000008152600481018490527f0000000000000000000000000000000000000000000000000000000000000000600f0b60248201529091506000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906310a2862a9060440160206040518083038186803b1580156107b257600080fd5b505afa1580156107c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ea91906118fc565b905060006107f78261139f565b6040517f9793869b000000000000000000000000000000000000000000000000000000008152600060048201527f0000000000000000000000000000000000000000000000000000000000000000602482015260448101859052606481018290529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690639793869b90608401600060405180830381600087803b1580156108a957600080fd5b505af11580156108bd573d6000803e3d6000fd5b50506040516370a0823160e01b8152306004820152600092507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691506370a082319060240160206040518083038186803b15801561092357600080fd5b505afa158015610937573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095b91906118fc565b90506109678682611a07565b98975050505050505050565b6000546001600160a01b031633146109bc5760405162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5cd95960a21b60448201526064016104f2565b6001600160a01b038116610a125760405162461bcd60e51b815260206004820152600d60248201527f696e76616c696420696e7075740000000000000000000000000000000000000060448201526064016104f2565b600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040805182815260208101929092527fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c91015b60405180910390a150565b6000546001600160a01b03163314610acf5760405162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5cd95960a21b60448201526064016104f2565b6001548114158015610ae557506305f5e1008111155b610b315760405162461bcd60e51b815260206004820152601060248201527f696e76616c696420736c6970706167650000000000000000000000000000000060448201526064016104f2565b60018190556040518181527febfb7b9839a38a6c5d27e43aeb27cf7c47a40bde9262cabba968aecd6336ea1090602001610a7b565b6000610b70611813565b82817f000000000000000000000000000000000000000000000000000000000000000060038110610bb157634e487b7160e01b600052603260045260246000fd5b60200201526040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b158015610c1857600080fd5b505afa158015610c2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5091906118fc565b60405163095ea7b360e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018790529192507f00000000000000000000000000000000000000000000000000000000000000009091169063095ea7b390604401602060405180830381600087803b158015610cdf57600080fd5b505af1158015610cf3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d179190611894565b506000610dc17f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166366c2bdcf8560016040518363ffffffff1660e01b8152600401610d6c929190611968565b60206040518083038186803b158015610d8457600080fd5b505afa158015610d98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dbc91906118fc565b61139f565b6040517f1ccbdcf20000000000000000000000000000000000000000000000000000000081529091506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690631ccbdcf290610e4d90869085907f000000000000000000000000000000000000000000000000000000000000000090600401611985565b600060405180830381600087803b158015610e6757600080fd5b505af1158015610e7b573d6000803e3d6000fd5b50506040516370a0823160e01b8152306004820152600092507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691506370a082319060240160206040518083038186803b158015610ee157600080fd5b505afa158015610ef5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1991906118fc565b9050610f258382611a07565b9695505050505050565b6000610f3b83856119b0565b600114610f8a5760405162461bcd60e51b815260206004820152600f60248201527f696e76616c696420696e6465786573000000000000000000000000000000000060448201526064016104f2565b8361108457610fb87f00000000000000000000000000000000000000000000000000000000000000006113d2565b610fc182610b66565b9050610fed7f000000000000000000000000000000000000000000000000000000000000000082611561565b604080517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b039081168252602082018590527f000000000000000000000000000000000000000000000000000000000000000016818301526060810183905290517fdb587d878116df0bdd4fe154699aa2c5f439da001cc811dfd05d9f589fc5a8ee9181900360800190a1611175565b6110ad7f00000000000000000000000000000000000000000000000000000000000000006113d2565b6110b682610500565b90506110e27f000000000000000000000000000000000000000000000000000000000000000082611561565b604080517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b039081168252602082018590527f000000000000000000000000000000000000000000000000000000000000000016818301526060810183905290517fdb587d878116df0bdd4fe154699aa2c5f439da001cc811dfd05d9f589fc5a8ee9181900360800190a15b9392505050565b600080546001600160a01b031633146111c65760405162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5cd95960a21b60448201526064016104f2565b60006001600160a01b038316611232576040514792506001600160a01b038516908390600081818185875af1925050503d8060008114611222576040519150601f19603f3d011682016040523d82523d6000602084013e611227565b606091505b50508091505061134b565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a082319060240160206040518083038186803b15801561127157600080fd5b505afa158015611285573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a991906118fc565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018390529193509084169063a9059cbb90604401602060405180830381600087803b15801561131057600080fd5b505af1158015611324573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113489190611894565b90505b806113985760405162461bcd60e51b815260206004820152601160248201527f6661696c656420746f207265636f76657200000000000000000000000000000060448201526064016104f2565b5092915050565b60006305f5e1006001546305f5e1006113b89190611a07565b6113c290846119e8565b6113cc91906119c8565b92915050565b6040517f5aca41f60000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b0382811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690635aca41f69060440160206040518083038186803b15801561145757600080fd5b505afa15801561146b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148f91906118b4565b90506fffffffffffffffffffffffffffffffff81161561155d576040517fd514da500000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b0383811660248301526fffffffffffffffffffffffffffffffff831660448301527f0000000000000000000000000000000000000000000000000000000000000000169063d514da50906064015b600060405180830381600087803b15801561154457600080fd5b505af1158015611558573d6000803e3d6000fd5b505050505b5050565b6001600160a01b03821661162a576040517f2d2da8060000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301527f00000000000000000000000000000000000000000000000000000000000000001690632d2da8069083906024016000604051808303818588803b15801561160c57600080fd5b505af1158015611620573d6000803e3d6000fd5b505050505061155d565b60405163095ea7b360e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301526024820183905283169063095ea7b390604401602060405180830381600087803b15801561169457600080fd5b505af11580156116a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116cc9190611894565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e17376b5836117068461178a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0392831660048201526cffffffffffffffffffffffffff90911660248201527f000000000000000000000000000000000000000000000000000000000000000091909116604482015260640161152a565b60006cffffffffffffffffffffffffff82111561180f5760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f303420626974730000000000000000000000000000000000000000000000000060648201526084016104f2565b5090565b60405180606001604052806003906020820280368337509192915050565b80356001600160a01b03811681146104fb57600080fd5b600060208284031215611859578081fd5b61117582611831565b60008060408385031215611874578081fd5b61187d83611831565b915061188b60208401611831565b90509250929050565b6000602082840312156118a5578081fd5b81518015158114611175578182fd5b6000602082840312156118c5578081fd5b81516fffffffffffffffffffffffffffffffff81168114611175578182fd5b6000602082840312156118f5578081fd5b5035919050565b60006020828403121561190d578081fd5b5051919050565b600080600060608486031215611928578081fd5b505081359360208301359350604090920135919050565b8060005b6003811015611962578151845260209384019390910190600101611943565b50505050565b60808101611976828561193f565b82151560608301529392505050565b60a08101611993828661193f565b8360608301526001600160a01b0383166080830152949350505050565b600082198211156119c3576119c3611a1e565b500190565b6000826119e357634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615611a0257611a02611a1e565b500290565b600082821015611a1957611a19611a1e565b500390565b634e487b7160e01b600052601160045260246000fdfea2646970667358221220b8bae2c718f2dd8d3c81210ebb9416ecf757581aff4bca05fdde97f420ed1d3564736f6c63430008030033000000000000000000000000abea9132b05a70803a4e85094fd0e1800777fbef000000000000000000000000e4c0297ba4722d702a19cf0ab95b24658e8ad7d3000000000000000000000000cc5c60a319d33810b9eab9764717eef84defb8f400000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f6579f6031e85b8862848b90118bb12c0ea5a31
Deployed Bytecode
0x60806040526004361061012d5760003560e01c80639c8b2cfb116100a5578063bec872b011610074578063d42abed311610059578063d42abed3146103dc578063e9cbd822146103fc578063feaea5861461043057610134565b8063bec872b01461039c578063cfa87fe1146103bc57610134565b80639c8b2cfb146102de5780639e574a1e14610312578063a6f9dae114610346578063b1cbf3ad1461036857610134565b80635825a150116100fc5780637c19f005116100e15780637c19f0051461026a5780638da5cb5b1461029e57806394af2357146102be57610134565b80635825a15014610212578063628fe8cc1461023657610134565b8063083473ef146101395780632e11eb9b1461018a57806335aa6df8146101be5780634f64b2be146101f257610134565b3661013457005b600080fd5b34801561014557600080fd5b5061016d7f000000000000000000000000641befa4db601578a64f0fc1f4e89e9869268fe781565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561019657600080fd5b5061016d7f0000000000000000000000002f6579f6031e85b8862848b90118bb12c0ea5a3181565b3480156101ca57600080fd5b5061016d7f000000000000000000000000e4c0297ba4722d702a19cf0ab95b24658e8ad7d381565b3480156101fe57600080fd5b5061016d61020d3660046118e4565b610450565b34801561021e57600080fd5b5061022860015481565b604051908152602001610181565b34801561024257600080fd5b506102287f000000000000000000000000000000000000000000000000000000000000000081565b34801561027657600080fd5b5061016d7f000000000000000000000000abea9132b05a70803a4e85094fd0e1800777fbef81565b3480156102aa57600080fd5b5060005461016d906001600160a01b031681565b3480156102ca57600080fd5b506102286102d93660046118e4565b610500565b3480156102ea57600080fd5b5061016d7f000000000000000000000000b7207ea9446dca1dec1c1fc93c6fcdf8b4a44f4081565b34801561031e57600080fd5b5061016d7f0000000000000000000000003adb04e127b9c0a5d36094125669d4603ac52a0c81565b34801561035257600080fd5b50610366610361366004611848565b610973565b005b34801561037457600080fd5b5061016d7f000000000000000000000000bf8c81b2977b10f13a4ac542e72969a6e123f5fe81565b3480156103a857600080fd5b506103666103b73660046118e4565b610a86565b3480156103c857600080fd5b506102286103d73660046118e4565b610b66565b3480156103e857600080fd5b506102286103f7366004611914565b610f2f565b34801561040857600080fd5b5061016d7f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f81565b34801561043c57600080fd5b5061022861044b366004611862565b61117c565b60008161047e57507f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f6104fb565b81600114156104ae57507f0000000000000000000000003adb04e127b9c0a5d36094125669d4603ac52a0c6104fb565b60405162461bcd60e51b815260206004820152600e60248201527f696e76616c6964205f696e64657800000000000000000000000000000000000060448201526064015b60405180910390fd5b919050565b6040516370a0823160e01b815230600482015260009081906001600160a01b037f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f16906370a082319060240160206040518083038186803b15801561056457600080fd5b505afa158015610578573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059c91906118fc565b6040517f11d1dcd2000000000000000000000000000000000000000000000000000000008152600481018590529091506000906001600160a01b037f0000000000000000000000003adb04e127b9c0a5d36094125669d4603ac52a0c16906311d1dcd29060240160206040518083038186803b15801561061b57600080fd5b505afa15801561062f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061065391906118fc565b6040517fe8ad4885000000000000000000000000000000000000000000000000000000008152600481018290529091506000906001600160a01b037f000000000000000000000000bf8c81b2977b10f13a4ac542e72969a6e123f5fe169063e8ad48859060240160206040518083038186803b1580156106d257600080fd5b505afa1580156106e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070a91906118fc565b6040517f10a2862a000000000000000000000000000000000000000000000000000000008152600481018490527f0000000000000000000000000000000000000000000000000000000000000000600f0b60248201529091506000906001600160a01b037f000000000000000000000000bf8c81b2977b10f13a4ac542e72969a6e123f5fe16906310a2862a9060440160206040518083038186803b1580156107b257600080fd5b505afa1580156107c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ea91906118fc565b905060006107f78261139f565b6040517f9793869b000000000000000000000000000000000000000000000000000000008152600060048201527f0000000000000000000000000000000000000000000000000000000000000000602482015260448101859052606481018290529091507f000000000000000000000000641befa4db601578a64f0fc1f4e89e9869268fe76001600160a01b031690639793869b90608401600060405180830381600087803b1580156108a957600080fd5b505af11580156108bd573d6000803e3d6000fd5b50506040516370a0823160e01b8152306004820152600092507f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f6001600160a01b031691506370a082319060240160206040518083038186803b15801561092357600080fd5b505afa158015610937573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095b91906118fc565b90506109678682611a07565b98975050505050505050565b6000546001600160a01b031633146109bc5760405162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5cd95960a21b60448201526064016104f2565b6001600160a01b038116610a125760405162461bcd60e51b815260206004820152600d60248201527f696e76616c696420696e7075740000000000000000000000000000000000000060448201526064016104f2565b600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040805182815260208101929092527fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c91015b60405180910390a150565b6000546001600160a01b03163314610acf5760405162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5cd95960a21b60448201526064016104f2565b6001548114158015610ae557506305f5e1008111155b610b315760405162461bcd60e51b815260206004820152601060248201527f696e76616c696420736c6970706167650000000000000000000000000000000060448201526064016104f2565b60018190556040518181527febfb7b9839a38a6c5d27e43aeb27cf7c47a40bde9262cabba968aecd6336ea1090602001610a7b565b6000610b70611813565b82817f000000000000000000000000000000000000000000000000000000000000000060038110610bb157634e487b7160e01b600052603260045260246000fd5b60200201526040516370a0823160e01b81523060048201526000907f0000000000000000000000003adb04e127b9c0a5d36094125669d4603ac52a0c6001600160a01b0316906370a082319060240160206040518083038186803b158015610c1857600080fd5b505afa158015610c2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5091906118fc565b60405163095ea7b360e01b81526001600160a01b037f000000000000000000000000b7207ea9446dca1dec1c1fc93c6fcdf8b4a44f4081166004830152602482018790529192507f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f9091169063095ea7b390604401602060405180830381600087803b158015610cdf57600080fd5b505af1158015610cf3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d179190611894565b506000610dc17f000000000000000000000000bf8c81b2977b10f13a4ac542e72969a6e123f5fe6001600160a01b03166366c2bdcf8560016040518363ffffffff1660e01b8152600401610d6c929190611968565b60206040518083038186803b158015610d8457600080fd5b505afa158015610d98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dbc91906118fc565b61139f565b6040517f1ccbdcf20000000000000000000000000000000000000000000000000000000081529091506001600160a01b037f000000000000000000000000b7207ea9446dca1dec1c1fc93c6fcdf8b4a44f401690631ccbdcf290610e4d90869085907f0000000000000000000000002f6579f6031e85b8862848b90118bb12c0ea5a3190600401611985565b600060405180830381600087803b158015610e6757600080fd5b505af1158015610e7b573d6000803e3d6000fd5b50506040516370a0823160e01b8152306004820152600092507f0000000000000000000000003adb04e127b9c0a5d36094125669d4603ac52a0c6001600160a01b031691506370a082319060240160206040518083038186803b158015610ee157600080fd5b505afa158015610ef5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1991906118fc565b9050610f258382611a07565b9695505050505050565b6000610f3b83856119b0565b600114610f8a5760405162461bcd60e51b815260206004820152600f60248201527f696e76616c696420696e6465786573000000000000000000000000000000000060448201526064016104f2565b8361108457610fb87f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f6113d2565b610fc182610b66565b9050610fed7f0000000000000000000000003adb04e127b9c0a5d36094125669d4603ac52a0c82611561565b604080517f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f6001600160a01b039081168252602082018590527f0000000000000000000000003adb04e127b9c0a5d36094125669d4603ac52a0c16818301526060810183905290517fdb587d878116df0bdd4fe154699aa2c5f439da001cc811dfd05d9f589fc5a8ee9181900360800190a1611175565b6110ad7f0000000000000000000000003adb04e127b9c0a5d36094125669d4603ac52a0c6113d2565b6110b682610500565b90506110e27f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f82611561565b604080517f0000000000000000000000003adb04e127b9c0a5d36094125669d4603ac52a0c6001600160a01b039081168252602082018590527f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f16818301526060810183905290517fdb587d878116df0bdd4fe154699aa2c5f439da001cc811dfd05d9f589fc5a8ee9181900360800190a15b9392505050565b600080546001600160a01b031633146111c65760405162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5cd95960a21b60448201526064016104f2565b60006001600160a01b038316611232576040514792506001600160a01b038516908390600081818185875af1925050503d8060008114611222576040519150601f19603f3d011682016040523d82523d6000602084013e611227565b606091505b50508091505061134b565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a082319060240160206040518083038186803b15801561127157600080fd5b505afa158015611285573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a991906118fc565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018390529193509084169063a9059cbb90604401602060405180830381600087803b15801561131057600080fd5b505af1158015611324573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113489190611894565b90505b806113985760405162461bcd60e51b815260206004820152601160248201527f6661696c656420746f207265636f76657200000000000000000000000000000060448201526064016104f2565b5092915050565b60006305f5e1006001546305f5e1006113b89190611a07565b6113c290846119e8565b6113cc91906119c8565b92915050565b6040517f5aca41f60000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b0382811660248301526000917f000000000000000000000000abea9132b05a70803a4e85094fd0e1800777fbef90911690635aca41f69060440160206040518083038186803b15801561145757600080fd5b505afa15801561146b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148f91906118b4565b90506fffffffffffffffffffffffffffffffff81161561155d576040517fd514da500000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b0383811660248301526fffffffffffffffffffffffffffffffff831660448301527f000000000000000000000000abea9132b05a70803a4e85094fd0e1800777fbef169063d514da50906064015b600060405180830381600087803b15801561154457600080fd5b505af1158015611558573d6000803e3d6000fd5b505050505b5050565b6001600160a01b03821661162a576040517f2d2da8060000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000e4c0297ba4722d702a19cf0ab95b24658e8ad7d3811660048301527f000000000000000000000000abea9132b05a70803a4e85094fd0e1800777fbef1690632d2da8069083906024016000604051808303818588803b15801561160c57600080fd5b505af1158015611620573d6000803e3d6000fd5b505050505061155d565b60405163095ea7b360e01b81526001600160a01b037f000000000000000000000000abea9132b05a70803a4e85094fd0e1800777fbef811660048301526024820183905283169063095ea7b390604401602060405180830381600087803b15801561169457600080fd5b505af11580156116a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116cc9190611894565b507f000000000000000000000000abea9132b05a70803a4e85094fd0e1800777fbef6001600160a01b031663e17376b5836117068461178a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0392831660048201526cffffffffffffffffffffffffff90911660248201527f000000000000000000000000e4c0297ba4722d702a19cf0ab95b24658e8ad7d391909116604482015260640161152a565b60006cffffffffffffffffffffffffff82111561180f5760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f303420626974730000000000000000000000000000000000000000000000000060648201526084016104f2565b5090565b60405180606001604052806003906020820280368337509192915050565b80356001600160a01b03811681146104fb57600080fd5b600060208284031215611859578081fd5b61117582611831565b60008060408385031215611874578081fd5b61187d83611831565b915061188b60208401611831565b90509250929050565b6000602082840312156118a5578081fd5b81518015158114611175578182fd5b6000602082840312156118c5578081fd5b81516fffffffffffffffffffffffffffffffff81168114611175578182fd5b6000602082840312156118f5578081fd5b5035919050565b60006020828403121561190d578081fd5b5051919050565b600080600060608486031215611928578081fd5b505081359360208301359350604090920135919050565b8060005b6003811015611962578151845260209384019390910190600101611943565b50505050565b60808101611976828561193f565b82151560608301529392505050565b60a08101611993828661193f565b8360608301526001600160a01b0383166080830152949350505050565b600082198211156119c3576119c3611a1e565b500190565b6000826119e357634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615611a0257611a02611a1e565b500290565b600082821015611a1957611a19611a1e565b500390565b634e487b7160e01b600052601160045260246000fdfea2646970667358221220b8bae2c718f2dd8d3c81210ebb9416ecf757581aff4bca05fdde97f420ed1d3564736f6c63430008030033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000abea9132b05a70803a4e85094fd0e1800777fbef000000000000000000000000e4c0297ba4722d702a19cf0ab95b24658e8ad7d3000000000000000000000000cc5c60a319d33810b9eab9764717eef84defb8f400000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f6579f6031e85b8862848b90118bb12c0ea5a31
-----Decoded View---------------
Arg [0] : _zkSync (address): 0xaBEA9132b05A70803a4E85094fD0e1800777fBEF
Arg [1] : _l2Account (address): 0xe4C0297BA4722D702a19cf0aB95b24658e8ad7D3
Arg [2] : _groController (address): 0xCC5c60A319D33810b9EaB9764717EeF84deFB8F4
Arg [3] : _stablecoinIndex (uint256): 0
Arg [4] : _groReferral (address): 0x2F6579F6031E85b8862848b90118Bb12c0ea5a31
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000abea9132b05a70803a4e85094fd0e1800777fbef
Arg [1] : 000000000000000000000000e4c0297ba4722d702a19cf0ab95b24658e8ad7d3
Arg [2] : 000000000000000000000000cc5c60a319d33810b9eab9764717eef84defb8f4
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000002f6579f6031e85b8862848b90118bb12c0ea5a31
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.