Overview
S Balance
S Value
$0.00More Info
Private Name Tags
ContractCreator
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
12134513 | 21 mins ago | Contract Creation | 0 S | |||
12108031 | 3 hrs ago | Contract Creation | 0 S | |||
12094811 | 4 hrs ago | Contract Creation | 0 S | |||
12094094 | 4 hrs ago | Contract Creation | 0 S | |||
12089649 | 4 hrs ago | Contract Creation | 0 S | |||
12089054 | 4 hrs ago | Contract Creation | 0 S | |||
12084847 | 5 hrs ago | Contract Creation | 0 S | |||
12080269 | 5 hrs ago | Contract Creation | 0 S | |||
12079888 | 5 hrs ago | Contract Creation | 0 S | |||
12079506 | 5 hrs ago | Contract Creation | 0 S | |||
12078876 | 6 hrs ago | Contract Creation | 0 S | |||
12078552 | 6 hrs ago | Contract Creation | 0 S | |||
12073814 | 6 hrs ago | Contract Creation | 0 S | |||
12070883 | 6 hrs ago | Contract Creation | 0 S | |||
12070482 | 6 hrs ago | Contract Creation | 0 S | |||
12069519 | 6 hrs ago | Contract Creation | 0 S | |||
12069496 | 6 hrs ago | Contract Creation | 0 S | |||
12069478 | 6 hrs ago | Contract Creation | 0 S | |||
12069454 | 6 hrs ago | Contract Creation | 0 S | |||
12069440 | 6 hrs ago | Contract Creation | 0 S | |||
12069009 | 7 hrs ago | Contract Creation | 0 S | |||
12068986 | 7 hrs ago | Contract Creation | 0 S | |||
12068964 | 7 hrs ago | Contract Creation | 0 S | |||
12068934 | 7 hrs ago | Contract Creation | 0 S | |||
12068911 | 7 hrs ago | Contract Creation | 0 S |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
LockerFactory
Compiler Version
v0.8.28+commit.7893614a
Optimization Enabled:
No with 200 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.26; import {LpLocker} from "./LpLocker.sol"; import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; contract LockerFactory is Ownable(msg.sender) { event deployed( address indexed lockerAddress, address indexed owner, uint256 tokenId, uint256 lockingPeriod ); address public feeRecipient; string public constant version = "1.0"; constructor() { feeRecipient = msg.sender; } function deploy( address token, address beneficiary, uint64 durationSeconds, uint256 tokenId, uint256 fees ) public payable returns (address) { address newLockerAddress = address( new LpLocker( token, beneficiary, durationSeconds, fees, feeRecipient ) ); if (newLockerAddress == address(0)) { revert("Invalid address"); } emit deployed(newLockerAddress, beneficiary, tokenId, durationSeconds); return newLockerAddress; } function setFeeRecipient(address _feeRecipient) public onlyOwner { feeRecipient = _feeRecipient; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol) pragma solidity ^0.8.20; import {Context} from "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * The initial owner is set to the address provided by the deployer. This can * later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; /** * @dev The caller account is not authorized to perform an operation. */ error OwnableUnauthorizedAccount(address account); /** * @dev The owner is not a valid owner account. (eg. `address(0)`) */ error OwnableInvalidOwner(address owner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the address provided by the deployer as the initial owner. */ constructor(address initialOwner) { if (initialOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(initialOwner); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the value of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the value of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves a `value` amount of tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 value) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets a `value` amount of tokens as the allowance of `spender` over the * caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 value) external returns (bool); /** * @dev Moves a `value` amount of tokens from `from` to `to` using the * allowance mechanism. `value` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 value) external returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.20; import {IERC165} from "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon * a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or * {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon * a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721 * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must * understand this adds an external call which potentially creates a reentrancy vulnerability. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 tokenId) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the address zero. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.20; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be * reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (utils/Address.sol) pragma solidity ^0.8.20; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev The ETH balance of the account is not enough to perform the operation. */ error AddressInsufficientBalance(address account); /** * @dev There's no code at `target` (it is not a contract). */ error AddressEmptyCode(address target); /** * @dev A call to an address target failed. The target may have reverted. */ error FailedInnerCall(); /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { if (address(this).balance < amount) { revert AddressInsufficientBalance(address(this)); } (bool success, ) = recipient.call{value: amount}(""); if (!success) { revert FailedInnerCall(); } } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason or custom error, it is bubbled * up by this function (like regular Solidity function calls). However, if * the call reverted with no returned reason, this function reverts with a * {FailedInnerCall} error. * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCallWithValue(target, data, 0); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { if (address(this).balance < value) { revert AddressInsufficientBalance(address(this)); } (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, success, returndata); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, success, returndata); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target * was not a contract or bubbling up the revert reason (falling back to {FailedInnerCall}) in case of an * unsuccessful call. */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata ) internal view returns (bytes memory) { if (!success) { _revert(returndata); } else { // only check if target is a contract if the call was successful and the return data is empty // otherwise we already know that it was a contract if (returndata.length == 0 && target.code.length == 0) { revert AddressEmptyCode(target); } return returndata; } } /** * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the * revert reason or with a default {FailedInnerCall} error. */ function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) { if (!success) { _revert(returndata); } else { return returndata; } } /** * @dev Reverts with returndata if present. Otherwise reverts with {FailedInnerCall}. */ function _revert(bytes memory returndata) private pure { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert FailedInnerCall(); } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol) pragma solidity ^0.8.20; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/IERC165.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.25; import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol"; interface NonFungibleContract is IERC721 { /// @notice Returns the position information associated with a given token ID. /// @dev Throws if the token ID is not valid. /// @param tokenId The ID of the token that represents the position /// @return nonce The nonce for permits /// @return operator The address that is approved for spending /// @return token0 The address of the token0 for a specific pool /// @return token1 The address of the token1 for a specific pool /// @return fee The fee associated with the pool /// @return tickLower The lower end of the tick range for the position /// @return tickUpper The higher end of the tick range for the position /// @return liquidity The liquidity of the position /// @return feeGrowthInside0LastX128 The fee growth of token0 as of the last action on the individual position /// @return feeGrowthInside1LastX128 The fee growth of token1 as of the last action on the individual position /// @return tokensOwed0 The uncollected amount of token0 owed to the position as of the last computation /// @return tokensOwed1 The uncollected amount of token1 owed to the position as of the last computation function positions( uint256 tokenId ) external view returns ( uint96 nonce, address operator, address token0, address token1, uint24 fee, int24 tickLower, int24 tickUpper, uint128 liquidity, uint256 feeGrowthInside0LastX128, uint256 feeGrowthInside1LastX128, uint128 tokensOwed0, uint128 tokensOwed1 ); struct CollectParams { uint256 tokenId; address recipient; uint128 amount0Max; uint128 amount1Max; } /// @notice Collects up to a maximum amount of fees owed to a specific position to the recipient /// @param params tokenId The ID of the NFT for which tokens are being collected, /// recipient The account that should receive the tokens, /// amount0Max The maximum amount of token0 to collect, /// amount1Max The maximum amount of token1 to collect /// @return amount0 The amount of fees collected in token0 /// @return amount1 The amount of fees collected in token1 function collect( CollectParams calldata params ) external payable returns (uint256 amount0, uint256 amount1); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.26; import "@openzeppelin/contracts/token/ERC721/IERC721.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/utils/Context.sol"; import "@openzeppelin/contracts/utils/Address.sol"; import {IERC721Receiver} from "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol"; import {NonFungibleContract} from "./IManager.sol"; interface INonfungiblePositionManager is IERC721 { struct CollectParams { uint256 tokenId; address recipient; uint128 amount0Max; uint128 amount1Max; } function collect( CollectParams calldata params ) external payable returns (uint256 amount0, uint256 amount1); } contract LpLocker is Ownable, IERC721Receiver { event ERC721Released(address indexed token, uint256 amount); event LockId(uint256 _id); event LockDuration(uint256 _time); event Received(address indexed from, uint256 tokenId); event ClaimedFees( address indexed claimer, address indexed token0, address indexed token1, uint256 amount0, uint256 amount1, uint256 totalAmount1, uint256 totalAmount0 ); uint256 private _released; mapping(address => uint256) public _erc721Released; IERC721 private SafeERC721; uint64 private immutable _duration; address private immutable e721Token; bool private flag; NonFungibleContract private positionManager; string public constant version = "1.0"; uint256 public _fee; address public _feeRecipient; /** * @dev Sets the sender as the initial owner, the beneficiary as the pending owner, and the duration for the lock * vesting duration of the vesting wallet. */ constructor( address token, address beneficiary, uint64 durationSeconds, uint256 fee, address feeRecipient ) payable Ownable(beneficiary) { _duration = durationSeconds; SafeERC721 = IERC721(token); //already false but lets be safe flag = false; e721Token = token; _fee = fee; _feeRecipient = feeRecipient; emit LockDuration(durationSeconds); } function initializer(uint256 token_id) public { require(flag == false, "contract already initialized"); _erc721Released[e721Token] = token_id; flag = true; positionManager = NonFungibleContract(e721Token); if (positionManager.ownerOf(token_id) != address(this)) { SafeERC721.transferFrom(owner(), address(this), token_id); } emit LockId(token_id); } /** * @dev Getter for the vesting duration. */ function duration() public view virtual returns (uint256) { return _duration; } /** * @dev The contract should be able to receive Eth. */ receive() external payable virtual {} /** * @dev Getter for the end timestamp. */ function end() public view virtual returns (uint256) { return duration(); } /** * @dev returns the tokenId of the locked LP */ function released(address token) public view virtual returns (uint256) { return _erc721Released[token]; } /** * @dev Release the token that have already vested. * * Emits a {ERC721Released} event. */ function release() public virtual { if (vestingSchedule() != 0) { revert(); } uint256 id = _erc721Released[e721Token]; emit ERC721Released(e721Token, id); SafeERC721.transferFrom(address(this), owner(), id); } function withdrawERC20(address _token) public { require(owner() == msg.sender, "only owner can call"); IERC20 IToken = IERC20(_token); IToken.transferFrom(address(this), owner(), IToken.balanceOf(owner())); } /** * @dev sourced from: https://docs.uniswap.org/contracts/v3/reference/deployments */ function _getAddresses() internal view returns ( address weth, INonfungiblePositionManager nonFungiblePositionManager ) { uint256 chainId = block.chainid; // base if (chainId == 8453) { weth = 0x4200000000000000000000000000000000000006; nonFungiblePositionManager = INonfungiblePositionManager( 0x03a520b32C04BF3bEEf7BEb72E919cf822Ed34f1 ); } // degen chain if (chainId == 666666666) { // wrapped degen weth = 0xEb54dACB4C2ccb64F8074eceEa33b5eBb38E5387; nonFungiblePositionManager = INonfungiblePositionManager( // proxy swap 0x56c65e35f2Dd06f659BCFe327C4D7F21c9b69C2f ); } if (chainId == 5112) { // wrapped ETH weth = 0x4200000000000000000000000000000000000006; nonFungiblePositionManager = INonfungiblePositionManager( // proxy swap 0xD088322Fa988225B3936555894E1D21c1A727859 ); } if (chainId == 56) { weth = 0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c; nonFungiblePositionManager = INonfungiblePositionManager( 0x46A15B0b27311cedF172AB29E4f4766fbE7F4364 ); } if (chainId == 146) { weth = 0x039e2fB66102314Ce7b64Ce5Ce3E5183bc94aD38; nonFungiblePositionManager = INonfungiblePositionManager( 0x77DcC9b09C6Ae94CDC726540735682A38e18d690 ); } } //Use collect fees to collect the fees function collectFees(address _recipient, uint256 _tokenId) public { require(owner() == msg.sender, "only owner can call"); ( , INonfungiblePositionManager nonfungiblePositionManager ) = _getAddresses(); if (_fee == 0) { (uint256 amount0, uint256 amount1) = nonfungiblePositionManager .collect( INonfungiblePositionManager.CollectParams({ recipient: _recipient, amount0Max: type(uint128).max, amount1Max: type(uint128).max, tokenId: _tokenId }) ); emit ClaimedFees( _recipient, address(0), address(0), amount0, amount1, amount0, amount1 ); } else { (uint256 amount0, uint256 amount1) = nonfungiblePositionManager .collect( INonfungiblePositionManager.CollectParams({ recipient: address(this), amount0Max: type(uint128).max, amount1Max: type(uint128).max, tokenId: _tokenId }) ); ( , , address token0, address token1, , , , , , , , ) = positionManager.positions(_tokenId); IERC20 feeToken0 = IERC20(token0); IERC20 feeToken1 = IERC20(token1); uint256 protocolFee0 = (amount0 * _fee) / 100; uint256 protocolFee1 = (amount1 * _fee) / 100; uint256 recipientFee0 = amount0 - protocolFee0; uint256 recipientFee1 = amount1 - protocolFee1; feeToken0.transfer(_recipient, recipientFee0); feeToken1.transfer(_recipient, recipientFee1); feeToken0.transfer(_feeRecipient, protocolFee0); feeToken1.transfer(_feeRecipient, protocolFee1); emit ClaimedFees( _recipient, token0, token1, recipientFee0, recipientFee1, amount0, amount1 ); } } /** * Checks the vesting schedule for the token */ function vestingSchedule() public view returns (uint256) { if (block.timestamp > duration()) { return 0; } else { return duration() - block.timestamp; } } function onERC721Received( address, address from, uint256 id, bytes calldata data ) external override returns (bytes4) { emit Received(from, id); return IERC721Receiver.onERC721Received.selector; } }
{ "viaIR": true, "evmVersion": "paris", "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"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":"lockerAddress","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lockingPeriod","type":"uint256"}],"name":"deployed","type":"event"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"beneficiary","type":"address"},{"internalType":"uint64","name":"durationSeconds","type":"uint64"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"fees","type":"uint256"}],"name":"deploy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"feeRecipient","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_feeRecipient","type":"address"}],"name":"setFeeRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405234610027576100116100bd565b61001961002c565b61308f61021c823961308f90f35b610032565b60405190565b600080fd5b60001b90565b9061004e60018060a01b0391610037565b9181191691161790565b60018060a01b031690565b90565b61007a61007561007f92610058565b610063565b610058565b90565b61008b90610066565b90565b61009790610082565b90565b90565b906100b26100ad6100b99261008e565b61009a565b825461003d565b9055565b6100c63361012d565b6100d133600161009d565b565b90565b6100ea6100e56100ef926100d3565b610063565b610058565b90565b6100fb906100d6565b90565b61010790610058565b90565b610113906100fe565b9052565b919061012b9060006020850194019061010a565b565b8061014961014361013e60006100f2565b6100fe565b916100fe565b1461015957610157906101ba565b565b61017e61016660006100f2565b6000918291631e4fbdf760e01b835260048301610117565b0390fd5b60001c90565b60018060a01b031690565b61019f6101a491610182565b610188565b90565b6101b19054610193565b90565b60000190565b6101c460006101a7565b6101cf82600061009d565b906102036101fd7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09361008e565b9161008e565b9161020c61002c565b80610216816101b4565b0390a356fe60806040526004361015610013575b610507565b61001e60003561008d565b806346904840146100885780634e54db091461008357806354fd4d501461007e578063715018a6146100795780638da5cb5b14610074578063e74b981b1461006f5763f2fde38b0361000e576104d4565b6104a1565b61044d565b61041a565b6103df565b61023a565b610132565b60e01c90565b60405190565b600080fd5b600080fd5b60009103126100ae57565b61009e565b1c90565b60018060a01b031690565b6100d29060086100d793026100b3565b6100b7565b90565b906100e591546100c2565b90565b6100f560016000906100da565b90565b60018060a01b031690565b61010c906100f8565b90565b61011890610103565b9052565b91906101309060006020850194019061010f565b565b34610162576101423660046100a3565b61015e61014d6100e8565b610155610093565b9182918261011c565b0390f35b610099565b61017081610103565b0361017757565b600080fd5b9050359061018982610167565b565b67ffffffffffffffff1690565b6101a18161018b565b036101a857565b600080fd5b905035906101ba82610198565b565b90565b6101c8816101bc565b036101cf57565b600080fd5b905035906101e1826101bf565b565b919060a083820312610235576101fc816000850161017c565b9261020a826020830161017c565b9261023261021b84604085016101ad565b9361022981606086016101d4565b936080016101d4565b90565b61009e565b61026561025461024b3660046101e3565b939290926106c7565b61025c610093565b9182918261011c565b0390f35b601f801991011690565b634e487b7160e01b600052604160045260246000fd5b9061029390610269565b810190811067ffffffffffffffff8211176102ad57604052565b610273565b906102c56102be610093565b9283610289565b565b67ffffffffffffffff81116102e5576102e1602091610269565b0190565b610273565b906102fc6102f7836102c7565b6102b2565b918252565b60007f312e300000000000000000000000000000000000000000000000000000000000910152565b61033360036102ea565b9061034060208301610301565b565b61034a610329565b90565b610355610342565b90565b61036061034d565b90565b5190565b60209181520190565b60005b838110610384575050906000910152565b806020918301518185015201610373565b6103b46103bd6020936103c2936103ab81610363565b93848093610367565b95869101610370565b610269565b0190565b6103dc9160208201916000818403910152610395565b90565b3461040f576103ef3660046100a3565b61040b6103fa610358565b610402610093565b918291826103c6565b0390f35b610099565b60000190565b346104485761042a3660046100a3565b6104326107f3565b61043a610093565b8061044481610414565b0390f35b610099565b3461047d5761045d3660046100a3565b6104796104686107fd565b610470610093565b9182918261011c565b0390f35b610099565b9060208282031261049c576104999160000161017c565b90565b61009e565b346104cf576104b96104b4366004610482565b610877565b6104c1610093565b806104cb81610414565b0390f35b610099565b34610502576104ec6104e7366004610482565b6108ea565b6104f4610093565b806104fe81610414565b0390f35b610099565b600080fd5b600090565b60001c90565b61052361052891610511565b6100b7565b90565b6105359054610517565b90565b6105419061018b565b9052565b61054e906101bc565b9052565b9095949261059e9461058d6105979261058360809661057960a088019c600089019061010f565b602087019061010f565b6040850190610538565b6060830190610545565b019061010f565b565b6105a8610093565b3d6000823e3d90fd5b90565b6105c86105c36105cd926100f8565b6105b1565b6100f8565b90565b6105d9906105b4565b90565b6105e5906105d0565b90565b90565b6105ff6105fa610604926105e8565b6105b1565b6100f8565b90565b610610906105eb565b90565b60007f496e76616c696420616464726573730000000000000000000000000000000000910152565b610648600f602092610367565b61065181610613565b0190565b61066b906020810190600081830391015261063b565b90565b610677906105d0565b90565b61068e6106896106939261018b565b6105b1565b6101bc565b90565b61069f9061067a565b9052565b9160206106c59294936106be60408201966000830190610545565b0190610696565b565b9390939291926106d561050c565b508484926106e3600161052b565b906106ec610093565b946126a786019386851067ffffffffffffffff8611176107c8578695610719956126a76109b38939610552565b03906000f080156107c35761072d906105dc565b928361074a61074461073f6000610607565b610103565b91610103565b146107a157839091926107866107807f9c1c6b6f338a6c45bf1ec01a0343b92657db1347e118e8ff936f05e1c47d17a59361066e565b9361066e565b9361079b610792610093565b928392836106a3565b0390a390565b6107a9610093565b62461bcd60e51b8152806107bf60048201610655565b0390fd5b6105a0565b610273565b6107d56108f5565b6107dd6107df565b565b6107f16107ec6000610607565b610944565b565b6107fb6107cd565b565b61080561050c565b50610810600061052b565b90565b6108249061081f6108f5565b61086a565b565b60001b90565b9061083d60018060a01b0391610826565b9181191691161790565b90565b9061085f61085a6108669261066e565b610847565b825461082c565b9055565b61087590600161084a565b565b61088090610813565b565b6108939061088e6108f5565b610895565b565b806108b16108ab6108a66000610607565b610103565b91610103565b146108c1576108bf90610944565b565b6108e66108ce6000610607565b6000918291631e4fbdf760e01b83526004830161011c565b0390fd5b6108f390610882565b565b6108fd6107fd565b61091661091061090b6109a5565b610103565b91610103565b0361091d57565b6109406109286109a5565b600091829163118cdaa760e01b83526004830161011c565b0390fd5b61094e600061052b565b61095982600061084a565b9061098d6109877f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09361066e565b9161066e565b91610996610093565b806109a081610414565b0390a3565b6109ad61050c565b50339056fe60c060405261001861000f6101a4565b93929092610373565b610020610055565b61216961053e823960805181610929015260a051818181610d5901528181610d9701528181610ff0015261101c015261216990f35b60405190565b601f801991011690565b634e487b7160e01b600052604160045260246000fd5b906100859061005b565b810190811060018060401b0382111761009d57604052565b610065565b906100b56100ae610055565b928361007b565b565b600080fd5b60018060a01b031690565b6100d0906100bc565b90565b6100dc816100c7565b036100e357565b600080fd5b905051906100f5826100d3565b565b60018060401b031690565b61010b816100f7565b0361011257565b600080fd5b9050519061012482610102565b565b90565b61013281610126565b0361013957565b600080fd5b9050519061014b82610129565b565b919060a08382031261019f5761016681600085016100e8565b9261017482602083016100e8565b9261019c6101858460408501610117565b93610193816060860161013e565b936080016100e8565b90565b6100b7565b6101c26126a7803803806101b7816100a2565b92833981019061014d565b9091929394565b90565b6101e06101db6101e5926100bc565b6101c9565b6100bc565b90565b6101f1906101cc565b90565b6101fd906101e8565b90565b60001b90565b9061021760018060a01b0391610200565b9181191691161790565b61022a906101e8565b90565b90565b9061024561024061024c92610221565b61022d565b8254610206565b9055565b60a01b90565b9061026560ff60a01b91610250565b9181191691161790565b151590565b61027d9061026f565b90565b90565b9061029861029361029f92610274565b610280565b8254610256565b9055565b906102b060001991610200565b9181191691161790565b6102ce6102c96102d392610126565b6101c9565b610126565b90565b90565b906102ee6102e96102f5926102ba565b6102d6565b82546102a3565b9055565b610302906101cc565b90565b61030e906102f9565b90565b90565b9061032961032461033092610305565b610311565b8254610206565b9055565b61034861034361034d926100f7565b6101c9565b610126565b90565b61035990610334565b9052565b919061037190600060208501940190610350565b565b926103bb936103876103b4939694966103f6565b8560805261039e610397826101f4565b6003610230565b6103aa60006003610283565b60a05260056102d9565b6006610314565b6103f17fa7c9b318acab142ad977a18c784c38de48b4fb5f6a53edf0b2e9e86184590ce5916103e8610055565b9182918261035d565b0390a1565b6103ff9061044f565b565b90565b61041861041361041d92610401565b6101c9565b6100bc565b90565b61042990610404565b90565b610435906100c7565b9052565b919061044d9060006020850194019061042c565b565b8061046b6104656104606000610420565b6100c7565b916100c7565b1461047b57610479906104dc565b565b6104a06104886000610420565b6000918291631e4fbdf760e01b835260048301610439565b0390fd5b60001c90565b60018060a01b031690565b6104c16104c6916104a4565b6104aa565b90565b6104d390546104b5565b90565b60000190565b6104e660006104c9565b6104f1826000610314565b9061052561051f7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e093610305565b91610305565b9161052e610055565b80610538816104d6565b0390a356fe60806040526004361015610015575b366108e857005b61002060003561011f565b80630fb5a6b41461011a578063150b7a02146101155780634b6804441461011057806354fd4d501461010b57806367a4d1c314610106578063715018a61461010157806386d1a69f146100fc5780638da5cb5b146100f75780639852595c146100f2578063a033fcd4146100ed578063a2ac5e57146100e8578063a342f238146100e3578063c5b37c22146100de578063efbe1c1c146100d9578063f2fde38b146100d45763f4f3b2000361000e576108b5565b610882565b61084d565b610818565b6107d3565b61075d565b610693565b610630565b6105dc565b610586565b610553565b610520565b6104c6565b61031b565b6102e2565b61016b565b60e01c90565b60405190565b600080fd5b600080fd5b600091031261014057565b610130565b90565b61015190610145565b9052565b919061016990600060208501940190610148565b565b3461019b5761017b366004610135565b61019761018661091b565b61018e610125565b91829182610155565b0390f35b61012b565b600080fd5b60018060a01b031690565b6101b9906101a5565b90565b6101c5816101b0565b036101cc57565b600080fd5b905035906101de826101bc565b565b6101e981610145565b036101f057565b600080fd5b90503590610202826101e0565b565b600080fd5b600080fd5b600080fd5b909182601f8301121561024d5781359167ffffffffffffffff831161024857602001926001830284011161024357565b61020e565b610209565b610204565b906080828203126102ae5761026a81600084016101d1565b9261027882602085016101d1565b9261028683604083016101f5565b92606082013567ffffffffffffffff81116102a9576102a59201610213565b9091565b6101a0565b610130565b63ffffffff60e01b1690565b6102c8906102b3565b9052565b91906102e0906000602085019401906102bf565b565b34610316576103126103016102f8366004610252565b93929092610955565b610309610125565b918291826102cc565b0390f35b61012b565b3461034b5761032b366004610135565b610347610336610a0a565b61033e610125565b91829182610155565b0390f35b61012b565b601f801991011690565b634e487b7160e01b600052604160045260246000fd5b9061037a90610350565b810190811067ffffffffffffffff82111761039457604052565b61035a565b906103ac6103a5610125565b9283610370565b565b67ffffffffffffffff81116103cc576103c8602091610350565b0190565b61035a565b906103e36103de836103ae565b610399565b918252565b60007f312e300000000000000000000000000000000000000000000000000000000000910152565b61041a60036103d1565b90610427602083016103e8565b565b610431610410565b90565b61043c610429565b90565b610447610434565b90565b5190565b60209181520190565b60005b83811061046b575050906000910152565b80602091830151818501520161045a565b61049b6104a46020936104a9936104928161044a565b9384809361044e565b95869101610457565b610350565b0190565b6104c3916020820191600081840391015261047c565b90565b346104f6576104d6366004610135565b6104f26104e161043f565b6104e9610125565b918291826104ad565b0390f35b61012b565b9060208282031261051557610512916000016101f5565b90565b610130565b60000190565b3461054e576105386105333660046104fb565b610d28565b610540610125565b8061054a8161051a565b0390f35b61012b565b3461058157610563366004610135565b61056b610f9b565b610573610125565b8061057d8161051a565b0390f35b61012b565b346105b457610596366004610135565b61059e610fc6565b6105a6610125565b806105b08161051a565b0390f35b61012b565b6105c2906101b0565b9052565b91906105da906000602085019401906105b9565b565b3461060c576105ec366004610135565b6106086105f7611150565b6105ff610125565b918291826105c6565b0390f35b61012b565b9060208282031261062b57610628916000016101d1565b90565b610130565b346106605761065c61064b610646366004610611565b611166565b610653610125565b91829182610155565b0390f35b61012b565b919060408382031261068e578061068261068b92600086016101d1565b936020016101f5565b90565b610130565b346106c2576106ac6106a6366004610665565b906115e8565b6106b4610125565b806106be8161051a565b0390f35b61012b565b90565b6106de6106d96106e3926101a5565b6106c7565b6101a5565b90565b6106ef906106ca565b90565b6106fb906106e6565b90565b90610708906106f2565b600052602052604060002090565b1c90565b90565b61072d9060086107329302610716565b61071a565b90565b90610740915461071d565b90565b61075a906107556002916000926106fe565b610735565b90565b3461078d57610789610778610773366004610611565b610743565b610780610125565b91829182610155565b0390f35b61012b565b60018060a01b031690565b6107ad9060086107b29302610716565b610792565b90565b906107c0915461079d565b90565b6107d060066000906107b5565b90565b34610803576107e3366004610135565b6107ff6107ee6107c3565b6107f6610125565b918291826105c6565b0390f35b61012b565b6108156005600090610735565b90565b3461084857610828366004610135565b610844610833610808565b61083b610125565b91829182610155565b0390f35b61012b565b3461087d5761085d366004610135565b610879610868611c05565b610870610125565b91829182610155565b0390f35b61012b565b346108b05761089a610895366004610611565b611c81565b6108a2610125565b806108ac8161051a565b0390f35b61012b565b346108e3576108cd6108c8366004610611565b611cab565b6108d5610125565b806108df8161051a565b0390f35b61012b565b600080fd5b600090565b67ffffffffffffffff1690565b61091361090e610918926108f2565b6106c7565b610145565b90565b6109236108ed565b5061094d7f00000000000000000000000000000000000000000000000000000000000000006108ff565b90565b600090565b5091509150610962610950565b506109a26109907f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f88525874926106f2565b92610999610125565b91829182610155565b0390a2630a85bd0160e11b90565b634e487b7160e01b600052601160045260246000fd5b6109d56109db91939293610145565b92610145565b82039182116109e657565b6109b0565b90565b610a026109fd610a07926109eb565b6106c7565b610145565b90565b610a126108ed565b5042610a2d610a27610a2261091b565b610145565b91610145565b11600014610a4257610a3f60006109ee565b90565b610a54610a4d61091b565b42906109c6565b90565b60a01c90565b60ff1690565b610a6f610a7491610a57565b610a5d565b90565b610a819054610a63565b90565b151590565b60007f636f6e747261637420616c726561647920696e697469616c697a656400000000910152565b610abe601c60209261044e565b610ac781610a89565b0190565b610ae19060208101906000818303910152610ab1565b90565b15610aeb57565b610af3610125565b62461bcd60e51b815280610b0960048201610acb565b0390fd5b60001b90565b90610b2060001991610b0d565b9181191691161790565b610b3e610b39610b4392610145565b6106c7565b610145565b90565b90565b90610b5e610b59610b6592610b2a565b610b46565b8254610b13565b9055565b60a01b90565b90610b7e60ff60a01b91610b69565b9181191691161790565b610b9190610a84565b90565b90565b90610bac610ba7610bb392610b88565b610b94565b8254610b6f565b9055565b610bc0906106ca565b90565b610bcc90610bb7565b90565b90610be060018060a01b0391610b0d565b9181191691161790565b610bf390610bb7565b90565b90565b90610c0e610c09610c1592610bea565b610bf6565b8254610bcf565b9055565b60001c90565b60018060a01b031690565b610c36610c3b91610c19565b610c1f565b90565b610c489054610c2a565b90565b610c54906106e6565b90565b600080fd5b60e01b90565b90505190610c6f826101bc565b565b90602082820312610c8b57610c8891600001610c62565b90565b610130565b610c98610125565b3d6000823e3d90fd5b610caa906106e6565b90565b60018060a01b031690565b610cc4610cc991610c19565b610cad565b90565b610cd69054610cb8565b90565b610ce2906106e6565b90565b6000910312610cf057565b610130565b604090610d1f610d269496959396610d15606084019860008501906105b9565b60208301906105b9565b0190610148565b565b610d4e610d356003610a77565b610d48610d426000610a84565b91610a84565b14610ae4565b610d8381610d7e60027f0000000000000000000000000000000000000000000000000000000000000000906106fe565b610b49565b610d8f60016003610b97565b610dc2610dbb7f0000000000000000000000000000000000000000000000000000000000000000610bc3565b6004610bf9565b610e036020610dd9610dd46004610c3e565b610c4b565b636352211e90610df88592610dec610125565b95869485938493610c5c565b835260048301610155565b03915afa908115610f4857600091610f1a575b50610e31610e2b610e2630610ca1565b6101b0565b916101b0565b03610e72575b610e6d7f2d2646a54da33966dbc637174196baceae31412e5f2714ffbe293e1eb9e06d1491610e64610125565b91829182610155565b0390a1565b610e84610e7f6003610ccc565b610cd9565b6323b872dd610e91611150565b610e9a30610ca1565b928492813b15610f15576000610ec391610ece8296610eb7610125565b98899788968795610c5c565b855260048501610cf5565b03925af18015610f1057610ee3575b50610e37565b610f039060003d8111610f09575b610efb8183610370565b810190610ce5565b38610edd565b503d610ef1565b610c90565b610c57565b610f3b915060203d8111610f41575b610f338183610370565b810190610c71565b38610e16565b503d610f29565b610c90565b610f55611dea565b610f5d610f87565b565b610f73610f6e610f78926109eb565b6106c7565b6101a5565b90565b610f8490610f5f565b90565b610f99610f946000610f7b565b611e5c565b565b610fa3610f4d565b565b610fb1610fb691610c19565b61071a565b90565b610fc39054610fa5565b90565b610fce610a0a565b610fe1610fdb60006109ee565b91610145565b036111255761101a61101560027f0000000000000000000000000000000000000000000000000000000000000000906106fe565b610fb9565b7f0000000000000000000000000000000000000000000000000000000000000000819061107c61106a7f034c148a1d9210c9c4fd94f7cddbb6efa09fb7e218f6e3ff89d6bb30ba7136c2926106f2565b92611073610125565b91829182610155565b0390a261109161108c6003610ccc565b610cd9565b6323b872dd906110a030610ca1565b906110a9611150565b9392813b156111205760006110d1916110dc82966110c5610125565b98899788968795610c5c565b855260048501610cf5565b03925af1801561111b576110ee575b50565b61110e9060003d8111611114575b6111068183610370565b810190610ce5565b386110eb565b503d6110fc565b610c90565b610c57565b600080fd5b600090565b61113b61114091610c19565b610792565b90565b61114d905461112f565b90565b61115861112a565b506111636000611143565b90565b61117d611182916111756108ed565b5060026106fe565b610fb9565b90565b60007f6f6e6c79206f776e65722063616e2063616c6c00000000000000000000000000910152565b6111ba601360209261044e565b6111c381611185565b0190565b6111dd90602081019060008183039101526111ad565b90565b156111e757565b6111ef610125565b62461bcd60e51b815280611205600482016111c7565b0390fd5b611212906106e6565b90565b61121f6080610399565b90565b9061122c90610145565b9052565b9061123a906101b0565b9052565b6fffffffffffffffffffffffffffffffff1690565b9061125d9061123e565b9052565b9050519061126e826101e0565b565b9190604083820312611299578061128d6112969260008601611261565b93602001611261565b90565b610130565b6112a790610145565b9052565b6112b4906101b0565b9052565b6112c19061123e565b9052565b9060608061130d936112df6000820151600086019061129e565b6112f1602082015160208601906112ab565b611303604082015160408601906112b8565b01519101906112b8565b565b9190611323906000608085019401906112c5565b565b6bffffffffffffffffffffffff1690565b61133f81611325565b0361134657565b600080fd5b9050519061135882611336565b565b62ffffff1690565b61136b8161135a565b0361137257565b600080fd5b9050519061138482611362565b565b60020b90565b61139581611386565b0361139c57565b600080fd5b905051906113ae8261138c565b565b6113b98161123e565b036113c057565b600080fd5b905051906113d2826113b0565b565b90916101808284031261148d576113ee836000840161134b565b926113fc8160208501610c62565b9261140a8260408301610c62565b926114188360608401610c62565b926114268160808501611377565b926114348260a083016113a1565b926114428360c084016113a1565b926114508160e085016113c5565b9261145f826101008301611261565b9261148a611471846101208501611261565b936114808161014086016113c5565b93610160016113c5565b90565b610130565b61149b906106ca565b90565b6114a790611492565b90565b6114b96114bf91939293610145565b92610145565b916114cb838202610145565b9281840414901517156114da57565b6109b0565b90565b6114f66114f16114fb926114df565b6106c7565b610145565b90565b634e487b7160e01b600052601260045260246000fd5b61152061152691610145565b91610145565b908115611531570490565b6114fe565b61153f906106e6565b90565b61154b81610a84565b0361155257565b600080fd5b9050519061156482611542565b565b906020828203126115805761157d91600001611557565b90565b610130565b9160206115a79294936115a0604082019660008301906105b9565b0190610148565b565b6115df6115e6946115d56060949897956115cb608086019a6000870190610148565b6020850190610148565b6040830190610148565b0190610148565b565b61160b6115f3611150565b6116056115ff336101b0565b916101b0565b146111e0565b611613611f75565b905061161f6005610fb9565b61163261162c60006109ee565b91610145565b1460001461178f576116d0919261164a604092611209565b6116c5600063fc6f78656116b188956116a86fffffffffffffffffffffffffffffffff6116a06fffffffffffffffffffffffffffffffff939961169761168e611215565b9b898d01611222565b60208b01611230565b898901611253565b60608701611253565b6116b9610125565b96879586948593610c5c565b83526004830161130f565b03925af1801561178a57600080929091611759575b5090916116f26000610f7b565b906116fd6000610f7b565b928061175386929661174161173b6117357f065e4dcc9ce2c38d1e644a8ab506135c87247724a28dae11742e6df81322ae1f976106f2565b976106f2565b976106f2565b9761174a610125565b948594856115a9565b0390a45b565b905061177c915060403d8111611783575b6117748183610370565b810190611270565b90386116e5565b503d61176a565b610c90565b604061179d61182d92611209565b63fc6f78659061182260006117b130610ca1565b9361180e6fffffffffffffffffffffffffffffffff6118056fffffffffffffffffffffffffffffffff916117fd8d996117f46117eb611215565b9b898d01611222565b60208b01611230565b898901611253565b60608701611253565b611816610125565b96879586948593610c5c565b83526004830161130f565b03925af18015611c0057600080929091611bc7575b5061018061188591929461185e6118596004610c3e565b610c4b565b61187a6399fbab8861186e610125565b95869485938493610c5c565b835260048301610155565b03915afa8015611bc2576000808080949250929050611b87575b5090916118ab8261149e565b6118b48461149e565b946118dc6118cc846118c66005610fb9565b906114aa565b6118d660646114e2565b90611514565b906119046118f4896118ee6005610fb9565b906114aa565b6118fe60646114e2565b90611514565b916119108582906109c6565b9761191c8a85906109c6565b9461192681611536565b60208b63a9059cbb9261194e6000899395611959611942610125565b97889687958694610c5c565b845260048401611585565b03925af18015611b8257611b56575b5061197282611536565b90602063a9059cbb92869061199b60008b966119a661198f610125565b98899687958694610c5c565b845260048401611585565b03925af1908115611b51576020926119c392611b26575b50611536565b9263a9059cbb936119f260006119d96006611143565b93966119fd6119e6610125565b98899687958694610c5c565b845260048401611585565b03925af1908115611b2157602092611a1a92611af6575b50611536565b9263a9059cbb93611a496000611a306006611143565b9396611a54611a3d610125565b98899687958694610c5c565b845260048401611585565b03925af1918215611af157611abd92611ac5575b50939495919296611aab611aa5611a9f7f065e4dcc9ce2c38d1e644a8ab506135c87247724a28dae11742e6df81322ae1f976106f2565b976106f2565b976106f2565b97611ab4610125565b948594856115a9565b0390a4611757565b611ae59060203d8111611aea575b611add8183610370565b810190611566565b611a68565b503d611ad3565b610c90565b611b1590843d8111611b1a575b611b0d8183610370565b810190611566565b611a14565b503d611b03565b610c90565b611b4590843d8111611b4a575b611b3d8183610370565b810190611566565b6119bd565b503d611b33565b610c90565b611b769060203d8111611b7b575b611b6e8183610370565b810190611566565b611968565b503d611b64565b610c90565b9050611bab91506101803d8111611bbb575b611ba38183610370565b8101906113d4565b505050505050505092509061189f565b503d611b99565b610c90565b61018092506118859150611bf19060403d8111611bf9575b611be98183610370565b810190611270565b925090611842565b503d611bdf565b610c90565b611c0d6108ed565b50611c1661091b565b90565b611c2a90611c25611dea565b611c2c565b565b80611c48611c42611c3d6000610f7b565b6101b0565b916101b0565b14611c5857611c5690611e5c565b565b611c7d611c656000610f7b565b6000918291631e4fbdf760e01b8352600483016105c6565b0390fd5b611c8a90611c19565b565b90602082820312611ca657611ca391600001611261565b90565b610130565b611cd790611cd2611cba611150565b611ccc611cc6336101b0565b916101b0565b146111e0565b61149e565b611ce081611536565b6323b872dd90611cef30610ca1565b90611d376020611d06611d00611150565b96611536565b6370a0823190611d2c611d17611150565b92611d20610125565b95869485938493610c5c565b8352600483016105c6565b03915afa8015611de557602094611d75600092611d6a948491611db8575b50611d5e610125565b98899788968795610c5c565b855260048501610cf5565b03925af18015611db357611d87575b50565b611da79060203d8111611dac575b611d9f8183610370565b810190611566565b611d84565b503d611d95565b610c90565b611dd89150883d8111611dde575b611dd08183610370565b810190611c8c565b38611d55565b503d611dc6565b610c90565b611df2611150565b611e0b611e05611e00612126565b6101b0565b916101b0565b03611e1257565b611e35611e1d612126565b600091829163118cdaa760e01b8352600483016105c6565b0390fd5b90565b90611e51611e4c611e58926106f2565b611e39565b8254610bcf565b9055565b611e666000611143565b611e71826000611e3c565b90611ea5611e9f7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0936106f2565b916106f2565b91611eae610125565b80611eb88161051a565b0390a3565b600090565b90565b611ed9611ed4611ede92611ec2565b6106c7565b610145565b90565b611eea906106ca565b90565b611ef690611ee1565b90565b90565b611f10611f0b611f1592611ef9565b6106c7565b610145565b90565b90565b611f2f611f2a611f3492611f18565b6106c7565b610145565b90565b90565b611f4e611f49611f5392611f37565b6106c7565b610145565b90565b90565b611f6d611f68611f7292611f56565b6106c7565b610145565b90565b611f7d61112a565b90611f86611ebd565b904680611f9d611f97612105611ec5565b91610145565b146120f6575b80611fba611fb46327bc86aa611efc565b91610145565b146120b9575b80611fd5611fcf6113f8611f1b565b91610145565b14612089575b80611fef611fe96038611f3a565b91610145565b1461204c575b6120086120026092611f59565b91610145565b14612010575b565b91505073039e2fb66102314ce7b64ce5ce3e5183bc94ad38906120467377dcc9b09c6ae94cdc726540735682a38e18d690611eed565b9061200e565b9150915073bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c916120837346a15b0b27311cedf172ab29e4f4766fbe7f4364611eed565b91611ff5565b915091506006602160991b01916120b373d088322fa988225b3936555894e1d21c1a727859611eed565b91611fdb565b9150915073eb54dacb4c2ccb64f8074eceea33b5ebb38e5387916120f07356c65e35f2dd06f659bcfe327c4d7f21c9b69c2f611eed565b91611fc0565b915091506006602160991b01916121207303a520b32c04bf3beef7beb72e919cf822ed34f1611eed565b91611fa3565b61212e61112a565b50339056fea26469706673582212207a09935b25e997ecb2fee8d63a5ca255c21891b5aa7891cbff038584fe53805a64736f6c634300081c0033a26469706673582212203eda52b2efa733ea0ad3f58daf0843434289e05170eef20424665298a9b1ed0664736f6c634300081c0033
Deployed Bytecode
0x60806040526004361015610013575b610507565b61001e60003561008d565b806346904840146100885780634e54db091461008357806354fd4d501461007e578063715018a6146100795780638da5cb5b14610074578063e74b981b1461006f5763f2fde38b0361000e576104d4565b6104a1565b61044d565b61041a565b6103df565b61023a565b610132565b60e01c90565b60405190565b600080fd5b600080fd5b60009103126100ae57565b61009e565b1c90565b60018060a01b031690565b6100d29060086100d793026100b3565b6100b7565b90565b906100e591546100c2565b90565b6100f560016000906100da565b90565b60018060a01b031690565b61010c906100f8565b90565b61011890610103565b9052565b91906101309060006020850194019061010f565b565b34610162576101423660046100a3565b61015e61014d6100e8565b610155610093565b9182918261011c565b0390f35b610099565b61017081610103565b0361017757565b600080fd5b9050359061018982610167565b565b67ffffffffffffffff1690565b6101a18161018b565b036101a857565b600080fd5b905035906101ba82610198565b565b90565b6101c8816101bc565b036101cf57565b600080fd5b905035906101e1826101bf565b565b919060a083820312610235576101fc816000850161017c565b9261020a826020830161017c565b9261023261021b84604085016101ad565b9361022981606086016101d4565b936080016101d4565b90565b61009e565b61026561025461024b3660046101e3565b939290926106c7565b61025c610093565b9182918261011c565b0390f35b601f801991011690565b634e487b7160e01b600052604160045260246000fd5b9061029390610269565b810190811067ffffffffffffffff8211176102ad57604052565b610273565b906102c56102be610093565b9283610289565b565b67ffffffffffffffff81116102e5576102e1602091610269565b0190565b610273565b906102fc6102f7836102c7565b6102b2565b918252565b60007f312e300000000000000000000000000000000000000000000000000000000000910152565b61033360036102ea565b9061034060208301610301565b565b61034a610329565b90565b610355610342565b90565b61036061034d565b90565b5190565b60209181520190565b60005b838110610384575050906000910152565b806020918301518185015201610373565b6103b46103bd6020936103c2936103ab81610363565b93848093610367565b95869101610370565b610269565b0190565b6103dc9160208201916000818403910152610395565b90565b3461040f576103ef3660046100a3565b61040b6103fa610358565b610402610093565b918291826103c6565b0390f35b610099565b60000190565b346104485761042a3660046100a3565b6104326107f3565b61043a610093565b8061044481610414565b0390f35b610099565b3461047d5761045d3660046100a3565b6104796104686107fd565b610470610093565b9182918261011c565b0390f35b610099565b9060208282031261049c576104999160000161017c565b90565b61009e565b346104cf576104b96104b4366004610482565b610877565b6104c1610093565b806104cb81610414565b0390f35b610099565b34610502576104ec6104e7366004610482565b6108ea565b6104f4610093565b806104fe81610414565b0390f35b610099565b600080fd5b600090565b60001c90565b61052361052891610511565b6100b7565b90565b6105359054610517565b90565b6105419061018b565b9052565b61054e906101bc565b9052565b9095949261059e9461058d6105979261058360809661057960a088019c600089019061010f565b602087019061010f565b6040850190610538565b6060830190610545565b019061010f565b565b6105a8610093565b3d6000823e3d90fd5b90565b6105c86105c36105cd926100f8565b6105b1565b6100f8565b90565b6105d9906105b4565b90565b6105e5906105d0565b90565b90565b6105ff6105fa610604926105e8565b6105b1565b6100f8565b90565b610610906105eb565b90565b60007f496e76616c696420616464726573730000000000000000000000000000000000910152565b610648600f602092610367565b61065181610613565b0190565b61066b906020810190600081830391015261063b565b90565b610677906105d0565b90565b61068e6106896106939261018b565b6105b1565b6101bc565b90565b61069f9061067a565b9052565b9160206106c59294936106be60408201966000830190610545565b0190610696565b565b9390939291926106d561050c565b508484926106e3600161052b565b906106ec610093565b946126a786019386851067ffffffffffffffff8611176107c8578695610719956126a76109b38939610552565b03906000f080156107c35761072d906105dc565b928361074a61074461073f6000610607565b610103565b91610103565b146107a157839091926107866107807f9c1c6b6f338a6c45bf1ec01a0343b92657db1347e118e8ff936f05e1c47d17a59361066e565b9361066e565b9361079b610792610093565b928392836106a3565b0390a390565b6107a9610093565b62461bcd60e51b8152806107bf60048201610655565b0390fd5b6105a0565b610273565b6107d56108f5565b6107dd6107df565b565b6107f16107ec6000610607565b610944565b565b6107fb6107cd565b565b61080561050c565b50610810600061052b565b90565b6108249061081f6108f5565b61086a565b565b60001b90565b9061083d60018060a01b0391610826565b9181191691161790565b90565b9061085f61085a6108669261066e565b610847565b825461082c565b9055565b61087590600161084a565b565b61088090610813565b565b6108939061088e6108f5565b610895565b565b806108b16108ab6108a66000610607565b610103565b91610103565b146108c1576108bf90610944565b565b6108e66108ce6000610607565b6000918291631e4fbdf760e01b83526004830161011c565b0390fd5b6108f390610882565b565b6108fd6107fd565b61091661091061090b6109a5565b610103565b91610103565b0361091d57565b6109406109286109a5565b600091829163118cdaa760e01b83526004830161011c565b0390fd5b61094e600061052b565b61095982600061084a565b9061098d6109877f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09361066e565b9161066e565b91610996610093565b806109a081610414565b0390a3565b6109ad61050c565b50339056fe60c060405261001861000f6101a4565b93929092610373565b610020610055565b61216961053e823960805181610929015260a051818181610d5901528181610d9701528181610ff0015261101c015261216990f35b60405190565b601f801991011690565b634e487b7160e01b600052604160045260246000fd5b906100859061005b565b810190811060018060401b0382111761009d57604052565b610065565b906100b56100ae610055565b928361007b565b565b600080fd5b60018060a01b031690565b6100d0906100bc565b90565b6100dc816100c7565b036100e357565b600080fd5b905051906100f5826100d3565b565b60018060401b031690565b61010b816100f7565b0361011257565b600080fd5b9050519061012482610102565b565b90565b61013281610126565b0361013957565b600080fd5b9050519061014b82610129565b565b919060a08382031261019f5761016681600085016100e8565b9261017482602083016100e8565b9261019c6101858460408501610117565b93610193816060860161013e565b936080016100e8565b90565b6100b7565b6101c26126a7803803806101b7816100a2565b92833981019061014d565b9091929394565b90565b6101e06101db6101e5926100bc565b6101c9565b6100bc565b90565b6101f1906101cc565b90565b6101fd906101e8565b90565b60001b90565b9061021760018060a01b0391610200565b9181191691161790565b61022a906101e8565b90565b90565b9061024561024061024c92610221565b61022d565b8254610206565b9055565b60a01b90565b9061026560ff60a01b91610250565b9181191691161790565b151590565b61027d9061026f565b90565b90565b9061029861029361029f92610274565b610280565b8254610256565b9055565b906102b060001991610200565b9181191691161790565b6102ce6102c96102d392610126565b6101c9565b610126565b90565b90565b906102ee6102e96102f5926102ba565b6102d6565b82546102a3565b9055565b610302906101cc565b90565b61030e906102f9565b90565b90565b9061032961032461033092610305565b610311565b8254610206565b9055565b61034861034361034d926100f7565b6101c9565b610126565b90565b61035990610334565b9052565b919061037190600060208501940190610350565b565b926103bb936103876103b4939694966103f6565b8560805261039e610397826101f4565b6003610230565b6103aa60006003610283565b60a05260056102d9565b6006610314565b6103f17fa7c9b318acab142ad977a18c784c38de48b4fb5f6a53edf0b2e9e86184590ce5916103e8610055565b9182918261035d565b0390a1565b6103ff9061044f565b565b90565b61041861041361041d92610401565b6101c9565b6100bc565b90565b61042990610404565b90565b610435906100c7565b9052565b919061044d9060006020850194019061042c565b565b8061046b6104656104606000610420565b6100c7565b916100c7565b1461047b57610479906104dc565b565b6104a06104886000610420565b6000918291631e4fbdf760e01b835260048301610439565b0390fd5b60001c90565b60018060a01b031690565b6104c16104c6916104a4565b6104aa565b90565b6104d390546104b5565b90565b60000190565b6104e660006104c9565b6104f1826000610314565b9061052561051f7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e093610305565b91610305565b9161052e610055565b80610538816104d6565b0390a356fe60806040526004361015610015575b366108e857005b61002060003561011f565b80630fb5a6b41461011a578063150b7a02146101155780634b6804441461011057806354fd4d501461010b57806367a4d1c314610106578063715018a61461010157806386d1a69f146100fc5780638da5cb5b146100f75780639852595c146100f2578063a033fcd4146100ed578063a2ac5e57146100e8578063a342f238146100e3578063c5b37c22146100de578063efbe1c1c146100d9578063f2fde38b146100d45763f4f3b2000361000e576108b5565b610882565b61084d565b610818565b6107d3565b61075d565b610693565b610630565b6105dc565b610586565b610553565b610520565b6104c6565b61031b565b6102e2565b61016b565b60e01c90565b60405190565b600080fd5b600080fd5b600091031261014057565b610130565b90565b61015190610145565b9052565b919061016990600060208501940190610148565b565b3461019b5761017b366004610135565b61019761018661091b565b61018e610125565b91829182610155565b0390f35b61012b565b600080fd5b60018060a01b031690565b6101b9906101a5565b90565b6101c5816101b0565b036101cc57565b600080fd5b905035906101de826101bc565b565b6101e981610145565b036101f057565b600080fd5b90503590610202826101e0565b565b600080fd5b600080fd5b600080fd5b909182601f8301121561024d5781359167ffffffffffffffff831161024857602001926001830284011161024357565b61020e565b610209565b610204565b906080828203126102ae5761026a81600084016101d1565b9261027882602085016101d1565b9261028683604083016101f5565b92606082013567ffffffffffffffff81116102a9576102a59201610213565b9091565b6101a0565b610130565b63ffffffff60e01b1690565b6102c8906102b3565b9052565b91906102e0906000602085019401906102bf565b565b34610316576103126103016102f8366004610252565b93929092610955565b610309610125565b918291826102cc565b0390f35b61012b565b3461034b5761032b366004610135565b610347610336610a0a565b61033e610125565b91829182610155565b0390f35b61012b565b601f801991011690565b634e487b7160e01b600052604160045260246000fd5b9061037a90610350565b810190811067ffffffffffffffff82111761039457604052565b61035a565b906103ac6103a5610125565b9283610370565b565b67ffffffffffffffff81116103cc576103c8602091610350565b0190565b61035a565b906103e36103de836103ae565b610399565b918252565b60007f312e300000000000000000000000000000000000000000000000000000000000910152565b61041a60036103d1565b90610427602083016103e8565b565b610431610410565b90565b61043c610429565b90565b610447610434565b90565b5190565b60209181520190565b60005b83811061046b575050906000910152565b80602091830151818501520161045a565b61049b6104a46020936104a9936104928161044a565b9384809361044e565b95869101610457565b610350565b0190565b6104c3916020820191600081840391015261047c565b90565b346104f6576104d6366004610135565b6104f26104e161043f565b6104e9610125565b918291826104ad565b0390f35b61012b565b9060208282031261051557610512916000016101f5565b90565b610130565b60000190565b3461054e576105386105333660046104fb565b610d28565b610540610125565b8061054a8161051a565b0390f35b61012b565b3461058157610563366004610135565b61056b610f9b565b610573610125565b8061057d8161051a565b0390f35b61012b565b346105b457610596366004610135565b61059e610fc6565b6105a6610125565b806105b08161051a565b0390f35b61012b565b6105c2906101b0565b9052565b91906105da906000602085019401906105b9565b565b3461060c576105ec366004610135565b6106086105f7611150565b6105ff610125565b918291826105c6565b0390f35b61012b565b9060208282031261062b57610628916000016101d1565b90565b610130565b346106605761065c61064b610646366004610611565b611166565b610653610125565b91829182610155565b0390f35b61012b565b919060408382031261068e578061068261068b92600086016101d1565b936020016101f5565b90565b610130565b346106c2576106ac6106a6366004610665565b906115e8565b6106b4610125565b806106be8161051a565b0390f35b61012b565b90565b6106de6106d96106e3926101a5565b6106c7565b6101a5565b90565b6106ef906106ca565b90565b6106fb906106e6565b90565b90610708906106f2565b600052602052604060002090565b1c90565b90565b61072d9060086107329302610716565b61071a565b90565b90610740915461071d565b90565b61075a906107556002916000926106fe565b610735565b90565b3461078d57610789610778610773366004610611565b610743565b610780610125565b91829182610155565b0390f35b61012b565b60018060a01b031690565b6107ad9060086107b29302610716565b610792565b90565b906107c0915461079d565b90565b6107d060066000906107b5565b90565b34610803576107e3366004610135565b6107ff6107ee6107c3565b6107f6610125565b918291826105c6565b0390f35b61012b565b6108156005600090610735565b90565b3461084857610828366004610135565b610844610833610808565b61083b610125565b91829182610155565b0390f35b61012b565b3461087d5761085d366004610135565b610879610868611c05565b610870610125565b91829182610155565b0390f35b61012b565b346108b05761089a610895366004610611565b611c81565b6108a2610125565b806108ac8161051a565b0390f35b61012b565b346108e3576108cd6108c8366004610611565b611cab565b6108d5610125565b806108df8161051a565b0390f35b61012b565b600080fd5b600090565b67ffffffffffffffff1690565b61091361090e610918926108f2565b6106c7565b610145565b90565b6109236108ed565b5061094d7f00000000000000000000000000000000000000000000000000000000000000006108ff565b90565b600090565b5091509150610962610950565b506109a26109907f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f88525874926106f2565b92610999610125565b91829182610155565b0390a2630a85bd0160e11b90565b634e487b7160e01b600052601160045260246000fd5b6109d56109db91939293610145565b92610145565b82039182116109e657565b6109b0565b90565b610a026109fd610a07926109eb565b6106c7565b610145565b90565b610a126108ed565b5042610a2d610a27610a2261091b565b610145565b91610145565b11600014610a4257610a3f60006109ee565b90565b610a54610a4d61091b565b42906109c6565b90565b60a01c90565b60ff1690565b610a6f610a7491610a57565b610a5d565b90565b610a819054610a63565b90565b151590565b60007f636f6e747261637420616c726561647920696e697469616c697a656400000000910152565b610abe601c60209261044e565b610ac781610a89565b0190565b610ae19060208101906000818303910152610ab1565b90565b15610aeb57565b610af3610125565b62461bcd60e51b815280610b0960048201610acb565b0390fd5b60001b90565b90610b2060001991610b0d565b9181191691161790565b610b3e610b39610b4392610145565b6106c7565b610145565b90565b90565b90610b5e610b59610b6592610b2a565b610b46565b8254610b13565b9055565b60a01b90565b90610b7e60ff60a01b91610b69565b9181191691161790565b610b9190610a84565b90565b90565b90610bac610ba7610bb392610b88565b610b94565b8254610b6f565b9055565b610bc0906106ca565b90565b610bcc90610bb7565b90565b90610be060018060a01b0391610b0d565b9181191691161790565b610bf390610bb7565b90565b90565b90610c0e610c09610c1592610bea565b610bf6565b8254610bcf565b9055565b60001c90565b60018060a01b031690565b610c36610c3b91610c19565b610c1f565b90565b610c489054610c2a565b90565b610c54906106e6565b90565b600080fd5b60e01b90565b90505190610c6f826101bc565b565b90602082820312610c8b57610c8891600001610c62565b90565b610130565b610c98610125565b3d6000823e3d90fd5b610caa906106e6565b90565b60018060a01b031690565b610cc4610cc991610c19565b610cad565b90565b610cd69054610cb8565b90565b610ce2906106e6565b90565b6000910312610cf057565b610130565b604090610d1f610d269496959396610d15606084019860008501906105b9565b60208301906105b9565b0190610148565b565b610d4e610d356003610a77565b610d48610d426000610a84565b91610a84565b14610ae4565b610d8381610d7e60027f0000000000000000000000000000000000000000000000000000000000000000906106fe565b610b49565b610d8f60016003610b97565b610dc2610dbb7f0000000000000000000000000000000000000000000000000000000000000000610bc3565b6004610bf9565b610e036020610dd9610dd46004610c3e565b610c4b565b636352211e90610df88592610dec610125565b95869485938493610c5c565b835260048301610155565b03915afa908115610f4857600091610f1a575b50610e31610e2b610e2630610ca1565b6101b0565b916101b0565b03610e72575b610e6d7f2d2646a54da33966dbc637174196baceae31412e5f2714ffbe293e1eb9e06d1491610e64610125565b91829182610155565b0390a1565b610e84610e7f6003610ccc565b610cd9565b6323b872dd610e91611150565b610e9a30610ca1565b928492813b15610f15576000610ec391610ece8296610eb7610125565b98899788968795610c5c565b855260048501610cf5565b03925af18015610f1057610ee3575b50610e37565b610f039060003d8111610f09575b610efb8183610370565b810190610ce5565b38610edd565b503d610ef1565b610c90565b610c57565b610f3b915060203d8111610f41575b610f338183610370565b810190610c71565b38610e16565b503d610f29565b610c90565b610f55611dea565b610f5d610f87565b565b610f73610f6e610f78926109eb565b6106c7565b6101a5565b90565b610f8490610f5f565b90565b610f99610f946000610f7b565b611e5c565b565b610fa3610f4d565b565b610fb1610fb691610c19565b61071a565b90565b610fc39054610fa5565b90565b610fce610a0a565b610fe1610fdb60006109ee565b91610145565b036111255761101a61101560027f0000000000000000000000000000000000000000000000000000000000000000906106fe565b610fb9565b7f0000000000000000000000000000000000000000000000000000000000000000819061107c61106a7f034c148a1d9210c9c4fd94f7cddbb6efa09fb7e218f6e3ff89d6bb30ba7136c2926106f2565b92611073610125565b91829182610155565b0390a261109161108c6003610ccc565b610cd9565b6323b872dd906110a030610ca1565b906110a9611150565b9392813b156111205760006110d1916110dc82966110c5610125565b98899788968795610c5c565b855260048501610cf5565b03925af1801561111b576110ee575b50565b61110e9060003d8111611114575b6111068183610370565b810190610ce5565b386110eb565b503d6110fc565b610c90565b610c57565b600080fd5b600090565b61113b61114091610c19565b610792565b90565b61114d905461112f565b90565b61115861112a565b506111636000611143565b90565b61117d611182916111756108ed565b5060026106fe565b610fb9565b90565b60007f6f6e6c79206f776e65722063616e2063616c6c00000000000000000000000000910152565b6111ba601360209261044e565b6111c381611185565b0190565b6111dd90602081019060008183039101526111ad565b90565b156111e757565b6111ef610125565b62461bcd60e51b815280611205600482016111c7565b0390fd5b611212906106e6565b90565b61121f6080610399565b90565b9061122c90610145565b9052565b9061123a906101b0565b9052565b6fffffffffffffffffffffffffffffffff1690565b9061125d9061123e565b9052565b9050519061126e826101e0565b565b9190604083820312611299578061128d6112969260008601611261565b93602001611261565b90565b610130565b6112a790610145565b9052565b6112b4906101b0565b9052565b6112c19061123e565b9052565b9060608061130d936112df6000820151600086019061129e565b6112f1602082015160208601906112ab565b611303604082015160408601906112b8565b01519101906112b8565b565b9190611323906000608085019401906112c5565b565b6bffffffffffffffffffffffff1690565b61133f81611325565b0361134657565b600080fd5b9050519061135882611336565b565b62ffffff1690565b61136b8161135a565b0361137257565b600080fd5b9050519061138482611362565b565b60020b90565b61139581611386565b0361139c57565b600080fd5b905051906113ae8261138c565b565b6113b98161123e565b036113c057565b600080fd5b905051906113d2826113b0565b565b90916101808284031261148d576113ee836000840161134b565b926113fc8160208501610c62565b9261140a8260408301610c62565b926114188360608401610c62565b926114268160808501611377565b926114348260a083016113a1565b926114428360c084016113a1565b926114508160e085016113c5565b9261145f826101008301611261565b9261148a611471846101208501611261565b936114808161014086016113c5565b93610160016113c5565b90565b610130565b61149b906106ca565b90565b6114a790611492565b90565b6114b96114bf91939293610145565b92610145565b916114cb838202610145565b9281840414901517156114da57565b6109b0565b90565b6114f66114f16114fb926114df565b6106c7565b610145565b90565b634e487b7160e01b600052601260045260246000fd5b61152061152691610145565b91610145565b908115611531570490565b6114fe565b61153f906106e6565b90565b61154b81610a84565b0361155257565b600080fd5b9050519061156482611542565b565b906020828203126115805761157d91600001611557565b90565b610130565b9160206115a79294936115a0604082019660008301906105b9565b0190610148565b565b6115df6115e6946115d56060949897956115cb608086019a6000870190610148565b6020850190610148565b6040830190610148565b0190610148565b565b61160b6115f3611150565b6116056115ff336101b0565b916101b0565b146111e0565b611613611f75565b905061161f6005610fb9565b61163261162c60006109ee565b91610145565b1460001461178f576116d0919261164a604092611209565b6116c5600063fc6f78656116b188956116a86fffffffffffffffffffffffffffffffff6116a06fffffffffffffffffffffffffffffffff939961169761168e611215565b9b898d01611222565b60208b01611230565b898901611253565b60608701611253565b6116b9610125565b96879586948593610c5c565b83526004830161130f565b03925af1801561178a57600080929091611759575b5090916116f26000610f7b565b906116fd6000610f7b565b928061175386929661174161173b6117357f065e4dcc9ce2c38d1e644a8ab506135c87247724a28dae11742e6df81322ae1f976106f2565b976106f2565b976106f2565b9761174a610125565b948594856115a9565b0390a45b565b905061177c915060403d8111611783575b6117748183610370565b810190611270565b90386116e5565b503d61176a565b610c90565b604061179d61182d92611209565b63fc6f78659061182260006117b130610ca1565b9361180e6fffffffffffffffffffffffffffffffff6118056fffffffffffffffffffffffffffffffff916117fd8d996117f46117eb611215565b9b898d01611222565b60208b01611230565b898901611253565b60608701611253565b611816610125565b96879586948593610c5c565b83526004830161130f565b03925af18015611c0057600080929091611bc7575b5061018061188591929461185e6118596004610c3e565b610c4b565b61187a6399fbab8861186e610125565b95869485938493610c5c565b835260048301610155565b03915afa8015611bc2576000808080949250929050611b87575b5090916118ab8261149e565b6118b48461149e565b946118dc6118cc846118c66005610fb9565b906114aa565b6118d660646114e2565b90611514565b906119046118f4896118ee6005610fb9565b906114aa565b6118fe60646114e2565b90611514565b916119108582906109c6565b9761191c8a85906109c6565b9461192681611536565b60208b63a9059cbb9261194e6000899395611959611942610125565b97889687958694610c5c565b845260048401611585565b03925af18015611b8257611b56575b5061197282611536565b90602063a9059cbb92869061199b60008b966119a661198f610125565b98899687958694610c5c565b845260048401611585565b03925af1908115611b51576020926119c392611b26575b50611536565b9263a9059cbb936119f260006119d96006611143565b93966119fd6119e6610125565b98899687958694610c5c565b845260048401611585565b03925af1908115611b2157602092611a1a92611af6575b50611536565b9263a9059cbb93611a496000611a306006611143565b9396611a54611a3d610125565b98899687958694610c5c565b845260048401611585565b03925af1918215611af157611abd92611ac5575b50939495919296611aab611aa5611a9f7f065e4dcc9ce2c38d1e644a8ab506135c87247724a28dae11742e6df81322ae1f976106f2565b976106f2565b976106f2565b97611ab4610125565b948594856115a9565b0390a4611757565b611ae59060203d8111611aea575b611add8183610370565b810190611566565b611a68565b503d611ad3565b610c90565b611b1590843d8111611b1a575b611b0d8183610370565b810190611566565b611a14565b503d611b03565b610c90565b611b4590843d8111611b4a575b611b3d8183610370565b810190611566565b6119bd565b503d611b33565b610c90565b611b769060203d8111611b7b575b611b6e8183610370565b810190611566565b611968565b503d611b64565b610c90565b9050611bab91506101803d8111611bbb575b611ba38183610370565b8101906113d4565b505050505050505092509061189f565b503d611b99565b610c90565b61018092506118859150611bf19060403d8111611bf9575b611be98183610370565b810190611270565b925090611842565b503d611bdf565b610c90565b611c0d6108ed565b50611c1661091b565b90565b611c2a90611c25611dea565b611c2c565b565b80611c48611c42611c3d6000610f7b565b6101b0565b916101b0565b14611c5857611c5690611e5c565b565b611c7d611c656000610f7b565b6000918291631e4fbdf760e01b8352600483016105c6565b0390fd5b611c8a90611c19565b565b90602082820312611ca657611ca391600001611261565b90565b610130565b611cd790611cd2611cba611150565b611ccc611cc6336101b0565b916101b0565b146111e0565b61149e565b611ce081611536565b6323b872dd90611cef30610ca1565b90611d376020611d06611d00611150565b96611536565b6370a0823190611d2c611d17611150565b92611d20610125565b95869485938493610c5c565b8352600483016105c6565b03915afa8015611de557602094611d75600092611d6a948491611db8575b50611d5e610125565b98899788968795610c5c565b855260048501610cf5565b03925af18015611db357611d87575b50565b611da79060203d8111611dac575b611d9f8183610370565b810190611566565b611d84565b503d611d95565b610c90565b611dd89150883d8111611dde575b611dd08183610370565b810190611c8c565b38611d55565b503d611dc6565b610c90565b611df2611150565b611e0b611e05611e00612126565b6101b0565b916101b0565b03611e1257565b611e35611e1d612126565b600091829163118cdaa760e01b8352600483016105c6565b0390fd5b90565b90611e51611e4c611e58926106f2565b611e39565b8254610bcf565b9055565b611e666000611143565b611e71826000611e3c565b90611ea5611e9f7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0936106f2565b916106f2565b91611eae610125565b80611eb88161051a565b0390a3565b600090565b90565b611ed9611ed4611ede92611ec2565b6106c7565b610145565b90565b611eea906106ca565b90565b611ef690611ee1565b90565b90565b611f10611f0b611f1592611ef9565b6106c7565b610145565b90565b90565b611f2f611f2a611f3492611f18565b6106c7565b610145565b90565b90565b611f4e611f49611f5392611f37565b6106c7565b610145565b90565b90565b611f6d611f68611f7292611f56565b6106c7565b610145565b90565b611f7d61112a565b90611f86611ebd565b904680611f9d611f97612105611ec5565b91610145565b146120f6575b80611fba611fb46327bc86aa611efc565b91610145565b146120b9575b80611fd5611fcf6113f8611f1b565b91610145565b14612089575b80611fef611fe96038611f3a565b91610145565b1461204c575b6120086120026092611f59565b91610145565b14612010575b565b91505073039e2fb66102314ce7b64ce5ce3e5183bc94ad38906120467377dcc9b09c6ae94cdc726540735682a38e18d690611eed565b9061200e565b9150915073bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c916120837346a15b0b27311cedf172ab29e4f4766fbe7f4364611eed565b91611ff5565b915091506006602160991b01916120b373d088322fa988225b3936555894e1d21c1a727859611eed565b91611fdb565b9150915073eb54dacb4c2ccb64f8074eceea33b5ebb38e5387916120f07356c65e35f2dd06f659bcfe327c4d7f21c9b69c2f611eed565b91611fc0565b915091506006602160991b01916121207303a520b32c04bf3beef7beb72e919cf822ed34f1611eed565b91611fa3565b61212e61112a565b50339056fea26469706673582212207a09935b25e997ecb2fee8d63a5ca255c21891b5aa7891cbff038584fe53805a64736f6c634300081c0033a26469706673582212203eda52b2efa733ea0ad3f58daf0843434289e05170eef20424665298a9b1ed0664736f6c634300081c0033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ 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.