More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 41 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Get Reward | 19893300 | 233 days ago | IN | 0 ETH | 0.00027707 | ||||
Withdraw | 19626157 | 270 days ago | IN | 0 ETH | 0.00241302 | ||||
Get Reward | 19626155 | 270 days ago | IN | 0 ETH | 0.00130634 | ||||
Get Reward | 19626151 | 270 days ago | IN | 0 ETH | 0.0014068 | ||||
Get Reward | 19626148 | 270 days ago | IN | 0 ETH | 0.00290344 | ||||
Withdraw | 19523600 | 284 days ago | IN | 0 ETH | 0.00147614 | ||||
Get Reward | 19523595 | 284 days ago | IN | 0 ETH | 0.00170309 | ||||
Get Reward | 19147602 | 337 days ago | IN | 0 ETH | 0.00138177 | ||||
Emergency Withdr... | 19045890 | 351 days ago | IN | 0 ETH | 0.0017973 | ||||
Get Reward | 19045888 | 351 days ago | IN | 0 ETH | 0.00117112 | ||||
Stake | 18986117 | 360 days ago | IN | 0 ETH | 0.00338443 | ||||
Emergency Withdr... | 18951097 | 365 days ago | IN | 0 ETH | 0.00191694 | ||||
Get Reward | 18951094 | 365 days ago | IN | 0 ETH | 0.00148919 | ||||
Emergency Withdr... | 18924270 | 368 days ago | IN | 0 ETH | 0.00167442 | ||||
Get Reward | 18898797 | 372 days ago | IN | 0 ETH | 0.00084989 | ||||
Emergency Withdr... | 18898794 | 372 days ago | IN | 0 ETH | 0.00181196 | ||||
Stake | 18885394 | 374 days ago | IN | 0 ETH | 0.00489429 | ||||
Stake | 18871191 | 376 days ago | IN | 0 ETH | 0.00261113 | ||||
Emergency Withdr... | 18870870 | 376 days ago | IN | 0 ETH | 0.00352803 | ||||
Stake | 18867930 | 376 days ago | IN | 0 ETH | 0.00187334 | ||||
Get Reward | 18867715 | 376 days ago | IN | 0 ETH | 0.00108815 | ||||
Stake | 18864159 | 377 days ago | IN | 0 ETH | 0.004583 | ||||
Stake | 18863918 | 377 days ago | IN | 0 ETH | 0.00299487 | ||||
Stake | 18848921 | 379 days ago | IN | 0 ETH | 0.00319919 | ||||
Stake | 18848659 | 379 days ago | IN | 0 ETH | 0.00265063 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
Staking
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-12-21 */ //SPDX-License-Identifier: UNLICENSED pragma solidity 0.8.19; library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @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://diligence.consensys.net/posts/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.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{value: amount}(""); require( success, "Address: unable to send value, recipient may have reverted" ); } /** * @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, it is bubbled up by this * function (like regular Solidity function calls). * * 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. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data ) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @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`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue( target, data, value, "Address: low-level call with value failed" ); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require( address(this).balance >= value, "Address: insufficient balance for call" ); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{value: value}( data ); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data ) internal view returns (bytes memory) { return functionStaticCall( target, data, "Address: low-level static call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private pure returns (bytes memory) { if (success) { return returndata; } else { // 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 // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer( address recipient, uint256 amount ) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance( address owner, address spender ) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval( address indexed owner, address indexed spender, uint256 value ); } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } 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 Returns true if the contract is paused, and false otherwise. */ function paused() public view returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!_paused, "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { 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()); } } library SafeMath { function tryAdd( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } function trySub( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } function tryMul( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } function tryDiv( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } function tryMod( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn( token, abi.encodeWithSelector(token.transfer.selector, to, value) ); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn( token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value) ); } function safeApprove( IERC20 token, address spender, uint256 value ) internal { require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn( token, abi.encodeWithSelector(token.approve.selector, spender, value) ); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender).add( value ); _callOptionalReturn( token, abi.encodeWithSelector( token.approve.selector, spender, newAllowance ) ); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender).sub( value, "SafeERC20: decreased allowance below zero" ); _callOptionalReturn( token, abi.encodeWithSelector( token.approve.selector, spender, newAllowance ) ); } function _callOptionalReturn(IERC20 token, bytes memory data) private { bytes memory returndata = address(token).functionCall( data, "SafeERC20: low-level call failed" ); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require( abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed" ); } } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); constructor() { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } contract Staking is Pausable, Ownable { using SafeMath for uint256; using SafeERC20 for IERC20; IERC20 public rewardsToken; IERC20 public stakingToken; uint256 public periodFinish = 0; uint256 public rewardRate = 0; uint256 public rewardsDuration; uint256 public lastUpdateTime; uint256 public rewardPerTokenStored; uint256 public stakingTokensDecimalRate; address public stakeAdmin; uint256 public lockDuration; bool private initialised; bool public locked; uint256 public constant MAX_UNSTAKE_FEE = 2000; uint256 public earlyUnstakeFee = 2000; mapping(address => uint256) public userRewardPerTokenPaid; mapping(address => uint256) public rewards; uint256 private _totalSupply; mapping(address => uint256) private _balances; modifier notContract() { require(!_isContract(msg.sender), "contract not allowed"); require(msg.sender == tx.origin, "proxy contract not allowed"); _; } function _isContract(address addr) internal view returns (bool) { uint256 size; assembly { size := extcodesize(addr) } return size > 0; } /* ========== CONSTRUCTOR ========== */ constructor() { stakingTokensDecimalRate = pow(10, 18); rewardsToken = IERC20(0xbFbA57800bce200915499078289299C86Af4A379); stakingToken = IERC20(0xbFbA57800bce200915499078289299C86Af4A379); rewardsDuration = 7776000; // 5184000 // 7776000 locked = true; if (locked) { lockDuration = 7776000; } stakeAdmin = 0xb642396141f0A07088902b1eBf0B4e65dD1b4B22; } function setStakeAdmin(address newAdmin) public onlyOwner { stakeAdmin = newAdmin; } /* ========== VIEWS ========== */ function totalSupply() external view returns (uint256) { return _totalSupply; } function pow(uint n, uint e) public pure returns (uint) { if (e == 0) { return 1; } else if (e == 1) { return n; } else { uint p = pow(n, e.div(2)); p = p.mul(p); if (e.mod(2) == 1) { p = p.mul(n); } return p; } } function balanceOf(address account) external view returns (uint256) { return _balances[account]; } function lastTimeRewardApplicable() public view returns (uint256) { return min(block.timestamp, periodFinish); } function rewardPerToken() public view returns (uint256) { if (_totalSupply == 0) { return rewardPerTokenStored; } return rewardPerTokenStored.add( lastTimeRewardApplicable() .sub(lastUpdateTime) .mul(rewardRate) .mul(stakingTokensDecimalRate) .div(_totalSupply) ); } function earned(address account) public view returns (uint256) { return _balances[account] .mul(rewardPerToken().sub(userRewardPerTokenPaid[account])) .div(stakingTokensDecimalRate) .add(rewards[account]); } function getRewardForDuration() external view returns (uint256) { return rewardRate.mul(rewardsDuration); } function getStakedBalances( address[] memory accounts ) public view returns (uint256[] memory) { uint256[] memory balances = new uint256[](accounts.length); for (uint256 i = 0; i < accounts.length; i++) { balances[i] = _balances[accounts[i]]; } return balances; } function min(uint256 a, uint256 b) public pure returns (uint256) { return a < b ? a : b; } function PoolInfo() public view returns ( uint256 _periodFinish, uint256 _rewardRate, uint256 _rewardsDuration, uint256 _lastUpdateTime, uint256 _rewardPerToken, uint256 _getRewardForDuration, uint256 _lockDuration, uint256 _earlyUnstakeFee, uint256 _totSupply ) { _periodFinish = periodFinish; _rewardRate = rewardRate; _rewardsDuration = rewardsDuration; _lastUpdateTime = lastUpdateTime; _rewardPerToken = rewardPerToken(); _getRewardForDuration = rewardRate.mul(rewardsDuration); _lockDuration = lockDuration; _earlyUnstakeFee = earlyUnstakeFee; _totSupply = _totalSupply; } function UserInfo( address account ) public view returns (uint256 _balanceOf, uint256 _earned, uint256 _rewards) { _balanceOf = _balances[account]; _earned = earned(account); _rewards = rewards[account]; } /* ========== MUTATIVE FUNCTIONS ========== */ function stake( uint256 amount ) external notContract whenNotPaused updateReward(msg.sender) { require(amount > 0, "Cannot stake 0"); _totalSupply = _totalSupply.add(amount); _balances[msg.sender] = _balances[msg.sender].add(amount); stakingToken.safeTransferFrom(msg.sender, address(this), amount); emit Staked(msg.sender, amount); } function withdraw( uint256 amount ) public notContract updateReward(msg.sender) { require(amount > 0, "Cannot withdraw 0"); if (locked) { require(block.timestamp >= periodFinish, "Lock Time is not over"); } _totalSupply = _totalSupply.sub(amount); _balances[msg.sender] = _balances[msg.sender].sub(amount); stakingToken.safeTransfer(msg.sender, amount); emit Withdrawn(msg.sender, amount); } function getReward() public notContract updateReward(msg.sender) { uint256 reward = rewards[msg.sender]; if (reward > 0) { rewards[msg.sender] = 0; rewardsToken.safeTransfer(msg.sender, reward); emit RewardPaid(msg.sender, reward); } } function emergencyWithdraw( uint256 amount ) public notContract updateReward(msg.sender) { require(amount > 0, "Cannot withdraw 0"); getReward(); _totalSupply = _totalSupply.sub(amount); _balances[msg.sender] = _balances[msg.sender].sub(amount); if (earlyUnstakeFee > 0) { uint256 adminFee = amount.mul(earlyUnstakeFee).div(10000); amount -= adminFee; stakingToken.safeTransfer(stakeAdmin, adminFee); } stakingToken.safeTransfer(msg.sender, amount); emit Withdrawn(msg.sender, amount); } function exit() external { withdraw(_balances[msg.sender]); getReward(); } /* ========== RESTRICTED FUNCTIONS ========== */ function notifyRewardAmount( uint256 reward ) external onlyOwner updateReward(address(0)) { if (block.timestamp >= periodFinish) { rewardRate = reward.div(rewardsDuration); } else { uint256 remaining = periodFinish.sub(block.timestamp); uint256 leftover = remaining.mul(rewardRate); rewardRate = reward.add(leftover).div(rewardsDuration); } // Ensure the provided reward amount is not more than the balance in the contract. // This keeps the reward rate in the right range, preventing overflows due to // very high values of rewardRate in the earned and rewardsPerToken functions; // Reward + leftover must be less than 2^256 / 10^18 to avoid overflow. uint256 balance = rewardsToken.balanceOf(address(this)); require( rewardRate <= balance.div(rewardsDuration), "Provided reward too high" ); lastUpdateTime = block.timestamp; periodFinish = block.timestamp.add(rewardsDuration); emit RewardAdded(reward); } function setEarlyUnstakeFee(uint256 _earlyUnstakeFee) external onlyOwner { require( _earlyUnstakeFee <= MAX_UNSTAKE_FEE, "earlyUnstakeFee cannot be more than MAX_UNSTAKE_FEE" ); earlyUnstakeFee = _earlyUnstakeFee; } // function setTokenInternalFee(uint256 _tokenInternalFess) external onlyOwner { // tokenInternalFess = _tokenInternalFess; // } function manualUnlock() external onlyOwner { locked = false; } function removeTokens( address tokenAddress, uint256 tokenAmount ) external onlyOwner { require( block.timestamp >= periodFinish + 2 hours, "Lock Time is not over" ); IERC20(tokenAddress).safeTransfer(msg.sender, tokenAmount); emit Recovered(tokenAddress, tokenAmount); } function setRewardsDuration(uint256 _rewardsDuration) external onlyOwner { require( block.timestamp > periodFinish, "Previous rewards period must be complete before changing the duration for the new period" ); rewardsDuration = _rewardsDuration; emit RewardsDurationUpdated(rewardsDuration); } /* ========== MODIFIERS ========== */ modifier updateReward(address account) { rewardPerTokenStored = rewardPerToken(); lastUpdateTime = lastTimeRewardApplicable(); if (account != address(0)) { rewards[account] = earned(account); userRewardPerTokenPaid[account] = rewardPerTokenStored; } _; } /* ========== EVENTS ========== */ event RewardAdded(uint256 reward); event Staked(address indexed user, uint256 amount); event Withdrawn(address indexed user, uint256 amount); event RewardPaid(address indexed user, uint256 reward); event RewardsDurationUpdated(uint256 newDuration); event Recovered(address token, uint256 amount); event Compounded(address indexed user, uint256 amount); }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Compounded","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":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Recovered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardPaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newDuration","type":"uint256"}],"name":"RewardsDurationUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdrawn","type":"event"},{"inputs":[],"name":"MAX_UNSTAKE_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PoolInfo","outputs":[{"internalType":"uint256","name":"_periodFinish","type":"uint256"},{"internalType":"uint256","name":"_rewardRate","type":"uint256"},{"internalType":"uint256","name":"_rewardsDuration","type":"uint256"},{"internalType":"uint256","name":"_lastUpdateTime","type":"uint256"},{"internalType":"uint256","name":"_rewardPerToken","type":"uint256"},{"internalType":"uint256","name":"_getRewardForDuration","type":"uint256"},{"internalType":"uint256","name":"_lockDuration","type":"uint256"},{"internalType":"uint256","name":"_earlyUnstakeFee","type":"uint256"},{"internalType":"uint256","name":"_totSupply","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"UserInfo","outputs":[{"internalType":"uint256","name":"_balanceOf","type":"uint256"},{"internalType":"uint256","name":"_earned","type":"uint256"},{"internalType":"uint256","name":"_rewards","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlyUnstakeFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"earned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"exit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getRewardForDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"getStakedBalances","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastTimeRewardApplicable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastUpdateTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"locked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualUnlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"a","type":"uint256"},{"internalType":"uint256","name":"b","type":"uint256"}],"name":"min","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"reward","type":"uint256"}],"name":"notifyRewardAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"periodFinish","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"n","type":"uint256"},{"internalType":"uint256","name":"e","type":"uint256"}],"name":"pow","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"removeTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardPerToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPerTokenStored","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_earlyUnstakeFee","type":"uint256"}],"name":"setEarlyUnstakeFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rewardsDuration","type":"uint256"}],"name":"setRewardsDuration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"setStakeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakeAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingTokensDecimalRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userRewardPerTokenPaid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052600060035560006004556107d0600c553480156200002157600080fd5b50600080546001600160a81b031916336101008102919091178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35062000077600a60126200010a565b600855600180546001600160a01b031990811673bfba57800bce200915499078289299c86af4a3799081179092556002805490911690911790556276a700600555600b805461ff00191661010090811791829055900460ff1615620000de576276a700600a555b600980546001600160a01b03191673b642396141f0a07088902b1ebf0b4e65dd1b4b221790556200021a565b6000816000036200011e5750600162000180565b816001036200012f57508162000180565b600062000149846200014385600262000186565b6200010a565b905062000157818062000194565b905062000166836002620001a2565b6001036200017d576200017a818562000194565b90505b90505b92915050565b60006200017d8284620001c6565b60006200017d8284620001dd565b60006200017d828462000203565b634e487b7160e01b600052601260045260246000fd5b600082620001d857620001d8620001b0565b500490565b80820281158282048414176200018057634e487b7160e01b600052601160045260246000fd5b600082620002155762000215620001b0565b500690565b611bc7806200022a6000396000f3fe608060405234801561001057600080fd5b50600436106102525760003560e01c80637b0a47ee11610146578063cc1a378f116100c3578063e120343c11610087578063e120343c146104fa578063e377ee1b14610502578063e94eab5b14610530578063e9fad8ee14610550578063ebe2b12b14610558578063f2fde38b1461056157600080fd5b8063cc1a378f146104b1578063cd3daf9d146104c4578063cf309012146104cc578063d1af0c7d146104de578063df136d65146104f157600080fd5b8063a694fc3a1161010a578063a694fc3a14610470578063a85fe3b714610483578063ada929201461048c578063b12dbd2214610495578063c8f33c91146104a857600080fd5b80637b0a47ee146103dd57806380faa57d146103e65780638b876347146103ee5780638da5cb5b1461040e578063a3e43ab21461042457600080fd5b80633c6b16ab116101d45780635c975abb116101985780635c975abb1461035757806370a082311461036e578063715018a61461039757806372f702f31461039f5780637ae2b5c7146103ca57600080fd5b80633c6b16ab146103035780633d18b912146103165780634e6cd3fa1461031e5780635312ea8e1461033157806359d6c3c41461034457600080fd5b80631c1f78eb1161021b5780631c1f78eb146102b75780631e10eeaf146102bf5780632e1a7d4d146102d45780632e4c697f146102e7578063386a9525146102fa57600080fd5b80628cc26214610257578063045544431461027d5780630700037d146102865780630711306d146102a657806318160ddd146102af575b600080fd5b61026a6102653660046117ea565b610574565b6040519081526020015b60405180910390f35b61026a600a5481565b61026a6102943660046117ea565b600e6020526000908152604090205481565b61026a600c5481565b600f5461026a565b61026a6105eb565b6102d26102cd366004611805565b610609565b005b6102d26102e236600461182f565b6106f2565b61026a6102f5366004611848565b6108b9565b61026a60055481565b6102d261031136600461182f565b61091f565b6102d2610b30565b6102d261032c3660046117ea565b610c3e565b6102d261033f36600461182f565b610c90565b6102d261035236600461182f565b610e19565b60005460ff165b6040519015158152602001610274565b61026a61037c3660046117ea565b6001600160a01b031660009081526010602052604090205490565b6102d2610ebc565b6002546103b2906001600160a01b031681565b6040516001600160a01b039091168152602001610274565b61026a6103d8366004611848565b610f3b565b61026a60045481565b61026a610f51565b61026a6103fc3660046117ea565b600d6020526000908152604090205481565b60005461010090046001600160a01b03166103b2565b61042c610f5f565b60408051998a5260208a0198909852968801959095526060870193909352608086019190915260a085015260c084015260e083015261010082015261012001610274565b6102d261047e36600461182f565b610fae565b61026a60085481565b61026a6107d081565b6009546103b2906001600160a01b031681565b61026a60065481565b6102d26104bf36600461182f565b611157565b61026a61125f565b600b5461035e90610100900460ff1681565b6001546103b2906001600160a01b031681565b61026a60075481565b6102d26112a4565b6105156105103660046117ea565b6112e1565b60408051938452602084019290925290820152606001610274565b61054361053e366004611880565b611326565b6040516102749190611945565b6102d26113f1565b61026a60035481565b6102d261056f3660046117ea565b611414565b6001600160a01b0381166000908152600e6020908152604080832054600854600d909352908320546105e5926105df916105d9906105ba906105b461125f565b9061150f565b6001600160a01b0388166000908152601060205260409020549061151b565b90611527565b90611533565b92915050565b600061060460055460045461151b90919063ffffffff16565b905090565b6000546001600160a01b036101009091041633146106425760405162461bcd60e51b815260040161063990611989565b60405180910390fd5b60035461065190611c206119d4565b4210156106985760405162461bcd60e51b81526020600482015260156024820152742637b1b5902a34b6b29034b9903737ba1037bb32b960591b6044820152606401610639565b6106ac6001600160a01b038316338361153f565b604080516001600160a01b0384168152602081018390527f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa28910160405180910390a15050565b333b156107115760405162461bcd60e51b8152600401610639906119e7565b3332146107305760405162461bcd60e51b815260040161063990611a15565b3361073961125f565b600755610744610f51565b6006556001600160a01b0381161561078b5761075f81610574565b6001600160a01b0382166000908152600e6020908152604080832093909355600754600d909152919020555b600082116107cf5760405162461bcd60e51b8152602060048201526011602482015270043616e6e6f74207769746864726177203607c1b6044820152606401610639565b600b54610100900460ff1615610829576003544210156108295760405162461bcd60e51b81526020600482015260156024820152742637b1b5902a34b6b29034b9903737ba1037bb32b960591b6044820152606401610639565b600f54610836908361150f565b600f5533600090815260106020526040902054610853908361150f565b3360008181526010602052604090209190915560025461087f916001600160a01b03909116908461153f565b60405182815233907f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5906020015b60405180910390a25050565b6000816000036108cb575060016105e5565b816001036108da5750816105e5565b60006108eb846102f5856002611527565b90506108f7818061151b565b90506109048360026115a7565b60010361091857610915818561151b565b90505b9392505050565b6000546001600160a01b0361010090910416331461094f5760405162461bcd60e51b815260040161063990611989565b600061095961125f565b600755610964610f51565b6006556001600160a01b038116156109ab5761097f81610574565b6001600160a01b0382166000908152600e6020908152604080832093909355600754600d909152919020555b60035442106109ca576005546109c2908390611527565b600455610a0d565b6003546000906109da904261150f565b905060006109f36004548361151b90919063ffffffff16565b600554909150610a07906105d98684611533565b60045550505b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610a56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7a9190611a4c565b9050610a916005548261152790919063ffffffff16565b6004541115610ae25760405162461bcd60e51b815260206004820152601860248201527f50726f76696465642072657761726420746f6f206869676800000000000000006044820152606401610639565b426006819055600554610af59190611533565b6003556040518381527fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d9060200160405180910390a1505050565b333b15610b4f5760405162461bcd60e51b8152600401610639906119e7565b333214610b6e5760405162461bcd60e51b815260040161063990611a15565b33610b7761125f565b600755610b82610f51565b6006556001600160a01b03811615610bc957610b9d81610574565b6001600160a01b0382166000908152600e6020908152604080832093909355600754600d909152919020555b336000908152600e60205260409020548015610c3a57336000818152600e6020526040812055600154610c08916001600160a01b03909116908361153f565b60405181815233907fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e0486906020016108ad565b5050565b6000546001600160a01b03610100909104163314610c6e5760405162461bcd60e51b815260040161063990611989565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b333b15610caf5760405162461bcd60e51b8152600401610639906119e7565b333214610cce5760405162461bcd60e51b815260040161063990611a15565b33610cd761125f565b600755610ce2610f51565b6006556001600160a01b03811615610d2957610cfd81610574565b6001600160a01b0382166000908152600e6020908152604080832093909355600754600d909152919020555b60008211610d6d5760405162461bcd60e51b8152602060048201526011602482015270043616e6e6f74207769746864726177203607c1b6044820152606401610639565b610d75610b30565b600f54610d82908361150f565b600f5533600090815260106020526040902054610d9f908361150f565b33600090815260106020526040902055600c5415610e02576000610dd46127106105d9600c548661151b90919063ffffffff16565b9050610de08184611a65565b600954600254919450610e00916001600160a01b0390811691168361153f565b505b60025461087f906001600160a01b0316338461153f565b6000546001600160a01b03610100909104163314610e495760405162461bcd60e51b815260040161063990611989565b6107d0811115610eb75760405162461bcd60e51b815260206004820152603360248201527f6561726c79556e7374616b654665652063616e6e6f74206265206d6f7265207460448201527268616e204d41585f554e5354414b455f46454560681b6064820152608401610639565b600c55565b6000546001600160a01b03610100909104163314610eec5760405162461bcd60e51b815260040161063990611989565b600080546040516101009091046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360008054610100600160a81b0319169055565b6000818310610f4a5781610918565b5090919050565b600061060442600354610f3b565b600354600454600554600654600080808080610f7961125f565b9450610f9260055460045461151b90919063ffffffff16565b9350600a549250600c549150600f549050909192939495969798565b333b15610fcd5760405162461bcd60e51b8152600401610639906119e7565b333214610fec5760405162461bcd60e51b815260040161063990611a15565b60005460ff16156110325760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610639565b3361103b61125f565b600755611046610f51565b6006556001600160a01b0381161561108d5761106181610574565b6001600160a01b0382166000908152600e6020908152604080832093909355600754600d909152919020555b600082116110ce5760405162461bcd60e51b815260206004820152600e60248201526d043616e6e6f74207374616b6520360941b6044820152606401610639565b600f546110db9083611533565b600f55336000908152601060205260409020546110f89083611533565b33600081815260106020526040902091909155600254611125916001600160a01b039091169030856115b3565b60405182815233907f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d906020016108ad565b6000546001600160a01b036101009091041633146111875760405162461bcd60e51b815260040161063990611989565b60035442116112245760405162461bcd60e51b815260206004820152605860248201527f50726576696f7573207265776172647320706572696f64206d7573742062652060448201527f636f6d706c657465206265666f7265206368616e67696e67207468652064757260648201527f6174696f6e20666f7220746865206e657720706572696f640000000000000000608482015260a401610639565b60058190556040518181527ffb46ca5a5e06d4540d6387b930a7c978bce0db5f449ec6b3f5d07c6e1d44f2d39060200160405180910390a150565b6000600f54600003611272575060075490565b61060461129b600f546105d96008546112956004546112956006546105b4610f51565b9061151b565b60075490611533565b6000546001600160a01b036101009091041633146112d45760405162461bcd60e51b815260040161063990611989565b600b805461ff0019169055565b6001600160a01b038116600090815260106020526040812054908061130584610574565b6001600160a01b039094166000908152600e60205260409020549294915050565b60606000825167ffffffffffffffff8111156113445761134461186a565b60405190808252806020026020018201604052801561136d578160200160208202803683370190505b50905060005b83518110156113ea576010600085838151811061139257611392611a78565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020548282815181106113cd576113cd611a78565b6020908102919091010152806113e281611a8e565b915050611373565b5092915050565b3360009081526010602052604090205461140a906106f2565b611412610b30565b565b6000546001600160a01b036101009091041633146114445760405162461bcd60e51b815260040161063990611989565b6001600160a01b0381166114a95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610639565b600080546040516001600160a01b038085169361010090930416917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b60006109188284611a65565b60006109188284611aa7565b60006109188284611ad4565b600061091882846119d4565b6040516001600160a01b0383166024820152604481018290526115a290849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526115f1565b505050565b60006109188284611ae8565b6040516001600160a01b03808516602483015283166044820152606481018290526115eb9085906323b872dd60e01b9060840161156b565b50505050565b6000611646826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166116c39092919063ffffffff16565b8051909150156115a257808060200190518101906116649190611afc565b6115a25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610639565b6060610915848460008585843b61171c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610639565b600080866001600160a01b031685876040516117389190611b42565b60006040518083038185875af1925050503d8060008114611775576040519150601f19603f3d011682016040523d82523d6000602084013e61177a565b606091505b509150915061178a828286611795565b979650505050505050565b606083156117a4575081610918565b8251156117b45782518084602001fd5b8160405162461bcd60e51b81526004016106399190611b5e565b80356001600160a01b03811681146117e557600080fd5b919050565b6000602082840312156117fc57600080fd5b610918826117ce565b6000806040838503121561181857600080fd5b611821836117ce565b946020939093013593505050565b60006020828403121561184157600080fd5b5035919050565b6000806040838503121561185b57600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b6000602080838503121561189357600080fd5b823567ffffffffffffffff808211156118ab57600080fd5b818501915085601f8301126118bf57600080fd5b8135818111156118d1576118d161186a565b8060051b604051601f19603f830116810181811085821117156118f6576118f661186a565b60405291825284820192508381018501918883111561191457600080fd5b938501935b828510156119395761192a856117ce565b84529385019392850192611919565b98975050505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561197d57835183529284019291840191600101611961565b50909695505050505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b808201808211156105e5576105e56119be565b60208082526014908201527318dbdb9d1c9858dd081b9bdd08185b1b1bddd95960621b604082015260600190565b6020808252601a908201527f70726f787920636f6e7472616374206e6f7420616c6c6f776564000000000000604082015260600190565b600060208284031215611a5e57600080fd5b5051919050565b818103818111156105e5576105e56119be565b634e487b7160e01b600052603260045260246000fd5b600060018201611aa057611aa06119be565b5060010190565b80820281158282048414176105e5576105e56119be565b634e487b7160e01b600052601260045260246000fd5b600082611ae357611ae3611abe565b500490565b600082611af757611af7611abe565b500690565b600060208284031215611b0e57600080fd5b8151801515811461091857600080fd5b60005b83811015611b39578181015183820152602001611b21565b50506000910152565b60008251611b54818460208701611b1e565b9190910192915050565b6020815260008251806020840152611b7d816040850160208701611b1e565b601f01601f1916919091016040019291505056fea2646970667358221220838acdbf54b75a5dab63079f0fc22c89a96eb3116819643da8c310911e699c4064736f6c63430008130033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102525760003560e01c80637b0a47ee11610146578063cc1a378f116100c3578063e120343c11610087578063e120343c146104fa578063e377ee1b14610502578063e94eab5b14610530578063e9fad8ee14610550578063ebe2b12b14610558578063f2fde38b1461056157600080fd5b8063cc1a378f146104b1578063cd3daf9d146104c4578063cf309012146104cc578063d1af0c7d146104de578063df136d65146104f157600080fd5b8063a694fc3a1161010a578063a694fc3a14610470578063a85fe3b714610483578063ada929201461048c578063b12dbd2214610495578063c8f33c91146104a857600080fd5b80637b0a47ee146103dd57806380faa57d146103e65780638b876347146103ee5780638da5cb5b1461040e578063a3e43ab21461042457600080fd5b80633c6b16ab116101d45780635c975abb116101985780635c975abb1461035757806370a082311461036e578063715018a61461039757806372f702f31461039f5780637ae2b5c7146103ca57600080fd5b80633c6b16ab146103035780633d18b912146103165780634e6cd3fa1461031e5780635312ea8e1461033157806359d6c3c41461034457600080fd5b80631c1f78eb1161021b5780631c1f78eb146102b75780631e10eeaf146102bf5780632e1a7d4d146102d45780632e4c697f146102e7578063386a9525146102fa57600080fd5b80628cc26214610257578063045544431461027d5780630700037d146102865780630711306d146102a657806318160ddd146102af575b600080fd5b61026a6102653660046117ea565b610574565b6040519081526020015b60405180910390f35b61026a600a5481565b61026a6102943660046117ea565b600e6020526000908152604090205481565b61026a600c5481565b600f5461026a565b61026a6105eb565b6102d26102cd366004611805565b610609565b005b6102d26102e236600461182f565b6106f2565b61026a6102f5366004611848565b6108b9565b61026a60055481565b6102d261031136600461182f565b61091f565b6102d2610b30565b6102d261032c3660046117ea565b610c3e565b6102d261033f36600461182f565b610c90565b6102d261035236600461182f565b610e19565b60005460ff165b6040519015158152602001610274565b61026a61037c3660046117ea565b6001600160a01b031660009081526010602052604090205490565b6102d2610ebc565b6002546103b2906001600160a01b031681565b6040516001600160a01b039091168152602001610274565b61026a6103d8366004611848565b610f3b565b61026a60045481565b61026a610f51565b61026a6103fc3660046117ea565b600d6020526000908152604090205481565b60005461010090046001600160a01b03166103b2565b61042c610f5f565b60408051998a5260208a0198909852968801959095526060870193909352608086019190915260a085015260c084015260e083015261010082015261012001610274565b6102d261047e36600461182f565b610fae565b61026a60085481565b61026a6107d081565b6009546103b2906001600160a01b031681565b61026a60065481565b6102d26104bf36600461182f565b611157565b61026a61125f565b600b5461035e90610100900460ff1681565b6001546103b2906001600160a01b031681565b61026a60075481565b6102d26112a4565b6105156105103660046117ea565b6112e1565b60408051938452602084019290925290820152606001610274565b61054361053e366004611880565b611326565b6040516102749190611945565b6102d26113f1565b61026a60035481565b6102d261056f3660046117ea565b611414565b6001600160a01b0381166000908152600e6020908152604080832054600854600d909352908320546105e5926105df916105d9906105ba906105b461125f565b9061150f565b6001600160a01b0388166000908152601060205260409020549061151b565b90611527565b90611533565b92915050565b600061060460055460045461151b90919063ffffffff16565b905090565b6000546001600160a01b036101009091041633146106425760405162461bcd60e51b815260040161063990611989565b60405180910390fd5b60035461065190611c206119d4565b4210156106985760405162461bcd60e51b81526020600482015260156024820152742637b1b5902a34b6b29034b9903737ba1037bb32b960591b6044820152606401610639565b6106ac6001600160a01b038316338361153f565b604080516001600160a01b0384168152602081018390527f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa28910160405180910390a15050565b333b156107115760405162461bcd60e51b8152600401610639906119e7565b3332146107305760405162461bcd60e51b815260040161063990611a15565b3361073961125f565b600755610744610f51565b6006556001600160a01b0381161561078b5761075f81610574565b6001600160a01b0382166000908152600e6020908152604080832093909355600754600d909152919020555b600082116107cf5760405162461bcd60e51b8152602060048201526011602482015270043616e6e6f74207769746864726177203607c1b6044820152606401610639565b600b54610100900460ff1615610829576003544210156108295760405162461bcd60e51b81526020600482015260156024820152742637b1b5902a34b6b29034b9903737ba1037bb32b960591b6044820152606401610639565b600f54610836908361150f565b600f5533600090815260106020526040902054610853908361150f565b3360008181526010602052604090209190915560025461087f916001600160a01b03909116908461153f565b60405182815233907f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5906020015b60405180910390a25050565b6000816000036108cb575060016105e5565b816001036108da5750816105e5565b60006108eb846102f5856002611527565b90506108f7818061151b565b90506109048360026115a7565b60010361091857610915818561151b565b90505b9392505050565b6000546001600160a01b0361010090910416331461094f5760405162461bcd60e51b815260040161063990611989565b600061095961125f565b600755610964610f51565b6006556001600160a01b038116156109ab5761097f81610574565b6001600160a01b0382166000908152600e6020908152604080832093909355600754600d909152919020555b60035442106109ca576005546109c2908390611527565b600455610a0d565b6003546000906109da904261150f565b905060006109f36004548361151b90919063ffffffff16565b600554909150610a07906105d98684611533565b60045550505b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610a56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7a9190611a4c565b9050610a916005548261152790919063ffffffff16565b6004541115610ae25760405162461bcd60e51b815260206004820152601860248201527f50726f76696465642072657761726420746f6f206869676800000000000000006044820152606401610639565b426006819055600554610af59190611533565b6003556040518381527fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d9060200160405180910390a1505050565b333b15610b4f5760405162461bcd60e51b8152600401610639906119e7565b333214610b6e5760405162461bcd60e51b815260040161063990611a15565b33610b7761125f565b600755610b82610f51565b6006556001600160a01b03811615610bc957610b9d81610574565b6001600160a01b0382166000908152600e6020908152604080832093909355600754600d909152919020555b336000908152600e60205260409020548015610c3a57336000818152600e6020526040812055600154610c08916001600160a01b03909116908361153f565b60405181815233907fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e0486906020016108ad565b5050565b6000546001600160a01b03610100909104163314610c6e5760405162461bcd60e51b815260040161063990611989565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b333b15610caf5760405162461bcd60e51b8152600401610639906119e7565b333214610cce5760405162461bcd60e51b815260040161063990611a15565b33610cd761125f565b600755610ce2610f51565b6006556001600160a01b03811615610d2957610cfd81610574565b6001600160a01b0382166000908152600e6020908152604080832093909355600754600d909152919020555b60008211610d6d5760405162461bcd60e51b8152602060048201526011602482015270043616e6e6f74207769746864726177203607c1b6044820152606401610639565b610d75610b30565b600f54610d82908361150f565b600f5533600090815260106020526040902054610d9f908361150f565b33600090815260106020526040902055600c5415610e02576000610dd46127106105d9600c548661151b90919063ffffffff16565b9050610de08184611a65565b600954600254919450610e00916001600160a01b0390811691168361153f565b505b60025461087f906001600160a01b0316338461153f565b6000546001600160a01b03610100909104163314610e495760405162461bcd60e51b815260040161063990611989565b6107d0811115610eb75760405162461bcd60e51b815260206004820152603360248201527f6561726c79556e7374616b654665652063616e6e6f74206265206d6f7265207460448201527268616e204d41585f554e5354414b455f46454560681b6064820152608401610639565b600c55565b6000546001600160a01b03610100909104163314610eec5760405162461bcd60e51b815260040161063990611989565b600080546040516101009091046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360008054610100600160a81b0319169055565b6000818310610f4a5781610918565b5090919050565b600061060442600354610f3b565b600354600454600554600654600080808080610f7961125f565b9450610f9260055460045461151b90919063ffffffff16565b9350600a549250600c549150600f549050909192939495969798565b333b15610fcd5760405162461bcd60e51b8152600401610639906119e7565b333214610fec5760405162461bcd60e51b815260040161063990611a15565b60005460ff16156110325760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610639565b3361103b61125f565b600755611046610f51565b6006556001600160a01b0381161561108d5761106181610574565b6001600160a01b0382166000908152600e6020908152604080832093909355600754600d909152919020555b600082116110ce5760405162461bcd60e51b815260206004820152600e60248201526d043616e6e6f74207374616b6520360941b6044820152606401610639565b600f546110db9083611533565b600f55336000908152601060205260409020546110f89083611533565b33600081815260106020526040902091909155600254611125916001600160a01b039091169030856115b3565b60405182815233907f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d906020016108ad565b6000546001600160a01b036101009091041633146111875760405162461bcd60e51b815260040161063990611989565b60035442116112245760405162461bcd60e51b815260206004820152605860248201527f50726576696f7573207265776172647320706572696f64206d7573742062652060448201527f636f6d706c657465206265666f7265206368616e67696e67207468652064757260648201527f6174696f6e20666f7220746865206e657720706572696f640000000000000000608482015260a401610639565b60058190556040518181527ffb46ca5a5e06d4540d6387b930a7c978bce0db5f449ec6b3f5d07c6e1d44f2d39060200160405180910390a150565b6000600f54600003611272575060075490565b61060461129b600f546105d96008546112956004546112956006546105b4610f51565b9061151b565b60075490611533565b6000546001600160a01b036101009091041633146112d45760405162461bcd60e51b815260040161063990611989565b600b805461ff0019169055565b6001600160a01b038116600090815260106020526040812054908061130584610574565b6001600160a01b039094166000908152600e60205260409020549294915050565b60606000825167ffffffffffffffff8111156113445761134461186a565b60405190808252806020026020018201604052801561136d578160200160208202803683370190505b50905060005b83518110156113ea576010600085838151811061139257611392611a78565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020548282815181106113cd576113cd611a78565b6020908102919091010152806113e281611a8e565b915050611373565b5092915050565b3360009081526010602052604090205461140a906106f2565b611412610b30565b565b6000546001600160a01b036101009091041633146114445760405162461bcd60e51b815260040161063990611989565b6001600160a01b0381166114a95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610639565b600080546040516001600160a01b038085169361010090930416917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b60006109188284611a65565b60006109188284611aa7565b60006109188284611ad4565b600061091882846119d4565b6040516001600160a01b0383166024820152604481018290526115a290849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526115f1565b505050565b60006109188284611ae8565b6040516001600160a01b03808516602483015283166044820152606481018290526115eb9085906323b872dd60e01b9060840161156b565b50505050565b6000611646826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166116c39092919063ffffffff16565b8051909150156115a257808060200190518101906116649190611afc565b6115a25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610639565b6060610915848460008585843b61171c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610639565b600080866001600160a01b031685876040516117389190611b42565b60006040518083038185875af1925050503d8060008114611775576040519150601f19603f3d011682016040523d82523d6000602084013e61177a565b606091505b509150915061178a828286611795565b979650505050505050565b606083156117a4575081610918565b8251156117b45782518084602001fd5b8160405162461bcd60e51b81526004016106399190611b5e565b80356001600160a01b03811681146117e557600080fd5b919050565b6000602082840312156117fc57600080fd5b610918826117ce565b6000806040838503121561181857600080fd5b611821836117ce565b946020939093013593505050565b60006020828403121561184157600080fd5b5035919050565b6000806040838503121561185b57600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b6000602080838503121561189357600080fd5b823567ffffffffffffffff808211156118ab57600080fd5b818501915085601f8301126118bf57600080fd5b8135818111156118d1576118d161186a565b8060051b604051601f19603f830116810181811085821117156118f6576118f661186a565b60405291825284820192508381018501918883111561191457600080fd5b938501935b828510156119395761192a856117ce565b84529385019392850192611919565b98975050505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561197d57835183529284019291840191600101611961565b50909695505050505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b808201808211156105e5576105e56119be565b60208082526014908201527318dbdb9d1c9858dd081b9bdd08185b1b1bddd95960621b604082015260600190565b6020808252601a908201527f70726f787920636f6e7472616374206e6f7420616c6c6f776564000000000000604082015260600190565b600060208284031215611a5e57600080fd5b5051919050565b818103818111156105e5576105e56119be565b634e487b7160e01b600052603260045260246000fd5b600060018201611aa057611aa06119be565b5060010190565b80820281158282048414176105e5576105e56119be565b634e487b7160e01b600052601260045260246000fd5b600082611ae357611ae3611abe565b500490565b600082611af757611af7611abe565b500690565b600060208284031215611b0e57600080fd5b8151801515811461091857600080fd5b60005b83811015611b39578181015183820152602001611b21565b50506000910152565b60008251611b54818460208701611b1e565b9190910192915050565b6020815260008251806020840152611b7d816040850160208701611b1e565b601f01601f1916919091016040019291505056fea2646970667358221220838acdbf54b75a5dab63079f0fc22c89a96eb3116819643da8c310911e699c4064736f6c63430008130033
Deployed Bytecode Sourcemap
18292:10300:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21347:285;;;;;;:::i;:::-;;:::i;:::-;;;529:25:1;;;517:2;502:18;21347:285:0;;;;;;;;18740:27;;;;;;18999:42;;;;;;:::i;:::-;;;;;;;;;;;;;;18889:37;;;;;;20176:93;20249:12;;20176:93;;21640:121;;;:::i;27043:363::-;;;;;;:::i;:::-;;:::i;:::-;;23801:486;;;;;;:::i;:::-;;:::i;20277:362::-;;;;;;:::i;:::-;;:::i;18547:30::-;;;;;;25395:1125;;;;;;:::i;:::-;;:::i;24295:306::-;;;:::i;20029:98::-;;;;;;:::i;:::-;;:::i;24609:617::-;;;;;;:::i;:::-;;:::i;26528:273::-;;;;;;:::i;:::-;;:::i;11029:78::-;11068:4;11092:7;;;11029:78;;;1427:14:1;;1420:22;1402:41;;1390:2;1375:18;11029:78:0;1262:187:1;20647:112:0;;;;;;:::i;:::-;-1:-1:-1;;;;;20733:18:0;20706:7;20733:18;;;:9;:18;;;;;;;20647:112;17848:148;;;:::i;18438:26::-;;;;;-1:-1:-1;;;;;18438:26:0;;;;;;-1:-1:-1;;;;;1632:32:1;;;1614:51;;1602:2;1587:18;18438:26:0;1454:217:1;22108:104:0;;;;;;:::i;:::-;;:::i;18511:29::-;;;;;;20767:126;;;:::i;18935:57::-;;;;;;:::i;:::-;;;;;;;;;;;;;;17634:79;17672:7;17699:6;;;;-1:-1:-1;;;;;17699:6:0;17634:79;;22220:822;;;:::i;:::-;;;;2255:25:1;;;2311:2;2296:18;;2289:34;;;;2339:18;;;2332:34;;;;2397:2;2382:18;;2375:34;;;;2440:3;2425:19;;2418:35;;;;2484:3;2469:19;;2462:35;2528:3;2513:19;;2506:35;2572:3;2557:19;;2550:35;2616:3;2601:19;;2594:35;2242:3;2227:19;22220:822:0;1884:751:1;23395:398:0;;;;;;:::i;:::-;;:::i;18662:39::-;;;;;;18834:46;;18876:4;18834:46;;18708:25;;;;;-1:-1:-1;;;;;18708:25:0;;;18584:29;;;;;;27414:360;;;;;;:::i;:::-;;:::i;20901:438::-;;;:::i;18807:18::-;;;;;;;;;;;;18405:26;;;;;-1:-1:-1;;;;;18405:26:0;;;18620:35;;;;;;26959:76;;;:::i;23050:283::-;;;;;;:::i;:::-;;:::i;:::-;;;;2842:25:1;;;2898:2;2883:18;;2876:34;;;;2926:18;;;2919:34;2830:2;2815:18;23050:283:0;2640:319:1;21769:331:0;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;25234:97::-;;;:::i;18473:31::-;;;;;;18004:281;;;;;;:::i;:::-;;:::i;21347:285::-;-1:-1:-1;;;;;21607:16:0;;21401:7;21607:16;;;:7;:16;;;;;;;;;21559:24;;21503:22;:31;;;;;;;21441:183;;:143;;:95;;21482:53;;:16;:14;:16::i;:::-;:20;;:53::i;:::-;-1:-1:-1;;;;;21441:18:0;;;;;;:9;:18;;;;;;;:40;:95::i;:::-;:117;;:143::i;:::-;:165;;:183::i;:::-;21421:203;21347:285;-1:-1:-1;;21347:285:0:o;21640:121::-;21695:7;21722:31;21737:15;;21722:10;;:14;;:31;;;;:::i;:::-;21715:38;;21640:121;:::o;27043:363::-;17761:6;;-1:-1:-1;;;;;17761:6:0;;;;;10361:10;17761:22;17753:67;;;;-1:-1:-1;;;17753:67:0;;;;;;;:::i;:::-;;;;;;;;;27204:12:::1;::::0;:22:::1;::::0;27219:7:::1;27204:22;:::i;:::-;27185:15;:41;;27163:112;;;::::0;-1:-1:-1;;;27163:112:0;;5684:2:1;27163:112:0::1;::::0;::::1;5666:21:1::0;5723:2;5703:18;;;5696:30;-1:-1:-1;;;5742:18:1;;;5735:51;5803:18;;27163:112:0::1;5482:345:1::0;27163:112:0::1;27288:58;-1:-1:-1::0;;;;;27288:33:0;::::1;27322:10;27334:11:::0;27288:33:::1;:58::i;:::-;27362:36;::::0;;-1:-1:-1;;;;;6024:32:1;;6006:51;;6088:2;6073:18;;6066:34;;;27362:36:0::1;::::0;5979:18:1;27362:36:0::1;;;;;;;27043:363:::0;;:::o;23801:486::-;19194:10;19461:17;19506:8;19173:57;;;;-1:-1:-1;;;19173:57:0;;;;;;;:::i;:::-;19249:10;19263:9;19249:23;19241:62;;;;-1:-1:-1;;;19241:62:0;;;;;;;:::i;:::-;23883:10:::1;27900:16;:14;:16::i;:::-;27877:20;:39:::0;27944:26:::1;:24;:26::i;:::-;27927:14;:43:::0;-1:-1:-1;;;;;27985:21:0;::::1;::::0;27981:157:::1;;28042:15;28049:7;28042:6;:15::i;:::-;-1:-1:-1::0;;;;;28023:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:34;;;;28106:20:::1;::::0;28072:22:::1;:31:::0;;;;;;:54;27981:157:::1;23923:1:::2;23914:6;:10;23906:40;;;::::0;-1:-1:-1;;;23906:40:0;;7017:2:1;23906:40:0::2;::::0;::::2;6999:21:1::0;7056:2;7036:18;;;7029:30;-1:-1:-1;;;7075:18:1;;;7068:47;7132:18;;23906:40:0::2;6815:341:1::0;23906:40:0::2;23961:6;::::0;::::2;::::0;::::2;;;23957:104;;;24011:12;;23992:15;:31;;23984:65;;;::::0;-1:-1:-1;;;23984:65:0;;5684:2:1;23984:65:0::2;::::0;::::2;5666:21:1::0;5723:2;5703:18;;;5696:30;-1:-1:-1;;;5742:18:1;;;5735:51;5803:18;;23984:65:0::2;5482:345:1::0;23984:65:0::2;24086:12;::::0;:24:::2;::::0;24103:6;24086:16:::2;:24::i;:::-;24071:12;:39:::0;24155:10:::2;24145:21;::::0;;;:9:::2;:21;::::0;;;;;:33:::2;::::0;24171:6;24145:25:::2;:33::i;:::-;24131:10;24121:21;::::0;;;:9:::2;:21;::::0;;;;:57;;;;24189:12:::2;::::0;:45:::2;::::0;-1:-1:-1;;;;;24189:12:0;;::::2;::::0;24227:6;24189:25:::2;:45::i;:::-;24250:29;::::0;529:25:1;;;24260:10:0::2;::::0;24250:29:::2;::::0;517:2:1;502:18;24250:29:0::2;;;;;;;;19314:1:::1;23801:486:::0;:::o;20277:362::-;20327:4;20348:1;20353;20348:6;20344:288;;-1:-1:-1;20378:1:0;20371:8;;20344:288;20401:1;20406;20401:6;20397:235;;-1:-1:-1;20431:1:0;20424:8;;20397:235;20465:6;20474:16;20478:1;20481:8;:1;20487;20481:5;:8::i;20474:16::-;20465:25;-1:-1:-1;20509:8:0;20465:25;;20509:5;:8::i;:::-;20505:12;-1:-1:-1;20536:8:0;:1;20542;20536:5;:8::i;:::-;20548:1;20536:13;20532:66;;20574:8;:1;20580;20574:5;:8::i;:::-;20570:12;;20532:66;20619:1;20277:362;-1:-1:-1;;;20277:362:0:o;25395:1125::-;17761:6;;-1:-1:-1;;;;;17761:6:0;;;;;10361:10;17761:22;17753:67;;;;-1:-1:-1;;;17753:67:0;;;;;;;:::i;:::-;25495:1:::1;27900:16;:14;:16::i;:::-;27877:20;:39:::0;27944:26:::1;:24;:26::i;:::-;27927:14;:43:::0;-1:-1:-1;;;;;27985:21:0;::::1;::::0;27981:157:::1;;28042:15;28049:7;28042:6;:15::i;:::-;-1:-1:-1::0;;;;;28023:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:34;;;;28106:20:::1;::::0;28072:22:::1;:31:::0;;;;;;:54;27981:157:::1;25533:12:::2;;25514:15;:31;25510:318;;25586:15;::::0;25575:27:::2;::::0;:6;;:10:::2;:27::i;:::-;25562:10;:40:::0;25510:318:::2;;;25655:12;::::0;25635:17:::2;::::0;25655:33:::2;::::0;25672:15:::2;25655:16;:33::i;:::-;25635:53;;25703:16;25722:25;25736:10;;25722:9;:13;;:25;;;;:::i;:::-;25800:15;::::0;25703:44;;-1:-1:-1;25775:41:0::2;::::0;:20:::2;:6:::0;25703:44;25775:10:::2;:20::i;:41::-;25762:10;:54:::0;-1:-1:-1;;25510:318:0::2;26206:12;::::0;:37:::2;::::0;-1:-1:-1;;;26206:37:0;;26237:4:::2;26206:37;::::0;::::2;1614:51:1::0;26188:15:0::2;::::0;-1:-1:-1;;;;;26206:12:0::2;::::0;:22:::2;::::0;1587:18:1;;26206:37:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26188:55;;26290:28;26302:15;;26290:7;:11;;:28;;;;:::i;:::-;26276:10;;:42;;26254:116;;;::::0;-1:-1:-1;;;26254:116:0;;7552:2:1;26254:116:0::2;::::0;::::2;7534:21:1::0;7591:2;7571:18;;;7564:30;7630:26;7610:18;;;7603:54;7674:18;;26254:116:0::2;7350:348:1::0;26254:116:0::2;26400:15;26383:14;:32:::0;;;26461:15:::2;::::0;26441:36:::2;::::0;26400:15;26441:19:::2;:36::i;:::-;26426:12;:51:::0;26493:19:::2;::::0;529:25:1;;;26493:19:0::2;::::0;517:2:1;502:18;26493:19:0::2;;;;;;;25499:1021;17831:1:::1;25395:1125:::0;:::o;24295:306::-;19194:10;19461:17;19506:8;19173:57;;;;-1:-1:-1;;;19173:57:0;;;;;;;:::i;:::-;19249:10;19263:9;19249:23;19241:62;;;;-1:-1:-1;;;19241:62:0;;;;;;;:::i;:::-;24348:10:::1;27900:16;:14;:16::i;:::-;27877:20;:39:::0;27944:26:::1;:24;:26::i;:::-;27927:14;:43:::0;-1:-1:-1;;;;;27985:21:0;::::1;::::0;27981:157:::1;;28042:15;28049:7;28042:6;:15::i;:::-;-1:-1:-1::0;;;;;28023:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:34;;;;28106:20:::1;::::0;28072:22:::1;:31:::0;;;;;;:54;27981:157:::1;24396:10:::2;24371:14;24388:19:::0;;;:7:::2;:19;::::0;;;;;24422:10;;24418:176:::2;;24457:10;24471:1;24449:19:::0;;;:7:::2;:19;::::0;;;;:23;24487:12:::2;::::0;:45:::2;::::0;-1:-1:-1;;;;;24487:12:0;;::::2;::::0;24525:6;24487:25:::2;:45::i;:::-;24552:30;::::0;529:25:1;;;24563:10:0::2;::::0;24552:30:::2;::::0;517:2:1;502:18;24552:30:0::2;383:177:1::0;24418:176:0::2;24360:241;19314:1:::1;24295:306::o:0;20029:98::-;17761:6;;-1:-1:-1;;;;;17761:6:0;;;;;10361:10;17761:22;17753:67;;;;-1:-1:-1;;;17753:67:0;;;;;;;:::i;:::-;20098:10:::1;:21:::0;;-1:-1:-1;;;;;;20098:21:0::1;-1:-1:-1::0;;;;;20098:21:0;;;::::1;::::0;;;::::1;::::0;;20029:98::o;24609:617::-;19194:10;19461:17;19506:8;19173:57;;;;-1:-1:-1;;;19173:57:0;;;;;;;:::i;:::-;19249:10;19263:9;19249:23;19241:62;;;;-1:-1:-1;;;19241:62:0;;;;;;;:::i;:::-;24700:10:::1;27900:16;:14;:16::i;:::-;27877:20;:39:::0;27944:26:::1;:24;:26::i;:::-;27927:14;:43:::0;-1:-1:-1;;;;;27985:21:0;::::1;::::0;27981:157:::1;;28042:15;28049:7;28042:6;:15::i;:::-;-1:-1:-1::0;;;;;28023:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:34;;;;28106:20:::1;::::0;28072:22:::1;:31:::0;;;;;;:54;27981:157:::1;24740:1:::2;24731:6;:10;24723:40;;;::::0;-1:-1:-1;;;24723:40:0;;7017:2:1;24723:40:0::2;::::0;::::2;6999:21:1::0;7056:2;7036:18;;;7029:30;-1:-1:-1;;;7075:18:1;;;7068:47;7132:18;;24723:40:0::2;6815:341:1::0;24723:40:0::2;24774:11;:9;:11::i;:::-;24811:12;::::0;:24:::2;::::0;24828:6;24811:16:::2;:24::i;:::-;24796:12;:39:::0;24880:10:::2;24870:21;::::0;;;:9:::2;:21;::::0;;;;;:33:::2;::::0;24896:6;24870:25:::2;:33::i;:::-;24856:10;24846:21;::::0;;;:9:::2;:21;::::0;;;;:57;24918:15:::2;::::0;:19;24914:204:::2;;24954:16;24973:38;25005:5;24973:27;24984:15;;24973:6;:10;;:27;;;;:::i;:38::-;24954:57:::0;-1:-1:-1;25026:18:0::2;24954:57:::0;25026:18;::::2;:::i;:::-;25085:10;::::0;25059:12:::2;::::0;25026:18;;-1:-1:-1;25059:47:0::2;::::0;-1:-1:-1;;;;;25059:12:0;;::::2;::::0;25085:10:::2;25097:8:::0;25059:25:::2;:47::i;:::-;24939:179;24914:204;25128:12;::::0;:45:::2;::::0;-1:-1:-1;;;;;25128:12:0::2;25154:10;25166:6:::0;25128:25:::2;:45::i;26528:273::-:0;17761:6;;-1:-1:-1;;;;;17761:6:0;;;;;10361:10;17761:22;17753:67;;;;-1:-1:-1;;;17753:67:0;;;;;;;:::i;:::-;18876:4:::1;26634:16;:35;;26612:136;;;::::0;-1:-1:-1;;;26612:136:0;;8038:2:1;26612:136:0::1;::::0;::::1;8020:21:1::0;8077:2;8057:18;;;8050:30;8116:34;8096:18;;;8089:62;-1:-1:-1;;;8167:18:1;;;8160:49;8226:19;;26612:136:0::1;7836:415:1::0;26612:136:0::1;26759:15;:34:::0;26528:273::o;17848:148::-;17761:6;;-1:-1:-1;;;;;17761:6:0;;;;;10361:10;17761:22;17753:67;;;;-1:-1:-1;;;17753:67:0;;;;;;;:::i;:::-;17955:1:::1;17939:6:::0;;17918:40:::1;::::0;17939:6:::1;::::0;;::::1;-1:-1:-1::0;;;;;17939:6:0::1;::::0;17918:40:::1;::::0;17955:1;;17918:40:::1;17986:1;17969:19:::0;;-1:-1:-1;;;;;;17969:19:0::1;::::0;;17848:148::o;22108:104::-;22164:7;22195:1;22191;:5;:13;;22203:1;22191:13;;;-1:-1:-1;22199:1:0;;22184:20;-1:-1:-1;22108:104:0:o;20767:126::-;20824:7;20851:34;20855:15;20872:12;;20851:3;:34::i;22220:822::-;22668:12;;22705:10;;22745:15;;22789:14;;22302:21;;;;;22832:16;:14;:16::i;:::-;22814:34;;22883:31;22898:15;;22883:10;;:14;;:31;;;;:::i;:::-;22859:55;;22941:12;;22925:28;;22983:15;;22964:34;;23022:12;;23009:25;;22220:822;;;;;;;;;:::o;23395:398::-;19194:10;19461:17;19506:8;19173:57;;;;-1:-1:-1;;;19173:57:0;;;;;;;:::i;:::-;19249:10;19263:9;19249:23;19241:62;;;;-1:-1:-1;;;19241:62:0;;;;;;;:::i;:::-;11347:7:::1;::::0;::::1;;11346:8;11338:37;;;::::0;-1:-1:-1;;;11338:37:0;;8458:2:1;11338:37:0::1;::::0;::::1;8440:21:1::0;8497:2;8477:18;;;8470:30;-1:-1:-1;;;8516:18:1;;;8509:46;8572:18;;11338:37:0::1;8256:340:1::0;11338:37:0::1;23490:10:::2;27900:16;:14;:16::i;:::-;27877:20;:39:::0;27944:26:::2;:24;:26::i;:::-;27927:14;:43:::0;-1:-1:-1;;;;;27985:21:0;::::2;::::0;27981:157:::2;;28042:15;28049:7;28042:6;:15::i;:::-;-1:-1:-1::0;;;;;28023:16:0;::::2;;::::0;;;:7:::2;:16;::::0;;;;;;;:34;;;;28106:20:::2;::::0;28072:22:::2;:31:::0;;;;;;:54;27981:157:::2;23530:1:::3;23521:6;:10;23513:37;;;::::0;-1:-1:-1;;;23513:37:0;;8803:2:1;23513:37:0::3;::::0;::::3;8785:21:1::0;8842:2;8822:18;;;8815:30;-1:-1:-1;;;8861:18:1;;;8854:44;8915:18;;23513:37:0::3;8601:338:1::0;23513:37:0::3;23576:12;::::0;:24:::3;::::0;23593:6;23576:16:::3;:24::i;:::-;23561:12;:39:::0;23645:10:::3;23635:21;::::0;;;:9:::3;:21;::::0;;;;;:33:::3;::::0;23661:6;23635:25:::3;:33::i;:::-;23621:10;23611:21;::::0;;;:9:::3;:21;::::0;;;;:57;;;;23679:12:::3;::::0;:64:::3;::::0;-1:-1:-1;;;;;23679:12:0;;::::3;::::0;23729:4:::3;23736:6:::0;23679:29:::3;:64::i;:::-;23759:26;::::0;529:25:1;;;23766:10:0::3;::::0;23759:26:::3;::::0;517:2:1;502:18;23759:26:0::3;383:177:1::0;27414:360:0;17761:6;;-1:-1:-1;;;;;17761:6:0;;;;;10361:10;17761:22;17753:67;;;;-1:-1:-1;;;17753:67:0;;;;;;;:::i;:::-;27538:12:::1;;27520:15;:30;27498:168;;;::::0;-1:-1:-1;;;27498:168:0;;9146:2:1;27498:168:0::1;::::0;::::1;9128:21:1::0;9185:2;9165:18;;;9158:30;9224:34;9204:18;;;9197:62;9295:34;9275:18;;;9268:62;9367:26;9346:19;;;9339:55;9411:19;;27498:168:0::1;8944:492:1::0;27498:168:0::1;27677:15;:34:::0;;;27727:39:::1;::::0;529:25:1;;;27727:39:0::1;::::0;517:2:1;502:18;27727:39:0::1;;;;;;;27414:360:::0;:::o;20901:438::-;20948:7;20972:12;;20988:1;20972:17;20968:77;;-1:-1:-1;21013:20:0;;;20901:438::o;20968:77::-;21075:256;21118:198;21303:12;;21118:158;21251:24;;21118:106;21213:10;;21118:68;21171:14;;21118:26;:24;:26::i;:68::-;:94;;:106::i;:198::-;21075:20;;;:24;:256::i;26959:76::-;17761:6;;-1:-1:-1;;;;;17761:6:0;;;;;10361:10;17761:22;17753:67;;;;-1:-1:-1;;;17753:67:0;;;;;;;:::i;:::-;27013:6:::1;:14:::0;;-1:-1:-1;;27013:14:0::1;::::0;;26959:76::o;23050:283::-;-1:-1:-1;;;;;23233:18:0;;23149;23233;;;:9;:18;;;;;;;23149;23272:15;23243:7;23272:6;:15::i;:::-;-1:-1:-1;;;;;23309:16:0;;;;;;;:7;:16;;;;;;23050:283;;;-1:-1:-1;;23050:283:0:o;21769:331::-;21860:16;21889:25;21931:8;:15;21917:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21917:30:0;;21889:58;;21963:9;21958:109;21982:8;:15;21978:1;:19;21958:109;;;22033:9;:22;22043:8;22052:1;22043:11;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;22033:22:0;-1:-1:-1;;;;;22033:22:0;;;;;;;;;;;;;22019:8;22028:1;22019:11;;;;;;;;:::i;:::-;;;;;;;;;;:36;21999:3;;;;:::i;:::-;;;;21958:109;;;-1:-1:-1;22084:8:0;21769:331;-1:-1:-1;;21769:331:0:o;25234:97::-;25289:10;25279:21;;;;:9;:21;;;;;;25270:31;;:8;:31::i;:::-;25312:11;:9;:11::i;:::-;25234:97::o;18004:281::-;17761:6;;-1:-1:-1;;;;;17761:6:0;;;;;10361:10;17761:22;17753:67;;;;-1:-1:-1;;;17753:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18107:22:0;::::1;18085:110;;;::::0;-1:-1:-1;;;18085:110:0;;9915:2:1;18085:110:0::1;::::0;::::1;9897:21:1::0;9954:2;9934:18;;;9927:30;9993:34;9973:18;;;9966:62;-1:-1:-1;;;10044:18:1;;;10037:36;10090:19;;18085:110:0::1;9713:402:1::0;18085:110:0::1;18232:6;::::0;;18211:38:::1;::::0;-1:-1:-1;;;;;18211:38:0;;::::1;::::0;18232:6:::1;::::0;;::::1;;::::0;18211:38:::1;::::0;::::1;18260:6;:17:::0;;-1:-1:-1;;;;;18260:17:0;;::::1;;;-1:-1:-1::0;;;;;;18260:17:0;;::::1;::::0;;;::::1;::::0;;18004:281::o;13576:98::-;13634:7;13661:5;13665:1;13661;:5;:::i;13682:98::-;13740:7;13767:5;13771:1;13767;:5;:::i;13788:98::-;13846:7;13873:5;13877:1;13873;:5;:::i;13470:98::-;13528:7;13555:5;13559:1;13555;:5;:::i;14833:214::-;14970:58;;-1:-1:-1;;;;;6024:32:1;;14970:58:0;;;6006:51:1;6073:18;;;6066:34;;;14916:123:0;;14950:5;;-1:-1:-1;;;14993:23:0;5979:18:1;;14970:58:0;;;;-1:-1:-1;;14970:58:0;;;;;;;;;;;;;;-1:-1:-1;;;;;14970:58:0;-1:-1:-1;;;;;;14970:58:0;;;;;;;;;;14916:19;:123::i;:::-;14833:214;;;:::o;13894:98::-;13952:7;13979:5;13983:1;13979;:5;:::i;15055:285::-;15253:68;;-1:-1:-1;;;;;10925:15:1;;;15253:68:0;;;10907:34:1;10977:15;;10957:18;;;10950:43;11009:18;;;11002:34;;;15199:133:0;;15233:5;;-1:-1:-1;;;15276:27:0;10842:18:1;;15253:68:0;10667:375:1;15199:133:0;15055:285;;;;:::o;16757:517::-;16838:23;16864:106;16906:4;16864:106;;;;;;;;;;;;;;;;;16872:5;-1:-1:-1;;;;;16864:27:0;;;:106;;;;;:::i;:::-;16985:17;;16838:132;;-1:-1:-1;16985:21:0;16981:286;;17158:10;17147:30;;;;;;;;;;;;:::i;:::-;17121:134;;;;-1:-1:-1;;;17121:134:0;;11531:2:1;17121:134:0;;;11513:21:1;11570:2;11550:18;;;11543:30;11609:34;11589:18;;;11582:62;-1:-1:-1;;;11660:18:1;;;11653:40;11710:19;;17121:134:0;11329:406:1;3715:229:0;3852:12;3884:52;3906:6;3914:4;3920:1;3923:12;3852;19461:17;;5255:60;;;;-1:-1:-1;;;5255:60:0;;12349:2:1;5255:60:0;;;12331:21:1;12388:2;12368:18;;;12361:30;12427:31;12407:18;;;12400:59;12476:18;;5255:60:0;12147:353:1;5255:60:0;5389:12;5403:23;5430:6;-1:-1:-1;;;;;5430:11:0;5449:5;5470:4;5430:55;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5388:97;;;;5503:52;5521:7;5530:10;5542:12;5503:17;:52::i;:::-;5496:59;4931:632;-1:-1:-1;;;;;;;4931:632:0:o;6707:777::-;6857:12;6886:7;6882:595;;;-1:-1:-1;6917:10:0;6910:17;;6882:595;7031:17;;:21;7027:439;;7294:10;7288:17;7355:15;7342:10;7338:2;7334:19;7327:44;7027:439;7437:12;7430:20;;-1:-1:-1;;;7430:20:0;;;;;;;;:::i;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;565:254::-;633:6;641;694:2;682:9;673:7;669:23;665:32;662:52;;;710:1;707;700:12;662:52;733:29;752:9;733:29;:::i;:::-;723:39;809:2;794:18;;;;781:32;;-1:-1:-1;;;565:254:1:o;824:180::-;883:6;936:2;924:9;915:7;911:23;907:32;904:52;;;952:1;949;942:12;904:52;-1:-1:-1;975:23:1;;824:180;-1:-1:-1;824:180:1:o;1009:248::-;1077:6;1085;1138:2;1126:9;1117:7;1113:23;1109:32;1106:52;;;1154:1;1151;1144:12;1106:52;-1:-1:-1;;1177:23:1;;;1247:2;1232:18;;;1219:32;;-1:-1:-1;1009:248:1:o;2964:127::-;3025:10;3020:3;3016:20;3013:1;3006:31;3056:4;3053:1;3046:15;3080:4;3077:1;3070:15;3096:1121;3180:6;3211:2;3254;3242:9;3233:7;3229:23;3225:32;3222:52;;;3270:1;3267;3260:12;3222:52;3310:9;3297:23;3339:18;3380:2;3372:6;3369:14;3366:34;;;3396:1;3393;3386:12;3366:34;3434:6;3423:9;3419:22;3409:32;;3479:7;3472:4;3468:2;3464:13;3460:27;3450:55;;3501:1;3498;3491:12;3450:55;3537:2;3524:16;3559:2;3555;3552:10;3549:36;;;3565:18;;:::i;:::-;3611:2;3608:1;3604:10;3643:2;3637:9;3706:2;3702:7;3697:2;3693;3689:11;3685:25;3677:6;3673:38;3761:6;3749:10;3746:22;3741:2;3729:10;3726:18;3723:46;3720:72;;;3772:18;;:::i;:::-;3808:2;3801:22;3858:18;;;3892:15;;;;-1:-1:-1;3934:11:1;;;3930:20;;;3962:19;;;3959:39;;;3994:1;3991;3984:12;3959:39;4018:11;;;;4038:148;4054:6;4049:3;4046:15;4038:148;;;4120:23;4139:3;4120:23;:::i;:::-;4108:36;;4071:12;;;;4164;;;;4038:148;;;4205:6;3096:1121;-1:-1:-1;;;;;;;;3096:1121:1:o;4222:632::-;4393:2;4445:21;;;4515:13;;4418:18;;;4537:22;;;4364:4;;4393:2;4616:15;;;;4590:2;4575:18;;;4364:4;4659:169;4673:6;4670:1;4667:13;4659:169;;;4734:13;;4722:26;;4803:15;;;;4768:12;;;;4695:1;4688:9;4659:169;;;-1:-1:-1;4845:3:1;;4222:632;-1:-1:-1;;;;;;4222:632:1:o;4859:356::-;5061:2;5043:21;;;5080:18;;;5073:30;5139:34;5134:2;5119:18;;5112:62;5206:2;5191:18;;4859:356::o;5220:127::-;5281:10;5276:3;5272:20;5269:1;5262:31;5312:4;5309:1;5302:15;5336:4;5333:1;5326:15;5352:125;5417:9;;;5438:10;;;5435:36;;;5451:18;;:::i;6111:344::-;6313:2;6295:21;;;6352:2;6332:18;;;6325:30;-1:-1:-1;;;6386:2:1;6371:18;;6364:50;6446:2;6431:18;;6111:344::o;6460:350::-;6662:2;6644:21;;;6701:2;6681:18;;;6674:30;6740:28;6735:2;6720:18;;6713:56;6801:2;6786:18;;6460:350::o;7161:184::-;7231:6;7284:2;7272:9;7263:7;7259:23;7255:32;7252:52;;;7300:1;7297;7290:12;7252:52;-1:-1:-1;7323:16:1;;7161:184;-1:-1:-1;7161:184:1:o;7703:128::-;7770:9;;;7791:11;;;7788:37;;;7805:18;;:::i;9441:127::-;9502:10;9497:3;9493:20;9490:1;9483:31;9533:4;9530:1;9523:15;9557:4;9554:1;9547:15;9573:135;9612:3;9633:17;;;9630:43;;9653:18;;:::i;:::-;-1:-1:-1;9700:1:1;9689:13;;9573:135::o;10120:168::-;10193:9;;;10224;;10241:15;;;10235:22;;10221:37;10211:71;;10262:18;;:::i;10293:127::-;10354:10;10349:3;10345:20;10342:1;10335:31;10385:4;10382:1;10375:15;10409:4;10406:1;10399:15;10425:120;10465:1;10491;10481:35;;10496:18;;:::i;:::-;-1:-1:-1;10530:9:1;;10425:120::o;10550:112::-;10582:1;10608;10598:35;;10613:18;;:::i;:::-;-1:-1:-1;10647:9:1;;10550:112::o;11047:277::-;11114:6;11167:2;11155:9;11146:7;11142:23;11138:32;11135:52;;;11183:1;11180;11173:12;11135:52;11215:9;11209:16;11268:5;11261:13;11254:21;11247:5;11244:32;11234:60;;11290:1;11287;11280:12;12505:250;12590:1;12600:113;12614:6;12611:1;12608:13;12600:113;;;12690:11;;;12684:18;12671:11;;;12664:39;12636:2;12629:10;12600:113;;;-1:-1:-1;;12747:1:1;12729:16;;12722:27;12505:250::o;12760:287::-;12889:3;12927:6;12921:13;12943:66;13002:6;12997:3;12990:4;12982:6;12978:17;12943:66;:::i;:::-;13025:16;;;;;12760:287;-1:-1:-1;;12760:287:1:o;13052:396::-;13201:2;13190:9;13183:21;13164:4;13233:6;13227:13;13276:6;13271:2;13260:9;13256:18;13249:34;13292:79;13364:6;13359:2;13348:9;13344:18;13339:2;13331:6;13327:15;13292:79;:::i;:::-;13432:2;13411:15;-1:-1:-1;;13407:29:1;13392:45;;;;13439:2;13388:54;;13052:396;-1:-1:-1;;13052:396:1:o
Swarm Source
ipfs://838acdbf54b75a5dab63079f0fc22c89a96eb3116819643da8c310911e699c40
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.