More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 6,105 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Unstake | 12941969 | 1216 days ago | IN | 0 ETH | 0.00151795 | ||||
Incv Reward Clai... | 12941967 | 1216 days ago | IN | 0 ETH | 0.00423081 | ||||
Unstake | 12939502 | 1216 days ago | IN | 0 ETH | 0.00124795 | ||||
Unstake | 12938759 | 1216 days ago | IN | 0 ETH | 0.00090151 | ||||
Unstake | 12937331 | 1217 days ago | IN | 0 ETH | 0.00146403 | ||||
Unstake | 12934748 | 1217 days ago | IN | 0 ETH | 0.00315658 | ||||
Unstake | 12934222 | 1217 days ago | IN | 0 ETH | 0.0013282 | ||||
Incv Reward Clai... | 12934208 | 1217 days ago | IN | 0 ETH | 0.00358297 | ||||
Incv Reward Clai... | 12933868 | 1217 days ago | IN | 0 ETH | 0.00290868 | ||||
Unstake | 12928905 | 1218 days ago | IN | 0 ETH | 0.00168609 | ||||
Unstake | 12926583 | 1218 days ago | IN | 0 ETH | 0.00190863 | ||||
Unstake | 12925912 | 1218 days ago | IN | 0 ETH | 0.00198204 | ||||
Unstake | 12925328 | 1219 days ago | IN | 0 ETH | 0.00102662 | ||||
Incv Reward Clai... | 12925328 | 1219 days ago | IN | 0 ETH | 0.00264759 | ||||
Unstake | 12922940 | 1219 days ago | IN | 0 ETH | 0.00123333 | ||||
Unstake | 12921217 | 1219 days ago | IN | 0 ETH | 0.0023718 | ||||
Incv Reward Clai... | 12920489 | 1219 days ago | IN | 0 ETH | 0.00194508 | ||||
Unstake | 12920483 | 1219 days ago | IN | 0 ETH | 0.00198204 | ||||
Unstake | 12916380 | 1220 days ago | IN | 0 ETH | 0.0016884 | ||||
Unstake | 12914732 | 1220 days ago | IN | 0 ETH | 0.0012498 | ||||
Incv Reward Clai... | 12914732 | 1220 days ago | IN | 0 ETH | 0.00370196 | ||||
Unstake | 12914411 | 1220 days ago | IN | 0 ETH | 0.00104359 | ||||
Unstake | 12911923 | 1221 days ago | IN | 0 ETH | 0.0010115 | ||||
Unstake | 12911923 | 1221 days ago | IN | 0 ETH | 0.00155116 | ||||
Incv Reward Clai... | 12911923 | 1221 days ago | IN | 0 ETH | 0.00330532 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
CourtFarming_RoomStake
Compiler Version
v0.5.17+commit.d19bba13
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-03-13 */ pragma solidity ^0.5.0; interface ICourtStake{ function lockedStake(uint256 amount, address beneficiar, uint256 StartReleasingTime, uint256 batchCount, uint256 batchPeriod) external; } interface IMERC20 { function mint(address account, uint amount) external; } /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @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) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. * * _Available since v2.4.0._ */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @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) { // 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 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts 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) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message 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. * * _Available since v2.4.0._ */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts 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) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message 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. * * _Available since v2.4.0._ */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } /** * @dev Interface of the ERC20 standard as defined in the EIP. Does not include * the optional functions; to access them see {ERC20Detailed}. */ 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); } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * This test is non-exhaustive, and there may be false-negatives: during the * execution of a contract's constructor, its address will be reported as * not containing 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. */ function isContract(address account) internal view returns (bool) { // This method relies in extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != 0x0 && codehash != accountHash); } /** * @dev Converts an `address` into `address payable`. Note that this is * simply a type cast: the actual underlying value is not changed. * * _Available since v2.4.0._ */ function toPayable(address account) internal pure returns (address payable) { return address(uint160(account)); } /** * @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]. * * _Available since v2.4.0._ */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-call-value (bool success, ) = recipient.call.value(amount)(""); require(success, "Address: unable to send value, recipient may have reverted"); } } /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ 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 { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length 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)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. // A Solidity high level call has three parts: // 1. The target address is checked to verify it contains contract code // 2. The call itself is made, and success asserted // 3. The return value is decoded, which in turn checks the size of the returned data. // solhint-disable-next-line max-line-length require(address(token).isContract(), "SafeERC20: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = address(token).call(data); require(success, "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"); } } } contract CourtFarming_RoomStake { using SafeMath for uint256; using SafeERC20 for IERC20; IERC20 public constant stakedToken = IERC20(0xAd4f86a25bbc20FfB751f2FAC312A0B4d8F88c64); IMERC20 public constant courtToken = IMERC20(0x0538A9b4f4dcB0CB01A7fA34e17C0AC947c22553); uint256 private _totalStaked; mapping(address => uint256) private _balances; // last updated block number uint256 private _lastUpdateBlock; // incentive rewards uint256 public incvFinishBlock; // finish incentive rewarding block number uint256 private _incvRewardPerBlock; // incentive reward per block uint256 private _incvAccRewardPerToken; // accumulative reward per token mapping(address => uint256) private _incvRewards; // reward balances mapping(address => uint256) private _incvPrevAccRewardPerToken;// previous accumulative reward per token (for a user) uint256 public incvStartReleasingTime; // incentive releasing time uint256 public incvBatchPeriod; // incentive batch period uint256 public incvBatchCount; // incentive batch count mapping(address => uint256) public incvWithdrawn; address public owner; enum TransferRewardState { Succeeded, RewardsStillLocked } address public courtStakeAddress; event Staked(address indexed user, uint256 amount); event Unstaked(address indexed user, uint256 amount); event ClaimReward(address indexed user, uint256 reward); event ClaimIncentiveReward(address indexed user, uint256 reward); event StakeRewards(address indexed user, uint256 amount, uint256 lockTime); event CourtStakeChanged(address oldAddress, address newAddress); event StakeParametersChanged(uint256 incvRewardPerBlock, uint256 incvRewardFinsishBlock, uint256 incvLockTime); constructor () public { owner = msg.sender; uint256 incvRewardsPerBlock = 41335978835978835; uint256 incvRewardsPeriodInDays = 90; incvStartReleasingTime = 1620914400; // 13/05/2021 // check https://www.epochconverter.com/ for timestamp incvBatchPeriod = 1 days; incvBatchCount = 1; _stakeParametrsCalculation(incvRewardsPerBlock, incvRewardsPeriodInDays, incvStartReleasingTime); _lastUpdateBlock = blockNumber(); } function _stakeParametrsCalculation(uint256 incvRewardsPerBlock, uint256 incvRewardsPeriodInDays, uint256 iLockTime) internal{ uint256 incvRewardBlockCount = incvRewardsPeriodInDays * 5760; uint256 incvRewardPerBlock = incvRewardsPerBlock; _incvRewardPerBlock = incvRewardPerBlock * (1e18); incvFinishBlock = blockNumber().add(incvRewardBlockCount); incvStartReleasingTime = iLockTime; } function changeStakeParameters( uint256 incvRewardsPerBlock, uint256 incvRewardsPeriodInDays, uint256 iLockTime) public { require(msg.sender == owner, "can be called by owner only"); updateReward(address(0)); _stakeParametrsCalculation(incvRewardsPerBlock, incvRewardsPeriodInDays, iLockTime); emit StakeParametersChanged( _incvRewardPerBlock, incvFinishBlock, incvStartReleasingTime); } function updateReward(address account) public { // reward algorithm // in general: rewards = (reward per token ber block) user balances uint256 cnBlock = blockNumber(); // update accRewardPerToken, in case totalSupply is zero; do not increment accRewardPerToken if (_totalStaked > 0) { uint256 incvlastRewardBlock = cnBlock < incvFinishBlock ? cnBlock : incvFinishBlock; if (incvlastRewardBlock > _lastUpdateBlock) { _incvAccRewardPerToken = incvlastRewardBlock.sub(_lastUpdateBlock) .mul(_incvRewardPerBlock).div(_totalStaked) .add(_incvAccRewardPerToken); } } _lastUpdateBlock = cnBlock; if (account != address(0)) { uint256 incAccRewardPerTokenForUser = _incvAccRewardPerToken.sub(_incvPrevAccRewardPerToken[account]); if (incAccRewardPerTokenForUser > 0) { _incvRewards[account] = _balances[account] .mul(incAccRewardPerTokenForUser) .div(1e18) .add(_incvRewards[account]); _incvPrevAccRewardPerToken[account] = _incvAccRewardPerToken; } } } function stake(uint256 amount) public { updateReward(msg.sender); if (amount > 0) { _totalStaked = _totalStaked.add(amount); _balances[msg.sender] = _balances[msg.sender].add(amount); stakedToken.safeTransferFrom(msg.sender, address(this), amount); emit Staked(msg.sender, amount); } } function unstake(uint256 amount, bool claim) public { updateReward(msg.sender); if (amount > 0) { _totalStaked = _totalStaked.sub(amount); _balances[msg.sender] = _balances[msg.sender].sub(amount); stakedToken.safeTransfer(msg.sender, amount); emit Unstaked(msg.sender, amount); } claim = false; } function stakeIncvRewards(uint256 amount) public returns (bool) { updateReward(msg.sender); uint256 incvReward = _incvRewards[msg.sender]; if (amount > incvReward || courtStakeAddress == address(0)) { return false; } _incvRewards[msg.sender] -= amount; // no need to use safe math sub, since there is check for amount > reward courtToken.mint(address(this), amount); ICourtStake courtStake = ICourtStake(courtStakeAddress); courtStake.lockedStake(amount, msg.sender, incvStartReleasingTime, incvBatchCount, incvBatchPeriod); emit StakeRewards(msg.sender, amount, incvStartReleasingTime); } function setCourtStake(address courtStakeAdd) public { require(msg.sender == owner, "only contract owner can change"); address oldAddress = courtStakeAddress; courtStakeAddress = courtStakeAdd; IERC20 courtTokenERC20 = IERC20(address(courtToken)); courtTokenERC20.approve(courtStakeAdd, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff); emit CourtStakeChanged(oldAddress, courtStakeAdd); } function rewards(address account) public view returns (uint256 reward, uint256 incvReward) { // read version of update uint256 cnBlock = blockNumber(); uint256 incvAccRewardPerToken = _incvAccRewardPerToken; // update accRewardPerToken, in case totalSupply is zero; do not increment accRewardPerToken if (_totalStaked > 0) { uint256 incvLastRewardBlock = cnBlock < incvFinishBlock ? cnBlock : incvFinishBlock; if (incvLastRewardBlock > _lastUpdateBlock) { incvAccRewardPerToken = incvLastRewardBlock.sub(_lastUpdateBlock) .mul(_incvRewardPerBlock).div(_totalStaked) .add(incvAccRewardPerToken); } } incvReward = _balances[account] .mul(incvAccRewardPerToken.sub(_incvPrevAccRewardPerToken[account])) .div(1e18) .add(_incvRewards[account]) .sub(incvWithdrawn[account]); reward = 0; } function incvRewardInfo() external view returns (uint256 cBlockNumber, uint256 incvRewardPerBlock, uint256 incvRewardFinishBlock, uint256 incvRewardFinishTime, uint256 incvRewardLockTime) { cBlockNumber = blockNumber(); incvRewardFinishBlock = incvFinishBlock; incvRewardPerBlock = _incvRewardPerBlock.div(1e18); if( cBlockNumber < incvFinishBlock){ incvRewardFinishTime = block.timestamp.add(incvFinishBlock.sub(cBlockNumber).mul(15)); }else{ incvRewardFinishTime = block.timestamp.sub(cBlockNumber.sub(incvFinishBlock).mul(15)); } incvRewardLockTime=incvStartReleasingTime; } // expected reward, // please note this is only expectation, because total balance may changed during the day function expectedRewardsToday(uint256 amount) external view returns (uint256 reward, uint256 incvReward) { reward = 0; uint256 totalIncvRewardPerDay = _incvRewardPerBlock * 5760; incvReward = totalIncvRewardPerDay.div(_totalStaked.add(amount)).mul(amount).div(1e18); } function lastUpdateBlock() external view returns(uint256) { return _lastUpdateBlock; } function balanceOf(address account) external view returns (uint256) { return _balances[account]; } function totalStaked() external view returns (uint256) { return _totalStaked; } function blockNumber() public view returns (uint256) { return block.number; } function getCurrentTime() public view returns(uint256){ return block.timestamp; } function getVestedAmount(uint256 lockedAmount, uint256 time) internal view returns(uint256){ // if time < StartReleasingTime: then return 0 if(time < incvStartReleasingTime){ return 0; } // if locked amount 0 return 0 if (lockedAmount == 0){ return 0; } // elapsedBatchCount = ((time - startReleasingTime) / batchPeriod) + 1 uint256 elapsedBatchCount = time.sub(incvStartReleasingTime) .div(incvBatchPeriod) .add(1); // vestedAmount = lockedAmount * elapsedBatchCount / batchCount uint256 vestedAmount = lockedAmount .mul(elapsedBatchCount) .div(incvBatchCount); if(vestedAmount > lockedAmount){ vestedAmount = lockedAmount; } return vestedAmount; } function incvRewardClaim() public returns(uint256 amount){ updateReward(msg.sender); amount = getVestedAmount(_incvRewards[msg.sender], getCurrentTime()).sub(incvWithdrawn[msg.sender]); if(amount > 0){ incvWithdrawn[msg.sender] = incvWithdrawn[msg.sender].add(amount); courtToken.mint(msg.sender, amount); emit ClaimIncentiveReward(msg.sender, amount); } } function getBeneficiaryInfo(address ibeneficiary) external view returns(address beneficiary, uint256 totalLocked, uint256 withdrawn, uint256 releasableAmount, uint256 nextBatchTime, uint256 currentTime){ beneficiary = ibeneficiary; currentTime = getCurrentTime(); totalLocked = _incvRewards[ibeneficiary]; withdrawn = incvWithdrawn[ibeneficiary]; ( , uint256 incvReward) = rewards(ibeneficiary); releasableAmount = getVestedAmount(incvReward, getCurrentTime()).sub(incvWithdrawn[beneficiary]); nextBatchTime = getIncNextBatchTime(incvReward, ibeneficiary, currentTime); } function getIncNextBatchTime(uint256 lockedAmount, address beneficiary, uint256 time) internal view returns(uint256){ // if total vested equal to total locked then return 0 if(getVestedAmount(lockedAmount, time) == _incvRewards[beneficiary]){ return 0; } // if time less than startReleasingTime: then return sartReleasingTime if(time <= incvStartReleasingTime){ return incvStartReleasingTime; } // find the next batch time uint256 elapsedBatchCount = time.sub(incvStartReleasingTime) .div(incvBatchPeriod) .add(1); uint256 nextBatchTime = elapsedBatchCount .mul(incvBatchPeriod) .add(incvStartReleasingTime); return nextBatchTime; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"ClaimIncentiveReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"ClaimReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":false,"internalType":"address","name":"newAddress","type":"address"}],"name":"CourtStakeChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"incvRewardPerBlock","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"incvRewardFinsishBlock","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"incvLockTime","type":"uint256"}],"name":"StakeParametersChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lockTime","type":"uint256"}],"name":"StakeRewards","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":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Unstaked","type":"event"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"blockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"incvRewardsPerBlock","type":"uint256"},{"internalType":"uint256","name":"incvRewardsPeriodInDays","type":"uint256"},{"internalType":"uint256","name":"iLockTime","type":"uint256"}],"name":"changeStakeParameters","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"courtStakeAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"courtToken","outputs":[{"internalType":"contract IMERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"expectedRewardsToday","outputs":[{"internalType":"uint256","name":"reward","type":"uint256"},{"internalType":"uint256","name":"incvReward","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"ibeneficiary","type":"address"}],"name":"getBeneficiaryInfo","outputs":[{"internalType":"address","name":"beneficiary","type":"address"},{"internalType":"uint256","name":"totalLocked","type":"uint256"},{"internalType":"uint256","name":"withdrawn","type":"uint256"},{"internalType":"uint256","name":"releasableAmount","type":"uint256"},{"internalType":"uint256","name":"nextBatchTime","type":"uint256"},{"internalType":"uint256","name":"currentTime","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getCurrentTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"incvBatchCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"incvBatchPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"incvFinishBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"incvRewardClaim","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"incvRewardInfo","outputs":[{"internalType":"uint256","name":"cBlockNumber","type":"uint256"},{"internalType":"uint256","name":"incvRewardPerBlock","type":"uint256"},{"internalType":"uint256","name":"incvRewardFinishBlock","type":"uint256"},{"internalType":"uint256","name":"incvRewardFinishTime","type":"uint256"},{"internalType":"uint256","name":"incvRewardLockTime","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"incvStartReleasingTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"incvWithdrawn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lastUpdateBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"rewards","outputs":[{"internalType":"uint256","name":"reward","type":"uint256"},{"internalType":"uint256","name":"incvReward","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"courtStakeAdd","type":"address"}],"name":"setCourtStake","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stakeIncvRewards","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"stakedToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"claim","type":"bool"}],"name":"unstake","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"updateReward","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b50600c80546001600160a01b0319163317905563609d30e06008819055620151806009556001600a556692dada8ef62a5390605a906200005e90839083906001600160e01b036200007d16565b620000716001600160e01b03620000c916565b600255506200012f9050565b670de0b6b3a76400008302600455611680820283620000bd82620000a96001600160e01b03620000c916565b620000cd60201b62000fc41790919060201c565b60035550506008555050565b4390565b60008282018381101562000128576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b61156c806200013f6000396000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c806372dacd79116100de578063a694fc3a11610097578063cc7a262e11610071578063cc7a262e14610401578063d6db152d14610409578063eb09b6cb14610411578063ef0b75691461041957610173565b8063a694fc3a146103b3578063aed5900f146103d0578063c3443b69146103f957610173565b806372dacd791461033d578063817b1cd2146103455780638da5cb5b1461034d57806399b015f0146103555780639ebea88c14610386578063a218141b146103ab57610173565b8063568c9a7011610130578063568c9a701461029357806357371ade1461029b57806357e871e7146102c3578063632447c9146102cb57806370a08231146102f157806371f61cae1461031757610173565b80630700037d1461017857806329cb924d146101b7578063366dc083146101d1578063374d496a146102345780633d99af2e14610267578063528ebbda1461026f575b600080fd5b61019e6004803603602081101561018e57600080fd5b50356001600160a01b0316610436565b6040805192835260208301919091528051918290030190f35b6101bf610557565b60408051918252519081900360200190f35b6101f7600480360360208110156101e757600080fd5b50356001600160a01b031661055c565b604080516001600160a01b0390971687526020870195909552858501939093526060850191909152608084015260a0830152519081900360c00190f35b61023c6105eb565b6040805195865260208601949094528484019290925260608401526080830152519081900360a00190f35b6101bf610694565b61027761069a565b604080516001600160a01b039092168252519081900360200190f35b6101bf6106a9565b6102c1600480360360208110156102b157600080fd5b50356001600160a01b03166106af565b005b6101bf610804565b6102c1600480360360208110156102e157600080fd5b50356001600160a01b0316610808565b6101bf6004803603602081101561030757600080fd5b50356001600160a01b031661092c565b6101bf6004803603602081101561032d57600080fd5b50356001600160a01b031661094b565b6101bf61095d565b6101bf610a77565b610277610a7d565b6103726004803603602081101561036b57600080fd5b5035610a8c565b604080519115158252519081900360200190f35b6102c16004803603604081101561039c57600080fd5b50803590602001351515610c1e565b6101bf610cd5565b6102c1600480360360208110156103c957600080fd5b5035610cdb565b6102c1600480360360608110156103e657600080fd5b5080359060208101359060400135610d93565b610277610e53565b610277610e6b565b6101bf610e83565b6101bf610e89565b61019e6004803603602081101561042f57600080fd5b5035610e8f565b6000806000610443610804565b60055460005491925090156104c1576000600354831061046557600354610467565b825b90506002548111156104bf576104bc826104b06000546104a460045461049860025488610ede90919063ffffffff16565b9063ffffffff610f2916565b9063ffffffff610f8216565b9063ffffffff610fc416565b91505b505b6001600160a01b0385166000908152600b60209081526040808320546006835281842054600790935292205461054a929161053e916104b090670de0b6b3a7640000906104a49061051990899063ffffffff610ede16565b6001600160a01b038d166000908152600160205260409020549063ffffffff610f2916565b9063ffffffff610ede16565b9250600093505050915091565b425b90565b8060008080808061056b610557565b6001600160a01b038816600090815260066020908152604080832054600b90925282205490975095509091506105a088610436565b6001600160a01b0389166000908152600b60205260409020549092506105d2915061053e836105cd610557565b61101e565b93506105df818984611093565b92505091939550919395565b60008060008060006105fb610804565b600354600454919650935061061e90670de0b6b3a764000063ffffffff610f8216565b935060035485101561065b57610654610647600f61049888600354610ede90919063ffffffff16565b429063ffffffff610fc416565b9150610688565b610685610678600f61049860035489610ede90919063ffffffff16565b429063ffffffff610ede16565b91505b60085490509091929394565b600a5481565b600d546001600160a01b031681565b60035481565b600c546001600160a01b0316331461070e576040805162461bcd60e51b815260206004820152601e60248201527f6f6e6c7920636f6e7472616374206f776e65722063616e206368616e67650000604482015290519081900360640190fd5b600d80546001600160a01b038381166001600160a01b0319831681179093556040805163095ea7b360e01b81526004810194909452600019602485015251911691730538a9b4f4dcb0cb01a7fa34e17c0ac947c2255391829163095ea7b39160448083019260209291908290030181600087803b15801561078e57600080fd5b505af11580156107a2573d6000803e3d6000fd5b505050506040513d60208110156107b857600080fd5b5050604080516001600160a01b0380851682528516602082015281517f792c21b3a699347e8ba7f050a0a835bed14336a5284e2476670fae2e20a269f1929181900390910190a1505050565b4390565b6000610812610804565b6000549091501561086b576000600354821061083057600354610832565b815b9050600254811115610869576108656005546104b06000546104a460045461049860025488610ede90919063ffffffff16565b6005555b505b60028190556001600160a01b03821615610928576001600160a01b0382166000908152600760205260408120546005546108aa9163ffffffff610ede16565b90508015610926576001600160a01b0383166000908152600660209081526040808320546001909252909120546108fa91906104b090670de0b6b3a7640000906104a4908663ffffffff610f2916565b6001600160a01b0384166000908152600660209081526040808320939093556005546007909152919020555b505b5050565b6001600160a01b0381166000908152600160205260409020545b919050565b600b6020526000908152604090205481565b600061096833610808565b336000908152600b6020908152604080832054600690925290912054610995919061053e906105cd610557565b9050801561055957336000908152600b60205260409020546109bd908263ffffffff610fc416565b336000818152600b60205260408082209390935582516340c10f1960e01b81526004810192909252602482018490529151730538a9b4f4dcb0cb01a7fa34e17c0ac947c22553926340c10f19926044808201939182900301818387803b158015610a2657600080fd5b505af1158015610a3a573d6000803e3d6000fd5b50506040805184815290513393507f6fe937bf2c13cbdc6c3e1644deef42cd89a7694c31f592ce251e90727af12e2792509081900360200190a290565b60005490565b600c546001600160a01b031681565b6000610a9733610808565b3360009081526006602052604090205480831180610abe5750600d546001600160a01b0316155b15610acd576000915050610946565b336000908152600660205260408082208054869003905580516340c10f1960e01b8152306004820152602481018690529051730538a9b4f4dcb0cb01a7fa34e17c0ac947c22553926340c10f19926044808201939182900301818387803b158015610b3757600080fd5b505af1158015610b4b573d6000803e3d6000fd5b5050600d54600854600a546009546040805163caa32b9160e01b8152600481018b9052336024820152604481019490945260648401929092526084830152516001600160a01b03909216935083925063caa32b919160a480830192600092919082900301818387803b158015610bc057600080fd5b505af1158015610bd4573d6000803e3d6000fd5b505060085460408051888152602081019290925280513394507f8b8ede3b1a5bbf7eb12af900b210a8f77a6251f55ef3a3caab5250dcf1589c4b9350918290030190a25050919050565b610c2733610808565b811561092857600054610c40908363ffffffff610ede16565b600090815533815260016020526040902054610c62908363ffffffff610ede16565b33600081815260016020526040902091909155610c9b9073ad4f86a25bbc20ffb751f2fac312a0b4d8f88c64908463ffffffff61112316565b60408051838152905133917f0f5bb82176feb1b5e747e28471aa92156a04d9f3ab9f45f28e2d704232b93f75919081900360200190a25050565b60025490565b610ce433610808565b8015610d9057600054610cfd908263ffffffff610fc416565b600090815533815260016020526040902054610d1f908263ffffffff610fc416565b33600081815260016020526040902091909155610d599073ad4f86a25bbc20ffb751f2fac312a0b4d8f88c6490308463ffffffff61117516565b60408051828152905133917f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d919081900360200190a25b50565b600c546001600160a01b03163314610df2576040805162461bcd60e51b815260206004820152601b60248201527f63616e2062652063616c6c6564206279206f776e6572206f6e6c790000000000604482015290519081900360640190fd5b610dfc6000610808565b610e078383836111d5565b60045460035460085460408051938452602084019290925282820152517f42bc0b5308138fcf9b84f2d9cabfe315aa695643792e122d567b1bf0f3af3ac59181900360600190a1505050565b730538a9b4f4dcb0cb01a7fa34e17c0ac947c2255381565b73ad4f86a25bbc20ffb751f2fac312a0b4d8f88c6481565b60085481565b60095481565b600080600091506000600454611680029050610ed6670de0b6b3a76400006104a486610498610ec989600054610fc490919063ffffffff16565b869063ffffffff610f8216565b915050915091565b6000610f2083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611201565b90505b92915050565b600082610f3857506000610f23565b82820282848281610f4557fe5b0414610f205760405162461bcd60e51b81526004018080602001828103825260218152602001806114ed6021913960400191505060405180910390fd5b6000610f2083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611298565b600082820183811015610f20576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600060085482101561103257506000610f23565b8261103f57506000610f23565b600061106160016104b06009546104a460085488610ede90919063ffffffff16565b9050600061107e600a546104a48488610f2990919063ffffffff16565b90508481111561108b5750835b949350505050565b6001600160a01b0382166000908152600660205260408120546110b6858461101e565b14156110c45750600061111c565b60085482116110d6575060085461111c565b60006110f860016104b06009546104a460085488610ede90919063ffffffff16565b905060006111176008546104b060095485610f2990919063ffffffff16565b925050505b9392505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526109269084906112fd565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526111cf9085906112fd565b50505050565b670de0b6b3a764000083026004556116808202836111f5826104b0610804565b60035550506008555050565b600081848411156112905760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561125557818101518382015260200161123d565b50505050905090810190601f1680156112825780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836112e75760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561125557818101518382015260200161123d565b5060008385816112f357fe5b0495945050505050565b61130f826001600160a01b03166114b5565b611360576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b6020831061139e5780518252601f19909201916020918201910161137f565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611400576040519150601f19603f3d011682016040523d82523d6000602084013e611405565b606091505b50915091508161145c576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b8051156111cf5780806020019051602081101561147857600080fd5b50516111cf5760405162461bcd60e51b815260040180806020018281038252602a81526020018061150e602a913960400191505060405180910390fd5b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470811580159061108b575014159291505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a265627a7a7231582054f36945a0cce5ed5d391e87ffed604f3c92ad4ab6b3c77fed4f83f75b02e0af64736f6c63430005110032
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101735760003560e01c806372dacd79116100de578063a694fc3a11610097578063cc7a262e11610071578063cc7a262e14610401578063d6db152d14610409578063eb09b6cb14610411578063ef0b75691461041957610173565b8063a694fc3a146103b3578063aed5900f146103d0578063c3443b69146103f957610173565b806372dacd791461033d578063817b1cd2146103455780638da5cb5b1461034d57806399b015f0146103555780639ebea88c14610386578063a218141b146103ab57610173565b8063568c9a7011610130578063568c9a701461029357806357371ade1461029b57806357e871e7146102c3578063632447c9146102cb57806370a08231146102f157806371f61cae1461031757610173565b80630700037d1461017857806329cb924d146101b7578063366dc083146101d1578063374d496a146102345780633d99af2e14610267578063528ebbda1461026f575b600080fd5b61019e6004803603602081101561018e57600080fd5b50356001600160a01b0316610436565b6040805192835260208301919091528051918290030190f35b6101bf610557565b60408051918252519081900360200190f35b6101f7600480360360208110156101e757600080fd5b50356001600160a01b031661055c565b604080516001600160a01b0390971687526020870195909552858501939093526060850191909152608084015260a0830152519081900360c00190f35b61023c6105eb565b6040805195865260208601949094528484019290925260608401526080830152519081900360a00190f35b6101bf610694565b61027761069a565b604080516001600160a01b039092168252519081900360200190f35b6101bf6106a9565b6102c1600480360360208110156102b157600080fd5b50356001600160a01b03166106af565b005b6101bf610804565b6102c1600480360360208110156102e157600080fd5b50356001600160a01b0316610808565b6101bf6004803603602081101561030757600080fd5b50356001600160a01b031661092c565b6101bf6004803603602081101561032d57600080fd5b50356001600160a01b031661094b565b6101bf61095d565b6101bf610a77565b610277610a7d565b6103726004803603602081101561036b57600080fd5b5035610a8c565b604080519115158252519081900360200190f35b6102c16004803603604081101561039c57600080fd5b50803590602001351515610c1e565b6101bf610cd5565b6102c1600480360360208110156103c957600080fd5b5035610cdb565b6102c1600480360360608110156103e657600080fd5b5080359060208101359060400135610d93565b610277610e53565b610277610e6b565b6101bf610e83565b6101bf610e89565b61019e6004803603602081101561042f57600080fd5b5035610e8f565b6000806000610443610804565b60055460005491925090156104c1576000600354831061046557600354610467565b825b90506002548111156104bf576104bc826104b06000546104a460045461049860025488610ede90919063ffffffff16565b9063ffffffff610f2916565b9063ffffffff610f8216565b9063ffffffff610fc416565b91505b505b6001600160a01b0385166000908152600b60209081526040808320546006835281842054600790935292205461054a929161053e916104b090670de0b6b3a7640000906104a49061051990899063ffffffff610ede16565b6001600160a01b038d166000908152600160205260409020549063ffffffff610f2916565b9063ffffffff610ede16565b9250600093505050915091565b425b90565b8060008080808061056b610557565b6001600160a01b038816600090815260066020908152604080832054600b90925282205490975095509091506105a088610436565b6001600160a01b0389166000908152600b60205260409020549092506105d2915061053e836105cd610557565b61101e565b93506105df818984611093565b92505091939550919395565b60008060008060006105fb610804565b600354600454919650935061061e90670de0b6b3a764000063ffffffff610f8216565b935060035485101561065b57610654610647600f61049888600354610ede90919063ffffffff16565b429063ffffffff610fc416565b9150610688565b610685610678600f61049860035489610ede90919063ffffffff16565b429063ffffffff610ede16565b91505b60085490509091929394565b600a5481565b600d546001600160a01b031681565b60035481565b600c546001600160a01b0316331461070e576040805162461bcd60e51b815260206004820152601e60248201527f6f6e6c7920636f6e7472616374206f776e65722063616e206368616e67650000604482015290519081900360640190fd5b600d80546001600160a01b038381166001600160a01b0319831681179093556040805163095ea7b360e01b81526004810194909452600019602485015251911691730538a9b4f4dcb0cb01a7fa34e17c0ac947c2255391829163095ea7b39160448083019260209291908290030181600087803b15801561078e57600080fd5b505af11580156107a2573d6000803e3d6000fd5b505050506040513d60208110156107b857600080fd5b5050604080516001600160a01b0380851682528516602082015281517f792c21b3a699347e8ba7f050a0a835bed14336a5284e2476670fae2e20a269f1929181900390910190a1505050565b4390565b6000610812610804565b6000549091501561086b576000600354821061083057600354610832565b815b9050600254811115610869576108656005546104b06000546104a460045461049860025488610ede90919063ffffffff16565b6005555b505b60028190556001600160a01b03821615610928576001600160a01b0382166000908152600760205260408120546005546108aa9163ffffffff610ede16565b90508015610926576001600160a01b0383166000908152600660209081526040808320546001909252909120546108fa91906104b090670de0b6b3a7640000906104a4908663ffffffff610f2916565b6001600160a01b0384166000908152600660209081526040808320939093556005546007909152919020555b505b5050565b6001600160a01b0381166000908152600160205260409020545b919050565b600b6020526000908152604090205481565b600061096833610808565b336000908152600b6020908152604080832054600690925290912054610995919061053e906105cd610557565b9050801561055957336000908152600b60205260409020546109bd908263ffffffff610fc416565b336000818152600b60205260408082209390935582516340c10f1960e01b81526004810192909252602482018490529151730538a9b4f4dcb0cb01a7fa34e17c0ac947c22553926340c10f19926044808201939182900301818387803b158015610a2657600080fd5b505af1158015610a3a573d6000803e3d6000fd5b50506040805184815290513393507f6fe937bf2c13cbdc6c3e1644deef42cd89a7694c31f592ce251e90727af12e2792509081900360200190a290565b60005490565b600c546001600160a01b031681565b6000610a9733610808565b3360009081526006602052604090205480831180610abe5750600d546001600160a01b0316155b15610acd576000915050610946565b336000908152600660205260408082208054869003905580516340c10f1960e01b8152306004820152602481018690529051730538a9b4f4dcb0cb01a7fa34e17c0ac947c22553926340c10f19926044808201939182900301818387803b158015610b3757600080fd5b505af1158015610b4b573d6000803e3d6000fd5b5050600d54600854600a546009546040805163caa32b9160e01b8152600481018b9052336024820152604481019490945260648401929092526084830152516001600160a01b03909216935083925063caa32b919160a480830192600092919082900301818387803b158015610bc057600080fd5b505af1158015610bd4573d6000803e3d6000fd5b505060085460408051888152602081019290925280513394507f8b8ede3b1a5bbf7eb12af900b210a8f77a6251f55ef3a3caab5250dcf1589c4b9350918290030190a25050919050565b610c2733610808565b811561092857600054610c40908363ffffffff610ede16565b600090815533815260016020526040902054610c62908363ffffffff610ede16565b33600081815260016020526040902091909155610c9b9073ad4f86a25bbc20ffb751f2fac312a0b4d8f88c64908463ffffffff61112316565b60408051838152905133917f0f5bb82176feb1b5e747e28471aa92156a04d9f3ab9f45f28e2d704232b93f75919081900360200190a25050565b60025490565b610ce433610808565b8015610d9057600054610cfd908263ffffffff610fc416565b600090815533815260016020526040902054610d1f908263ffffffff610fc416565b33600081815260016020526040902091909155610d599073ad4f86a25bbc20ffb751f2fac312a0b4d8f88c6490308463ffffffff61117516565b60408051828152905133917f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d919081900360200190a25b50565b600c546001600160a01b03163314610df2576040805162461bcd60e51b815260206004820152601b60248201527f63616e2062652063616c6c6564206279206f776e6572206f6e6c790000000000604482015290519081900360640190fd5b610dfc6000610808565b610e078383836111d5565b60045460035460085460408051938452602084019290925282820152517f42bc0b5308138fcf9b84f2d9cabfe315aa695643792e122d567b1bf0f3af3ac59181900360600190a1505050565b730538a9b4f4dcb0cb01a7fa34e17c0ac947c2255381565b73ad4f86a25bbc20ffb751f2fac312a0b4d8f88c6481565b60085481565b60095481565b600080600091506000600454611680029050610ed6670de0b6b3a76400006104a486610498610ec989600054610fc490919063ffffffff16565b869063ffffffff610f8216565b915050915091565b6000610f2083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611201565b90505b92915050565b600082610f3857506000610f23565b82820282848281610f4557fe5b0414610f205760405162461bcd60e51b81526004018080602001828103825260218152602001806114ed6021913960400191505060405180910390fd5b6000610f2083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611298565b600082820183811015610f20576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600060085482101561103257506000610f23565b8261103f57506000610f23565b600061106160016104b06009546104a460085488610ede90919063ffffffff16565b9050600061107e600a546104a48488610f2990919063ffffffff16565b90508481111561108b5750835b949350505050565b6001600160a01b0382166000908152600660205260408120546110b6858461101e565b14156110c45750600061111c565b60085482116110d6575060085461111c565b60006110f860016104b06009546104a460085488610ede90919063ffffffff16565b905060006111176008546104b060095485610f2990919063ffffffff16565b925050505b9392505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526109269084906112fd565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526111cf9085906112fd565b50505050565b670de0b6b3a764000083026004556116808202836111f5826104b0610804565b60035550506008555050565b600081848411156112905760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561125557818101518382015260200161123d565b50505050905090810190601f1680156112825780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836112e75760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561125557818101518382015260200161123d565b5060008385816112f357fe5b0495945050505050565b61130f826001600160a01b03166114b5565b611360576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b6020831061139e5780518252601f19909201916020918201910161137f565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611400576040519150601f19603f3d011682016040523d82523d6000602084013e611405565b606091505b50915091508161145c576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b8051156111cf5780806020019051602081101561147857600080fd5b50516111cf5760405162461bcd60e51b815260040180806020018281038252602a81526020018061150e602a913960400191505060405180910390fd5b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470811580159061108b575014159291505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a265627a7a7231582054f36945a0cce5ed5d391e87ffed604f3c92ad4ab6b3c77fed4f83f75b02e0af64736f6c63430005110032
Deployed Bytecode Sourcemap
15290:12115:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15290:12115:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21812:1023;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21812:1023:0;-1:-1:-1;;;;;21812:1023:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;24384:95;;;:::i;:::-;;;;;;;;;;;;;;;;25858:711;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25858:711:0;-1:-1:-1;;;;;25858:711:0;;:::i;:::-;;;;-1:-1:-1;;;;;25858:711:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22843:671;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16350:29;;;:::i;16589:32::-;;;:::i;:::-;;;;-1:-1:-1;;;;;16589:32:0;;;;;;;;;;;;;;15784:30;;;:::i;21329:475::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21329:475:0;-1:-1:-1;;;;;21329:475:0;;:::i;:::-;;24282:90;;;:::i;18558:1274::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18558:1274:0;-1:-1:-1;;;;;18558:1274:0;;:::i;24061:112::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24061:112:0;-1:-1:-1;;;;;24061:112:0;;:::i;16411:49::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16411:49:0;-1:-1:-1;;;;;16411:49:0;;:::i;25396:450::-;;;:::i;24181:93::-;;;:::i;16469:20::-;;;:::i;20621:700::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20621:700:0;;:::i;:::-;;;;;;;;;;;;;;;;;;20219:392;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20219:392:0;;;;;;;;;:::i;23953:100::-;;;:::i;19840:371::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19840:371:0;;:::i;18116:434::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18116:434:0;;;;;;;;;;;;:::i;15497:88::-;;;:::i;15399:87::-;;;:::i;16214:37::-;;;:::i;16287:30::-;;;:::i;23644:301::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23644:301:0;;:::i;21812:1023::-;21867:14;21883:18;21949:15;21967:13;:11;:13::i;:::-;22033:22;;22001:29;22174:12;21949:31;;-1:-1:-1;22033:22:0;22174:16;22170:410;;22221:27;22261:15;;22251:7;:25;:53;;22289:15;;22251:53;;;22279:7;22251:53;22221:83;;22345:16;;22323:19;:38;22319:250;;;22406:147;22531:21;22406:102;22495:12;;22406:84;22470:19;;22406:41;22430:16;;22406:19;:23;;:41;;;;:::i;:::-;:63;:84;:63;:84;:::i;:::-;:88;:102;:88;:102;:::i;:::-;:124;:147;:124;:147;:::i;:::-;22382:171;;22319:250;22170:410;;-1:-1:-1;;;;;22773:22:0;;;;;;:13;:22;;;;;;;;;22736:12;:21;;;;;;22664:26;:35;;;;;;22605:191;;22773:22;22605:153;;:116;;22716:4;;22605:96;;22638:62;;:21;;:62;:25;:62;:::i;:::-;-1:-1:-1;;;;;22605:18:0;;;;;;:9;:18;;;;;;;:96;:32;:96;:::i;:153::-;:167;:191;:167;:191;:::i;:::-;22592:204;;22826:1;22817:10;;21812:1023;;;;;:::o;24384:95::-;24456:15;24384:95;;:::o;25858:711::-;26137:12;25935:19;;;;;26174:16;:14;:16::i;:::-;-1:-1:-1;;;;;26225:26:0;;;;;;:12;:26;;;;;;;;;26274:13;:27;;;;;;26225:26;;-1:-1:-1;26274:27:0;-1:-1:-1;26160:30:0;;-1:-1:-1;26338:21:0;26238:12;26338:7;:21::i;:::-;-1:-1:-1;;;;;26439:26:0;;;;;;:13;:26;;;;;;26312:47;;-1:-1:-1;26389:77:0;;-1:-1:-1;26389:45:0;26312:47;26417:16;:14;:16::i;:::-;26389:15;:45::i;:77::-;26370:96;;26493:58;26513:10;26525:12;26539:11;26493:19;:58::i;:::-;26477:74;;25858:711;;;;;;;;:::o;22843:671::-;22892:20;22914:26;22942:29;22973:28;23003:26;23057:13;:11;:13::i;:::-;23105:15;;23152:19;;23042:28;;-1:-1:-1;23105:15:0;-1:-1:-1;23152:29:0;;23176:4;23152:29;:23;:29;:::i;:::-;23131:50;;23211:15;;23196:12;:30;23192:263;;;23265:62;23285:41;23323:2;23285:33;23305:12;23285:15;;:19;;:33;;;;:::i;:41::-;23265:15;;:62;:19;:62;:::i;:::-;23242:85;;23192:263;;;23381:62;23401:41;23439:2;23401:33;23418:15;;23401:12;:16;;:33;;;;:::i;:41::-;23381:15;;:62;:19;:62;:::i;:::-;23358:85;;23192:263;23484:22;;23465:41;;22843:671;;;;;:::o;16350:29::-;;;;:::o;16589:32::-;;;-1:-1:-1;;;;;16589:32:0;;:::o;15784:30::-;;;;:::o;21329:475::-;21415:5;;-1:-1:-1;;;;;21415:5:0;21401:10;:19;21393:62;;;;;-1:-1:-1;;;21393:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;21489:17;;;-1:-1:-1;;;;;21517:33:0;;;-1:-1:-1;;;;;;21517:33:0;;;;;;;21628:106;;;-1:-1:-1;;;21628:106:0;;;;;;;;;-1:-1:-1;;21628:106:0;;;;;21489:17;;;15542:42;;;;21628:23;;:106;;;;;;;;;;;;;;21468:18;15542:42;21628:106;;;5:2:-1;;;;30:1;27;20:12;5:2;21628:106:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21628:106:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;21752:44:0;;;-1:-1:-1;;;;;21752:44:0;;;;;;;21628:106;21752:44;;;;;;;;;;;;;;;;21329:475;;;:::o;24282:90::-;24352:12;24282:90;:::o;18558:1274::-;18721:15;18739:13;:11;:13::i;:::-;18886:1;18871:12;18721:31;;-1:-1:-1;18871:16:0;18867:398;;18904:27;18944:15;;18934:7;:25;:53;;18972:15;;18934:53;;;18962:7;18934:53;18904:83;;19028:16;;19006:19;:38;19002:252;;;19090:148;19215:22;;19090:102;19179:12;;19090:84;19154:19;;19090:41;19114:16;;19090:19;:23;;:41;;;;:::i;:148::-;19065:22;:173;19002:252;18867:398;;19277:16;:26;;;-1:-1:-1;;;;;19320:21:0;;;19316:509;;-1:-1:-1;;;;;19425:35:0;;19360;19425;;;:26;:35;;;;;;19398:22;;:63;;;:26;:63;:::i;:::-;19360:101;-1:-1:-1;19482:31:0;;19478:336;;-1:-1:-1;;;;;19695:21:0;;;;;;:12;:21;;;;;;;;;19575:9;:18;;;;;;;:142;;19695:21;19575:97;;19667:4;;19575:69;;19616:27;19575:69;:40;:69;:::i;:142::-;-1:-1:-1;;;;;19534:21:0;;;;;;:12;:21;;;;;;;;:183;;;;19776:22;;19738:26;:35;;;;;;:60;19478:336;19316:509;;18558:1274;;:::o;24061:112::-;-1:-1:-1;;;;;24147:18:0;;24120:7;24147:18;;;:9;:18;;;;;;24061:112;;;;:::o;16411:49::-;;;;;;;;;;;;;:::o;25396:450::-;25438:14;25464:24;25477:10;25464:12;:24::i;:::-;25586:10;25572:25;;;;:13;:25;;;;;;;;;25524:12;:24;;;;;;;25508:90;;25572:25;25508:59;;25550:16;:14;:16::i;25508:90::-;25499:99;-1:-1:-1;25622:10:0;;25619:220;;25690:10;25676:25;;;;:13;:25;;;;;;:37;;25706:6;25676:37;:29;:37;:::i;:::-;25662:10;25648:25;;;;:13;:25;;;;;;:65;;;;25730:35;;-1:-1:-1;;;25730:35:0;;;;;;;;;;;;;;;;;15542:42;;25730:15;;:35;;;;;;;;;;;25648:25;15542:42;25730:35;;;5:2:-1;;;;30:1;27;20:12;5:2;25730:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;25787:40:0;;;;;;;;25808:10;;-1:-1:-1;25787:40:0;;-1:-1:-1;25787:40:0;;;;;;;;25396:450;:::o;24181:93::-;24227:7;24254:12;24181:93;:::o;16469:20::-;;;-1:-1:-1;;;;;16469:20:0;;:::o;20621:700::-;20679:4;20696:24;20709:10;20696:12;:24::i;:::-;20765:10;20731:18;20752:24;;;:12;:24;;;;;;20795:19;;;;:54;;-1:-1:-1;20818:17:0;;-1:-1:-1;;;;;20818:17:0;:31;20795:54;20791:99;;;20873:5;20866:12;;;;;20791:99;20915:10;20902:24;;;;:12;:24;;;;;;:34;;;;;;;21024:38;;-1:-1:-1;;;21024:38:0;;21048:4;21024:38;;;;;;;;;;;;15542:42;;21024:15;;:38;;;;;;;;;;;20902:24;15542:42;21024:38;;;5:2:-1;;;;30:1;27;20:12;5:2;21024:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;21112:17:0;;21185:22;;21209:14;;21225:15;;21141:100;;;-1:-1:-1;;;21141:100:0;;;;;;;;21173:10;21141:100;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21112:17:0;;;;-1:-1:-1;21112:17:0;;-1:-1:-1;21141:22:0;;:100;;;;;21075:22;;21141:100;;;;;;;21075:22;21112:17;21141:100;;;5:2:-1;;;;30:1;27;20:12;5:2;21141:100:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;21290:22:0;;21257:56;;;;;;;;;;;;;;;21270:10;;-1:-1:-1;21257:56:0;;-1:-1:-1;21257:56:0;;;;;;;20621:700;;;;;:::o;20219:392::-;20282:24;20295:10;20282:12;:24::i;:::-;20323:10;;20319:261;;20365:12;;:24;;20382:6;20365:24;:16;:24;:::i;:::-;20350:12;:39;;;20438:10;20428:21;;:9;:21;;;;;;:33;;20454:6;20428:33;:25;:33;:::i;:::-;20414:10;20404:21;;;;:9;:21;;;;;:57;;;;20476:44;;15443:42;;20513:6;20476:44;:24;:44;:::i;:::-;20540:28;;;;;;;;20549:10;;20540:28;;;;;;;;;;-1:-1:-1;;20219:392:0:o;23953:100::-;24029:16;;23953:100;:::o;19840:371::-;19889:24;19902:10;19889:12;:24::i;:::-;19930:10;;19926:278;;19972:12;;:24;;19989:6;19972:24;:16;:24;:::i;:::-;19957:12;:39;;;20045:10;20035:21;;:9;:21;;;;;;:33;;20061:6;20035:33;:25;:33;:::i;:::-;20021:10;20011:21;;;;:9;:21;;;;;:57;;;;20083:63;;15443:42;;20132:4;20139:6;20083:63;:28;:63;:::i;:::-;20166:26;;;;;;;;20173:10;;20166:26;;;;;;;;;;19926:278;19840:371;:::o;18116:434::-;18271:5;;-1:-1:-1;;;;;18271:5:0;18257:10;:19;18249:59;;;;;-1:-1:-1;;;18249:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;18319:24;18340:1;18319:12;:24::i;:::-;18356:83;18383:19;18404:23;18429:9;18356:26;:83::i;:::-;18481:19;;18502:15;;18519:22;;18457:85;;;;;;;;;;;;;;;;;;;;;;;;;;;18116:434;;;:::o;15497:88::-;15542:42;15497:88;:::o;15399:87::-;15443:42;15399:87;:::o;16214:37::-;;;;:::o;16287:30::-;;;;:::o;23644:301::-;23713:14;23729:18;23769:1;23760:10;;23781:29;23813:19;;23835:4;23813:26;23781:58;;23864:73;23932:4;23864:63;23920:6;23864:51;23890:24;23907:6;23890:12;;:16;;:24;;;;:::i;:::-;23864:21;;:51;:25;:51;:::i;:73::-;23850:87;;23644:301;;;;:::o;1577:136::-;1635:7;1662:43;1666:1;1669;1662:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1655:50;;1577:136;;;;;:::o;2493:471::-;2551:7;2796:6;2792:47;;-1:-1:-1;2826:1:0;2819:8;;2792:47;2863:5;;;2867:1;2863;:5;:1;2887:5;;;;;:10;2879:56;;;;-1:-1:-1;;;2879:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3432:132;3490:7;3517:39;3521:1;3524;3517:39;;;;;;;;;;;;;;;;;:3;:39::i;1121:181::-;1179:7;1211:5;;;1235:6;;;;1227:46;;;;;-1:-1:-1;;;1227:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;24491:887;24575:7;24670:22;;24663:4;:29;24660:68;;;-1:-1:-1;24715:1:0;24708:8;;24660:68;24784:17;24780:57;;-1:-1:-1;24824:1:0;24817:8;;24780:57;24929:25;24966:80;25044:1;24966:63;25013:15;;24966:32;24975:22;;24966:4;:8;;:32;;;;:::i;:80::-;24929:117;;25133:21;25166:75;25226:14;;25166:45;25193:17;25166:12;:26;;:45;;;;:::i;:75::-;25133:108;;25272:12;25257;:27;25254:85;;;-1:-1:-1;25315:12:0;25254:85;25358:12;24491:887;-1:-1:-1;;;;24491:887:0:o;26581:819::-;-1:-1:-1;;;;;26816:25:0;;26689:7;26816:25;;;:12;:25;;;;;;26777:35;26793:12;26807:4;26777:15;:35::i;:::-;:64;26774:103;;;-1:-1:-1;26864:1:0;26857:8;;26774:103;26980:22;;26972:4;:30;26969:90;;-1:-1:-1;27025:22:0;;27018:29;;26969:90;27108:25;27145:80;27223:1;27145:63;27192:15;;27145:32;27154:22;;27145:4;:8;;:32;;;;:::i;:80::-;27108:117;;27238:21;27271:86;27334:22;;27271:48;27303:15;;27271:17;:31;;:48;;;;:::i;:86::-;27238:119;-1:-1:-1;;;26581:819:0;;;;;;:::o;12130:176::-;12239:58;;;-1:-1:-1;;;;;12239:58:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;12239:58:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;12213:85:0;;12232:5;;12213:18;:85::i;12314:204::-;12441:68;;;-1:-1:-1;;;;;12441:68:0;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;12441:68:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;12415:95:0;;12434:5;;12415:18;:95::i;:::-;12314:204;;;;:::o;17663:445::-;17980:4;17958:27;;17936:19;:49;17860:4;17834:30;;17904:19;18014:39;17834:30;18014:13;:11;:13::i;:39::-;17996:15;:57;-1:-1:-1;;18066:22:0;:34;-1:-1:-1;;17663:445:0:o;2050:192::-;2136:7;2172:12;2164:6;;;;2156:29;;;;-1:-1:-1;;;2156:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;2156:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2208:5:0;;;2050:192::o;4094:345::-;4180:7;4282:12;4275:5;4267:28;;;;-1:-1:-1;;;4267:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;4267:28:0;;4306:9;4322:1;4318;:5;;;;;;;4094:345;-1:-1:-1;;;;;4094:345:0:o;14169:1114::-;14773:27;14781:5;-1:-1:-1;;;;;14773:25:0;;:27::i;:::-;14765:71;;;;;-1:-1:-1;;;14765:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14910:12;14924:23;14959:5;-1:-1:-1;;;;;14951:19:0;14971:4;14951:25;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;14951:25:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;14909:67:0;;;;14995:7;14987:52;;;;;-1:-1:-1;;;14987:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15056:17;;:21;15052:224;;15198:10;15187:30;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15187:30:0;15179:85;;;;-1:-1:-1;;;15179:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9061:810;9121:4;9780:20;;9623:66;9820:15;;;;;:42;;-1:-1:-1;9839:23:0;;;9812:51;-1:-1:-1;;9061:810:0:o
Swarm Source
bzzr://54f36945a0cce5ed5d391e87ffed604f3c92ad4ab6b3c77fed4f83f75b02e0af
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.