Source Code
Latest 25 from a total of 591 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Withdraw Treasur... | 11507604 | 1892 days ago | IN | 0 ETH | 0.00286429 | ||||
| Withdraw Treasur... | 11505824 | 1892 days ago | IN | 0 ETH | 0.00109835 | ||||
| Withdraw Treasur... | 11505734 | 1892 days ago | IN | 0 ETH | 0.00098398 | ||||
| Withdraw Treasur... | 11505723 | 1892 days ago | IN | 0 ETH | 0.00098398 | ||||
| Withdraw Treasur... | 11505717 | 1892 days ago | IN | 0 ETH | 0.00098439 | ||||
| Withdraw Treasur... | 11505708 | 1892 days ago | IN | 0 ETH | 0.00098439 | ||||
| Withdraw Treasur... | 11505697 | 1892 days ago | IN | 0 ETH | 0.00098192 | ||||
| Withdraw Treasur... | 11505686 | 1892 days ago | IN | 0 ETH | 0.0009848 | ||||
| Withdraw Treasur... | 11505678 | 1892 days ago | IN | 0 ETH | 0.00089528 | ||||
| Withdraw Treasur... | 11505640 | 1892 days ago | IN | 0 ETH | 0.00092416 | ||||
| Withdraw Treasur... | 11505635 | 1892 days ago | IN | 0 ETH | 0.00117541 | ||||
| Withdraw Treasur... | 11505628 | 1892 days ago | IN | 0 ETH | 0.0011759 | ||||
| Withdraw Treasur... | 11505622 | 1892 days ago | IN | 0 ETH | 0.0011759 | ||||
| Withdraw Treasur... | 11505614 | 1892 days ago | IN | 0 ETH | 0.00117639 | ||||
| Withdraw Treasur... | 11505606 | 1892 days ago | IN | 0 ETH | 0.00115616 | ||||
| Withdraw Treasur... | 11505597 | 1892 days ago | IN | 0 ETH | 0.00117688 | ||||
| Withdraw Treasur... | 11505593 | 1892 days ago | IN | 0 ETH | 0.00106944 | ||||
| Withdraw Treasur... | 11505573 | 1892 days ago | IN | 0 ETH | 0.00113512 | ||||
| Withdraw Treasur... | 11505559 | 1892 days ago | IN | 0 ETH | 0.00124049 | ||||
| Withdraw Treasur... | 11505554 | 1892 days ago | IN | 0 ETH | 0.00124338 | ||||
| Withdraw Treasur... | 11505549 | 1892 days ago | IN | 0 ETH | 0.0012996 | ||||
| Withdraw Treasur... | 11505539 | 1892 days ago | IN | 0 ETH | 0.00146543 | ||||
| Withdraw Treasur... | 11505527 | 1892 days ago | IN | 0 ETH | 0.00225451 | ||||
| Withdraw Treasur... | 11505518 | 1892 days ago | IN | 0 ETH | 0.00228341 | ||||
| Withdraw Treasur... | 11505503 | 1892 days ago | IN | 0 ETH | 0.00228436 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
XEARNpoolfive
Compiler Version
v0.5.17+commit.d19bba13
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2020-10-22
*/
/*
*
* 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);
function mint(address account, uint256 amount) external;
/**
* @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 = 0x055bcD37342c77367e4a3591c11C54be198189C3;
function notifyRewardAmount() 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 { //user deposits
using SafeMath for uint256;
using SafeERC20 for IERC20;
address public treasury = 0x640c3064CB05213f9Aebc180795bBD84AaA15a69;
IERC20 public uni_lp_qrx_xrn = IERC20(0xD82183c4E132686Bc460B9D67ce20177fef4FAA2); //mainnet
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);
uni_lp_qrx_xrn.safeTransferFrom(msg.sender, address(this), amount);
}
function withdraw(uint256 amount) public {
_totalSupply = _totalSupply.sub(amount);
_balances[msg.sender] = _balances[msg.sender].sub(amount);
uni_lp_qrx_xrn.safeTransfer(msg.sender, amount);
}
function withdrawTreasury(uint256 amount) public {
_totalSupply = _totalSupply.sub(amount);
_balances[msg.sender] = _balances[msg.sender].sub(amount);
uni_lp_qrx_xrn.safeTransfer(treasury, amount);
}
}
contract XEARNpoolfive is LPTokenWrapper, IRewardDistributionRecipient {
IERC20 public xfi = IERC20(0xe53940db3CE1cCC33375129b6E211b39221035E4); //used as reward
uint256 public EPOCH_REWARD = 909080000000000000000;
uint256 public DURATION = 2 weeks;
uint256 public phase = 1;
uint256 public currentEpochReward = EPOCH_REWARD;
uint256 public totalAccumulatedReward = 0;
uint8 public currentEpoch = 0;
uint256 public starttime = 1603562400; //
uint256 public periodFinish = 0;
uint256 public rewardRate = 0;
uint256 public lastUpdateTime;
uint256 public rewardPerTokenStored;
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 WithdrawnToTreasury(address indexed user, uint256 amount);
event RewardPaid(address indexed user, uint256 reward);
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;
}
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) checkNextEpoch checkStart {
require(amount > 0, "Cannot stake 0");
super.stake(amount);
emit Staked(msg.sender, amount);
}
function withdraw(uint256 amount) checkNextEpoch
public
updateReward(msg.sender)
checkStart
{
require(amount > 0, "Cannot withdraw 0");
uint256 _fee = amount.div(1000).mul(100);
uint256 _amount = amount.sub(_fee);
super.withdraw(_amount);
super.withdrawTreasury(_fee);
emit Withdrawn(msg.sender, _amount);
emit WithdrawnToTreasury(msg.sender,_fee);
}
function totalRewardsClaimed() public view returns (uint256) {
return totalAccumulatedReward;
}
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;
xfi.safeTransfer(msg.sender, reward);
totalAccumulatedReward = totalAccumulatedReward.add(reward);
emit RewardPaid(msg.sender, reward);
}
}
modifier checkNextEpoch() {
if (block.timestamp >= periodFinish) {
phase++;
if(phase == 2) {
DURATION = 4 weeks;
currentEpochReward = 909080000000000000000;
rewardRate = currentEpochReward.div(DURATION);
periodFinish = block.timestamp.add(DURATION);
emit RewardAdded(currentEpochReward);
} else if (phase == 3){
DURATION = 6 weeks;
currentEpochReward = 909120000000000000000;
rewardRate = currentEpochReward.div(DURATION);
periodFinish = block.timestamp.add(DURATION);
emit RewardAdded(currentEpochReward);
} else if (phase == 4){
DURATION = 8 weeks;
currentEpochReward = 909120000000000000000;
rewardRate = currentEpochReward.div(DURATION);
periodFinish = block.timestamp.add(DURATION);
emit RewardAdded(currentEpochReward);
}
else if (phase > 4){
uint256 balance = xfi.balanceOf(address(this));
require(balance > 0,"No more rewards in the contract");
xfi.safeTransfer(owner(), balance);
}
}
_;
}
function afterItEnds() public onlyRewardDistribution {
require(block.timestamp > periodFinish);
uint256 balance = xfi.balanceOf(address(this));
require(balance > 0,"No more rewards in the contract");
xfi.safeTransfer(owner(), balance);
}
modifier checkStart() {
require(block.timestamp > starttime, "not start");
_;
}
function notifyRewardAmount()
external
onlyRewardDistribution
updateReward(address(0))
{
/* if (totalAccumulatedReward.add(currentEpochReward) > TOTAL_REWARD) {
currentEpochReward = TOTAL_REWARD.sub(totalAccumulatedReward); // limit total reward
}*/
rewardRate = currentEpochReward.div(DURATION);
//totalAccumulatedReward = totalAccumulatedReward.add(currentEpochReward);
phase++;
lastUpdateTime = block.timestamp;
periodFinish = starttime.add(DURATION);
emit RewardAdded(currentEpochReward);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WithdrawnToTreasury","type":"event"},{"constant":true,"inputs":[],"name":"DURATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"EPOCH_REWARD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"afterItEnds","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":true,"inputs":[],"name":"currentEpoch","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"currentEpochReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","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":[],"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":[],"name":"notifyRewardAmount","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":true,"inputs":[],"name":"phase","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":"address","name":"_rewardDistribution","type":"address"}],"name":"setRewardDistribution","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":true,"inputs":[],"name":"totalAccumulatedReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalRewardsClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","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":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"uni_lp_qrx_xrn","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","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":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawTreasury","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"xfi","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"}]Contract Creation Code
6080604052600080546001600160a01b031990811673640c3064cb05213f9aebc180795bbd84aaa15a6917825560018054821673d82183c4e132686bc460b9d67ce20177fef4faa217815560058054831673055bcd37342c77367e4a3591c11c54be198189c31790556006805490921673e53940db3ce1ccc33375129b6e211b39221035e41790915568314804f37cdc1c0000600781905562127500600855600991909155600a55600b819055600c805460ff19169055635f946ba0600d55600e819055600f556100d76001600160e01b0361012816565b600480546001600160a01b0319166001600160a01b0392831617908190556040519116906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a361012c565b3390565b6119a08061013b6000396000f3fe608060405234801561001057600080fd5b50600436106102055760003560e01c806380faa57d1161011a578063c8f33c91116100ad578063e68e035b1161007c578063e68e035b14610421578063e9fad8ee14610429578063ebe2b12b14610431578063f2fde38b14610439578063fad68e111461045f57610205565b8063c8f33c9114610401578063cd3daf9d14610409578063d3b6445714610411578063df136d651461041957610205565b80638f32d59b116100e95780638f32d59b146103b8578063a34b0f76146103d4578063a694fc3a146103dc578063b1c9fe6e146103f957610205565b806380faa57d1461037a5780638b876347146103825780638da58897146103a85780638da5cb5b146103b057610205565b8063207e821d1161019d5780636b81e2dc1161016c5780636b81e2dc1461031e57806370a0823114610326578063715018a61461034c57806376671808146103545780637b0a47ee1461037257610205565b8063207e821d146102cd5780632e1a7d4d146102d55780633d18b912146102f257806361d027b3146102fa57610205565b806311f1fc99116101d957806311f1fc991461029857806313eb6c88146102b557806318160ddd146102bd5780631be05289146102c557610205565b80628cc2621461020a5780630700037d146102425780630c51dde4146102685780630d68b76114610272575b600080fd5b6102306004803603602081101561022057600080fd5b50356001600160a01b0316610467565b60408051918252519081900360200190f35b6102306004803603602081101561025857600080fd5b50356001600160a01b03166104ed565b6102706104ff565b005b6102706004803603602081101561028857600080fd5b50356001600160a01b0316610629565b610270600480360360208110156102ae57600080fd5b50356106a4565b610230610711565b610230610717565b61023061071e565b610230610724565b610270600480360360208110156102eb57600080fd5b503561072a565b610270610aba565b610302610be4565b604080516001600160a01b039092168252519081900360200190f35b610302610bf3565b6102306004803603602081101561033c57600080fd5b50356001600160a01b0316610c02565b610270610c1d565b61035c610cc0565b6040805160ff9092168252519081900360200190f35b610230610cc9565b610230610ccf565b6102306004803603602081101561039857600080fd5b50356001600160a01b0316610ce2565b610230610cf4565b610302610cfa565b6103c0610d09565b604080519115158252519081900360200190f35b610230610d2f565b610270600480360360208110156103f257600080fd5b5035610d35565b610230611039565b61023061103f565b610230611045565b610270611099565b6102306111d6565b6102306111dc565b6102706111e2565b6102306111fd565b6102706004803603602081101561044f57600080fd5b50356001600160a01b0316611203565b610302611265565b6001600160a01b03811660009081526013602090815260408083205460129092528220546104e791906104db90670de0b6b3a7640000906104cf906104ba906104ae611045565b9063ffffffff61127416565b6104c388610c02565b9063ffffffff6112bd16565b9063ffffffff61131616565b9063ffffffff61135816565b92915050565b60136020526000908152604090205481565b6005546001600160a01b03166105136113b2565b6001600160a01b0316146105585760405162461bcd60e51b81526004018080602001828103825260218152602001806119216021913960400191505060405180910390fd5b6000610562611045565b60115561056d610ccf565b6010556001600160a01b038116156105b45761058881610467565b6001600160a01b0382166000908152601360209081526040808320939093556011546012909152919020555b600854600a546105c99163ffffffff61131616565b600f5560098054600101905542601055600854600d546105ee9163ffffffff61135816565b600e55600a5460408051918252517fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d9181900360200190a150565b610631610d09565b610682576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6002546106b7908263ffffffff61127416565b600255336000908152600360205260409020546106da908263ffffffff61127416565b336000908152600360205260408120919091555460015461070e916001600160a01b0391821691168363ffffffff6113b616565b50565b60075481565b6002545b90565b60085481565b600b5481565b600e544210610921576009805460010190819055600214156107c1576224ea00600881905568314804f37cdc1c0000600a81905561076d9163ffffffff61131616565b600f5560085461078490429063ffffffff61135816565b600e55600a5460408051918252517fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d9181900360200190a1610921565b600954600314156107f35762375f006008819055683148930f469b200000600a81905561076d9163ffffffff61131616565b60095460041415610825576249d4006008819055683148930f469b200000600a81905561076d9163ffffffff61131616565b6004600954111561092157600654604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561087b57600080fd5b505afa15801561088f573d6000803e3d6000fd5b505050506040513d60208110156108a557600080fd5b50519050806108fb576040805162461bcd60e51b815260206004820152601f60248201527f4e6f206d6f7265207265776172647320696e2074686520636f6e747261637400604482015290519081900360640190fd5b61091f610906610cfa565b6006546001600160a01b0316908363ffffffff6113b616565b505b3361092a611045565b601155610935610ccf565b6010556001600160a01b0381161561097c5761095081610467565b6001600160a01b0382166000908152601360209081526040808320939093556011546012909152919020555b600d5442116109be576040805162461bcd60e51b81526020600482015260096024820152681b9bdd081cdd185c9d60ba1b604482015290519081900360640190fd5b60008211610a07576040805162461bcd60e51b8152602060048201526011602482015270043616e6e6f74207769746864726177203607c1b604482015290519081900360640190fd5b6000610a2060646104c3856103e863ffffffff61131616565b90506000610a34848363ffffffff61127416565b9050610a3f8161140d565b610a48826106a4565b60408051828152905133917f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5919081900360200190a260408051838152905133917fd4a7afb98d7393b9dcc6ed652eee0db7022d73a6a21d66204d021872e12098a4919081900360200190a250505050565b33610ac3611045565b601155610ace610ccf565b6010556001600160a01b03811615610b1557610ae981610467565b6001600160a01b0382166000908152601360209081526040808320939093556011546012909152919020555b600d544211610b57576040805162461bcd60e51b81526020600482015260096024820152681b9bdd081cdd185c9d60ba1b604482015290519081900360640190fd5b6000610b6233610467565b90508015610be05733600081815260136020526040812055600654610b93916001600160a01b0390911690836113b6565b600b54610ba6908263ffffffff61135816565b600b5560408051828152905133917fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e0486919081900360200190a25b5050565b6000546001600160a01b031681565b6001546001600160a01b031681565b6001600160a01b031660009081526003602052604090205490565b610c25610d09565b610c76576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6004546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600480546001600160a01b0319169055565b600c5460ff1681565b600f5481565b6000610cdd42600e5461146f565b905090565b60126020526000908152604090205481565b600d5481565b6004546001600160a01b031690565b6004546000906001600160a01b0316610d206113b2565b6001600160a01b031614905090565b600b5490565b33610d3e611045565b601155610d49610ccf565b6010556001600160a01b03811615610d9057610d6481610467565b6001600160a01b0382166000908152601360209081526040808320939093556011546012909152919020555b600e544210610f6e57600980546001019081905560021415610e27576224ea00600881905568314804f37cdc1c0000600a819055610dd39163ffffffff61131616565b600f55600854610dea90429063ffffffff61135816565b600e55600a5460408051918252517fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d9181900360200190a1610f6e565b60095460031415610e595762375f006008819055683148930f469b200000600a819055610dd39163ffffffff61131616565b60095460041415610e8b576249d4006008819055683148930f469b200000600a819055610dd39163ffffffff61131616565b60046009541115610f6e57600654604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015610ee157600080fd5b505afa158015610ef5573d6000803e3d6000fd5b505050506040513d6020811015610f0b57600080fd5b5051905080610f61576040805162461bcd60e51b815260206004820152601f60248201527f4e6f206d6f7265207265776172647320696e2074686520636f6e747261637400604482015290519081900360640190fd5b610f6c610906610cfa565b505b600d544211610fb0576040805162461bcd60e51b81526020600482015260096024820152681b9bdd081cdd185c9d60ba1b604482015290519081900360640190fd5b60008211610ff6576040805162461bcd60e51b815260206004820152600e60248201526d043616e6e6f74207374616b6520360941b604482015290519081900360640190fd5b610fff82611485565b60408051838152905133917f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d919081900360200190a25050565b60095481565b60105481565b600061104f610717565b61105c575060115461071b565b610cdd61108a61106a610717565b6104cf670de0b6b3a76400006104c3600f546104c36010546104ae610ccf565b6011549063ffffffff61135816565b6005546001600160a01b03166110ad6113b2565b6001600160a01b0316146110f25760405162461bcd60e51b81526004018080602001828103825260218152602001806119216021913960400191505060405180910390fd5b600e54421161110057600080fd5b600654604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561114b57600080fd5b505afa15801561115f573d6000803e3d6000fd5b505050506040513d602081101561117557600080fd5b50519050806111cb576040805162461bcd60e51b815260206004820152601f60248201527f4e6f206d6f7265207265776172647320696e2074686520636f6e747261637400604482015290519081900360640190fd5b61070e610906610cfa565b60115481565b600a5481565b6111f36111ee33610c02565b61072a565b6111fb610aba565b565b600e5481565b61120b610d09565b61125c576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61070e816114e8565b6006546001600160a01b031681565b60006112b683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611589565b9392505050565b6000826112cc575060006104e7565b828202828482816112d957fe5b04146112b65760405162461bcd60e51b81526004018080602001828103825260218152602001806119006021913960400191505060405180910390fd5b60006112b683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611620565b6000828201838110156112b6576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b3390565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611408908490611685565b505050565b600254611420908263ffffffff61127416565b60025533600090815260036020526040902054611443908263ffffffff61127416565b3360008181526003602052604090209190915560015461070e916001600160a01b0390911690836113b6565b600081831061147e57816112b6565b5090919050565b600254611498908263ffffffff61135816565b600255336000908152600360205260409020546114bb908263ffffffff61135816565b3360008181526003602052604090209190915560015461070e916001600160a01b03909116903084611843565b6001600160a01b03811661152d5760405162461bcd60e51b81526004018080602001828103825260268152602001806118da6026913960400191505060405180910390fd5b6004546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600480546001600160a01b0319166001600160a01b0392909216919091179055565b600081848411156116185760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156115dd5781810151838201526020016115c5565b50505050905090810190601f16801561160a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000818361166f5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156115dd5781810151838201526020016115c5565b50600083858161167b57fe5b0495945050505050565b611697826001600160a01b031661189d565b6116e8576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b602083106117265780518252601f199092019160209182019101611707565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611788576040519150601f19603f3d011682016040523d82523d6000602084013e61178d565b606091505b5091509150816117e4576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b80511561183d5780806020019051602081101561180057600080fd5b505161183d5760405162461bcd60e51b815260040180806020018281038252602a815260200180611942602a913960400191505060405180910390fd5b50505050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905261183d908590611685565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081158015906118d15750808214155b94935050505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7743616c6c6572206973206e6f742072657761726420646973747269627574696f6e5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a265627a7a723158201a5996c941a210a811874435d65391860a16ca90578cf939b77a92944549895a64736f6c63430005110032
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102055760003560e01c806380faa57d1161011a578063c8f33c91116100ad578063e68e035b1161007c578063e68e035b14610421578063e9fad8ee14610429578063ebe2b12b14610431578063f2fde38b14610439578063fad68e111461045f57610205565b8063c8f33c9114610401578063cd3daf9d14610409578063d3b6445714610411578063df136d651461041957610205565b80638f32d59b116100e95780638f32d59b146103b8578063a34b0f76146103d4578063a694fc3a146103dc578063b1c9fe6e146103f957610205565b806380faa57d1461037a5780638b876347146103825780638da58897146103a85780638da5cb5b146103b057610205565b8063207e821d1161019d5780636b81e2dc1161016c5780636b81e2dc1461031e57806370a0823114610326578063715018a61461034c57806376671808146103545780637b0a47ee1461037257610205565b8063207e821d146102cd5780632e1a7d4d146102d55780633d18b912146102f257806361d027b3146102fa57610205565b806311f1fc99116101d957806311f1fc991461029857806313eb6c88146102b557806318160ddd146102bd5780631be05289146102c557610205565b80628cc2621461020a5780630700037d146102425780630c51dde4146102685780630d68b76114610272575b600080fd5b6102306004803603602081101561022057600080fd5b50356001600160a01b0316610467565b60408051918252519081900360200190f35b6102306004803603602081101561025857600080fd5b50356001600160a01b03166104ed565b6102706104ff565b005b6102706004803603602081101561028857600080fd5b50356001600160a01b0316610629565b610270600480360360208110156102ae57600080fd5b50356106a4565b610230610711565b610230610717565b61023061071e565b610230610724565b610270600480360360208110156102eb57600080fd5b503561072a565b610270610aba565b610302610be4565b604080516001600160a01b039092168252519081900360200190f35b610302610bf3565b6102306004803603602081101561033c57600080fd5b50356001600160a01b0316610c02565b610270610c1d565b61035c610cc0565b6040805160ff9092168252519081900360200190f35b610230610cc9565b610230610ccf565b6102306004803603602081101561039857600080fd5b50356001600160a01b0316610ce2565b610230610cf4565b610302610cfa565b6103c0610d09565b604080519115158252519081900360200190f35b610230610d2f565b610270600480360360208110156103f257600080fd5b5035610d35565b610230611039565b61023061103f565b610230611045565b610270611099565b6102306111d6565b6102306111dc565b6102706111e2565b6102306111fd565b6102706004803603602081101561044f57600080fd5b50356001600160a01b0316611203565b610302611265565b6001600160a01b03811660009081526013602090815260408083205460129092528220546104e791906104db90670de0b6b3a7640000906104cf906104ba906104ae611045565b9063ffffffff61127416565b6104c388610c02565b9063ffffffff6112bd16565b9063ffffffff61131616565b9063ffffffff61135816565b92915050565b60136020526000908152604090205481565b6005546001600160a01b03166105136113b2565b6001600160a01b0316146105585760405162461bcd60e51b81526004018080602001828103825260218152602001806119216021913960400191505060405180910390fd5b6000610562611045565b60115561056d610ccf565b6010556001600160a01b038116156105b45761058881610467565b6001600160a01b0382166000908152601360209081526040808320939093556011546012909152919020555b600854600a546105c99163ffffffff61131616565b600f5560098054600101905542601055600854600d546105ee9163ffffffff61135816565b600e55600a5460408051918252517fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d9181900360200190a150565b610631610d09565b610682576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6002546106b7908263ffffffff61127416565b600255336000908152600360205260409020546106da908263ffffffff61127416565b336000908152600360205260408120919091555460015461070e916001600160a01b0391821691168363ffffffff6113b616565b50565b60075481565b6002545b90565b60085481565b600b5481565b600e544210610921576009805460010190819055600214156107c1576224ea00600881905568314804f37cdc1c0000600a81905561076d9163ffffffff61131616565b600f5560085461078490429063ffffffff61135816565b600e55600a5460408051918252517fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d9181900360200190a1610921565b600954600314156107f35762375f006008819055683148930f469b200000600a81905561076d9163ffffffff61131616565b60095460041415610825576249d4006008819055683148930f469b200000600a81905561076d9163ffffffff61131616565b6004600954111561092157600654604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561087b57600080fd5b505afa15801561088f573d6000803e3d6000fd5b505050506040513d60208110156108a557600080fd5b50519050806108fb576040805162461bcd60e51b815260206004820152601f60248201527f4e6f206d6f7265207265776172647320696e2074686520636f6e747261637400604482015290519081900360640190fd5b61091f610906610cfa565b6006546001600160a01b0316908363ffffffff6113b616565b505b3361092a611045565b601155610935610ccf565b6010556001600160a01b0381161561097c5761095081610467565b6001600160a01b0382166000908152601360209081526040808320939093556011546012909152919020555b600d5442116109be576040805162461bcd60e51b81526020600482015260096024820152681b9bdd081cdd185c9d60ba1b604482015290519081900360640190fd5b60008211610a07576040805162461bcd60e51b8152602060048201526011602482015270043616e6e6f74207769746864726177203607c1b604482015290519081900360640190fd5b6000610a2060646104c3856103e863ffffffff61131616565b90506000610a34848363ffffffff61127416565b9050610a3f8161140d565b610a48826106a4565b60408051828152905133917f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5919081900360200190a260408051838152905133917fd4a7afb98d7393b9dcc6ed652eee0db7022d73a6a21d66204d021872e12098a4919081900360200190a250505050565b33610ac3611045565b601155610ace610ccf565b6010556001600160a01b03811615610b1557610ae981610467565b6001600160a01b0382166000908152601360209081526040808320939093556011546012909152919020555b600d544211610b57576040805162461bcd60e51b81526020600482015260096024820152681b9bdd081cdd185c9d60ba1b604482015290519081900360640190fd5b6000610b6233610467565b90508015610be05733600081815260136020526040812055600654610b93916001600160a01b0390911690836113b6565b600b54610ba6908263ffffffff61135816565b600b5560408051828152905133917fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e0486919081900360200190a25b5050565b6000546001600160a01b031681565b6001546001600160a01b031681565b6001600160a01b031660009081526003602052604090205490565b610c25610d09565b610c76576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6004546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600480546001600160a01b0319169055565b600c5460ff1681565b600f5481565b6000610cdd42600e5461146f565b905090565b60126020526000908152604090205481565b600d5481565b6004546001600160a01b031690565b6004546000906001600160a01b0316610d206113b2565b6001600160a01b031614905090565b600b5490565b33610d3e611045565b601155610d49610ccf565b6010556001600160a01b03811615610d9057610d6481610467565b6001600160a01b0382166000908152601360209081526040808320939093556011546012909152919020555b600e544210610f6e57600980546001019081905560021415610e27576224ea00600881905568314804f37cdc1c0000600a819055610dd39163ffffffff61131616565b600f55600854610dea90429063ffffffff61135816565b600e55600a5460408051918252517fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d9181900360200190a1610f6e565b60095460031415610e595762375f006008819055683148930f469b200000600a819055610dd39163ffffffff61131616565b60095460041415610e8b576249d4006008819055683148930f469b200000600a819055610dd39163ffffffff61131616565b60046009541115610f6e57600654604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015610ee157600080fd5b505afa158015610ef5573d6000803e3d6000fd5b505050506040513d6020811015610f0b57600080fd5b5051905080610f61576040805162461bcd60e51b815260206004820152601f60248201527f4e6f206d6f7265207265776172647320696e2074686520636f6e747261637400604482015290519081900360640190fd5b610f6c610906610cfa565b505b600d544211610fb0576040805162461bcd60e51b81526020600482015260096024820152681b9bdd081cdd185c9d60ba1b604482015290519081900360640190fd5b60008211610ff6576040805162461bcd60e51b815260206004820152600e60248201526d043616e6e6f74207374616b6520360941b604482015290519081900360640190fd5b610fff82611485565b60408051838152905133917f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d919081900360200190a25050565b60095481565b60105481565b600061104f610717565b61105c575060115461071b565b610cdd61108a61106a610717565b6104cf670de0b6b3a76400006104c3600f546104c36010546104ae610ccf565b6011549063ffffffff61135816565b6005546001600160a01b03166110ad6113b2565b6001600160a01b0316146110f25760405162461bcd60e51b81526004018080602001828103825260218152602001806119216021913960400191505060405180910390fd5b600e54421161110057600080fd5b600654604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561114b57600080fd5b505afa15801561115f573d6000803e3d6000fd5b505050506040513d602081101561117557600080fd5b50519050806111cb576040805162461bcd60e51b815260206004820152601f60248201527f4e6f206d6f7265207265776172647320696e2074686520636f6e747261637400604482015290519081900360640190fd5b61070e610906610cfa565b60115481565b600a5481565b6111f36111ee33610c02565b61072a565b6111fb610aba565b565b600e5481565b61120b610d09565b61125c576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61070e816114e8565b6006546001600160a01b031681565b60006112b683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611589565b9392505050565b6000826112cc575060006104e7565b828202828482816112d957fe5b04146112b65760405162461bcd60e51b81526004018080602001828103825260218152602001806119006021913960400191505060405180910390fd5b60006112b683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611620565b6000828201838110156112b6576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b3390565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611408908490611685565b505050565b600254611420908263ffffffff61127416565b60025533600090815260036020526040902054611443908263ffffffff61127416565b3360008181526003602052604090209190915560015461070e916001600160a01b0390911690836113b6565b600081831061147e57816112b6565b5090919050565b600254611498908263ffffffff61135816565b600255336000908152600360205260409020546114bb908263ffffffff61135816565b3360008181526003602052604090209190915560015461070e916001600160a01b03909116903084611843565b6001600160a01b03811661152d5760405162461bcd60e51b81526004018080602001828103825260268152602001806118da6026913960400191505060405180910390fd5b6004546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600480546001600160a01b0319166001600160a01b0392909216919091179055565b600081848411156116185760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156115dd5781810151838201526020016115c5565b50505050905090810190601f16801561160a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000818361166f5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156115dd5781810151838201526020016115c5565b50600083858161167b57fe5b0495945050505050565b611697826001600160a01b031661189d565b6116e8576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b602083106117265780518252601f199092019160209182019101611707565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611788576040519150601f19603f3d011682016040523d82523d6000602084013e61178d565b606091505b5091509150816117e4576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b80511561183d5780806020019051602081101561180057600080fd5b505161183d5760405162461bcd60e51b815260040180806020018281038252602a815260200180611942602a913960400191505060405180910390fd5b50505050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905261183d908590611685565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081158015906118d15750808214155b94935050505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7743616c6c6572206973206e6f742072657761726420646973747269627574696f6e5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a265627a7a723158201a5996c941a210a811874435d65391860a16ca90578cf939b77a92944549895a64736f6c63430005110032
Deployed Bytecode Sourcemap
24160:5958:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24160:5958:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26113:265;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26113:265:0;-1:-1:-1;;;;;26113:265:0;;:::i;:::-;;;;;;;;;;;;;;;;24867:42;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24867:42:0;-1:-1:-1;;;;;24867:42:0;;:::i;29498:617::-;;;:::i;:::-;;22609:161;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22609:161:0;-1:-1:-1;;;;;22609:161:0;;:::i;23922:231::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23922:231:0;;:::i;24332:52::-;;;:::i;23220:91::-;;;:::i;24391:34::-;;;:::i;24519:41::-;;;:::i;26694:450::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26694:450:0;;:::i;27375:369::-;;;:::i;22956:68::-;;;:::i;:::-;;;;-1:-1:-1;;;;;22956:68:0;;;;;;;;;;;;;;23031:81;;;:::i;23319:110::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23319:110:0;-1:-1:-1;;;;;23319:110:0;;:::i;10593:140::-;;;:::i;24567:29::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24689;;;:::i;25546:131::-;;;:::i;24803:57::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24803:57:0;-1:-1:-1;;;;;24803:57:0;;:::i;24603:37::-;;;:::i;9782:79::-;;;:::i;10148:94::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;27152:109;;;:::i;26469:217::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26469:217:0;;:::i;24432:25::-;;;:::i;24725:29::-;;;:::i;25685:420::-;;;:::i;29100:278::-;;;:::i;24761:35::-;;;:::i;24464:48::-;;;:::i;27269:98::-;;;:::i;24651:31::-;;;:::i;10888:109::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10888:109:0;-1:-1:-1;;;;;10888:109:0;;:::i;24237:70::-;;;:::i;26113:265::-;-1:-1:-1;;;;;26353:16:0;;26167:7;26353:16;;;:7;:16;;;;;;;;;26269:22;:31;;;;;;26207:163;;26353:16;26207:123;;26325:4;;26207:95;;26248:53;;:16;:14;:16::i;:::-;:20;:53;:20;:53;:::i;:::-;26207:18;26217:7;26207:9;:18::i;:::-;:40;:95;:40;:95;:::i;:::-;:117;:123;:117;:123;:::i;:::-;:145;:163;:145;:163;:::i;:::-;26187:183;26113:265;-1:-1:-1;;26113:265:0:o;24867:42::-;;;;;;;;;;;;;:::o;29498:617::-;22502:18;;-1:-1:-1;;;;;22502:18:0;22486:12;:10;:12::i;:::-;-1:-1:-1;;;;;22486:34:0;;22464:117;;;;-1:-1:-1;;;22464:117:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29608:1;25281:16;:14;:16::i;:::-;25258:20;:39;25325:26;:24;:26::i;:::-;25308:14;:43;-1:-1:-1;;;;;25366:21:0;;;25362:157;;25423:15;25430:7;25423:6;:15::i;:::-;-1:-1:-1;;;;;25404:16:0;;;;;;:7;:16;;;;;;;;:34;;;;25487:20;;25453:22;:31;;;;;;:54;25362:157;29857:8;;29834:18;;:32;;;:22;:32;:::i;:::-;29821:10;:45;29961:5;:7;;;;;;29996:15;29979:14;:32;30051:8;;30037:9;;:23;;;:13;:23;:::i;:::-;30022:12;:38;30088:18;;30076:31;;;;;;;;;;;;;;;;22592:1;29498:617::o;22609:161::-;9994:9;:7;:9::i;:::-;9986:54;;;;;-1:-1:-1;;;9986:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22722:18;:40;;-1:-1:-1;;;;;;22722:40:0;-1:-1:-1;;;;;22722:40:0;;;;;;;;;;22609:161::o;23922:231::-;23997:12;;:24;;24014:6;23997:24;:16;:24;:::i;:::-;23982:12;:39;24066:10;24056:21;;;;:9;:21;;;;;;:33;;24082:6;24056:33;:25;:33;:::i;:::-;24042:10;24032:21;;;;:9;:21;;;;;:57;;;;24128:8;;24100:14;:45;;-1:-1:-1;;;;;24100:14:0;;;;24128:8;24138:6;24100:45;:27;:45;:::i;:::-;23922:231;:::o;24332:52::-;;;;:::o;23220:91::-;23291:12;;23220:91;;:::o;24391:34::-;;;;:::o;24519:41::-;;;;:::o;26694:450::-;27822:12;;27803:15;:31;27799:1272;;27851:5;:7;;;;;;;;27885:1;27876:10;27873:1187;;;27918:7;27907:8;:18;;;27965:21;27944:18;:42;;;28018:32;;;:22;:32;:::i;:::-;28005:10;:45;28104:8;;28084:29;;:15;;:29;:19;:29;:::i;:::-;28069:12;:44;28149:18;;28137:31;;;;;;;;;;;;;;;;27873:1187;;;28194:5;;28203:1;28194:10;28190:870;;;28235:7;28224:8;:18;;;28282:21;28261:18;:42;;;28335:32;;;:22;:32;:::i;28190:870::-;28512:5;;28521:1;28512:10;28508:552;;;28553:7;28542:8;:18;;;28600:21;28579:18;:42;;;28653:32;;;:22;:32;:::i;28508:552::-;28850:1;28842:5;;:9;28838:222;;;28889:3;;:28;;;-1:-1:-1;;;28889:28:0;;28911:4;28889:28;;;;;;28871:15;;-1:-1:-1;;;;;28889:3:0;;:13;;:28;;;;;;;;;;;;;;:3;:28;;;5:2:-1;;;;30:1;27;20:12;5:2;28889:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28889:28:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28889:28:0;;-1:-1:-1;28944:11:0;28936:54;;;;;-1:-1:-1;;;28936:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;29010:34;29027:7;:5;:7::i;:::-;29010:3;;-1:-1:-1;;;;;29010:3:0;;29036:7;29010:34;:16;:34;:::i;:::-;28838:222;;26781:10;25281:16;:14;:16::i;:::-;25258:20;:39;25325:26;:24;:26::i;:::-;25308:14;:43;-1:-1:-1;;;;;25366:21:0;;;25362:157;;25423:15;25430:7;25423:6;:15::i;:::-;-1:-1:-1;;;;;25404:16:0;;;;;;:7;:16;;;;;;;;:34;;;;25487:20;;25453:22;:31;;;;;;:54;25362:157;29447:9;;29429:15;:27;29421:49;;;;;-1:-1:-1;;;29421:49:0;;;;;;;;;;;;-1:-1:-1;;;29421:49:0;;;;;;;;;;;;;;;26846:1;26837:6;:10;26829:40;;;;;-1:-1:-1;;;26829:40:0;;;;;;;;;;;;-1:-1:-1;;;26829:40:0;;;;;;;;;;;;;;;26880:12;26895:25;26916:3;26895:16;:6;26906:4;26895:16;:10;:16;:::i;:25::-;26880:40;-1:-1:-1;26931:15:0;26949:16;:6;26880:40;26949:16;:10;:16;:::i;:::-;26931:34;;26976:23;26991:7;26976:14;:23::i;:::-;27010:28;27033:4;27010:22;:28::i;:::-;27054:30;;;;;;;;27064:10;;27054:30;;;;;;;;;;27100:36;;;;;;;;27120:10;;27100:36;;;;;;;;;;29481:1;;29081;26694:450;:::o;27375:369::-;27416:10;25281:16;:14;:16::i;:::-;25258:20;:39;25325:26;:24;:26::i;:::-;25308:14;:43;-1:-1:-1;;;;;25366:21:0;;;25362:157;;25423:15;25430:7;25423:6;:15::i;:::-;-1:-1:-1;;;;;25404:16:0;;;;;;:7;:16;;;;;;;;:34;;;;25487:20;;25453:22;:31;;;;;;:54;25362:157;29447:9;;29429:15;:27;29421:49;;;;;-1:-1:-1;;;29421:49:0;;;;;;;;;;;;-1:-1:-1;;;29421:49:0;;;;;;;;;;;;;;;27450:14;27467:18;27474:10;27467:6;:18::i;:::-;27450:35;-1:-1:-1;27500:10:0;;27496:241;;27535:10;27549:1;27527:19;;;:7;:19;;;;;:23;27565:3;;:36;;-1:-1:-1;;;;;27565:3:0;;;;27594:6;27565:16;:36::i;:::-;27641:22;;:34;;27668:6;27641:34;:26;:34;:::i;:::-;27616:22;:59;27695:30;;;;;;;;27706:10;;27695:30;;;;;;;;;;27496:241;29481:1;27375:369;:::o;22956:68::-;;;-1:-1:-1;;;;;22956:68:0;;:::o;23031:81::-;;;-1:-1:-1;;;;;23031:81:0;;:::o;23319:110::-;-1:-1:-1;;;;;23403:18:0;23376:7;23403:18;;;:9;:18;;;;;;;23319:110::o;10593:140::-;9994:9;:7;:9::i;:::-;9986:54;;;;;-1:-1:-1;;;9986:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10676:6;;10655:40;;10692:1;;-1:-1:-1;;;;;10676:6:0;;10655:40;;10692:1;;10655:40;10706:6;:19;;-1:-1:-1;;;;;;10706:19:0;;;10593:140::o;24567:29::-;;;;;;:::o;24689:::-;;;;:::o;25546:131::-;25603:7;25630:39;25639:15;25656:12;;25630:8;:39::i;:::-;25623:46;;25546:131;:::o;24803:57::-;;;;;;;;;;;;;:::o;24603:37::-;;;;:::o;9782:79::-;9847:6;;-1:-1:-1;;;;;9847:6:0;9782:79;:::o;10148:94::-;10228:6;;10188:4;;-1:-1:-1;;;;;10228:6:0;10212:12;:10;:12::i;:::-;-1:-1:-1;;;;;10212:22:0;;10205:29;;10148:94;:::o;27152:109::-;27231:22;;27152:109;:::o;26469:217::-;26520:10;25281:16;:14;:16::i;:::-;25258:20;:39;25325:26;:24;:26::i;:::-;25308:14;:43;-1:-1:-1;;;;;25366:21:0;;;25362:157;;25423:15;25430:7;25423:6;:15::i;:::-;-1:-1:-1;;;;;25404:16:0;;;;;;:7;:16;;;;;;;;:34;;;;25487:20;;25453:22;:31;;;;;;:54;25362:157;27822:12;;27803:15;:31;27799:1272;;27851:5;:7;;;;;;;;27885:1;27876:10;27873:1187;;;27918:7;27907:8;:18;;;27965:21;27944:18;:42;;;28018:32;;;:22;:32;:::i;:::-;28005:10;:45;28104:8;;28084:29;;:15;;:29;:19;:29;:::i;:::-;28069:12;:44;28149:18;;28137:31;;;;;;;;;;;;;;;;27873:1187;;;28194:5;;28203:1;28194:10;28190:870;;;28235:7;28224:8;:18;;;28282:21;28261:18;:42;;;28335:32;;;:22;:32;:::i;28190:870::-;28512:5;;28521:1;28512:10;28508:552;;;28553:7;28542:8;:18;;;28600:21;28579:18;:42;;;28653:32;;;:22;:32;:::i;28508:552::-;28850:1;28842:5;;:9;28838:222;;;28889:3;;:28;;;-1:-1:-1;;;28889:28:0;;28911:4;28889:28;;;;;;28871:15;;-1:-1:-1;;;;;28889:3:0;;:13;;:28;;;;;;;;;;;;;;:3;:28;;;5:2:-1;;;;30:1;27;20:12;5:2;28889:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28889:28:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28889:28:0;;-1:-1:-1;28944:11:0;28936:54;;;;;-1:-1:-1;;;28936:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;29010:34;29027:7;:5;:7::i;29010:34::-;28838:222;;29447:9;;29429:15;:27;29421:49;;;;;-1:-1:-1;;;29421:49:0;;;;;;;;;;;;-1:-1:-1;;;29421:49:0;;;;;;;;;;;;;;;26586:1;26577:6;:10;26569:37;;;;;-1:-1:-1;;;26569:37:0;;;;;;;;;;;;-1:-1:-1;;;26569:37:0;;;;;;;;;;;;;;;26617:19;26629:6;26617:11;:19::i;:::-;26652:26;;;;;;;;26659:10;;26652:26;;;;;;;;;;26469:217;;:::o;24432:25::-;;;;:::o;24725:29::-;;;;:::o;25685:420::-;25732:7;25756:13;:11;:13::i;:::-;25752:78;;-1:-1:-1;25798:20:0;;25791:27;;25752:78;25860:237;25903:179;26068:13;:11;:13::i;:::-;25903:138;26036:4;25903:106;25998:10;;25903:68;25956:14;;25903:26;:24;:26::i;:179::-;25860:20;;;:237;:24;:237;:::i;29100:278::-;22502:18;;-1:-1:-1;;;;;22502:18:0;22486:12;:10;:12::i;:::-;-1:-1:-1;;;;;22486:34:0;;22464:117;;;;-1:-1:-1;;;22464:117:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29190:12;;29172:15;:30;29164:39;;;;;;29232:3;;:28;;;-1:-1:-1;;;29232:28:0;;29254:4;29232:28;;;;;;29214:15;;-1:-1:-1;;;;;29232:3:0;;:13;;:28;;;;;;;;;;;;;;:3;:28;;;5:2:-1;;;;30:1;27;20:12;5:2;29232:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29232:28:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29232:28:0;;-1:-1:-1;29279:11:0;29271:54;;;;;-1:-1:-1;;;29271:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;29336:34;29353:7;:5;:7::i;24761:35::-;;;;:::o;24464:48::-;;;;:::o;27269:98::-;27306:31;27315:21;27325:10;27315:9;:21::i;:::-;27306:8;:31::i;:::-;27348:11;:9;:11::i;:::-;27269:98::o;24651:31::-;;;;:::o;10888:109::-;9994:9;:7;:9::i;:::-;9986:54;;;;;-1:-1:-1;;;9986:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10961:28;10980:8;10961:18;:28::i;24237:70::-;;;-1:-1:-1;;;;;24237:70:0;;:::o;3406:136::-;3464:7;3491:43;3495:1;3498;3491:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;3484:50;3406:136;-1:-1:-1;;;3406:136:0:o;4356:471::-;4414:7;4659:6;4655:47;;-1:-1:-1;4689:1:0;4682:8;;4655:47;4726:5;;;4730:1;4726;:5;:1;4750:5;;;;;:10;4742:56;;;;-1:-1:-1;;;4742:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5295:132;5353:7;5380:39;5384:1;5387;5380:39;;;;;;;;;;;;;;;;;:3;:39::i;2950:181::-;3008:7;3040:5;;;3064:6;;;;3056:46;;;;;-1:-1:-1;;;3056:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;8507:98;8587:10;8507:98;:::o;18361:247::-;18531:58;;;-1:-1:-1;;;;;18531:58:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;18531:58:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;18478:122:0;;18511:5;;18478:18;:122::i;:::-;18361:247;;;:::o;23686:225::-;23753:12;;:24;;23770:6;23753:24;:16;:24;:::i;:::-;23738:12;:39;23822:10;23812:21;;;;:9;:21;;;;;;:33;;23838:6;23812:33;:25;:33;:::i;:::-;23798:10;23788:21;;;;:9;:21;;;;;:57;;;;23856:14;;:47;;-1:-1:-1;;;;;23856:14:0;;;;23896:6;23856:27;:47::i;1608:106::-;1666:7;1697:1;1693;:5;:13;;1705:1;1693:13;;;-1:-1:-1;1701:1:0;;1608:106;-1:-1:-1;1608:106:0:o;23437:241::-;23501:12;;:24;;23518:6;23501:24;:16;:24;:::i;:::-;23486:12;:39;23570:10;23560:21;;;;:9;:21;;;;;;:33;;23586:6;23560:33;:25;:33;:::i;:::-;23546:10;23536:21;;;;:9;:21;;;;;:57;;;;23604:14;;:66;;-1:-1:-1;;;;;23604:14:0;;;;23656:4;23663:6;23604:31;:66::i;11103:266::-;-1:-1:-1;;;;;11191:22:0;;11169:110;;;;-1:-1:-1;;;11169:110:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11316:6;;11295:38;;-1:-1:-1;;;;;11295:38:0;;;;11316:6;;11295:38;;11316:6;;11295:38;11344:6;:17;;-1:-1:-1;;;;;;11344:17:0;-1:-1:-1;;;;;11344:17:0;;;;;;;;;;11103:266::o;3879:226::-;3999:7;4035:12;4027:6;;;;4019:29;;;;-1:-1:-1;;;4019: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;4019:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4071:5:0;;;3879:226::o;5957:379::-;6077:7;6179:12;6172:5;6164:28;;;;-1:-1:-1;;;6164:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;6164:28:0;;6203:9;6219:1;6215;:5;;;;;;;5957:379;-1:-1:-1;;;;;5957:379:0:o;20971:1176::-;21575:27;21583:5;-1:-1:-1;;;;;21575:25:0;;:27::i;:::-;21567:71;;;;;-1:-1:-1;;;21567:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;21712:12;21726:23;21761:5;-1:-1:-1;;;;;21753:19:0;21773:4;21753: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;;;21753: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;;21711:67:0;;;;21797:7;21789:52;;;;;-1:-1:-1;;;21789:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21858:17;;:21;21854:286;;22031:10;22020:30;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22020:30:0;21994:134;;;;-1:-1:-1;;;21994:134:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20971:1176;;;;:::o;18616:284::-;18813:68;;;-1:-1:-1;;;;;18813:68:0;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;18813:68:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;18760:132:0;;18793:5;;18760:18;:132::i;15061:848::-;15121:4;15809:20;;15639:66;15858:15;;;;;:42;;;15889:11;15877:8;:23;;15858:42;15850:51;15061:848;-1:-1:-1;;;;15061:848:0:o
Swarm Source
bzzr://1a5996c941a210a811874435d65391860a16ca90578cf939b77a92944549895a
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.