More Info
Private Name Tags
ContractCreator
Latest 6 from a total of 6 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Stake | 15885446 | 852 days ago | IN | 0 ETH | 0.00354388 | ||||
Stake | 15746493 | 871 days ago | IN | 0 ETH | 0.00392342 | ||||
Stake | 15726139 | 874 days ago | IN | 0 ETH | 0.00690527 | ||||
Stake | 15723803 | 874 days ago | IN | 0 ETH | 0.00779645 | ||||
Set AP Ys | 15697269 | 878 days ago | IN | 0 ETH | 0.00272936 | ||||
Create Pool | 15697266 | 878 days ago | IN | 0 ETH | 0.00101991 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
RETHSLPStaking
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-10-07 */ //SPDX-License-Identifier: MIT pragma solidity ^0.8.0; library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b > a) return (false, 0); return (true, a - b); } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a / b); } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a % b); } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) return 0; uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: division by zero"); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: modulo by zero"); return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); return a - b; } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryDiv}. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a % b; } } interface IERC20 { event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address to, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom( address from, address to, uint256 amount ) external returns (bool); } 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() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } /** * @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; } } /** * @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 anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing 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); } } contract RETHSLPStaking is Ownable, ReentrancyGuard { using SafeMath for uint256; IERC20 public sRETH=IERC20(0x66e7C1bDA2F82b2D3Aed82E2862F9CDeDFa1E9Df); //sRETH IERC20 public RETH=IERC20(0x75546ccb9d41FC5bCcE4ffd6Aec315487e43BaBf); IERC20 public RETH_LP=IERC20(0x26a7Ef71cE7A39786062a5C7956B0a26722E9A7A); bool public PauseClaim = false; uint256 private constant ONE_MONTH_SEC = 2592000; Pool[] public pools; // Staking pools struct stakes{ address owner; uint256 amount; uint256 startTime; uint256 endTime; uint256 months; bool collected; uint256 approxRETH; uint256 claimed; } event StakingUpdate( address wallet, uint256 amount, uint256 startTime, uint256 endTime, bool collected, uint256 claimed, uint256 poolId ); event APYSet( uint256[] APYs ); struct Pool { uint256 tokensStaked; // Total tokens staked uint256 totalRewardsClaimed; // Last block number the user had their rewards calculated bool stakingPause; } mapping(uint256=> mapping(address=>stakes[])) public Stakes; mapping (uint256 => mapping(address=> uint256)) public userstakes; mapping (uint256=> mapping(uint256=>uint256) )public APY; event PoolCreated(uint256 poolId); event StakingPause(bool pause); event ClaimPause(bool status); constructor() {} function stake(uint256 amount, uint256 months, uint256 poolId) public nonReentrant { require(months == 1 || months == 3 || months == 6 || months == 12,"ENTER VALID MONTH"); _stake(amount, months, poolId); } function _stake(uint256 amount, uint256 months, uint256 poolId) private { RETH_LP.transferFrom(msg.sender, address(this), amount); Pool storage pool = pools[poolId]; require(pool.stakingPause==false,"STAKING PAUSE"); userstakes[poolId][msg.sender]++; pool.tokensStaked +=amount; uint256 duration = block.timestamp.add( months.mul(ONE_MONTH_SEC)); uint256 approxRETH = getApproxRETH().mul(amount); Stakes[poolId][msg.sender].push(stakes(msg.sender, amount, block.timestamp, duration, months, false,approxRETH, 0)); emit StakingUpdate(msg.sender, amount, block.timestamp, duration, false, 0,poolId); } function unStake(uint256 stakeId,uint256 poolId ) public nonReentrant{ require(Stakes[poolId][msg.sender][stakeId].collected == false ,"ALREADY WITHDRAWN"); require(Stakes[poolId][msg.sender][stakeId].endTime < block.timestamp,"STAKING TIME NOT ENDED"); require(PauseClaim==false, "Claim Pause"); _unstake(stakeId,poolId); } function _unstake(uint256 stakeId,uint256 poolId) private { Pool storage pool = pools[poolId]; Stakes[poolId][msg.sender][stakeId].collected = true; uint256 stakeamt = Stakes[poolId][msg.sender][stakeId].amount; uint256 gtreward = getTotalRewards(msg.sender, stakeId,poolId) > Stakes[poolId][msg.sender][stakeId].claimed ? getTotalRewards(msg.sender, stakeId,poolId) : Stakes[poolId][msg.sender][stakeId].claimed; uint256 rewards = gtreward.sub(Stakes[poolId][msg.sender][stakeId].claimed); Stakes[poolId][msg.sender][stakeId].claimed += rewards; pool.totalRewardsClaimed +=rewards; RETH_LP.transfer(msg.sender, stakeamt ); sRETH.transfer(msg.sender, rewards ); emit StakingUpdate(msg.sender, stakeamt, Stakes[poolId][msg.sender][stakeId].startTime, Stakes[poolId][msg.sender][stakeId].endTime, true, Stakes[poolId][msg.sender][stakeId].claimed,poolId); } function claimRewards(uint256 stakeId,uint256 poolId) public nonReentrant { require(PauseClaim==false, "Claim Pause"); Pool storage pool = pools[poolId]; require(Stakes[poolId][msg.sender][stakeId].claimed < getTotalRewards(msg.sender, stakeId,poolId), "All claimed"); uint256 cuamt = getCurrentRewards(msg.sender, stakeId,poolId); require(getCurrentRewards(msg.sender, stakeId,poolId)>Stakes[poolId][msg.sender][stakeId].claimed, "Already claimed enough"); uint256 clamt = cuamt.sub( Stakes[poolId][msg.sender][stakeId].claimed); Stakes[poolId][msg.sender][stakeId].claimed += clamt; pool.totalRewardsClaimed +=clamt; sRETH.transfer(msg.sender, clamt); emit StakingUpdate(msg.sender, Stakes[poolId][msg.sender][stakeId].amount, Stakes[poolId][msg.sender][stakeId].startTime, Stakes[poolId][msg.sender][stakeId].endTime, false, Stakes[poolId][msg.sender][stakeId].claimed,poolId); } function getStakes( address wallet,uint256 poolId) public view returns(stakes[] memory){ uint256 itemCount = userstakes[poolId][wallet]; uint256 currentIndex = 0; stakes[] memory items = new stakes[](itemCount); for (uint256 i = 0; i < userstakes[poolId][wallet]; i++) { stakes storage currentItem = Stakes[poolId][wallet][i]; items[currentIndex] = currentItem; currentIndex += 1; } return items; } function getTotalRewards(address wallet, uint256 stakeId,uint256 poolId) public view returns(uint256) { require(Stakes[poolId][wallet][stakeId].amount != 0); uint256 stakeamt = Stakes[poolId][wallet][stakeId].approxRETH; uint256 mos = Stakes[poolId][wallet][stakeId].months; uint256 rewards = (((stakeamt.mul(APY[poolId][mos])).mul(mos)).div(12)).div(100); return rewards; } function getCurrentRewards(address wallet, uint256 stakeId,uint256 poolId) public view returns(uint256) { require(Stakes[poolId][wallet][stakeId].amount != 0,"ZERO amount staked"); uint256 stakeamt = Stakes[poolId][wallet][stakeId].approxRETH; uint256 mos = Stakes[poolId][wallet][stakeId].months; uint256 etime = Stakes[poolId][wallet][stakeId].endTime > block.timestamp ? block.timestamp : Stakes[poolId][wallet][stakeId].endTime; uint256 timec = etime.sub(Stakes[poolId][wallet][stakeId].startTime); uint256 rewards = (((stakeamt.mul(APY[poolId][mos])).mul(mos)).div(12)).div(100); uint256 crewards = (rewards.mul(timec)).div(mos.mul(ONE_MONTH_SEC)); return crewards; } function getApproxRETH() public view returns(uint256) { uint256 lp_supply = RETH_LP.totalSupply(); uint256 currentReth = RETH.balanceOf(address(RETH_LP)); uint256 approxRETHPerLP = currentReth/lp_supply; return approxRETHPerLP; } function rewardsClaimed(uint256 poolId ) public view returns(uint256){ Pool storage pool = pools[poolId]; return pool.totalRewardsClaimed; } function setAPYs(uint256[] memory apys, uint256 poolId) external onlyOwner { require(apys.length == 4,"4 INDEXED ARRAY ALLOWED"); APY[poolId][1] = apys[0]; APY[poolId][3] = apys[1]; APY[poolId][6] = apys[2]; APY[poolId][12] = apys[3]; emit APYSet(apys); } function withdrawToken(IERC20 _token) external nonReentrant onlyOwner { _token.transfer(owner(), _token.balanceOf(address(this))); } function createPool() external onlyOwner { Pool memory pool; pool.totalRewardsClaimed = 0; pool.tokensStaked=0; pool.stakingPause=false; pools.push(pool); uint256 poolId = pools.length - 1; emit PoolCreated(poolId); } function pauseStaking (bool _pause, uint256 poolId) external onlyOwner { Pool storage pool = pools[poolId]; pool.stakingPause = _pause; emit StakingPause(_pause); } function pauseClaim(bool status) public onlyOwner { PauseClaim = status; emit ClaimPause(status); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256[]","name":"APYs","type":"uint256[]"}],"name":"APYSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"ClaimPause","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":"uint256","name":"poolId","type":"uint256"}],"name":"PoolCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"pause","type":"bool"}],"name":"StakingPause","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"startTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endTime","type":"uint256"},{"indexed":false,"internalType":"bool","name":"collected","type":"bool"},{"indexed":false,"internalType":"uint256","name":"claimed","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"poolId","type":"uint256"}],"name":"StakingUpdate","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"APY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PauseClaim","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RETH","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RETH_LP","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"Stakes","outputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint256","name":"months","type":"uint256"},{"internalType":"bool","name":"collected","type":"bool"},{"internalType":"uint256","name":"approxRETH","type":"uint256"},{"internalType":"uint256","name":"claimed","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"stakeId","type":"uint256"},{"internalType":"uint256","name":"poolId","type":"uint256"}],"name":"claimRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"createPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getApproxRETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"uint256","name":"stakeId","type":"uint256"},{"internalType":"uint256","name":"poolId","type":"uint256"}],"name":"getCurrentRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"uint256","name":"poolId","type":"uint256"}],"name":"getStakes","outputs":[{"components":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint256","name":"months","type":"uint256"},{"internalType":"bool","name":"collected","type":"bool"},{"internalType":"uint256","name":"approxRETH","type":"uint256"},{"internalType":"uint256","name":"claimed","type":"uint256"}],"internalType":"struct RETHSLPStaking.stakes[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"uint256","name":"stakeId","type":"uint256"},{"internalType":"uint256","name":"poolId","type":"uint256"}],"name":"getTotalRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"pauseClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_pause","type":"bool"},{"internalType":"uint256","name":"poolId","type":"uint256"}],"name":"pauseStaking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"pools","outputs":[{"internalType":"uint256","name":"tokensStaked","type":"uint256"},{"internalType":"uint256","name":"totalRewardsClaimed","type":"uint256"},{"internalType":"bool","name":"stakingPause","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolId","type":"uint256"}],"name":"rewardsClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sRETH","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"apys","type":"uint256[]"},{"internalType":"uint256","name":"poolId","type":"uint256"}],"name":"setAPYs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"months","type":"uint256"},{"internalType":"uint256","name":"poolId","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"stakeId","type":"uint256"},{"internalType":"uint256","name":"poolId","type":"uint256"}],"name":"unStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"userstakes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052600280546001600160a01b03199081167366e7c1bda2f82b2d3aed82e2862f9cdedfa1e9df17909155600380549091167375546ccb9d41fc5bcce4ffd6aec315487e43babf179055600480546001600160a81b0319167326a7ef71ce7a39786062a5c7956b0a26722e9a7a17905534801561007e57600080fd5b5061008833610091565b600180556100e1565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b612565806100f06000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c80638da5cb5b116100c3578063c11f92601161007c578063c11f926014610310578063c8d732fe14610323578063e5f46c5e14610336578063eab15c4814610390578063f2fde38b146103bb578063ff5f8576146103ce57600080fd5b80638da5cb5b146102995780639888cc83146102aa5780639a06b113146102bd578063a638f2e2146102c5578063a7e4418b146102d8578063ac4afa38146102e057600080fd5b8063594dd43211610115578063594dd432146102095780636d73d6b31461021c578063715018a6146102405780637fb33efe146102485780638265b1211461025b578063894760691461028657600080fd5b80630fa4bae71461015d57806336dd01ee14610172578063372caeb81461018557806338776df3146101985780634cb8a68b146101d65780635685c466146101f6575b600080fd5b61017061016b3660046121e9565b6103e1565b005b6101706101803660046120e4565b61045b565b6101706101933660046122a1565b6105d8565b6101c36101a63660046122a1565b600860209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b6101e96101e4366004612083565b610763565b6040516101cd919061232c565b6101c3610204366004612207565b610952565b6101706102173660046122a1565b610983565b60045461023090600160a01b900460ff1681565b60405190151581526020016101cd565b610170610dc4565b6101c36102563660046120af565b610dd8565b60035461026e906001600160a01b031681565b6040516001600160a01b0390911681526020016101cd565b610170610294366004612066565b61106e565b6000546001600160a01b031661026e565b6101706102b83660046121af565b6111b4565b610170611214565b6101706102d33660046122c3565b611329565b6101c36113ca565b6102f36102ee366004612207565b6114e5565b6040805193845260208401929092521515908201526060016101cd565b6101c361031e3660046120af565b61151b565b60045461026e906001600160a01b031681565b610349610344366004612269565b61164f565b604080516001600160a01b03909916895260208901979097529587019490945260608601929092526080850152151560a084015260c083015260e0820152610100016101cd565b6101c361039e366004612239565b600760209081526000928352604080842090915290825290205481565b6101706103c9366004612066565b6116cc565b60025461026e906001600160a01b031681565b6103e9611745565b6000600582815481106103fe576103fe6124e0565b600091825260209182902060039091020160028101805460ff19168615159081179091556040519081529092507f608c68cec60453b4c976616f2c75d7dc520288e1fcf03656b57f7d7bddc84920910160405180910390a1505050565b610463611745565b81516004146104b95760405162461bcd60e51b815260206004820152601760248201527f3420494e444558454420415252415920414c4c4f57454400000000000000000060448201526064015b60405180910390fd5b816000815181106104cc576104cc6124e0565b60209081029190910181015160008381526008835260408082206001808452945290205582518391908110610503576105036124e0565b602090810291909101810151600083815260088352604080822060038352909352919091205581518290600290811061053e5761053e6124e0565b6020908102919091018101516000838152600883526040808220600683529093529190912055815182906003908110610579576105796124e0565b6020908102919091018101516000838152600883526040808220600c835290935282902055517fd84590d86ab2d58206f3a24a7e99a4b072f98f99a71b03d5f94e0d9453fe27bf906105cc9084906123c4565b60405180910390a15050565b600260015414156105fb5760405162461bcd60e51b81526004016104b090612408565b60026001556000818152600660209081526040808320338452909152902080548390811061062b5761062b6124e0565b600091825260209091206005600890920201015460ff16156106835760405162461bcd60e51b815260206004820152601160248201527020a62922a0a22c902ba4aa24222920aba760791b60448201526064016104b0565b600081815260066020908152604080832033845290915290208054429190849081106106b1576106b16124e0565b906000526020600020906008020160030154106107095760405162461bcd60e51b815260206004820152601660248201527514d51052d25391c815125351481393d508115391115160521b60448201526064016104b0565b600454600160a01b900460ff16156107515760405162461bcd60e51b815260206004820152600b60248201526a436c61696d20506175736560a81b60448201526064016104b0565b61075b828261179f565b505060018055565b60008181526007602090815260408083206001600160a01b0386168452909152812054606091808267ffffffffffffffff8111156107a3576107a36124f6565b60405190808252806020026020018201604052801561082757816020015b61081460405180610100016040528060006001600160a01b031681526020016000815260200160008152602001600081526020016000815260200160001515815260200160008152602001600081525090565b8152602001906001900390816107c15790505b50905060005b60008681526007602090815260408083206001600160a01b038b1684529091529020548110156109465760008681526006602090815260408083206001600160a01b038b168452909152812080548390811061088b5761088b6124e0565b60009182526020918290206040805161010081018252600890930290910180546001600160a01b031683526001810154938301939093526002830154908201526003820154606082015260048201546080820152600582015460ff16151560a0820152600682015460c0820152600782015460e082015284519192509084908690811061091a5761091a6124e0565b602090810291909101015261093060018561243f565b935050808061093e906124af565b91505061082d565b50925050505b92915050565b60008060058381548110610968576109686124e0565b60009182526020909120600160039092020101549392505050565b600260015414156109a65760405162461bcd60e51b81526004016104b090612408565b6002600155600454600160a01b900460ff16156109f35760405162461bcd60e51b815260206004820152600b60248201526a436c61696d20506175736560a81b60448201526064016104b0565b600060058281548110610a0857610a086124e0565b90600052602060002090600302019050610a2333848461151b565b60008381526006602090815260408083203384529091529020805485908110610a4e57610a4e6124e0565b90600052602060002090600802016007015410610a9b5760405162461bcd60e51b815260206004820152600b60248201526a105b1b0818db185a5b595960aa1b60448201526064016104b0565b6000610aa8338585610dd8565b6000848152600660209081526040808320338452909152902080549192509085908110610ad757610ad76124e0565b906000526020600020906008020160070154610af4338686610dd8565b11610b3a5760405162461bcd60e51b8152602060048201526016602482015275082d8e4cac2c8f240c6d8c2d2dacac840cadcdeeaced60531b60448201526064016104b0565b600083815260066020908152604080832033845290915281208054610b8b919087908110610b6a57610b6a6124e0565b90600052602060002090600802016007015483611ba590919063ffffffff16565b600085815260066020908152604080832033845290915290208054919250829187908110610bbb57610bbb6124e0565b90600052602060002090600802016007016000828254610bdb919061243f565b9250508190555080836001016000828254610bf6919061243f565b909155505060025460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb90604401602060405180830381600087803b158015610c4757600080fd5b505af1158015610c5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7f91906121cc565b50600084815260066020908152604080832033808552925290912080547f842893daa289e2a963f6019bf6f559f2921382fe00bbd321920569cfbfc4379a92919088908110610cd057610cd06124e0565b60009182526020808320600160089093020191909101548883526006825260408084203385529092529120805489908110610d0d57610d0d6124e0565b6000918252602080832060026008909302019190910154898352600682526040808420338552909252912080548a908110610d4a57610d4a6124e0565b60009182526020808320600360089093020191909101548a835260068252604080842033855290925290822080549192918c908110610d8b57610d8b6124e0565b9060005260206000209060080201600701548a604051610db197969594939291906122ef565b60405180910390a1505060018055505050565b610dcc611745565b610dd66000611c08565b565b60008181526006602090815260408083206001600160a01b03871684529091528120805484908110610e0c57610e0c6124e0565b90600052602060002090600802016001015460001415610e635760405162461bcd60e51b815260206004820152601260248201527116915493c8185b5bdd5b9d081cdd185ad95960721b60448201526064016104b0565b60008281526006602090815260408083206001600160a01b03881684529091528120805485908110610e9757610e976124e0565b60009182526020808320600660089093020182015486845291815260408084206001600160a01b038a168552909152822080549193509086908110610ede57610ede6124e0565b60009182526020808320600460089093020191909101548683526006825260408084206001600160a01b038b1685529092529082208054919350429188908110610f2a57610f2a6124e0565b90600052602060002090600802016003015411610f8c5760008581526006602090815260408083206001600160a01b038b1684529091529020805487908110610f7557610f756124e0565b906000526020600020906008020160030154610f8e565b425b60008681526006602090815260408083206001600160a01b038c168452909152812080549293509091610fed919089908110610fcc57610fcc6124e0565b90600052602060002090600802016002015483611ba590919063ffffffff16565b90506000611042606461103c600c61103c88611036600860008f815260200190815260200160002060008c8152602001908152602001600020548c611c5890919063ffffffff16565b90611c58565b90611cd7565b905060006110606110568662278d00611c58565b61103c8486611c58565b9a9950505050505050505050565b600260015414156110915760405162461bcd60e51b81526004016104b090612408565b600260015561109e611745565b806001600160a01b031663a9059cbb6110bf6000546001600160a01b031690565b6040516370a0823160e01b81523060048201526001600160a01b038516906370a082319060240160206040518083038186803b1580156110fe57600080fd5b505afa158015611112573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111369190612220565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b15801561117c57600080fd5b505af1158015611190573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075b91906121cc565b6111bc611745565b60048054821515600160a01b0260ff60a01b199091161790556040517fa0fba10fe10596bd999df8c28956d27761a69da4b3ef4b8e977cc2749b61048b9061120990831515815260200190565b60405180910390a150565b61121c611745565b611242604051806060016040528060008152602001600081526020016000151581525090565b60006020820181815281835260408301828152600580546001808201835582865286517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db060039093029283015593517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db182015591517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db2909201805460ff191692151592909217909155546112f69190612498565b90507ffa88d81eaffbf548e3ffc6c6458827ce9906ad714060746b80909cdf8d1d7ef7816040516105cc91815260200190565b6002600154141561134c5760405162461bcd60e51b81526004016104b090612408565b600260019081558214806113605750816003145b8061136b5750816006145b80611376575081600c145b6113b65760405162461bcd60e51b815260206004820152601160248201527008a9ca88aa440ac82989288409a9e9ca89607b1b60448201526064016104b0565b6113c1838383611d32565b50506001805550565b60048054604080516318160ddd60e01b8152905160009384936001600160a01b0316926318160ddd9281830192602092829003018186803b15801561140e57600080fd5b505afa158015611422573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114469190612220565b600354600480546040516370a0823160e01b81526001600160a01b0391821692810192909252929350600092909116906370a082319060240160206040518083038186803b15801561149757600080fd5b505afa1580156114ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114cf9190612220565b905060006114dd8383612457565b949350505050565b600581815481106114f557600080fd5b600091825260209091206003909102018054600182015460029092015490925060ff1683565b60008181526006602090815260408083206001600160a01b0387168452909152812080548490811061154f5761154f6124e0565b9060005260206000209060080201600101546000141561156e57600080fd5b60008281526006602090815260408083206001600160a01b038816845290915281208054859081106115a2576115a26124e0565b60009182526020808320600660089093020182015486845291815260408084206001600160a01b038a1685529091528220805491935090869081106115e9576115e96124e0565b90600052602060002090600802016004015490506000611644606461103c600c61103c86611036600860008d815260200190815260200160002060008a8152602001908152602001600020548a611c5890919063ffffffff16565b979650505050505050565b6006602052826000526040600020602052816000526040600020818154811061167757600080fd5b6000918252602090912060089091020180546001820154600283015460038401546004850154600586015460068701546007909701546001600160a01b03909616995093975091955093909260ff9092169188565b6116d4611745565b6001600160a01b0381166117395760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104b0565b61174281611c08565b50565b6000546001600160a01b03163314610dd65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104b0565b6000600582815481106117b4576117b46124e0565b60009182526020808320858452600682526040808520338652909252922080546003909202909201925060019190859081106117f2576117f26124e0565b60009182526020808320600892909202909101600501805460ff19169315159390931790925583815260068252604080822033835290925290812080548590811061183f5761183f6124e0565b600091825260208083206001600890930201919091015485835260068252604080842033855290925290822080549193509086908110611881576118816124e0565b90600052602060002090600802016007015461189e33878761151b565b116118e557600084815260066020908152604080832033845290915290208054869081106118ce576118ce6124e0565b9060005260206000209060080201600701546118f0565b6118f033868661151b565b6000858152600660209081526040808320338452909152812080549293509091611925919088908110610b6a57610b6a6124e0565b600086815260066020908152604080832033845290915290208054919250829188908110611955576119556124e0565b90600052602060002090600802016007016000828254611975919061243f565b9250508190555080846001016000828254611990919061243f565b90915550506004805460405163a9059cbb60e01b81523392810192909252602482018590526001600160a01b03169063a9059cbb90604401602060405180830381600087803b1580156119e257600080fd5b505af11580156119f6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1a91906121cc565b5060025460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb90604401602060405180830381600087803b158015611a6757600080fd5b505af1158015611a7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a9f91906121cc565b50600085815260066020908152604080832033808552925290912080547f842893daa289e2a963f6019bf6f559f2921382fe00bbd321920569cfbfc4379a929186918a908110611af157611af16124e0565b60009182526020808320600260089093020191909101548a8352600682526040808420338552909252912080548b908110611b2e57611b2e6124e0565b60009182526020808320600360089093020191909101548b835260068252604080842033855290925291208054600191908d908110611b6f57611b6f6124e0565b9060005260206000209060080201600701548b604051611b9597969594939291906122ef565b60405180910390a1505050505050565b600082821115611bf75760405162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f77000060448201526064016104b0565b611c018284612498565b9392505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600082611c675750600061094c565b6000611c738385612479565b905082611c808583612457565b14611c015760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016104b0565b6000808211611d285760405162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f00000000000060448201526064016104b0565b611c018284612457565b600480546040516323b872dd60e01b81523392810192909252306024830152604482018590526001600160a01b0316906323b872dd90606401602060405180830381600087803b158015611d8557600080fd5b505af1158015611d99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dbd91906121cc565b50600060058281548110611dd357611dd36124e0565b60009182526020909120600390910201600281015490915060ff1615611e2b5760405162461bcd60e51b815260206004820152600d60248201526c5354414b494e4720504155534560981b60448201526064016104b0565b60008281526007602090815260408083203384529091528120805491611e50836124af565b919050555083816000016000828254611e69919061243f565b9091555060009050611e88611e818562278d00611c58565b4290612007565b90506000611e98866110366113ca565b9050600660008581526020019081526020016000206000336001600160a01b03166001600160a01b03168152602001908152602001600020604051806101000160405280336001600160a01b031681526020018881526020014281526020018481526020018781526020016000151581526020018381526020016000815250908060018154018082558091505060019003906000526020600020906008020160009091909190915060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015560a08201518160050160006101000a81548160ff02191690831515021790555060c0820151816006015560e0820151816007015550507f842893daa289e2a963f6019bf6f559f2921382fe00bbd321920569cfbfc4379a338742856000808a604051611b9597969594939291906122ef565b600080612014838561243f565b905083811015611c015760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016104b0565b60006020828403121561207857600080fd5b8135611c018161250c565b6000806040838503121561209657600080fd5b82356120a18161250c565b946020939093013593505050565b6000806000606084860312156120c457600080fd5b83356120cf8161250c565b95602085013595506040909401359392505050565b600080604083850312156120f757600080fd5b823567ffffffffffffffff8082111561210f57600080fd5b818501915085601f83011261212357600080fd5b8135602082821115612137576121376124f6565b8160051b604051601f19603f8301168101818110868211171561215c5761215c6124f6565b604052838152828101945085830182870184018b101561217b57600080fd5b600096505b8487101561219e578035865260019690960195948301948301612180565b509997909101359750505050505050565b6000602082840312156121c157600080fd5b8135611c0181612521565b6000602082840312156121de57600080fd5b8151611c0181612521565b600080604083850312156121fc57600080fd5b82356120a181612521565b60006020828403121561221957600080fd5b5035919050565b60006020828403121561223257600080fd5b5051919050565b6000806040838503121561224c57600080fd5b82359150602083013561225e8161250c565b809150509250929050565b60008060006060848603121561227e57600080fd5b8335925060208401356122908161250c565b929592945050506040919091013590565b600080604083850312156122b457600080fd5b50508035926020909101359150565b6000806000606084860312156122d857600080fd5b505081359360208301359350604090920135919050565b6001600160a01b039790971687526020870195909552604086019390935260608501919091521515608084015260a083015260c082015260e00190565b602080825282518282018190526000919060409081850190868401855b828110156123b757815180516001600160a01b0316855286810151878601528581015186860152606080820151908601526080808201519086015260a08082015115159086015260c0808201519086015260e090810151908501526101009093019290850190600101612349565b5091979650505050505050565b6020808252825182820181905260009190848201906040850190845b818110156123fc578351835292840192918401916001016123e0565b50909695505050505050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60008219821115612452576124526124ca565b500190565b60008261247457634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612493576124936124ca565b500290565b6000828210156124aa576124aa6124ca565b500390565b60006000198214156124c3576124c36124ca565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461174257600080fd5b801515811461174257600080fdfea2646970667358221220445538c292eaa870d9da9fe58aeba27d7e8816fd1b319d45743a765cd27f505364736f6c63430008070033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101585760003560e01c80638da5cb5b116100c3578063c11f92601161007c578063c11f926014610310578063c8d732fe14610323578063e5f46c5e14610336578063eab15c4814610390578063f2fde38b146103bb578063ff5f8576146103ce57600080fd5b80638da5cb5b146102995780639888cc83146102aa5780639a06b113146102bd578063a638f2e2146102c5578063a7e4418b146102d8578063ac4afa38146102e057600080fd5b8063594dd43211610115578063594dd432146102095780636d73d6b31461021c578063715018a6146102405780637fb33efe146102485780638265b1211461025b578063894760691461028657600080fd5b80630fa4bae71461015d57806336dd01ee14610172578063372caeb81461018557806338776df3146101985780634cb8a68b146101d65780635685c466146101f6575b600080fd5b61017061016b3660046121e9565b6103e1565b005b6101706101803660046120e4565b61045b565b6101706101933660046122a1565b6105d8565b6101c36101a63660046122a1565b600860209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b6101e96101e4366004612083565b610763565b6040516101cd919061232c565b6101c3610204366004612207565b610952565b6101706102173660046122a1565b610983565b60045461023090600160a01b900460ff1681565b60405190151581526020016101cd565b610170610dc4565b6101c36102563660046120af565b610dd8565b60035461026e906001600160a01b031681565b6040516001600160a01b0390911681526020016101cd565b610170610294366004612066565b61106e565b6000546001600160a01b031661026e565b6101706102b83660046121af565b6111b4565b610170611214565b6101706102d33660046122c3565b611329565b6101c36113ca565b6102f36102ee366004612207565b6114e5565b6040805193845260208401929092521515908201526060016101cd565b6101c361031e3660046120af565b61151b565b60045461026e906001600160a01b031681565b610349610344366004612269565b61164f565b604080516001600160a01b03909916895260208901979097529587019490945260608601929092526080850152151560a084015260c083015260e0820152610100016101cd565b6101c361039e366004612239565b600760209081526000928352604080842090915290825290205481565b6101706103c9366004612066565b6116cc565b60025461026e906001600160a01b031681565b6103e9611745565b6000600582815481106103fe576103fe6124e0565b600091825260209182902060039091020160028101805460ff19168615159081179091556040519081529092507f608c68cec60453b4c976616f2c75d7dc520288e1fcf03656b57f7d7bddc84920910160405180910390a1505050565b610463611745565b81516004146104b95760405162461bcd60e51b815260206004820152601760248201527f3420494e444558454420415252415920414c4c4f57454400000000000000000060448201526064015b60405180910390fd5b816000815181106104cc576104cc6124e0565b60209081029190910181015160008381526008835260408082206001808452945290205582518391908110610503576105036124e0565b602090810291909101810151600083815260088352604080822060038352909352919091205581518290600290811061053e5761053e6124e0565b6020908102919091018101516000838152600883526040808220600683529093529190912055815182906003908110610579576105796124e0565b6020908102919091018101516000838152600883526040808220600c835290935282902055517fd84590d86ab2d58206f3a24a7e99a4b072f98f99a71b03d5f94e0d9453fe27bf906105cc9084906123c4565b60405180910390a15050565b600260015414156105fb5760405162461bcd60e51b81526004016104b090612408565b60026001556000818152600660209081526040808320338452909152902080548390811061062b5761062b6124e0565b600091825260209091206005600890920201015460ff16156106835760405162461bcd60e51b815260206004820152601160248201527020a62922a0a22c902ba4aa24222920aba760791b60448201526064016104b0565b600081815260066020908152604080832033845290915290208054429190849081106106b1576106b16124e0565b906000526020600020906008020160030154106107095760405162461bcd60e51b815260206004820152601660248201527514d51052d25391c815125351481393d508115391115160521b60448201526064016104b0565b600454600160a01b900460ff16156107515760405162461bcd60e51b815260206004820152600b60248201526a436c61696d20506175736560a81b60448201526064016104b0565b61075b828261179f565b505060018055565b60008181526007602090815260408083206001600160a01b0386168452909152812054606091808267ffffffffffffffff8111156107a3576107a36124f6565b60405190808252806020026020018201604052801561082757816020015b61081460405180610100016040528060006001600160a01b031681526020016000815260200160008152602001600081526020016000815260200160001515815260200160008152602001600081525090565b8152602001906001900390816107c15790505b50905060005b60008681526007602090815260408083206001600160a01b038b1684529091529020548110156109465760008681526006602090815260408083206001600160a01b038b168452909152812080548390811061088b5761088b6124e0565b60009182526020918290206040805161010081018252600890930290910180546001600160a01b031683526001810154938301939093526002830154908201526003820154606082015260048201546080820152600582015460ff16151560a0820152600682015460c0820152600782015460e082015284519192509084908690811061091a5761091a6124e0565b602090810291909101015261093060018561243f565b935050808061093e906124af565b91505061082d565b50925050505b92915050565b60008060058381548110610968576109686124e0565b60009182526020909120600160039092020101549392505050565b600260015414156109a65760405162461bcd60e51b81526004016104b090612408565b6002600155600454600160a01b900460ff16156109f35760405162461bcd60e51b815260206004820152600b60248201526a436c61696d20506175736560a81b60448201526064016104b0565b600060058281548110610a0857610a086124e0565b90600052602060002090600302019050610a2333848461151b565b60008381526006602090815260408083203384529091529020805485908110610a4e57610a4e6124e0565b90600052602060002090600802016007015410610a9b5760405162461bcd60e51b815260206004820152600b60248201526a105b1b0818db185a5b595960aa1b60448201526064016104b0565b6000610aa8338585610dd8565b6000848152600660209081526040808320338452909152902080549192509085908110610ad757610ad76124e0565b906000526020600020906008020160070154610af4338686610dd8565b11610b3a5760405162461bcd60e51b8152602060048201526016602482015275082d8e4cac2c8f240c6d8c2d2dacac840cadcdeeaced60531b60448201526064016104b0565b600083815260066020908152604080832033845290915281208054610b8b919087908110610b6a57610b6a6124e0565b90600052602060002090600802016007015483611ba590919063ffffffff16565b600085815260066020908152604080832033845290915290208054919250829187908110610bbb57610bbb6124e0565b90600052602060002090600802016007016000828254610bdb919061243f565b9250508190555080836001016000828254610bf6919061243f565b909155505060025460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb90604401602060405180830381600087803b158015610c4757600080fd5b505af1158015610c5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7f91906121cc565b50600084815260066020908152604080832033808552925290912080547f842893daa289e2a963f6019bf6f559f2921382fe00bbd321920569cfbfc4379a92919088908110610cd057610cd06124e0565b60009182526020808320600160089093020191909101548883526006825260408084203385529092529120805489908110610d0d57610d0d6124e0565b6000918252602080832060026008909302019190910154898352600682526040808420338552909252912080548a908110610d4a57610d4a6124e0565b60009182526020808320600360089093020191909101548a835260068252604080842033855290925290822080549192918c908110610d8b57610d8b6124e0565b9060005260206000209060080201600701548a604051610db197969594939291906122ef565b60405180910390a1505060018055505050565b610dcc611745565b610dd66000611c08565b565b60008181526006602090815260408083206001600160a01b03871684529091528120805484908110610e0c57610e0c6124e0565b90600052602060002090600802016001015460001415610e635760405162461bcd60e51b815260206004820152601260248201527116915493c8185b5bdd5b9d081cdd185ad95960721b60448201526064016104b0565b60008281526006602090815260408083206001600160a01b03881684529091528120805485908110610e9757610e976124e0565b60009182526020808320600660089093020182015486845291815260408084206001600160a01b038a168552909152822080549193509086908110610ede57610ede6124e0565b60009182526020808320600460089093020191909101548683526006825260408084206001600160a01b038b1685529092529082208054919350429188908110610f2a57610f2a6124e0565b90600052602060002090600802016003015411610f8c5760008581526006602090815260408083206001600160a01b038b1684529091529020805487908110610f7557610f756124e0565b906000526020600020906008020160030154610f8e565b425b60008681526006602090815260408083206001600160a01b038c168452909152812080549293509091610fed919089908110610fcc57610fcc6124e0565b90600052602060002090600802016002015483611ba590919063ffffffff16565b90506000611042606461103c600c61103c88611036600860008f815260200190815260200160002060008c8152602001908152602001600020548c611c5890919063ffffffff16565b90611c58565b90611cd7565b905060006110606110568662278d00611c58565b61103c8486611c58565b9a9950505050505050505050565b600260015414156110915760405162461bcd60e51b81526004016104b090612408565b600260015561109e611745565b806001600160a01b031663a9059cbb6110bf6000546001600160a01b031690565b6040516370a0823160e01b81523060048201526001600160a01b038516906370a082319060240160206040518083038186803b1580156110fe57600080fd5b505afa158015611112573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111369190612220565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b15801561117c57600080fd5b505af1158015611190573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075b91906121cc565b6111bc611745565b60048054821515600160a01b0260ff60a01b199091161790556040517fa0fba10fe10596bd999df8c28956d27761a69da4b3ef4b8e977cc2749b61048b9061120990831515815260200190565b60405180910390a150565b61121c611745565b611242604051806060016040528060008152602001600081526020016000151581525090565b60006020820181815281835260408301828152600580546001808201835582865286517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db060039093029283015593517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db182015591517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db2909201805460ff191692151592909217909155546112f69190612498565b90507ffa88d81eaffbf548e3ffc6c6458827ce9906ad714060746b80909cdf8d1d7ef7816040516105cc91815260200190565b6002600154141561134c5760405162461bcd60e51b81526004016104b090612408565b600260019081558214806113605750816003145b8061136b5750816006145b80611376575081600c145b6113b65760405162461bcd60e51b815260206004820152601160248201527008a9ca88aa440ac82989288409a9e9ca89607b1b60448201526064016104b0565b6113c1838383611d32565b50506001805550565b60048054604080516318160ddd60e01b8152905160009384936001600160a01b0316926318160ddd9281830192602092829003018186803b15801561140e57600080fd5b505afa158015611422573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114469190612220565b600354600480546040516370a0823160e01b81526001600160a01b0391821692810192909252929350600092909116906370a082319060240160206040518083038186803b15801561149757600080fd5b505afa1580156114ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114cf9190612220565b905060006114dd8383612457565b949350505050565b600581815481106114f557600080fd5b600091825260209091206003909102018054600182015460029092015490925060ff1683565b60008181526006602090815260408083206001600160a01b0387168452909152812080548490811061154f5761154f6124e0565b9060005260206000209060080201600101546000141561156e57600080fd5b60008281526006602090815260408083206001600160a01b038816845290915281208054859081106115a2576115a26124e0565b60009182526020808320600660089093020182015486845291815260408084206001600160a01b038a1685529091528220805491935090869081106115e9576115e96124e0565b90600052602060002090600802016004015490506000611644606461103c600c61103c86611036600860008d815260200190815260200160002060008a8152602001908152602001600020548a611c5890919063ffffffff16565b979650505050505050565b6006602052826000526040600020602052816000526040600020818154811061167757600080fd5b6000918252602090912060089091020180546001820154600283015460038401546004850154600586015460068701546007909701546001600160a01b03909616995093975091955093909260ff9092169188565b6116d4611745565b6001600160a01b0381166117395760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104b0565b61174281611c08565b50565b6000546001600160a01b03163314610dd65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104b0565b6000600582815481106117b4576117b46124e0565b60009182526020808320858452600682526040808520338652909252922080546003909202909201925060019190859081106117f2576117f26124e0565b60009182526020808320600892909202909101600501805460ff19169315159390931790925583815260068252604080822033835290925290812080548590811061183f5761183f6124e0565b600091825260208083206001600890930201919091015485835260068252604080842033855290925290822080549193509086908110611881576118816124e0565b90600052602060002090600802016007015461189e33878761151b565b116118e557600084815260066020908152604080832033845290915290208054869081106118ce576118ce6124e0565b9060005260206000209060080201600701546118f0565b6118f033868661151b565b6000858152600660209081526040808320338452909152812080549293509091611925919088908110610b6a57610b6a6124e0565b600086815260066020908152604080832033845290915290208054919250829188908110611955576119556124e0565b90600052602060002090600802016007016000828254611975919061243f565b9250508190555080846001016000828254611990919061243f565b90915550506004805460405163a9059cbb60e01b81523392810192909252602482018590526001600160a01b03169063a9059cbb90604401602060405180830381600087803b1580156119e257600080fd5b505af11580156119f6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1a91906121cc565b5060025460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb90604401602060405180830381600087803b158015611a6757600080fd5b505af1158015611a7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a9f91906121cc565b50600085815260066020908152604080832033808552925290912080547f842893daa289e2a963f6019bf6f559f2921382fe00bbd321920569cfbfc4379a929186918a908110611af157611af16124e0565b60009182526020808320600260089093020191909101548a8352600682526040808420338552909252912080548b908110611b2e57611b2e6124e0565b60009182526020808320600360089093020191909101548b835260068252604080842033855290925291208054600191908d908110611b6f57611b6f6124e0565b9060005260206000209060080201600701548b604051611b9597969594939291906122ef565b60405180910390a1505050505050565b600082821115611bf75760405162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f77000060448201526064016104b0565b611c018284612498565b9392505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600082611c675750600061094c565b6000611c738385612479565b905082611c808583612457565b14611c015760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016104b0565b6000808211611d285760405162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f00000000000060448201526064016104b0565b611c018284612457565b600480546040516323b872dd60e01b81523392810192909252306024830152604482018590526001600160a01b0316906323b872dd90606401602060405180830381600087803b158015611d8557600080fd5b505af1158015611d99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dbd91906121cc565b50600060058281548110611dd357611dd36124e0565b60009182526020909120600390910201600281015490915060ff1615611e2b5760405162461bcd60e51b815260206004820152600d60248201526c5354414b494e4720504155534560981b60448201526064016104b0565b60008281526007602090815260408083203384529091528120805491611e50836124af565b919050555083816000016000828254611e69919061243f565b9091555060009050611e88611e818562278d00611c58565b4290612007565b90506000611e98866110366113ca565b9050600660008581526020019081526020016000206000336001600160a01b03166001600160a01b03168152602001908152602001600020604051806101000160405280336001600160a01b031681526020018881526020014281526020018481526020018781526020016000151581526020018381526020016000815250908060018154018082558091505060019003906000526020600020906008020160009091909190915060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015560a08201518160050160006101000a81548160ff02191690831515021790555060c0820151816006015560e0820151816007015550507f842893daa289e2a963f6019bf6f559f2921382fe00bbd321920569cfbfc4379a338742856000808a604051611b9597969594939291906122ef565b600080612014838561243f565b905083811015611c015760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016104b0565b60006020828403121561207857600080fd5b8135611c018161250c565b6000806040838503121561209657600080fd5b82356120a18161250c565b946020939093013593505050565b6000806000606084860312156120c457600080fd5b83356120cf8161250c565b95602085013595506040909401359392505050565b600080604083850312156120f757600080fd5b823567ffffffffffffffff8082111561210f57600080fd5b818501915085601f83011261212357600080fd5b8135602082821115612137576121376124f6565b8160051b604051601f19603f8301168101818110868211171561215c5761215c6124f6565b604052838152828101945085830182870184018b101561217b57600080fd5b600096505b8487101561219e578035865260019690960195948301948301612180565b509997909101359750505050505050565b6000602082840312156121c157600080fd5b8135611c0181612521565b6000602082840312156121de57600080fd5b8151611c0181612521565b600080604083850312156121fc57600080fd5b82356120a181612521565b60006020828403121561221957600080fd5b5035919050565b60006020828403121561223257600080fd5b5051919050565b6000806040838503121561224c57600080fd5b82359150602083013561225e8161250c565b809150509250929050565b60008060006060848603121561227e57600080fd5b8335925060208401356122908161250c565b929592945050506040919091013590565b600080604083850312156122b457600080fd5b50508035926020909101359150565b6000806000606084860312156122d857600080fd5b505081359360208301359350604090920135919050565b6001600160a01b039790971687526020870195909552604086019390935260608501919091521515608084015260a083015260c082015260e00190565b602080825282518282018190526000919060409081850190868401855b828110156123b757815180516001600160a01b0316855286810151878601528581015186860152606080820151908601526080808201519086015260a08082015115159086015260c0808201519086015260e090810151908501526101009093019290850190600101612349565b5091979650505050505050565b6020808252825182820181905260009190848201906040850190845b818110156123fc578351835292840192918401916001016123e0565b50909695505050505050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60008219821115612452576124526124ca565b500190565b60008261247457634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612493576124936124ca565b500290565b6000828210156124aa576124aa6124ca565b500390565b60006000198214156124c3576124c36124ca565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461174257600080fd5b801515811461174257600080fdfea2646970667358221220445538c292eaa870d9da9fe58aeba27d7e8816fd1b319d45743a765cd27f505364736f6c63430008070033
Deployed Bytecode Sourcemap
12703:8120:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20489:199;;;;;;:::i;:::-;;:::i;:::-;;19712:313;;;;;;:::i;:::-;;:::i;15202:365::-;;;;;;:::i;:::-;;:::i;14052:56::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;15998:25:1;;;15986:2;15971:18;14052:56:0;;;;;;;;17548:514;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;19541:163::-;;;;;;:::i;:::-;;:::i;16563:977::-;;;;;;:::i;:::-;;:::i;13042:31::-;;;;;-1:-1:-1;;;13042:31:0;;;;;;;;;9888:14:1;;9881:22;9863:41;;9851:2;9836:18;13042:31:0;9723:187:1;11888:103:0;;;:::i;18503:750::-;;;;;;:::i;:::-;;:::i;12887:69::-;;;;;-1:-1:-1;;;;;12887:69:0;;;;;;-1:-1:-1;;;;;5071:32:1;;;5053:51;;5041:2;5026:18;12887:69:0;4907:203:1;20033:146:0;;;;;;:::i;:::-;;:::i;11240:87::-;11286:7;11313:6;-1:-1:-1;;;;;11313:6:0;11240:87;;20696:122;;;;;;:::i;:::-;;:::i;20195:286::-;;;:::i;14263:230::-;;;;;;:::i;:::-;;:::i;19263:270::-;;;:::i;13141:19::-;;;;;;:::i;:::-;;:::i;:::-;;;;16230:25:1;;;16286:2;16271:18;;16264:34;;;;16341:14;16334:22;16314:18;;;16307:50;16218:2;16203:18;13141:19:0;16034:329:1;18070:425:0;;;;;;:::i;:::-;;:::i;12963:72::-;;;;;-1:-1:-1;;;;;12963:72:0;;;13914:59;;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;7433:32:1;;;7415:51;;7497:2;7482:18;;7475:34;;;;7525:18;;;7518:34;;;;7583:2;7568:18;;7561:34;;;;7626:3;7611:19;;7604:35;7683:14;7676:22;7453:3;7655:19;;7648:51;7730:3;7715:19;;7708:35;7774:3;7759:19;;7752:35;7402:3;7387:19;13914:59:0;7078:715:1;13980:65:0;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;12146:201;;;;;;:::i;:::-;;:::i;12802:70::-;;;;;-1:-1:-1;;;;;12802:70:0;;;20489:199;11126:13;:11;:13::i;:::-;20572:17:::1;20592:5;20598:6;20592:13;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;::::1;::::0;;::::1;;20617:17;::::0;::::1;:26:::0;;-1:-1:-1;;20617:26:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20660:20:::1;::::0;9863:41:1;;;20592:13:0;;-1:-1:-1;20660:20:0::1;::::0;9836:18:1;20660:20:0::1;;;;;;;20560:128;20489:199:::0;;:::o;19712:313::-;11126:13;:11;:13::i;:::-;19805:4:::1;:11;19820:1;19805:16;19797:51;;;::::0;-1:-1:-1;;;19797:51:0;;12143:2:1;19797:51:0::1;::::0;::::1;12125:21:1::0;12182:2;12162:18;;;12155:30;12221:25;12201:18;;;12194:53;12264:18;;19797:51:0::1;;;;;;;;;19876:4;19881:1;19876:7;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;19859:11:::1;::::0;;;:3:::1;:11:::0;;;;;;19871:1:::1;19859:14:::0;;;;;;;:24;19911:7;;:4;;19871:1;19911:7;::::1;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;19894:11:::1;::::0;;;:3:::1;:11:::0;;;;;;19906:1:::1;19894:14:::0;;;;;;;;;:24;19946:7;;:4;;19951:1:::1;::::0;19946:7;::::1;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;19929:11:::1;::::0;;;:3:::1;:11:::0;;;;;;19941:1:::1;19929:14:::0;;;;;;;;;:24;19982:7;;:4;;19987:1:::1;::::0;19982:7;::::1;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;19964:11:::1;::::0;;;:3:::1;:11:::0;;;;;;19976:2:::1;19964:15:::0;;;;;;;;:25;20005:12;::::1;::::0;::::1;::::0;20012:4;;20005:12:::1;:::i;:::-;;;;;;;;19712:313:::0;;:::o;15202:365::-;8462:1;9060:7;;:19;;9052:63;;;;-1:-1:-1;;;9052:63:0;;;;;;;:::i;:::-;8462:1;9193:7;:18;15290:14:::1;::::0;;;:6:::1;:14;::::0;;;;;;;15305:10:::1;15290:26:::0;;;;;;;:35;;15317:7;;15290:35;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;:45:::1;:35;::::0;;::::1;;:45;::::0;::::1;;:54;15282:84;;;::::0;-1:-1:-1;;;15282:84:0;;15008:2:1;15282:84:0::1;::::0;::::1;14990:21:1::0;15047:2;15027:18;;;15020:30;-1:-1:-1;;;15066:18:1;;;15059:47;15123:18;;15282:84:0::1;14806:341:1::0;15282:84:0::1;15385:14;::::0;;;:6:::1;:14;::::0;;;;;;;15400:10:::1;15385:26:::0;;;;;;;:35;;15431:15:::1;::::0;15385:26;15412:7;;15385:35;::::1;;;;;:::i;:::-;;;;;;;;;;;:43;;;:61;15377:95;;;::::0;-1:-1:-1;;;15377:95:0;;12850:2:1;15377:95:0::1;::::0;::::1;12832:21:1::0;12889:2;12869:18;;;12862:30;-1:-1:-1;;;12908:18:1;;;12901:52;12970:18;;15377:95:0::1;12648:346:1::0;15377:95:0::1;15491:10;::::0;-1:-1:-1;;;15491:10:0;::::1;;;:17;15483:41;;;::::0;-1:-1:-1;;;15483:41:0;;10339:2:1;15483:41:0::1;::::0;::::1;10321:21:1::0;10378:2;10358:18;;;10351:30;-1:-1:-1;;;10397:18:1;;;10390:41;10448:18;;15483:41:0::1;10137:335:1::0;15483:41:0::1;15535:24;15544:7;15552:6;15535:8;:24::i;:::-;-1:-1:-1::0;;8418:1:0;9372:22;;15202:365::o;17548:514::-;17646:17;17666:18;;;:10;:18;;;;;;;;-1:-1:-1;;;;;17666:26:0;;;;;;;;;;17619:15;;17646:17;17666:26;17762:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17762:23:0;;;;;;;;;;;;;;;;;17738:47;;17803:9;17798:234;17822:18;;;;:10;:18;;;;;;;;-1:-1:-1;;;;;17822:26:0;;;;;;;;;;17818:30;;17798:234;;;17874:26;17903:14;;;:6;:14;;;;;;;;-1:-1:-1;;;;;17903:22:0;;;;;;;;;:25;;17926:1;;17903:25;;;;;;:::i;:::-;;;;;;;;;;17947:33;;;;;;;;17903:25;;;;;;;17947:33;;-1:-1:-1;;;;;17947:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:19;;17903:25;;-1:-1:-1;17947:33:0;:5;;17953:12;;17947:19;;;;;;:::i;:::-;;;;;;;;;;:33;17999:17;18015:1;17999:17;;:::i;:::-;;;17855:177;17850:3;;;;;:::i;:::-;;;;17798:234;;;-1:-1:-1;18049:5:0;-1:-1:-1;;;17548:514:0;;;;;:::o;19541:163::-;19602:7;19621:17;19641:5;19647:6;19641:13;;;;;;;;:::i;:::-;;;;;;;;;19672:24;19641:13;;;;;19672:24;;;19541:163;-1:-1:-1;;;19541:163:0:o;16563:977::-;8462:1;9060:7;;:19;;9052:63;;;;-1:-1:-1;;;9052:63:0;;;;;;;:::i;:::-;8462:1;9193:7;:18;16656:10:::1;::::0;-1:-1:-1;;;16656:10:0;::::1;;;:17;16648:41;;;::::0;-1:-1:-1;;;16648:41:0;;10339:2:1;16648:41:0::1;::::0;::::1;10321:21:1::0;10378:2;10358:18;;;10351:30;-1:-1:-1;;;10397:18:1;;;10390:41;10448:18;;16648:41:0::1;10137:335:1::0;16648:41:0::1;16700:17;16720:5;16726:6;16720:13;;;;;;;;:::i;:::-;;;;;;;;;;;16700:33;;16798:43;16814:10;16826:7;16834:6;16798:15;:43::i;:::-;16752:14;::::0;;;:6:::1;:14;::::0;;;;;;;16767:10:::1;16752:26:::0;;;;;;;:35;;16779:7;;16752:35;::::1;;;;;:::i;:::-;;;;;;;;;;;:43;;;:89;16744:113;;;::::0;-1:-1:-1;;;16744:113:0;;15714:2:1;16744:113:0::1;::::0;::::1;15696:21:1::0;15753:2;15733:18;;;15726:30;-1:-1:-1;;;15772:18:1;;;15765:41;15823:18;;16744:113:0::1;15512:335:1::0;16744:113:0::1;16868:13;16884:45;16902:10;16914:7;16922:6;16884:17;:45::i;:::-;16994:14;::::0;;;:6:::1;:14;::::0;;;;;;;17009:10:::1;16994:26:::0;;;;;;;:35;;16868:61;;-1:-1:-1;16994:26:0;17021:7;;16994:35;::::1;;;;;:::i;:::-;;;;;;;;;;;:43;;;16948:45;16966:10;16978:7;16986:6;16948:17;:45::i;:::-;:89;16940:124;;;::::0;-1:-1:-1;;;16940:124:0;;14657:2:1;16940:124:0::1;::::0;::::1;14639:21:1::0;14696:2;14676:18;;;14669:30;-1:-1:-1;;;14715:18:1;;;14708:52;14777:18;;16940:124:0::1;14455:346:1::0;16940:124:0::1;17075:13;17102:14:::0;;;:6:::1;:14;::::0;;;;;;;17117:10:::1;17102:26:::0;;;;;;;:35;;17091:55:::1;::::0;17102:26;17129:7;;17102:35;::::1;;;;;:::i;:::-;;;;;;;;;;;:43;;;17091:5;:9;;:55;;;;:::i;:::-;17157:14;::::0;;;:6:::1;:14;::::0;;;;;;;17172:10:::1;17157:26:::0;;;;;;;:35;;17075:71;;-1:-1:-1;17075:71:0;;17184:7;;17157:35;::::1;;;;;:::i;:::-;;;;;;;;;;;:43;;;:52;;;;;;;:::i;:::-;;;;;;;;17247:5;17220:4;:24;;;:32;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;17263:5:0::1;::::0;:33:::1;::::0;-1:-1:-1;;;17263:33:0;;17278:10:::1;17263:33;::::0;::::1;5669:51:1::0;5736:18;;;5729:34;;;-1:-1:-1;;;;;17263:5:0;;::::1;::::0;:14:::1;::::0;5642:18:1;;17263:33:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;17338:14:0::1;::::0;;;:6:::1;:14;::::0;;;;;;;17326:10:::1;17338:26:::0;;;;;;;;:35;;17312:220:::1;::::0;17326:10;17338:26;17365:7;;17338:35;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;:42:::1;:35;::::0;;::::1;;:42:::0;;;::::1;::::0;17382:14;;;:6:::1;:14:::0;;;;;;17397:10:::1;17382:26:::0;;;;;;;:35;;17409:7;;17382:35;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;:45:::1;:35;::::0;;::::1;;:45:::0;;;::::1;::::0;17429:14;;;:6:::1;:14:::0;;;;;;17444:10:::1;17429:26:::0;;;;;;;:35;;17456:7;;17429:35;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;:43:::1;:35;::::0;;::::1;;:43:::0;;;::::1;::::0;17481:14;;;:6:::1;:14:::0;;;;;;17496:10:::1;17481:26:::0;;;;;;;;:35;;17429:43;;:35;17508:7;;17481:35;::::1;;;;;:::i;:::-;;;;;;;;;;;:43;;;17525:6;17312:220;;;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;8418:1:0;9372:22;;-1:-1:-1;;;16563:977:0:o;11888:103::-;11126:13;:11;:13::i;:::-;11953:30:::1;11980:1;11953:18;:30::i;:::-;11888:103::o:0;18503:750::-;18598:7;18626:14;;;:6;:14;;;;;;;;-1:-1:-1;;;;;18626:22:0;;;;;;;;;:31;;18649:7;;18626:31;;;;;;:::i;:::-;;;;;;;;;;;:38;;;18668:1;18626:43;;18618:73;;;;-1:-1:-1;;;18618:73:0;;13201:2:1;18618:73:0;;;13183:21:1;13240:2;13220:18;;;13213:30;-1:-1:-1;;;13259:18:1;;;13252:48;13317:18;;18618:73:0;12999:342:1;18618:73:0;18702:16;18721:14;;;:6;:14;;;;;;;;-1:-1:-1;;;;;18721:22:0;;;;;;;;;:31;;18744:7;;18721:31;;;;;;:::i;:::-;;;;;;;;;:42;:31;;;;;:42;;;18788:14;;;;;;;;;;-1:-1:-1;;;;;18788:22:0;;;;;;;;;:31;;18721:42;;-1:-1:-1;18788:22:0;18811:7;;18788:31;;;;;;:::i;:::-;;;;;;;;;:38;:31;;;;;:38;;;;;18853:14;;;:6;:14;;;;;;-1:-1:-1;;;;;18853:22:0;;;;;;;;;;:31;;18788:38;;-1:-1:-1;18895:15:0;;18876:7;;18853:31;;;;;;:::i;:::-;;;;;;;;;;;:39;;;:57;:117;;18931:14;;;;:6;:14;;;;;;;;-1:-1:-1;;;;;18931:22:0;;;;;;;;;:31;;18954:7;;18931:31;;;;;;:::i;:::-;;;;;;;;;;;:39;;;18853:117;;;18913:15;18853:117;18981:13;19007:14;;;:6;:14;;;;;;;;-1:-1:-1;;;;;19007:22:0;;;;;;;;;:31;;18837:133;;-1:-1:-1;18981:13:0;;18997:52;;19007:22;19030:7;;19007:31;;;;;;:::i;:::-;;;;;;;;;;;:41;;;18997:5;:9;;:52;;;;:::i;:::-;18981:68;;19060:16;19079:62;19137:3;19080:51;19128:2;19081:41;19118:3;19082:30;19095:3;:11;19099:6;19095:11;;;;;;;;;;;:16;19107:3;19095:16;;;;;;;;;;;;19082:8;:12;;:30;;;;:::i;:::-;19081:36;;:41::i;:::-;19080:47;;:51::i;19079:62::-;19060:81;-1:-1:-1;19152:16:0;19171:48;19196:22;:3;13127:7;19196;:22::i;:::-;19172:18;:7;19184:5;19172:11;:18::i;19171:48::-;19152:67;18503:750;-1:-1:-1;;;;;;;;;;18503:750:0:o;20033:146::-;8462:1;9060:7;;:19;;9052:63;;;;-1:-1:-1;;;9052:63:0;;;;;;;:::i;:::-;8462:1;9193:7;:18;11126:13:::1;:11;:13::i;:::-;20114:6:::2;-1:-1:-1::0;;;;;20114:15:0::2;;20130:7;11286::::0;11313:6;-1:-1:-1;;;;;11313:6:0;;11240:87;20130:7:::2;20139:31;::::0;-1:-1:-1;;;20139:31:0;;20164:4:::2;20139:31;::::0;::::2;5053:51:1::0;-1:-1:-1;;;;;20139:16:0;::::2;::::0;::::2;::::0;5026:18:1;;20139:31:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20114:57;::::0;-1:-1:-1;;;;;;20114:57:0::2;::::0;;;;;;-1:-1:-1;;;;;5687:32:1;;;20114:57:0::2;::::0;::::2;5669:51:1::0;5736:18;;;5729:34;5642:18;;20114:57:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;20696:122::-:0;11126:13;:11;:13::i;:::-;20757:10:::1;:19:::0;;;::::1;;-1:-1:-1::0;;;20757:19:0::1;-1:-1:-1::0;;;;20757:19:0;;::::1;;::::0;;20792:18:::1;::::0;::::1;::::0;::::1;::::0;20770:6;9888:14:1;9881:22;9863:41;;9851:2;9836:18;;9723:187;20792:18:0::1;;;;;;;;20696:122:::0;:::o;20195:286::-;11126:13;:11;:13::i;:::-;20247:16:::1;-1:-1:-1::0;;;;;;;;;;;;;;;;;;;;;;;;;;20247:16:0::1;20302:1;20274:24;::::0;::::1;:29:::0;;;20314:19;;;20344:17:::1;::::0;::::1;:23:::0;;;20378:5:::1;:16:::0;;20344:23;20378:16;;::::1;::::0;;;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;;;;;-1:-1:-1;;20378:16:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;20422:12;:16:::1;::::0;20344:23;20422:16:::1;:::i;:::-;20405:33;;20454:19;20466:6;20454:19;;;;15998:25:1::0;;15986:2;15971:18;;15852:177;14263:230:0;8462:1;9060:7;;:19;;9052:63;;;;-1:-1:-1;;;9052:63:0;;;;;;;:::i;:::-;8462:1;9193:7;:18;;;14365:11;::::1;::::0;:26:::1;;;14380:6;14390:1;14380:11;14365:26;:41;;;;14395:6;14405:1;14395:11;14365:41;:57;;;;14410:6;14420:2;14410:12;14365:57;14357:86;;;::::0;-1:-1:-1;;;14357:86:0;;13548:2:1;14357:86:0::1;::::0;::::1;13530:21:1::0;13587:2;13567:18;;;13560:30;-1:-1:-1;;;13606:18:1;;;13599:47;13663:18;;14357:86:0::1;13346:341:1::0;14357:86:0::1;14454:31;14461:6;14469;14478;14454;:31::i;:::-;-1:-1:-1::0;;8418:1:0;9372:22;;-1:-1:-1;14263:230:0:o;19263:270::-;19348:7;;;:21;;;-1:-1:-1;;;19348:21:0;;;;19308:7;;;;-1:-1:-1;;;;;19348:7:0;;:19;;:21;;;;;;;;;;;:7;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19402:4;;19425:7;;;19402:32;;-1:-1:-1;;;19402:32:0;;-1:-1:-1;;;;;19425:7:0;;;19402:32;;;5053:51:1;;;;19328:41:0;;-1:-1:-1;19380:19:0;;19402:4;;;;:14;;5026:18:1;;19402:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19380:54;-1:-1:-1;19445:23:0;19471:21;19483:9;19380:54;19471:21;:::i;:::-;19445:47;19263:270;-1:-1:-1;;;;19263:270:0:o;13141:19::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13141:19:0;;;:::o;18070:425::-;18163:7;18191:14;;;:6;:14;;;;;;;;-1:-1:-1;;;;;18191:22:0;;;;;;;;;:31;;18214:7;;18191:31;;;;;;:::i;:::-;;;;;;;;;;;:38;;;18233:1;18191:43;;18183:52;;;;;;18246:16;18265:14;;;:6;:14;;;;;;;;-1:-1:-1;;;;;18265:22:0;;;;;;;;;:31;;18288:7;;18265:31;;;;;;:::i;:::-;;;;;;;;;:42;:31;;;;;:42;;;18332:14;;;;;;;;;;-1:-1:-1;;;;;18332:22:0;;;;;;;;;:31;;18265:42;;-1:-1:-1;18332:22:0;18355:7;;18332:31;;;;;;:::i;:::-;;;;;;;;;;;:38;;;18318:52;;18381:16;18400:62;18458:3;18401:51;18449:2;18402:41;18439:3;18403:30;18416:3;:11;18420:6;18416:11;;;;;;;;;;;:16;18428:3;18416:16;;;;;;;;;;;;18403:8;:12;;:30;;;;:::i;18400:62::-;18381:81;18070:425;-1:-1:-1;;;;;;;18070:425:0:o;13914:59::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13914:59:0;;;;-1:-1:-1;13914:59:0;;-1:-1:-1;13914:59:0;;-1:-1:-1;13914:59:0;;;;;;;;;:::o;12146:201::-;11126:13;:11;:13::i;:::-;-1:-1:-1;;;;;12235:22:0;::::1;12227:73;;;::::0;-1:-1:-1;;;12227:73:0;;11021:2:1;12227:73:0::1;::::0;::::1;11003:21:1::0;11060:2;11040:18;;;11033:30;11099:34;11079:18;;;11072:62;-1:-1:-1;;;11150:18:1;;;11143:36;11196:19;;12227:73:0::1;10819:402:1::0;12227:73:0::1;12311:28;12330:8;12311:18;:28::i;:::-;12146:201:::0;:::o;11405:132::-;11286:7;11313:6;-1:-1:-1;;;;;11313:6:0;10029:10;11469:23;11461:68;;;;-1:-1:-1;;;11461:68:0;;14296:2:1;11461:68:0;;;14278:21:1;;;14315:18;;;14308:30;14374:34;14354:18;;;14347:62;14426:18;;11461:68:0;14094:356:1;15575:980:0;15644:17;15664:5;15670:6;15664:13;;;;;;;;:::i;:::-;;;;;;;;;15688:14;;;:6;:14;;;;;;15703:10;15688:26;;;;;;;:35;;15664:13;;;;;;;;-1:-1:-1;15736:4:0;;15688:26;15715:7;;15688:35;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:45;;:52;;-1:-1:-1;;15688:52:0;;;;;;;;;;;15770:14;;;:6;:14;;;;;;15785:10;15770:26;;;;;;;;:35;;15797:7;;15770:35;;;;;;:::i;:::-;;;;;;;;;:42;:35;;;;;:42;;;;;15888:14;;;:6;:14;;;;;;15903:10;15888:26;;;;;;;;:35;;15770:42;;-1:-1:-1;15888:26:0;15915:7;;15888:35;;;;;;:::i;:::-;;;;;;;;;;;:43;;;15842;15858:10;15870:7;15878:6;15842:15;:43::i;:::-;:89;:211;;16010:14;;;;:6;:14;;;;;;;;16025:10;16010:26;;;;;;;:35;;16037:7;;16010:35;;;;;;:::i;:::-;;;;;;;;;;;:43;;;15842:211;;;15964:43;15980:10;15992:7;16000:6;15964:15;:43::i;:::-;16064:15;16095:14;;;:6;:14;;;;;;;;16110:10;16095:26;;;;;;;:35;;15823:230;;-1:-1:-1;16064:15:0;;16082:57;;16095:26;16122:7;;16095:35;;;;;;:::i;16082:57::-;16150:14;;;;:6;:14;;;;;;;;16165:10;16150:26;;;;;;;:35;;16064:75;;-1:-1:-1;16064:75:0;;16177:7;;16150:35;;;;;;:::i;:::-;;;;;;;;;;;:43;;;:54;;;;;;;:::i;:::-;;;;;;;;16242:7;16215:4;:24;;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;;16260:7:0;;;:39;;-1:-1:-1;;;16260:39:0;;16277:10;16260:39;;;5669:51:1;;;;5736:18;;;5729:34;;;-1:-1:-1;;;;;16260:7:0;;:16;;5642:18:1;;16260:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;16310:5:0;;:36;;-1:-1:-1;;;16310:36:0;;16325:10;16310:36;;;5669:51:1;5736:18;;;5729:34;;;-1:-1:-1;;;;;16310:5:0;;;;:14;;5642:18:1;;16310:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;16398:14:0;;;;:6;:14;;;;;;;;16376:10;16398:26;;;;;;;;:35;;16362:185;;16376:10;16388:8;;16425:7;;16398:35;;;;;;:::i;:::-;;;;;;;;;:45;:35;;;;;:45;;;;;16445:14;;;:6;:14;;;;;;16460:10;16445:26;;;;;;;:35;;16472:7;;16445:35;;;;;;:::i;:::-;;;;;;;;;:43;:35;;;;;:43;;;;;16496:14;;;:6;:14;;;;;;16511:10;16496:26;;;;;;;:35;;16490:4;;16496:26;16523:7;;16496:35;;;;;;:::i;:::-;;;;;;;;;;;:43;;;16540:6;16362:185;;;;;;;;;;;;:::i;:::-;;;;;;;;15633:922;;;;15575:980;;:::o;2652:158::-;2710:7;2743:1;2738;:6;;2730:49;;;;-1:-1:-1;;;2730:49:0;;11784:2:1;2730:49:0;;;11766:21:1;11823:2;11803:18;;;11796:30;11862:32;11842:18;;;11835:60;11912:18;;2730:49:0;11582:354:1;2730:49:0;2797:5;2801:1;2797;:5;:::i;:::-;2790:12;2652:158;-1:-1:-1;;;2652:158:0:o;12507:191::-;12581:16;12600:6;;-1:-1:-1;;;;;12617:17:0;;;-1:-1:-1;;;;;;12617:17:0;;;;;;12650:40;;12600:6;;;;;;;12650:40;;12581:16;12650:40;12570:128;12507:191;:::o;3069:220::-;3127:7;3151:6;3147:20;;-1:-1:-1;3166:1:0;3159:8;;3147:20;3178:9;3190:5;3194:1;3190;:5;:::i;:::-;3178:17;-1:-1:-1;3223:1:0;3214:5;3218:1;3178:17;3214:5;:::i;:::-;:10;3206:56;;;;-1:-1:-1;;;3206:56:0;;13894:2:1;3206:56:0;;;13876:21:1;13933:2;13913:18;;;13906:30;13972:34;13952:18;;;13945:62;-1:-1:-1;;;14023:18:1;;;14016:31;14064:19;;3206:56:0;13692:397:1;3767:153:0;3825:7;3857:1;3853;:5;3845:44;;;;-1:-1:-1;;;3845:44:0;;12495:2:1;3845:44:0;;;12477:21:1;12534:2;12514:18;;;12507:30;12573:28;12553:18;;;12546:56;12619:18;;3845:44:0;12293:350:1;3845:44:0;3907:5;3911:1;3907;:5;:::i;14504:690::-;14587:7;;;:55;;-1:-1:-1;;;14587:55:0;;14608:10;14587:55;;;5355:34:1;;;;14628:4:0;5405:18:1;;;5398:43;5457:18;;;5450:34;;;-1:-1:-1;;;;;14587:7:0;;:20;;5290:18:1;;14587:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14654:17;14674:5;14680:6;14674:13;;;;;;;;:::i;:::-;;;;;;;;;;;;;;14707:17;;;;14674:13;;-1:-1:-1;14707:17:0;;:24;14699:49;;;;-1:-1:-1;;;14699:49:0;;10679:2:1;14699:49:0;;;10661:21:1;10718:2;10698:18;;;10691:30;-1:-1:-1;;;10737:18:1;;;10730:43;10790:18;;14699:49:0;10477:337:1;14699:49:0;14759:18;;;;:10;:18;;;;;;;;14778:10;14759:30;;;;;;;:32;;;;;;:::i;:::-;;;;;;14822:6;14802:4;:17;;;:26;;;;;;;:::i;:::-;;;;-1:-1:-1;14839:16:0;;-1:-1:-1;14858:47:0;14879:25;:6;13127:7;14879:10;:25::i;:::-;14858:15;;:19;:47::i;:::-;14839:66;;14919:18;14940:27;14960:6;14940:15;:13;:15::i;:27::-;14919:48;;14978:6;:14;14985:6;14978:14;;;;;;;;;;;:26;14993:10;-1:-1:-1;;;;;14978:26:0;-1:-1:-1;;;;;14978:26:0;;;;;;;;;;;;15010:82;;;;;;;;15017:10;-1:-1:-1;;;;;15010:82:0;;;;;15029:6;15010:82;;;;15037:15;15010:82;;;;15054:8;15010:82;;;;15064:6;15010:82;;;;15072:5;15010:82;;;;;;15078:10;15010:82;;;;15090:1;15010:82;;;14978:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14978:115:0;;;;;-1:-1:-1;;;;;14978:115:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15109:77;15123:10;15135:6;15143:15;15160:8;15170:5;15177:1;15179:6;15109:77;;;;;;;;;;;;:::i;2190:179::-;2248:7;;2280:5;2284:1;2280;:5;:::i;:::-;2268:17;;2309:1;2304;:6;;2296:46;;;;-1:-1:-1;;;2296:46:0;;11428:2:1;2296:46:0;;;11410:21:1;11467:2;11447:18;;;11440:30;11506:29;11486:18;;;11479:57;11553:18;;2296:46:0;11226:351:1;14:247;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;181:9;168:23;200:31;225:5;200:31;:::i;266:315::-;334:6;342;395:2;383:9;374:7;370:23;366:32;363:52;;;411:1;408;401:12;363:52;450:9;437:23;469:31;494:5;469:31;:::i;:::-;519:5;571:2;556:18;;;;543:32;;-1:-1:-1;;;266:315:1:o;586:383::-;663:6;671;679;732:2;720:9;711:7;707:23;703:32;700:52;;;748:1;745;738:12;700:52;787:9;774:23;806:31;831:5;806:31;:::i;:::-;856:5;908:2;893:18;;880:32;;-1:-1:-1;959:2:1;944:18;;;931:32;;586:383;-1:-1:-1;;;586:383:1:o;974:1196::-;1067:6;1075;1128:2;1116:9;1107:7;1103:23;1099:32;1096:52;;;1144:1;1141;1134:12;1096:52;1184:9;1171:23;1213:18;1254:2;1246:6;1243:14;1240:34;;;1270:1;1267;1260:12;1240:34;1308:6;1297:9;1293:22;1283:32;;1353:7;1346:4;1342:2;1338:13;1334:27;1324:55;;1375:1;1372;1365:12;1324:55;1411:2;1398:16;1433:4;1456:2;1452;1449:10;1446:36;;;1462:18;;:::i;:::-;1508:2;1505:1;1501:10;1540:2;1534:9;1603:2;1599:7;1594:2;1590;1586:11;1582:25;1574:6;1570:38;1658:6;1646:10;1643:22;1638:2;1626:10;1623:18;1620:46;1617:72;;;1669:18;;:::i;:::-;1705:2;1698:22;1755:18;;;1789:15;;;;-1:-1:-1;1824:11:1;;;1854;;;1850:20;;1847:33;-1:-1:-1;1844:53:1;;;1893:1;1890;1883:12;1844:53;1915:1;1906:10;;1925:163;1939:2;1936:1;1933:9;1925:163;;;1996:17;;1984:30;;1957:1;1950:9;;;;;2034:12;;;;2066;;1925:163;;;-1:-1:-1;2107:6:1;2145:18;;;;2132:32;;-1:-1:-1;;;;;;;974:1196:1:o;2175:241::-;2231:6;2284:2;2272:9;2263:7;2259:23;2255:32;2252:52;;;2300:1;2297;2290:12;2252:52;2339:9;2326:23;2358:28;2380:5;2358:28;:::i;2421:245::-;2488:6;2541:2;2529:9;2520:7;2516:23;2512:32;2509:52;;;2557:1;2554;2547:12;2509:52;2589:9;2583:16;2608:28;2630:5;2608:28;:::i;2671:309::-;2736:6;2744;2797:2;2785:9;2776:7;2772:23;2768:32;2765:52;;;2813:1;2810;2803:12;2765:52;2852:9;2839:23;2871:28;2893:5;2871:28;:::i;3251:180::-;3310:6;3363:2;3351:9;3342:7;3338:23;3334:32;3331:52;;;3379:1;3376;3369:12;3331:52;-1:-1:-1;3402:23:1;;3251:180;-1:-1:-1;3251:180:1:o;3436:184::-;3506:6;3559:2;3547:9;3538:7;3534:23;3530:32;3527:52;;;3575:1;3572;3565:12;3527:52;-1:-1:-1;3598:16:1;;3436:184;-1:-1:-1;3436:184:1:o;3625:315::-;3693:6;3701;3754:2;3742:9;3733:7;3729:23;3725:32;3722:52;;;3770:1;3767;3760:12;3722:52;3806:9;3793:23;3783:33;;3866:2;3855:9;3851:18;3838:32;3879:31;3904:5;3879:31;:::i;:::-;3929:5;3919:15;;;3625:315;;;;;:::o;3945:383::-;4022:6;4030;4038;4091:2;4079:9;4070:7;4066:23;4062:32;4059:52;;;4107:1;4104;4097:12;4059:52;4143:9;4130:23;4120:33;;4203:2;4192:9;4188:18;4175:32;4216:31;4241:5;4216:31;:::i;:::-;3945:383;;4266:5;;-1:-1:-1;;;4318:2:1;4303:18;;;;4290:32;;3945:383::o;4333:248::-;4401:6;4409;4462:2;4450:9;4441:7;4437:23;4433:32;4430:52;;;4478:1;4475;4468:12;4430:52;-1:-1:-1;;4501:23:1;;;4571:2;4556:18;;;4543:32;;-1:-1:-1;4333:248:1:o;4586:316::-;4663:6;4671;4679;4732:2;4720:9;4711:7;4707:23;4703:32;4700:52;;;4748:1;4745;4738:12;4700:52;-1:-1:-1;;4771:23:1;;;4841:2;4826:18;;4813:32;;-1:-1:-1;4892:2:1;4877:18;;;4864:32;;4586:316;-1:-1:-1;4586:316:1:o;5774:651::-;-1:-1:-1;;;;;6109:32:1;;;;6091:51;;6173:2;6158:18;;6151:34;;;;6216:2;6201:18;;6194:34;;;;6259:2;6244:18;;6237:34;;;;6315:14;6308:22;6302:3;6287:19;;6280:51;6129:3;6347:19;;6340:35;6406:3;6391:19;;6384:35;6078:3;6063:19;;5774:651::o;7798:1283::-;8015:2;8067:21;;;8137:13;;8040:18;;;8159:22;;;7986:4;;8015:2;8200;;8218:18;;;;8259:15;;;7986:4;8302:753;8316:6;8313:1;8310:13;8302:753;;;8375:13;;8417:9;;-1:-1:-1;;;;;8413:35:1;8401:48;;8489:11;;;8483:18;8469:12;;;8462:40;8542:11;;;8536:18;8522:12;;;8515:40;8578:4;8622:11;;;8616:18;8602:12;;;8595:40;8658:4;8702:11;;;8696:18;8682:12;;;8675:40;8436:3;8796:11;;;8790:18;8783:26;8776:34;8762:12;;;8755:56;8834:4;8878:11;;;8872:18;8858:12;;;8851:40;8914:4;8958:11;;;8952:18;8938:12;;;8931:40;9000:6;8991:16;;;;9030:15;;;;8445:1;8331:9;8302:753;;;-1:-1:-1;9072:3:1;;7798:1283;-1:-1:-1;;;;;;;7798:1283:1:o;9086:632::-;9257:2;9309:21;;;9379:13;;9282:18;;;9401:22;;;9228:4;;9257:2;9480:15;;;;9454:2;9439:18;;;9228:4;9523:169;9537:6;9534:1;9531:13;9523:169;;;9598:13;;9586:26;;9667:15;;;;9632:12;;;;9559:1;9552:9;9523:169;;;-1:-1:-1;9709:3:1;;9086:632;-1:-1:-1;;;;;;9086:632:1:o;15152:355::-;15354:2;15336:21;;;15393:2;15373:18;;;15366:30;15432:33;15427:2;15412:18;;15405:61;15498:2;15483:18;;15152:355::o;16368:128::-;16408:3;16439:1;16435:6;16432:1;16429:13;16426:39;;;16445:18;;:::i;:::-;-1:-1:-1;16481:9:1;;16368:128::o;16501:217::-;16541:1;16567;16557:132;;16611:10;16606:3;16602:20;16599:1;16592:31;16646:4;16643:1;16636:15;16674:4;16671:1;16664:15;16557:132;-1:-1:-1;16703:9:1;;16501:217::o;16723:168::-;16763:7;16829:1;16825;16821:6;16817:14;16814:1;16811:21;16806:1;16799:9;16792:17;16788:45;16785:71;;;16836:18;;:::i;:::-;-1:-1:-1;16876:9:1;;16723:168::o;16896:125::-;16936:4;16964:1;16961;16958:8;16955:34;;;16969:18;;:::i;:::-;-1:-1:-1;17006:9:1;;16896:125::o;17026:135::-;17065:3;-1:-1:-1;;17086:17:1;;17083:43;;;17106:18;;:::i;:::-;-1:-1:-1;17153:1:1;17142:13;;17026:135::o;17166:127::-;17227:10;17222:3;17218:20;17215:1;17208:31;17258:4;17255:1;17248:15;17282:4;17279:1;17272:15;17298:127;17359:10;17354:3;17350:20;17347:1;17340:31;17390:4;17387:1;17380:15;17414:4;17411:1;17404:15;17430:127;17491:10;17486:3;17482:20;17479:1;17472:31;17522:4;17519:1;17512:15;17546:4;17543:1;17536:15;17562:131;-1:-1:-1;;;;;17637:31:1;;17627:42;;17617:70;;17683:1;17680;17673:12;17698:118;17784:5;17777:13;17770:21;17763:5;17760:32;17750:60;;17806:1;17803;17796:12
Swarm Source
ipfs://445538c292eaa870d9da9fe58aeba27d7e8816fd1b319d45743a765cd27f5053
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 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.