Source Code
Latest 25 from a total of 266 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Claim Tokens | 13983270 | 1536 days ago | IN | 0 ETH | 0.00879976 | ||||
| Exit | 12088183 | 1831 days ago | IN | 0 ETH | 0.01484337 | ||||
| Exit | 11531325 | 1917 days ago | IN | 0 ETH | 0.00682109 | ||||
| Exit | 11514644 | 1920 days ago | IN | 0 ETH | 0.00561737 | ||||
| Withdraw | 11508778 | 1920 days ago | IN | 0 ETH | 0.00706579 | ||||
| Get Reward | 11508696 | 1920 days ago | IN | 0 ETH | 0.0120965 | ||||
| Exit | 11501723 | 1922 days ago | IN | 0 ETH | 0.00185345 | ||||
| Exit | 11501723 | 1922 days ago | IN | 0 ETH | 0.00463113 | ||||
| Exit | 11501689 | 1922 days ago | IN | 0 ETH | 0.00344251 | ||||
| Exit | 11501686 | 1922 days ago | IN | 0 ETH | 0.00356241 | ||||
| Exit | 11501636 | 1922 days ago | IN | 0 ETH | 0.00853422 | ||||
| Get Reward | 11495109 | 1923 days ago | IN | 0 ETH | 0.00240216 | ||||
| Exit | 11494621 | 1923 days ago | IN | 0 ETH | 0.00852876 | ||||
| Exit | 11487621 | 1924 days ago | IN | 0 ETH | 0.00394152 | ||||
| Stake | 11482330 | 1925 days ago | IN | 0 ETH | 0.00409076 | ||||
| Get Reward | 11476000 | 1925 days ago | IN | 0 ETH | 0.00584875 | ||||
| Get Reward | 11463771 | 1927 days ago | IN | 0 ETH | 0.00274552 | ||||
| Get Reward | 11463771 | 1927 days ago | IN | 0 ETH | 0.00396879 | ||||
| Exit | 11457428 | 1928 days ago | IN | 0 ETH | 0.00811653 | ||||
| Get Reward | 11449645 | 1930 days ago | IN | 0 ETH | 0.00480433 | ||||
| Get Reward | 11442497 | 1931 days ago | IN | 0 ETH | 0.00143107 | ||||
| Get Reward | 11442387 | 1931 days ago | IN | 0 ETH | 0.00211376 | ||||
| Get Reward | 11442065 | 1931 days ago | IN | 0 ETH | 0.00183984 | ||||
| Exit | 11431984 | 1932 days ago | IN | 0 ETH | 0.01337678 | ||||
| Get Reward | 11431973 | 1932 days ago | IN | 0 ETH | 0.0052863 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
ForTubeUsdtForRewards
Compiler Version
v0.5.17+commit.d19bba13
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2020-09-23
*/
/**
*Submitted for verification at Etherscan.io on 2020-08-18
*/
/**
*Submitted for verification at Etherscan.io on 2020-07-17
*/
/*
____ __ __ __ _
/ __/__ __ ___ / /_ / / ___ / /_ (_)__ __
_\ \ / // // _ \/ __// _ \/ -_)/ __// / \ \ /
/___/ \_, //_//_/\__//_//_/\__/ \__//_/ /_\_\
/___/
* Synthetix: YFIRewards.sol
*
* Docs: https://docs.synthetix.io/
*
*
* MIT License
* ===========
*
* Copyright (c) 2020 Synthetix
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
*/
// File: @openzeppelin/contracts/math/Math.sol
pragma solidity ^0.5.0;
/**
* @dev Standard math utilities missing in the Solidity language.
*/
library Math {
/**
* @dev Returns the largest of two numbers.
*/
function max(uint256 a, uint256 b) internal pure returns (uint256) {
return a >= b ? a : b;
}
/**
* @dev Returns the smallest of two numbers.
*/
function min(uint256 a, uint256 b) internal pure returns (uint256) {
return a < b ? a : b;
}
/**
* @dev Returns the average of two numbers. The result is rounded towards
* zero.
*/
function average(uint256 a, uint256 b) internal pure returns (uint256) {
// (a + b) / 2 can overflow, so we distribute
return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2);
}
}
// File: @openzeppelin/contracts/math/SafeMath.sol
pragma solidity ^0.5.0;
/**
* @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;
}
}
// File: @openzeppelin/contracts/GSN/Context.sol
pragma solidity ^0.5.0;
/*
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with GSN 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.
*/
contract Context {
// Empty internal constructor, to prevent people from mistakenly deploying
// an instance of this contract, which should be used via inheritance.
constructor () internal { }
// solhint-disable-previous-line no-empty-blocks
function _msgSender() internal view returns (address payable) {
return msg.sender;
}
function _msgData() internal view returns (bytes memory) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
}
// File: @openzeppelin/contracts/ownership/Ownable.sol
pragma solidity ^0.5.0;
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* 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.
*/
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 () internal {
_owner = _msgSender();
emit OwnershipTransferred(address(0), _owner);
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(isOwner(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Returns true if the caller is the current owner.
*/
function isOwner() public view returns (bool) {
return _msgSender() == _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 onlyOwner {
emit OwnershipTransferred(_owner, address(0));
_owner = 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 onlyOwner {
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
*/
function _transferOwnership(address newOwner) internal {
require(newOwner != address(0), "Ownable: new owner is the zero address");
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
}
// File: @openzeppelin/contracts/token/ERC20/IERC20.sol
pragma solidity ^0.5.0;
/**
* @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);
}
// File: @openzeppelin/contracts/utils/Address.sol
pragma solidity ^0.5.5;
/**
* @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");
}
}
// File: @openzeppelin/contracts/token/ERC20/SafeERC20.sol
pragma solidity ^0.5.0;
/**
* @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");
}
}
}
// File: contracts/IRewardDistributionRecipient.sol
pragma solidity ^0.5.0;
contract IRewardDistributionRecipient is Ownable {
address rewardDistribution;
function notifyRewardAmount(uint256 reward) external;
modifier onlyRewardDistribution() {
require(_msgSender() == rewardDistribution, "Caller is not reward distribution");
_;
}
function setRewardDistribution(address _rewardDistribution)
external
onlyOwner
{
rewardDistribution = _rewardDistribution;
}
}
// File: contracts/CurveRewards.sol
pragma solidity ^0.5.0;
contract LPTokenWrapper {
using SafeMath for uint256;
using SafeERC20 for IERC20;
IERC20 public y = IERC20(0xb319887931A5A1BB379dEB45c2586430b166f21B);
uint256 private _totalSupply;
mapping(address => uint256) private _balances;
function totalSupply() public view returns (uint256) {
return _totalSupply;
}
function balanceOf(address account) public view returns (uint256) {
return _balances[account];
}
function stake(uint256 amount) public {
_totalSupply = _totalSupply.add(amount);
_balances[msg.sender] = _balances[msg.sender].add(amount);
y.safeTransferFrom(msg.sender, address(this), amount);
}
function withdraw(uint256 amount) public {
_totalSupply = _totalSupply.sub(amount);
_balances[msg.sender] = _balances[msg.sender].sub(amount);
y.safeTransfer(msg.sender, amount);
}
function setY(address _y) internal {
y = IERC20(_y);
}
}
contract ForTubeUsdtForRewards is LPTokenWrapper, IRewardDistributionRecipient {
IERC20 public _for = IERC20(0x1FCdcE58959f536621d76f5b7FfB955baa5A672F);//mainnet: The Force Token
uint256 public DURATION = 30 days;
uint256[] public init_rewards;
uint256 public starttime = 1600876800; //utc+8 2020/9/24 00:00:00
uint256 public periodFinish = 0;
uint256 public rewardRate = 0;
uint256 public lastUpdateTime;
uint256 public rewardPerTokenStored;
uint256 public REWARD = 3000000 * 1e18;
mapping(address => uint256) public userRewardPerTokenPaid;
mapping(address => uint256) public rewards;
event RewardAdded(uint256 reward);
event Staked(address indexed user, uint256 amount);
event Withdrawn(address indexed user, uint256 amount);
event RewardPaid(address indexed user, uint256 reward);
event ClaimedTokens(address token, address owner, uint256 balance);
constructor () public {
rewardRate = REWARD.div(DURATION);//10000/7day
lastUpdateTime = starttime;
periodFinish = starttime.add(DURATION);
}
function setForToken(address _forToken) external onlyOwner {
require(_forToken != address(y), "change for to y is forbidden");
_for = IERC20(_forToken);
}
function setDuration(uint256 _duration) external onlyOwner {
DURATION = _duration;
}
function setStarttime(uint256 _starttime) external onlyOwner {
starttime = _starttime;
}
function claimTokens() external onlyOwner {
uint256 balance = _for.balanceOf(address(this));
_for.safeTransfer(owner(), balance);
emit ClaimedTokens(address(_for), owner(), balance);
}
modifier updateReward(address account) {
rewardPerTokenStored = rewardPerToken();
lastUpdateTime = lastTimeRewardApplicable();
if (account != address(0)) {
rewards[account] = earned(account);
userRewardPerTokenPaid[account] = rewardPerTokenStored;
}
_;
}
function lastTimeRewardApplicable() public view returns (uint256) {
return Math.min(block.timestamp, periodFinish);
}
function rewardPerToken() public view returns (uint256) {
if (totalSupply() == 0) {
return rewardPerTokenStored;//初始为0
}
return
rewardPerTokenStored.add(
lastTimeRewardApplicable()
.sub(lastUpdateTime)
.mul(rewardRate)
.mul(1e18)
.div(totalSupply())//
);
}
function earned(address account) public view returns (uint256) {
return
balanceOf(account)
.mul(rewardPerToken().sub(userRewardPerTokenPaid[account]))
.div(1e18)
.add(rewards[account]);
}
// stake visibility is public as overriding LPTokenWrapper's stake() function
function stake(uint256 amount) public updateReward(msg.sender) checkStart {
require(amount > 0, "Cannot stake 0");
super.stake(amount);
emit Staked(msg.sender, amount);
}
function withdraw(uint256 amount) public updateReward(msg.sender) checkStart {
require(amount > 0, "Cannot withdraw 0");
super.withdraw(amount);
emit Withdrawn(msg.sender, amount);
}
function exit() external {
withdraw(balanceOf(msg.sender));
getReward();
}
function getReward() public updateReward(msg.sender) checkStart {
uint256 reward = earned(msg.sender);
if (reward > 0) {
rewards[msg.sender] = 0;
_for.safeTransfer(msg.sender, reward);
emit RewardPaid(msg.sender, reward);
}
}
modifier checkStart() {
require(block.timestamp > starttime,"not start");
_;
}
function notifyRewardAmount(uint256 reward)
external
onlyRewardDistribution
updateReward(address(0))
{
if (block.timestamp >= periodFinish) {
rewardRate = reward.div(DURATION);//10000/7day
} else {
uint256 remaining = periodFinish.sub(block.timestamp);
uint256 leftover = remaining.mul(rewardRate);
rewardRate = reward.add(leftover).div(DURATION);//更新新的奖励率
}
lastUpdateTime = block.timestamp;
periodFinish = block.timestamp.add(DURATION);
emit RewardAdded(reward);
}
function addRewardAmount(uint256 reward)
external
onlyRewardDistribution
updateReward(address(0))
{
if (block.timestamp >= periodFinish) {
rewardRate = reward.div(DURATION);//10000/7day
} else {
uint256 remaining = periodFinish.sub(block.timestamp);
uint256 leftover = remaining.mul(rewardRate);
rewardRate = reward.add(leftover).div(remaining);//更新新的奖励率
}
lastUpdateTime = block.timestamp;
// periodFinish = block.timestamp.add(DURATION);//挖矿活动结束时间不变
emit RewardAdded(reward);
}
function subRewardAmount(uint256 reward)
external
onlyRewardDistribution
updateReward(address(0))
{
if (block.timestamp >= periodFinish) {
rewardRate = reward.div(DURATION);//10000/7day
} else {
uint256 remaining = periodFinish.sub(block.timestamp);
uint256 leftover = remaining.mul(rewardRate);
rewardRate = leftover.sub(reward).div(remaining);//更新新的奖励率
}
lastUpdateTime = block.timestamp;
// periodFinish = block.timestamp.add(DURATION);//挖矿活动结束时间不变
emit RewardAdded(reward);
}
function notifyRewardAmountAndDuration(uint256 reward, uint256 duration)
external
onlyRewardDistribution
updateReward(address(0))
{
DURATION = duration;
init_rewards.push(reward);
if (block.timestamp >= periodFinish) {
rewardRate = reward.div(duration);//10000/7day
} else {
uint256 remaining = periodFinish.sub(block.timestamp);
uint256 leftover = remaining.mul(rewardRate);
rewardRate = reward.add(leftover).div(duration);//更新新的奖励率
}
lastUpdateTime = block.timestamp;
periodFinish = block.timestamp.add(duration);
emit RewardAdded(reward);
}
function init_rewards_length() external view returns (uint256) {
return init_rewards.length;
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"balance","type":"uint256"}],"name":"ClaimedTokens","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":"reward","type":"uint256"}],"name":"RewardAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardPaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"Withdrawn","type":"event"},{"constant":true,"inputs":[],"name":"DURATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"REWARD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_for","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"reward","type":"uint256"}],"name":"addRewardAmount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"claimTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"earned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"exit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"getReward","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"init_rewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"init_rewards_length","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lastTimeRewardApplicable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lastUpdateTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"reward","type":"uint256"}],"name":"notifyRewardAmount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"reward","type":"uint256"},{"internalType":"uint256","name":"duration","type":"uint256"}],"name":"notifyRewardAmountAndDuration","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"periodFinish","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"rewardPerToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rewardPerTokenStored","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_duration","type":"uint256"}],"name":"setDuration","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_forToken","type":"address"}],"name":"setForToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_rewardDistribution","type":"address"}],"name":"setRewardDistribution","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_starttime","type":"uint256"}],"name":"setStarttime","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":true,"inputs":[],"name":"starttime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"reward","type":"uint256"}],"name":"subRewardAmount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userRewardPerTokenPaid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"y","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"}]Contract Creation Code
6080604052600080546001600160a01b031990811673b319887931a5a1bb379deb45c2586430b166f21b17825560058054909116731fcdce58959f536621d76f5b7ffb955baa5a672f17905562278d00600655635f6b71006008556009819055600a556a027b46536c66c8e3000000600d553480156200007e57600080fd5b50620000926001600160e01b036200012b16565b600380546001600160a01b0319166001600160a01b0392831617908190556040519116906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3620000fc600654600d546200012f60201b620014921790919060201c565b600a55600854600b81905560065462000122919062000180602090811b620014d417901c565b60095562000282565b3390565b60006200017983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250620001db60201b60201c565b9392505050565b60008282018381101562000179576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600081836200026b5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156200022f57818101518382015260200162000215565b50505050905090810190601f1680156200025d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816200027857fe5b0495945050505050565b611b3a80620002926000396000f3fe608060405234801561001057600080fd5b50600436106102105760003560e01c806380faa57d11610125578063c8f33c91116100ad578063df136d651161007c578063df136d65146104ab578063e9fad8ee146104b3578063ebe2b12b146104bb578063f2fde38b146104c3578063f6be71d1146104e957610210565b8063c8f33c9114610476578063cab34c081461047e578063cb80b70214610486578063cd3daf9d146104a357610210565b80638f32d59b116100f45780638f32d59b146104105780639b7ccf4c1461042c5780639bb50ada14610449578063a56dfe4a14610451578063a694fc3a1461045957610210565b806380faa57d146103b65780638b876347146103be5780638da58897146103e45780638da5cb5b146103ec57610210565b80633d18b912116101a85780636ebfc0b3116101775780636ebfc0b31461034057806370a082311461035d578063715018a6146103835780637b0a47ee1461038b5780637cc2efe31461039357610210565b80633d18b9121461030257806348c54b9d1461030a5780635c89054714610312578063622b1ebe1461031a57610210565b806318160ddd116101e457806318160ddd146102b85780631be05289146102c05780632e1a7d4d146102c85780633c6b16ab146102e557610210565b80628cc262146102155780630457ab8c1461024d5780630700037d1461026c5780630d68b76114610292575b600080fd5b61023b6004803603602081101561022b57600080fd5b50356001600160a01b0316610506565b60408051918252519081900360200190f35b61026a6004803603602081101561026357600080fd5b503561058c565b005b61023b6004803603602081101561028257600080fd5b50356001600160a01b03166105d8565b61026a600480360360208110156102a857600080fd5b50356001600160a01b03166105ea565b61023b610653565b61023b61065a565b61026a600480360360208110156102de57600080fd5b5035610660565b61026a600480360360208110156102fb57600080fd5b5035610789565b61026a610905565b61026a610a19565b61023b610b61565b61026a6004803603602081101561033057600080fd5b50356001600160a01b0316610b67565b61023b6004803603602081101561035657600080fd5b5035610c33565b61023b6004803603602081101561037357600080fd5b50356001600160a01b0316610c51565b61026a610c6c565b61023b610cfd565b61026a600480360360408110156103a957600080fd5b5080359060200135610d03565b61023b610eaf565b61023b600480360360208110156103d457600080fd5b50356001600160a01b0316610ec2565b61023b610ed4565b6103f4610eda565b604080516001600160a01b039092168252519081900360200190f35b610418610ee9565b604080519115158252519081900360200190f35b61026a6004803603602081101561044257600080fd5b5035610f0f565b6103f461106f565b6103f461107e565b61026a6004803603602081101561046f57600080fd5b503561108d565b61023b6111b3565b61023b6111b9565b61026a6004803603602081101561049c57600080fd5b50356111bf565b61023b6112d6565b61023b61132a565b61026a611330565b61023b61134b565b61026a600480360360208110156104d957600080fd5b50356001600160a01b0316611351565b61026a600480360360208110156104ff57600080fd5b50356113a4565b6001600160a01b0381166000908152600f6020908152604080832054600e909252822054610586919061057a90670de0b6b3a76400009061056e906105599061054d6112d6565b9063ffffffff6113f016565b61056288610c51565b9063ffffffff61143916565b9063ffffffff61149216565b9063ffffffff6114d416565b92915050565b610594610ee9565b6105d3576040805162461bcd60e51b81526020600482018190526024820152600080516020611a9b833981519152604482015290519081900360640190fd5b600855565b600f6020526000908152604090205481565b6105f2610ee9565b610631576040805162461bcd60e51b81526020600482018190526024820152600080516020611a9b833981519152604482015290519081900360640190fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6001545b90565b60065481565b336106696112d6565b600c55610674610eaf565b600b556001600160a01b038116156106bb5761068f81610506565b6001600160a01b0382166000908152600f6020908152604080832093909355600c54600e909152919020555b60085442116106fd576040805162461bcd60e51b81526020600482015260096024820152681b9bdd081cdd185c9d60ba1b604482015290519081900360640190fd5b60008211610746576040805162461bcd60e51b8152602060048201526011602482015270043616e6e6f74207769746864726177203607c1b604482015290519081900360640190fd5b61074f8261152e565b60408051838152905133917f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5919081900360200190a25050565b6004546001600160a01b031661079d61158f565b6001600160a01b0316146107e25760405162461bcd60e51b8152600401808060200182810382526021815260200180611abb6021913960400191505060405180910390fd5b60006107ec6112d6565b600c556107f7610eaf565b600b556001600160a01b0381161561083e5761081281610506565b6001600160a01b0382166000908152600f6020908152604080832093909355600c54600e909152919020555b60095442106108635760065461085b90839063ffffffff61149216565b600a556108b2565b600954600090610879904263ffffffff6113f016565b90506000610892600a548361143990919063ffffffff16565b6006549091506108ac9061056e868463ffffffff6114d416565b600a5550505b42600b8190556006546108cb919063ffffffff6114d416565b6009556040805183815290517fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d9181900360200190a15050565b3361090e6112d6565b600c55610919610eaf565b600b556001600160a01b038116156109605761093481610506565b6001600160a01b0382166000908152600f6020908152604080832093909355600c54600e909152919020555b60085442116109a2576040805162461bcd60e51b81526020600482015260096024820152681b9bdd081cdd185c9d60ba1b604482015290519081900360640190fd5b60006109ad33610506565b90508015610a1557336000818152600f60205260408120556005546109de916001600160a01b039091169083611593565b60408051828152905133917fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e0486919081900360200190a25b5050565b610a21610ee9565b610a60576040805162461bcd60e51b81526020600482018190526024820152600080516020611a9b833981519152604482015290519081900360640190fd5b600554604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015610aab57600080fd5b505afa158015610abf573d6000803e3d6000fd5b505050506040513d6020811015610ad557600080fd5b50519050610afd610ae4610eda565b6005546001600160a01b0316908363ffffffff61159316565b6005547ff931edb47c50b4b4104c187b5814a9aef5f709e17e2ecf9617e860cacade929c906001600160a01b0316610b33610eda565b604080516001600160a01b03938416815291909216602082015280820184905290519081900360600190a150565b60075490565b610b6f610ee9565b610bae576040805162461bcd60e51b81526020600482018190526024820152600080516020611a9b833981519152604482015290519081900360640190fd5b6000546001600160a01b0382811691161415610c11576040805162461bcd60e51b815260206004820152601c60248201527f6368616e676520666f7220746f207920697320666f7262696464656e00000000604482015290519081900360640190fd5b600580546001600160a01b0319166001600160a01b0392909216919091179055565b60078181548110610c4057fe5b600091825260209091200154905081565b6001600160a01b031660009081526002602052604090205490565b610c74610ee9565b610cb3576040805162461bcd60e51b81526020600482018190526024820152600080516020611a9b833981519152604482015290519081900360640190fd5b6003546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600380546001600160a01b0319169055565b600a5481565b6004546001600160a01b0316610d1761158f565b6001600160a01b031614610d5c5760405162461bcd60e51b8152600401808060200182810382526021815260200180611abb6021913960400191505060405180910390fd5b6000610d666112d6565b600c55610d71610eaf565b600b556001600160a01b03811615610db857610d8c81610506565b6001600160a01b0382166000908152600f6020908152604080832093909355600c54600e909152919020555b6006829055600780546001810182556000919091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688018390556009544210610e1357610e0b838363ffffffff61149216565b600a55610e5e565b600954600090610e29904263ffffffff6113f016565b90506000610e42600a548361143990919063ffffffff16565b9050610e588461056e878463ffffffff6114d416565b600a5550505b42600b819055610e74908363ffffffff6114d416565b6009556040805184815290517fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d9181900360200190a1505050565b6000610ebd426009546115ea565b905090565b600e6020526000908152604090205481565b60085481565b6003546001600160a01b031690565b6003546000906001600160a01b0316610f0061158f565b6001600160a01b031614905090565b6004546001600160a01b0316610f2361158f565b6001600160a01b031614610f685760405162461bcd60e51b8152600401808060200182810382526021815260200180611abb6021913960400191505060405180910390fd5b6000610f726112d6565b600c55610f7d610eaf565b600b556001600160a01b03811615610fc457610f9881610506565b6001600160a01b0382166000908152600f6020908152604080832093909355600c54600e909152919020555b6009544210610fe957600654610fe190839063ffffffff61149216565b600a55611034565b600954600090610fff904263ffffffff6113f016565b90506000611018600a548361143990919063ffffffff16565b905061102e8261056e868463ffffffff6114d416565b600a5550505b42600b556040805183815290517fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d9181900360200190a15050565b6005546001600160a01b031681565b6000546001600160a01b031681565b336110966112d6565b600c556110a1610eaf565b600b556001600160a01b038116156110e8576110bc81610506565b6001600160a01b0382166000908152600f6020908152604080832093909355600c54600e909152919020555b600854421161112a576040805162461bcd60e51b81526020600482015260096024820152681b9bdd081cdd185c9d60ba1b604482015290519081900360640190fd5b60008211611170576040805162461bcd60e51b815260206004820152600e60248201526d043616e6e6f74207374616b6520360941b604482015290519081900360640190fd5b61117982611600565b60408051838152905133917f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d919081900360200190a25050565b600b5481565b600d5481565b6004546001600160a01b03166111d361158f565b6001600160a01b0316146112185760405162461bcd60e51b8152600401808060200182810382526021815260200180611abb6021913960400191505060405180910390fd5b60006112226112d6565b600c5561122d610eaf565b600b556001600160a01b038116156112745761124881610506565b6001600160a01b0382166000908152600f6020908152604080832093909355600c54600e909152919020555b600954421061129157600654610fe190839063ffffffff61149216565b6009546000906112a7904263ffffffff6113f016565b905060006112c0600a548361143990919063ffffffff16565b905061102e8261056e838763ffffffff6113f016565b60006112e0610653565b6112ed5750600c54610657565b610ebd61131b6112fb610653565b61056e670de0b6b3a7640000610562600a54610562600b5461054d610eaf565b600c549063ffffffff6114d416565b600c5481565b61134161133c33610c51565b610660565b611349610905565b565b60095481565b611359610ee9565b611398576040805162461bcd60e51b81526020600482018190526024820152600080516020611a9b833981519152604482015290519081900360640190fd5b6113a181611662565b50565b6113ac610ee9565b6113eb576040805162461bcd60e51b81526020600482018190526024820152600080516020611a9b833981519152604482015290519081900360640190fd5b600655565b600061143283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611703565b9392505050565b60008261144857506000610586565b8282028284828161145557fe5b04146114325760405162461bcd60e51b8152600401808060200182810382526021815260200180611a7a6021913960400191505060405180910390fd5b600061143283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061179a565b600082820183811015611432576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600154611541908263ffffffff6113f016565b60015533600090815260026020526040902054611564908263ffffffff6113f016565b3360008181526002602052604081209290925590546113a1916001600160a01b039091169083611593565b3390565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526115e59084906117ff565b505050565b60008183106115f95781611432565b5090919050565b600154611613908263ffffffff6114d416565b60015533600090815260026020526040902054611636908263ffffffff6114d416565b3360008181526002602052604081209290925590546113a1916001600160a01b039091169030846119bd565b6001600160a01b0381166116a75760405162461bcd60e51b8152600401808060200182810382526026815260200180611a546026913960400191505060405180910390fd5b6003546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600380546001600160a01b0319166001600160a01b0392909216919091179055565b600081848411156117925760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561175757818101518382015260200161173f565b50505050905090810190601f1680156117845780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836117e95760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561175757818101518382015260200161173f565b5060008385816117f557fe5b0495945050505050565b611811826001600160a01b0316611a17565b611862576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b602083106118a05780518252601f199092019160209182019101611881565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611902576040519150601f19603f3d011682016040523d82523d6000602084013e611907565b606091505b50915091508161195e576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b8051156119b75780806020019051602081101561197a57600080fd5b50516119b75760405162461bcd60e51b815260040180806020018281038252602a815260200180611adc602a913960400191505060405180910390fd5b50505050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526119b79085906117ff565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708115801590611a4b5750808214155b94935050505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657243616c6c6572206973206e6f742072657761726420646973747269627574696f6e5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a265627a7a72315820e583acd03dc7bbb70fa04c5b84ebbea107ab8c8bb68cb295352c537a0a23110e64736f6c63430005110032
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102105760003560e01c806380faa57d11610125578063c8f33c91116100ad578063df136d651161007c578063df136d65146104ab578063e9fad8ee146104b3578063ebe2b12b146104bb578063f2fde38b146104c3578063f6be71d1146104e957610210565b8063c8f33c9114610476578063cab34c081461047e578063cb80b70214610486578063cd3daf9d146104a357610210565b80638f32d59b116100f45780638f32d59b146104105780639b7ccf4c1461042c5780639bb50ada14610449578063a56dfe4a14610451578063a694fc3a1461045957610210565b806380faa57d146103b65780638b876347146103be5780638da58897146103e45780638da5cb5b146103ec57610210565b80633d18b912116101a85780636ebfc0b3116101775780636ebfc0b31461034057806370a082311461035d578063715018a6146103835780637b0a47ee1461038b5780637cc2efe31461039357610210565b80633d18b9121461030257806348c54b9d1461030a5780635c89054714610312578063622b1ebe1461031a57610210565b806318160ddd116101e457806318160ddd146102b85780631be05289146102c05780632e1a7d4d146102c85780633c6b16ab146102e557610210565b80628cc262146102155780630457ab8c1461024d5780630700037d1461026c5780630d68b76114610292575b600080fd5b61023b6004803603602081101561022b57600080fd5b50356001600160a01b0316610506565b60408051918252519081900360200190f35b61026a6004803603602081101561026357600080fd5b503561058c565b005b61023b6004803603602081101561028257600080fd5b50356001600160a01b03166105d8565b61026a600480360360208110156102a857600080fd5b50356001600160a01b03166105ea565b61023b610653565b61023b61065a565b61026a600480360360208110156102de57600080fd5b5035610660565b61026a600480360360208110156102fb57600080fd5b5035610789565b61026a610905565b61026a610a19565b61023b610b61565b61026a6004803603602081101561033057600080fd5b50356001600160a01b0316610b67565b61023b6004803603602081101561035657600080fd5b5035610c33565b61023b6004803603602081101561037357600080fd5b50356001600160a01b0316610c51565b61026a610c6c565b61023b610cfd565b61026a600480360360408110156103a957600080fd5b5080359060200135610d03565b61023b610eaf565b61023b600480360360208110156103d457600080fd5b50356001600160a01b0316610ec2565b61023b610ed4565b6103f4610eda565b604080516001600160a01b039092168252519081900360200190f35b610418610ee9565b604080519115158252519081900360200190f35b61026a6004803603602081101561044257600080fd5b5035610f0f565b6103f461106f565b6103f461107e565b61026a6004803603602081101561046f57600080fd5b503561108d565b61023b6111b3565b61023b6111b9565b61026a6004803603602081101561049c57600080fd5b50356111bf565b61023b6112d6565b61023b61132a565b61026a611330565b61023b61134b565b61026a600480360360208110156104d957600080fd5b50356001600160a01b0316611351565b61026a600480360360208110156104ff57600080fd5b50356113a4565b6001600160a01b0381166000908152600f6020908152604080832054600e909252822054610586919061057a90670de0b6b3a76400009061056e906105599061054d6112d6565b9063ffffffff6113f016565b61056288610c51565b9063ffffffff61143916565b9063ffffffff61149216565b9063ffffffff6114d416565b92915050565b610594610ee9565b6105d3576040805162461bcd60e51b81526020600482018190526024820152600080516020611a9b833981519152604482015290519081900360640190fd5b600855565b600f6020526000908152604090205481565b6105f2610ee9565b610631576040805162461bcd60e51b81526020600482018190526024820152600080516020611a9b833981519152604482015290519081900360640190fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6001545b90565b60065481565b336106696112d6565b600c55610674610eaf565b600b556001600160a01b038116156106bb5761068f81610506565b6001600160a01b0382166000908152600f6020908152604080832093909355600c54600e909152919020555b60085442116106fd576040805162461bcd60e51b81526020600482015260096024820152681b9bdd081cdd185c9d60ba1b604482015290519081900360640190fd5b60008211610746576040805162461bcd60e51b8152602060048201526011602482015270043616e6e6f74207769746864726177203607c1b604482015290519081900360640190fd5b61074f8261152e565b60408051838152905133917f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5919081900360200190a25050565b6004546001600160a01b031661079d61158f565b6001600160a01b0316146107e25760405162461bcd60e51b8152600401808060200182810382526021815260200180611abb6021913960400191505060405180910390fd5b60006107ec6112d6565b600c556107f7610eaf565b600b556001600160a01b0381161561083e5761081281610506565b6001600160a01b0382166000908152600f6020908152604080832093909355600c54600e909152919020555b60095442106108635760065461085b90839063ffffffff61149216565b600a556108b2565b600954600090610879904263ffffffff6113f016565b90506000610892600a548361143990919063ffffffff16565b6006549091506108ac9061056e868463ffffffff6114d416565b600a5550505b42600b8190556006546108cb919063ffffffff6114d416565b6009556040805183815290517fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d9181900360200190a15050565b3361090e6112d6565b600c55610919610eaf565b600b556001600160a01b038116156109605761093481610506565b6001600160a01b0382166000908152600f6020908152604080832093909355600c54600e909152919020555b60085442116109a2576040805162461bcd60e51b81526020600482015260096024820152681b9bdd081cdd185c9d60ba1b604482015290519081900360640190fd5b60006109ad33610506565b90508015610a1557336000818152600f60205260408120556005546109de916001600160a01b039091169083611593565b60408051828152905133917fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e0486919081900360200190a25b5050565b610a21610ee9565b610a60576040805162461bcd60e51b81526020600482018190526024820152600080516020611a9b833981519152604482015290519081900360640190fd5b600554604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015610aab57600080fd5b505afa158015610abf573d6000803e3d6000fd5b505050506040513d6020811015610ad557600080fd5b50519050610afd610ae4610eda565b6005546001600160a01b0316908363ffffffff61159316565b6005547ff931edb47c50b4b4104c187b5814a9aef5f709e17e2ecf9617e860cacade929c906001600160a01b0316610b33610eda565b604080516001600160a01b03938416815291909216602082015280820184905290519081900360600190a150565b60075490565b610b6f610ee9565b610bae576040805162461bcd60e51b81526020600482018190526024820152600080516020611a9b833981519152604482015290519081900360640190fd5b6000546001600160a01b0382811691161415610c11576040805162461bcd60e51b815260206004820152601c60248201527f6368616e676520666f7220746f207920697320666f7262696464656e00000000604482015290519081900360640190fd5b600580546001600160a01b0319166001600160a01b0392909216919091179055565b60078181548110610c4057fe5b600091825260209091200154905081565b6001600160a01b031660009081526002602052604090205490565b610c74610ee9565b610cb3576040805162461bcd60e51b81526020600482018190526024820152600080516020611a9b833981519152604482015290519081900360640190fd5b6003546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600380546001600160a01b0319169055565b600a5481565b6004546001600160a01b0316610d1761158f565b6001600160a01b031614610d5c5760405162461bcd60e51b8152600401808060200182810382526021815260200180611abb6021913960400191505060405180910390fd5b6000610d666112d6565b600c55610d71610eaf565b600b556001600160a01b03811615610db857610d8c81610506565b6001600160a01b0382166000908152600f6020908152604080832093909355600c54600e909152919020555b6006829055600780546001810182556000919091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688018390556009544210610e1357610e0b838363ffffffff61149216565b600a55610e5e565b600954600090610e29904263ffffffff6113f016565b90506000610e42600a548361143990919063ffffffff16565b9050610e588461056e878463ffffffff6114d416565b600a5550505b42600b819055610e74908363ffffffff6114d416565b6009556040805184815290517fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d9181900360200190a1505050565b6000610ebd426009546115ea565b905090565b600e6020526000908152604090205481565b60085481565b6003546001600160a01b031690565b6003546000906001600160a01b0316610f0061158f565b6001600160a01b031614905090565b6004546001600160a01b0316610f2361158f565b6001600160a01b031614610f685760405162461bcd60e51b8152600401808060200182810382526021815260200180611abb6021913960400191505060405180910390fd5b6000610f726112d6565b600c55610f7d610eaf565b600b556001600160a01b03811615610fc457610f9881610506565b6001600160a01b0382166000908152600f6020908152604080832093909355600c54600e909152919020555b6009544210610fe957600654610fe190839063ffffffff61149216565b600a55611034565b600954600090610fff904263ffffffff6113f016565b90506000611018600a548361143990919063ffffffff16565b905061102e8261056e868463ffffffff6114d416565b600a5550505b42600b556040805183815290517fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d9181900360200190a15050565b6005546001600160a01b031681565b6000546001600160a01b031681565b336110966112d6565b600c556110a1610eaf565b600b556001600160a01b038116156110e8576110bc81610506565b6001600160a01b0382166000908152600f6020908152604080832093909355600c54600e909152919020555b600854421161112a576040805162461bcd60e51b81526020600482015260096024820152681b9bdd081cdd185c9d60ba1b604482015290519081900360640190fd5b60008211611170576040805162461bcd60e51b815260206004820152600e60248201526d043616e6e6f74207374616b6520360941b604482015290519081900360640190fd5b61117982611600565b60408051838152905133917f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d919081900360200190a25050565b600b5481565b600d5481565b6004546001600160a01b03166111d361158f565b6001600160a01b0316146112185760405162461bcd60e51b8152600401808060200182810382526021815260200180611abb6021913960400191505060405180910390fd5b60006112226112d6565b600c5561122d610eaf565b600b556001600160a01b038116156112745761124881610506565b6001600160a01b0382166000908152600f6020908152604080832093909355600c54600e909152919020555b600954421061129157600654610fe190839063ffffffff61149216565b6009546000906112a7904263ffffffff6113f016565b905060006112c0600a548361143990919063ffffffff16565b905061102e8261056e838763ffffffff6113f016565b60006112e0610653565b6112ed5750600c54610657565b610ebd61131b6112fb610653565b61056e670de0b6b3a7640000610562600a54610562600b5461054d610eaf565b600c549063ffffffff6114d416565b600c5481565b61134161133c33610c51565b610660565b611349610905565b565b60095481565b611359610ee9565b611398576040805162461bcd60e51b81526020600482018190526024820152600080516020611a9b833981519152604482015290519081900360640190fd5b6113a181611662565b50565b6113ac610ee9565b6113eb576040805162461bcd60e51b81526020600482018190526024820152600080516020611a9b833981519152604482015290519081900360640190fd5b600655565b600061143283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611703565b9392505050565b60008261144857506000610586565b8282028284828161145557fe5b04146114325760405162461bcd60e51b8152600401808060200182810382526021815260200180611a7a6021913960400191505060405180910390fd5b600061143283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061179a565b600082820183811015611432576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600154611541908263ffffffff6113f016565b60015533600090815260026020526040902054611564908263ffffffff6113f016565b3360008181526002602052604081209290925590546113a1916001600160a01b039091169083611593565b3390565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526115e59084906117ff565b505050565b60008183106115f95781611432565b5090919050565b600154611613908263ffffffff6114d416565b60015533600090815260026020526040902054611636908263ffffffff6114d416565b3360008181526002602052604081209290925590546113a1916001600160a01b039091169030846119bd565b6001600160a01b0381166116a75760405162461bcd60e51b8152600401808060200182810382526026815260200180611a546026913960400191505060405180910390fd5b6003546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600380546001600160a01b0319166001600160a01b0392909216919091179055565b600081848411156117925760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561175757818101518382015260200161173f565b50505050905090810190601f1680156117845780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836117e95760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561175757818101518382015260200161173f565b5060008385816117f557fe5b0495945050505050565b611811826001600160a01b0316611a17565b611862576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b602083106118a05780518252601f199092019160209182019101611881565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611902576040519150601f19603f3d011682016040523d82523d6000602084013e611907565b606091505b50915091508161195e576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b8051156119b75780806020019051602081101561197a57600080fd5b50516119b75760405162461bcd60e51b815260040180806020018281038252602a815260200180611adc602a913960400191505060405180910390fd5b50505050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526119b79085906117ff565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708115801590611a4b5750808214155b94935050505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657243616c6c6572206973206e6f742072657761726420646973747269627574696f6e5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a265627a7a72315820e583acd03dc7bbb70fa04c5b84ebbea107ab8c8bb68cb295352c537a0a23110e64736f6c63430005110032
Deployed Bytecode Sourcemap
23057:6772:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23057:6772:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25725:265;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25725:265:0;-1:-1:-1;;;;;25725:265:0;;:::i;:::-;;;;;;;;;;;;;;;;24472:102;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24472:102:0;;:::i;:::-;;23657:42;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23657:42:0;-1:-1:-1;;;;;23657:42:0;;:::i;21798:161::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21798:161:0;-1:-1:-1;;;;;21798:161:0;;:::i;22307:91::-;;;:::i;23247:33::-;;;:::i;26291:214::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26291:214:0;;:::i;27031:623::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27031:623:0;;:::i;26618:296::-;;;:::i;24582:216::-;;;:::i;29718:108::-;;;:::i;24181:177::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24181:177:0;-1:-1:-1;;;;;24181:177:0;;:::i;23287:29::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23287:29:0;;:::i;22406:110::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22406:110:0;-1:-1:-1;;;;;22406:110:0;;:::i;10831:140::-;;;:::i;23434:29::-;;;:::i;28990:720::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28990:720:0;;;;;;;:::i;25144:131::-;;;:::i;23593:57::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23593:57:0;-1:-1:-1;;;;;23593:57:0;;:::i;23325:37::-;;;:::i;10020:79::-;;;:::i;:::-;;;;-1:-1:-1;;;;;10020:79:0;;;;;;;;;;;;;;10386:94;;;:::i;:::-;;;;;;;;;;;;;;;;;;27662:656;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27662:656:0;;:::i;23143:71::-;;;:::i;22141:68::-;;;:::i;26081:202::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26081:202:0;;:::i;23470:29::-;;;:::i;23548:38::-;;;:::i;28326:656::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28326:656:0;;:::i;25283:434::-;;;:::i;23506:35::-;;;:::i;26513:97::-;;;:::i;23396:31::-;;;:::i;11126:109::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11126:109:0;-1:-1:-1;;;;;11126:109:0;;:::i;24366:98::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24366:98:0;;:::i;25725:265::-;-1:-1:-1;;;;;25965:16:0;;25779:7;25965:16;;;:7;:16;;;;;;;;;25881:22;:31;;;;;;25819:163;;25965:16;25819:123;;25937:4;;25819:95;;25860:53;;:16;:14;:16::i;:::-;:20;:53;:20;:53;:::i;:::-;25819:18;25829:7;25819:9;:18::i;:::-;:40;:95;:40;:95;:::i;:::-;:117;:123;:117;:123;:::i;:::-;:145;:163;:145;:163;:::i;:::-;25799:183;25725:265;-1:-1:-1;;25725:265:0:o;24472:102::-;10232:9;:7;:9::i;:::-;10224:54;;;;;-1:-1:-1;;;10224:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10224:54:0;;;;;;;;;;;;;;;24544:9;:22;24472:102::o;23657:42::-;;;;;;;;;;;;;:::o;21798:161::-;10232:9;:7;:9::i;:::-;10224:54;;;;;-1:-1:-1;;;10224:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10224:54:0;;;;;;;;;;;;;;;21911:18;:40;;-1:-1:-1;;;;;;21911:40:0;-1:-1:-1;;;;;21911:40:0;;;;;;;;;;21798:161::o;22307:91::-;22378:12;;22307:91;;:::o;23247:33::-;;;;:::o;26291:214::-;26345:10;24879:16;:14;:16::i;:::-;24856:20;:39;24923:26;:24;:26::i;:::-;24906:14;:43;-1:-1:-1;;;;;24964:21:0;;;24960:157;;25021:15;25028:7;25021:6;:15::i;:::-;-1:-1:-1;;;;;25002:16:0;;;;;;:7;:16;;;;;;;;:34;;;;25085:20;;25051:22;:31;;;;;;:54;24960:157;26981:9;;26963:15;:27;26955:48;;;;;-1:-1:-1;;;26955:48:0;;;;;;;;;;;;-1:-1:-1;;;26955:48:0;;;;;;;;;;;;;;;26396:1;26387:6;:10;26379:40;;;;;-1:-1:-1;;;26379:40:0;;;;;;;;;;;;-1:-1:-1;;;26379:40:0;;;;;;;;;;;;;;;26430:22;26445:6;26430:14;:22::i;:::-;26468:29;;;;;;;;26478:10;;26468:29;;;;;;;;;;26291:214;;:::o;27031:623::-;21714:18;;-1:-1:-1;;;;;21714:18:0;21698:12;:10;:12::i;:::-;-1:-1:-1;;;;;21698:34:0;;21690:80;;;;-1:-1:-1;;;21690:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27155:1;24879:16;:14;:16::i;:::-;24856:20;:39;24923:26;:24;:26::i;:::-;24906:14;:43;-1:-1:-1;;;;;24964:21:0;;;24960:157;;25021:15;25028:7;25021:6;:15::i;:::-;-1:-1:-1;;;;;25002:16:0;;;;;;:7;:16;;;;;;;;:34;;;;25085:20;;25051:22;:31;;;;;;:54;24960:157;27198:12;;27179:15;:31;27175:339;;27251:8;;27240:20;;:6;;:20;:10;:20;:::i;:::-;27227:10;:33;27175:339;;;27325:12;;27305:17;;27325:33;;27342:15;27325:33;:16;:33;:::i;:::-;27305:53;;27373:16;27392:25;27406:10;;27392:9;:13;;:25;;;;:::i;:::-;27470:8;;27373:44;;-1:-1:-1;27445:34:0;;:20;:6;27373:44;27445:20;:10;:20;:::i;:34::-;27432:10;:47;-1:-1:-1;;27175:339:0;27541:15;27524:14;:32;;;27602:8;;27582:29;;27541:15;27582:29;:19;:29;:::i;:::-;27567:12;:44;27627:19;;;;;;;;;;;;;;;;;21781:1;27031:623;:::o;26618:296::-;26659:10;24879:16;:14;:16::i;:::-;24856:20;:39;24923:26;:24;:26::i;:::-;24906:14;:43;-1:-1:-1;;;;;24964:21:0;;;24960:157;;25021:15;25028:7;25021:6;:15::i;:::-;-1:-1:-1;;;;;25002:16:0;;;;;;:7;:16;;;;;;;;:34;;;;25085:20;;25051:22;:31;;;;;;:54;24960:157;26981:9;;26963:15;:27;26955:48;;;;;-1:-1:-1;;;26955:48:0;;;;;;;;;;;;-1:-1:-1;;;26955:48:0;;;;;;;;;;;;;;;26693:14;26710:18;26717:10;26710:6;:18::i;:::-;26693:35;-1:-1:-1;26743:10:0;;26739:168;;26778:10;26792:1;26770:19;;;:7;:19;;;;;:23;26808:4;;:37;;-1:-1:-1;;;;;26808:4:0;;;;26838:6;26808:17;:37::i;:::-;26865:30;;;;;;;;26876:10;;26865:30;;;;;;;;;;26739:168;27014:1;26618:296;:::o;24582:216::-;10232:9;:7;:9::i;:::-;10224:54;;;;;-1:-1:-1;;;10224:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10224:54:0;;;;;;;;;;;;;;;24653:4;;:29;;;-1:-1:-1;;;24653:29:0;;24676:4;24653:29;;;;;;24635:15;;-1:-1:-1;;;;;24653:4:0;;:14;;:29;;;;;;;;;;;;;;:4;:29;;;5:2:-1;;;;30:1;27;20:12;5:2;24653:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24653:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24653:29:0;;-1:-1:-1;24693:35:0;24711:7;:5;:7::i;:::-;24693:4;;-1:-1:-1;;;;;24693:4:0;;24720:7;24693:35;:17;:35;:::i;:::-;24766:4;;24744:46;;-1:-1:-1;;;;;24766:4:0;24773:7;:5;:7::i;:::-;24744:46;;;-1:-1:-1;;;;;24744:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10289:1;24582:216::o;29718:108::-;29799:12;:19;29718:108;:::o;24181:177::-;10232:9;:7;:9::i;:::-;10224:54;;;;;-1:-1:-1;;;10224:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10224:54:0;;;;;;;;;;;;;;;24280:1;;-1:-1:-1;;;;;24259:23:0;;;24280:1;;24259:23;;24251:64;;;;;-1:-1:-1;;;24251:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;24326:4;:24;;-1:-1:-1;;;;;;24326:24:0;-1:-1:-1;;;;;24326:24:0;;;;;;;;;;24181:177::o;23287:29::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23287:29:0;:::o;22406:110::-;-1:-1:-1;;;;;22490:18:0;22463:7;22490:18;;;:9;:18;;;;;;;22406:110::o;10831:140::-;10232:9;:7;:9::i;:::-;10224:54;;;;;-1:-1:-1;;;10224:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10224:54:0;;;;;;;;;;;;;;;10914:6;;10893:40;;10930:1;;-1:-1:-1;;;;;10914:6:0;;10893:40;;10930:1;;10893:40;10944:6;:19;;-1:-1:-1;;;;;;10944:19:0;;;10831:140::o;23434:29::-;;;;:::o;28990:720::-;21714:18;;-1:-1:-1;;;;;21714:18:0;21698:12;:10;:12::i;:::-;-1:-1:-1;;;;;21698:34:0;;21690:80;;;;-1:-1:-1;;;21690:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29143:1;24879:16;:14;:16::i;:::-;24856:20;:39;24923:26;:24;:26::i;:::-;24906:14;:43;-1:-1:-1;;;;;24964:21:0;;;24960:157;;25021:15;25028:7;25021:6;:15::i;:::-;-1:-1:-1;;;;;25002:16:0;;;;;;:7;:16;;;;;;;;:34;;;;25085:20;;25051:22;:31;;;;;;:54;24960:157;29163:8;:19;;;29193:12;27:10:-1;;39:1;23:18;;45:23;;-1:-1;29193:25:0;;;;;;;;;29254:12;;29235:15;:31;29231:339;;29296:20;:6;29307:8;29296:20;:10;:20;:::i;:::-;29283:10;:33;29231:339;;;29381:12;;29361:17;;29381:33;;29398:15;29381:33;:16;:33;:::i;:::-;29361:53;;29429:16;29448:25;29462:10;;29448:9;:13;;:25;;;;:::i;:::-;29429:44;-1:-1:-1;29501:34:0;29526:8;29501:20;:6;29429:44;29501:20;:10;:20;:::i;:34::-;29488:10;:47;-1:-1:-1;;29231:339:0;29597:15;29580:14;:32;;;29638:29;;29658:8;29638:29;:19;:29;:::i;:::-;29623:12;:44;29683:19;;;;;;;;;;;;;;;;;21781:1;28990:720;;:::o;25144:131::-;25201:7;25228:39;25237:15;25254:12;;25228:8;:39::i;:::-;25221:46;;25144:131;:::o;23593:57::-;;;;;;;;;;;;;:::o;23325:37::-;;;;:::o;10020:79::-;10085:6;;-1:-1:-1;;;;;10085:6:0;10020:79;:::o;10386:94::-;10466:6;;10426:4;;-1:-1:-1;;;;;10466:6:0;10450:12;:10;:12::i;:::-;-1:-1:-1;;;;;10450:22:0;;10443:29;;10386:94;:::o;27662:656::-;21714:18;;-1:-1:-1;;;;;21714:18:0;21698:12;:10;:12::i;:::-;-1:-1:-1;;;;;21698:34:0;;21690:80;;;;-1:-1:-1;;;21690:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27783:1;24879:16;:14;:16::i;:::-;24856:20;:39;24923:26;:24;:26::i;:::-;24906:14;:43;-1:-1:-1;;;;;24964:21:0;;;24960:157;;25021:15;25028:7;25021:6;:15::i;:::-;-1:-1:-1;;;;;25002:16:0;;;;;;:7;:16;;;;;;;;:34;;;;25085:20;;25051:22;:31;;;;;;:54;24960:157;27826:12;;27807:15;:31;27803:340;;27879:8;;27868:20;;:6;;:20;:10;:20;:::i;:::-;27855:10;:33;27803:340;;;27953:12;;27933:17;;27953:33;;27970:15;27953:33;:16;:33;:::i;:::-;27933:53;;28001:16;28020:25;28034:10;;28020:9;:13;;:25;;;;:::i;:::-;28001:44;-1:-1:-1;28073:35:0;28098:9;28073:20;:6;28001:44;28073:20;:10;:20;:::i;:35::-;28060:10;:48;-1:-1:-1;;27803:340:0;28170:15;28153:14;:32;28291:19;;;;;;;;;;;;;;;;;21781:1;27662:656;:::o;23143:71::-;;;-1:-1:-1;;;;;23143:71:0;;:::o;22141:68::-;;;-1:-1:-1;;;;;22141:68:0;;:::o;26081:202::-;26132:10;24879:16;:14;:16::i;:::-;24856:20;:39;24923:26;:24;:26::i;:::-;24906:14;:43;-1:-1:-1;;;;;24964:21:0;;;24960:157;;25021:15;25028:7;25021:6;:15::i;:::-;-1:-1:-1;;;;;25002:16:0;;;;;;:7;:16;;;;;;;;:34;;;;25085:20;;25051:22;:31;;;;;;:54;24960:157;26981:9;;26963:15;:27;26955:48;;;;;-1:-1:-1;;;26955:48:0;;;;;;;;;;;;-1:-1:-1;;;26955:48:0;;;;;;;;;;;;;;;26183:1;26174:6;:10;26166:37;;;;;-1:-1:-1;;;26166:37:0;;;;;;;;;;;;-1:-1:-1;;;26166:37:0;;;;;;;;;;;;;;;26214:19;26226:6;26214:11;:19::i;:::-;26249:26;;;;;;;;26256:10;;26249:26;;;;;;;;;;26081:202;;:::o;23470:29::-;;;;:::o;23548:38::-;;;;:::o;28326:656::-;21714:18;;-1:-1:-1;;;;;21714:18:0;21698:12;:10;:12::i;:::-;-1:-1:-1;;;;;21698:34:0;;21690:80;;;;-1:-1:-1;;;21690:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28447:1;24879:16;:14;:16::i;:::-;24856:20;:39;24923:26;:24;:26::i;:::-;24906:14;:43;-1:-1:-1;;;;;24964:21:0;;;24960:157;;25021:15;25028:7;25021:6;:15::i;:::-;-1:-1:-1;;;;;25002:16:0;;;;;;:7;:16;;;;;;;;:34;;;;25085:20;;25051:22;:31;;;;;;:54;24960:157;28490:12;;28471:15;:31;28467:340;;28543:8;;28532:20;;:6;;:20;:10;:20;:::i;28467:340::-;28617:12;;28597:17;;28617:33;;28634:15;28617:33;:16;:33;:::i;:::-;28597:53;;28665:16;28684:25;28698:10;;28684:9;:13;;:25;;;;:::i;:::-;28665:44;-1:-1:-1;28737:35:0;28762:9;28737:20;28665:44;28750:6;28737:20;:12;:20;:::i;25283:434::-;25330:7;25354:13;:11;:13::i;:::-;25350:90;;-1:-1:-1;25396:20:0;;25389:27;;25350:90;25470:239;25513:179;25678:13;:11;:13::i;:::-;25513:138;25646:4;25513:106;25608:10;;25513:68;25566:14;;25513:26;:24;:26::i;:179::-;25470:20;;;:239;:24;:239;:::i;23506:35::-;;;;:::o;26513:97::-;26549:31;26558:21;26568:10;26558:9;:21::i;:::-;26549:8;:31::i;:::-;26591:11;:9;:11::i;:::-;26513:97::o;23396:31::-;;;;:::o;11126:109::-;10232:9;:7;:9::i;:::-;10224:54;;;;;-1:-1:-1;;;10224:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10224:54:0;;;;;;;;;;;;;;;11199:28;11218:8;11199:18;:28::i;:::-;11126:109;:::o;24366:98::-;10232:9;:7;:9::i;:::-;10224:54;;;;;-1:-1:-1;;;10224:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10224:54:0;;;;;;;;;;;;;;;24436:8;:20;24366:98::o;3770:136::-;3828:7;3855:43;3859:1;3862;3855:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;3848:50;3770:136;-1:-1:-1;;;3770:136:0:o;4686:471::-;4744:7;4989:6;4985:47;;-1:-1:-1;5019:1:0;5012:8;;4985:47;5056:5;;;5060:1;5056;:5;:1;5080:5;;;;;:10;5072:56;;;;-1:-1:-1;;;5072:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5625:132;5683:7;5710:39;5714:1;5717;5710:39;;;;;;;;;;;;;;;;;:3;:39::i;3314:181::-;3372:7;3404:5;;;3428:6;;;;3420:46;;;;;-1:-1:-1;;;3420:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;22760:212;22827:12;;:24;;22844:6;22827:24;:16;:24;:::i;:::-;22812:12;:39;22896:10;22886:21;;;;:9;:21;;;;;;:33;;22912:6;22886:33;:25;:33;:::i;:::-;22872:10;22862:21;;;;:9;:21;;;;;:57;;;;22930:1;;:34;;-1:-1:-1;;;;;22930:1:0;;;;22957:6;22930:14;:34::i;8769:98::-;8849:10;8769:98;:::o;18247:176::-;18356:58;;;-1:-1:-1;;;;;18356:58:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;18356:58:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;18330:85:0;;18349:5;;18330:18;:85::i;:::-;18247:176;;;:::o;1976:106::-;2034:7;2065:1;2061;:5;:13;;2073:1;2061:13;;;-1:-1:-1;2069:1:0;;1976:106;-1:-1:-1;1976:106:0:o;22524:228::-;22588:12;;:24;;22605:6;22588:24;:16;:24;:::i;:::-;22573:12;:39;22657:10;22647:21;;;;:9;:21;;;;;;:33;;22673:6;22647:33;:25;:33;:::i;:::-;22633:10;22623:21;;;;:9;:21;;;;;:57;;;;22691:1;;:53;;-1:-1:-1;;;;;22691:1:0;;;;22730:4;22737:6;22691:18;:53::i;11341:229::-;-1:-1:-1;;;;;11415:22:0;;11407:73;;;;-1:-1:-1;;;11407:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11517:6;;11496:38;;-1:-1:-1;;;;;11496:38:0;;;;11517:6;;11496:38;;11517:6;;11496:38;11545:6;:17;;-1:-1:-1;;;;;;11545:17:0;-1:-1:-1;;;;;11545:17:0;;;;;;;;;;11341:229::o;4243:192::-;4329:7;4365:12;4357:6;;;;4349:29;;;;-1:-1:-1;;;4349: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;4349:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4401:5:0;;;4243:192::o;6287:345::-;6373:7;6475:12;6468:5;6460:28;;;;-1:-1:-1;;;6460:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;6460:28:0;;6499:9;6515:1;6511;:5;;;;;;;6287:345;-1:-1:-1;;;;;6287:345:0:o;20286:1114::-;20890:27;20898:5;-1:-1:-1;;;;;20890:25:0;;:27::i;:::-;20882:71;;;;;-1:-1:-1;;;20882:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;21027:12;21041:23;21076:5;-1:-1:-1;;;;;21068:19:0;21088:4;21068: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;;;21068: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;;21026:67:0;;;;21112:7;21104:52;;;;;-1:-1:-1;;;21104:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21173:17;;:21;21169:224;;21315:10;21304:30;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21304:30:0;21296:85;;;;-1:-1:-1;;;21296:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20286:1114;;;;:::o;18431:204::-;18558:68;;;-1:-1:-1;;;;;18558:68:0;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;18558:68:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;18532:95:0;;18551:5;;18532:18;:95::i;15085:810::-;15145:4;15804:20;;15647:66;15844:15;;;;;:42;;;15875:11;15863:8;:23;;15844:42;15836:51;15085:810;-1:-1:-1;;;;15085:810:0:o
Swarm Source
bzzr://e583acd03dc7bbb70fa04c5b84ebbea107ab8c8bb68cb295352c537a0a23110e
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
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.