More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 1,050 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Emergency Withdr... | 25049437 | 1096 days ago | IN | 0 POL | 0.00149859 | ||||
Emergency Withdr... | 25049437 | 1096 days ago | IN | 0 POL | 0.00149548 | ||||
Emergency Withdr... | 25049320 | 1096 days ago | IN | 0 POL | 0.00149548 | ||||
Withdraw | 23278347 | 1142 days ago | IN | 0 POL | 0.00341394 | ||||
Withdraw | 22946475 | 1150 days ago | IN | 0 POL | 0.00209136 | ||||
Deposit | 22946467 | 1150 days ago | IN | 0 POL | 0.00231237 | ||||
Withdraw | 22844179 | 1153 days ago | IN | 0 POL | 0.00107031 | ||||
Withdraw | 22844173 | 1153 days ago | IN | 0 POL | 0.00317358 | ||||
Emergency Reward... | 22166814 | 1170 days ago | IN | 0 POL | 0.00153027 | ||||
Withdraw | 22050735 | 1173 days ago | IN | 0 POL | 0.00317322 | ||||
Withdraw | 21899730 | 1177 days ago | IN | 0 POL | 0.00292663 | ||||
Withdraw | 21761206 | 1181 days ago | IN | 0 POL | 0.002091 | ||||
Deposit | 21761190 | 1181 days ago | IN | 0 POL | 0.00282537 | ||||
Withdraw | 21608409 | 1185 days ago | IN | 0 POL | 0.00266022 | ||||
Withdraw | 21592921 | 1185 days ago | IN | 0 POL | 0.00266022 | ||||
Withdraw | 21588130 | 1185 days ago | IN | 0 POL | 0.002091 | ||||
Deposit | 21588127 | 1185 days ago | IN | 0 POL | 0.00231237 | ||||
Withdraw | 21586824 | 1185 days ago | IN | 0 POL | 0.00317358 | ||||
Withdraw | 21586610 | 1185 days ago | IN | 0 POL | 0.00399087 | ||||
Withdraw | 21580339 | 1185 days ago | IN | 0 POL | 0.0052887 | ||||
Withdraw | 21572845 | 1186 days ago | IN | 0 POL | 0.00209136 | ||||
Deposit | 21572831 | 1186 days ago | IN | 0 POL | 0.00231237 | ||||
Withdraw | 21566036 | 1186 days ago | IN | 0 POL | 0.00317358 | ||||
Withdraw | 21566035 | 1186 days ago | IN | 0 POL | 0.00266058 | ||||
Withdraw | 21565487 | 1186 days ago | IN | 0 POL | 0.0002327 |
Loading...
Loading
Contract Name:
FarmLockTier
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT pragma solidity 0.6.12; // PolyDefi farm with lock tier function : Stake Lps (or SAS), earn 1 native or partner token import "./SafeMath.sol"; import "./Ownable.sol"; import "./IERC20.sol"; import "./SafeERC20.sol"; import "./ReentrancyGuard.sol"; contract FarmLockTier is Ownable, ReentrancyGuard { using SafeMath for uint256; using SafeERC20 for IERC20; // Info of each user. struct UserInfo { uint256 amount; // How many LP tokens the user has provided. uint256 rewardDebt; // Reward debt. See explanation below. uint256 lockedAmount; // LP or token locked up. uint256 lockedUntil; // Locked until end time of actual IDO lock } // Info of the pool. struct PoolInfo { IERC20 lpToken; // Address of LP token contract. uint256 allocPoint; // How many allocation points assigned to this pool. REWARDTOKENs to distribute per block. uint256 lastRewardBlock; // Last block number that REWARDTOKENs distribution occurs. uint256 accRewardTPerShare; // Accumulated REWARDTOKENs per share, times 1e30. See below. uint16 withdrawalFeeBP; // Withdrawal fee in basis points uint256 endBlock; // The block number when REWARDTOKEN pool ends. uint256 totalLockedAmount; // The sum of locked amount into the pool } // Info of IDO lockt times struct IDOLockTimes { uint256 start; // UNIX timestamp of the lock beginning uint256 max; // UNIX timestamp of the max time to lock uint256 end; // UNIX timestamp of the unlock } IERC20 public lpOrToken; IERC20 public rewardToken; // REWARDTOKEN tokens created per block. uint256 public rewardPerBlock; // Withdrawal fee address address public feeAddress; // Maximum lock duration in sec (10 days) uint256 public constant MAX_LOCK_DURATION = 864000; // Maximum withdrawal fee in basis point (max 10%) uint256 public constant MAX_WITHDRAWAL_FEE = 1000; // unique pool info PoolInfo public poolInfo; // Info of each user that stakes LP tokens. mapping (address => UserInfo) public userInfo; // Total allocation poitns. Must be the sum of all allocation points in all pools. uint256 private totalAllocPoint = 0; // The block number when REWARDTOKEN pool starts. uint256 public startBlock; IDOLockTimes public lockTimes; event Deposit(address indexed user, uint256 amount); event Withdraw(address indexed user, uint256 amount); event EmergencyWithdraw(address indexed user, uint256 amount); event FeeAddressUpdated(address indexed user, address indexed newAddress); event LockedAmount(address indexed user, uint256 indexed amount); event StartLockTimeUpdated(address indexed user, uint256 previousAmount, uint256 newAmount); event MaxLockTimeUpdated(address indexed user, uint256 previousAmount, uint256 newAmount); event EndLockTimeUpdated(address indexed user, uint256 previousAmount, uint256 newAmount); event StartBlockUpdated(address indexed user, uint256 previousAmount, uint256 newAmount); event EndBlockUpdated(address indexed user, uint256 previousAmount, uint256 newAmount); event WithdrawalFeeUpdated(address indexed user, uint16 previousAmount, uint16 newAmount); constructor( IERC20 _lpOrToken, IERC20 _rewardToken, uint256 _rewardPerBlock, uint16 _withdrawalFeeBP, uint256 _startBlock, uint256 _endBlock, address _feeAddress ) public { lpOrToken = _lpOrToken; rewardToken = _rewardToken; rewardPerBlock = _rewardPerBlock; startBlock = _startBlock; feeAddress = _feeAddress; // Withdrawal fee limited to max 10% require(_withdrawalFeeBP <= 1000, "contract: invalid withdrawal fee basis points"); // init staking pool poolInfo.lpToken = _lpOrToken; poolInfo.allocPoint = 1000; poolInfo.lastRewardBlock = startBlock; poolInfo.accRewardTPerShare = 0; poolInfo.withdrawalFeeBP = _withdrawalFeeBP; poolInfo.endBlock = _endBlock; poolInfo.totalLockedAmount = 0; totalAllocPoint = 1000; } function stopReward() public onlyOwner { poolInfo.endBlock = block.number; } // Return reward multiplier over the given _from to _to block. function getMultiplier(uint256 _from, uint256 _to) public view returns (uint256) { if (_to <= poolInfo.endBlock) { return _to.sub(_from); } else if (_from >= poolInfo.endBlock) { return 0; } else { return poolInfo.endBlock.sub(_from); } } // View function to see pending Reward on frontend. function pendingReward(address _user) external view returns (uint256) { PoolInfo storage pool = poolInfo; UserInfo storage user = userInfo[_user]; uint256 accRewardTPerShare = pool.accRewardTPerShare; uint256 lpSupply = pool.lpToken.balanceOf(address(this)); if (block.number > pool.lastRewardBlock && lpSupply != 0) { uint256 multiplier = getMultiplier(pool.lastRewardBlock, block.number); uint256 rewardTReward = multiplier.mul(rewardPerBlock).mul(pool.allocPoint).div(totalAllocPoint); accRewardTPerShare = accRewardTPerShare.add(rewardTReward.mul(1e30).div(lpSupply)); } return user.amount.mul(accRewardTPerShare).div(1e30).sub(user.rewardDebt); } // Update reward variables of the given pool to be up-to-date. function updatePool() public { PoolInfo storage pool = poolInfo; if (block.number <= pool.lastRewardBlock) { return; } uint256 lpSupply = pool.lpToken.balanceOf(address(this)); if (lpSupply == 0) { pool.lastRewardBlock = block.number; return; } uint256 multiplier = getMultiplier(pool.lastRewardBlock, block.number); uint256 rewardTReward = multiplier.mul(rewardPerBlock).mul(pool.allocPoint).div(totalAllocPoint); pool.accRewardTPerShare = pool.accRewardTPerShare.add(rewardTReward.mul(1e30).div(lpSupply)); pool.lastRewardBlock = block.number; } // Stake LP or token function deposit(uint256 _amount) public nonReentrant { PoolInfo storage pool = poolInfo; UserInfo storage user = userInfo[msg.sender]; updatePool(); if (user.amount > 0) { uint256 pending = user.amount.mul(pool.accRewardTPerShare).div(1e30).sub(user.rewardDebt); if(pending > 0) { rewardToken.safeTransfer(address(msg.sender), pending); } } if(_amount > 0) { // Handle any token with transfer tax uint256 balanceBefore = pool.lpToken.balanceOf(address(this)); pool.lpToken.safeTransferFrom(address(msg.sender), address(this), _amount); _amount = pool.lpToken.balanceOf(address(this)).sub(balanceBefore); user.amount = user.amount.add(_amount); } user.rewardDebt = user.amount.mul(pool.accRewardTPerShare).div(1e30); emit Deposit(msg.sender, _amount); } // Withdraw LP or token function withdraw(uint256 _amount) public nonReentrant { PoolInfo storage pool = poolInfo; UserInfo storage user = userInfo[msg.sender]; uint256 _availableAmount; if (block.timestamp >= user.lockedUntil){ pool.totalLockedAmount = pool.totalLockedAmount.sub(user.lockedAmount); user.lockedAmount = 0; _availableAmount = user.amount; } else { _availableAmount = user.amount.sub(user.lockedAmount); } require(_availableAmount >= _amount, "withdraw: not good"); updatePool(); uint256 pending = user.amount.mul(pool.accRewardTPerShare).div(1e30).sub(user.rewardDebt); if(pending > 0) { rewardToken.safeTransfer(address(msg.sender), pending); } if(_amount > 0) { if(pool.withdrawalFeeBP > 0){ uint256 withdrawalFee = _amount.mul(pool.withdrawalFeeBP).div(10000); pool.lpToken.safeTransfer(feeAddress, withdrawalFee); user.amount = user.amount.sub(_amount); _amount = _amount.sub(withdrawalFee); pool.lpToken.safeTransfer(address(msg.sender), _amount); }else{ user.amount = user.amount.sub(_amount); pool.lpToken.safeTransfer(address(msg.sender), _amount); } } user.rewardDebt = user.amount.mul(pool.accRewardTPerShare).div(1e30); emit Withdraw(msg.sender, _amount); } // Return availabe amount per user for the UI function getAvailableAmount(address _user) public view returns (uint256) { UserInfo storage user = userInfo[_user]; uint256 _availableAmount; if (block.timestamp >= user.lockedUntil){ _availableAmount = user.amount; } else { _availableAmount = user.amount.sub(user.lockedAmount); } return _availableAmount; } // Lock LP or token // To participate IDO, need locked amount for a duration function lock(uint256 _amount) public nonReentrant { PoolInfo storage pool = poolInfo; UserInfo storage user = userInfo[msg.sender]; require(block.timestamp > lockTimes.start, "lock : start : can't lock now"); require(lockTimes.max > block.timestamp, "lock : max : can't lock now"); require(_amount > 0, 'lock: amount too low'); require(user.amount > 0, 'lock: nothing to lock'); require(_amount <= user.amount, 'lock: not enough token'); user.lockedAmount = user.lockedAmount.add(_amount); user.lockedUntil = lockTimes.end; pool.totalLockedAmount = pool.totalLockedAmount.add(_amount); emit LockedAmount(msg.sender, _amount); } // Withdraw without caring about rewards. EMERGENCY ONLY. function emergencyWithdraw() public nonReentrant { PoolInfo storage pool = poolInfo; UserInfo storage user = userInfo[msg.sender]; uint256 _availableAmount; if (block.timestamp >= user.lockedUntil){ pool.totalLockedAmount = pool.totalLockedAmount.sub(user.lockedAmount); user.lockedAmount = 0; _availableAmount = user.amount; } else { _availableAmount = user.amount.sub(user.lockedAmount); } pool.lpToken.safeTransfer(address(msg.sender), _availableAmount); user.amount = user.amount.sub(_availableAmount); user.rewardDebt = 0; emit EmergencyWithdraw(msg.sender, _availableAmount); } // Withdraw reward. EMERGENCY ONLY. function emergencyRewardWithdraw(uint256 _amount) public onlyOwner { require(_amount < rewardToken.balanceOf(address(this)), 'emergencyRewardWithdraw: not enough token'); rewardToken.safeTransfer(address(msg.sender), _amount); } // Add a function to update rewardPerBlock. Can only be called by the owner. function updateRewardPerBlock(uint256 _rewardPerBlock) public onlyOwner { rewardPerBlock = _rewardPerBlock; //Automatically updatePool 0 updatePool(); } // Add a function to update bonusEndBlock. Can only be called by the owner. function updateEndBlock(uint256 _endBlock) public onlyOwner { emit EndBlockUpdated(msg.sender, poolInfo.endBlock, _endBlock); poolInfo.endBlock = _endBlock; } // Update the given pool's withdrawal fee. Can only be called by the owner. function updateWithdrawalFeeBP(uint16 _withdrawalFeeBP) public onlyOwner { require(_withdrawalFeeBP <= MAX_WITHDRAWAL_FEE, "updateWithdrawalFeeBP: invalid withdrawal fee basis points"); emit WithdrawalFeeUpdated(msg.sender, poolInfo.withdrawalFeeBP, _withdrawalFeeBP); poolInfo.withdrawalFeeBP = _withdrawalFeeBP; } // Add a function to update startBlock. Can only be called by the owner. function updateStartBlock(uint256 _startBlock) public onlyOwner { //Can only be updated if the original startBlock is not minted require(block.number <= poolInfo.lastRewardBlock, "updateStartBlock: startblock already minted"); poolInfo.lastRewardBlock = _startBlock; emit StartBlockUpdated(msg.sender, startBlock, _startBlock); startBlock = _startBlock; } //Update fee address by the owner function setFeeAddress(address _feeAddress) public onlyOwner { require(_feeAddress != address(0), "setFeeAddress: ZERO"); feeAddress = _feeAddress; emit FeeAddressUpdated(msg.sender, _feeAddress); } // Set lock times for next IDO. Can only be called by the owner. function setLockTimes(uint256 _start, uint256 _max, uint256 _end) public onlyOwner { require(_start > lockTimes.end, "updateLockTimes : start time must come after end of last IDO"); require(_start > 0, "updateLockTimes : start time 0"); require(_start > block.timestamp, "updateLockTimes : can't set start before now"); require(_end > _start, "updateLockTimes : end time lower than start"); require(_end > _max, "updateLockTimes : end time lower than max"); require(_max > _start, "updateLockTimes : max time lower than start"); uint256 _totalduration = _end.sub(_start); require(_totalduration < MAX_LOCK_DURATION, "updateLockTimes : total lock duration too high"); emit StartLockTimeUpdated(msg.sender, lockTimes.start, _start); emit MaxLockTimeUpdated(msg.sender, lockTimes.max, _max); emit EndLockTimeUpdated(msg.sender, lockTimes.end, _end); lockTimes.start = _start; lockTimes.max = _max; lockTimes.end = _end; } // Update max lock times in case IDO slitghly postpone. Can only be called by the owner. function updateMaxLockTime(uint256 _max) public onlyOwner { require(lockTimes.end > _max, "updateLockTimes : end time lower than max"); require(_max > lockTimes.start, "updateLockTimes : max time lower than start"); emit MaxLockTimeUpdated(msg.sender, lockTimes.max, _max); lockTimes.max = _max; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.2; /** * @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) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @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"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); 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); } } } }
// 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; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.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); }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; import "./Context.sol"; /** * @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 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; } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor () internal { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.0; import "./IERC20.sol"; import "./SafeMath.sol"; import "./Address.sol"; /** * @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"); } } }
// 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, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract IERC20","name":"_lpOrToken","type":"address"},{"internalType":"contract IERC20","name":"_rewardToken","type":"address"},{"internalType":"uint256","name":"_rewardPerBlock","type":"uint256"},{"internalType":"uint16","name":"_withdrawalFeeBP","type":"uint16"},{"internalType":"uint256","name":"_startBlock","type":"uint256"},{"internalType":"uint256","name":"_endBlock","type":"uint256"},{"internalType":"address","name":"_feeAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EmergencyWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"EndBlockUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"EndLockTimeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"FeeAddressUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LockedAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"MaxLockTimeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"StartBlockUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"StartLockTimeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint16","name":"previousAmount","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"newAmount","type":"uint16"}],"name":"WithdrawalFeeUpdated","type":"event"},{"inputs":[],"name":"MAX_LOCK_DURATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_WITHDRAWAL_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"emergencyRewardWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getAvailableAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_from","type":"uint256"},{"internalType":"uint256","name":"_to","type":"uint256"}],"name":"getMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lockTimes","outputs":[{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"max","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpOrToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"pendingReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolInfo","outputs":[{"internalType":"contract IERC20","name":"lpToken","type":"address"},{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"uint256","name":"lastRewardBlock","type":"uint256"},{"internalType":"uint256","name":"accRewardTPerShare","type":"uint256"},{"internalType":"uint16","name":"withdrawalFeeBP","type":"uint16"},{"internalType":"uint256","name":"endBlock","type":"uint256"},{"internalType":"uint256","name":"totalLockedAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardPerBlock","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":"_feeAddress","type":"address"}],"name":"setFeeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_start","type":"uint256"},{"internalType":"uint256","name":"_max","type":"uint256"},{"internalType":"uint256","name":"_end","type":"uint256"}],"name":"setLockTimes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stopReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_endBlock","type":"uint256"}],"name":"updateEndBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_max","type":"uint256"}],"name":"updateMaxLockTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updatePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rewardPerBlock","type":"uint256"}],"name":"updateRewardPerBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_startBlock","type":"uint256"}],"name":"updateStartBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_withdrawalFeeBP","type":"uint16"}],"name":"updateWithdrawalFeeBP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"},{"internalType":"uint256","name":"lockedAmount","type":"uint256"},{"internalType":"uint256","name":"lockedUntil","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526000600e553480156200001657600080fd5b50604051620025b6380380620025b6833981810160405260e08110156200003c57600080fd5b508051602082015160408301516060840151608085015160a086015160c0909601519495939492939192909190600062000075620001b4565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060018055600280546001600160a01b03808a166001600160a01b031992831617909255600380548984169083161790556004879055600f85905560058054928416929091169190911790556103e861ffff85161115620001515760405162461bcd60e51b815260040180806020018281038252602d81526020018062002589602d913960400191505060405180910390fd5b50600680546001600160a01b0319166001600160a01b039790971696909617909555506103e86007819055600f5460085560006009819055600a805461ffff191661ffff9490941693909317909255600b94909455600c555050600e55620001b8565b3390565b6123c180620001c86000396000f3fe608060405234801561001057600080fd5b50600436106101d95760003560e01c80638705fcd411610104578063db2e21bc116100a2578063f2fde38b11610071578063f2fde38b146104aa578063f40f0f52146104d0578063f7c618c1146104f6578063fac2b9ba146104fe576101d9565b8063db2e21bc14610475578063dd4670641461047d578063e3161ddd1461049a578063eb6ed330146104a2576101d9565b80638dbb1e3a116100de5780638dbb1e3a146103e657806393fb26e014610409578063b6b55f251461042f578063cb9f83bc1461044c576101d9565b80638705fcd4146103b05780638ae39cac146103d65780638da5cb5b146103de576101d9565b806331d940251161017c5780634f1bfc9e1161014b5780634f1bfc9e1461034a5780635a2f3d0914610352578063715018a6146103a057806380dc0672146103a8576101d9565b806331d94025146102fc5780633279beab1461031d578063412753581461033a57806348cd4cb114610342576101d9565b80631959a002116101b85780631959a002146102375780631f3a71ba146102835780632907af24146102bb5780632e1a7d4d146102df576101d9565b80626f0231146101de57806301f8a976146101fd57806306c9cd6c1461021a575b600080fd5b6101fb600480360360208110156101f457600080fd5b503561051b565b005b6101fb6004803603602081101561021357600080fd5b50356105b6565b6101fb6004803603602081101561023057600080fd5b503561061e565b61025d6004803603602081101561024d57600080fd5b50356001600160a01b0316610739565b604080519485526020850193909352838301919091526060830152519081900360800190f35b6102a96004803603602081101561029957600080fd5b50356001600160a01b0316610760565b60408051918252519081900360200190f35b6102c36107a7565b604080516001600160a01b039092168252519081900360200190f35b6101fb600480360360208110156102f557600080fd5b50356107b6565b6101fb6004803603602081101561031257600080fd5b503561ffff16610a20565b6101fb6004803603602081101561033357600080fd5b5035610b19565b6102c3610c3c565b6102a9610c4b565b6102a9610c51565b61035a610c58565b604080516001600160a01b039098168852602088019690965286860194909452606086019290925261ffff16608085015260a084015260c0830152519081900360e00190f35b6101fb610c83565b6101fb610d25565b6101fb600480360360208110156103c657600080fd5b50356001600160a01b0316610d83565b6102a9610e78565b6102c3610e7e565b6102a9600480360360408110156103fc57600080fd5b5080359060200135610e8d565b610411610ece565b60408051938452602084019290925282820152519081900360600190f35b6101fb6004803603602081101561044557600080fd5b5035610eda565b6101fb6004803603606081101561046257600080fd5b508035906020810135906040013561112d565b6101fb61142a565b6101fb6004803603602081101561049357600080fd5b5035611537565b6101fb61178d565b6102a96118a5565b6101fb600480360360208110156104c057600080fd5b50356001600160a01b03166118ab565b6102a9600480360360208110156104e657600080fd5b50356001600160a01b03166119a3565b6102c3611aeb565b6101fb6004803603602081101561051457600080fd5b5035611afa565b610523611bdb565b6000546001600160a01b03908116911614610573576040805162461bcd60e51b815260206004820181905260248201526000805160206122c0833981519152604482015290519081900360640190fd5b600b546040805191825260208201839052805133927f1c1ba308e9b6b16ebf144bf1b5d35568a5d60dd120ef0c804034e44decf06db992908290030190a2600b55565b6105be611bdb565b6000546001600160a01b0390811691161461060e576040805162461bcd60e51b815260206004820181905260248201526000805160206122c0833981519152604482015290519081900360640190fd5b600481905561061b61178d565b50565b610626611bdb565b6000546001600160a01b03908116911614610676576040805162461bcd60e51b815260206004820181905260248201526000805160206122c0833981519152604482015290519081900360640190fd5b60125481106106b65760405162461bcd60e51b81526004018080602001828103825260298152602001806121646029913960400191505060405180910390fd5b60105481116106f65760405162461bcd60e51b815260040180806020018281038252602b81526020018061223a602b913960400191505060405180910390fd5b6011546040805191825260208201839052805133927fb0c16471768e2df5c8be6aa305304b1e4d284a1bf83756cb3a0b68e10830cfd992908290030190a2601155565b600d6020526000908152604090208054600182015460028301546003909301549192909184565b6001600160a01b0381166000908152600d6020526040812060038101548290421061078d575080546107a0565b6002820154825461079d91611bdf565b90505b9392505050565b6002546001600160a01b031681565b600260015414156107fc576040805162461bcd60e51b815260206004820152601f602482015260008051602061218d833981519152604482015290519081900360640190fd5b6002600155336000908152600d602052604081206003810154600692904210610846576002820154600684015461083291611bdf565b600684015550600060028201558054610859565b6002820154825461085691611bdf565b90505b838110156108a3576040805162461bcd60e51b81526020600482015260126024820152711dda5d1a191c985dce881b9bdd0819dbdbd960721b604482015290519081900360640190fd5b6108ab61178d565b60006108ec83600101546108e668327cb2734119d3b7a9601e1b6108e088600301548860000154611c2190919063ffffffff16565b90611c7a565b90611bdf565b9050801561090b5760035461090b906001600160a01b03163383611cbc565b84156109b857600484015461ffff161561099457600484015460009061093e90612710906108e090899061ffff16611c21565b600554865491925061095d916001600160a01b03908116911683611cbc565b83546109699087611bdf565b84556109758682611bdf565b855490965061098e906001600160a01b03163388611cbc565b506109b8565b82546109a09086611bdf565b835583546109b8906001600160a01b03163387611cbc565b600384015483546109da9168327cb2734119d3b7a9601e1b916108e091611c21565b600184015560408051868152905133917f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364919081900360200190a2505060018055505050565b610a28611bdb565b6000546001600160a01b03908116911614610a78576040805162461bcd60e51b815260206004820181905260248201526000805160206122c0833981519152604482015290519081900360640190fd5b6103e88161ffff161115610abd5760405162461bcd60e51b815260040180806020018281038252603a815260200180612286603a913960400191505060405180910390fd5b600a546040805161ffff92831681529183166020830152805133927f3c2e3502d45d83cab50a562fb3c423ca03711d9c4753823ff3dea7d0e6b0075e92908290030190a2600a805461ffff191661ffff92909216919091179055565b610b21611bdb565b6000546001600160a01b03908116911614610b71576040805162461bcd60e51b815260206004820181905260248201526000805160206122c0833981519152604482015290519081900360640190fd5b600354604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610bbc57600080fd5b505afa158015610bd0573d6000803e3d6000fd5b505050506040513d6020811015610be657600080fd5b50518110610c255760405162461bcd60e51b81526004018080602001828103825260298152602001806123356029913960400191505060405180910390fd5b60035461061b906001600160a01b03163383611cbc565b6005546001600160a01b031681565b600f5481565b620d2f0081565b600654600754600854600954600a54600b54600c546001600160a01b039096169561ffff9092169187565b610c8b611bdb565b6000546001600160a01b03908116911614610cdb576040805162461bcd60e51b815260206004820181905260248201526000805160206122c0833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b610d2d611bdb565b6000546001600160a01b03908116911614610d7d576040805162461bcd60e51b815260206004820181905260248201526000805160206122c0833981519152604482015290519081900360640190fd5b43600b55565b610d8b611bdb565b6000546001600160a01b03908116911614610ddb576040805162461bcd60e51b815260206004820181905260248201526000805160206122c0833981519152604482015290519081900360640190fd5b6001600160a01b038116610e2c576040805162461bcd60e51b8152602060048201526013602482015272736574466565416464726573733a205a45524f60681b604482015290519081900360640190fd5b600580546001600160a01b0319166001600160a01b03831690811790915560405133907f11f35a22548bcd4c3788ab4a7e4fba427a2014f02e5d5e2da9af62212c03183f90600090a350565b60045481565b6000546001600160a01b031690565b600b546000908211610eaa57610ea38284611bdf565b9050610ec8565b600b548310610ebb57506000610ec8565b600b54610ea39084611bdf565b92915050565b60105460115460125483565b60026001541415610f20576040805162461bcd60e51b815260206004820152601f602482015260008051602061218d833981519152604482015290519081900360640190fd5b6002600155336000908152600d60205260409020600690610f3f61178d565b805415610f9c576000610f7b82600101546108e668327cb2734119d3b7a9601e1b6108e087600301548760000154611c2190919063ffffffff16565b90508015610f9a57600354610f9a906001600160a01b03163383611cbc565b505b82156110c7578154604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015610fec57600080fd5b505afa158015611000573d6000803e3d6000fd5b505050506040513d602081101561101657600080fd5b50518354909150611032906001600160a01b0316333087611d13565b8254604080516370a0823160e01b815230600482015290516110b49284926001600160a01b03909116916370a0823191602480820192602092909190829003018186803b15801561108257600080fd5b505afa158015611096573d6000803e3d6000fd5b505050506040513d60208110156110ac57600080fd5b505190611bdf565b82549094506110c39085611d73565b8255505b600382015481546110e99168327cb2734119d3b7a9601e1b916108e091611c21565b600182015560408051848152905133917fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c919081900360200190a250506001805550565b611135611bdb565b6000546001600160a01b03908116911614611185576040805162461bcd60e51b815260206004820181905260248201526000805160206122c0833981519152604482015290519081900360640190fd5b60125483116111c55760405162461bcd60e51b815260040180806020018281038252603c8152602001806121d3603c913960400191505060405180910390fd5b6000831161121a576040805162461bcd60e51b815260206004820152601e60248201527f7570646174654c6f636b54696d6573203a2073746172742074696d6520300000604482015290519081900360640190fd5b4283116112585760405162461bcd60e51b815260040180806020018281038252602c815260200180612138602c913960400191505060405180910390fd5b8281116112965760405162461bcd60e51b815260040180806020018281038252602b8152602001806122e0602b913960400191505060405180910390fd5b8181116112d45760405162461bcd60e51b81526004018080602001828103825260298152602001806121646029913960400191505060405180910390fd5b8282116113125760405162461bcd60e51b815260040180806020018281038252602b81526020018061223a602b913960400191505060405180910390fd5b600061131e8285611bdf565b9050620d2f0081106113615760405162461bcd60e51b815260040180806020018281038252602e81526020018061235e602e913960400191505060405180910390fd5b6010546040805191825260208201869052805133927fc5de6cb34b413b9e1e65c11405b399be8cac56fab863017c0d850596972b653b92908290030190a26011546040805191825260208201859052805133927fb0c16471768e2df5c8be6aa305304b1e4d284a1bf83756cb3a0b68e10830cfd992908290030190a26012546040805191825260208201849052805133927fccc959e1f2efb34fe547447b895a3a825fdf77478f79ef32e16fe56455c1e36a92908290030190a250601092909255601155601255565b60026001541415611470576040805162461bcd60e51b815260206004820152601f602482015260008051602061218d833981519152604482015290519081900360640190fd5b6002600155336000908152600d6020526040812060038101546006929042106114ba57600282015460068401546114a691611bdf565b6006840155506000600282015580546114cd565b600282015482546114ca91611bdf565b90505b82546114e3906001600160a01b03163383611cbc565b81546114ef9082611bdf565b82556000600183015560408051828152905133917f5fafa99d0643513820be26656b45130b01e1c03062e1266bf36f88cbd3bd9695919081900360200190a250506001805550565b6002600154141561157d576040805162461bcd60e51b815260206004820152601f602482015260008051602061218d833981519152604482015290519081900360640190fd5b6002600155336000908152600d602052604090206010546006919042116115eb576040805162461bcd60e51b815260206004820152601d60248201527f6c6f636b203a207374617274203a2063616e2774206c6f636b206e6f77000000604482015290519081900360640190fd5b6011544210611641576040805162461bcd60e51b815260206004820152601b60248201527f6c6f636b203a206d6178203a2063616e2774206c6f636b206e6f770000000000604482015290519081900360640190fd5b6000831161168d576040805162461bcd60e51b81526020600482015260146024820152736c6f636b3a20616d6f756e7420746f6f206c6f7760601b604482015290519081900360640190fd5b80546116d8576040805162461bcd60e51b81526020600482015260156024820152746c6f636b3a206e6f7468696e6720746f206c6f636b60581b604482015290519081900360640190fd5b8054831115611727576040805162461bcd60e51b81526020600482015260166024820152753637b1b59d103737ba1032b737bab3b4103a37b5b2b760511b604482015290519081900360640190fd5b60028101546117369084611d73565b6002820155601254600382015560068201546117529084611d73565b6006830155604051839033907f8f1e800ade33a9ed22b726f4c105e9b850d7e8c94cc3a721a9350009ca470c4790600090a350506001805550565b600854600690431161179f57506118a3565b8054604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156117e957600080fd5b505afa1580156117fd573d6000803e3d6000fd5b505050506040513d602081101561181357600080fd5b50519050806118295750436002909101556118a3565b6000611839836002015443610e8d565b90506000611866600e546108e0866001015461186060045487611c2190919063ffffffff16565b90611c21565b9050611890611885846108e08468327cb2734119d3b7a9601e1b611c21565b600386015490611d73565b6003850155505043600290920191909155505b565b6103e881565b6118b3611bdb565b6000546001600160a01b03908116911614611903576040805162461bcd60e51b815260206004820181905260248201526000805160206122c0833981519152604482015290519081900360640190fd5b6001600160a01b0381166119485760405162461bcd60e51b81526004018080602001828103825260268152602001806121ad6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038082166000908152600d602090815260408083206009546006805484516370a0823160e01b815230600482015294519697919693959294889491909216926370a082319260248082019391829003018186803b158015611a0a57600080fd5b505afa158015611a1e573d6000803e3d6000fd5b505050506040513d6020811015611a3457600080fd5b5051600285015490915043118015611a4b57508015155b15611ab2576000611a60856002015443610e8d565b90506000611a87600e546108e0886001015461186060045487611c2190919063ffffffff16565b9050611aad611aa6846108e08468327cb2734119d3b7a9601e1b611c21565b8590611d73565b935050505b611ae183600101546108e668327cb2734119d3b7a9601e1b6108e0868860000154611c2190919063ffffffff16565b9695505050505050565b6003546001600160a01b031681565b611b02611bdb565b6000546001600160a01b03908116911614611b52576040805162461bcd60e51b815260206004820181905260248201526000805160206122c0833981519152604482015290519081900360640190fd5b600854431115611b935760405162461bcd60e51b815260040180806020018281038252602b81526020018061220f602b913960400191505060405180910390fd5b6008819055600f546040805191825260208201839052805133927f2261b0608377dfea3647390a585c309d8dc877219b37f164a0f966973be8851192908290030190a2600f55565b3390565b60006107a083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611dcd565b600082611c3057506000610ec8565b82820282848281611c3d57fe5b04146107a05760405162461bcd60e51b81526004018080602001828103825260218152602001806122656021913960400191505060405180910390fd5b60006107a083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611e64565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611d0e908490611ec9565b505050565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052611d6d908590611ec9565b50505050565b6000828201838110156107a0576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008184841115611e5c5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611e21578181015183820152602001611e09565b50505050905090810190601f168015611e4e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008183611eb35760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611e21578181015183820152602001611e09565b506000838581611ebf57fe5b0495945050505050565b6060611f1e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611f7a9092919063ffffffff16565b805190915015611d0e57808060200190516020811015611f3d57600080fd5b5051611d0e5760405162461bcd60e51b815260040180806020018281038252602a81526020018061230b602a913960400191505060405180910390fd5b6060611f898484600085611f91565b949350505050565b6060611f9c856120fe565b611fed576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b6020831061202c5780518252601f19909201916020918201910161200d565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461208e576040519150601f19603f3d011682016040523d82523d6000602084013e612093565b606091505b509150915081156120a7579150611f899050565b8051156120b75780518082602001fd5b60405162461bcd60e51b8152602060048201818152865160248401528651879391928392604401919085019080838360008315611e21578181015183820152602001611e09565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590611f8957505015159291505056fe7570646174654c6f636b54696d6573203a2063616e277420736574207374617274206265666f7265206e6f777570646174654c6f636b54696d6573203a20656e642074696d65206c6f776572207468616e206d61785265656e7472616e637947756172643a207265656e7472616e742063616c6c004f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573737570646174654c6f636b54696d6573203a2073746172742074696d65206d75737420636f6d6520616674657220656e64206f66206c6173742049444f7570646174655374617274426c6f636b3a207374617274626c6f636b20616c7265616479206d696e7465647570646174654c6f636b54696d6573203a206d61782074696d65206c6f776572207468616e207374617274536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f777570646174655769746864726177616c46656542503a20696e76616c6964207769746864726177616c2066656520626173697320706f696e74734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65727570646174654c6f636b54696d6573203a20656e642074696d65206c6f776572207468616e2073746172745361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564656d657267656e637952657761726457697468647261773a206e6f7420656e6f75676820746f6b656e7570646174654c6f636b54696d6573203a20746f74616c206c6f636b206475726174696f6e20746f6f2068696768a26469706673582212203293d2f5e7998168f6a83e9cef70f194871754bc9b3abaf4701b1d36ee4108c064736f6c634300060c0033636f6e74726163743a20696e76616c6964207769746864726177616c2066656520626173697320706f696e7473000000000000000000000000c121e1f36b2c0a65b1a12808be3a242b03c27a2a000000000000000000000000285209dd294fb6763740e1c92d654d92eaaadf2200000000000000000000000000000000000000000000000004e86cdc1c72f9f0000000000000000000000000000000000000000000000000000000000000012c00000000000000000000000000000000000000000000000000000000012c23f000000000000000000000000000000000000000000000000000000000017354f0000000000000000000000000e1af3f32fb9b3890e9887a174ccaa912c52788b8
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101d95760003560e01c80638705fcd411610104578063db2e21bc116100a2578063f2fde38b11610071578063f2fde38b146104aa578063f40f0f52146104d0578063f7c618c1146104f6578063fac2b9ba146104fe576101d9565b8063db2e21bc14610475578063dd4670641461047d578063e3161ddd1461049a578063eb6ed330146104a2576101d9565b80638dbb1e3a116100de5780638dbb1e3a146103e657806393fb26e014610409578063b6b55f251461042f578063cb9f83bc1461044c576101d9565b80638705fcd4146103b05780638ae39cac146103d65780638da5cb5b146103de576101d9565b806331d940251161017c5780634f1bfc9e1161014b5780634f1bfc9e1461034a5780635a2f3d0914610352578063715018a6146103a057806380dc0672146103a8576101d9565b806331d94025146102fc5780633279beab1461031d578063412753581461033a57806348cd4cb114610342576101d9565b80631959a002116101b85780631959a002146102375780631f3a71ba146102835780632907af24146102bb5780632e1a7d4d146102df576101d9565b80626f0231146101de57806301f8a976146101fd57806306c9cd6c1461021a575b600080fd5b6101fb600480360360208110156101f457600080fd5b503561051b565b005b6101fb6004803603602081101561021357600080fd5b50356105b6565b6101fb6004803603602081101561023057600080fd5b503561061e565b61025d6004803603602081101561024d57600080fd5b50356001600160a01b0316610739565b604080519485526020850193909352838301919091526060830152519081900360800190f35b6102a96004803603602081101561029957600080fd5b50356001600160a01b0316610760565b60408051918252519081900360200190f35b6102c36107a7565b604080516001600160a01b039092168252519081900360200190f35b6101fb600480360360208110156102f557600080fd5b50356107b6565b6101fb6004803603602081101561031257600080fd5b503561ffff16610a20565b6101fb6004803603602081101561033357600080fd5b5035610b19565b6102c3610c3c565b6102a9610c4b565b6102a9610c51565b61035a610c58565b604080516001600160a01b039098168852602088019690965286860194909452606086019290925261ffff16608085015260a084015260c0830152519081900360e00190f35b6101fb610c83565b6101fb610d25565b6101fb600480360360208110156103c657600080fd5b50356001600160a01b0316610d83565b6102a9610e78565b6102c3610e7e565b6102a9600480360360408110156103fc57600080fd5b5080359060200135610e8d565b610411610ece565b60408051938452602084019290925282820152519081900360600190f35b6101fb6004803603602081101561044557600080fd5b5035610eda565b6101fb6004803603606081101561046257600080fd5b508035906020810135906040013561112d565b6101fb61142a565b6101fb6004803603602081101561049357600080fd5b5035611537565b6101fb61178d565b6102a96118a5565b6101fb600480360360208110156104c057600080fd5b50356001600160a01b03166118ab565b6102a9600480360360208110156104e657600080fd5b50356001600160a01b03166119a3565b6102c3611aeb565b6101fb6004803603602081101561051457600080fd5b5035611afa565b610523611bdb565b6000546001600160a01b03908116911614610573576040805162461bcd60e51b815260206004820181905260248201526000805160206122c0833981519152604482015290519081900360640190fd5b600b546040805191825260208201839052805133927f1c1ba308e9b6b16ebf144bf1b5d35568a5d60dd120ef0c804034e44decf06db992908290030190a2600b55565b6105be611bdb565b6000546001600160a01b0390811691161461060e576040805162461bcd60e51b815260206004820181905260248201526000805160206122c0833981519152604482015290519081900360640190fd5b600481905561061b61178d565b50565b610626611bdb565b6000546001600160a01b03908116911614610676576040805162461bcd60e51b815260206004820181905260248201526000805160206122c0833981519152604482015290519081900360640190fd5b60125481106106b65760405162461bcd60e51b81526004018080602001828103825260298152602001806121646029913960400191505060405180910390fd5b60105481116106f65760405162461bcd60e51b815260040180806020018281038252602b81526020018061223a602b913960400191505060405180910390fd5b6011546040805191825260208201839052805133927fb0c16471768e2df5c8be6aa305304b1e4d284a1bf83756cb3a0b68e10830cfd992908290030190a2601155565b600d6020526000908152604090208054600182015460028301546003909301549192909184565b6001600160a01b0381166000908152600d6020526040812060038101548290421061078d575080546107a0565b6002820154825461079d91611bdf565b90505b9392505050565b6002546001600160a01b031681565b600260015414156107fc576040805162461bcd60e51b815260206004820152601f602482015260008051602061218d833981519152604482015290519081900360640190fd5b6002600155336000908152600d602052604081206003810154600692904210610846576002820154600684015461083291611bdf565b600684015550600060028201558054610859565b6002820154825461085691611bdf565b90505b838110156108a3576040805162461bcd60e51b81526020600482015260126024820152711dda5d1a191c985dce881b9bdd0819dbdbd960721b604482015290519081900360640190fd5b6108ab61178d565b60006108ec83600101546108e668327cb2734119d3b7a9601e1b6108e088600301548860000154611c2190919063ffffffff16565b90611c7a565b90611bdf565b9050801561090b5760035461090b906001600160a01b03163383611cbc565b84156109b857600484015461ffff161561099457600484015460009061093e90612710906108e090899061ffff16611c21565b600554865491925061095d916001600160a01b03908116911683611cbc565b83546109699087611bdf565b84556109758682611bdf565b855490965061098e906001600160a01b03163388611cbc565b506109b8565b82546109a09086611bdf565b835583546109b8906001600160a01b03163387611cbc565b600384015483546109da9168327cb2734119d3b7a9601e1b916108e091611c21565b600184015560408051868152905133917f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364919081900360200190a2505060018055505050565b610a28611bdb565b6000546001600160a01b03908116911614610a78576040805162461bcd60e51b815260206004820181905260248201526000805160206122c0833981519152604482015290519081900360640190fd5b6103e88161ffff161115610abd5760405162461bcd60e51b815260040180806020018281038252603a815260200180612286603a913960400191505060405180910390fd5b600a546040805161ffff92831681529183166020830152805133927f3c2e3502d45d83cab50a562fb3c423ca03711d9c4753823ff3dea7d0e6b0075e92908290030190a2600a805461ffff191661ffff92909216919091179055565b610b21611bdb565b6000546001600160a01b03908116911614610b71576040805162461bcd60e51b815260206004820181905260248201526000805160206122c0833981519152604482015290519081900360640190fd5b600354604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610bbc57600080fd5b505afa158015610bd0573d6000803e3d6000fd5b505050506040513d6020811015610be657600080fd5b50518110610c255760405162461bcd60e51b81526004018080602001828103825260298152602001806123356029913960400191505060405180910390fd5b60035461061b906001600160a01b03163383611cbc565b6005546001600160a01b031681565b600f5481565b620d2f0081565b600654600754600854600954600a54600b54600c546001600160a01b039096169561ffff9092169187565b610c8b611bdb565b6000546001600160a01b03908116911614610cdb576040805162461bcd60e51b815260206004820181905260248201526000805160206122c0833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b610d2d611bdb565b6000546001600160a01b03908116911614610d7d576040805162461bcd60e51b815260206004820181905260248201526000805160206122c0833981519152604482015290519081900360640190fd5b43600b55565b610d8b611bdb565b6000546001600160a01b03908116911614610ddb576040805162461bcd60e51b815260206004820181905260248201526000805160206122c0833981519152604482015290519081900360640190fd5b6001600160a01b038116610e2c576040805162461bcd60e51b8152602060048201526013602482015272736574466565416464726573733a205a45524f60681b604482015290519081900360640190fd5b600580546001600160a01b0319166001600160a01b03831690811790915560405133907f11f35a22548bcd4c3788ab4a7e4fba427a2014f02e5d5e2da9af62212c03183f90600090a350565b60045481565b6000546001600160a01b031690565b600b546000908211610eaa57610ea38284611bdf565b9050610ec8565b600b548310610ebb57506000610ec8565b600b54610ea39084611bdf565b92915050565b60105460115460125483565b60026001541415610f20576040805162461bcd60e51b815260206004820152601f602482015260008051602061218d833981519152604482015290519081900360640190fd5b6002600155336000908152600d60205260409020600690610f3f61178d565b805415610f9c576000610f7b82600101546108e668327cb2734119d3b7a9601e1b6108e087600301548760000154611c2190919063ffffffff16565b90508015610f9a57600354610f9a906001600160a01b03163383611cbc565b505b82156110c7578154604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015610fec57600080fd5b505afa158015611000573d6000803e3d6000fd5b505050506040513d602081101561101657600080fd5b50518354909150611032906001600160a01b0316333087611d13565b8254604080516370a0823160e01b815230600482015290516110b49284926001600160a01b03909116916370a0823191602480820192602092909190829003018186803b15801561108257600080fd5b505afa158015611096573d6000803e3d6000fd5b505050506040513d60208110156110ac57600080fd5b505190611bdf565b82549094506110c39085611d73565b8255505b600382015481546110e99168327cb2734119d3b7a9601e1b916108e091611c21565b600182015560408051848152905133917fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c919081900360200190a250506001805550565b611135611bdb565b6000546001600160a01b03908116911614611185576040805162461bcd60e51b815260206004820181905260248201526000805160206122c0833981519152604482015290519081900360640190fd5b60125483116111c55760405162461bcd60e51b815260040180806020018281038252603c8152602001806121d3603c913960400191505060405180910390fd5b6000831161121a576040805162461bcd60e51b815260206004820152601e60248201527f7570646174654c6f636b54696d6573203a2073746172742074696d6520300000604482015290519081900360640190fd5b4283116112585760405162461bcd60e51b815260040180806020018281038252602c815260200180612138602c913960400191505060405180910390fd5b8281116112965760405162461bcd60e51b815260040180806020018281038252602b8152602001806122e0602b913960400191505060405180910390fd5b8181116112d45760405162461bcd60e51b81526004018080602001828103825260298152602001806121646029913960400191505060405180910390fd5b8282116113125760405162461bcd60e51b815260040180806020018281038252602b81526020018061223a602b913960400191505060405180910390fd5b600061131e8285611bdf565b9050620d2f0081106113615760405162461bcd60e51b815260040180806020018281038252602e81526020018061235e602e913960400191505060405180910390fd5b6010546040805191825260208201869052805133927fc5de6cb34b413b9e1e65c11405b399be8cac56fab863017c0d850596972b653b92908290030190a26011546040805191825260208201859052805133927fb0c16471768e2df5c8be6aa305304b1e4d284a1bf83756cb3a0b68e10830cfd992908290030190a26012546040805191825260208201849052805133927fccc959e1f2efb34fe547447b895a3a825fdf77478f79ef32e16fe56455c1e36a92908290030190a250601092909255601155601255565b60026001541415611470576040805162461bcd60e51b815260206004820152601f602482015260008051602061218d833981519152604482015290519081900360640190fd5b6002600155336000908152600d6020526040812060038101546006929042106114ba57600282015460068401546114a691611bdf565b6006840155506000600282015580546114cd565b600282015482546114ca91611bdf565b90505b82546114e3906001600160a01b03163383611cbc565b81546114ef9082611bdf565b82556000600183015560408051828152905133917f5fafa99d0643513820be26656b45130b01e1c03062e1266bf36f88cbd3bd9695919081900360200190a250506001805550565b6002600154141561157d576040805162461bcd60e51b815260206004820152601f602482015260008051602061218d833981519152604482015290519081900360640190fd5b6002600155336000908152600d602052604090206010546006919042116115eb576040805162461bcd60e51b815260206004820152601d60248201527f6c6f636b203a207374617274203a2063616e2774206c6f636b206e6f77000000604482015290519081900360640190fd5b6011544210611641576040805162461bcd60e51b815260206004820152601b60248201527f6c6f636b203a206d6178203a2063616e2774206c6f636b206e6f770000000000604482015290519081900360640190fd5b6000831161168d576040805162461bcd60e51b81526020600482015260146024820152736c6f636b3a20616d6f756e7420746f6f206c6f7760601b604482015290519081900360640190fd5b80546116d8576040805162461bcd60e51b81526020600482015260156024820152746c6f636b3a206e6f7468696e6720746f206c6f636b60581b604482015290519081900360640190fd5b8054831115611727576040805162461bcd60e51b81526020600482015260166024820152753637b1b59d103737ba1032b737bab3b4103a37b5b2b760511b604482015290519081900360640190fd5b60028101546117369084611d73565b6002820155601254600382015560068201546117529084611d73565b6006830155604051839033907f8f1e800ade33a9ed22b726f4c105e9b850d7e8c94cc3a721a9350009ca470c4790600090a350506001805550565b600854600690431161179f57506118a3565b8054604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156117e957600080fd5b505afa1580156117fd573d6000803e3d6000fd5b505050506040513d602081101561181357600080fd5b50519050806118295750436002909101556118a3565b6000611839836002015443610e8d565b90506000611866600e546108e0866001015461186060045487611c2190919063ffffffff16565b90611c21565b9050611890611885846108e08468327cb2734119d3b7a9601e1b611c21565b600386015490611d73565b6003850155505043600290920191909155505b565b6103e881565b6118b3611bdb565b6000546001600160a01b03908116911614611903576040805162461bcd60e51b815260206004820181905260248201526000805160206122c0833981519152604482015290519081900360640190fd5b6001600160a01b0381166119485760405162461bcd60e51b81526004018080602001828103825260268152602001806121ad6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038082166000908152600d602090815260408083206009546006805484516370a0823160e01b815230600482015294519697919693959294889491909216926370a082319260248082019391829003018186803b158015611a0a57600080fd5b505afa158015611a1e573d6000803e3d6000fd5b505050506040513d6020811015611a3457600080fd5b5051600285015490915043118015611a4b57508015155b15611ab2576000611a60856002015443610e8d565b90506000611a87600e546108e0886001015461186060045487611c2190919063ffffffff16565b9050611aad611aa6846108e08468327cb2734119d3b7a9601e1b611c21565b8590611d73565b935050505b611ae183600101546108e668327cb2734119d3b7a9601e1b6108e0868860000154611c2190919063ffffffff16565b9695505050505050565b6003546001600160a01b031681565b611b02611bdb565b6000546001600160a01b03908116911614611b52576040805162461bcd60e51b815260206004820181905260248201526000805160206122c0833981519152604482015290519081900360640190fd5b600854431115611b935760405162461bcd60e51b815260040180806020018281038252602b81526020018061220f602b913960400191505060405180910390fd5b6008819055600f546040805191825260208201839052805133927f2261b0608377dfea3647390a585c309d8dc877219b37f164a0f966973be8851192908290030190a2600f55565b3390565b60006107a083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611dcd565b600082611c3057506000610ec8565b82820282848281611c3d57fe5b04146107a05760405162461bcd60e51b81526004018080602001828103825260218152602001806122656021913960400191505060405180910390fd5b60006107a083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611e64565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611d0e908490611ec9565b505050565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052611d6d908590611ec9565b50505050565b6000828201838110156107a0576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008184841115611e5c5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611e21578181015183820152602001611e09565b50505050905090810190601f168015611e4e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008183611eb35760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611e21578181015183820152602001611e09565b506000838581611ebf57fe5b0495945050505050565b6060611f1e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611f7a9092919063ffffffff16565b805190915015611d0e57808060200190516020811015611f3d57600080fd5b5051611d0e5760405162461bcd60e51b815260040180806020018281038252602a81526020018061230b602a913960400191505060405180910390fd5b6060611f898484600085611f91565b949350505050565b6060611f9c856120fe565b611fed576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b6020831061202c5780518252601f19909201916020918201910161200d565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461208e576040519150601f19603f3d011682016040523d82523d6000602084013e612093565b606091505b509150915081156120a7579150611f899050565b8051156120b75780518082602001fd5b60405162461bcd60e51b8152602060048201818152865160248401528651879391928392604401919085019080838360008315611e21578181015183820152602001611e09565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590611f8957505015159291505056fe7570646174654c6f636b54696d6573203a2063616e277420736574207374617274206265666f7265206e6f777570646174654c6f636b54696d6573203a20656e642074696d65206c6f776572207468616e206d61785265656e7472616e637947756172643a207265656e7472616e742063616c6c004f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573737570646174654c6f636b54696d6573203a2073746172742074696d65206d75737420636f6d6520616674657220656e64206f66206c6173742049444f7570646174655374617274426c6f636b3a207374617274626c6f636b20616c7265616479206d696e7465647570646174654c6f636b54696d6573203a206d61782074696d65206c6f776572207468616e207374617274536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f777570646174655769746864726177616c46656542503a20696e76616c6964207769746864726177616c2066656520626173697320706f696e74734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65727570646174654c6f636b54696d6573203a20656e642074696d65206c6f776572207468616e2073746172745361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564656d657267656e637952657761726457697468647261773a206e6f7420656e6f75676820746f6b656e7570646174654c6f636b54696d6573203a20746f74616c206c6f636b206475726174696f6e20746f6f2068696768a26469706673582212203293d2f5e7998168f6a83e9cef70f194871754bc9b3abaf4701b1d36ee4108c064736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000c121e1f36b2c0a65b1a12808be3a242b03c27a2a000000000000000000000000285209dd294fb6763740e1c92d654d92eaaadf2200000000000000000000000000000000000000000000000004e86cdc1c72f9f0000000000000000000000000000000000000000000000000000000000000012c00000000000000000000000000000000000000000000000000000000012c23f000000000000000000000000000000000000000000000000000000000017354f0000000000000000000000000e1af3f32fb9b3890e9887a174ccaa912c52788b8
-----Decoded View---------------
Arg [0] : _lpOrToken (address): 0xc121E1f36b2c0a65B1A12808be3a242b03c27a2a
Arg [1] : _rewardToken (address): 0x285209dd294fb6763740E1C92D654D92EaaAdf22
Arg [2] : _rewardPerBlock (uint256): 353652263374486000
Arg [3] : _withdrawalFeeBP (uint16): 300
Arg [4] : _startBlock (uint256): 19670000
Arg [5] : _endBlock (uint256): 24335600
Arg [6] : _feeAddress (address): 0xe1AF3F32FB9b3890e9887A174CCaa912c52788b8
-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 000000000000000000000000c121e1f36b2c0a65b1a12808be3a242b03c27a2a
Arg [1] : 000000000000000000000000285209dd294fb6763740e1c92d654d92eaaadf22
Arg [2] : 00000000000000000000000000000000000000000000000004e86cdc1c72f9f0
Arg [3] : 000000000000000000000000000000000000000000000000000000000000012c
Arg [4] : 00000000000000000000000000000000000000000000000000000000012c23f0
Arg [5] : 00000000000000000000000000000000000000000000000000000000017354f0
Arg [6] : 000000000000000000000000e1af3f32fb9b3890e9887a174ccaa912c52788b8
Deployed Bytecode Sourcemap
296:14697:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12000:181;;;;;;;;;;;;;;;;-1:-1:-1;12000:181:2;;:::i;:::-;;11714:192;;;;;;;;;;;;;;;;-1:-1:-1;11714:192:2;;:::i;14644:338::-;;;;;;;;;;;;;;;;-1:-1:-1;14644:338:2;;:::i;2242:45::-;;;;;;;;;;;;;;;;-1:-1:-1;2242:45:2;-1:-1:-1;;;;;2242:45:2;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9213:413;;;;;;;;;;;;;;;;-1:-1:-1;9213:413:2;-1:-1:-1;;;;;9213:413:2;;:::i;:::-;;;;;;;;;;;;;;;;1684:23;;;:::i;:::-;;;;-1:-1:-1;;;;;1684:23:2;;;;;;;;;;;;;;7551:1599;;;;;;;;;;;;;;;;-1:-1:-1;7551:1599:2;;:::i;12277:347::-;;;;;;;;;;;;;;;;-1:-1:-1;12277:347:2;;;;:::i;11369:251::-;;;;;;;;;;;;;;;;-1:-1:-1;11369:251:2;;:::i;1868:25::-;;;:::i;2479:::-;;;:::i;1956:50::-;;;:::i;2162:24::-;;;:::i;:::-;;;;-1:-1:-1;;;;;2162:24:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1754:148:4;;;:::i;4434:90:2:-;;;:::i;13172:230::-;;;;;;;;;;;;;;;;-1:-1:-1;13172:230:2;-1:-1:-1;;;;;13172:230:2;;:::i;1794:29::-;;;:::i;1112:79:4:-;;;:::i;4600:318:2:-;;;;;;;;;;;;;;;;-1:-1:-1;4600:318:2;;;;;;;:::i;2517:29::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;6532:982;;;;;;;;;;;;;;;;-1:-1:-1;6532:982:2;;:::i;13483:1053::-;;;;;;;;;;;;;;;;-1:-1:-1;13483:1053:2;;;;;;;;;;;;:::i;10558:762::-;;;:::i;9729:754::-;;;;;;;;;;;;;;;;-1:-1:-1;9729:754:2;;:::i;5817:681::-;;;:::i;2075:49::-;;;:::i;2057:244:4:-;;;;;;;;;;;;;;;;-1:-1:-1;2057:244:4;-1:-1:-1;;;;;2057:244:4;;:::i;4983:758:2:-;;;;;;;;;;;;;;;;-1:-1:-1;4983:758:2;-1:-1:-1;;;;;4983:758:2;;:::i;1714:25::-;;;:::i;12715:405::-;;;;;;;;;;;;;;;;-1:-1:-1;12715:405:2;;:::i;12000:181::-;1334:12:4;:10;:12::i;:::-;1324:6;;-1:-1:-1;;;;;1324:6:4;;;:22;;;1316:67;;;;;-1:-1:-1;;;1316:67:4;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1316:67:4;;;;;;;;;;;;;;;12104:17:2;;12076:57:::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;12092:10:::1;::::0;12076:57:::1;::::0;;;;;;;::::1;12144:17:::0;:29;12000:181::o;11714:192::-;1334:12:4;:10;:12::i;:::-;1324:6;;-1:-1:-1;;;;;1324:6:4;;;:22;;;1316:67;;;;;-1:-1:-1;;;1316:67:4;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1316:67:4;;;;;;;;;;;;;;;11797:14:2::1;:32:::0;;;11878:12:::1;:10;:12::i;:::-;11714:192:::0;:::o;14644:338::-;1334:12:4;:10;:12::i;:::-;1324:6;;-1:-1:-1;;;;;1324:6:4;;;:22;;;1316:67;;;;;-1:-1:-1;;;1316:67:4;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1316:67:4;;;;;;;;;;;;;;;14721:13:2;;:20;-1:-1:-1;14713:74:2::1;;;;-1:-1:-1::0;;;14713:74:2::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14813:9;:15:::0;14806:22;::::1;14798:78;;;;-1:-1:-1::0;;;14798:78:2::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14923:13:::0;;14892:51:::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;14911:10:::1;::::0;14892:51:::1;::::0;;;;;;;::::1;14954:13:::0;:20;14644:338::o;2242:45::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;9213:413::-;-1:-1:-1;;;;;9321:15:2;;9277:7;9321:15;;;:8;:15;;;;;9405:16;;;;9277:7;;9386:15;:35;9382:202;;-1:-1:-1;9456:11:2;;9382:202;;;9554:17;;;;9538:11;;:34;;:15;:34::i;:::-;9519:53;;9382:202;9602:16;9213:413;-1:-1:-1;;;9213:413:2:o;1684:23::-;;;-1:-1:-1;;;;;1684:23:2;;:::o;7551:1599::-;1688:1:5;2277:7;;:19;;2269:63;;;;;-1:-1:-1;;;2269:63:5;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2269:63:5;;;;;;;;;;;;;;;1688:1;2407:7;:18;7693:10:2::1;7617:21;7684:20:::0;;;:8:::1;:20;::::0;;;;7783:16:::1;::::0;::::1;::::0;7641:8:::1;::::0;7617:21;7764:15:::1;:35;7760:323;;7867:17;::::0;::::1;::::0;7840:22:::1;::::0;::::1;::::0;:45:::1;::::0;:26:::1;:45::i;:::-;7815:22;::::0;::::1;:70:::0;-1:-1:-1;7920:1:2::1;7900:17;::::0;::::1;:21:::0;7955:11;;7760:323:::1;;;8053:17;::::0;::::1;::::0;8037:11;;:34:::1;::::0;:15:::1;:34::i;:::-;8018:53;;7760:323;8139:7;8119:16;:27;;8111:58;;;::::0;;-1:-1:-1;;;8111:58:2;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;8111:58:2;;;;;;;;;;;;;::::1;;8180:12;:10;:12::i;:::-;8203:15;8221:71;8276:4;:15;;;8221:50;-1:-1:-1::0;;;8221:40:2::1;8237:4;:23;;;8221:4;:11;;;:15;;:40;;;;:::i;:::-;:44:::0;::::1;:50::i;:::-;:54:::0;::::1;:71::i;:::-;8203:89:::0;-1:-1:-1;8306:11:2;;8303:97:::1;;8334:11;::::0;:54:::1;::::0;-1:-1:-1;;;;;8334:11:2::1;8367:10;8380:7:::0;8334:24:::1;:54::i;:::-;8423:11:::0;;8420:597:::1;;8456:20;::::0;::::1;::::0;::::1;;:24:::0;8453:539:::1;;8536:20;::::0;::::1;::::0;8500:21:::1;::::0;8524:44:::1;::::0;8562:5:::1;::::0;8524:33:::1;::::0;:7;;8536:20:::1;;8524:11;:33::i;:44::-;8613:10;::::0;8587:12;;8500:68;;-1:-1:-1;8587:52:2::1;::::0;-1:-1:-1;;;;;8587:12:2;;::::1;::::0;8613:10:::1;8500:68:::0;8587:25:::1;:52::i;:::-;8672:11:::0;;:24:::1;::::0;8688:7;8672:15:::1;:24::i;:::-;8658:38:::0;;8725:26:::1;:7:::0;8737:13;8725:11:::1;:26::i;:::-;8770:12:::0;;8715:36;;-1:-1:-1;8770:55:2::1;::::0;-1:-1:-1;;;;;8770:12:2::1;8804:10;8715:36:::0;8770:25:::1;:55::i;:::-;8453:539;;;;8878:11:::0;;:24:::1;::::0;8894:7;8878:15:::1;:24::i;:::-;8864:38:::0;;8921:12;;:55:::1;::::0;-1:-1:-1;;;;;8921:12:2::1;8955:10;8968:7:::0;8921:25:::1;:55::i;:::-;9061:23;::::0;::::1;::::0;9045:11;;:50:::1;::::0;-1:-1:-1;;;9090:4:2;9045:40:::1;::::0;:15:::1;:40::i;:50::-;9027:15;::::0;::::1;:68:::0;9113:29:::1;::::0;;;;;;;9122:10:::1;::::0;9113:29:::1;::::0;;;;;::::1;::::0;;::::1;-1:-1:-1::0;;1645:1:5;2580:22;;-1:-1:-1;;;7551:1599:2:o;12277:347::-;1334:12:4;:10;:12::i;:::-;1324:6;;-1:-1:-1;;;;;1324:6:4;;;:22;;;1316:67;;;;;-1:-1:-1;;;1316:67:4;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1316:67:4;;;;;;;;;;;;;;;2120:4:2::1;12369:16;:38;;;;12361:109;;;;-1:-1:-1::0;;;12361:109:2::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12519:24:::0;;12486:76:::1;::::0;;12519:24:::1;::::0;;::::1;12486:76:::0;;;;::::1;;::::0;::::1;::::0;;;12507:10:::1;::::0;12486:76:::1;::::0;;;;;;;::::1;12573:24:::0;:43;;-1:-1:-1;;12573:43:2::1;;::::0;;;::::1;::::0;;;::::1;::::0;;12277:347::o;11369:251::-;1334:12:4;:10;:12::i;:::-;1324:6;;-1:-1:-1;;;;;1324:6:4;;;:22;;;1316:67;;;;;-1:-1:-1;;;1316:67:4;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1316:67:4;;;;;;;;;;;;;;;11465:11:2::1;::::0;:36:::1;::::0;;-1:-1:-1;;;11465:36:2;;11495:4:::1;11465:36;::::0;::::1;::::0;;;-1:-1:-1;;;;;11465:11:2;;::::1;::::0;:21:::1;::::0;:36;;;;;::::1;::::0;;;;;;;;;:11;:36;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;11465:36:2;11455:46;::::1;11447:100;;;;-1:-1:-1::0;;;11447:100:2::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11558:11;::::0;:54:::1;::::0;-1:-1:-1;;;;;11558:11:2::1;11591:10;11604:7:::0;11558:24:::1;:54::i;1868:25::-:0;;;-1:-1:-1;;;;;1868:25:2;;:::o;2479:::-;;;;:::o;1956:50::-;2000:6;1956:50;:::o;2162:24::-;;;;;;;;;;;;;;;-1:-1:-1;;;;;2162:24:2;;;;;;;;;;:::o;1754:148:4:-;1334:12;:10;:12::i;:::-;1324:6;;-1:-1:-1;;;;;1324:6:4;;;:22;;;1316:67;;;;;-1:-1:-1;;;1316:67:4;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1316:67:4;;;;;;;;;;;;;;;1861:1:::1;1845:6:::0;;1824:40:::1;::::0;-1:-1:-1;;;;;1845:6:4;;::::1;::::0;1824:40:::1;::::0;1861:1;;1824:40:::1;1892:1;1875:19:::0;;-1:-1:-1;;;;;;1875:19:4::1;::::0;;1754:148::o;4434:90:2:-;1334:12:4;:10;:12::i;:::-;1324:6;;-1:-1:-1;;;;;1324:6:4;;;:22;;;1316:67;;;;;-1:-1:-1;;;1316:67:4;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1316:67:4;;;;;;;;;;;;;;;4504:12:2::1;4484:17:::0;:32;4434:90::o;13172:230::-;1334:12:4;:10;:12::i;:::-;1324:6;;-1:-1:-1;;;;;1324:6:4;;;:22;;;1316:67;;;;;-1:-1:-1;;;1316:67:4;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1316:67:4;;;;;;;;;;;;;;;-1:-1:-1;;;;;13252:25:2;::::1;13244:57;;;::::0;;-1:-1:-1;;;13244:57:2;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;13244:57:2;;;;;;;;;;;;;::::1;;13312:10;:24:::0;;-1:-1:-1;;;;;;13312:24:2::1;-1:-1:-1::0;;;;;13312:24:2;::::1;::::0;;::::1;::::0;;;13352:42:::1;::::0;13370:10:::1;::::0;13352:42:::1;::::0;-1:-1:-1;;13352:42:2::1;13172:230:::0;:::o;1794:29::-;;;;:::o;1112:79:4:-;1150:7;1177:6;-1:-1:-1;;;;;1177:6:4;1112:79;:::o;4600:318:2:-;4703:17;;4672:7;;4696:24;;4692:219;;4744:14;:3;4752:5;4744:7;:14::i;:::-;4737:21;;;;4692:219;4789:17;;4780:26;;4776:135;;-1:-1:-1;4830:1:2;4823:8;;4776:135;4871:17;;:28;;4893:5;4871:21;:28::i;4776:135::-;4600:318;;;;:::o;2517:29::-;;;;;;;;:::o;6532:982::-;1688:1:5;2277:7;;:19;;2269:63;;;;;-1:-1:-1;;;2269:63:5;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2269:63:5;;;;;;;;;;;;;;;1688:1;2407:7;:18;6673:10:2::1;6597:21;6664:20:::0;;;:8:::1;:20;::::0;;;;6621:8:::1;::::0;6697:12:::1;:10;:12::i;:::-;6724:11:::0;;:15;6720:256:::1;;6756:15;6774:71;6829:4;:15;;;6774:50;-1:-1:-1::0;;;6774:40:2::1;6790:4;:23;;;6774:4;:11;;;:15;;:40;;;;:::i;:71::-;6756:89:::0;-1:-1:-1;6863:11:2;;6860:105:::1;;6895:11;::::0;:54:::1;::::0;-1:-1:-1;;;;;6895:11:2::1;6928:10;6941:7:::0;6895:24:::1;:54::i;:::-;6720:256;;6991:11:::0;;6988:384:::1;;7094:12:::0;;:37:::1;::::0;;-1:-1:-1;;;7094:37:2;;7125:4:::1;7094:37;::::0;::::1;::::0;;;7070:21:::1;::::0;-1:-1:-1;;;;;7094:12:2::1;::::0;:22:::1;::::0;:37;;;;;::::1;::::0;;;;;;;;:12;:37;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;7094:37:2;7146:12;;7094:37;;-1:-1:-1;7146:74:2::1;::::0;-1:-1:-1;;;;;7146:12:2::1;7184:10;7205:4;7212:7:::0;7146:29:::1;:74::i;:::-;7245:12:::0;;:37:::1;::::0;;-1:-1:-1;;;7245:37:2;;7276:4:::1;7245:37;::::0;::::1;::::0;;;:56:::1;::::0;7287:13;;-1:-1:-1;;;;;7245:12:2;;::::1;::::0;:22:::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:12;:37;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;7245:37:2;;:41:::1;:56::i;:::-;7336:11:::0;;7235:66;;-1:-1:-1;7336:24:2::1;::::0;7235:66;7336:15:::1;:24::i;:::-;7322:38:::0;;-1:-1:-1;6988:384:2::1;7426:23;::::0;::::1;::::0;7410:11;;:50:::1;::::0;-1:-1:-1;;;7455:4:2;7410:40:::1;::::0;:15:::1;:40::i;:50::-;7392:15;::::0;::::1;:68:::0;7478:28:::1;::::0;;;;;;;7486:10:::1;::::0;7478:28:::1;::::0;;;;;::::1;::::0;;::::1;-1:-1:-1::0;;1645:1:5;2580:22;;-1:-1:-1;6532:982:2:o;13483:1053::-;1334:12:4;:10;:12::i;:::-;1324:6;;-1:-1:-1;;;;;1324:6:4;;;:22;;;1316:67;;;;;-1:-1:-1;;;1316:67:4;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1316:67:4;;;;;;;;;;;;;;;13594:13:2;;13585:22;::::1;13577:95;;;;-1:-1:-1::0;;;13577:95:2::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13700:1;13691:6;:10;13683:53;;;::::0;;-1:-1:-1;;;13683:53:2;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;13764:15;13755:6;:24;13747:81;;;;-1:-1:-1::0;;;13747:81:2::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13854:6;13847:4;:13;13839:69;;;;-1:-1:-1::0;;;13839:69:2::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13934:4;13927;:11;13919:65;;;;-1:-1:-1::0;;;13919:65:2::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14010:6;14003:4;:13;13995:69;;;;-1:-1:-1::0;;;13995:69:2::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14075:22;14100:16;:4:::0;14109:6;14100:8:::1;:16::i;:::-;14075:41;;2000:6;14135:14;:34;14127:93;;;;-1:-1:-1::0;;;14127:93:2::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14269:9;:15:::0;14236:57:::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;14257:10:::1;::::0;14236:57:::1;::::0;;;;;;;::::1;14340:13:::0;;14309:51:::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;14328:10:::1;::::0;14309:51:::1;::::0;;;;;;;::::1;14407:13:::0;;14376:51:::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;14395:10:::1;::::0;14376:51:::1;::::0;;;;;;;::::1;-1:-1:-1::0;14438:9:2::1;:24:::0;;;;14473:13;:20;14504:13;:20;13483:1053::o;10558:762::-;1688:1:5;2277:7;;:19;;2269:63;;;;;-1:-1:-1;;;2269:63:5;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2269:63:5;;;;;;;;;;;;;;;1688:1;2407:7;:18;10694:10:2::1;10618:21;10685:20:::0;;;:8:::1;:20;::::0;;;;10776:16:::1;::::0;::::1;::::0;10642:8:::1;::::0;10618:21;10757:15:::1;:35;10753:323;;10860:17;::::0;::::1;::::0;10833:22:::1;::::0;::::1;::::0;:45:::1;::::0;:26:::1;:45::i;:::-;10808:22;::::0;::::1;:70:::0;-1:-1:-1;10913:1:2::1;10893:17;::::0;::::1;:21:::0;10948:11;;10753:323:::1;;;11046:17;::::0;::::1;::::0;11030:11;;:34:::1;::::0;:15:::1;:34::i;:::-;11011:53;;10753:323;11097:12:::0;;:64:::1;::::0;-1:-1:-1;;;;;11097:12:2::1;11131:10;11144:16:::0;11097:25:::1;:64::i;:::-;11186:11:::0;;:33:::1;::::0;11202:16;11186:15:::1;:33::i;:::-;11172:47:::0;;:11:::1;11230:15;::::0;::::1;:19:::0;11265:47:::1;::::0;;;;;;;11283:10:::1;::::0;11265:47:::1;::::0;;;;;::::1;::::0;;::::1;-1:-1:-1::0;;1645:1:5;2580:22;;-1:-1:-1;10558:762:2:o;9729:754::-;1688:1:5;2277:7;;:19;;2269:63;;;;;-1:-1:-1;;;2269:63:5;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2269:63:5;;;;;;;;;;;;;;;1688:1;2407:7;:18;9867:10:2::1;9791:21;9858:20:::0;;;:8:::1;:20;::::0;;;;9925:9:::1;:15:::0;9815:8:::1;::::0;9858:20;9907:15:::1;:33;9899:75;;;::::0;;-1:-1:-1;;;9899:75:2;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;9993:13:::0;;10009:15:::1;-1:-1:-1::0;9985:71:2::1;;;::::0;;-1:-1:-1;;;9985:71:2;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;10085:1;10075:7;:11;10067:44;;;::::0;;-1:-1:-1;;;10067:44:2;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;10067:44:2;;;;;;;;;;;;;::::1;;10130:11:::0;;10122:49:::1;;;::::0;;-1:-1:-1;;;10122:49:2;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;10122:49:2;;;;;;;;;;;;;::::1;;10201:11:::0;;10190:22;::::1;;10182:57;;;::::0;;-1:-1:-1;;;10182:57:2;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;10182:57:2;;;;;;;;;;;;;::::1;;10272:17;::::0;::::1;::::0;:30:::1;::::0;10294:7;10272:21:::1;:30::i;:::-;10252:17;::::0;::::1;:50:::0;10332:13;;10313:16:::1;::::0;::::1;:32:::0;10381:22:::1;::::0;::::1;::::0;:35:::1;::::0;10408:7;10381:26:::1;:35::i;:::-;10356:22;::::0;::::1;:60:::0;10442:33:::1;::::0;10467:7;;10455:10:::1;::::0;10442:33:::1;::::0;;;::::1;-1:-1:-1::0;;1645:1:5;2580:22;;-1:-1:-1;9729:754:2:o;5817:681::-;5920:20;;5881:8;;5904:12;:36;5900:75;;5957:7;;;5900:75;6004:12;;:37;;;-1:-1:-1;;;6004:37:2;;6035:4;6004:37;;;;;;5985:16;;-1:-1:-1;;;;;6004:12:2;;:22;;:37;;;;;;;;;;;;;;:12;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6004:37:2;;-1:-1:-1;6056:13:2;6052:102;;-1:-1:-1;6109:12:2;6086:20;;;;:35;6136:7;;6052:102;6164:18;6185:49;6199:4;:20;;;6221:12;6185:13;:49::i;:::-;6164:70;;6245:21;6269:72;6325:15;;6269:51;6304:4;:15;;;6269:30;6284:14;;6269:10;:14;;:30;;;;:::i;:::-;:34;;:51::i;:72::-;6245:96;-1:-1:-1;6378:66:2;6406:37;6434:8;6406:23;6245:96;-1:-1:-1;;;6406:17:2;:23::i;:37::-;6378:23;;;;;:27;:66::i;:::-;6352:23;;;:92;-1:-1:-1;;6478:12:2;6455:20;;;;:35;;;;-1:-1:-1;5817:681:2;:::o;2075:49::-;2120:4;2075:49;:::o;2057:244:4:-;1334:12;:10;:12::i;:::-;1324:6;;-1:-1:-1;;;;;1324:6:4;;;:22;;;1316:67;;;;;-1:-1:-1;;;1316:67:4;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1316:67:4;;;;;;;;;;;;;;;-1:-1:-1;;;;;2146:22:4;::::1;2138:73;;;;-1:-1:-1::0;;;2138:73:4::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2248:6;::::0;;2227:38:::1;::::0;-1:-1:-1;;;;;2227:38:4;;::::1;::::0;2248:6;::::1;::::0;2227:38:::1;::::0;::::1;2276:6;:17:::0;;-1:-1:-1;;;;;;2276:17:4::1;-1:-1:-1::0;;;;;2276:17:4;;;::::1;::::0;;;::::1;::::0;;2057:244::o;4983:758:2:-;-1:-1:-1;;;;;5131:15:2;;;5044:7;5131:15;;;:8;:15;;;;;;;;5186:23;;5088:8;5239:12;;:37;;-1:-1:-1;;;5239:37:2;;5270:4;5239:37;;;;;;5044:7;;5088:8;;5131:15;;5186:23;;5044:7;;5239:12;;;;;:22;;:37;;;;;;;;;;;:12;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5239:37:2;5306:20;;;;5239:37;;-1:-1:-1;5291:12:2;:35;:52;;;;-1:-1:-1;5330:13:2;;;5291:52;5287:363;;;5360:18;5381:49;5395:4;:20;;;5417:12;5381:13;:49::i;:::-;5360:70;;5445:21;5469:72;5525:15;;5469:51;5504:4;:15;;;5469:30;5484:14;;5469:10;:14;;:30;;;;:::i;:72::-;5445:96;-1:-1:-1;5577:61:2;5600:37;5628:8;5600:23;5445:96;-1:-1:-1;;;5600:17:2;:23::i;:37::-;5577:18;;:22;:61::i;:::-;5556:82;;5287:363;;;5667:66;5717:4;:15;;;5667:45;-1:-1:-1;;;5667:35:2;5683:18;5667:4;:11;;;:15;;:35;;;;:::i;:66::-;5660:73;4983:758;-1:-1:-1;;;;;;4983:758:2:o;1714:25::-;;;-1:-1:-1;;;;;1714:25:2;;:::o;12715:405::-;1334:12:4;:10;:12::i;:::-;1324:6;;-1:-1:-1;;;;;1324:6:4;;;:22;;;1316:67;;;;;-1:-1:-1;;;1316:67:4;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1316:67:4;;;;;;;;;;;;;;;12886:24:2;;12870:12:::1;:40;;12862:96;;;;-1:-1:-1::0;;;12862:96:2::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12969:24:::0;:38;;;13053:10:::1;::::0;13023:54:::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;13041:10:::1;::::0;13023:54:::1;::::0;;;;;;;::::1;13088:10;:24:::0;12715:405::o;613:106:1:-;701:10;613:106;:::o;1374:136:7:-;1432:7;1459:43;1463:1;1466;1459:43;;;;;;;;;;;;;;;;;:3;:43::i;2264:471::-;2322:7;2567:6;2563:47;;-1:-1:-1;2597:1:7;2590:8;;2563:47;2634:5;;;2638:1;2634;:5;:1;2658:5;;;;;:10;2650:56;;;;-1:-1:-1;;;2650:56:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3211:132;3269:7;3296:39;3300:1;3303;3296:39;;;;;;;;;;;;;;;;;:3;:39::i;700:177:6:-;810:58;;;-1:-1:-1;;;;;810:58:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;810:58:6;-1:-1:-1;;;810:58:6;;;783:86;;803:5;;783:19;:86::i;:::-;700:177;;;:::o;885:205::-;1013:68;;;-1:-1:-1;;;;;1013:68:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1013:68:6;-1:-1:-1;;;1013:68:6;;;986:96;;1006:5;;986:19;:96::i;:::-;885:205;;;;:::o;910:181:7:-;968:7;1000:5;;;1024:6;;;;1016:46;;;;;-1:-1:-1;;;1016:46:7;;;;;;;;;;;;;;;;;;;;;;;;;;;1813:192;1899:7;1935:12;1927:6;;;;1919:29;;;;-1:-1:-1;;;1919:29:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1971:5:7;;;1813:192::o;3839:278::-;3925:7;3960:12;3953:5;3945:28;;;;-1:-1:-1;;;3945:28:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3984:9;4000:1;3996;:5;;;;;;;3839:278;-1:-1:-1;;;;;3839:278:7:o;3005:761:6:-;3429:23;3455:69;3483:4;3455:69;;;;;;;;;;;;;;;;;3463:5;-1:-1:-1;;;;;3455:27:6;;;:69;;;;;:::i;:::-;3539:17;;3429:95;;-1:-1:-1;3539:21:6;3535:224;;3681:10;3670:30;;;;;;;;;;;;;;;-1:-1:-1;3670:30:6;3662:85;;;;-1:-1:-1;;;3662:85:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3858:196:0;3961:12;3993:53;4016:6;4024:4;4030:1;4033:12;3993:22;:53::i;:::-;3986:60;3858:196;-1:-1:-1;;;;3858:196:0:o;5235:979::-;5365:12;5398:18;5409:6;5398:10;:18::i;:::-;5390:60;;;;;-1:-1:-1;;;5390:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;5524:12;5538:23;5565:6;-1:-1:-1;;;;;5565:11:0;5585:8;5596:4;5565:36;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5565:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5523:78;;;;5616:7;5612:595;;;5647:10;-1:-1:-1;5640:17:0;;-1:-1:-1;5640:17:0;5612:595;5761:17;;:21;5757:439;;6024:10;6018:17;6085:15;6072:10;6068:2;6064:19;6057:44;5972:148;6160:20;;-1:-1:-1;;;6160:20:0;;;;;;;;;;;;;;;;;6167:12;;6160:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;743:619;803:4;1271:20;;1114:66;1311:23;;;;;;:42;;-1:-1:-1;;1338:15:0;;;1303:51;-1:-1:-1;;743:619:0:o
Swarm Source
ipfs://3293d2f5e7998168f6a83e9cef70f194871754bc9b3abaf4701b1d36ee4108c0
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ 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.