More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 383 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Exit | 18626493 | 437 days ago | IN | 0 ETH | 0.00263061 | ||||
Exit | 16387473 | 752 days ago | IN | 0 ETH | 0.00223942 | ||||
Exit | 15913375 | 818 days ago | IN | 0 ETH | 0.00126789 | ||||
Exit | 15883823 | 822 days ago | IN | 0 ETH | 0.00165538 | ||||
Exit | 15219393 | 921 days ago | IN | 0 ETH | 0.00256521 | ||||
Exit | 15192059 | 925 days ago | IN | 0 ETH | 0.00105882 | ||||
Exit | 15076231 | 943 days ago | IN | 0 ETH | 0.00281852 | ||||
Exit | 15066168 | 945 days ago | IN | 0 ETH | 0.00075435 | ||||
Exit | 14826344 | 986 days ago | IN | 0 ETH | 0.00459098 | ||||
Exit | 14379422 | 1056 days ago | IN | 0 ETH | 0.00316537 | ||||
Exit | 14366821 | 1058 days ago | IN | 0 ETH | 0.00552717 | ||||
Exit | 14320393 | 1065 days ago | IN | 0 ETH | 0.00253651 | ||||
Exit | 14149412 | 1092 days ago | IN | 0 ETH | 0.00589142 | ||||
Exit | 14079189 | 1103 days ago | IN | 0 ETH | 0.01392029 | ||||
Exit | 13916446 | 1128 days ago | IN | 0 ETH | 0.00855039 | ||||
Exit | 13884343 | 1133 days ago | IN | 0 ETH | 0.00669698 | ||||
Exit | 13865904 | 1136 days ago | IN | 0 ETH | 0.00473199 | ||||
Exit | 13804112 | 1145 days ago | IN | 0 ETH | 0.00764408 | ||||
Exit | 13803345 | 1145 days ago | IN | 0 ETH | 0.005362 | ||||
Exit | 13796772 | 1146 days ago | IN | 0 ETH | 0.0033619 | ||||
Stake | 13795488 | 1147 days ago | IN | 0 ETH | 0.00264303 | ||||
Exit | 13777054 | 1149 days ago | IN | 0 ETH | 0.00547663 | ||||
Exit | 13764129 | 1151 days ago | IN | 0 ETH | 0.00827827 | ||||
Exit | 13747564 | 1154 days ago | IN | 0 ETH | 0.01116661 | ||||
Exit | 13727583 | 1157 days ago | IN | 0 ETH | 0.00802332 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
RewardPool
Compiler Version
v0.6.2+commit.bacdbe57
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-08-01 */ /** *Submitted for verification at Etherscan.io on 2021-07-02 */ // Sources flattened with hardhat v2.4.1 https://hardhat.org // File @openzeppelin/contracts/math/[email protected] // SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.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/token/ERC20/[email protected] // SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ 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/[email protected] // SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.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. */ abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual 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/access/[email protected] // SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.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. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { 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 virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File contracts/IRewardDistributionRecipient.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.2; abstract contract IRewardDistributionRecipient is Ownable { address rewardDistribution; function notifyRewardAmount(uint256 reward) external virtual; modifier onlyRewardDistribution() { require(_msgSender() == rewardDistribution, "Caller is not reward distribution"); _; } function setRewardDistribution(address _rewardDistribution) public /* external */ onlyOwner { rewardDistribution = _rewardDistribution; } } // File @openzeppelin/contracts/math/[email protected] // SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.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, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b > a) return (false, 0); return (true, a - b); } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a / b); } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a % b); } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) return 0; uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: division by zero"); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: modulo by zero"); return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); return a - b; } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryDiv}. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a % b; } } // File @openzeppelin/contracts/utils/[email protected] // SPDX-License-Identifier: MIT pragma solidity >=0.6.2 <0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File @openzeppelin/contracts/token/ERC20/[email protected] // SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.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 IERC20;` 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)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ 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. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File contracts/LPTokenWrapper.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.2; contract LPTokenWrapper { using SafeMath for uint256; using SafeERC20 for IERC20; IERC20 public stakeToken; 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 virtual { _totalSupply = _totalSupply.add(amount); _balances[msg.sender] = _balances[msg.sender].add(amount); stakeToken.safeTransferFrom(msg.sender, address(this), amount); } function withdraw(uint256 amount) public virtual { _totalSupply = _totalSupply.sub(amount); _balances[msg.sender] = _balances[msg.sender].sub(amount); stakeToken.safeTransfer(msg.sender, amount); } } // File contracts/interfaces/IEmiswap.sol // SPDX-License-Identifier: UNLICENSED pragma solidity ^0.6.2; interface IEmiswapRegistry { function pools(IERC20 token1, IERC20 token2) external view returns (IEmiswap); function isPool(address addr) external view returns (bool); function deploy(IERC20 tokenA, IERC20 tokenB) external returns (IEmiswap); function getAllPools() external view returns (IEmiswap[] memory); } interface IEmiswap { function fee() external view returns (uint256); function tokens(uint256 i) external view returns (IERC20); function deposit( uint256[] calldata amounts, uint256[] calldata minAmounts, address referral ) external payable returns (uint256 fairSupply); function withdraw(uint256 amount, uint256[] calldata minReturns) external; function getBalanceForAddition(IERC20 token) external view returns (uint256); function getBalanceForRemoval(IERC20 token) external view returns (uint256); function getReturn( IERC20 fromToken, IERC20 destToken, uint256 amount ) external view returns (uint256, uint256); function swap( IERC20 fromToken, IERC20 destToken, uint256 amount, uint256 minReturn, address to, address referral ) external payable returns (uint256 returnAmount); function initialize(IERC20[] calldata assets) external; } // File contracts/libraries/EmiswapLib.sol // SPDX-License-Identifier: UNLICENSED pragma solidity ^0.6.2; library EmiswapLib { using SafeMath for uint256; uint256 public constant FEE_DENOMINATOR = 1e18; function previewSwapExactTokenForToken( address factory, address tokenFrom, address tokenTo, uint256 ammountFrom ) internal view returns (uint256 ammountTo) { IEmiswap pairContract = IEmiswapRegistry(factory).pools(IERC20(tokenFrom), IERC20(tokenTo)); if (pairContract != IEmiswap(0)) { (, ammountTo) = pairContract.getReturn(IERC20(tokenFrom), IERC20(tokenTo), ammountFrom); } } /************************************************************************************** * get preview result of virtual swap by route of tokens **************************************************************************************/ function previewSwapbyRoute( address factory, address[] memory path, uint256 ammountFrom ) internal view returns (uint256 ammountTo) { for (uint256 i = 0; i < path.length - 1; i++) { if (path.length >= 2) { ammountTo = previewSwapExactTokenForToken(factory, path[i], path[i + 1], ammountFrom); if (i == (path.length - 2)) { return (ammountTo); } else { ammountFrom = ammountTo; } } } } function fee(address factory) internal view returns (uint256) { return IEmiswap(factory).fee(); } // given an output amount of an asset and pair reserves, returns a required input amount of the other asset function getAmountIn( address factory, uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) internal view returns (uint256 amountIn) { require(amountOut > 0, "EmiswapLibrary: INSUFFICIENT_OUTPUT_AMOUNT"); require(reserveIn > 0 && reserveOut > 0, "EmiswapLibrary: INSUFFICIENT_LIQUIDITY"); uint256 numerator = reserveIn.mul(amountOut).mul(1000); uint256 denominator = reserveOut.sub(amountOut).mul(uint256(1000000000000000000).sub(fee(factory)).div(1e15)); // 997 amountIn = (numerator / denominator).add(1); } // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset function getAmountOut( address factory, uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) internal view returns (uint256 amountOut) { if (amountIn == 0 || reserveIn == 0 || reserveOut == 0) { return (0); } uint256 amountInWithFee = amountIn.mul(uint256(1000000000000000000).sub(fee(factory)).div(1e15)); //997 uint256 numerator = amountInWithFee.mul(reserveOut); uint256 denominator = reserveIn.mul(1000).add(amountInWithFee); amountOut = (denominator == 0 ? 0 : amountOut = numerator / denominator); } // performs chained getAmountIn calculations on any number of pairs function getAmountsIn( address factory, uint256 amountOut, address[] memory path ) internal view returns (uint256[] memory amounts) { require(path.length >= 2, "EmiswapLibrary: INVALID_PATH"); amounts = new uint256[](path.length); amounts[amounts.length - 1] = amountOut; for (uint256 i = path.length - 1; i > 0; i--) { IEmiswap pairContract = IEmiswapRegistry(factory).pools(IERC20(IERC20(path[i])), IERC20(path[i - 1])); uint256 reserveIn; uint256 reserveOut; if (address(pairContract) != address(0)) { reserveIn = IEmiswap(pairContract).getBalanceForAddition(IERC20(path[i - 1])); reserveOut = IEmiswap(pairContract).getBalanceForRemoval(IERC20(path[i])); } amounts[i - 1] = getAmountIn(factory, amounts[i], reserveIn, reserveOut); } } // performs chained getAmountOut calculations on any number of pairs function getAmountsOut( address factory, uint256 amountIn, address[] memory path ) internal view returns (uint256[] memory amounts) { require(path.length >= 2, "EmiswapLibrary: INVALID_PATH"); amounts = new uint256[](path.length); amounts[0] = amountIn; for (uint256 i = 0; i < path.length - 1; i++) { IEmiswap pairContract = IEmiswapRegistry(factory).pools(IERC20(IERC20(path[i])), IERC20(path[i + 1])); uint256 reserveIn; uint256 reserveOut; if (address(pairContract) != address(0)) { reserveIn = IEmiswap(pairContract).getBalanceForAddition(IERC20(path[i])); reserveOut = IEmiswap(pairContract).getBalanceForRemoval(IERC20(path[i + 1])); } amounts[i + 1] = getAmountOut(factory, amounts[i], reserveIn, reserveOut); } } // given some amount of an asset and pair reserves, returns an equivalent amount of the other asset function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) internal pure returns (uint256 amountB) { require(amountA > 0, "EmiswapLibrary: INSUFFICIENT_AMOUNT"); require(reserveA > 0 && reserveB > 0, "EmiswapLibrary: INSUFFICIENT_LIQUIDITY"); amountB = amountA.mul(reserveB) / reserveA; } } // File contracts/RewardPool.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.2; contract RewardPool is LPTokenWrapper, IRewardDistributionRecipient { address public emiFactory; uint256 public totalStakeLimit; // max value in USD coin (last in route), rememeber decimals! address[] public route; uint8 marketID; uint8 id; IERC20 public rewardToken; uint256 public minPriceAmount; uint256 public constant DURATION = 90 days; uint256 public periodFinish = 0; uint256 public periodStop = 0; uint256 public rewardRate = 0; uint256 public lastUpdateTime; uint256 public rewardPerTokenStored; uint256 public tokenMode; // 0 = simple ERC20 token, 1 = Emiswap LP-token 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); constructor( address _rewardToken, address _stakeToken, address rewardAdmin, uint256 _tokenMode, uint256 _totalStakeLimit, uint256 _minPriceAmount ) public { rewardToken = IERC20(_rewardToken); stakeToken = IERC20(_stakeToken); setRewardDistribution(rewardAdmin); tokenMode = _tokenMode; totalStakeLimit = _totalStakeLimit; minPriceAmount = _minPriceAmount; } modifier updateReward(address account) { rewardPerTokenStored = rewardPerToken(); lastUpdateTime = lastTimeRewardApplicable(); if (account != address(0)) { rewards[account] = earned(account); userRewardPerTokenPaid[account] = rewardPerTokenStored; } _; } function setEmiPriceData(address _emiFactory, address[] memory _route) public onlyOwner { if (emiFactory != _emiFactory) { emiFactory = _emiFactory; } if (route.length > 0) { delete route; } for (uint256 index = 0; index < _route.length; index++) { route.push(_route[index]); } } function setTotalStakeLimit(uint256 _totalStakeLimit) public onlyOwner { require(totalStakeLimit != _totalStakeLimit); totalStakeLimit = _totalStakeLimit; } function setMinPriceAmount(uint256 newMinPriceAmount) public onlyOwner { minPriceAmount = newMinPriceAmount; } 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] ); } function stake(uint256 amount) public override updateReward(msg.sender) { require(amount > 0, "Cannot stake 0"); require(block.timestamp <= periodFinish && block.timestamp <= periodStop, "Cannot stake yet"); super.stake(amount); (, uint256 totalStake) = getStakedValuesinUSD(msg.sender); require(totalStake <= totalStakeLimit, "Limit exceeded"); emit Staked(msg.sender, amount); } function withdraw(uint256 amount) public override updateReward(msg.sender) { 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) { uint256 reward = earned(msg.sender); if (reward > 0) { rewards[msg.sender] = 0; rewardToken.safeTransfer(msg.sender, reward); emit RewardPaid(msg.sender, reward); } } // use it after create and approve of reward token function notifyRewardAmount(uint256 reward) external override onlyRewardDistribution updateReward(address(0)) { if (block.timestamp >= periodFinish) { rewardRate = reward.div(DURATION); } 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); periodStop = periodFinish; rewardToken.safeTransferFrom(msg.sender, address(this), reward); emit RewardAdded(reward); } function setPeriodStop(uint256 _periodStop) external onlyRewardDistribution { require(periodStop <= periodFinish, "Incorrect stop"); periodStop = _periodStop; } function getStakedValuesinUSD(address wallet) public view returns (uint256 senderStake, uint256 totalStake) { uint256 price = getAmountOut(minPriceAmount, route); /*1e18 default value of ESW, first of route always ESW*/ // simple ERC-20 if (tokenMode == 0) { senderStake = balanceOf(wallet).mul(price).div(minPriceAmount); totalStake = totalSupply().mul(price).div(minPriceAmount); } if (tokenMode == 1) { /*uint256 lpFractionWallet = balanceOf(wallet).mul(1e18).div(stakeToken.totalSupply()); uint256 lpFractionTotal = totalSupply().mul(1e18).div(stakeToken.totalSupply()); uint256 ESWreserveWallet = IEmiswap(address(stakeToken)).getBalanceForAddition( IERC20(route[0]) ).mul(2).mul(lpFractionWallet).div(1e18); uint256 ESWreserveTotal = IEmiswap(address(stakeToken)).getBalanceForAddition( IERC20(route[0]) ).mul(2).mul(lpFractionTotal).div(1e18); senderStake = ESWreserveWallet.mul(price).div(minPriceAmount); totalStake = ESWreserveTotal.mul(price).div(minPriceAmount);*/ senderStake = IEmiswap(address(stakeToken)) .getBalanceForAddition(IERC20(route[0])) .mul(2) .mul(balanceOf(wallet).mul(1e18).div(stakeToken.totalSupply())) .div(1e18) .mul(price) .div(minPriceAmount); totalStake = IEmiswap(address(stakeToken)) .getBalanceForAddition(IERC20(route[0])) .mul(2) .mul(totalSupply().mul(1e18).div(stakeToken.totalSupply())) .div(1e18) .mul(price) .div(minPriceAmount); } } function getAmountOut(uint256 amountIn, address[] memory path) public view returns (uint256) { return EmiswapLib.getAmountsOut(emiFactory, amountIn, path)[path.length - 1]; } // ------------------------------------------------------------------------ // // ------------------------------------------------------------------------ /** * @dev Owner can transfer out any accidentally sent ERC20 tokens * @param tokenAddress Address of ERC-20 token to transfer * @param beneficiary Address to transfer to * @param amount of tokens to transfer */ function transferAnyERC20Token( address tokenAddress, address beneficiary, uint256 amount ) public onlyOwner returns (bool success) { require(tokenAddress != address(0), "address 0!"); require(tokenAddress != address(stakeToken), "not staketoken"); return IERC20(tokenAddress).transfer(beneficiary, amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_rewardToken","type":"address"},{"internalType":"address","name":"_stakeToken","type":"address"},{"internalType":"address","name":"rewardAdmin","type":"address"},{"internalType":"uint256","name":"_tokenMode","type":"uint256"},{"internalType":"uint256","name":"_totalStakeLimit","type":"uint256"},{"internalType":"uint256","name":"_minPriceAmount","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"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"},{"inputs":[],"name":"DURATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"earned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emiFactory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"exit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"getStakedValuesinUSD","outputs":[{"internalType":"uint256","name":"senderStake","type":"uint256"},{"internalType":"uint256","name":"totalStake","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastTimeRewardApplicable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastUpdateTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minPriceAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"reward","type":"uint256"}],"name":"notifyRewardAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"periodFinish","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"periodStop","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardPerToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPerTokenStored","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"route","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_emiFactory","type":"address"},{"internalType":"address[]","name":"_route","type":"address[]"}],"name":"setEmiPriceData","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMinPriceAmount","type":"uint256"}],"name":"setMinPriceAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_periodStop","type":"uint256"}],"name":"setPeriodStop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_rewardDistribution","type":"address"}],"name":"setRewardDistribution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_totalStakeLimit","type":"uint256"}],"name":"setTotalStakeLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakeToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenMode","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStakeLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"beneficiary","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferAnyERC20Token","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userRewardPerTokenPaid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526000600a556000600b556000600c553480156200002057600080fd5b50604051620023f2380380620023f2833981810160405260c08110156200004657600080fd5b508051602082015160408301516060840151608085015160a09095015193949293919290916000620000806001600160e01b036200013016565b600380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506008805462010000600160b01b031916620100006001600160a01b038981169190910291909117909155600080546001600160a01b0319169187169190911790556200011a8462000134565b600f9290925560065560095550620001f0915050565b3390565b620001476001600160e01b036200013016565b6001600160a01b0316620001636001600160e01b03620001e116565b6001600160a01b031614620001bf576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6003546001600160a01b031690565b6121f280620002006000396000f3fe608060405234801561001057600080fd5b506004361061021b5760003560e01c806380faa57d11610125578063cd3daf9d116100ad578063e9fad8ee1161007c578063e9fad8ee14610622578063ebe2b12b1461062a578063f2fde38b14610632578063f7c618c114610658578063f99c2f29146106605761021b565b8063cd3daf9d146105ab578063d493b9ac146105b3578063da768c27146105fd578063df136d651461061a5761021b565b80639ccba919116100f45780639ccba919146104b7578063a694fc3a146104bf578063b8239ebb146104dc578063b980c78f14610586578063c8f33c91146105a35761021b565b806380faa57d146104795780638b876347146104815780638da5cb5b146104a757806393ae18ac146104af5761021b565b80633963f1f1116101a857806351ed6a301161017757806351ed6a301461041e57806368ba51121461042657806370a0823114610443578063715018a6146104695780637b0a47ee146104715761021b565b80633963f1f11461033e5780633c6b16ab146103465780633d18b91214610363578063460470d01461036b5761021b565b80630d68b761116101ef5780630d68b761146102c557806318160ddd146102ed5780631be05289146102f55780632e1a7d4d146102fd578063373e7a6e1461031a5761021b565b80628cc26214610220578063017b7d2a146102585780630700037d146102605780630cedec5314610286575b600080fd5b6102466004803603602081101561023657600080fd5b50356001600160a01b031661067d565b60408051918252519081900360200190f35b610246610703565b6102466004803603602081101561027657600080fd5b50356001600160a01b0316610709565b6102ac6004803603602081101561029c57600080fd5b50356001600160a01b031661071b565b6040805192835260208301919091528051918290030190f35b6102eb600480360360208110156102db57600080fd5b50356001600160a01b03166109d4565b005b610246610a58565b610246610a5f565b6102eb6004803603602081101561031357600080fd5b5035610a66565b610322610b4d565b604080516001600160a01b039092168252519081900360200190f35b610246610b5c565b6102eb6004803603602081101561035c57600080fd5b5035610b62565b6102eb610cff565b6102eb6004803603604081101561038157600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156103ac57600080fd5b8201836020820111156103be57600080fd5b803590602001918460208302840111640100000000831117156103e057600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610ddc945050505050565b610322610ee7565b6102eb6004803603602081101561043c57600080fd5b5035610ef6565b6102466004803603602081101561045957600080fd5b50356001600160a01b0316610f6c565b6102eb610f87565b610246611033565b610246611039565b6102466004803603602081101561049757600080fd5b50356001600160a01b031661104c565b61032261105e565b61024661106d565b610246611073565b6102eb600480360360208110156104d557600080fd5b5035611079565b610246600480360360408110156104f257600080fd5b8135919081019060408101602082013564010000000081111561051457600080fd5b82018360208201111561052657600080fd5b8035906020019184602083028401116401000000008311171561054857600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061120c945050505050565b6103226004803603602081101561059c57600080fd5b5035611245565b61024661126c565b610246611272565b6105e9600480360360608110156105c957600080fd5b506001600160a01b038135811691602081013590911690604001356112c6565b604080519115158252519081900360200190f35b6102eb6004803603602081101561061357600080fd5b503561145c565b6102466114c3565b6102eb6114c9565b6102466114e4565b6102eb6004803603602081101561064857600080fd5b50356001600160a01b03166114ea565b6103226115ed565b6102eb6004803603602081101561067657600080fd5b5035611602565b6001600160a01b03811660009081526011602090815260408083205460109092528220546106fd91906106f190670de0b6b3a7640000906106e5906106d0906106c4611272565b9063ffffffff6116aa16565b6106d988610f6c565b9063ffffffff61170716565b9063ffffffff61176016565b9063ffffffff6117c716565b92915050565b60095481565b60116020526000908152604090205481565b6000806000610786600954600780548060200260200160405190810160405280929190818152602001828054801561077c57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161075e575b505050505061120c565b9050600f54600014156107bd576107a66009546106e5836106d988610f6c565b92506107ba6009546106e5836106d9610a58565b91505b600f54600114156109ce576109206009546106e5836106d9670de0b6b3a76400006106e56108726000809054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561083157600080fd5b505afa158015610845573d6000803e3d6000fd5b505050506040513d602081101561085b57600080fd5b50516106e5670de0b6b3a76400006106d98f610f6c565b60008054600780546106d9936002936001600160a01b03169263d7d3aab59290919061089a57fe5b60009182526020918290200154604080516001600160e01b031960e086901b1681526001600160a01b0390921660048301525160248083019392829003018186803b1580156108e857600080fd5b505afa1580156108fc573d6000803e3d6000fd5b505050506040513d602081101561091257600080fd5b50519063ffffffff61170716565b92506109cb6009546106e5836106d9670de0b6b3a76400006106e56108726000809054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561098b57600080fd5b505afa15801561099f573d6000803e3d6000fd5b505050506040513d60208110156109b557600080fd5b50516106e5670de0b6b3a76400006106d9610a58565b91505b50915091565b6109dc611821565b6001600160a01b03166109ed61105e565b6001600160a01b031614610a36576040805162461bcd60e51b81526020600482018190526024820152600080516020612152833981519152604482015290519081900360640190fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6001545b90565b6276a70081565b33610a6f611272565b600e55610a7a611039565b600d556001600160a01b03811615610ac157610a958161067d565b6001600160a01b038216600090815260116020908152604080832093909355600e546010909152919020555b60008211610b0a576040805162461bcd60e51b8152602060048201526011602482015270043616e6e6f74207769746864726177203607c1b604482015290519081900360640190fd5b610b1382611825565b60408051838152905133917f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5919081900360200190a25050565b6005546001600160a01b031681565b600f5481565b6004546001600160a01b0316610b76611821565b6001600160a01b031614610bbb5760405162461bcd60e51b81526004018080602001828103825260218152602001806121726021913960400191505060405180910390fd5b6000610bc5611272565b600e55610bd0611039565b600d556001600160a01b03811615610c1757610beb8161067d565b6001600160a01b038216600090815260116020908152604080832093909355600e546010909152919020555b600a544210610c3b57610c33826276a70063ffffffff61176016565b600c55610c89565b600a54600090610c51904263ffffffff6116aa16565b90506000610c6a600c548361170790919063ffffffff16565b9050610c836276a7006106e5868463ffffffff6117c716565b600c5550505b42600d819055610ca2906276a70063ffffffff6117c716565b600a819055600b55600854610cc8906201000090046001600160a01b0316333085611889565b6040805183815290517fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d9181900360200190a15050565b33610d08611272565b600e55610d13611039565b600d556001600160a01b03811615610d5a57610d2e8161067d565b6001600160a01b038216600090815260116020908152604080832093909355600e546010909152919020555b6000610d653361067d565b90508015610dd85733600081815260116020526040812055600854610da191620100009091046001600160a01b0316908363ffffffff6118e916565b60408051828152905133917fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e0486919081900360200190a25b5050565b610de4611821565b6001600160a01b0316610df561105e565b6001600160a01b031614610e3e576040805162461bcd60e51b81526020600482018190526024820152600080516020612152833981519152604482015290519081900360640190fd5b6005546001600160a01b03838116911614610e6f57600580546001600160a01b0319166001600160a01b0384161790555b60075415610e8357610e83600760006120ad565b60005b8151811015610ee2576007828281518110610e9d57fe5b60209081029190910181015182546001808201855560009485529290932090920180546001600160a01b0319166001600160a01b039093169290921790915501610e86565b505050565b6000546001600160a01b031681565b610efe611821565b6001600160a01b0316610f0f61105e565b6001600160a01b031614610f58576040805162461bcd60e51b81526020600482018190526024820152600080516020612152833981519152604482015290519081900360640190fd5b806006541415610f6757600080fd5b600655565b6001600160a01b031660009081526002602052604090205490565b610f8f611821565b6001600160a01b0316610fa061105e565b6001600160a01b031614610fe9576040805162461bcd60e51b81526020600482018190526024820152600080516020612152833981519152604482015290519081900360640190fd5b6003546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600380546001600160a01b0319169055565b600c5481565b600061104742600a5461193b565b905090565b60106020526000908152604090205481565b6003546001600160a01b031690565b60065481565b600b5481565b33611082611272565b600e5561108d611039565b600d556001600160a01b038116156110d4576110a88161067d565b6001600160a01b038216600090815260116020908152604080832093909355600e546010909152919020555b6000821161111a576040805162461bcd60e51b815260206004820152600e60248201526d043616e6e6f74207374616b6520360941b604482015290519081900360640190fd5b600a54421115801561112e5750600b544211155b611172576040805162461bcd60e51b815260206004820152601060248201526f10d85b9b9bdd081cdd185ad9481e595d60821b604482015290519081900360640190fd5b61117b82611951565b60006111863361071b565b9150506006548111156111d1576040805162461bcd60e51b815260206004820152600e60248201526d131a5b5a5d08195e18d95959195960921b604482015290519081900360640190fd5b60408051848152905133917f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d919081900360200190a2505050565b600554600090611226906001600160a01b031684846119b3565b60018351038151811061123557fe5b6020026020010151905092915050565b6007818154811061125257fe5b6000918252602090912001546001600160a01b0316905081565b600d5481565b600061127c610a58565b6112895750600e54610a5c565b6110476112b7611297610a58565b6106e5670de0b6b3a76400006106d9600c546106d9600d546106c4611039565b600e549063ffffffff6117c716565b60006112d0611821565b6001600160a01b03166112e161105e565b6001600160a01b03161461132a576040805162461bcd60e51b81526020600482018190526024820152600080516020612152833981519152604482015290519081900360640190fd5b6001600160a01b038416611372576040805162461bcd60e51b815260206004820152600a6024820152696164647265737320302160b01b604482015290519081900360640190fd5b6000546001600160a01b03858116911614156113c6576040805162461bcd60e51b815260206004820152600e60248201526d3737ba1039ba30b5b2ba37b5b2b760911b604482015290519081900360640190fd5b836001600160a01b031663a9059cbb84846040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561142657600080fd5b505af115801561143a573d6000803e3d6000fd5b505050506040513d602081101561145057600080fd5b505190505b9392505050565b611464611821565b6001600160a01b031661147561105e565b6001600160a01b0316146114be576040805162461bcd60e51b81526020600482018190526024820152600080516020612152833981519152604482015290519081900360640190fd5b600955565b600e5481565b6114da6114d533610f6c565b610a66565b6114e2610cff565b565b600a5481565b6114f2611821565b6001600160a01b031661150361105e565b6001600160a01b03161461154c576040805162461bcd60e51b81526020600482018190526024820152600080516020612152833981519152604482015290519081900360640190fd5b6001600160a01b0381166115915760405162461bcd60e51b81526004018080602001828103825260268152602001806120e56026913960400191505060405180910390fd5b6003546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600380546001600160a01b0319166001600160a01b0392909216919091179055565b6008546201000090046001600160a01b031681565b6004546001600160a01b0316611616611821565b6001600160a01b03161461165b5760405162461bcd60e51b81526004018080602001828103825260218152602001806121726021913960400191505060405180910390fd5b600a54600b5411156116a5576040805162461bcd60e51b815260206004820152600e60248201526d0496e636f72726563742073746f760941b604482015290519081900360640190fd5b600b55565b600082821115611701576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b600082611716575060006106fd565b8282028284828161172357fe5b04146114555760405162461bcd60e51b81526004018080602001828103825260218152602001806121316021913960400191505060405180910390fd5b60008082116117b6576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b8183816117bf57fe5b049392505050565b600082820183811015611455576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b3390565b600154611838908263ffffffff6116aa16565b6001553360009081526002602052604090205461185b908263ffffffff6116aa16565b336000818152600260205260408120929092559054611886916001600160a01b0390911690836118e9565b50565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526118e3908590611cc0565b50505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610ee2908490611cc0565b600081831061194a5781611455565b5090919050565b600154611964908263ffffffff6117c716565b60015533600090815260026020526040902054611987908263ffffffff6117c716565b336000818152600260205260408120929092559054611886916001600160a01b03909116903084611889565b6060600282511015611a0c576040805162461bcd60e51b815260206004820152601c60248201527f456d69737761704c6962726172793a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b8151604051908082528060200260200182016040528015611a37578160200160208202803883390190505b5090508281600081518110611a4857fe5b602090810291909101015260005b6001835103811015611cb8576000856001600160a01b031663901754d7858481518110611a7f57fe5b6020026020010151868560010181518110611a9657fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b03168152602001826001600160a01b03166001600160a01b031681526020019250505060206040518083038186803b158015611afd57600080fd5b505afa158015611b11573d6000803e3d6000fd5b505050506040513d6020811015611b2757600080fd5b505190506000806001600160a01b03831615611c7457826001600160a01b031663d7d3aab5878681518110611b5857fe5b60200260200101516040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611ba657600080fd5b505afa158015611bba573d6000803e3d6000fd5b505050506040513d6020811015611bd057600080fd5b505186519092506001600160a01b0384169063e7ff42c990889060018801908110611bf757fe5b60200260200101516040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611c4557600080fd5b505afa158015611c59573d6000803e3d6000fd5b505050506040513d6020811015611c6f57600080fd5b505190505b611c9388868681518110611c8457fe5b60200260200101518484611d71565b858560010181518110611ca257fe5b6020908102919091010152505050600101611a56565b509392505050565b6060611d15826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611e2b9092919063ffffffff16565b805190915015610ee257808060200190516020811015611d3457600080fd5b5051610ee25760405162461bcd60e51b815260040180806020018281038252602a815260200180612193602a913960400191505060405180910390fd5b6000831580611d7e575082155b80611d87575081155b15611d9457506000611e23565b6000611dd2611dc566038d7ea4c680006106e5611db08a611e3a565b670de0b6b3a76400009063ffffffff6116aa16565b869063ffffffff61170716565b90506000611de6828563ffffffff61170716565b90506000611e00836106f1886103e863ffffffff61170716565b90508015611e1a57808281611e1157fe5b04935083611e1d565b60005b93505050505b949350505050565b6060611e238484600085611ea7565b6000816001600160a01b031663ddca3f436040518163ffffffff1660e01b815260040160206040518083038186803b158015611e7557600080fd5b505afa158015611e89573d6000803e3d6000fd5b505050506040513d6020811015611e9f57600080fd5b505192915050565b606082471015611ee85760405162461bcd60e51b815260040180806020018281038252602681526020018061210b6026913960400191505060405180910390fd5b611ef185612003565b611f42576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b60208310611f815780518252601f199092019160209182019101611f62565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611fe3576040519150601f19603f3d011682016040523d82523d6000602084013e611fe8565b606091505b5091509150611ff8828286612009565b979650505050505050565b3b151590565b60608315612018575081611455565b8251156120285782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561207257818101518382015260200161205a565b50505050905090810190601f16801561209f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50805460008255906000526020600020908101906118869190610a5c91905b808211156120e057600081556001016120cc565b509056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657243616c6c6572206973206e6f742072657761726420646973747269627574696f6e5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a264697066735822122014f0f65c6833f7ac834b7fe630610150b2dd3565818b479e2cbc125a1d6a4a7464736f6c634300060200330000000000000000000000005a75a093747b72a0e14056352751edf03518031d0000000000000000000000005a75a093747b72a0e14056352751edf03518031d00000000000000000000000013ab85e634a192e93484943d436d0284385b44d5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d3c21bcecceda10000000000000000000000000000000000000000000000000000000de0b6b3a7640000
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061021b5760003560e01c806380faa57d11610125578063cd3daf9d116100ad578063e9fad8ee1161007c578063e9fad8ee14610622578063ebe2b12b1461062a578063f2fde38b14610632578063f7c618c114610658578063f99c2f29146106605761021b565b8063cd3daf9d146105ab578063d493b9ac146105b3578063da768c27146105fd578063df136d651461061a5761021b565b80639ccba919116100f45780639ccba919146104b7578063a694fc3a146104bf578063b8239ebb146104dc578063b980c78f14610586578063c8f33c91146105a35761021b565b806380faa57d146104795780638b876347146104815780638da5cb5b146104a757806393ae18ac146104af5761021b565b80633963f1f1116101a857806351ed6a301161017757806351ed6a301461041e57806368ba51121461042657806370a0823114610443578063715018a6146104695780637b0a47ee146104715761021b565b80633963f1f11461033e5780633c6b16ab146103465780633d18b91214610363578063460470d01461036b5761021b565b80630d68b761116101ef5780630d68b761146102c557806318160ddd146102ed5780631be05289146102f55780632e1a7d4d146102fd578063373e7a6e1461031a5761021b565b80628cc26214610220578063017b7d2a146102585780630700037d146102605780630cedec5314610286575b600080fd5b6102466004803603602081101561023657600080fd5b50356001600160a01b031661067d565b60408051918252519081900360200190f35b610246610703565b6102466004803603602081101561027657600080fd5b50356001600160a01b0316610709565b6102ac6004803603602081101561029c57600080fd5b50356001600160a01b031661071b565b6040805192835260208301919091528051918290030190f35b6102eb600480360360208110156102db57600080fd5b50356001600160a01b03166109d4565b005b610246610a58565b610246610a5f565b6102eb6004803603602081101561031357600080fd5b5035610a66565b610322610b4d565b604080516001600160a01b039092168252519081900360200190f35b610246610b5c565b6102eb6004803603602081101561035c57600080fd5b5035610b62565b6102eb610cff565b6102eb6004803603604081101561038157600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156103ac57600080fd5b8201836020820111156103be57600080fd5b803590602001918460208302840111640100000000831117156103e057600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610ddc945050505050565b610322610ee7565b6102eb6004803603602081101561043c57600080fd5b5035610ef6565b6102466004803603602081101561045957600080fd5b50356001600160a01b0316610f6c565b6102eb610f87565b610246611033565b610246611039565b6102466004803603602081101561049757600080fd5b50356001600160a01b031661104c565b61032261105e565b61024661106d565b610246611073565b6102eb600480360360208110156104d557600080fd5b5035611079565b610246600480360360408110156104f257600080fd5b8135919081019060408101602082013564010000000081111561051457600080fd5b82018360208201111561052657600080fd5b8035906020019184602083028401116401000000008311171561054857600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061120c945050505050565b6103226004803603602081101561059c57600080fd5b5035611245565b61024661126c565b610246611272565b6105e9600480360360608110156105c957600080fd5b506001600160a01b038135811691602081013590911690604001356112c6565b604080519115158252519081900360200190f35b6102eb6004803603602081101561061357600080fd5b503561145c565b6102466114c3565b6102eb6114c9565b6102466114e4565b6102eb6004803603602081101561064857600080fd5b50356001600160a01b03166114ea565b6103226115ed565b6102eb6004803603602081101561067657600080fd5b5035611602565b6001600160a01b03811660009081526011602090815260408083205460109092528220546106fd91906106f190670de0b6b3a7640000906106e5906106d0906106c4611272565b9063ffffffff6116aa16565b6106d988610f6c565b9063ffffffff61170716565b9063ffffffff61176016565b9063ffffffff6117c716565b92915050565b60095481565b60116020526000908152604090205481565b6000806000610786600954600780548060200260200160405190810160405280929190818152602001828054801561077c57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161075e575b505050505061120c565b9050600f54600014156107bd576107a66009546106e5836106d988610f6c565b92506107ba6009546106e5836106d9610a58565b91505b600f54600114156109ce576109206009546106e5836106d9670de0b6b3a76400006106e56108726000809054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561083157600080fd5b505afa158015610845573d6000803e3d6000fd5b505050506040513d602081101561085b57600080fd5b50516106e5670de0b6b3a76400006106d98f610f6c565b60008054600780546106d9936002936001600160a01b03169263d7d3aab59290919061089a57fe5b60009182526020918290200154604080516001600160e01b031960e086901b1681526001600160a01b0390921660048301525160248083019392829003018186803b1580156108e857600080fd5b505afa1580156108fc573d6000803e3d6000fd5b505050506040513d602081101561091257600080fd5b50519063ffffffff61170716565b92506109cb6009546106e5836106d9670de0b6b3a76400006106e56108726000809054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561098b57600080fd5b505afa15801561099f573d6000803e3d6000fd5b505050506040513d60208110156109b557600080fd5b50516106e5670de0b6b3a76400006106d9610a58565b91505b50915091565b6109dc611821565b6001600160a01b03166109ed61105e565b6001600160a01b031614610a36576040805162461bcd60e51b81526020600482018190526024820152600080516020612152833981519152604482015290519081900360640190fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6001545b90565b6276a70081565b33610a6f611272565b600e55610a7a611039565b600d556001600160a01b03811615610ac157610a958161067d565b6001600160a01b038216600090815260116020908152604080832093909355600e546010909152919020555b60008211610b0a576040805162461bcd60e51b8152602060048201526011602482015270043616e6e6f74207769746864726177203607c1b604482015290519081900360640190fd5b610b1382611825565b60408051838152905133917f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5919081900360200190a25050565b6005546001600160a01b031681565b600f5481565b6004546001600160a01b0316610b76611821565b6001600160a01b031614610bbb5760405162461bcd60e51b81526004018080602001828103825260218152602001806121726021913960400191505060405180910390fd5b6000610bc5611272565b600e55610bd0611039565b600d556001600160a01b03811615610c1757610beb8161067d565b6001600160a01b038216600090815260116020908152604080832093909355600e546010909152919020555b600a544210610c3b57610c33826276a70063ffffffff61176016565b600c55610c89565b600a54600090610c51904263ffffffff6116aa16565b90506000610c6a600c548361170790919063ffffffff16565b9050610c836276a7006106e5868463ffffffff6117c716565b600c5550505b42600d819055610ca2906276a70063ffffffff6117c716565b600a819055600b55600854610cc8906201000090046001600160a01b0316333085611889565b6040805183815290517fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d9181900360200190a15050565b33610d08611272565b600e55610d13611039565b600d556001600160a01b03811615610d5a57610d2e8161067d565b6001600160a01b038216600090815260116020908152604080832093909355600e546010909152919020555b6000610d653361067d565b90508015610dd85733600081815260116020526040812055600854610da191620100009091046001600160a01b0316908363ffffffff6118e916565b60408051828152905133917fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e0486919081900360200190a25b5050565b610de4611821565b6001600160a01b0316610df561105e565b6001600160a01b031614610e3e576040805162461bcd60e51b81526020600482018190526024820152600080516020612152833981519152604482015290519081900360640190fd5b6005546001600160a01b03838116911614610e6f57600580546001600160a01b0319166001600160a01b0384161790555b60075415610e8357610e83600760006120ad565b60005b8151811015610ee2576007828281518110610e9d57fe5b60209081029190910181015182546001808201855560009485529290932090920180546001600160a01b0319166001600160a01b039093169290921790915501610e86565b505050565b6000546001600160a01b031681565b610efe611821565b6001600160a01b0316610f0f61105e565b6001600160a01b031614610f58576040805162461bcd60e51b81526020600482018190526024820152600080516020612152833981519152604482015290519081900360640190fd5b806006541415610f6757600080fd5b600655565b6001600160a01b031660009081526002602052604090205490565b610f8f611821565b6001600160a01b0316610fa061105e565b6001600160a01b031614610fe9576040805162461bcd60e51b81526020600482018190526024820152600080516020612152833981519152604482015290519081900360640190fd5b6003546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600380546001600160a01b0319169055565b600c5481565b600061104742600a5461193b565b905090565b60106020526000908152604090205481565b6003546001600160a01b031690565b60065481565b600b5481565b33611082611272565b600e5561108d611039565b600d556001600160a01b038116156110d4576110a88161067d565b6001600160a01b038216600090815260116020908152604080832093909355600e546010909152919020555b6000821161111a576040805162461bcd60e51b815260206004820152600e60248201526d043616e6e6f74207374616b6520360941b604482015290519081900360640190fd5b600a54421115801561112e5750600b544211155b611172576040805162461bcd60e51b815260206004820152601060248201526f10d85b9b9bdd081cdd185ad9481e595d60821b604482015290519081900360640190fd5b61117b82611951565b60006111863361071b565b9150506006548111156111d1576040805162461bcd60e51b815260206004820152600e60248201526d131a5b5a5d08195e18d95959195960921b604482015290519081900360640190fd5b60408051848152905133917f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d919081900360200190a2505050565b600554600090611226906001600160a01b031684846119b3565b60018351038151811061123557fe5b6020026020010151905092915050565b6007818154811061125257fe5b6000918252602090912001546001600160a01b0316905081565b600d5481565b600061127c610a58565b6112895750600e54610a5c565b6110476112b7611297610a58565b6106e5670de0b6b3a76400006106d9600c546106d9600d546106c4611039565b600e549063ffffffff6117c716565b60006112d0611821565b6001600160a01b03166112e161105e565b6001600160a01b03161461132a576040805162461bcd60e51b81526020600482018190526024820152600080516020612152833981519152604482015290519081900360640190fd5b6001600160a01b038416611372576040805162461bcd60e51b815260206004820152600a6024820152696164647265737320302160b01b604482015290519081900360640190fd5b6000546001600160a01b03858116911614156113c6576040805162461bcd60e51b815260206004820152600e60248201526d3737ba1039ba30b5b2ba37b5b2b760911b604482015290519081900360640190fd5b836001600160a01b031663a9059cbb84846040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561142657600080fd5b505af115801561143a573d6000803e3d6000fd5b505050506040513d602081101561145057600080fd5b505190505b9392505050565b611464611821565b6001600160a01b031661147561105e565b6001600160a01b0316146114be576040805162461bcd60e51b81526020600482018190526024820152600080516020612152833981519152604482015290519081900360640190fd5b600955565b600e5481565b6114da6114d533610f6c565b610a66565b6114e2610cff565b565b600a5481565b6114f2611821565b6001600160a01b031661150361105e565b6001600160a01b03161461154c576040805162461bcd60e51b81526020600482018190526024820152600080516020612152833981519152604482015290519081900360640190fd5b6001600160a01b0381166115915760405162461bcd60e51b81526004018080602001828103825260268152602001806120e56026913960400191505060405180910390fd5b6003546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600380546001600160a01b0319166001600160a01b0392909216919091179055565b6008546201000090046001600160a01b031681565b6004546001600160a01b0316611616611821565b6001600160a01b03161461165b5760405162461bcd60e51b81526004018080602001828103825260218152602001806121726021913960400191505060405180910390fd5b600a54600b5411156116a5576040805162461bcd60e51b815260206004820152600e60248201526d0496e636f72726563742073746f760941b604482015290519081900360640190fd5b600b55565b600082821115611701576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b600082611716575060006106fd565b8282028284828161172357fe5b04146114555760405162461bcd60e51b81526004018080602001828103825260218152602001806121316021913960400191505060405180910390fd5b60008082116117b6576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b8183816117bf57fe5b049392505050565b600082820183811015611455576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b3390565b600154611838908263ffffffff6116aa16565b6001553360009081526002602052604090205461185b908263ffffffff6116aa16565b336000818152600260205260408120929092559054611886916001600160a01b0390911690836118e9565b50565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526118e3908590611cc0565b50505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610ee2908490611cc0565b600081831061194a5781611455565b5090919050565b600154611964908263ffffffff6117c716565b60015533600090815260026020526040902054611987908263ffffffff6117c716565b336000818152600260205260408120929092559054611886916001600160a01b03909116903084611889565b6060600282511015611a0c576040805162461bcd60e51b815260206004820152601c60248201527f456d69737761704c6962726172793a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b8151604051908082528060200260200182016040528015611a37578160200160208202803883390190505b5090508281600081518110611a4857fe5b602090810291909101015260005b6001835103811015611cb8576000856001600160a01b031663901754d7858481518110611a7f57fe5b6020026020010151868560010181518110611a9657fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b03168152602001826001600160a01b03166001600160a01b031681526020019250505060206040518083038186803b158015611afd57600080fd5b505afa158015611b11573d6000803e3d6000fd5b505050506040513d6020811015611b2757600080fd5b505190506000806001600160a01b03831615611c7457826001600160a01b031663d7d3aab5878681518110611b5857fe5b60200260200101516040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611ba657600080fd5b505afa158015611bba573d6000803e3d6000fd5b505050506040513d6020811015611bd057600080fd5b505186519092506001600160a01b0384169063e7ff42c990889060018801908110611bf757fe5b60200260200101516040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611c4557600080fd5b505afa158015611c59573d6000803e3d6000fd5b505050506040513d6020811015611c6f57600080fd5b505190505b611c9388868681518110611c8457fe5b60200260200101518484611d71565b858560010181518110611ca257fe5b6020908102919091010152505050600101611a56565b509392505050565b6060611d15826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611e2b9092919063ffffffff16565b805190915015610ee257808060200190516020811015611d3457600080fd5b5051610ee25760405162461bcd60e51b815260040180806020018281038252602a815260200180612193602a913960400191505060405180910390fd5b6000831580611d7e575082155b80611d87575081155b15611d9457506000611e23565b6000611dd2611dc566038d7ea4c680006106e5611db08a611e3a565b670de0b6b3a76400009063ffffffff6116aa16565b869063ffffffff61170716565b90506000611de6828563ffffffff61170716565b90506000611e00836106f1886103e863ffffffff61170716565b90508015611e1a57808281611e1157fe5b04935083611e1d565b60005b93505050505b949350505050565b6060611e238484600085611ea7565b6000816001600160a01b031663ddca3f436040518163ffffffff1660e01b815260040160206040518083038186803b158015611e7557600080fd5b505afa158015611e89573d6000803e3d6000fd5b505050506040513d6020811015611e9f57600080fd5b505192915050565b606082471015611ee85760405162461bcd60e51b815260040180806020018281038252602681526020018061210b6026913960400191505060405180910390fd5b611ef185612003565b611f42576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b60208310611f815780518252601f199092019160209182019101611f62565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611fe3576040519150601f19603f3d011682016040523d82523d6000602084013e611fe8565b606091505b5091509150611ff8828286612009565b979650505050505050565b3b151590565b60608315612018575081611455565b8251156120285782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561207257818101518382015260200161205a565b50505050905090810190601f16801561209f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50805460008255906000526020600020908101906118869190610a5c91905b808211156120e057600081556001016120cc565b509056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657243616c6c6572206973206e6f742072657761726420646973747269627574696f6e5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a264697066735822122014f0f65c6833f7ac834b7fe630610150b2dd3565818b479e2cbc125a1d6a4a7464736f6c63430006020033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000005a75a093747b72a0e14056352751edf03518031d0000000000000000000000005a75a093747b72a0e14056352751edf03518031d00000000000000000000000013ab85e634a192e93484943d436d0284385b44d5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d3c21bcecceda10000000000000000000000000000000000000000000000000000000de0b6b3a7640000
-----Decoded View---------------
Arg [0] : _rewardToken (address): 0x5a75A093747b72a0e14056352751eDF03518031d
Arg [1] : _stakeToken (address): 0x5a75A093747b72a0e14056352751eDF03518031d
Arg [2] : rewardAdmin (address): 0x13AB85e634A192E93484943D436d0284385B44d5
Arg [3] : _tokenMode (uint256): 0
Arg [4] : _totalStakeLimit (uint256): 1000000000000000000000000
Arg [5] : _minPriceAmount (uint256): 1000000000000000000
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000005a75a093747b72a0e14056352751edf03518031d
Arg [1] : 0000000000000000000000005a75a093747b72a0e14056352751edf03518031d
Arg [2] : 00000000000000000000000013ab85e634a192e93484943d436d0284385b44d5
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [4] : 00000000000000000000000000000000000000000000d3c21bcecceda1000000
Arg [5] : 0000000000000000000000000000000000000000000000000de0b6b3a7640000
Deployed Bytecode Sourcemap
35517:7980:0:-:0;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35517:7980:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38517:243;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38517:243:0;-1:-1:-1;;;;;38517:243:0;;:::i;:::-;;;;;;;;;;;;;;;;35822:29;;;:::i;36240:42::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36240:42:0;-1:-1:-1;;;;;36240:42:0;;:::i;40772:1726::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;40772:1726:0;-1:-1:-1;;;;;40772:1726:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;7707:183;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7707:183:0;-1:-1:-1;;;;;7707:183:0;;:::i;:::-;;27577:91;;;:::i;35858:42::-;;;:::i;39215:212::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39215:212:0;;:::i;35592:25::-;;;:::i;:::-;;;;-1:-1:-1;;;;;35592:25:0;;;;;;;;;;;;;;36097:24;;;:::i;39898:675::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39898:675:0;;:::i;39540:292::-;;;:::i;37334:377::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;37334:377:0;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;37334:377:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;37334:377:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;37334:377:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;37334:377:0;;-1:-1:-1;37334:377:0;;-1:-1:-1;;;;;37334:377:0:i;27455:24::-;;;:::i;37719:179::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;37719:179:0;;:::i;27676:110::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27676:110:0;-1:-1:-1;;;;;27676:110:0;;:::i;6713:148::-;;;:::i;35983:29::-;;;:::i;38038:131::-;;;:::i;36176:57::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36176:57:0;-1:-1:-1;;;;;36176:57:0;;:::i;6062:87::-;;;:::i;35624:30::-;;;:::i;35947:29::-;;;:::i;38768:439::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38768:439:0;;:::i;42506:188::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;42506:188:0;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;42506:188:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;42506:188:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;42506:188:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;42506:188:0;;-1:-1:-1;42506:188:0;;-1:-1:-1;;;;;42506:188:0:i;35723:22::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35723:22:0;;:::i;36019:29::-;;;:::i;38177:332::-;;;:::i;43119:375::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;43119:375:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;37906:124;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;37906:124:0;;:::i;36055:35::-;;;:::i;39435:97::-;;;:::i;35909:31::-;;;:::i;7016:244::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7016:244:0;-1:-1:-1;;;;;7016:244:0;;:::i;35790:25::-;;;:::i;40581:183::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;40581:183:0;;:::i;38517:243::-;-1:-1:-1;;;;;38721:16:0;;38571:7;38721:16;;;:7;:16;;;;;;;;;38655:22;:31;;;;;;38611:141;;38721:16;38611:87;;38693:4;;38611:77;;38634:53;;:16;:14;:16::i;:::-;:20;:53;:20;:53;:::i;:::-;38611:18;38621:7;38611:9;:18::i;:::-;:22;:77;:22;:77;:::i;:::-;:81;:87;:81;:87;:::i;:::-;:91;:141;:91;:141;:::i;:::-;38591:161;38517:243;-1:-1:-1;;38517:243:0:o;35822:29::-;;;;:::o;36240:42::-;;;;;;;;;;;;;:::o;40772:1726::-;40839:19;40860:18;40891:13;40907:35;40920:14;;40936:5;40907:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;40907:35:0;;;;;;;;;;;;;;;;;;;;;:12;:35::i;:::-;40891:51;;41040:9;;41053:1;41040:14;41036:181;;;41085:48;41118:14;;41085:28;41107:5;41085:17;41095:6;41085:9;:17::i;:48::-;41071:62;;41161:44;41190:14;;41161:24;41179:5;41161:13;:11;:13::i;:44::-;41148:57;;41036:181;41231:9;;41244:1;41231:14;41227:1264;;;41927:264;42176:14;;41927:230;42151:5;41927:205;42127:4;41927:181;42050:57;42082:10;;;;;;;;;-1:-1:-1;;;;;42082:10:0;-1:-1:-1;;;;;42082:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;42082:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;42082:24:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;42082:24:0;42050:27;42072:4;42050:17;42060:6;42050:9;:17::i;:57::-;41944:10;;;42000:5;:8;;41927:104;;42029:1;;-1:-1:-1;;;;;41944:10:0;;41927:65;;42000:5;;41944:10;42000:8;;;;;;;;;;;;;;;41927:83;;;-1:-1:-1;;;;;;41927:83:0;;;;;;;-1:-1:-1;;;;;42000:8:0;;;41927:83;;;;;;;;;;42000:8;41927:83;;;;;;;;;5:2:-1;;;;30:1;27;20:12;5:2;41927:83:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;41927:83:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;41927:83:0;;:104;:101;:104;:::i;:264::-;41913:278;;42219:260;42464:14;;42219:226;42439:5;42219:201;42415:4;42219:177;42342:53;42370:10;;;;;;;;;-1:-1:-1;;;;;42370:10:0;-1:-1:-1;;;;;42370:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;42370:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;42370:24:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;42370:24:0;42342:23;42360:4;42342:13;:11;:13::i;42219:260::-;42206:273;;41227:1264;40772:1726;;;;:::o;7707:183::-;6293:12;:10;:12::i;:::-;-1:-1:-1;;;;;6282:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;6282:23:0;;6274:68;;;;;-1:-1:-1;;;6274:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6274:68:0;;;;;;;;;;;;;;;7842:18:::1;:40:::0;;-1:-1:-1;;;;;;7842:40:0::1;-1:-1:-1::0;;;;;7842:40:0;;;::::1;::::0;;;::::1;::::0;;7707:183::o;27577:91::-;27648:12;;27577:91;;:::o;35858:42::-;35893:7;35858:42;:::o;39215:212::-;39278:10;37069:16;:14;:16::i;:::-;37046:20;:39;37113:26;:24;:26::i;:::-;37096:14;:43;-1:-1:-1;;;;;37154:21:0;;;37150:157;;37211:15;37218:7;37211:6;:15::i;:::-;-1:-1:-1;;;;;37192:16:0;;;;;;:7;:16;;;;;;;;:34;;;;37275:20;;37241:22;:31;;;;;;:54;37150:157;39318:1:::1;39309:6;:10;39301:40;;;::::0;;-1:-1:-1;;;39301:40:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;39301:40:0;;;;;;;;;;;;;::::1;;39352:22;39367:6;39352:14;:22::i;:::-;39390:29;::::0;;;;;;;39400:10:::1;::::0;39390:29:::1;::::0;;;;;::::1;::::0;;::::1;39215:212:::0;;:::o;35592:25::-;;;-1:-1:-1;;;;;35592:25:0;;:::o;36097:24::-;;;;:::o;39898:675::-;7623:18;;-1:-1:-1;;;;;7623:18:0;7607:12;:10;:12::i;:::-;-1:-1:-1;;;;;7607:34:0;;7599:80;;;;-1:-1:-1;;;7599:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40004:1:::1;37069:16;:14;:16::i;:::-;37046:20;:39:::0;37113:26:::1;:24;:26::i;:::-;37096:14;:43:::0;-1:-1:-1;;;;;37154:21:0;::::1;::::0;37150:157:::1;;37211:15;37218:7;37211:6;:15::i;:::-;-1:-1:-1::0;;;;;37192:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:34;;;;37275:20:::1;::::0;37241:22:::1;:31:::0;;;;;;:54;37150:157:::1;40042:12:::2;;40023:15;:31;40019:304;;40084:20;:6:::0;35893:7:::2;40084:20;:10;:20;:::i;:::-;40071:10;:33:::0;40019:304:::2;;;40157:12;::::0;40137:17:::2;::::0;40157:33:::2;::::0;40174:15:::2;40157:33;:16;:33;:::i;:::-;40137:53;;40205:16;40224:25;40238:10;;40224:9;:13;;:25;;;;:::i;:::-;40205:44:::0;-1:-1:-1;40277:34:0::2;35893:7;40277:20;:6:::0;40205:44;40277:20:::2;:10;:20;:::i;:34::-;40264:10;:47:::0;-1:-1:-1;;40019:304:0::2;40350:15;40333:14;:32:::0;;;40391:29:::2;::::0;35893:7:::2;40391:29;:19;:29;:::i;:::-;40376:12;:44:::0;;;40431:10:::2;:25:::0;40467:11:::2;::::0;:63:::2;::::0;:11;;::::2;-1:-1:-1::0;;;;;40467:11:0::2;40496:10;40516:4;40523:6:::0;40467:28:::2;:63::i;:::-;40546:19;::::0;;;;;;;::::2;::::0;;;;::::2;::::0;;::::2;7690:1:::1;39898:675:::0;:::o;39540:292::-;39581:10;37069:16;:14;:16::i;:::-;37046:20;:39;37113:26;:24;:26::i;:::-;37096:14;:43;-1:-1:-1;;;;;37154:21:0;;;37150:157;;37211:15;37218:7;37211:6;:15::i;:::-;-1:-1:-1;;;;;37192:16:0;;;;;;:7;:16;;;;;;;;:34;;;;37275:20;;37241:22;:31;;;;;;:54;37150:157;39604:14:::1;39621:18;39628:10;39621:6;:18::i;:::-;39604:35:::0;-1:-1:-1;39654:10:0;;39650:175:::1;;39689:10;39703:1;39681:19:::0;;;:7:::1;:19;::::0;;;;:23;39719:11:::1;::::0;:44:::1;::::0;:11;;;::::1;-1:-1:-1::0;;;;;39719:11:0::1;::::0;39756:6;39719:44:::1;:24;:44;:::i;:::-;39783:30;::::0;;;;;;;39794:10:::1;::::0;39783:30:::1;::::0;;;;;::::1;::::0;;::::1;39650:175;37317:1;39540:292:::0;:::o;37334:377::-;6293:12;:10;:12::i;:::-;-1:-1:-1;;;;;6282:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;6282:23:0;;6274:68;;;;;-1:-1:-1;;;6274:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6274:68:0;;;;;;;;;;;;;;;37437:10:::1;::::0;-1:-1:-1;;;;;37437:25:0;;::::1;:10:::0;::::1;:25;37433:82;;37479:10;:24:::0;;-1:-1:-1;;;;;;37479:24:0::1;-1:-1:-1::0;;;;;37479:24:0;::::1;;::::0;;37433:82:::1;37529:5;:12:::0;:16;37525:61:::1;;37562:12;37569:5;;37562:12;:::i;:::-;37601:13;37596:108;37628:6;:13;37620:5;:21;37596:108;;;37667:5;37678:6;37685:5;37678:13;;;;;;;;;::::0;;::::1;::::0;;;;;;;27:10:-1;;39:1:::1;23:18:::0;;::::1;45:23:::0;;-1:-1;37667:25:0;;;;;;;;;::::1;::::0;;-1:-1:-1;;;;;;37667:25:0::1;-1:-1:-1::0;;;;;37667:25:0;;::::1;::::0;;;::::1;::::0;;;37643:7:::1;37596:108;;;;37334:377:::0;;:::o;27455:24::-;;;-1:-1:-1;;;;;27455:24:0;;:::o;37719:179::-;6293:12;:10;:12::i;:::-;-1:-1:-1;;;;;6282:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;6282:23:0;;6274:68;;;;;-1:-1:-1;;;6274:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6274:68:0;;;;;;;;;;;;;;;37828:16:::1;37809:15;;:35;;37801:44;;;::::0;::::1;;37856:15;:34:::0;37719:179::o;27676:110::-;-1:-1:-1;;;;;27760:18:0;27733:7;27760:18;;;:9;:18;;;;;;;27676:110::o;6713:148::-;6293:12;:10;:12::i;:::-;-1:-1:-1;;;;;6282:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;6282:23:0;;6274:68;;;;;-1:-1:-1;;;6274:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6274:68:0;;;;;;;;;;;;;;;6804:6:::1;::::0;6783:40:::1;::::0;6820:1:::1;::::0;-1:-1:-1;;;;;6804:6:0::1;::::0;6783:40:::1;::::0;6820:1;;6783:40:::1;6834:6;:19:::0;;-1:-1:-1;;;;;;6834:19:0::1;::::0;;6713:148::o;35983:29::-;;;;:::o;38038:131::-;38095:7;38122:39;38131:15;38148:12;;38122:8;:39::i;:::-;38115:46;;38038:131;:::o;36176:57::-;;;;;;;;;;;;;:::o;6062:87::-;6135:6;;-1:-1:-1;;;;;6135:6:0;6062:87;:::o;35624:30::-;;;;:::o;35947:29::-;;;;:::o;38768:439::-;38828:10;37069:16;:14;:16::i;:::-;37046:20;:39;37113:26;:24;:26::i;:::-;37096:14;:43;-1:-1:-1;;;;;37154:21:0;;;37150:157;;37211:15;37218:7;37211:6;:15::i;:::-;-1:-1:-1;;;;;37192:16:0;;;;;;:7;:16;;;;;;;;:34;;;;37275:20;;37241:22;:31;;;;;;:54;37150:157;38868:1:::1;38859:6;:10;38851:37;;;::::0;;-1:-1:-1;;;38851:37:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;38851:37:0;;;;;;;;;;;;;::::1;;38926:12;;38907:15;:31;;:64;;;;;38961:10;;38942:15;:29;;38907:64;38899:93;;;::::0;;-1:-1:-1;;;38899:93:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;38899:93:0;;;;;;;;;;;;;::::1;;39003:19;39015:6;39003:11;:19::i;:::-;39036:18;39058:32;39079:10;39058:20;:32::i;:::-;39033:57;;;39123:15;;39109:10;:29;;39101:56;;;::::0;;-1:-1:-1;;;39101:56:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;39101:56:0;;;;;;;;;;;;;::::1;;39173:26;::::0;;;;;;;39180:10:::1;::::0;39173:26:::1;::::0;;;;;::::1;::::0;;::::1;37317:1;38768:439:::0;;:::o;42506:188::-;42642:10;;42590:7;;42617:52;;-1:-1:-1;;;;;42642:10:0;42654:8;42664:4;42617:24;:52::i;:::-;42684:1;42670:4;:11;:15;42617:69;;;;;;;;;;;;;;42610:76;;42506:188;;;;:::o;35723:22::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35723:22:0;;-1:-1:-1;35723:22:0;:::o;36019:29::-;;;;:::o;38177:332::-;38224:7;38248:13;:11;:13::i;:::-;38244:78;;-1:-1:-1;38290:20:0;;38283:27;;38244:78;38352:149;38395:91;38472:13;:11;:13::i;:::-;38395:72;38462:4;38395:62;38446:10;;38395:46;38426:14;;38395:26;:24;:26::i;:91::-;38352:20;;;:149;:24;:149;:::i;43119:375::-;43269:12;6293;:10;:12::i;:::-;-1:-1:-1;;;;;6282:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;6282:23:0;;6274:68;;;;;-1:-1:-1;;;6274:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6274:68:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;43302:26:0;::::1;43294:49;;;::::0;;-1:-1:-1;;;43294:49:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;43294:49:0;;;;;;;;;;;;;::::1;;43386:10;::::0;-1:-1:-1;;;;;43362:35:0;;::::1;43386:10:::0;::::1;43362:35;;43354:62;;;::::0;;-1:-1:-1;;;43354:62:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;43354:62:0;;;;;;;;;;;;;::::1;;43443:12;-1:-1:-1::0;;;;;43436:29:0::1;;43466:11;43479:6;43436:50;;;;;;;;;;;;;-1:-1:-1::0;;;;;43436:50:0::1;-1:-1:-1::0;;;;;43436:50:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::1;5:2;43436:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;43436:50:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26::::0;19:12:::1;2:2;-1:-1:::0;43436:50:0;;-1:-1:-1;6353:1:0::1;43119:375:::0;;;;;:::o;37906:124::-;6293:12;:10;:12::i;:::-;-1:-1:-1;;;;;6282:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;6282:23:0;;6274:68;;;;;-1:-1:-1;;;6274:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6274:68:0;;;;;;;;;;;;;;;37988:14:::1;:34:::0;37906:124::o;36055:35::-;;;;:::o;39435:97::-;39471:31;39480:21;39490:10;39480:9;:21::i;:::-;39471:8;:31::i;:::-;39513:11;:9;:11::i;:::-;39435:97::o;35909:31::-;;;;:::o;7016:244::-;6293:12;:10;:12::i;:::-;-1:-1:-1;;;;;6282:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;6282:23:0;;6274:68;;;;;-1:-1:-1;;;6274:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6274:68:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;7105:22:0;::::1;7097:73;;;;-1:-1:-1::0;;;7097:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7207:6;::::0;7186:38:::1;::::0;-1:-1:-1;;;;;7186:38:0;;::::1;::::0;7207:6:::1;::::0;7186:38:::1;::::0;7207:6:::1;::::0;7186:38:::1;7235:6;:17:::0;;-1:-1:-1;;;;;;7235:17:0::1;-1:-1:-1::0;;;;;7235:17:0;;;::::1;::::0;;;::::1;::::0;;7016:244::o;35790:25::-;;;;;;-1:-1:-1;;;;;35790:25:0;;:::o;40581:183::-;7623:18;;-1:-1:-1;;;;;7623:18:0;7607:12;:10;:12::i;:::-;-1:-1:-1;;;;;7607:34:0;;7599:80;;;;-1:-1:-1;;;7599:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40690:12:::1;;40676:10;;:26;;40668:53;;;::::0;;-1:-1:-1;;;40668:53:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;40668:53:0;;;;;;;;;;;;;::::1;;40732:10;:24:::0;40581:183::o;11195:158::-;11253:7;11286:1;11281;:6;;11273:49;;;;;-1:-1:-1;;;11273:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11340:5:0;;;11195:158::o;11612:220::-;11670:7;11694:6;11690:20;;-1:-1:-1;11709:1:0;11702:8;;11690:20;11733:5;;;11737:1;11733;:5;:1;11757:5;;;;;:10;11749:56;;;;-1:-1:-1;;;11749:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12310:153;12368:7;12400:1;12396;:5;12388:44;;;;;-1:-1:-1;;;12388:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;12454:1;12450;:5;;;;;;;12310:153;-1:-1:-1;;;12310:153:0:o;10733:179::-;10791:7;10823:5;;;10847:6;;;;10839:46;;;;;-1:-1:-1;;;10839:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;4558:106;4646:10;4558:106;:::o;28047:229::-;28122:12;;:24;;28139:6;28122:24;:16;:24;:::i;:::-;28107:12;:39;28191:10;28181:21;;;;:9;:21;;;;;;:33;;28207:6;28181:33;:25;:33;:::i;:::-;28167:10;28157:21;;;;:9;:21;;;;;:57;;;;28225:10;;:43;;-1:-1:-1;;;;;28225:10:0;;;;28261:6;28225:23;:43::i;:::-;28047:229;:::o;24360:205::-;24488:68;;;-1:-1:-1;;;;;24488:68:0;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;24488:68:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;24461:96:0;;24481:5;;24461:19;:96::i;:::-;24360:205;;;;:::o;24175:177::-;24285:58;;;-1:-1:-1;;;;;24285:58:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;24285:58:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;24258:86:0;;24278:5;;24258:19;:86::i;608:106::-;666:7;697:1;693;:5;:13;;705:1;693:13;;;-1:-1:-1;701:1:0;;686:20;-1:-1:-1;608:106:0:o;27794:245::-;27866:12;;:24;;27883:6;27866:24;:16;:24;:::i;:::-;27851:12;:39;27935:10;27925:21;;;;:9;:21;;;;;;:33;;27951:6;27925:33;:25;:33;:::i;:::-;27911:10;27901:21;;;;:9;:21;;;;;:57;;;;27969:10;;:62;;-1:-1:-1;;;;;27969:10:0;;;;28017:4;28024:6;27969:27;:62::i;33999:921::-;34137:24;34197:1;34182:4;:11;:16;;34174:57;;;;;-1:-1:-1;;;34174:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;34266:4;:11;34252:26;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;34252:26:0;;34242:36;;34302:8;34289:7;34297:1;34289:10;;;;;;;;;;;;;;;;;:21;34326:9;34321:592;34359:1;34345:4;:11;:15;34341:1;:19;34321:592;;;34382:21;34423:7;-1:-1:-1;;;;;34406:31:0;;34452:4;34457:1;34452:7;;;;;;;;;;;;;;34470:4;34475:1;34479;34475:5;34470:11;;;;;;;;;;;;;;34406:77;;;;;;;;;;;;;-1:-1:-1;;;;;34406:77:0;-1:-1:-1;;;;;34406:77:0;;;;;;-1:-1:-1;;;;;34406:77:0;-1:-1:-1;;;;;34406:77:0;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34406:77:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34406:77:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;34406:77:0;;-1:-1:-1;34500:17:0;;-1:-1:-1;;;;;34571:35:0;;;34567:245;;34648:12;-1:-1:-1;;;;;34639:44:0;;34691:4;34696:1;34691:7;;;;;;;;;;;;;;34639:61;;;;;;;;;;;;;-1:-1:-1;;;;;34639:61:0;-1:-1:-1;;;;;34639:61:0;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34639:61:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34639:61:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;34639:61:0;34783:11;;34639:61;;-1:-1:-1;;;;;;34732:43:0;;;;;34783:4;;34792:1;34788:5;;;34783:11;;;;;;;;;;;;34732:64;;;;;;;;;;;;;-1:-1:-1;;;;;34732:64:0;-1:-1:-1;;;;;34732:64:0;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34732:64:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34732:64:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;34732:64:0;;-1:-1:-1;34567:245:0;34845:56;34858:7;34867;34875:1;34867:10;;;;;;;;;;;;;;34879:9;34890:10;34845:12;:56::i;:::-;34828:7;34836:1;34840;34836:5;34828:14;;;;;;;;;;;;;;;;;:73;-1:-1:-1;;;34362:3:0;;34321:592;;;;33999:921;;;;;:::o;26480:761::-;26904:23;26930:69;26958:4;26930:69;;;;;;;;;;;;;;;;;26938:5;-1:-1:-1;;;;;26930:27:0;;;:69;;;;;:::i;:::-;27014:17;;26904:95;;-1:-1:-1;27014:21:0;27010:224;;27156:10;27145:30;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27145:30:0;27137:85;;;;-1:-1:-1;;;27137:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32273:625;32435:17;32469:13;;;:31;;-1:-1:-1;32486:14:0;;32469:31;:50;;;-1:-1:-1;32504:15:0;;32469:50;32465:93;;;-1:-1:-1;32544:1:0;32536:10;;32465:93;32570:23;32596:70;32609:56;32660:4;32609:46;32642:12;32646:7;32642:3;:12::i;:::-;32617:19;;32609:46;:32;:46;:::i;:56::-;32596:8;;:70;:12;:70;:::i;:::-;32570:96;-1:-1:-1;32683:17:0;32703:31;32570:96;32723:10;32703:31;:19;:31;:::i;:::-;32683:51;-1:-1:-1;32745:19:0;32767:40;32791:15;32767:19;:9;32781:4;32767:19;:13;:19;:::i;:40::-;32745:62;-1:-1:-1;32831:16:0;;:58;;32878:11;32866:9;:23;;;;;;32854:35;;;32831:58;;;32850:1;32831:58;32818:72;;32273:625;;;;;;;;;;:::o;19131:195::-;19234:12;19266:52;19288:6;19296:4;19302:1;19305:12;19266:21;:52::i;31313:111::-;31366:7;31402;-1:-1:-1;;;;;31393:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31393:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31393:23:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31393:23:0;;31313:111;-1:-1:-1;;31313:111:0:o;20183:530::-;20310:12;20368:5;20343:21;:30;;20335:81;;;;-1:-1:-1;;;20335:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20435:18;20446:6;20435:10;:18::i;:::-;20427:60;;;;;-1:-1:-1;;;20427:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;20561:12;20575:23;20602:6;-1:-1:-1;;;;;20602:11:0;20622:5;20630:4;20602:33;;;;;;;;;;;;;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;;;20602:33:0;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;20560:75:0;;;;20653:52;20671:7;20680:10;20692:12;20653:17;:52::i;:::-;20646:59;20183:530;-1:-1:-1;;;;;;;20183:530:0:o;16213:422::-;16580:20;16619:8;;;16213:422::o;22723:742::-;22838:12;22867:7;22863:595;;;-1:-1:-1;22898:10:0;22891:17;;22863:595;23012:17;;:21;23008:439;;23275:10;23269:17;23336:15;23323:10;23319:2;23315:19;23308:44;23223:148;23418:12;23411:20;;-1:-1:-1;;;23411:20: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;23411:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35517:7980;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Swarm Source
ipfs://14f0f65c6833f7ac834b7fe630610150b2dd3565818b479e2cbc125a1d6a4a74
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $0.001337 | 206,488.7341 | $276.12 |
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.