Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 530 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw | 20590060 | 25 mins ago | IN | 0 ETH | 0.00009763 | ||||
Withdraw | 20576044 | 47 hrs ago | IN | 0 ETH | 0.00010403 | ||||
Withdraw | 20541835 | 6 days ago | IN | 0 ETH | 0.00025908 | ||||
Withdraw | 20535920 | 7 days ago | IN | 0 ETH | 0.00039366 | ||||
Transfer From | 20506838 | 11 days ago | IN | 0 ETH | 0.00010692 | ||||
Withdraw | 20499648 | 12 days ago | IN | 0 ETH | 0.00013962 | ||||
Withdraw | 20499070 | 12 days ago | IN | 0 ETH | 0.0001832 | ||||
Withdraw | 20493961 | 13 days ago | IN | 0 ETH | 0.00027253 | ||||
Withdraw | 20492497 | 13 days ago | IN | 0 ETH | 0.00037929 | ||||
Withdraw | 20490265 | 13 days ago | IN | 0 ETH | 0.00030867 | ||||
Withdraw | 20432895 | 21 days ago | IN | 0 ETH | 0.00046077 | ||||
Withdraw | 20429136 | 22 days ago | IN | 0 ETH | 0.00069343 | ||||
Withdraw | 20427057 | 22 days ago | IN | 0 ETH | 0.00230936 | ||||
Withdraw | 20418131 | 24 days ago | IN | 0 ETH | 0.00032294 | ||||
Withdraw | 20393385 | 27 days ago | IN | 0 ETH | 0.00012729 | ||||
Withdraw | 20385765 | 28 days ago | IN | 0 ETH | 0.00040904 | ||||
Withdraw | 20355309 | 32 days ago | IN | 0 ETH | 0.00019289 | ||||
Withdraw | 20329812 | 36 days ago | IN | 0 ETH | 0.00043976 | ||||
Withdraw | 20321589 | 37 days ago | IN | 0 ETH | 0.00063611 | ||||
Withdraw | 20319717 | 37 days ago | IN | 0 ETH | 0.0007063 | ||||
Withdraw | 20294598 | 41 days ago | IN | 0 ETH | 0.00011574 | ||||
Withdraw | 20292582 | 41 days ago | IN | 0 ETH | 0.00026888 | ||||
Withdraw | 20291325 | 41 days ago | IN | 0 ETH | 0.00060248 | ||||
Withdraw | 20273415 | 44 days ago | IN | 0 ETH | 0.00031886 | ||||
Withdraw | 20265822 | 45 days ago | IN | 0 ETH | 0.00019733 |
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
15055404 | 784 days ago | 0.006 ETH |
Loading...
Loading
Contract Name:
FuroVesting
Compiler Version
v0.8.10+commit.fc410830
Optimization Enabled:
Yes with 999999 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity 0.8.10; import "../interfaces/IFuroVesting.sol"; contract FuroVesting is IFuroVesting, ERC721("Furo Vesting", "FUROVEST"), Multicall, BoringOwnable { IBentoBoxMinimal public immutable bentoBox; address public immutable wETH; address public tokenURIFetcher; mapping(uint256 => Vest) public vests; uint256 public vestIds; uint256 public constant PERCENTAGE_PRECISION = 1e18; // custom errors error InvalidStart(); error NotOwner(); error NotVestReceiver(); error InvalidStepSetting(); constructor(IBentoBoxMinimal _bentoBox, address _wETH) { bentoBox = _bentoBox; wETH = _wETH; vestIds = 1; _bentoBox.registerProtocol(); } function setTokenURIFetcher(address _fetcher) external onlyOwner { tokenURIFetcher = _fetcher; } function tokenURI(uint256 id) public view override returns (string memory) { return ITokenURIFetcher(tokenURIFetcher).fetchTokenURIData(id); } function setBentoBoxApproval( address user, bool approved, uint8 v, bytes32 r, bytes32 s ) external payable override { bentoBox.setMasterContractApproval( user, address(this), approved, v, r, s ); } function createVesting(VestParams calldata vestParams) external payable override returns ( uint256 depositedShares, uint256 vestId, uint128 stepShares, uint128 cliffShares ) { if (vestParams.start < block.timestamp) revert InvalidStart(); if (vestParams.stepPercentage > PERCENTAGE_PRECISION) revert InvalidStepSetting(); if (vestParams.stepDuration == 0 || vestParams.steps == 0) revert InvalidStepSetting(); depositedShares = _depositToken( address(vestParams.token), msg.sender, address(this), vestParams.amount, vestParams.fromBentoBox ); stepShares = uint128( (vestParams.stepPercentage * depositedShares) / PERCENTAGE_PRECISION ); cliffShares = uint128( depositedShares - (stepShares * vestParams.steps) ); vestId = vestIds++; _mint(vestParams.recipient, vestId); vests[vestId] = Vest({ owner: msg.sender, token: address(vestParams.token) == address(0) ? IERC20(wETH) : vestParams.token, start: vestParams.start, cliffDuration: vestParams.cliffDuration, stepDuration: vestParams.stepDuration, steps: vestParams.steps, cliffShares: cliffShares, stepShares: stepShares, claimed: 0 }); emit CreateVesting( vestId, vestParams.token, msg.sender, vestParams.recipient, vestParams.start, vestParams.cliffDuration, vestParams.stepDuration, vestParams.steps, cliffShares, stepShares, vestParams.fromBentoBox ); } function withdraw( uint256 vestId, bytes calldata taskData, bool toBentoBox ) external override { Vest storage vest = vests[vestId]; address recipient = ownerOf[vestId]; if (recipient != msg.sender) revert NotVestReceiver(); uint256 canClaim = _balanceOf(vest) - vest.claimed; if (canClaim == 0) return; vest.claimed += uint128(canClaim); _transferToken( address(vest.token), address(this), recipient, canClaim, toBentoBox ); if (taskData.length != 0) ITasker(recipient).onTaskReceived(taskData); emit Withdraw(vestId, vest.token, canClaim, toBentoBox); } function stopVesting(uint256 vestId, bool toBentoBox) external override { Vest memory vest = vests[vestId]; if (vest.owner != msg.sender) revert NotOwner(); uint256 amountVested = _balanceOf(vest); uint256 canClaim = amountVested - vest.claimed; uint256 returnShares = (vest.cliffShares + (vest.steps * vest.stepShares)) - amountVested; delete vests[vestId]; _transferToken( address(vest.token), address(this), ownerOf[vestId], canClaim, toBentoBox ); _transferToken( address(vest.token), address(this), msg.sender, returnShares, toBentoBox ); emit CancelVesting( vestId, returnShares, canClaim, vest.token, toBentoBox ); } function vestBalance(uint256 vestId) external view override returns (uint256) { Vest memory vest = vests[vestId]; return _balanceOf(vest) - vest.claimed; } function _balanceOf(Vest memory vest) internal view returns (uint256 claimable) { uint256 timeAfterCliff = vest.start + vest.cliffDuration; if (block.timestamp < timeAfterCliff) { return claimable; } uint256 passedSinceCliff = block.timestamp - timeAfterCliff; uint256 stepPassed = Math.min( vest.steps, passedSinceCliff / vest.stepDuration ); claimable = vest.cliffShares + (vest.stepShares * stepPassed); } function updateOwner(uint256 vestId, address newOwner) external override { Vest storage vest = vests[vestId]; if (vest.owner != msg.sender) revert NotOwner(); vest.owner = newOwner; emit LogUpdateOwner(vestId, newOwner); } function _depositToken( address token, address from, address to, uint256 amount, bool fromBentoBox ) internal returns (uint256 depositedShares) { if (fromBentoBox) { depositedShares = bentoBox.toShare(token, amount, false); bentoBox.transfer(token, from, to, depositedShares); } else { (, depositedShares) = bentoBox.deposit{ value: token == address(0) ? amount : 0 }(token, from, to, amount, 0); } } function _transferToken( address token, address from, address to, uint256 shares, bool toBentoBox ) internal { if (toBentoBox) { bentoBox.transfer(token, from, to, shares); } else { bentoBox.withdraw(token, from, to, 0, shares); } } }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity 0.8.10; import "./ITasker.sol"; import "./IERC20.sol"; import "./ITokenURIFetcher.sol"; import "./IBentoBoxMinimal.sol"; import "../utils/Multicall.sol"; import "../utils/BoringOwnable.sol"; import "@openzeppelin/contracts/utils/math/Math.sol"; import "@rari-capital/solmate/src/tokens/ERC721.sol"; interface IFuroVesting { function setBentoBoxApproval( address user, bool approved, uint8 v, bytes32 r, bytes32 s ) external payable; function createVesting(VestParams calldata vestParams) external payable returns ( uint256 depositedShares, uint256 vestId, uint128 stepShares, uint128 cliffShares ); function withdraw( uint256 vestId, bytes memory taskData, bool toBentoBox ) external; function stopVesting(uint256 vestId, bool toBentoBox) external; function vestBalance(uint256 vestId) external view returns (uint256); function updateOwner(uint256 vestId, address newOwner) external; struct VestParams { IERC20 token; address recipient; uint32 start; uint32 cliffDuration; uint32 stepDuration; uint32 steps; uint128 stepPercentage; uint128 amount; bool fromBentoBox; } struct Vest { address owner; IERC20 token; uint32 start; uint32 cliffDuration; uint32 stepDuration; uint32 steps; uint128 cliffShares; uint128 stepShares; uint128 claimed; } event CreateVesting( uint256 indexed vestId, IERC20 token, address indexed owner, address indexed recipient, uint32 start, uint32 cliffDuration, uint32 stepDuration, uint32 steps, uint128 cliffShares, uint128 stepShares, bool fromBentoBox ); event Withdraw( uint256 indexed vestId, IERC20 indexed token, uint256 indexed amount, bool toBentoBox ); event CancelVesting( uint256 indexed vestId, uint256 indexed ownerAmount, uint256 indexed recipientAmount, IERC20 token, bool toBentoBox ); event LogUpdateOwner(uint256 indexed vestId, address indexed newOwner); }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity 0.8.10; interface ITasker { function onTaskReceived( bytes calldata data ) external; }
// SPDX-License-Identifier: MIT pragma solidity 0.8.10; interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval( address indexed owner, address indexed spender, uint256 value ); /// @notice EIP 2612 function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity 0.8.10; interface ITokenURIFetcher { function fetchTokenURIData(uint256 id) external view returns (string memory); }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity 0.8.10; /// @notice Minimal BentoBox vault interface. /// @dev `token` is aliased as `address` from `IERC20` for simplicity. interface IBentoBoxMinimal { /// @notice Balance per ERC-20 token per account in shares. function balanceOf(address, address) external view returns (uint256); /// @dev Helper function to represent an `amount` of `token` in shares. /// @param token The ERC-20 token. /// @param amount The `token` amount. /// @param roundUp If the result `share` should be rounded up. /// @return share The token amount represented in shares. function toShare( address token, uint256 amount, bool roundUp ) external view returns (uint256 share); /// @dev Helper function to represent shares back into the `token` amount. /// @param token The ERC-20 token. /// @param share The amount of shares. /// @param roundUp If the result should be rounded up. /// @return amount The share amount back into native representation. function toAmount( address token, uint256 share, bool roundUp ) external view returns (uint256 amount); /// @notice Registers this contract so that users can approve it for BentoBox. function registerProtocol() external; /// @notice Deposit an amount of `token` represented in either `amount` or `share`. /// @param token_ The ERC-20 token to deposit. /// @param from which account to pull the tokens. /// @param to which account to push the tokens. /// @param amount Token amount in native representation to deposit. /// @param share Token amount represented in shares to deposit. Takes precedence over `amount`. /// @return amountOut The amount deposited. /// @return shareOut The deposited amount represented in shares. function deposit( address token_, address from, address to, uint256 amount, uint256 share ) external payable returns (uint256 amountOut, uint256 shareOut); /// @notice Withdraws an amount of `token` from a user account. /// @param token_ The ERC-20 token to withdraw. /// @param from which user to pull the tokens. /// @param to which user to push the tokens. /// @param amount of tokens. Either one of `amount` or `share` needs to be supplied. /// @param share Like above, but `share` takes precedence over `amount`. function withdraw( address token_, address from, address to, uint256 amount, uint256 share ) external returns (uint256 amountOut, uint256 shareOut); /// @notice Transfer shares from a user account to another one. /// @param token The ERC-20 token to transfer. /// @param from which user to pull the tokens. /// @param to which user to push the tokens. /// @param share The amount of `token` in shares. function transfer( address token, address from, address to, uint256 share ) external; function setMasterContractApproval( address user, address masterContract, bool approved, uint8 v, bytes32 r, bytes32 s ) external; }
// SPDX-License-Identifier: GPL-2.0-or-later pragma solidity 0.8.10; /// @title Multicall /// @notice Enables calling multiple methods in a single call to the contract abstract contract Multicall { function multicall(bytes[] calldata data) public payable returns (bytes[] memory results) { results = new bytes[](data.length); for (uint256 i = 0; i < data.length; i++) { (bool success, bytes memory result) = address(this).delegatecall( data[i] ); if (!success) { // Next 5 lines from https://ethereum.stackexchange.com/a/83577 if (result.length < 68) revert(); assembly { result := add(result, 0x04) } revert(abi.decode(result, (string))); } results[i] = result; } } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.12; // Audit on 5-Jan-2021 by Keno and BoringCrypto // Source: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol + Claimable.sol // Edited by BoringCrypto contract BoringOwnableData { address public owner; address public pendingOwner; } contract BoringOwnable is BoringOwnableData { event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /// @notice `owner` defaults to msg.sender on construction. constructor() { owner = msg.sender; emit OwnershipTransferred(address(0), msg.sender); } /// @notice Transfers ownership to `newOwner`. Either directly or claimable by the new pending owner. /// Can only be invoked by the current `owner`. /// @param newOwner Address of the new owner. /// @param direct True if `newOwner` should be set immediately. False if `newOwner` needs to use `claimOwnership`. /// @param renounce Allows the `newOwner` to be `address(0)` if `direct` and `renounce` is True. Has no effect otherwise. function transferOwnership( address newOwner, bool direct, bool renounce ) public onlyOwner { if (direct) { // Checks require( newOwner != address(0) || renounce, "Ownable: zero address" ); // Effects emit OwnershipTransferred(owner, newOwner); owner = newOwner; pendingOwner = address(0); } else { // Effects pendingOwner = newOwner; } } /// @notice Needs to be called by `pendingOwner` to claim ownership. function claimOwnership() public { address _pendingOwner = pendingOwner; // Checks require( msg.sender == _pendingOwner, "Ownable: caller != pending owner" ); // Effects emit OwnershipTransferred(owner, _pendingOwner); owner = _pendingOwner; pendingOwner = address(0); } /// @notice Only allows the `owner` to execute the function. modifier onlyOwner() { require(msg.sender == owner, "Ownable: caller is not the owner"); _; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (utils/math/Math.sol) pragma solidity ^0.8.0; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { /** * @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 / b + (a % b == 0 ? 0 : 1); } }
// SPDX-License-Identifier: AGPL-3.0-only pragma solidity >=0.8.0; /// @notice Modern, minimalist, and gas efficient ERC-721 implementation. /// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC721.sol) /// @dev Note that balanceOf does not revert if passed the zero address, in defiance of the ERC. abstract contract ERC721 { /*/////////////////////////////////////////////////////////////// EVENTS //////////////////////////////////////////////////////////////*/ event Transfer(address indexed from, address indexed to, uint256 indexed id); event Approval(address indexed owner, address indexed spender, uint256 indexed id); event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /*/////////////////////////////////////////////////////////////// METADATA STORAGE/LOGIC //////////////////////////////////////////////////////////////*/ string public name; string public symbol; function tokenURI(uint256 id) public view virtual returns (string memory); /*/////////////////////////////////////////////////////////////// ERC721 STORAGE //////////////////////////////////////////////////////////////*/ mapping(address => uint256) public balanceOf; mapping(uint256 => address) public ownerOf; mapping(uint256 => address) public getApproved; mapping(address => mapping(address => bool)) public isApprovedForAll; /*/////////////////////////////////////////////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////*/ constructor(string memory _name, string memory _symbol) { name = _name; symbol = _symbol; } /*/////////////////////////////////////////////////////////////// ERC721 LOGIC //////////////////////////////////////////////////////////////*/ function approve(address spender, uint256 id) public virtual { address owner = ownerOf[id]; require(msg.sender == owner || isApprovedForAll[owner][msg.sender], "NOT_AUTHORIZED"); getApproved[id] = spender; emit Approval(owner, spender, id); } function setApprovalForAll(address operator, bool approved) public virtual { isApprovedForAll[msg.sender][operator] = approved; emit ApprovalForAll(msg.sender, operator, approved); } function transferFrom( address from, address to, uint256 id ) public virtual { require(from == ownerOf[id], "WRONG_FROM"); require(to != address(0), "INVALID_RECIPIENT"); require( msg.sender == from || msg.sender == getApproved[id] || isApprovedForAll[from][msg.sender], "NOT_AUTHORIZED" ); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. unchecked { balanceOf[from]--; balanceOf[to]++; } ownerOf[id] = to; delete getApproved[id]; emit Transfer(from, to, id); } function safeTransferFrom( address from, address to, uint256 id ) public virtual { transferFrom(from, to, id); require( to.code.length == 0 || ERC721TokenReceiver(to).onERC721Received(msg.sender, from, id, "") == ERC721TokenReceiver.onERC721Received.selector, "UNSAFE_RECIPIENT" ); } function safeTransferFrom( address from, address to, uint256 id, bytes memory data ) public virtual { transferFrom(from, to, id); require( to.code.length == 0 || ERC721TokenReceiver(to).onERC721Received(msg.sender, from, id, data) == ERC721TokenReceiver.onERC721Received.selector, "UNSAFE_RECIPIENT" ); } /*/////////////////////////////////////////////////////////////// ERC165 LOGIC //////////////////////////////////////////////////////////////*/ function supportsInterface(bytes4 interfaceId) public pure virtual returns (bool) { return interfaceId == 0x01ffc9a7 || // ERC165 Interface ID for ERC165 interfaceId == 0x80ac58cd || // ERC165 Interface ID for ERC721 interfaceId == 0x5b5e139f; // ERC165 Interface ID for ERC721Metadata } /*/////////////////////////////////////////////////////////////// INTERNAL MINT/BURN LOGIC //////////////////////////////////////////////////////////////*/ function _mint(address to, uint256 id) internal virtual { require(to != address(0), "INVALID_RECIPIENT"); require(ownerOf[id] == address(0), "ALREADY_MINTED"); // Counter overflow is incredibly unrealistic. unchecked { balanceOf[to]++; } ownerOf[id] = to; emit Transfer(address(0), to, id); } function _burn(uint256 id) internal virtual { address owner = ownerOf[id]; require(ownerOf[id] != address(0), "NOT_MINTED"); // Ownership check above ensures no underflow. unchecked { balanceOf[owner]--; } delete ownerOf[id]; delete getApproved[id]; emit Transfer(owner, address(0), id); } /*/////////////////////////////////////////////////////////////// INTERNAL SAFE MINT LOGIC //////////////////////////////////////////////////////////////*/ function _safeMint(address to, uint256 id) internal virtual { _mint(to, id); require( to.code.length == 0 || ERC721TokenReceiver(to).onERC721Received(msg.sender, address(0), id, "") == ERC721TokenReceiver.onERC721Received.selector, "UNSAFE_RECIPIENT" ); } function _safeMint( address to, uint256 id, bytes memory data ) internal virtual { _mint(to, id); require( to.code.length == 0 || ERC721TokenReceiver(to).onERC721Received(msg.sender, address(0), id, data) == ERC721TokenReceiver.onERC721Received.selector, "UNSAFE_RECIPIENT" ); } } /// @notice A generic interface for a contract which properly accepts ERC721 tokens. /// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC721.sol) interface ERC721TokenReceiver { function onERC721Received( address operator, address from, uint256 id, bytes calldata data ) external returns (bytes4); }
{ "optimizer": { "enabled": true, "runs": 999999 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "metadata": { "useLiteralContent": true }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract IBentoBoxMinimal","name":"_bentoBox","type":"address"},{"internalType":"address","name":"_wETH","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"InvalidStart","type":"error"},{"inputs":[],"name":"InvalidStepSetting","type":"error"},{"inputs":[],"name":"NotOwner","type":"error"},{"inputs":[],"name":"NotVestReceiver","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"vestId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"ownerAmount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"recipientAmount","type":"uint256"},{"indexed":false,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"bool","name":"toBentoBox","type":"bool"}],"name":"CancelVesting","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"vestId","type":"uint256"},{"indexed":false,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint32","name":"start","type":"uint32"},{"indexed":false,"internalType":"uint32","name":"cliffDuration","type":"uint32"},{"indexed":false,"internalType":"uint32","name":"stepDuration","type":"uint32"},{"indexed":false,"internalType":"uint32","name":"steps","type":"uint32"},{"indexed":false,"internalType":"uint128","name":"cliffShares","type":"uint128"},{"indexed":false,"internalType":"uint128","name":"stepShares","type":"uint128"},{"indexed":false,"internalType":"bool","name":"fromBentoBox","type":"bool"}],"name":"CreateVesting","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"vestId","type":"uint256"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"LogUpdateOwner","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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"vestId","type":"uint256"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"bool","name":"toBentoBox","type":"bool"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"PERCENTAGE_PRECISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bentoBox","outputs":[{"internalType":"contract IBentoBoxMinimal","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint32","name":"start","type":"uint32"},{"internalType":"uint32","name":"cliffDuration","type":"uint32"},{"internalType":"uint32","name":"stepDuration","type":"uint32"},{"internalType":"uint32","name":"steps","type":"uint32"},{"internalType":"uint128","name":"stepPercentage","type":"uint128"},{"internalType":"uint128","name":"amount","type":"uint128"},{"internalType":"bool","name":"fromBentoBox","type":"bool"}],"internalType":"struct IFuroVesting.VestParams","name":"vestParams","type":"tuple"}],"name":"createVesting","outputs":[{"internalType":"uint256","name":"depositedShares","type":"uint256"},{"internalType":"uint256","name":"vestId","type":"uint256"},{"internalType":"uint128","name":"stepShares","type":"uint128"},{"internalType":"uint128","name":"cliffShares","type":"uint128"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes[]","name":"data","type":"bytes[]"}],"name":"multicall","outputs":[{"internalType":"bytes[]","name":"results","type":"bytes[]"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"ownerOf","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":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bool","name":"approved","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"setBentoBoxApproval","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_fetcher","type":"address"}],"name":"setTokenURIFetcher","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"vestId","type":"uint256"},{"internalType":"bool","name":"toBentoBox","type":"bool"}],"name":"stopVesting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenURIFetcher","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"},{"internalType":"bool","name":"direct","type":"bool"},{"internalType":"bool","name":"renounce","type":"bool"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"vestId","type":"uint256"},{"internalType":"address","name":"newOwner","type":"address"}],"name":"updateOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"vestId","type":"uint256"}],"name":"vestBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vestIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"vests","outputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint32","name":"start","type":"uint32"},{"internalType":"uint32","name":"cliffDuration","type":"uint32"},{"internalType":"uint32","name":"stepDuration","type":"uint32"},{"internalType":"uint32","name":"steps","type":"uint32"},{"internalType":"uint128","name":"cliffShares","type":"uint128"},{"internalType":"uint128","name":"stepShares","type":"uint128"},{"internalType":"uint128","name":"claimed","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"vestId","type":"uint256"},{"internalType":"bytes","name":"taskData","type":"bytes"},{"internalType":"bool","name":"toBentoBox","type":"bool"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60c06040523480156200001157600080fd5b50604051620039ac380380620039ac833981016040819052620000349162000216565b604080518082018252600c81526b4675726f2056657374696e6760a01b60208083019182528351808501909452600884526711955493d59154d560c21b908401528151919291620000889160009162000157565b5080516200009e90600190602084019062000157565b5050600680546001600160a01b031916339081179091556040519091506000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36001600160a01b03808316608081905290821660a0526001600a556040805163577268d960e11b8152905163aee4d1b29160048082019260009290919082900301818387803b1580156200013657600080fd5b505af11580156200014b573d6000803e3d6000fd5b50505050505062000292565b828054620001659062000255565b90600052602060002090601f016020900481019282620001895760008555620001d4565b82601f10620001a457805160ff1916838001178555620001d4565b82800160010185558215620001d4579182015b82811115620001d4578251825591602001919060010190620001b7565b50620001e2929150620001e6565b5090565b5b80821115620001e25760008155600101620001e7565b6001600160a01b03811681146200021357600080fd5b50565b600080604083850312156200022a57600080fd5b82516200023781620001fd565b60208401519092506200024a81620001fd565b809150509250929050565b600181811c908216806200026a57607f821691505b602082108114156200028c57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a0516136c3620002e9600039600081816107f601526121f40152600081816105a4015281816115910152818161269a0152818161275e0152818161282f015281816128f9015261297301526136c36000f3fe6080604052600436106101d85760003560e01c80636b2ace8711610102578063b3a2b2cf11610095578063e30c397811610064578063e30c397814610731578063e985e9c51461075e578063e9d163c914610799578063f2428621146107e457600080fd5b8063b3a2b2cf146106b5578063b88d4fde146106d5578063c87b56dd146106f5578063e256888f1461071557600080fd5b806395d89b41116100d157806395d89b4114610640578063a203db8e14610655578063a22cb46514610675578063ac9650d81461069557600080fd5b80636b2ace871461059257806370a08231146105c65780637192711f146105f35780638da5cb5b1461061357600080fd5b806323b872dd1161017a578063489bb0b211610149578063489bb0b2146103af5780634e71e0c8146103c257806351def556146103d75780636352211e1461054f57600080fd5b806323b872dd146103395780632bcea7361461035957806340e76eff1461036f57806342842e0e1461038f57600080fd5b806307d88aad116101b657806307d88aad14610256578063081812fc146102a8578063095ea7b3146102eb57806319f771711461030b57600080fd5b806301ffc9a7146101dd57806306fdde0314610212578063078dfbe714610234575b600080fd5b3480156101e957600080fd5b506101fd6101f8366004612c41565b610818565b60405190151581526020015b60405180910390f35b34801561021e57600080fd5b506102276108fd565b6040516102099190612cd4565b34801561024057600080fd5b5061025461024f366004612d1e565b61098b565b005b34801561026257600080fd5b506008546102839073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610209565b3480156102b457600080fd5b506102836102c3366004612d63565b60046020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156102f757600080fd5b50610254610306366004612d7c565b610b7c565b34801561031757600080fd5b5061032b610326366004612d63565b610cc6565b604051908152602001610209565b34801561034557600080fd5b50610254610354366004612da8565b610ded565b34801561036557600080fd5b5061032b600a5481565b34801561037b57600080fd5b5061025461038a366004612de9565b6110b4565b34801561039b57600080fd5b506102546103aa366004612da8565b6113c2565b6102546103bd366004612e76565b611527565b3480156103ce57600080fd5b506102546115f4565b3480156103e357600080fd5b506104d06103f2366004612d63565b600960205260009081526040902080546001820154600283015460039093015473ffffffffffffffffffffffffffffffffffffffff928316939282169263ffffffff740100000000000000000000000000000000000000008404811693780100000000000000000000000000000000000000000000000081048216937c0100000000000000000000000000000000000000000000000000000000909104821692918216916fffffffffffffffffffffffffffffffff640100000000909104811691808216917001000000000000000000000000000000009091041689565b6040805173ffffffffffffffffffffffffffffffffffffffff9a8b1681529990981660208a015263ffffffff96871697890197909752938516606088015291841660808701529290921660a08501526fffffffffffffffffffffffffffffffff91821660c0850152811660e08401521661010082015261012001610209565b34801561055b57600080fd5b5061028361056a366004612d63565b60036020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b34801561059e57600080fd5b506102837f000000000000000000000000000000000000000000000000000000000000000081565b3480156105d257600080fd5b5061032b6105e1366004612ed5565b60026020526000908152604090205481565b3480156105ff57600080fd5b5061025461060e366004612ef2565b61170b565b34801561061f57600080fd5b506006546102839073ffffffffffffffffffffffffffffffffffffffff1681565b34801561064c57600080fd5b506102276117d9565b34801561066157600080fd5b50610254610670366004612f22565b6117e6565b34801561068157600080fd5b50610254610690366004612f4e565b611aa9565b6106a86106a3366004612f7a565b611b40565b6040516102099190612fef565b3480156106c157600080fd5b506102546106d0366004612ed5565b611cb2565b3480156106e157600080fd5b506102546106f0366004613133565b611d7a565b34801561070157600080fd5b50610227610710366004612d63565b611ecb565b34801561072157600080fd5b5061032b670de0b6b3a764000081565b34801561073d57600080fd5b506007546102839073ffffffffffffffffffffffffffffffffffffffff1681565b34801561076a57600080fd5b506101fd6107793660046131e2565b600560209081526000928352604080842090915290825290205460ff1681565b6107ac6107a7366004613210565b611f81565b6040805194855260208501939093526fffffffffffffffffffffffffffffffff91821692840192909252166060820152608001610209565b3480156107f057600080fd5b506102837f000000000000000000000000000000000000000000000000000000000000000081565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614806108ab57507f80ac58cd000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b806108f757507f5b5e139f000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000805461090a90613229565b80601f016020809104026020016040519081016040528092919081815260200182805461093690613229565b80156109835780601f1061095857610100808354040283529160200191610983565b820191906000526020600020905b81548152906001019060200180831161096657829003601f168201915b505050505081565b60065473ffffffffffffffffffffffffffffffffffffffff163314610a11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b8115610b365773ffffffffffffffffffffffffffffffffffffffff8316151580610a385750805b610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4f776e61626c653a207a65726f206164647265737300000000000000000000006044820152606401610a08565b60065460405173ffffffffffffffffffffffffffffffffffffffff8086169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36006805473ffffffffffffffffffffffffffffffffffffffff85167fffffffffffffffffffffffff000000000000000000000000000000000000000091821617909155600780549091169055505050565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85161790555b505050565b60008181526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1633811480610bdf575073ffffffffffffffffffffffffffffffffffffffff8116600090815260056020908152604080832033845290915290205460ff165b610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a45440000000000000000000000000000000000006044820152606401610a08565b60008281526004602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff87811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000818152600960209081526040808320815161012081018352815473ffffffffffffffffffffffffffffffffffffffff908116825260018301549081169482019490945263ffffffff74010000000000000000000000000000000000000000850481169382019390935278010000000000000000000000000000000000000000000000008404831660608201527c010000000000000000000000000000000000000000000000000000000090930482166080840152600281015491821660a08401526fffffffffffffffffffffffffffffffff640100000000909204821660c08401526003015480821660e08401527001000000000000000000000000000000009004166101008201819052610ddc82612584565b610de691906132a6565b9392505050565b60008181526003602052604090205473ffffffffffffffffffffffffffffffffffffffff848116911614610e7d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f57524f4e475f46524f4d000000000000000000000000000000000000000000006044820152606401610a08565b73ffffffffffffffffffffffffffffffffffffffff8216610efa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f494e56414c49445f524543495049454e540000000000000000000000000000006044820152606401610a08565b3373ffffffffffffffffffffffffffffffffffffffff84161480610f41575060008181526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1633145b80610f7c575073ffffffffffffffffffffffffffffffffffffffff8316600090815260056020908152604080832033845290915290205460ff165b610fe2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a45440000000000000000000000000000000000006044820152606401610a08565b73ffffffffffffffffffffffffffffffffffffffff808416600081815260026020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019055938616808352848320805460010190558583526003825284832080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081168317909155600490925284832080549092169091559251849392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600084815260096020908152604080832060039092529091205473ffffffffffffffffffffffffffffffffffffffff1633811461111d576040517fe1c6117100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60038201546040805161012081018252845473ffffffffffffffffffffffffffffffffffffffff90811682526001860154908116602083015274010000000000000000000000000000000000000000810463ffffffff9081169383019390935278010000000000000000000000000000000000000000000000008104831660608301527c0100000000000000000000000000000000000000000000000000000000900482166080820152600285015491821660a08201526fffffffffffffffffffffffffffffffff640100000000909204821660c082015281831660e082015270010000000000000000000000000000000090920416610100820181905260009161122790612584565b61123191906132a6565b905080611240575050506113bc565b808360030160108282829054906101000a90046fffffffffffffffffffffffffffffffff1661126f91906132bd565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506112d68360010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630848488612638565b8415611363576040517f330df28200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83169063330df2829061133090899089906004016132f1565b600060405180830381600087803b15801561134a57600080fd5b505af115801561135e573d6000803e3d6000fd5b505050505b60018301546040518515158152829173ffffffffffffffffffffffffffffffffffffffff169089907fff942d249898505febb2a9a00118e27567c084b9497d0aa3ba5e332c235b4f389060200160405180910390a45050505b50505050565b6113cd838383610ded565b73ffffffffffffffffffffffffffffffffffffffff82163b15806114c157506040517f150b7a020000000000000000000000000000000000000000000000000000000080825233600483015273ffffffffffffffffffffffffffffffffffffffff858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a4016020604051808303816000875af1158015611479573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149d919061333e565b7fffffffff0000000000000000000000000000000000000000000000000000000016145b610b77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f554e534146455f524543495049454e54000000000000000000000000000000006044820152606401610a08565b6040517fc0a47c9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152306024830152851515604483015260ff851660648301526084820184905260a482018390527f0000000000000000000000000000000000000000000000000000000000000000169063c0a47c939060c401600060405180830381600087803b1580156115d557600080fd5b505af11580156115e9573d6000803e3d6000fd5b505050505050505050565b60075473ffffffffffffffffffffffffffffffffffffffff16338114611676576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c657220213d2070656e64696e67206f776e65726044820152606401610a08565b60065460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36006805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179055600780549091169055565b6000828152600960205260409020805473ffffffffffffffffffffffffffffffffffffffff163314611769576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117825560405184907fca0251ba80971adc7e92434b097ca40450b2a317013c51c5c5cb6ae74500bb0090600090a3505050565b6001805461090a90613229565b600082815260096020908152604091829020825161012081018452815473ffffffffffffffffffffffffffffffffffffffff90811680835260018401549182169483019490945263ffffffff74010000000000000000000000000000000000000000820481169583019590955278010000000000000000000000000000000000000000000000008104851660608301527c0100000000000000000000000000000000000000000000000000000000900484166080820152600282015493841660a08201526fffffffffffffffffffffffffffffffff640100000000909404841660c082015260039091015480841660e08301527001000000000000000000000000000000009004909216610100830152331461192e576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061193982612584565b905060008261010001516fffffffffffffffffffffffffffffffff168261196091906132a6565b90506000828460e001518560a0015163ffffffff1661197f919061335b565b8560c0015161198e91906132bd565b6fffffffffffffffffffffffffffffffff166119aa91906132a6565b600087815260096020908152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081168255600182018590556002820180549091169055600390810184905588830151925290912054919250611a2d91309073ffffffffffffffffffffffffffffffffffffffff168589612638565b611a3e846020015130338489612638565b8181877f061c75052be1ee7232bc654d7f489af163c983bb99c5affe5e8fc2e5225cb577876020015189604051611a9992919073ffffffffffffffffffffffffffffffffffffffff9290921682521515602082015260400190565b60405180910390a4505050505050565b33600081815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b60608167ffffffffffffffff811115611b5b57611b5b61306f565b604051908082528060200260200182016040528015611b8e57816020015b6060815260200190600190039081611b795790505b50905060005b82811015611cab5760008030868685818110611bb257611bb2613393565b9050602002810190611bc491906133c2565b604051611bd292919061342e565b600060405180830381855af49150503d8060008114611c0d576040519150601f19603f3d011682016040523d82523d6000602084013e611c12565b606091505b509150915081611c7857604481511015611c2b57600080fd5b60048101905080806020019051810190611c45919061343e565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a089190612cd4565b80848481518110611c8b57611c8b613393565b602002602001018190525050508080611ca3906134ac565b915050611b94565b5092915050565b60065473ffffffffffffffffffffffffffffffffffffffff163314611d33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a08565b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b611d85848484610ded565b73ffffffffffffffffffffffffffffffffffffffff83163b1580611e6557506040517f150b7a02000000000000000000000000000000000000000000000000000000008082529073ffffffffffffffffffffffffffffffffffffffff85169063150b7a0290611dfe9033908990889088906004016134e5565b6020604051808303816000875af1158015611e1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e41919061333e565b7fffffffff0000000000000000000000000000000000000000000000000000000016145b6113bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f554e534146455f524543495049454e54000000000000000000000000000000006044820152606401610a08565b6008546040517fc981fac40000000000000000000000000000000000000000000000000000000081526004810183905260609173ffffffffffffffffffffffffffffffffffffffff169063c981fac490602401600060405180830381865afa158015611f3b573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108f7919081019061343e565b600080808042611f97606087016040880161352e565b63ffffffff161015611fd5576040517f38356e4c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b670de0b6b3a7640000611fee60e0870160c08801613554565b6fffffffffffffffffffffffffffffffff161115612038576040517fd276d51400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61204860a086016080870161352e565b63ffffffff16158061206d575061206560c0860160a0870161352e565b63ffffffff16155b156120a4576040517fd276d51400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120f06120b46020870187612ed5565b33306120c76101008a0160e08b01613554565b6fffffffffffffffffffffffffffffffff166120eb6101208b016101008c01613586565b6127d4565b9350670de0b6b3a76400008461210c60e0880160c08901613554565b6fffffffffffffffffffffffffffffffff1661212891906135a1565b61213291906135de565b915061214460c0860160a0870161352e565b6121549063ffffffff168361335b565b612170906fffffffffffffffffffffffffffffffff16856132a6565b600a80549192506000612182836134ac565b9091555092506121a161219b6040870160208801612ed5565b84612a61565b6040805161012081019091523381526020808201906000906121c590890189612ed5565b73ffffffffffffffffffffffffffffffffffffffff16146121f2576121ed6020880188612ed5565b612214565b7f00000000000000000000000000000000000000000000000000000000000000005b73ffffffffffffffffffffffffffffffffffffffff16815260200161223f606088016040890161352e565b63ffffffff16815260200161225a608088016060890161352e565b63ffffffff16815260200161227560a088016080890161352e565b63ffffffff16815260200161229060c0880160a0890161352e565b63ffffffff90811682526fffffffffffffffffffffffffffffffff80851660208085019190915286821660408086019190915260006060958601819052898152600983528190208651815473ffffffffffffffffffffffffffffffffffffffff9182167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216178355888501516001840180548b8701519a8c015160808d01518b167c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff918c167801000000000000000000000000000000000000000000000000029190911677ffffffffffffffffffffffffffffffffffffffffffffffff9c8c1674010000000000000000000000000000000000000000027fffffffffffffffff00000000000000000000000000000000000000000000000090931694909616939093171799909916929092179190911790965560a087015160028201805460c08a0151871664010000000002981691909616179590951790935560e085015161010090950151821670010000000000000000000000000000000002949091169390931760039092019190915561246891908701908701612ed5565b73ffffffffffffffffffffffffffffffffffffffff1633847f603bb53f65550199ed7346ba18d49bcb7ec77162b3167b272f8cd19b20d9510b6124ae60208a018a612ed5565b6124be60608b0160408c0161352e565b6124ce60808c0160608d0161352e565b6124de60a08d0160808e0161352e565b6124ee60c08e0160a08f0161352e565b898b8f6101000160208101906125049190613586565b6040805173ffffffffffffffffffffffffffffffffffffffff909916895263ffffffff97881660208a0152958716958801959095529285166060870152931660808501526fffffffffffffffffffffffffffffffff92831660a08501529190911660c0830152151560e08201526101000160405180910390a49193509193565b6000808260600151836040015161259b9190613619565b63ffffffff169050804210156125b15750919050565b60006125bd82426132a6565b905060006125ea8560a0015163ffffffff16866080015163ffffffff16846125e591906135de565b612bfa565b9050808560e001516fffffffffffffffffffffffffffffffff1661260e91906135a1565b8560c001516fffffffffffffffffffffffffffffffff1661262f9190613638565b95945050505050565b80156126fb576040517ff18d03cc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015285811660248301528481166044830152606482018490527f0000000000000000000000000000000000000000000000000000000000000000169063f18d03cc90608401600060405180830381600087803b1580156126de57600080fd5b505af11580156126f2573d6000803e3d6000fd5b505050506127cd565b6040517f97da6d3000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301528581166024830152848116604483015260006064830152608482018490527f000000000000000000000000000000000000000000000000000000000000000016906397da6d309060a40160408051808303816000875af11580156127a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127ca9190613650565b50505b5050505050565b6000811561295c576040517fda5139ca00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015260248201859052600060448301527f0000000000000000000000000000000000000000000000000000000000000000169063da5139ca90606401602060405180830381865afa158015612876573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061289a9190613674565b6040517ff18d03cc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015287811660248301528681166044830152606482018390529192507f00000000000000000000000000000000000000000000000000000000000000009091169063f18d03cc90608401600060405180830381600087803b15801561293f57600080fd5b505af1158015612953573d6000803e3d6000fd5b5050505061262f565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116906302b9446c908816156129a95760006129ab565b845b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff808b166004830152808a16602483015288166044820152606481018790526000608482015260a401604080518083038185885af1158015612a31573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a569190613650565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8216612ade576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f494e56414c49445f524543495049454e540000000000000000000000000000006044820152606401610a08565b60008181526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1615612b6a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f414c52454144595f4d494e5445440000000000000000000000000000000000006044820152606401610a08565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260026020908152604080832080546001019055848352600390915280822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000818310612c095781610de6565b5090919050565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114612c3e57600080fd5b50565b600060208284031215612c5357600080fd5b8135610de681612c10565b60005b83811015612c79578181015183820152602001612c61565b838111156113bc5750506000910152565b60008151808452612ca2816020860160208601612c5e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610de66020830184612c8a565b73ffffffffffffffffffffffffffffffffffffffff81168114612c3e57600080fd5b80358015158114612d1957600080fd5b919050565b600080600060608486031215612d3357600080fd5b8335612d3e81612ce7565b9250612d4c60208501612d09565b9150612d5a60408501612d09565b90509250925092565b600060208284031215612d7557600080fd5b5035919050565b60008060408385031215612d8f57600080fd5b8235612d9a81612ce7565b946020939093013593505050565b600080600060608486031215612dbd57600080fd5b8335612dc881612ce7565b92506020840135612dd881612ce7565b929592945050506040919091013590565b60008060008060608587031215612dff57600080fd5b84359350602085013567ffffffffffffffff80821115612e1e57600080fd5b818701915087601f830112612e3257600080fd5b813581811115612e4157600080fd5b886020828501011115612e5357600080fd5b602083019550809450505050612e6b60408601612d09565b905092959194509250565b600080600080600060a08688031215612e8e57600080fd5b8535612e9981612ce7565b9450612ea760208701612d09565b9350604086013560ff81168114612ebd57600080fd5b94979396509394606081013594506080013592915050565b600060208284031215612ee757600080fd5b8135610de681612ce7565b60008060408385031215612f0557600080fd5b823591506020830135612f1781612ce7565b809150509250929050565b60008060408385031215612f3557600080fd5b82359150612f4560208401612d09565b90509250929050565b60008060408385031215612f6157600080fd5b8235612f6c81612ce7565b9150612f4560208401612d09565b60008060208385031215612f8d57600080fd5b823567ffffffffffffffff80821115612fa557600080fd5b818501915085601f830112612fb957600080fd5b813581811115612fc857600080fd5b8660208260051b8501011115612fdd57600080fd5b60209290920196919550909350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015613062577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452613050858351612c8a565b94509285019290850190600101613016565b5092979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156130e5576130e561306f565b604052919050565b600067ffffffffffffffff8211156131075761310761306f565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b6000806000806080858703121561314957600080fd5b843561315481612ce7565b9350602085013561316481612ce7565b925060408501359150606085013567ffffffffffffffff81111561318757600080fd5b8501601f8101871361319857600080fd5b80356131ab6131a6826130ed565b61309e565b8181528860208385010111156131c057600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b600080604083850312156131f557600080fd5b823561320081612ce7565b91506020830135612f1781612ce7565b6000610120828403121561322357600080fd5b50919050565b600181811c9082168061323d57607f821691505b60208210811415613223577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156132b8576132b8613277565b500390565b60006fffffffffffffffffffffffffffffffff8083168185168083038211156132e8576132e8613277565b01949350505050565b60208152816020820152818360408301376000818301604090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101919050565b60006020828403121561335057600080fd5b8151610de681612c10565b60006fffffffffffffffffffffffffffffffff8083168185168183048111821515161561338a5761338a613277565b02949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126133f757600080fd5b83018035915067ffffffffffffffff82111561341257600080fd5b60200191503681900382131561342757600080fd5b9250929050565b8183823760009101908152919050565b60006020828403121561345057600080fd5b815167ffffffffffffffff81111561346757600080fd5b8201601f8101841361347857600080fd5b80516134866131a6826130ed565b81815285602083850101111561349b57600080fd5b61262f826020830160208601612c5e565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156134de576134de613277565b5060010190565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250836040830152608060608301526135246080830184612c8a565b9695505050505050565b60006020828403121561354057600080fd5b813563ffffffff81168114610de657600080fd5b60006020828403121561356657600080fd5b81356fffffffffffffffffffffffffffffffff81168114610de657600080fd5b60006020828403121561359857600080fd5b610de682612d09565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156135d9576135d9613277565b500290565b600082613614577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600063ffffffff8083168185168083038211156132e8576132e8613277565b6000821982111561364b5761364b613277565b500190565b6000806040838503121561366357600080fd5b505080516020909101519092909150565b60006020828403121561368657600080fd5b505191905056fea2646970667358221220a2531ca023eb50ca3dde83ced20cfa01768dcc3c81b0e4f9a744260954a2118164736f6c634300080a0033000000000000000000000000f5bce5077908a1b7370b9ae04adc565ebd643966000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Deployed Bytecode
0x6080604052600436106101d85760003560e01c80636b2ace8711610102578063b3a2b2cf11610095578063e30c397811610064578063e30c397814610731578063e985e9c51461075e578063e9d163c914610799578063f2428621146107e457600080fd5b8063b3a2b2cf146106b5578063b88d4fde146106d5578063c87b56dd146106f5578063e256888f1461071557600080fd5b806395d89b41116100d157806395d89b4114610640578063a203db8e14610655578063a22cb46514610675578063ac9650d81461069557600080fd5b80636b2ace871461059257806370a08231146105c65780637192711f146105f35780638da5cb5b1461061357600080fd5b806323b872dd1161017a578063489bb0b211610149578063489bb0b2146103af5780634e71e0c8146103c257806351def556146103d75780636352211e1461054f57600080fd5b806323b872dd146103395780632bcea7361461035957806340e76eff1461036f57806342842e0e1461038f57600080fd5b806307d88aad116101b657806307d88aad14610256578063081812fc146102a8578063095ea7b3146102eb57806319f771711461030b57600080fd5b806301ffc9a7146101dd57806306fdde0314610212578063078dfbe714610234575b600080fd5b3480156101e957600080fd5b506101fd6101f8366004612c41565b610818565b60405190151581526020015b60405180910390f35b34801561021e57600080fd5b506102276108fd565b6040516102099190612cd4565b34801561024057600080fd5b5061025461024f366004612d1e565b61098b565b005b34801561026257600080fd5b506008546102839073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610209565b3480156102b457600080fd5b506102836102c3366004612d63565b60046020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156102f757600080fd5b50610254610306366004612d7c565b610b7c565b34801561031757600080fd5b5061032b610326366004612d63565b610cc6565b604051908152602001610209565b34801561034557600080fd5b50610254610354366004612da8565b610ded565b34801561036557600080fd5b5061032b600a5481565b34801561037b57600080fd5b5061025461038a366004612de9565b6110b4565b34801561039b57600080fd5b506102546103aa366004612da8565b6113c2565b6102546103bd366004612e76565b611527565b3480156103ce57600080fd5b506102546115f4565b3480156103e357600080fd5b506104d06103f2366004612d63565b600960205260009081526040902080546001820154600283015460039093015473ffffffffffffffffffffffffffffffffffffffff928316939282169263ffffffff740100000000000000000000000000000000000000008404811693780100000000000000000000000000000000000000000000000081048216937c0100000000000000000000000000000000000000000000000000000000909104821692918216916fffffffffffffffffffffffffffffffff640100000000909104811691808216917001000000000000000000000000000000009091041689565b6040805173ffffffffffffffffffffffffffffffffffffffff9a8b1681529990981660208a015263ffffffff96871697890197909752938516606088015291841660808701529290921660a08501526fffffffffffffffffffffffffffffffff91821660c0850152811660e08401521661010082015261012001610209565b34801561055b57600080fd5b5061028361056a366004612d63565b60036020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b34801561059e57600080fd5b506102837f000000000000000000000000f5bce5077908a1b7370b9ae04adc565ebd64396681565b3480156105d257600080fd5b5061032b6105e1366004612ed5565b60026020526000908152604090205481565b3480156105ff57600080fd5b5061025461060e366004612ef2565b61170b565b34801561061f57600080fd5b506006546102839073ffffffffffffffffffffffffffffffffffffffff1681565b34801561064c57600080fd5b506102276117d9565b34801561066157600080fd5b50610254610670366004612f22565b6117e6565b34801561068157600080fd5b50610254610690366004612f4e565b611aa9565b6106a86106a3366004612f7a565b611b40565b6040516102099190612fef565b3480156106c157600080fd5b506102546106d0366004612ed5565b611cb2565b3480156106e157600080fd5b506102546106f0366004613133565b611d7a565b34801561070157600080fd5b50610227610710366004612d63565b611ecb565b34801561072157600080fd5b5061032b670de0b6b3a764000081565b34801561073d57600080fd5b506007546102839073ffffffffffffffffffffffffffffffffffffffff1681565b34801561076a57600080fd5b506101fd6107793660046131e2565b600560209081526000928352604080842090915290825290205460ff1681565b6107ac6107a7366004613210565b611f81565b6040805194855260208501939093526fffffffffffffffffffffffffffffffff91821692840192909252166060820152608001610209565b3480156107f057600080fd5b506102837f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614806108ab57507f80ac58cd000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b806108f757507f5b5e139f000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000805461090a90613229565b80601f016020809104026020016040519081016040528092919081815260200182805461093690613229565b80156109835780601f1061095857610100808354040283529160200191610983565b820191906000526020600020905b81548152906001019060200180831161096657829003601f168201915b505050505081565b60065473ffffffffffffffffffffffffffffffffffffffff163314610a11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b8115610b365773ffffffffffffffffffffffffffffffffffffffff8316151580610a385750805b610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4f776e61626c653a207a65726f206164647265737300000000000000000000006044820152606401610a08565b60065460405173ffffffffffffffffffffffffffffffffffffffff8086169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36006805473ffffffffffffffffffffffffffffffffffffffff85167fffffffffffffffffffffffff000000000000000000000000000000000000000091821617909155600780549091169055505050565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85161790555b505050565b60008181526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1633811480610bdf575073ffffffffffffffffffffffffffffffffffffffff8116600090815260056020908152604080832033845290915290205460ff165b610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a45440000000000000000000000000000000000006044820152606401610a08565b60008281526004602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff87811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000818152600960209081526040808320815161012081018352815473ffffffffffffffffffffffffffffffffffffffff908116825260018301549081169482019490945263ffffffff74010000000000000000000000000000000000000000850481169382019390935278010000000000000000000000000000000000000000000000008404831660608201527c010000000000000000000000000000000000000000000000000000000090930482166080840152600281015491821660a08401526fffffffffffffffffffffffffffffffff640100000000909204821660c08401526003015480821660e08401527001000000000000000000000000000000009004166101008201819052610ddc82612584565b610de691906132a6565b9392505050565b60008181526003602052604090205473ffffffffffffffffffffffffffffffffffffffff848116911614610e7d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f57524f4e475f46524f4d000000000000000000000000000000000000000000006044820152606401610a08565b73ffffffffffffffffffffffffffffffffffffffff8216610efa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f494e56414c49445f524543495049454e540000000000000000000000000000006044820152606401610a08565b3373ffffffffffffffffffffffffffffffffffffffff84161480610f41575060008181526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1633145b80610f7c575073ffffffffffffffffffffffffffffffffffffffff8316600090815260056020908152604080832033845290915290205460ff165b610fe2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a45440000000000000000000000000000000000006044820152606401610a08565b73ffffffffffffffffffffffffffffffffffffffff808416600081815260026020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019055938616808352848320805460010190558583526003825284832080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081168317909155600490925284832080549092169091559251849392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600084815260096020908152604080832060039092529091205473ffffffffffffffffffffffffffffffffffffffff1633811461111d576040517fe1c6117100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60038201546040805161012081018252845473ffffffffffffffffffffffffffffffffffffffff90811682526001860154908116602083015274010000000000000000000000000000000000000000810463ffffffff9081169383019390935278010000000000000000000000000000000000000000000000008104831660608301527c0100000000000000000000000000000000000000000000000000000000900482166080820152600285015491821660a08201526fffffffffffffffffffffffffffffffff640100000000909204821660c082015281831660e082015270010000000000000000000000000000000090920416610100820181905260009161122790612584565b61123191906132a6565b905080611240575050506113bc565b808360030160108282829054906101000a90046fffffffffffffffffffffffffffffffff1661126f91906132bd565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506112d68360010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630848488612638565b8415611363576040517f330df28200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83169063330df2829061133090899089906004016132f1565b600060405180830381600087803b15801561134a57600080fd5b505af115801561135e573d6000803e3d6000fd5b505050505b60018301546040518515158152829173ffffffffffffffffffffffffffffffffffffffff169089907fff942d249898505febb2a9a00118e27567c084b9497d0aa3ba5e332c235b4f389060200160405180910390a45050505b50505050565b6113cd838383610ded565b73ffffffffffffffffffffffffffffffffffffffff82163b15806114c157506040517f150b7a020000000000000000000000000000000000000000000000000000000080825233600483015273ffffffffffffffffffffffffffffffffffffffff858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a4016020604051808303816000875af1158015611479573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149d919061333e565b7fffffffff0000000000000000000000000000000000000000000000000000000016145b610b77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f554e534146455f524543495049454e54000000000000000000000000000000006044820152606401610a08565b6040517fc0a47c9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152306024830152851515604483015260ff851660648301526084820184905260a482018390527f000000000000000000000000f5bce5077908a1b7370b9ae04adc565ebd643966169063c0a47c939060c401600060405180830381600087803b1580156115d557600080fd5b505af11580156115e9573d6000803e3d6000fd5b505050505050505050565b60075473ffffffffffffffffffffffffffffffffffffffff16338114611676576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c657220213d2070656e64696e67206f776e65726044820152606401610a08565b60065460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36006805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179055600780549091169055565b6000828152600960205260409020805473ffffffffffffffffffffffffffffffffffffffff163314611769576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117825560405184907fca0251ba80971adc7e92434b097ca40450b2a317013c51c5c5cb6ae74500bb0090600090a3505050565b6001805461090a90613229565b600082815260096020908152604091829020825161012081018452815473ffffffffffffffffffffffffffffffffffffffff90811680835260018401549182169483019490945263ffffffff74010000000000000000000000000000000000000000820481169583019590955278010000000000000000000000000000000000000000000000008104851660608301527c0100000000000000000000000000000000000000000000000000000000900484166080820152600282015493841660a08201526fffffffffffffffffffffffffffffffff640100000000909404841660c082015260039091015480841660e08301527001000000000000000000000000000000009004909216610100830152331461192e576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061193982612584565b905060008261010001516fffffffffffffffffffffffffffffffff168261196091906132a6565b90506000828460e001518560a0015163ffffffff1661197f919061335b565b8560c0015161198e91906132bd565b6fffffffffffffffffffffffffffffffff166119aa91906132a6565b600087815260096020908152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081168255600182018590556002820180549091169055600390810184905588830151925290912054919250611a2d91309073ffffffffffffffffffffffffffffffffffffffff168589612638565b611a3e846020015130338489612638565b8181877f061c75052be1ee7232bc654d7f489af163c983bb99c5affe5e8fc2e5225cb577876020015189604051611a9992919073ffffffffffffffffffffffffffffffffffffffff9290921682521515602082015260400190565b60405180910390a4505050505050565b33600081815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b60608167ffffffffffffffff811115611b5b57611b5b61306f565b604051908082528060200260200182016040528015611b8e57816020015b6060815260200190600190039081611b795790505b50905060005b82811015611cab5760008030868685818110611bb257611bb2613393565b9050602002810190611bc491906133c2565b604051611bd292919061342e565b600060405180830381855af49150503d8060008114611c0d576040519150601f19603f3d011682016040523d82523d6000602084013e611c12565b606091505b509150915081611c7857604481511015611c2b57600080fd5b60048101905080806020019051810190611c45919061343e565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a089190612cd4565b80848481518110611c8b57611c8b613393565b602002602001018190525050508080611ca3906134ac565b915050611b94565b5092915050565b60065473ffffffffffffffffffffffffffffffffffffffff163314611d33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a08565b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b611d85848484610ded565b73ffffffffffffffffffffffffffffffffffffffff83163b1580611e6557506040517f150b7a02000000000000000000000000000000000000000000000000000000008082529073ffffffffffffffffffffffffffffffffffffffff85169063150b7a0290611dfe9033908990889088906004016134e5565b6020604051808303816000875af1158015611e1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e41919061333e565b7fffffffff0000000000000000000000000000000000000000000000000000000016145b6113bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f554e534146455f524543495049454e54000000000000000000000000000000006044820152606401610a08565b6008546040517fc981fac40000000000000000000000000000000000000000000000000000000081526004810183905260609173ffffffffffffffffffffffffffffffffffffffff169063c981fac490602401600060405180830381865afa158015611f3b573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108f7919081019061343e565b600080808042611f97606087016040880161352e565b63ffffffff161015611fd5576040517f38356e4c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b670de0b6b3a7640000611fee60e0870160c08801613554565b6fffffffffffffffffffffffffffffffff161115612038576040517fd276d51400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61204860a086016080870161352e565b63ffffffff16158061206d575061206560c0860160a0870161352e565b63ffffffff16155b156120a4576040517fd276d51400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120f06120b46020870187612ed5565b33306120c76101008a0160e08b01613554565b6fffffffffffffffffffffffffffffffff166120eb6101208b016101008c01613586565b6127d4565b9350670de0b6b3a76400008461210c60e0880160c08901613554565b6fffffffffffffffffffffffffffffffff1661212891906135a1565b61213291906135de565b915061214460c0860160a0870161352e565b6121549063ffffffff168361335b565b612170906fffffffffffffffffffffffffffffffff16856132a6565b600a80549192506000612182836134ac565b9091555092506121a161219b6040870160208801612ed5565b84612a61565b6040805161012081019091523381526020808201906000906121c590890189612ed5565b73ffffffffffffffffffffffffffffffffffffffff16146121f2576121ed6020880188612ed5565b612214565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc25b73ffffffffffffffffffffffffffffffffffffffff16815260200161223f606088016040890161352e565b63ffffffff16815260200161225a608088016060890161352e565b63ffffffff16815260200161227560a088016080890161352e565b63ffffffff16815260200161229060c0880160a0890161352e565b63ffffffff90811682526fffffffffffffffffffffffffffffffff80851660208085019190915286821660408086019190915260006060958601819052898152600983528190208651815473ffffffffffffffffffffffffffffffffffffffff9182167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216178355888501516001840180548b8701519a8c015160808d01518b167c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff918c167801000000000000000000000000000000000000000000000000029190911677ffffffffffffffffffffffffffffffffffffffffffffffff9c8c1674010000000000000000000000000000000000000000027fffffffffffffffff00000000000000000000000000000000000000000000000090931694909616939093171799909916929092179190911790965560a087015160028201805460c08a0151871664010000000002981691909616179590951790935560e085015161010090950151821670010000000000000000000000000000000002949091169390931760039092019190915561246891908701908701612ed5565b73ffffffffffffffffffffffffffffffffffffffff1633847f603bb53f65550199ed7346ba18d49bcb7ec77162b3167b272f8cd19b20d9510b6124ae60208a018a612ed5565b6124be60608b0160408c0161352e565b6124ce60808c0160608d0161352e565b6124de60a08d0160808e0161352e565b6124ee60c08e0160a08f0161352e565b898b8f6101000160208101906125049190613586565b6040805173ffffffffffffffffffffffffffffffffffffffff909916895263ffffffff97881660208a0152958716958801959095529285166060870152931660808501526fffffffffffffffffffffffffffffffff92831660a08501529190911660c0830152151560e08201526101000160405180910390a49193509193565b6000808260600151836040015161259b9190613619565b63ffffffff169050804210156125b15750919050565b60006125bd82426132a6565b905060006125ea8560a0015163ffffffff16866080015163ffffffff16846125e591906135de565b612bfa565b9050808560e001516fffffffffffffffffffffffffffffffff1661260e91906135a1565b8560c001516fffffffffffffffffffffffffffffffff1661262f9190613638565b95945050505050565b80156126fb576040517ff18d03cc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015285811660248301528481166044830152606482018490527f000000000000000000000000f5bce5077908a1b7370b9ae04adc565ebd643966169063f18d03cc90608401600060405180830381600087803b1580156126de57600080fd5b505af11580156126f2573d6000803e3d6000fd5b505050506127cd565b6040517f97da6d3000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301528581166024830152848116604483015260006064830152608482018490527f000000000000000000000000f5bce5077908a1b7370b9ae04adc565ebd64396616906397da6d309060a40160408051808303816000875af11580156127a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127ca9190613650565b50505b5050505050565b6000811561295c576040517fda5139ca00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015260248201859052600060448301527f000000000000000000000000f5bce5077908a1b7370b9ae04adc565ebd643966169063da5139ca90606401602060405180830381865afa158015612876573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061289a9190613674565b6040517ff18d03cc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015287811660248301528681166044830152606482018390529192507f000000000000000000000000f5bce5077908a1b7370b9ae04adc565ebd6439669091169063f18d03cc90608401600060405180830381600087803b15801561293f57600080fd5b505af1158015612953573d6000803e3d6000fd5b5050505061262f565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000f5bce5077908a1b7370b9ae04adc565ebd6439668116906302b9446c908816156129a95760006129ab565b845b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff808b166004830152808a16602483015288166044820152606481018790526000608482015260a401604080518083038185885af1158015612a31573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a569190613650565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8216612ade576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f494e56414c49445f524543495049454e540000000000000000000000000000006044820152606401610a08565b60008181526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1615612b6a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f414c52454144595f4d494e5445440000000000000000000000000000000000006044820152606401610a08565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260026020908152604080832080546001019055848352600390915280822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000818310612c095781610de6565b5090919050565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114612c3e57600080fd5b50565b600060208284031215612c5357600080fd5b8135610de681612c10565b60005b83811015612c79578181015183820152602001612c61565b838111156113bc5750506000910152565b60008151808452612ca2816020860160208601612c5e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610de66020830184612c8a565b73ffffffffffffffffffffffffffffffffffffffff81168114612c3e57600080fd5b80358015158114612d1957600080fd5b919050565b600080600060608486031215612d3357600080fd5b8335612d3e81612ce7565b9250612d4c60208501612d09565b9150612d5a60408501612d09565b90509250925092565b600060208284031215612d7557600080fd5b5035919050565b60008060408385031215612d8f57600080fd5b8235612d9a81612ce7565b946020939093013593505050565b600080600060608486031215612dbd57600080fd5b8335612dc881612ce7565b92506020840135612dd881612ce7565b929592945050506040919091013590565b60008060008060608587031215612dff57600080fd5b84359350602085013567ffffffffffffffff80821115612e1e57600080fd5b818701915087601f830112612e3257600080fd5b813581811115612e4157600080fd5b886020828501011115612e5357600080fd5b602083019550809450505050612e6b60408601612d09565b905092959194509250565b600080600080600060a08688031215612e8e57600080fd5b8535612e9981612ce7565b9450612ea760208701612d09565b9350604086013560ff81168114612ebd57600080fd5b94979396509394606081013594506080013592915050565b600060208284031215612ee757600080fd5b8135610de681612ce7565b60008060408385031215612f0557600080fd5b823591506020830135612f1781612ce7565b809150509250929050565b60008060408385031215612f3557600080fd5b82359150612f4560208401612d09565b90509250929050565b60008060408385031215612f6157600080fd5b8235612f6c81612ce7565b9150612f4560208401612d09565b60008060208385031215612f8d57600080fd5b823567ffffffffffffffff80821115612fa557600080fd5b818501915085601f830112612fb957600080fd5b813581811115612fc857600080fd5b8660208260051b8501011115612fdd57600080fd5b60209290920196919550909350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015613062577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452613050858351612c8a565b94509285019290850190600101613016565b5092979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156130e5576130e561306f565b604052919050565b600067ffffffffffffffff8211156131075761310761306f565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b6000806000806080858703121561314957600080fd5b843561315481612ce7565b9350602085013561316481612ce7565b925060408501359150606085013567ffffffffffffffff81111561318757600080fd5b8501601f8101871361319857600080fd5b80356131ab6131a6826130ed565b61309e565b8181528860208385010111156131c057600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b600080604083850312156131f557600080fd5b823561320081612ce7565b91506020830135612f1781612ce7565b6000610120828403121561322357600080fd5b50919050565b600181811c9082168061323d57607f821691505b60208210811415613223577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156132b8576132b8613277565b500390565b60006fffffffffffffffffffffffffffffffff8083168185168083038211156132e8576132e8613277565b01949350505050565b60208152816020820152818360408301376000818301604090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101919050565b60006020828403121561335057600080fd5b8151610de681612c10565b60006fffffffffffffffffffffffffffffffff8083168185168183048111821515161561338a5761338a613277565b02949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126133f757600080fd5b83018035915067ffffffffffffffff82111561341257600080fd5b60200191503681900382131561342757600080fd5b9250929050565b8183823760009101908152919050565b60006020828403121561345057600080fd5b815167ffffffffffffffff81111561346757600080fd5b8201601f8101841361347857600080fd5b80516134866131a6826130ed565b81815285602083850101111561349b57600080fd5b61262f826020830160208601612c5e565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156134de576134de613277565b5060010190565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250836040830152608060608301526135246080830184612c8a565b9695505050505050565b60006020828403121561354057600080fd5b813563ffffffff81168114610de657600080fd5b60006020828403121561356657600080fd5b81356fffffffffffffffffffffffffffffffff81168114610de657600080fd5b60006020828403121561359857600080fd5b610de682612d09565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156135d9576135d9613277565b500290565b600082613614577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600063ffffffff8083168185168083038211156132e8576132e8613277565b6000821982111561364b5761364b613277565b500190565b6000806040838503121561366357600080fd5b505080516020909101519092909150565b60006020828403121561368657600080fd5b505191905056fea2646970667358221220a2531ca023eb50ca3dde83ced20cfa01768dcc3c81b0e4f9a744260954a2118164736f6c634300080a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000f5bce5077908a1b7370b9ae04adc565ebd643966000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
-----Decoded View---------------
Arg [0] : _bentoBox (address): 0xF5BCE5077908a1b7370B9ae04AdC565EBd643966
Arg [1] : _wETH (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000f5bce5077908a1b7370b9ae04adc565ebd643966
Arg [1] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ 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.