Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Loading...
Loading
Contract Name:
LiquidityLocker
Compiler Version
v0.8.21+commit.d9974bed
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-09-25 */ // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be _NOT_ENTERED require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } /** * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a * `nonReentrant` function in the call stack. */ function _reentrancyGuardEntered() internal view returns (bool) { return _status == _ENTERED; } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/security/Pausable.sol // OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { _requireNotPaused(); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { _requirePaused(); _; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Throws if the contract is paused. */ function _requireNotPaused() internal view virtual { require(!paused(), "Pausable: paused"); } /** * @dev Throws if the contract is not paused. */ function _requirePaused() internal view virtual { require(paused(), "Pausable: not paused"); } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @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. * * By default, the owner account will be the one that deploys the contract. 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; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @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 { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @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 { require(newOwner != address(0), "Ownable: new owner is the zero address"); _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); } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 amount) external returns (bool); } // File: MAXVAULT.sol pragma solidity ^0.8.21; contract LiquidityLocker is Ownable, Pausable, ReentrancyGuard { struct Lock { IERC20 token; address beneficiary; uint256 unlockDate; uint256 initialBalance; bool locked; } uint256 public feePercentage = 5; // 0.5% fee (5 out of 1000) Lock[] public locks; event TokensLocked(address indexed sender, uint256 lockIndex, uint256 amount, uint256 unlockDate); event TokensWithdrawn(uint256 lockIndex, uint256 amount); event BeneficiaryUpdated(uint256 lockIndex, address newBeneficiary); event UnlockDateUpdated(uint256 lockIndex, uint256 newUnlockDate); event LockCustodyTransferred(uint256 lockIndex, address newCustodian); event FeePercentageUpdated(uint256 newFeePercentage); modifier onlyLockBeneficiary(uint256 lockIndex) { require(msg.sender == locks[lockIndex].beneficiary, "Only the lock beneficiary can call this function"); _; } modifier onlyWhenUnlocked(uint256 lockIndex) { require(!locks[lockIndex].locked && block.timestamp >= locks[lockIndex].unlockDate, "Tokens are still locked or not yet unlocked"); _; } constructor() {} function lockLP(address _token, address _beneficiary, uint256 _unlockDate, uint256 amount) external whenNotPaused nonReentrant { require(_unlockDate > block.timestamp, "Unlock date must be in the future"); IERC20 token = IERC20(_token); uint256 feeAmount = (amount * feePercentage) / 1000; // Calculate the fee // Transfer the initial balance minus the fee to the contract uint256 initialBalanceMinusFee = amount - feeAmount; token.transferFrom(msg.sender, address(this), initialBalanceMinusFee); locks.push(Lock({ token: token, beneficiary: _beneficiary, unlockDate: _unlockDate, initialBalance: amount, locked: true })); // Transfer the fee to the owner token.transfer(owner(), feeAmount); emit TokensLocked(msg.sender, locks.length - 1, amount, _unlockDate); } function withdrawTokens(uint256 lockIndex) external onlyLockBeneficiary(lockIndex) onlyWhenUnlocked(lockIndex) whenNotPaused nonReentrant { Lock storage lock = locks[lockIndex]; uint256 balance = lock.token.balanceOf(address(this)); require(balance > 0, "No tokens to withdraw"); lock.token.transfer(lock.beneficiary, balance); emit TokensWithdrawn(lockIndex, balance); } // Transfer ownership of a lock to a new owner function transferLockOwnership(uint256 lockIndex, address newOwner) external onlyLockBeneficiary(lockIndex) whenNotPaused { require(newOwner != address(0), "Invalid new owner address"); locks[lockIndex].beneficiary = newOwner; } // Update the fee percentage function updateFeePercentage(uint256 newFeePercentage) external onlyOwner { require(newFeePercentage <= 1000, "Fee percentage must be less than or equal to 1000 (100%)"); feePercentage = newFeePercentage; emit FeePercentageUpdated(newFeePercentage); } function updateBeneficiary(uint256 lockIndex, address newBeneficiary) external onlyOwner whenNotPaused { require(newBeneficiary != address(0), "Invalid beneficiary address"); locks[lockIndex].beneficiary = newBeneficiary; emit BeneficiaryUpdated(lockIndex, newBeneficiary); } function updateUnlockDate(uint256 lockIndex, uint256 newUnlockDate) external onlyOwner whenNotPaused { require(newUnlockDate > block.timestamp, "New unlock date must be in the future"); locks[lockIndex].unlockDate = newUnlockDate; emit UnlockDateUpdated(lockIndex, newUnlockDate); } function unlock(uint256 lockIndex) external onlyLockBeneficiary(lockIndex) whenNotPaused { locks[lockIndex].locked = false; } function transferLockCustody(uint256 lockIndex, address newCustodian) external onlyOwner whenNotPaused { require(newCustodian != address(0), "Invalid custodian address"); locks[lockIndex].beneficiary = newCustodian; emit LockCustodyTransferred(lockIndex, newCustodian); } // Emergency function to pause the contract function emergencyPause() external onlyOwner { _pause(); } // Emergency function to unpause the contract function emergencyUnpause() external onlyOwner { _unpause(); } function getLockCount() external view returns (uint256) { return locks.length; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"lockIndex","type":"uint256"},{"indexed":false,"internalType":"address","name":"newBeneficiary","type":"address"}],"name":"BeneficiaryUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newFeePercentage","type":"uint256"}],"name":"FeePercentageUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"lockIndex","type":"uint256"},{"indexed":false,"internalType":"address","name":"newCustodian","type":"address"}],"name":"LockCustodyTransferred","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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"lockIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"unlockDate","type":"uint256"}],"name":"TokensLocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"lockIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokensWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"lockIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newUnlockDate","type":"uint256"}],"name":"UnlockDateUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"emergencyPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emergencyUnpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLockCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_beneficiary","type":"address"},{"internalType":"uint256","name":"_unlockDate","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"lockLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"locks","outputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"beneficiary","type":"address"},{"internalType":"uint256","name":"unlockDate","type":"uint256"},{"internalType":"uint256","name":"initialBalance","type":"uint256"},{"internalType":"bool","name":"locked","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"lockIndex","type":"uint256"},{"internalType":"address","name":"newCustodian","type":"address"}],"name":"transferLockCustody","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"lockIndex","type":"uint256"},{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferLockOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"lockIndex","type":"uint256"}],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"lockIndex","type":"uint256"},{"internalType":"address","name":"newBeneficiary","type":"address"}],"name":"updateBeneficiary","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newFeePercentage","type":"uint256"}],"name":"updateFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"lockIndex","type":"uint256"},{"internalType":"uint256","name":"newUnlockDate","type":"uint256"}],"name":"updateUnlockDate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"lockIndex","type":"uint256"}],"name":"withdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526005600255348015610014575f80fd5b5061001e33610033565b5f805460ff60a01b1916905560018055610082565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61125d8061008f5f395ff3fe608060405234801561000f575f80fd5b5060043610610106575f3560e01c80636cad3fb01161009e578063a001ecdd1161006e578063a001ecdd146101e3578063ae5276bd146101ec578063e3be8312146101ff578063f2fde38b14610212578063f4dadc6114610225575f80fd5b80636cad3fb01461019c578063715018a6146101af5780638da5cb5b146101b757806394493c43146101d1575f80fd5b806351858e27116100d957806351858e271461014d5780635a04fb69146101555780635c975abb146101685780636198e33914610189575f80fd5b80631f0890081461010a578063315a095d1461011f5780633e8eb5a4146101325780634a4e3bd514610145575b5f80fd5b61011d61011836600461106a565b61026d565b005b61011d61012d366004611094565b61035b565b61011d61014036600461106a565b610609565b61011d6106ea565b61011d6106fc565b61011d61016336600461106a565b61070c565b5f54600160a01b900460ff1660405190151581526020015b60405180910390f35b61011d610197366004611094565b610803565b61011d6101aa366004611094565b610892565b61011d61094d565b5f546040516001600160a01b039091168152602001610180565b6003545b604051908152602001610180565b6101d560025481565b61011d6101fa3660046110ab565b61095e565b61011d61020d3660046110cb565b610a2c565b61011d61022036600461110a565b610d56565b610238610233366004611094565b610dcf565b604080516001600160a01b0396871681529590941660208601529284019190915260608301521515608082015260a001610180565b610275610e1d565b61027d610e76565b6001600160a01b0381166102d85760405162461bcd60e51b815260206004820152601960248201527f496e76616c696420637573746f6469616e20616464726573730000000000000060448201526064015b60405180910390fd5b80600383815481106102ec576102ec61112a565b5f9182526020918290206005919091020160010180546001600160a01b0319166001600160a01b0393841617905560408051858152928416918301919091527f61568198dcc68338b2d941786f4041fd903012b4e9a7f8f4dc5774f3da15f93391015b60405180910390a15050565b806003818154811061036f5761036f61112a565b5f9182526020909120600590910201600101546001600160a01b031633146103a95760405162461bcd60e51b81526004016102cf9061113e565b81600381815481106103bd576103bd61112a565b5f91825260209091206004600590920201015460ff161580156104025750600381815481106103ee576103ee61112a565b905f5260205f209060050201600201544210155b6104625760405162461bcd60e51b815260206004820152602b60248201527f546f6b656e7320617265207374696c6c206c6f636b6564206f72206e6f74207960448201526a195d081d5b9b1bd8dad95960aa1b60648201526084016102cf565b61046a610e76565b610472610ec2565b5f600384815481106104865761048661112a565b5f918252602082206005919091020180546040516370a0823160e01b81523060048201529193506001600160a01b0316906370a0823190602401602060405180830381865afa1580156104db573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104ff919061118e565b90505f81116105485760405162461bcd60e51b81526020600482015260156024820152744e6f20746f6b656e7320746f20776974686472617760581b60448201526064016102cf565b8154600183015460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810184905291169063a9059cbb906044016020604051808303815f875af115801561059b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105bf91906111a5565b5060408051868152602081018390527f66b83f1531e8e33a4c404458c73c34e03a1233541a8bbe6127f85660b414d3c7910160405180910390a1505061060460018055565b505050565b610611610e1d565b610619610e76565b6001600160a01b03811661066f5760405162461bcd60e51b815260206004820152601b60248201527f496e76616c69642062656e65666963696172792061646472657373000000000060448201526064016102cf565b80600383815481106106835761068361112a565b5f9182526020918290206005919091020160010180546001600160a01b0319166001600160a01b0393841617905560408051858152928416918301919091527fa6651cd315e1b1d3d439de42416a9f109ebffaa21aed0412debe15da701f4412910161034f565b6106f2610e1d565b6106fa610f1b565b565b610704610e1d565b6106fa610f6f565b81600381815481106107205761072061112a565b5f9182526020909120600590910201600101546001600160a01b0316331461075a5760405162461bcd60e51b81526004016102cf9061113e565b610762610e76565b6001600160a01b0382166107b85760405162461bcd60e51b815260206004820152601960248201527f496e76616c6964206e6577206f776e657220616464726573730000000000000060448201526064016102cf565b81600384815481106107cc576107cc61112a565b905f5260205f2090600502016001015f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550505050565b80600381815481106108175761081761112a565b5f9182526020909120600590910201600101546001600160a01b031633146108515760405162461bcd60e51b81526004016102cf9061113e565b610859610e76565b5f6003838154811061086d5761086d61112a565b5f9182526020909120600590910201600401805460ff19169115159190911790555050565b61089a610e1d565b6103e88111156109125760405162461bcd60e51b815260206004820152603860248201527f4665652070657263656e74616765206d757374206265206c657373207468616e60448201527f206f7220657175616c20746f203130303020283130302529000000000000000060648201526084016102cf565b60028190556040518181527f74516f05eb4bd2461d57aa1e935ee553f86a3e02bfed7759f2f772915de3d9be9060200160405180910390a150565b610955610e1d565b6106fa5f610fb1565b610966610e1d565b61096e610e76565b4281116109cb5760405162461bcd60e51b815260206004820152602560248201527f4e657720756e6c6f636b2064617465206d75737420626520696e207468652066604482015264757475726560d81b60648201526084016102cf565b80600383815481106109df576109df61112a565b905f5260205f209060050201600201819055507ffcf140ea00e0bccdcd31676b58902f0d6b3b7ff9f7135b5d24bf697e36110b96828260405161034f929190918252602082015260400190565b610a34610e76565b610a3c610ec2565b428211610a955760405162461bcd60e51b815260206004820152602160248201527f556e6c6f636b2064617465206d75737420626520696e207468652066757475726044820152606560f81b60648201526084016102cf565b60025484905f906103e890610aaa90856111d8565b610ab491906111f5565b90505f610ac18285611214565b6040516323b872dd60e01b8152336004820152306024820152604481018290529091506001600160a01b038416906323b872dd906064016020604051808303815f875af1158015610b14573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b3891906111a5565b506040805160a0810182526001600160a01b0380861680835289821660208401908152938301898152606084018981526001608086018181526003805492830181555f52955160059091027fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b810180549287166001600160a01b031993841617905596517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85c8801805491909616911617909355517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85d85015590517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85e84015590517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85f909201805492151560ff199093169290921790915563a9059cbb610c845f546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018590526044016020604051808303815f875af1158015610cce573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cf291906111a5565b5060035433907f90e20a62e0f2a608d33bd96a4e15cb853006a15caf4455f373b7b55de520b68c90610d2690600190611214565b6040805191825260208201889052810188905260600160405180910390a2505050610d5060018055565b50505050565b610d5e610e1d565b6001600160a01b038116610dc35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102cf565b610dcc81610fb1565b50565b60038181548110610dde575f80fd5b5f918252602090912060059091020180546001820154600283015460038401546004909401546001600160a01b03938416955091909216929060ff1685565b5f546001600160a01b031633146106fa5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102cf565b5f54600160a01b900460ff16156106fa5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016102cf565b600260015403610f145760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016102cf565b6002600155565b610f23611000565b5f805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b610f77610e76565b5f805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610f523390565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f54600160a01b900460ff166106fa5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016102cf565b80356001600160a01b0381168114611065575f80fd5b919050565b5f806040838503121561107b575f80fd5b8235915061108b6020840161104f565b90509250929050565b5f602082840312156110a4575f80fd5b5035919050565b5f80604083850312156110bc575f80fd5b50508035926020909101359150565b5f805f80608085870312156110de575f80fd5b6110e78561104f565b93506110f56020860161104f565b93969395505050506040820135916060013590565b5f6020828403121561111a575f80fd5b6111238261104f565b9392505050565b634e487b7160e01b5f52603260045260245ffd5b60208082526030908201527f4f6e6c7920746865206c6f636b2062656e65666963696172792063616e20636160408201526f3636103a3434b990333ab731ba34b7b760811b606082015260800190565b5f6020828403121561119e575f80fd5b5051919050565b5f602082840312156111b5575f80fd5b81518015158114611123575f80fd5b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176111ef576111ef6111c4565b92915050565b5f8261120f57634e487b7160e01b5f52601260045260245ffd5b500490565b818103818111156111ef576111ef6111c456fea2646970667358221220358975d46abfa18e8c40fb162e21d043a9e9fea820e2eaba0b99c6dd64871b8c64736f6c63430008150033
Deployed Bytecode
0x608060405234801561000f575f80fd5b5060043610610106575f3560e01c80636cad3fb01161009e578063a001ecdd1161006e578063a001ecdd146101e3578063ae5276bd146101ec578063e3be8312146101ff578063f2fde38b14610212578063f4dadc6114610225575f80fd5b80636cad3fb01461019c578063715018a6146101af5780638da5cb5b146101b757806394493c43146101d1575f80fd5b806351858e27116100d957806351858e271461014d5780635a04fb69146101555780635c975abb146101685780636198e33914610189575f80fd5b80631f0890081461010a578063315a095d1461011f5780633e8eb5a4146101325780634a4e3bd514610145575b5f80fd5b61011d61011836600461106a565b61026d565b005b61011d61012d366004611094565b61035b565b61011d61014036600461106a565b610609565b61011d6106ea565b61011d6106fc565b61011d61016336600461106a565b61070c565b5f54600160a01b900460ff1660405190151581526020015b60405180910390f35b61011d610197366004611094565b610803565b61011d6101aa366004611094565b610892565b61011d61094d565b5f546040516001600160a01b039091168152602001610180565b6003545b604051908152602001610180565b6101d560025481565b61011d6101fa3660046110ab565b61095e565b61011d61020d3660046110cb565b610a2c565b61011d61022036600461110a565b610d56565b610238610233366004611094565b610dcf565b604080516001600160a01b0396871681529590941660208601529284019190915260608301521515608082015260a001610180565b610275610e1d565b61027d610e76565b6001600160a01b0381166102d85760405162461bcd60e51b815260206004820152601960248201527f496e76616c696420637573746f6469616e20616464726573730000000000000060448201526064015b60405180910390fd5b80600383815481106102ec576102ec61112a565b5f9182526020918290206005919091020160010180546001600160a01b0319166001600160a01b0393841617905560408051858152928416918301919091527f61568198dcc68338b2d941786f4041fd903012b4e9a7f8f4dc5774f3da15f93391015b60405180910390a15050565b806003818154811061036f5761036f61112a565b5f9182526020909120600590910201600101546001600160a01b031633146103a95760405162461bcd60e51b81526004016102cf9061113e565b81600381815481106103bd576103bd61112a565b5f91825260209091206004600590920201015460ff161580156104025750600381815481106103ee576103ee61112a565b905f5260205f209060050201600201544210155b6104625760405162461bcd60e51b815260206004820152602b60248201527f546f6b656e7320617265207374696c6c206c6f636b6564206f72206e6f74207960448201526a195d081d5b9b1bd8dad95960aa1b60648201526084016102cf565b61046a610e76565b610472610ec2565b5f600384815481106104865761048661112a565b5f918252602082206005919091020180546040516370a0823160e01b81523060048201529193506001600160a01b0316906370a0823190602401602060405180830381865afa1580156104db573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104ff919061118e565b90505f81116105485760405162461bcd60e51b81526020600482015260156024820152744e6f20746f6b656e7320746f20776974686472617760581b60448201526064016102cf565b8154600183015460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810184905291169063a9059cbb906044016020604051808303815f875af115801561059b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105bf91906111a5565b5060408051868152602081018390527f66b83f1531e8e33a4c404458c73c34e03a1233541a8bbe6127f85660b414d3c7910160405180910390a1505061060460018055565b505050565b610611610e1d565b610619610e76565b6001600160a01b03811661066f5760405162461bcd60e51b815260206004820152601b60248201527f496e76616c69642062656e65666963696172792061646472657373000000000060448201526064016102cf565b80600383815481106106835761068361112a565b5f9182526020918290206005919091020160010180546001600160a01b0319166001600160a01b0393841617905560408051858152928416918301919091527fa6651cd315e1b1d3d439de42416a9f109ebffaa21aed0412debe15da701f4412910161034f565b6106f2610e1d565b6106fa610f1b565b565b610704610e1d565b6106fa610f6f565b81600381815481106107205761072061112a565b5f9182526020909120600590910201600101546001600160a01b0316331461075a5760405162461bcd60e51b81526004016102cf9061113e565b610762610e76565b6001600160a01b0382166107b85760405162461bcd60e51b815260206004820152601960248201527f496e76616c6964206e6577206f776e657220616464726573730000000000000060448201526064016102cf565b81600384815481106107cc576107cc61112a565b905f5260205f2090600502016001015f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550505050565b80600381815481106108175761081761112a565b5f9182526020909120600590910201600101546001600160a01b031633146108515760405162461bcd60e51b81526004016102cf9061113e565b610859610e76565b5f6003838154811061086d5761086d61112a565b5f9182526020909120600590910201600401805460ff19169115159190911790555050565b61089a610e1d565b6103e88111156109125760405162461bcd60e51b815260206004820152603860248201527f4665652070657263656e74616765206d757374206265206c657373207468616e60448201527f206f7220657175616c20746f203130303020283130302529000000000000000060648201526084016102cf565b60028190556040518181527f74516f05eb4bd2461d57aa1e935ee553f86a3e02bfed7759f2f772915de3d9be9060200160405180910390a150565b610955610e1d565b6106fa5f610fb1565b610966610e1d565b61096e610e76565b4281116109cb5760405162461bcd60e51b815260206004820152602560248201527f4e657720756e6c6f636b2064617465206d75737420626520696e207468652066604482015264757475726560d81b60648201526084016102cf565b80600383815481106109df576109df61112a565b905f5260205f209060050201600201819055507ffcf140ea00e0bccdcd31676b58902f0d6b3b7ff9f7135b5d24bf697e36110b96828260405161034f929190918252602082015260400190565b610a34610e76565b610a3c610ec2565b428211610a955760405162461bcd60e51b815260206004820152602160248201527f556e6c6f636b2064617465206d75737420626520696e207468652066757475726044820152606560f81b60648201526084016102cf565b60025484905f906103e890610aaa90856111d8565b610ab491906111f5565b90505f610ac18285611214565b6040516323b872dd60e01b8152336004820152306024820152604481018290529091506001600160a01b038416906323b872dd906064016020604051808303815f875af1158015610b14573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b3891906111a5565b506040805160a0810182526001600160a01b0380861680835289821660208401908152938301898152606084018981526001608086018181526003805492830181555f52955160059091027fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b810180549287166001600160a01b031993841617905596517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85c8801805491909616911617909355517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85d85015590517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85e84015590517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85f909201805492151560ff199093169290921790915563a9059cbb610c845f546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018590526044016020604051808303815f875af1158015610cce573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cf291906111a5565b5060035433907f90e20a62e0f2a608d33bd96a4e15cb853006a15caf4455f373b7b55de520b68c90610d2690600190611214565b6040805191825260208201889052810188905260600160405180910390a2505050610d5060018055565b50505050565b610d5e610e1d565b6001600160a01b038116610dc35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102cf565b610dcc81610fb1565b50565b60038181548110610dde575f80fd5b5f918252602090912060059091020180546001820154600283015460038401546004909401546001600160a01b03938416955091909216929060ff1685565b5f546001600160a01b031633146106fa5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102cf565b5f54600160a01b900460ff16156106fa5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016102cf565b600260015403610f145760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016102cf565b6002600155565b610f23611000565b5f805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b610f77610e76565b5f805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610f523390565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f54600160a01b900460ff166106fa5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016102cf565b80356001600160a01b0381168114611065575f80fd5b919050565b5f806040838503121561107b575f80fd5b8235915061108b6020840161104f565b90509250929050565b5f602082840312156110a4575f80fd5b5035919050565b5f80604083850312156110bc575f80fd5b50508035926020909101359150565b5f805f80608085870312156110de575f80fd5b6110e78561104f565b93506110f56020860161104f565b93969395505050506040820135916060013590565b5f6020828403121561111a575f80fd5b6111238261104f565b9392505050565b634e487b7160e01b5f52603260045260245ffd5b60208082526030908201527f4f6e6c7920746865206c6f636b2062656e65666963696172792063616e20636160408201526f3636103a3434b990333ab731ba34b7b760811b606082015260800190565b5f6020828403121561119e575f80fd5b5051919050565b5f602082840312156111b5575f80fd5b81518015158114611123575f80fd5b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176111ef576111ef6111c4565b92915050565b5f8261120f57634e487b7160e01b5f52601260045260245ffd5b500490565b818103818111156111ef576111ef6111c456fea2646970667358221220358975d46abfa18e8c40fb162e21d043a9e9fea820e2eaba0b99c6dd64871b8c64736f6c63430008150033
Deployed Bytecode Sourcemap
12389:4708:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16425:303;;;;;;:::i;:::-;;:::i;:::-;;14563:421;;;;;;:::i;:::-;;:::i;15641:307::-;;;;;;:::i;:::-;;:::i;16916:76::-;;;:::i;16785:72::-;;;:::i;15046:261::-;;;;;;:::i;:::-;;:::i;5806:86::-;5853:4;5877:7;-1:-1:-1;;;5877:7:0;;;;5806:86;;801:14:1;;794:22;776:41;;764:2;749:18;5806:86:0;;;;;;;;16278:139;;;;;;:::i;:::-;;:::i;15350:283::-;;;;;;:::i;:::-;;:::i;8664:103::-;;;:::i;8023:87::-;8069:7;8096:6;8023:87;;-1:-1:-1;;;;;8096:6:0;;;974:51:1;;962:2;947:18;8023:87:0;828:203:1;17000:94:0;17074:5;:12;17000:94;;;1182:25:1;;;1170:2;1155:18;17000:94:0;1036:177:1;12626:32:0;;;;;;15956:314;;;;;;:::i;:::-;;:::i;13602:953::-;;;;;;:::i;:::-;;:::i;8922:201::-;;;;;;:::i;:::-;;:::i;12695:19::-;;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;2387:15:1;;;2369:34;;2439:15;;;;2434:2;2419:18;;2412:43;2471:18;;;2464:34;;;;2529:2;2514:18;;2507:34;2585:14;2578:22;2572:3;2557:19;;2550:51;2318:3;2303:19;12695::0;2064:543:1;16425:303:0;7909:13;:11;:13::i;:::-;5411:19:::1;:17;:19::i;:::-;-1:-1:-1::0;;;;;16547:26:0;::::2;16539:64;;;::::0;-1:-1:-1;;;16539:64:0;;2814:2:1;16539:64:0::2;::::0;::::2;2796:21:1::0;2853:2;2833:18;;;2826:30;2892:27;2872:18;;;2865:55;2937:18;;16539:64:0::2;;;;;;;;;16645:12;16614:5;16620:9;16614:16;;;;;;;;:::i;:::-;;::::0;;;::::2;::::0;;;;::::2;::::0;;;::::2;;:28;;:43:::0;;-1:-1:-1;;;;;;16614:43:0::2;-1:-1:-1::0;;;;;16614:43:0;;::::2;;::::0;;16673:47:::2;::::0;;3272:25:1;;;3333:32;;;3313:18;;;3306:60;;;;16673:47:0::2;::::0;3245:18:1;16673:47:0::2;;;;;;;;16425:303:::0;;:::o;14563:421::-;14635:9;13255:5;13261:9;13255:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:28;;;-1:-1:-1;;;;;13255:28:0;13241:10;:42;13233:103;;;;-1:-1:-1;;;13233:103:0;;;;;;;:::i;:::-;14663:9:::1;13429:5;13435:9;13429:16;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;:23:::1;:16;::::0;;::::1;;:23;::::0;::::1;;13428:24;:74:::0;::::1;;;;13475:5;13481:9;13475:16;;;;;;;;:::i;:::-;;;;;;;;;;;:27;;;13456:15;:46;;13428:74;13420:130;;;::::0;-1:-1:-1;;;13420:130:0;;3996:2:1;13420:130:0::1;::::0;::::1;3978:21:1::0;4035:2;4015:18;;;4008:30;4074:34;4054:18;;;4047:62;-1:-1:-1;;;4125:18:1;;;4118:41;4176:19;;13420:130:0::1;3794:407:1::0;13420:130:0::1;5411:19:::2;:17;:19::i;:::-;2345:21:::3;:19;:21::i;:::-;14712:17:::4;14732:5;14738:9;14732:16;;;;;;;;:::i;:::-;;::::0;;;::::4;::::0;;::::4;::::0;;;::::4;;14777:10:::0;;:35:::4;::::0;-1:-1:-1;;;14777:35:0;;14806:4:::4;14777:35;::::0;::::4;974:51:1::0;14732:16:0;;-1:-1:-1;;;;;;14777:10:0::4;::::0;:20:::4;::::0;947:18:1;;14777:35:0::4;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14759:53;;14841:1;14831:7;:11;14823:45;;;::::0;-1:-1:-1;;;14823:45:0;;4597:2:1;14823:45:0::4;::::0;::::4;4579:21:1::0;4636:2;4616:18;;;4609:30;-1:-1:-1;;;4655:18:1;;;4648:51;4716:18;;14823:45:0::4;4395:345:1::0;14823:45:0::4;14879:10:::0;;;14899:16;::::4;::::0;14879:46:::4;::::0;-1:-1:-1;;;14879:46:0;;-1:-1:-1;;;;;14899:16:0;;::::4;14879:46;::::0;::::4;4919:51:1::0;4986:18;;;4979:34;;;14879:10:0;::::4;::::0;:19:::4;::::0;4892:18:1;;14879:46:0::4;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;14941:35:0::4;::::0;;5480:25:1;;;5536:2;5521:18;;5514:34;;;14941:35:0::4;::::0;5453:18:1;14941:35:0::4;;;;;;;14701:283;;2389:20:::3;1783:1:::0;2909:22;;2726:213;2389:20:::3;13347:1:::1;14563:421:::0;;:::o;15641:307::-;7909:13;:11;:13::i;:::-;5411:19:::1;:17;:19::i;:::-;-1:-1:-1::0;;;;;15763:28:0;::::2;15755:68;;;::::0;-1:-1:-1;;;15755:68:0;;5761:2:1;15755:68:0::2;::::0;::::2;5743:21:1::0;5800:2;5780:18;;;5773:30;5839:29;5819:18;;;5812:57;5886:18;;15755:68:0::2;5559:351:1::0;15755:68:0::2;15865:14;15834:5;15840:9;15834:16;;;;;;;;:::i;:::-;;::::0;;;::::2;::::0;;;;::::2;::::0;;;::::2;;:28;;:45:::0;;-1:-1:-1;;;;;;15834:45:0::2;-1:-1:-1::0;;;;;15834:45:0;;::::2;;::::0;;15895::::2;::::0;;3272:25:1;;;3333:32;;;3313:18;;;3306:60;;;;15895:45:0::2;::::0;3245:18:1;15895:45:0::2;3098:274:1::0;16916:76:0;7909:13;:11;:13::i;:::-;16974:10:::1;:8;:10::i;:::-;16916:76::o:0;16785:72::-;7909:13;:11;:13::i;:::-;16841:8:::1;:6;:8::i;15046:261::-:0;15143:9;13255:5;13261:9;13255:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:28;;;-1:-1:-1;;;;;13255:28:0;13241:10;:42;13233:103;;;;-1:-1:-1;;;13233:103:0;;;;;;;:::i;:::-;5411:19:::1;:17;:19::i;:::-;-1:-1:-1::0;;;;;15187:22:0;::::2;15179:60;;;::::0;-1:-1:-1;;;15179:60:0;;6117:2:1;15179:60:0::2;::::0;::::2;6099:21:1::0;6156:2;6136:18;;;6129:30;6195:27;6175:18;;;6168:55;6240:18;;15179:60:0::2;5915:349:1::0;15179:60:0::2;15282:8;15251:5;15257:9;15251:16;;;;;;;;:::i;:::-;;;;;;;;;;;:28;;;:39;;;;;-1:-1:-1::0;;;;;15251:39:0::2;;;;;-1:-1:-1::0;;;;;15251:39:0::2;;;;;;15046:261:::0;;;:::o;16278:139::-;16342:9;13255:5;13261:9;13255:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:28;;;-1:-1:-1;;;;;13255:28:0;13241:10;:42;13233:103;;;;-1:-1:-1;;;13233:103:0;;;;;;;:::i;:::-;5411:19:::1;:17;:19::i;:::-;16404:5:::2;16378;16384:9;16378:16;;;;;;;;:::i;:::-;;::::0;;;::::2;::::0;;;::::2;::::0;;::::2;;:23;;:31:::0;;-1:-1:-1;;16378:31:0::2;::::0;::::2;;::::0;;;::::2;::::0;;-1:-1:-1;;16278:139:0:o;15350:283::-;7909:13;:11;:13::i;:::-;15463:4:::1;15443:16;:24;;15435:93;;;::::0;-1:-1:-1;;;15435:93:0;;6471:2:1;15435:93:0::1;::::0;::::1;6453:21:1::0;6510:2;6490:18;;;6483:30;6549:34;6529:18;;;6522:62;6620:26;6600:18;;;6593:54;6664:19;;15435:93:0::1;6269:420:1::0;15435:93:0::1;15539:13;:32:::0;;;15587:38:::1;::::0;1182:25:1;;;15587:38:0::1;::::0;1170:2:1;1155:18;15587:38:0::1;;;;;;;15350:283:::0;:::o;8664:103::-;7909:13;:11;:13::i;:::-;8729:30:::1;8756:1;8729:18;:30::i;15956:314::-:0;7909:13;:11;:13::i;:::-;5411:19:::1;:17;:19::i;:::-;16092:15:::2;16076:13;:31;16068:81;;;::::0;-1:-1:-1;;;16068:81:0;;6896:2:1;16068:81:0::2;::::0;::::2;6878:21:1::0;6935:2;6915:18;;;6908:30;6974:34;6954:18;;;6947:62;-1:-1:-1;;;7025:18:1;;;7018:35;7070:19;;16068:81:0::2;6694:401:1::0;16068:81:0::2;16190:13;16160:5;16166:9;16160:16;;;;;;;;:::i;:::-;;;;;;;;;;;:27;;:43;;;;16219;16237:9;16248:13;16219:43;;;;;;5480:25:1::0;;;5536:2;5521:18;;5514:34;5468:2;5453:18;;5306:248;13602:953:0;5411:19;:17;:19::i;:::-;2345:21:::1;:19;:21::i;:::-;13763:15:::2;13749:11;:29;13741:75;;;::::0;-1:-1:-1;;;13741:75:0;;7302:2:1;13741:75:0::2;::::0;::::2;7284:21:1::0;7341:2;7321:18;;;7314:30;7380:34;7360:18;;;7353:62;-1:-1:-1;;;7431:18:1;;;7424:31;7472:19;;13741:75:0::2;7100:397:1::0;13741:75:0::2;13894:13;::::0;13849:6;;13827:12:::2;::::0;13911:4:::2;::::0;13885:22:::2;::::0;:6;:22:::2;:::i;:::-;13884:31;;;;:::i;:::-;13864:51:::0;-1:-1:-1;14018:30:0::2;14051:18;13864:51:::0;14051:6;:18:::2;:::i;:::-;14090:69;::::0;-1:-1:-1;;;14090:69:0;;14109:10:::2;14090:69;::::0;::::2;8402:34:1::0;14129:4:0::2;8452:18:1::0;;;8445:43;8504:18;;;8497:34;;;14018:51:0;;-1:-1:-1;;;;;;14090:18:0;::::2;::::0;::::2;::::0;8337::1;;14090:69:0::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;14191:186:0::2;::::0;;::::2;::::0;::::2;::::0;;-1:-1:-1;;;;;14191:186:0;;::::2;::::0;;;;;::::2;;::::0;::::2;::::0;;;;;;;;;;;;;;;14361:4:::2;14191:186:::0;;;;;;14180:5:::2;:198:::0;;;;::::2;::::0;;-1:-1:-1;14180:198:0;;;::::2;::::0;;::::2;::::0;;::::2;::::0;;;;::::2;-1:-1:-1::0;;;;;;14180:198:0;;::::2;;::::0;;;;;;;;;;;;::::2;::::0;::::2;;::::0;;;;;;;;;;;;;;;;;;;;;;;::::2;;-1:-1:-1::0;;14180:198:0;;::::2;::::0;;;::::2;::::0;;;14434:14:::2;14449:7;8069::::0;8096:6;-1:-1:-1;;;;;8096:6:0;;8023:87;14449:7:::2;14434:34;::::0;-1:-1:-1;;;;;;14434:34:0::2;::::0;;;;;;-1:-1:-1;;;;;4937:32:1;;;14434:34:0::2;::::0;::::2;4919:51:1::0;4986:18;;;4979:34;;;4892:18;;14434:34:0::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;14509:5:0::2;:12:::0;14497:10:::2;::::0;14484:63:::2;::::0;14509:16:::2;::::0;14524:1:::2;::::0;14509:16:::2;:::i;:::-;14484:63;::::0;;8744:25:1;;;8800:2;8785:18;;8778:34;;;8828:18;;8821:34;;;8732:2;8717:18;14484:63:0::2;;;;;;;13730:825;;;2389:20:::1;1783:1:::0;2909:22;;2726:213;2389:20:::1;13602:953:::0;;;;:::o;8922:201::-;7909:13;:11;:13::i;:::-;-1:-1:-1;;;;;9011:22:0;::::1;9003:73;;;::::0;-1:-1:-1;;;9003:73:0;;9068:2:1;9003:73:0::1;::::0;::::1;9050:21:1::0;9107:2;9087:18;;;9080:30;9146:34;9126:18;;;9119:62;-1:-1:-1;;;9197:18:1;;;9190:36;9243:19;;9003:73:0::1;8866:402:1::0;9003:73:0::1;9087:28;9106:8;9087:18;:28::i;:::-;8922:201:::0;:::o;12695:19::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12695:19:0;;;;-1:-1:-1;12695:19:0;;;;;;;;;:::o;8188:132::-;8069:7;8096:6;-1:-1:-1;;;;;8096:6:0;3999:10;8252:23;8244:68;;;;-1:-1:-1;;;8244:68:0;;9475:2:1;8244:68:0;;;9457:21:1;;;9494:18;;;9487:30;9553:34;9533:18;;;9526:62;9605:18;;8244:68:0;9273:356:1;5965:108:0;5853:4;5877:7;-1:-1:-1;;;5877:7:0;;;;6035:9;6027:38;;;;-1:-1:-1;;;6027:38:0;;9836:2:1;6027:38:0;;;9818:21:1;9875:2;9855:18;;;9848:30;-1:-1:-1;;;9894:18:1;;;9887:46;9950:18;;6027:38:0;9634:340:1;2425:293:0;1827:1;2559:7;;:19;2551:63;;;;-1:-1:-1;;;2551:63:0;;10181:2:1;2551:63:0;;;10163:21:1;10220:2;10200:18;;;10193:30;10259:33;10239:18;;;10232:61;10310:18;;2551:63:0;9979:355:1;2551:63:0;1827:1;2692:7;:18;2425:293::o;6661:120::-;5670:16;:14;:16::i;:::-;6730:5:::1;6720:15:::0;;-1:-1:-1;;;;6720:15:0::1;::::0;;6751:22:::1;3999:10:::0;6760:12:::1;6751:22;::::0;-1:-1:-1;;;;;992:32:1;;;974:51;;962:2;947:18;6751:22:0::1;;;;;;;6661:120::o:0;6402:118::-;5411:19;:17;:19::i;:::-;6462:7:::1;:14:::0;;-1:-1:-1;;;;6462:14:0::1;-1:-1:-1::0;;;6462:14:0::1;::::0;;6492:20:::1;6499:12;3999:10:::0;;3919:98;9283:191;9357:16;9376:6;;-1:-1:-1;;;;;9393:17:0;;;-1:-1:-1;;;;;;9393:17:0;;;;;;9426:40;;9376:6;;;;;;;9426:40;;9357:16;9426:40;9346:128;9283:191;:::o;6150:108::-;5853:4;5877:7;-1:-1:-1;;;5877:7:0;;;;6209:41;;;;-1:-1:-1;;;6209:41:0;;10541:2:1;6209:41:0;;;10523:21:1;10580:2;10560:18;;;10553:30;-1:-1:-1;;;10599:18:1;;;10592:50;10659:18;;6209:41:0;10339:344:1;14:173;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:254::-;260:6;268;321:2;309:9;300:7;296:23;292:32;289:52;;;337:1;334;327:12;289:52;373:9;360:23;350:33;;402:38;436:2;425:9;421:18;402:38;:::i;:::-;392:48;;192:254;;;;;:::o;451:180::-;510:6;563:2;551:9;542:7;538:23;534:32;531:52;;;579:1;576;569:12;531:52;-1:-1:-1;602:23:1;;451:180;-1:-1:-1;451:180:1:o;1218:248::-;1286:6;1294;1347:2;1335:9;1326:7;1322:23;1318:32;1315:52;;;1363:1;1360;1353:12;1315:52;-1:-1:-1;;1386:23:1;;;1456:2;1441:18;;;1428:32;;-1:-1:-1;1218:248:1:o;1471:397::-;1557:6;1565;1573;1581;1634:3;1622:9;1613:7;1609:23;1605:33;1602:53;;;1651:1;1648;1641:12;1602:53;1674:29;1693:9;1674:29;:::i;:::-;1664:39;;1722:38;1756:2;1745:9;1741:18;1722:38;:::i;:::-;1471:397;;1712:48;;-1:-1:-1;;;;1807:2:1;1792:18;;1779:32;;1858:2;1843:18;1830:32;;1471:397::o;1873:186::-;1932:6;1985:2;1973:9;1964:7;1960:23;1956:32;1953:52;;;2001:1;1998;1991:12;1953:52;2024:29;2043:9;2024:29;:::i;:::-;2014:39;1873:186;-1:-1:-1;;;1873:186:1:o;2966:127::-;3027:10;3022:3;3018:20;3015:1;3008:31;3058:4;3055:1;3048:15;3082:4;3079:1;3072:15;3377:412;3579:2;3561:21;;;3618:2;3598:18;;;3591:30;3657:34;3652:2;3637:18;;3630:62;-1:-1:-1;;;3723:2:1;3708:18;;3701:46;3779:3;3764:19;;3377:412::o;4206:184::-;4276:6;4329:2;4317:9;4308:7;4304:23;4300:32;4297:52;;;4345:1;4342;4335:12;4297:52;-1:-1:-1;4368:16:1;;4206:184;-1:-1:-1;4206:184:1:o;5024:277::-;5091:6;5144:2;5132:9;5123:7;5119:23;5115:32;5112:52;;;5160:1;5157;5150:12;5112:52;5192:9;5186:16;5245:5;5238:13;5231:21;5224:5;5221:32;5211:60;;5267:1;5264;5257:12;7502:127;7563:10;7558:3;7554:20;7551:1;7544:31;7594:4;7591:1;7584:15;7618:4;7615:1;7608:15;7634:168;7707:9;;;7738;;7755:15;;;7749:22;;7735:37;7725:71;;7776:18;;:::i;:::-;7634:168;;;;:::o;7807:217::-;7847:1;7873;7863:132;;7917:10;7912:3;7908:20;7905:1;7898:31;7952:4;7949:1;7942:15;7980:4;7977:1;7970:15;7863:132;-1:-1:-1;8009:9:1;;7807:217::o;8029:128::-;8096:9;;;8117:11;;;8114:37;;;8131:18;;:::i
Swarm Source
ipfs://358975d46abfa18e8c40fb162e21d043a9e9fea820e2eaba0b99c6dd64871b8c
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
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.