More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 404 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
Harvest ETH | 20133687 | 8 days ago | IN | 0 ETH | 0.00037307 | ||||
Harvest ETH | 20128710 | 9 days ago | IN | 0 ETH | 0.00027258 | ||||
Harvest ETH | 20079683 | 16 days ago | IN | 0 ETH | 0.00028261 | ||||
Harvest ETH | 20076196 | 16 days ago | IN | 0 ETH | 0.00103092 | ||||
Harvest ETH | 20027225 | 23 days ago | IN | 0 ETH | 0.00076146 | ||||
Harvest ETH | 19939531 | 36 days ago | IN | 0 ETH | 0.00020269 | ||||
Transfer | 19930085 | 37 days ago | IN | 0.013 ETH | 0.00009495 | ||||
Harvest ETH | 19815227 | 53 days ago | IN | 0 ETH | 0.00012725 | ||||
Harvest ETH | 19799128 | 55 days ago | IN | 0 ETH | 0.00017586 | ||||
Harvest ETH | 19720327 | 66 days ago | IN | 0 ETH | 0.00044586 | ||||
Emergency Withdr... | 19599407 | 83 days ago | IN | 0 ETH | 0.00073109 | ||||
Harvest | 19599382 | 83 days ago | IN | 0 ETH | 0.00048859 | ||||
Harvest ETH | 19599380 | 83 days ago | IN | 0 ETH | 0.0003602 | ||||
Buy Back | 19477017 | 100 days ago | IN | 0 ETH | 0.00859248 | ||||
Harvest ETH | 19406918 | 110 days ago | IN | 0 ETH | 0.00202726 | ||||
Transfer | 19376194 | 114 days ago | IN | 0.024 ETH | 0.00181883 | ||||
Harvest ETH | 19350811 | 118 days ago | IN | 0 ETH | 0.00118077 | ||||
Transfer | 19344290 | 119 days ago | IN | 0.155 ETH | 0.00097303 | ||||
Emergency Withdr... | 19344247 | 119 days ago | IN | 0 ETH | 0.00315871 | ||||
Buy Back | 19329793 | 121 days ago | IN | 0 ETH | 0.00894514 | ||||
Buy Back | 19317034 | 123 days ago | IN | 0 ETH | 0.00761805 | ||||
Buy Back | 19312856 | 123 days ago | IN | 0 ETH | 0.01186633 | ||||
Transfer | 19312848 | 123 days ago | IN | 0.24738 ETH | 0.00133793 | ||||
Buy Back | 19307079 | 124 days ago | IN | 0 ETH | 0.00580697 | ||||
Harvest | 19299822 | 125 days ago | IN | 0 ETH | 0.00140147 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | Value | ||
---|---|---|---|---|---|---|
20176319 | 2 days ago | 0.00766593 ETH | ||||
20133687 | 8 days ago | 0.01815942 ETH | ||||
20129424 | 9 days ago | 0.01682538 ETH | ||||
20128824 | 9 days ago | 0.00133404 ETH | ||||
20128710 | 9 days ago | 0.01124169 ETH | ||||
20128253 | 9 days ago | 0.00394988 ETH | ||||
20128247 | 9 days ago | 0.00159245 ETH | ||||
20119486 | 10 days ago | 0.00569935 ETH | ||||
20079683 | 16 days ago | 0.02444321 ETH | ||||
20078482 | 16 days ago | 0.02444321 ETH | ||||
20076196 | 16 days ago | 0.10132614 ETH | ||||
20074049 | 17 days ago | 0.00601342 ETH | ||||
20073787 | 17 days ago | 0.00240676 ETH | ||||
20073772 | 17 days ago | 0.00244405 ETH | ||||
20073692 | 17 days ago | 0.00264118 ETH | ||||
20073683 | 17 days ago | 0.00277353 ETH | ||||
20073650 | 17 days ago | 0.00291616 ETH | ||||
20073642 | 17 days ago | 0.00307008 ETH | ||||
20073566 | 17 days ago | 0.00323566 ETH | ||||
20073558 | 17 days ago | 0.0015538 ETH | ||||
20073541 | 17 days ago | 0.00244923 ETH | ||||
20073538 | 17 days ago | 0.00291311 ETH | ||||
20073533 | 17 days ago | 0.0037244 ETH | ||||
20073515 | 17 days ago | 0.00404224 ETH | ||||
20073510 | 17 days ago | 0.00331105 ETH |
Loading...
Loading
Contract Name:
WarPigsTreasury
Compiler Version
v0.8.0+commit.c7dfd78e
Optimization Enabled:
Yes with 100 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @author Brewlabs * This treasury contract has been developed by brewlabs.info */ import '@openzeppelin/contracts/access/Ownable.sol'; import '@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol'; import '@openzeppelin/contracts/utils/math/SafeMath.sol'; import "../libs/IUniFactory.sol"; import "../libs/IUniRouter02.sol"; import "../libs/IWETH.sol"; interface IStaking { function performanceFee() external view returns(uint256); function setServiceInfo(address _addr, uint256 _fee) external; } interface IFarm { function setBuyBackWallet(address _addr) external; } contract WarPigsTreasury is Ownable { using SafeERC20 for IERC20; bool private isInitialized; uint256 private TIME_UNIT = 1 days; IERC20 public token; address public dividendToken; address public pair; address public tokenB; uint256 public period = 30; // 30 days uint256 public withdrawalLimit = 500; // 5% of total supply uint256 public liquidityWithdrawalLimit = 2000; // 20% of LP supply uint256 public buybackRate = 9500; // 95% uint256 public addLiquidityRate = 9400; // 94% uint256 private startTime; uint256 private sumWithdrawals = 0; uint256 private sumLiquidityWithdrawals = 0; address public uniRouterAddress; address[] public ethToTokenPath; address[] public ethToDividendPath; address[] public dividendToTokenPath; address[] public ethToTokenBPath; uint256 public slippageFactor = 830; // 17% uint256 public constant slippageFactorUL = 995; event TokenBuyBack(uint256 amountETH, uint256 amountToken); event TokenBuyBackForTokenB(uint256 amountETH, uint256 amountToken); event TokenBuyBackFromDividend(uint256 amount, uint256 amountToken); event LiquidityAdded(uint256 amountETH, uint256 amountToken, uint256 liquidity); event LiquidityAddedForTokenB(uint256 amountETH, uint256 amountToken, uint256 liquidity); event LiquidityWithdrawn(uint256 amount); event Withdrawn(uint256 amount); event Harvested(address account, uint256 amount); event Swapped(address token, uint256 amountETH, uint256 amountToken); event SetSwapConfig(address router, uint256 slipPage, address[] ethToTokenPath, address[] ethToDividendPath, address[] dividendToTokenPath); event SetSwapConfigForTokenB(address tokenB, address[] ethToTokenBPath); event TransferBuyBackWallet(address staking, address wallet); event AddLiquidityRateUpdated(uint256 percent); event BuybackRateUpdated(uint256 percent); event PeriodUpdated(uint256 duration); event LiquidityWithdrawLimitUpdated(uint256 percent); event WithdrawLimitUpdated(uint256 percent); constructor() {} /** * @notice Initialize the contract * @param _token: token address * @param _dividendToken: reflection token address * @param _uniRouter: uniswap router address for swap tokens * @param _ethToTokenPath: swap path to buy Token * @param _ethToDividendPath: swap path to buy dividend token * @param _dividendToTokenPath: swap path to buy Token with dividend token */ function initialize( IERC20 _token, address _dividendToken, address _uniRouter, address[] memory _ethToTokenPath, address[] memory _ethToDividendPath, address[] memory _dividendToTokenPath ) external onlyOwner { require(!isInitialized, "Already initialized"); // Make this contract initialized isInitialized = true; token = _token; dividendToken = _dividendToken; pair = IUniV2Factory(IUniRouter02(_uniRouter).factory()).getPair(_ethToTokenPath[0], address(token)); uniRouterAddress = _uniRouter; ethToTokenPath = _ethToTokenPath; ethToDividendPath = _ethToDividendPath; dividendToTokenPath = _dividendToTokenPath; } /** * @notice Buy token from ETH */ function buyBack() external onlyOwner { uint256 ethAmt = address(this).balance; ethAmt = ethAmt * buybackRate / 10000; if(ethAmt > 0) { uint256 _tokenAmt = _safeSwapEth(ethAmt, ethToTokenPath, address(this)); emit TokenBuyBack(ethAmt, _tokenAmt); } } /** * @notice Buy tokenB from ETH */ function buyBackTokenB() external onlyOwner { uint256 ethAmt = address(this).balance; ethAmt = ethAmt * buybackRate / 10000; if(ethAmt > 0) { uint256 _tokenAmt = _safeSwapEth(ethAmt, ethToTokenBPath, address(this)); emit TokenBuyBackForTokenB(ethAmt, _tokenAmt); } } /** * @notice Buy token from reflections */ function buyBackFromDividend() external onlyOwner { if(dividendToken == address(0x0)) return; uint256 reflections = IERC20(dividendToken).balanceOf(address(this)); if(reflections > 0) { uint256 _tokenAmt = _safeSwap(reflections, dividendToTokenPath, address(this)); emit TokenBuyBackFromDividend(reflections, _tokenAmt); } } /** * @notice Add liquidity */ function addLiquidity() external onlyOwner { uint256 ethAmt = address(this).balance; ethAmt = ethAmt * addLiquidityRate / 10000 / 2; if(ethAmt > 0) { uint256 _tokenAmt = _safeSwapEth(ethAmt, ethToTokenPath, address(this)); emit TokenBuyBack(ethAmt, _tokenAmt); (uint256 amountToken, uint256 amountETH, uint256 liquidity) = _addLiquidityEth(address(token), ethAmt, _tokenAmt, address(this)); emit LiquidityAdded(amountETH, amountToken, liquidity); } } /** * @notice Add liquidity for tokenB */ function addLiquidityForTokenB() external onlyOwner { uint256 ethAmt = address(this).balance; ethAmt = ethAmt * addLiquidityRate / 10000 / 2; if(ethAmt > 0) { uint256 _tokenAmt = _safeSwapEth(ethAmt, ethToTokenBPath, address(this)); emit TokenBuyBackForTokenB(ethAmt, _tokenAmt); (uint256 amountToken, uint256 amountETH, uint256 liquidity) = _addLiquidityEth(address(tokenB), ethAmt, _tokenAmt, address(this)); emit LiquidityAddedForTokenB(amountETH, amountToken, liquidity); } } /** * @notice Swap and harvest reflection for token * @param _to: receiver address */ function harvest(address _to) external onlyOwner { uint256 ethAmt = address(this).balance; ethAmt = ethAmt * buybackRate / 10000; if(dividendToken == address(0x0)) { if(ethAmt > 0) { payable(_to).transfer(ethAmt); emit Harvested(_to, ethAmt); } } else { if(ethAmt > 0) { uint256 _tokenAmt = _safeSwapEth(ethAmt, ethToDividendPath, address(this)); emit Swapped(dividendToken, ethAmt, _tokenAmt); } uint256 tokenAmt = IERC20(dividendToken).balanceOf(address(this)); if(tokenAmt > 0) { IERC20(dividendToken).transfer(_to, tokenAmt); emit Harvested(_to, tokenAmt); } } } function harvestETH(address _to) external onlyOwner { uint256 ethAmt = address(this).balance; payable(_to).transfer(ethAmt); } /** * @notice Withdraw token as much as maximum 5% of total supply * @param _amount: amount to withdraw */ function withdraw(uint256 _amount) external onlyOwner { uint256 tokenAmt = token.balanceOf(address(this)); require(_amount > 0 && _amount <= tokenAmt, "Invalid Amount"); if(block.timestamp - startTime > period * TIME_UNIT) { startTime = block.timestamp; sumWithdrawals = 0; } uint256 limit = withdrawalLimit * (token.totalSupply()) / 10000; require(sumWithdrawals + _amount <= limit, "exceed maximum withdrawal limit for 30 days"); token.safeTransfer(msg.sender, _amount); emit Withdrawn(_amount); } /** * @notice Withdraw token as much as maximum 20% of lp supply * @param _amount: liquidity amount to withdraw */ function withdrawLiquidity(uint256 _amount) external onlyOwner { uint256 tokenAmt = IERC20(pair).balanceOf(address(this)); require(_amount > 0 && _amount <= tokenAmt, "Invalid Amount"); if(block.timestamp - startTime > period * TIME_UNIT) { startTime = block.timestamp; sumLiquidityWithdrawals = 0; } uint256 limit = liquidityWithdrawalLimit * (IERC20(pair).totalSupply()) / 10000; require(sumLiquidityWithdrawals + _amount <= limit, "exceed maximum LP withdrawal limit for 30 days"); IERC20(pair).safeTransfer(msg.sender, _amount); emit LiquidityWithdrawn(_amount); } /** * @notice Withdraw tokens * @dev Needs to be for emergency. */ function emergencyWithdraw() external onlyOwner { uint256 tokenAmt = token.balanceOf(address(this)); if(tokenAmt > 0) { token.transfer(msg.sender, tokenAmt); } tokenAmt = IERC20(pair).balanceOf(address(this)); if(tokenAmt > 0) { IERC20(pair).transfer(msg.sender, tokenAmt); } uint256 ethAmt = address(this).balance; if(ethAmt > 0) { payable(msg.sender).transfer(ethAmt); } } /** * @notice Set duration for withdraw limit * @param _period: duration */ function setWithdrawalLimitPeriod(uint256 _period) external onlyOwner { require(_period >= 10, "small period"); period = _period; emit PeriodUpdated(_period); } /** * @notice Set liquidity withdraw limit * @param _percent: percentage of LP supply in point */ function setLiquidityWithdrawalLimit(uint256 _percent) external onlyOwner { require(_percent < 10000, "Invalid percentage"); liquidityWithdrawalLimit = _percent; emit LiquidityWithdrawLimitUpdated(_percent); } /** * @notice Set withdraw limit * @param _percent: percentage of total supply in point */ function setWithdrawalLimit(uint256 _percent) external onlyOwner { require(_percent < 10000, "Invalid percentage"); withdrawalLimit = _percent; emit WithdrawLimitUpdated(_percent); } /** * @notice Set buyback rate * @param _percent: percentage in point */ function setBuybackRate(uint256 _percent) external onlyOwner { require(_percent < 10000, "Invalid percentage"); buybackRate = _percent; emit BuybackRateUpdated(_percent); } /** * @notice Set addliquidy rate * @param _percent: percentage in point */ function setAddLiquidityRate(uint256 _percent) external onlyOwner { require(_percent < 10000, "Invalid percentage"); addLiquidityRate = _percent; emit AddLiquidityRateUpdated(_percent); } /** * @notice Set buyback wallet of farm contract * @param _uniRouter: dex router address * @param _slipPage: slip page for swap * @param _ethToTokenPath: eth-token swap path * @param _ethToDividendPath: eth-token swap path * @param _dividendToTokenPath: eth-token swap path */ function setSwapSettings( address _uniRouter, uint256 _slipPage, address[] memory _ethToTokenPath, address[] memory _ethToDividendPath, address[] memory _dividendToTokenPath ) external onlyOwner { require(_slipPage < 1000, "Invalid percentage"); uniRouterAddress = _uniRouter; slippageFactor = _slipPage; ethToTokenPath = _ethToTokenPath; ethToDividendPath = _ethToDividendPath; dividendToTokenPath = _dividendToTokenPath; emit SetSwapConfig(_uniRouter, _slipPage, _ethToTokenPath, _ethToDividendPath, _dividendToTokenPath); } function setSwapSettingsForTokenB( address _tokenB, address[] memory _ethToTokenBPath ) external onlyOwner { tokenB = _tokenB; ethToTokenBPath = _ethToTokenBPath; emit SetSwapConfigForTokenB(_tokenB, _ethToTokenBPath); } /** * @notice set buyback wallet of farm contract * @param _farm: farm contract address * @param _addr: buyback wallet address */ function setFarmServiceInfo(address _farm, address _addr) external onlyOwner { require(_farm != address(0x0) && _addr != address(0x0), "Invalid Address"); IFarm(_farm).setBuyBackWallet(_addr); emit TransferBuyBackWallet(_farm, _addr); } /** * @notice set buyback wallet of staking contract * @param _staking: staking contract address * @param _addr: buyback wallet address */ function setStakingServiceInfo(address _staking, address _addr) external onlyOwner { require(_staking != address(0x0) && _addr != address(0x0), "Invalid Address"); uint256 _fee = IStaking(_staking).performanceFee(); IStaking(_staking).setServiceInfo(_addr, _fee); emit TransferBuyBackWallet(_staking, _addr); } /** * @notice It allows the admin to recover wrong tokens sent to the contract * @param _token: the address of the token to withdraw * @dev This function is only callable by admin. */ function rescueTokens(address _token) external onlyOwner { require(_token != address(token) && _token != dividendToken && _token != pair, "Cannot be token & dividend token, pair"); if(_token == address(0x0)) { uint256 _tokenAmount = address(this).balance; payable(msg.sender).transfer(_tokenAmount); } else { uint256 _tokenAmount = IERC20(_token).balanceOf(address(this)); IERC20(_token).safeTransfer(msg.sender, _tokenAmount); } } /************************ ** Internal Methods *************************/ /** * @notice get token from ETH via swap. * @param _amountIn: eth amount to swap * @param _path: swap path * @param _to: receiver address */ function _safeSwapEth( uint256 _amountIn, address[] memory _path, address _to ) internal returns (uint256) { uint256[] memory amounts = IUniRouter02(uniRouterAddress).getAmountsOut(_amountIn, _path); uint256 amountOut = amounts[amounts.length - 1]; address _token = _path[_path.length - 1]; uint256 beforeAmt = IERC20(_token).balanceOf(address(this)); IUniRouter02(uniRouterAddress).swapExactETHForTokensSupportingFeeOnTransferTokens{value: _amountIn}( amountOut * slippageFactor / 1000, _path, _to, block.timestamp + 600 ); uint256 afterAmt = IERC20(_token).balanceOf(address(this)); return afterAmt - beforeAmt; } /** * @notice swap token based on path. * @param _amountIn: token amount to swap * @param _path: swap path * @param _to: receiver address */ function _safeSwap( uint256 _amountIn, address[] memory _path, address _to ) internal returns(uint256) { uint256[] memory amounts = IUniRouter02(uniRouterAddress).getAmountsOut(_amountIn, _path); uint256 amountOut = amounts[amounts.length - 1]; IERC20(_path[0]).safeApprove(uniRouterAddress, _amountIn); address _token = _path[_path.length - 1]; uint256 beforeAmt = IERC20(_token).balanceOf(address(this)); IUniRouter02(uniRouterAddress).swapExactTokensForTokensSupportingFeeOnTransferTokens( _amountIn, amountOut * slippageFactor / 1000, _path, _to, block.timestamp + 600 ); uint256 afterAmt = IERC20(_token).balanceOf(address(this)); return afterAmt - beforeAmt; } /** * @notice add token-ETH liquidity. * @param _token: token address * @param _ethAmt: eth amount to add liquidity * @param _tokenAmt: token amount to add liquidity * @param _to: receiver address */ function _addLiquidityEth( address _token, uint256 _ethAmt, uint256 _tokenAmt, address _to ) internal returns(uint256 amountToken, uint256 amountETH, uint256 liquidity) { IERC20(_token).safeIncreaseAllowance(uniRouterAddress, _tokenAmt); (amountToken, amountETH, liquidity) = IUniRouter02(uniRouterAddress).addLiquidityETH{value: _ethAmt}( address(_token), _tokenAmt, 0, 0, _to, block.timestamp + 600 ); IERC20(_token).safeApprove(uniRouterAddress, uint256(0)); } receive() external payable {} }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/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() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(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"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol) pragma solidity ^0.8.0; import "../IERC20.sol"; import "../../../utils/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 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' 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) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - value; _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 require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @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 a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * 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) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface IUniV2Factory { function getPair(address tokenA, address tokenB) external view returns (address); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IUniRouter01.sol"; interface IUniRouter02 is IUniRouter01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; }
// SPDX-License-Identifier: MIT pragma solidity >=0.5.0; interface IWETH { function deposit() external payable; function transfer(address to, uint value) external returns (bool); function withdraw(uint) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^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 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) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface IUniRouter01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); }
{ "optimizer": { "enabled": true, "runs": 100 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "metadata": { "useLiteralContent": true }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"percent","type":"uint256"}],"name":"AddLiquidityRateUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"percent","type":"uint256"}],"name":"BuybackRateUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Harvested","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountToken","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidity","type":"uint256"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountToken","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidity","type":"uint256"}],"name":"LiquidityAddedForTokenB","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"percent","type":"uint256"}],"name":"LiquidityWithdrawLimitUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LiquidityWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"duration","type":"uint256"}],"name":"PeriodUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"router","type":"address"},{"indexed":false,"internalType":"uint256","name":"slipPage","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"ethToTokenPath","type":"address[]"},{"indexed":false,"internalType":"address[]","name":"ethToDividendPath","type":"address[]"},{"indexed":false,"internalType":"address[]","name":"dividendToTokenPath","type":"address[]"}],"name":"SetSwapConfig","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"tokenB","type":"address"},{"indexed":false,"internalType":"address[]","name":"ethToTokenBPath","type":"address[]"}],"name":"SetSwapConfigForTokenB","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountToken","type":"uint256"}],"name":"Swapped","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountToken","type":"uint256"}],"name":"TokenBuyBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountToken","type":"uint256"}],"name":"TokenBuyBackForTokenB","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountToken","type":"uint256"}],"name":"TokenBuyBackFromDividend","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"staking","type":"address"},{"indexed":false,"internalType":"address","name":"wallet","type":"address"}],"name":"TransferBuyBackWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"percent","type":"uint256"}],"name":"WithdrawLimitUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdrawn","type":"event"},{"inputs":[],"name":"addLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"addLiquidityForTokenB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"addLiquidityRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyBackFromDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyBackTokenB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buybackRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"dividendToTokenPath","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"ethToDividendPath","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"ethToTokenBPath","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"ethToTokenPath","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"harvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"harvestETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"address","name":"_dividendToken","type":"address"},{"internalType":"address","name":"_uniRouter","type":"address"},{"internalType":"address[]","name":"_ethToTokenPath","type":"address[]"},{"internalType":"address[]","name":"_ethToDividendPath","type":"address[]"},{"internalType":"address[]","name":"_dividendToTokenPath","type":"address[]"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"liquidityWithdrawalLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"period","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_percent","type":"uint256"}],"name":"setAddLiquidityRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_percent","type":"uint256"}],"name":"setBuybackRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_farm","type":"address"},{"internalType":"address","name":"_addr","type":"address"}],"name":"setFarmServiceInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_percent","type":"uint256"}],"name":"setLiquidityWithdrawalLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_staking","type":"address"},{"internalType":"address","name":"_addr","type":"address"}],"name":"setStakingServiceInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_uniRouter","type":"address"},{"internalType":"uint256","name":"_slipPage","type":"uint256"},{"internalType":"address[]","name":"_ethToTokenPath","type":"address[]"},{"internalType":"address[]","name":"_ethToDividendPath","type":"address[]"},{"internalType":"address[]","name":"_dividendToTokenPath","type":"address[]"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenB","type":"address"},{"internalType":"address[]","name":"_ethToTokenBPath","type":"address[]"}],"name":"setSwapSettingsForTokenB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_percent","type":"uint256"}],"name":"setWithdrawalLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_period","type":"uint256"}],"name":"setWithdrawalLimitPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"slippageFactor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"slippageFactorUL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenB","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniRouterAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawalLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405262015180600155601e6006556101f46007556107d060085561251c6009556124b8600a556000600c556000600d5561033e6013553480156200004557600080fd5b506200005a6200005462000060565b62000064565b620000b4565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6138ca80620000c46000396000f3fe60806040526004361061023e5760003560e01c8063887a7dc91161012e578063b74cd242116100ab578063ef78d4fd1161006f578063ef78d4fd1461061f578063f2fde38b14610634578063f76024c414610654578063fc0c546a14610669578063ffbd3b1f1461067e57610245565b8063b74cd242146105a0578063db26eace146105b5578063db2e21bc146105d5578063e8078d94146105ea578063e8669da6146105ff57610245565b806392f735eb116100f257806392f735eb14610516578063a567a96214610536578063a8aa1b3114610556578063acdf4f181461056b578063b67b7ec71461058057610245565b8063887a7dc9146104975780638a317525146104b75780638d583550146104d75780638da5cb5b146104ec5780638eff071a1461050157610245565b80634d2e6d2a116101bc578063630f6f8b11610180578063630f6f8b14610418578063693a090b146104385780636e10f4761461044d578063715018a61461046d5780637ddfe78d1461048257610245565b80634d2e6d2a146103995780635a0768ce146103ae5780635dd13dbd146103ce5780635e192644146103ee5780635f64b55b1461040357610245565b8063107ee89311610203578063107ee893146102f75780631582358e146103245780632e1a7d4d146103395780633c4666cf146103595780633ca681901461037957610245565b8062ae3bf81461024a578063045af2581461026c5780630a861f2a146102975780630daa6c0d146102b75780630e5c011e146102d757610245565b3661024557005b600080fd5b34801561025657600080fd5b5061026a610265366004612e94565b610693565b005b34801561027857600080fd5b5061028161081b565b60405161028e91906136b4565b60405180910390f35b3480156102a357600080fd5b5061026a6102b236600461315e565b610821565b3480156102c357600080fd5b5061026a6102d2366004612ecc565b610a54565b3480156102e357600080fd5b5061026a6102f2366004612e94565b610b6a565b34801561030357600080fd5b5061031761031236600461315e565b610e52565b60405161028e919061321a565b34801561033057600080fd5b50610317610e7c565b34801561034557600080fd5b5061026a61035436600461315e565b610e8b565b34801561036557600080fd5b5061026a6103743660046130a3565b6110bd565b34801561038557600080fd5b5061026a61039436600461315e565b611304565b3480156103a557600080fd5b5061026a6113a4565b3480156103ba57600080fd5b5061026a6103c936600461315e565b61151d565b3480156103da57600080fd5b506103176103e936600461315e565b6115b2565b3480156103fa57600080fd5b5061026a6115c2565b34801561040f57600080fd5b506103176116be565b34801561042457600080fd5b5061026a610433366004612f52565b6116cd565b34801561044457600080fd5b506103176117cf565b34801561045957600080fd5b5061026a61046836600461315e565b6117de565b34801561047957600080fd5b5061026a611873565b34801561048e57600080fd5b506102816118bc565b3480156104a357600080fd5b506103176104b236600461315e565b6118c2565b3480156104c357600080fd5b5061026a6104d2366004612ecc565b6118d2565b3480156104e357600080fd5b50610281611a54565b3480156104f857600080fd5b50610317611a5a565b34801561050d57600080fd5b5061026a611a69565b34801561052257600080fd5b5061026a610531366004612e94565b611bd2565b34801561054257600080fd5b5061026a610551366004612f04565b611c49565b34801561056257600080fd5b50610317611ce8565b34801561057757600080fd5b5061026a611cf7565b34801561058c57600080fd5b5061031761059b36600461315e565b611df3565b3480156105ac57600080fd5b50610281611e03565b3480156105c157600080fd5b5061026a6105d036600461315e565b611e09565b3480156105e157600080fd5b5061026a611e9e565b3480156105f657600080fd5b5061026a61212c565b34801561060b57600080fd5b5061026a61061a36600461315e565b612295565b34801561062b57600080fd5b5061028161232a565b34801561064057600080fd5b5061026a61064f366004612e94565b612330565b34801561066057600080fd5b5061028161239e565b34801561067557600080fd5b506103176123a4565b34801561068a57600080fd5b506102816123b3565b61069b6123b9565b6001600160a01b03166106ac611a5a565b6001600160a01b0316146106db5760405162461bcd60e51b81526004016106d2906134e6565b60405180910390fd5b6002546001600160a01b0382811691161480159061070757506003546001600160a01b03828116911614155b801561072157506004546001600160a01b03828116911614155b61073d5760405162461bcd60e51b81526004016106d2906135ce565b6001600160a01b038116610781576040514790339082156108fc029083906000818181858888f1935050505015801561077a573d6000803e3d6000fd5b5050610818565b6040516370a0823160e01b81526000906001600160a01b038316906370a08231906107b090309060040161321a565b60206040518083038186803b1580156107c857600080fd5b505afa1580156107dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108009190613176565b90506108166001600160a01b03831633836123bd565b505b50565b600a5481565b6108296123b9565b6001600160a01b031661083a611a5a565b6001600160a01b0316146108605760405162461bcd60e51b81526004016106d2906134e6565b600480546040516370a0823160e01b81526000926001600160a01b03909216916370a08231916108929130910161321a565b60206040518083038186803b1580156108aa57600080fd5b505afa1580156108be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e29190613176565b90506000821180156108f45750808211155b6109105760405162461bcd60e51b81526004016106d2906133df565b60015460065461092091906137f1565b600b5461092d9042613810565b111561093d5742600b556000600d555b60048054604080516318160ddd60e01b81529051600093612710936001600160a01b0316926318160ddd9281830192602092829003018186803b15801561098357600080fd5b505afa158015610997573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109bb9190613176565b6008546109c891906137f1565b6109d291906137d1565b90508083600d546109e391906137b9565b1115610a015760405162461bcd60e51b81526004016106d290613498565b600454610a18906001600160a01b031633856123bd565b7f73ce532f480864bd2fccd1bcdbb4c8151f02cd9450c4f3e5b834ef74503abdb283604051610a4791906136b4565b60405180910390a1505050565b610a5c6123b9565b6001600160a01b0316610a6d611a5a565b6001600160a01b031614610a935760405162461bcd60e51b81526004016106d2906134e6565b6001600160a01b03821615801590610ab357506001600160a01b03811615155b610acf5760405162461bcd60e51b81526004016106d290613541565b60405163523205c160e11b81526001600160a01b0383169063a4640b8290610afb90849060040161321a565b600060405180830381600087803b158015610b1557600080fd5b505af1158015610b29573d6000803e3d6000fd5b505050507f7f78141a3bd83bf938eb2a367b5b7e1a1056d8128b3f1809535eed46891c90338282604051610b5e92919061322e565b60405180910390a15050565b610b726123b9565b6001600160a01b0316610b83611a5a565b6001600160a01b031614610ba95760405162461bcd60e51b81526004016106d2906134e6565b600954479061271090610bbc90836137f1565b610bc691906137d1565b6003549091506001600160a01b0316610c55578015610c50576040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610c15573d6000803e3d6000fd5b507f121c5042302bae5fc561fbc64368f297ca60a880878e1e3a7f7e9380377260bf8282604051610c4792919061326c565b60405180910390a15b610816565b8015610d0e576000610cc2826010805480602002602001604051908101604052809291908181526020018280548015610cb757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610c99575b505050505030612413565b6003546040519192507f3a9a9f34f5831e9c8ecb66ab3aa308b2ff31eaca434615f6c9cadc656a9af71c91610d04916001600160a01b03169085908590613319565b60405180910390a1505b6003546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610d3f90309060040161321a565b60206040518083038186803b158015610d5757600080fd5b505afa158015610d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8f9190613176565b90508015610e4d5760035460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90610dc9908690859060040161326c565b602060405180830381600087803b158015610de357600080fd5b505af1158015610df7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1b9190613083565b507f121c5042302bae5fc561fbc64368f297ca60a880878e1e3a7f7e9380377260bf8382604051610a4792919061326c565b505050565b60118181548110610e6257600080fd5b6000918252602090912001546001600160a01b0316905081565b6003546001600160a01b031681565b610e936123b9565b6001600160a01b0316610ea4611a5a565b6001600160a01b031614610eca5760405162461bcd60e51b81526004016106d2906134e6565b6002546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610efb90309060040161321a565b60206040518083038186803b158015610f1357600080fd5b505afa158015610f27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4b9190613176565b9050600082118015610f5d5750808211155b610f795760405162461bcd60e51b81526004016106d2906133df565b600154600654610f8991906137f1565b600b54610f969042613810565b1115610fa65742600b556000600c555b6000612710600260009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ff957600080fd5b505afa15801561100d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110319190613176565b60075461103e91906137f1565b61104891906137d1565b90508083600c5461105991906137b9565b11156110775760405162461bcd60e51b81526004016106d29061344d565b60025461108e906001600160a01b031633856123bd565b7f430648de173157e069201c943adb2d4e340e7cf5b27b1b09c9cb852f03d63b5683604051610a4791906136b4565b6110c56123b9565b6001600160a01b03166110d6611a5a565b6001600160a01b0316146110fc5760405162461bcd60e51b81526004016106d2906134e6565b600054600160a01b900460ff16156111265760405162461bcd60e51b81526004016106d2906135a1565b6000805460ff60a01b1916600160a01b179055600280546001600160a01b038089166001600160a01b0319928316179092556003805488841692169190911790556040805163c45a015560e01b815290519186169163c45a015591600480820192602092909190829003018186803b1580156111a157600080fd5b505afa1580156111b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d99190612eb0565b6001600160a01b031663e6a439058460008151811061120857634e487b7160e01b600052603260045260246000fd5b60209081029190910101516002546040516001600160e01b031960e085901b16815261124192916001600160a01b03169060040161322e565b60206040518083038186803b15801561125957600080fd5b505afa15801561126d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112919190612eb0565b600480546001600160a01b03199081166001600160a01b0393841617909155600e805490911691861691909117905582516112d390600f906020860190612da5565b5081516112e7906010906020850190612da5565b5080516112fb906011906020840190612da5565b50505050505050565b61130c6123b9565b6001600160a01b031661131d611a5a565b6001600160a01b0316146113435760405162461bcd60e51b81526004016106d2906134e6565b61271081106113645760405162461bcd60e51b81526004016106d2906133b3565b600a8190556040517f71e39bccc2e27c18ea159b9a4fbc08961b9d9583ea143ae3e5021cf6aefb613c906113999083906136b4565b60405180910390a150565b6113ac6123b9565b6001600160a01b03166113bd611a5a565b6001600160a01b0316146113e35760405162461bcd60e51b81526004016106d2906134e6565b6003546001600160a01b03166113f85761151b565b6003546040516370a0823160e01b81526000916001600160a01b0316906370a082319061142990309060040161321a565b60206040518083038186803b15801561144157600080fd5b505afa158015611455573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114799190613176565b905080156108185760006114e88260118054806020026020016040519081016040528092919081815260200182805480156114dd57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116114bf575b5050505050306126bc565b90507fb578101e5d792c57de69a936b880873b1c2e9f776134e5a89f463decc7963e1c8282604051610b5e92919061370b565b565b6115256123b9565b6001600160a01b0316611536611a5a565b6001600160a01b03161461155c5760405162461bcd60e51b81526004016106d2906134e6565b612710811061157d5760405162461bcd60e51b81526004016106d2906133b3565b60078190556040517f0969f79b044617688492c7c9b226129947037ca88c450002a7561ed78aa549ac906113999083906136b4565b60128181548110610e6257600080fd5b6115ca6123b9565b6001600160a01b03166115db611a5a565b6001600160a01b0316146116015760405162461bcd60e51b81526004016106d2906134e6565b60095447906127109061161490836137f1565b61161e91906137d1565b9050801561081857600061168b826012805480602002602001604051908101604052809291908181526020018280548015610cb7576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610c9957505050505030612413565b90507f928f1d2707e4b3d5c5e5eec211c5885d78b97fbd5e531142fef4255b3a7d42cd8282604051610b5e92919061370b565b6005546001600160a01b031681565b6116d56123b9565b6001600160a01b03166116e6611a5a565b6001600160a01b03161461170c5760405162461bcd60e51b81526004016106d2906134e6565b6103e8841061172d5760405162461bcd60e51b81526004016106d2906133b3565b600e80546001600160a01b0319166001600160a01b0387161790556013849055825161176090600f906020860190612da5565b508151611774906010906020850190612da5565b508051611788906011906020840190612da5565b507fac823b586c853c1953e323c1189297cec5b2cb4b1316ac35ccf979e1969dbc0f85858585856040516117c0959493929190613285565b60405180910390a15050505050565b600e546001600160a01b031681565b6117e66123b9565b6001600160a01b03166117f7611a5a565b6001600160a01b03161461181d5760405162461bcd60e51b81526004016106d2906134e6565b612710811061183e5760405162461bcd60e51b81526004016106d2906133b3565b60098190556040517fcc694eb069971c6c91f6c905b0f66a7a6322a90a42f3904b7508e7b9336a7dfe906113999083906136b4565b61187b6123b9565b6001600160a01b031661188c611a5a565b6001600160a01b0316146118b25760405162461bcd60e51b81526004016106d2906134e6565b61151b6000612956565b60075481565b600f8181548110610e6257600080fd5b6118da6123b9565b6001600160a01b03166118eb611a5a565b6001600160a01b0316146119115760405162461bcd60e51b81526004016106d2906134e6565b6001600160a01b0382161580159061193157506001600160a01b03811615155b61194d5760405162461bcd60e51b81526004016106d290613541565b6000826001600160a01b031663877887826040518163ffffffff1660e01b815260040160206040518083038186803b15801561198857600080fd5b505afa15801561199c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c09190613176565b604051631036c32960e31b81529091506001600160a01b038416906381b61948906119f1908590859060040161326c565b600060405180830381600087803b158015611a0b57600080fd5b505af1158015611a1f573d6000803e3d6000fd5b505050507f7f78141a3bd83bf938eb2a367b5b7e1a1056d8128b3f1809535eed46891c90338383604051610a4792919061322e565b60085481565b6000546001600160a01b031690565b611a716123b9565b6001600160a01b0316611a82611a5a565b6001600160a01b031614611aa85760405162461bcd60e51b81526004016106d2906134e6565b600a54479060029061271090611abe90846137f1565b611ac891906137d1565b611ad291906137d1565b90508015610818576000611b3f826012805480602002602001604051908101604052809291908181526020018280548015610cb7576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610c9957505050505030612413565b90507f928f1d2707e4b3d5c5e5eec211c5885d78b97fbd5e531142fef4255b3a7d42cd8282604051611b7292919061370b565b60405180910390a160055460009081908190611b99906001600160a01b03168686306129a6565b9250925092507f9c1a4864af1ed5a44d37192e4feedda1a1dac5f99eb6d8bc6ecda06664f8febb8284836040516117c093929190613755565b611bda6123b9565b6001600160a01b0316611beb611a5a565b6001600160a01b031614611c115760405162461bcd60e51b81526004016106d2906134e6565b60405147906001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610e4d573d6000803e3d6000fd5b611c516123b9565b6001600160a01b0316611c62611a5a565b6001600160a01b031614611c885760405162461bcd60e51b81526004016106d2906134e6565b600580546001600160a01b0319166001600160a01b0384161790558051611cb6906012906020840190612da5565b507fc64034f00bf45b3ae85afda759ba83d8a53fa17db050eb90fc3a2900ea5b4e6b8282604051610b5e929190613248565b6004546001600160a01b031681565b611cff6123b9565b6001600160a01b0316611d10611a5a565b6001600160a01b031614611d365760405162461bcd60e51b81526004016106d2906134e6565b600954479061271090611d4990836137f1565b611d5391906137d1565b90508015610818576000611dc082600f805480602002602001604051908101604052809291908181526020018280548015610cb7576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610c9957505050505030612413565b90507f5af76d43c73e649d671103b29a6b93de2a53abb35bf2600ac3d04b13d413072d8282604051610b5e92919061370b565b60108181548110610e6257600080fd5b6103e381565b611e116123b9565b6001600160a01b0316611e22611a5a565b6001600160a01b031614611e485760405162461bcd60e51b81526004016106d2906134e6565b600a811015611e695760405162461bcd60e51b81526004016106d29061351b565b60068190556040517f989f99d0a575dfaf67701aef35b8654442a4705a4bce243d8f81e1bb2bc4a63f906113999083906136b4565b611ea66123b9565b6001600160a01b0316611eb7611a5a565b6001600160a01b031614611edd5760405162461bcd60e51b81526004016106d2906134e6565b6002546040516370a0823160e01b81526000916001600160a01b0316906370a0823190611f0e90309060040161321a565b60206040518083038186803b158015611f2657600080fd5b505afa158015611f3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f5e9190613176565b90508015611fec5760025460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90611f98903390859060040161326c565b602060405180830381600087803b158015611fb257600080fd5b505af1158015611fc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fea9190613083565b505b600480546040516370a0823160e01b81526001600160a01b03909116916370a082319161201b9130910161321a565b60206040518083038186803b15801561203357600080fd5b505afa158015612047573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206b9190613176565b905080156120f8576004805460405163a9059cbb60e01b81526001600160a01b039091169163a9059cbb916120a491339186910161326c565b602060405180830381600087803b1580156120be57600080fd5b505af11580156120d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120f69190613083565b505b47801561081657604051339082156108fc029083906000818181858888f19350505050158015610e4d573d6000803e3d6000fd5b6121346123b9565b6001600160a01b0316612145611a5a565b6001600160a01b03161461216b5760405162461bcd60e51b81526004016106d2906134e6565b600a5447906002906127109061218190846137f1565b61218b91906137d1565b61219591906137d1565b9050801561081857600061220282600f805480602002602001604051908101604052809291908181526020018280548015610cb7576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610c9957505050505030612413565b90507f5af76d43c73e649d671103b29a6b93de2a53abb35bf2600ac3d04b13d413072d828260405161223592919061370b565b60405180910390a16002546000908190819061225c906001600160a01b03168686306129a6565b9250925092507fd7f28048575eead8851d024ead087913957dfb4fd1a02b4d1573f5352a5a2be38284836040516117c093929190613755565b61229d6123b9565b6001600160a01b03166122ae611a5a565b6001600160a01b0316146122d45760405162461bcd60e51b81526004016106d2906134e6565b61271081106122f55760405162461bcd60e51b81526004016106d2906133b3565b60088190556040517f0eeb4417a0dd5e563056eaf6d3024509bedf001cfac9394bb02f37e3414fa34b906113999083906136b4565b60065481565b6123386123b9565b6001600160a01b0316612349611a5a565b6001600160a01b03161461236f5760405162461bcd60e51b81526004016106d2906134e6565b6001600160a01b0381166123955760405162461bcd60e51b81526004016106d29061336d565b61081881612956565b60095481565b6002546001600160a01b031681565b60135481565b3390565b610e4d8363a9059cbb60e01b84846040516024016123dc92919061326c565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612a8b565b600e5460405163d06ca61f60e01b815260009182916001600160a01b039091169063d06ca61f9061244a90889088906004016136bd565b60006040518083038186803b15801561246257600080fd5b505afa158015612476573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261249e9190810190612ff3565b9050600081600183516124b19190613810565b815181106124cf57634e487b7160e01b600052603260045260246000fd5b60200260200101519050600085600187516124ea9190613810565b8151811061250857634e487b7160e01b600052603260045260246000fd5b602002602001015190506000816001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401612540919061321a565b60206040518083038186803b15801561255857600080fd5b505afa15801561256c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125909190613176565b600e546013549192506001600160a01b03169063b6f9de95908a906103e8906125b990886137f1565b6125c391906137d1565b8a8a6125d1426102586137b9565b6040518663ffffffff1660e01b81526004016125f094939291906136d6565b6000604051808303818588803b15801561260957600080fd5b505af115801561261d573d6000803e3d6000fd5b50506040516370a0823160e01b8152600093506001600160a01b03861692506370a08231915061265190309060040161321a565b60206040518083038186803b15801561266957600080fd5b505afa15801561267d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126a19190613176565b90506126ad8282613810565b955050505050505b9392505050565b600e5460405163d06ca61f60e01b815260009182916001600160a01b039091169063d06ca61f906126f390889088906004016136bd565b60006040518083038186803b15801561270b57600080fd5b505afa15801561271f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526127479190810190612ff3565b90506000816001835161275a9190613810565b8151811061277857634e487b7160e01b600052603260045260246000fd5b602002602001015190506127dd600e60009054906101000a90046001600160a01b031687876000815181106127bd57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b0316612b1a9092919063ffffffff16565b600085600187516127ee9190613810565b8151811061280c57634e487b7160e01b600052603260045260246000fd5b602002602001015190506000816001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401612844919061321a565b60206040518083038186803b15801561285c57600080fd5b505afa158015612870573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128949190613176565b600e546013549192506001600160a01b031690635c11d795908a906103e8906128bd90886137f1565b6128c791906137d1565b8a8a6128d5426102586137b9565b6040518663ffffffff1660e01b81526004016128f5959493929190613719565b600060405180830381600087803b15801561290f57600080fd5b505af1158015612923573d6000803e3d6000fd5b50506040516370a0823160e01b8152600092506001600160a01b03851691506370a082319061265190309060040161321a565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600e54600090819081906129c7906001600160a01b03898116911687612bdd565b600e546001600160a01b031663f305d7198789886000808a6129eb426102586137b9565b6040518863ffffffff1660e01b8152600401612a0c969594939291906132de565b6060604051808303818588803b158015612a2557600080fd5b505af1158015612a39573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a5e919061318e565b600e549295509093509150612a81906001600160a01b0389811691166000612b1a565b9450945094915050565b6000612ae0826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612c8f9092919063ffffffff16565b805190915015610e4d5780806020019051810190612afe9190613083565b610e4d5760405162461bcd60e51b81526004016106d290613614565b801580612ba25750604051636eb1769f60e11b81526001600160a01b0384169063dd62ed3e90612b50903090869060040161322e565b60206040518083038186803b158015612b6857600080fd5b505afa158015612b7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ba09190613176565b155b612bbe5760405162461bcd60e51b81526004016106d29061365e565b610e4d8363095ea7b360e01b84846040516024016123dc92919061326c565b600081846001600160a01b031663dd62ed3e30866040518363ffffffff1660e01b8152600401612c0e92919061322e565b60206040518083038186803b158015612c2657600080fd5b505afa158015612c3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c5e9190613176565b612c6891906137b9565b9050612c898463095ea7b360e01b85846040516024016123dc92919061326c565b50505050565b6060612c9e8484600085612ca6565b949350505050565b606082471015612cc85760405162461bcd60e51b81526004016106d290613407565b612cd185612d66565b612ced5760405162461bcd60e51b81526004016106d29061356a565b600080866001600160a01b03168587604051612d0991906131fe565b60006040518083038185875af1925050503d8060008114612d46576040519150601f19603f3d011682016040523d82523d6000602084013e612d4b565b606091505b5091509150612d5b828286612d6c565b979650505050505050565b3b151590565b60608315612d7b5750816126b5565b825115612d8b5782518084602001fd5b8160405162461bcd60e51b81526004016106d2919061333a565b828054828255906000526020600020908101928215612dfa579160200282015b82811115612dfa57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190612dc5565b50612e06929150612e0a565b5090565b5b80821115612e065760008155600101612e0b565b600082601f830112612e2f578081fd5b81356020612e44612e3f83613795565b61376b565b8281528181019085830183850287018401881015612e60578586fd5b855b85811015612e87578135612e758161387f565b84529284019290840190600101612e62565b5090979650505050505050565b600060208284031215612ea5578081fd5b81356126b58161387f565b600060208284031215612ec1578081fd5b81516126b58161387f565b60008060408385031215612ede578081fd5b8235612ee98161387f565b91506020830135612ef98161387f565b809150509250929050565b60008060408385031215612f16578182fd5b8235612f218161387f565b9150602083013567ffffffffffffffff811115612f3c578182fd5b612f4885828601612e1f565b9150509250929050565b600080600080600060a08688031215612f69578081fd5b8535612f748161387f565b945060208601359350604086013567ffffffffffffffff80821115612f97578283fd5b612fa389838a01612e1f565b94506060880135915080821115612fb8578283fd5b612fc489838a01612e1f565b93506080880135915080821115612fd9578283fd5b50612fe688828901612e1f565b9150509295509295909350565b60006020808385031215613005578182fd5b825167ffffffffffffffff81111561301b578283fd5b8301601f8101851361302b578283fd5b8051613039612e3f82613795565b8181528381019083850185840285018601891015613055578687fd5b8694505b83851015613077578051835260019490940193918501918501613059565b50979650505050505050565b600060208284031215613094578081fd5b815180151581146126b5578182fd5b60008060008060008060c087890312156130bb578081fd5b86356130c68161387f565b955060208701356130d68161387f565b945060408701356130e68161387f565b9350606087013567ffffffffffffffff80821115613102578283fd5b61310e8a838b01612e1f565b94506080890135915080821115613123578283fd5b61312f8a838b01612e1f565b935060a0890135915080821115613144578283fd5b5061315189828a01612e1f565b9150509295509295509295565b60006020828403121561316f578081fd5b5035919050565b600060208284031215613187578081fd5b5051919050565b6000806000606084860312156131a2578283fd5b8351925060208401519150604084015190509250925092565b6000815180845260208085019450808401835b838110156131f35781516001600160a01b0316875295820195908201906001016131ce565b509495945050505050565b60008251613210818460208701613827565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b0383168152604060208201819052600090612c9e908301846131bb565b6001600160a01b03929092168252602082015260400190565b600060018060a01b038716825285602083015260a060408301526132ac60a08301866131bb565b82810360608401526132be81866131bb565b905082810360808401526132d281856131bb565b98975050505050505050565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6001600160a01b039390931683526020830191909152604082015260600190565b6000602082528251806020840152613359816040850160208701613827565b601f01601f19169190910160400192915050565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b602080825260129082015271496e76616c69642070657263656e7461676560701b604082015260600190565b6020808252600e908201526d125b9d985b1a5908105b5bdd5b9d60921b604082015260600190565b60208082526026908201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6040820152651c8818d85b1b60d21b606082015260800190565b6020808252602b908201527f657863656564206d6178696d756d207769746864726177616c206c696d69742060408201526a666f72203330206461797360a81b606082015260800190565b6020808252602e908201527f657863656564206d6178696d756d204c50207769746864726177616c206c696d60408201526d697420666f72203330206461797360901b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252600c908201526b1cdb585b1b081c195c9a5bd960a21b604082015260600190565b6020808252600f908201526e496e76616c6964204164647265737360881b604082015260600190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b602080825260139082015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b604082015260600190565b60208082526026908201527f43616e6e6f7420626520746f6b656e2026206469766964656e6420746f6b656e60408201526516103830b4b960d11b606082015260800190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b60208082526036908201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60408201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b606082015260800190565b90815260200190565b600083825260406020830152612c9e60408301846131bb565b6000858252608060208301526136ef60808301866131bb565b6001600160a01b03949094166040830152506060015292915050565b918252602082015260400190565b600086825285602083015260a0604083015261373860a08301866131bb565b6001600160a01b0394909416606083015250608001529392505050565b9283526020830191909152604082015260600190565b60405181810167ffffffffffffffff8111828210171561378d5761378d613869565b604052919050565b600067ffffffffffffffff8211156137af576137af613869565b5060209081020190565b600082198211156137cc576137cc613853565b500190565b6000826137ec57634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561380b5761380b613853565b500290565b60008282101561382257613822613853565b500390565b60005b8381101561384257818101518382015260200161382a565b83811115612c895750506000910152565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461081857600080fdfea2646970667358221220ebb181b82961e7aa6684ec75f7656c86aa3e20441b596f00eea22a14a0a44e9564736f6c63430008000033
Deployed Bytecode
0x60806040526004361061023e5760003560e01c8063887a7dc91161012e578063b74cd242116100ab578063ef78d4fd1161006f578063ef78d4fd1461061f578063f2fde38b14610634578063f76024c414610654578063fc0c546a14610669578063ffbd3b1f1461067e57610245565b8063b74cd242146105a0578063db26eace146105b5578063db2e21bc146105d5578063e8078d94146105ea578063e8669da6146105ff57610245565b806392f735eb116100f257806392f735eb14610516578063a567a96214610536578063a8aa1b3114610556578063acdf4f181461056b578063b67b7ec71461058057610245565b8063887a7dc9146104975780638a317525146104b75780638d583550146104d75780638da5cb5b146104ec5780638eff071a1461050157610245565b80634d2e6d2a116101bc578063630f6f8b11610180578063630f6f8b14610418578063693a090b146104385780636e10f4761461044d578063715018a61461046d5780637ddfe78d1461048257610245565b80634d2e6d2a146103995780635a0768ce146103ae5780635dd13dbd146103ce5780635e192644146103ee5780635f64b55b1461040357610245565b8063107ee89311610203578063107ee893146102f75780631582358e146103245780632e1a7d4d146103395780633c4666cf146103595780633ca681901461037957610245565b8062ae3bf81461024a578063045af2581461026c5780630a861f2a146102975780630daa6c0d146102b75780630e5c011e146102d757610245565b3661024557005b600080fd5b34801561025657600080fd5b5061026a610265366004612e94565b610693565b005b34801561027857600080fd5b5061028161081b565b60405161028e91906136b4565b60405180910390f35b3480156102a357600080fd5b5061026a6102b236600461315e565b610821565b3480156102c357600080fd5b5061026a6102d2366004612ecc565b610a54565b3480156102e357600080fd5b5061026a6102f2366004612e94565b610b6a565b34801561030357600080fd5b5061031761031236600461315e565b610e52565b60405161028e919061321a565b34801561033057600080fd5b50610317610e7c565b34801561034557600080fd5b5061026a61035436600461315e565b610e8b565b34801561036557600080fd5b5061026a6103743660046130a3565b6110bd565b34801561038557600080fd5b5061026a61039436600461315e565b611304565b3480156103a557600080fd5b5061026a6113a4565b3480156103ba57600080fd5b5061026a6103c936600461315e565b61151d565b3480156103da57600080fd5b506103176103e936600461315e565b6115b2565b3480156103fa57600080fd5b5061026a6115c2565b34801561040f57600080fd5b506103176116be565b34801561042457600080fd5b5061026a610433366004612f52565b6116cd565b34801561044457600080fd5b506103176117cf565b34801561045957600080fd5b5061026a61046836600461315e565b6117de565b34801561047957600080fd5b5061026a611873565b34801561048e57600080fd5b506102816118bc565b3480156104a357600080fd5b506103176104b236600461315e565b6118c2565b3480156104c357600080fd5b5061026a6104d2366004612ecc565b6118d2565b3480156104e357600080fd5b50610281611a54565b3480156104f857600080fd5b50610317611a5a565b34801561050d57600080fd5b5061026a611a69565b34801561052257600080fd5b5061026a610531366004612e94565b611bd2565b34801561054257600080fd5b5061026a610551366004612f04565b611c49565b34801561056257600080fd5b50610317611ce8565b34801561057757600080fd5b5061026a611cf7565b34801561058c57600080fd5b5061031761059b36600461315e565b611df3565b3480156105ac57600080fd5b50610281611e03565b3480156105c157600080fd5b5061026a6105d036600461315e565b611e09565b3480156105e157600080fd5b5061026a611e9e565b3480156105f657600080fd5b5061026a61212c565b34801561060b57600080fd5b5061026a61061a36600461315e565b612295565b34801561062b57600080fd5b5061028161232a565b34801561064057600080fd5b5061026a61064f366004612e94565b612330565b34801561066057600080fd5b5061028161239e565b34801561067557600080fd5b506103176123a4565b34801561068a57600080fd5b506102816123b3565b61069b6123b9565b6001600160a01b03166106ac611a5a565b6001600160a01b0316146106db5760405162461bcd60e51b81526004016106d2906134e6565b60405180910390fd5b6002546001600160a01b0382811691161480159061070757506003546001600160a01b03828116911614155b801561072157506004546001600160a01b03828116911614155b61073d5760405162461bcd60e51b81526004016106d2906135ce565b6001600160a01b038116610781576040514790339082156108fc029083906000818181858888f1935050505015801561077a573d6000803e3d6000fd5b5050610818565b6040516370a0823160e01b81526000906001600160a01b038316906370a08231906107b090309060040161321a565b60206040518083038186803b1580156107c857600080fd5b505afa1580156107dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108009190613176565b90506108166001600160a01b03831633836123bd565b505b50565b600a5481565b6108296123b9565b6001600160a01b031661083a611a5a565b6001600160a01b0316146108605760405162461bcd60e51b81526004016106d2906134e6565b600480546040516370a0823160e01b81526000926001600160a01b03909216916370a08231916108929130910161321a565b60206040518083038186803b1580156108aa57600080fd5b505afa1580156108be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e29190613176565b90506000821180156108f45750808211155b6109105760405162461bcd60e51b81526004016106d2906133df565b60015460065461092091906137f1565b600b5461092d9042613810565b111561093d5742600b556000600d555b60048054604080516318160ddd60e01b81529051600093612710936001600160a01b0316926318160ddd9281830192602092829003018186803b15801561098357600080fd5b505afa158015610997573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109bb9190613176565b6008546109c891906137f1565b6109d291906137d1565b90508083600d546109e391906137b9565b1115610a015760405162461bcd60e51b81526004016106d290613498565b600454610a18906001600160a01b031633856123bd565b7f73ce532f480864bd2fccd1bcdbb4c8151f02cd9450c4f3e5b834ef74503abdb283604051610a4791906136b4565b60405180910390a1505050565b610a5c6123b9565b6001600160a01b0316610a6d611a5a565b6001600160a01b031614610a935760405162461bcd60e51b81526004016106d2906134e6565b6001600160a01b03821615801590610ab357506001600160a01b03811615155b610acf5760405162461bcd60e51b81526004016106d290613541565b60405163523205c160e11b81526001600160a01b0383169063a4640b8290610afb90849060040161321a565b600060405180830381600087803b158015610b1557600080fd5b505af1158015610b29573d6000803e3d6000fd5b505050507f7f78141a3bd83bf938eb2a367b5b7e1a1056d8128b3f1809535eed46891c90338282604051610b5e92919061322e565b60405180910390a15050565b610b726123b9565b6001600160a01b0316610b83611a5a565b6001600160a01b031614610ba95760405162461bcd60e51b81526004016106d2906134e6565b600954479061271090610bbc90836137f1565b610bc691906137d1565b6003549091506001600160a01b0316610c55578015610c50576040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610c15573d6000803e3d6000fd5b507f121c5042302bae5fc561fbc64368f297ca60a880878e1e3a7f7e9380377260bf8282604051610c4792919061326c565b60405180910390a15b610816565b8015610d0e576000610cc2826010805480602002602001604051908101604052809291908181526020018280548015610cb757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610c99575b505050505030612413565b6003546040519192507f3a9a9f34f5831e9c8ecb66ab3aa308b2ff31eaca434615f6c9cadc656a9af71c91610d04916001600160a01b03169085908590613319565b60405180910390a1505b6003546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610d3f90309060040161321a565b60206040518083038186803b158015610d5757600080fd5b505afa158015610d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8f9190613176565b90508015610e4d5760035460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90610dc9908690859060040161326c565b602060405180830381600087803b158015610de357600080fd5b505af1158015610df7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1b9190613083565b507f121c5042302bae5fc561fbc64368f297ca60a880878e1e3a7f7e9380377260bf8382604051610a4792919061326c565b505050565b60118181548110610e6257600080fd5b6000918252602090912001546001600160a01b0316905081565b6003546001600160a01b031681565b610e936123b9565b6001600160a01b0316610ea4611a5a565b6001600160a01b031614610eca5760405162461bcd60e51b81526004016106d2906134e6565b6002546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610efb90309060040161321a565b60206040518083038186803b158015610f1357600080fd5b505afa158015610f27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4b9190613176565b9050600082118015610f5d5750808211155b610f795760405162461bcd60e51b81526004016106d2906133df565b600154600654610f8991906137f1565b600b54610f969042613810565b1115610fa65742600b556000600c555b6000612710600260009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ff957600080fd5b505afa15801561100d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110319190613176565b60075461103e91906137f1565b61104891906137d1565b90508083600c5461105991906137b9565b11156110775760405162461bcd60e51b81526004016106d29061344d565b60025461108e906001600160a01b031633856123bd565b7f430648de173157e069201c943adb2d4e340e7cf5b27b1b09c9cb852f03d63b5683604051610a4791906136b4565b6110c56123b9565b6001600160a01b03166110d6611a5a565b6001600160a01b0316146110fc5760405162461bcd60e51b81526004016106d2906134e6565b600054600160a01b900460ff16156111265760405162461bcd60e51b81526004016106d2906135a1565b6000805460ff60a01b1916600160a01b179055600280546001600160a01b038089166001600160a01b0319928316179092556003805488841692169190911790556040805163c45a015560e01b815290519186169163c45a015591600480820192602092909190829003018186803b1580156111a157600080fd5b505afa1580156111b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d99190612eb0565b6001600160a01b031663e6a439058460008151811061120857634e487b7160e01b600052603260045260246000fd5b60209081029190910101516002546040516001600160e01b031960e085901b16815261124192916001600160a01b03169060040161322e565b60206040518083038186803b15801561125957600080fd5b505afa15801561126d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112919190612eb0565b600480546001600160a01b03199081166001600160a01b0393841617909155600e805490911691861691909117905582516112d390600f906020860190612da5565b5081516112e7906010906020850190612da5565b5080516112fb906011906020840190612da5565b50505050505050565b61130c6123b9565b6001600160a01b031661131d611a5a565b6001600160a01b0316146113435760405162461bcd60e51b81526004016106d2906134e6565b61271081106113645760405162461bcd60e51b81526004016106d2906133b3565b600a8190556040517f71e39bccc2e27c18ea159b9a4fbc08961b9d9583ea143ae3e5021cf6aefb613c906113999083906136b4565b60405180910390a150565b6113ac6123b9565b6001600160a01b03166113bd611a5a565b6001600160a01b0316146113e35760405162461bcd60e51b81526004016106d2906134e6565b6003546001600160a01b03166113f85761151b565b6003546040516370a0823160e01b81526000916001600160a01b0316906370a082319061142990309060040161321a565b60206040518083038186803b15801561144157600080fd5b505afa158015611455573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114799190613176565b905080156108185760006114e88260118054806020026020016040519081016040528092919081815260200182805480156114dd57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116114bf575b5050505050306126bc565b90507fb578101e5d792c57de69a936b880873b1c2e9f776134e5a89f463decc7963e1c8282604051610b5e92919061370b565b565b6115256123b9565b6001600160a01b0316611536611a5a565b6001600160a01b03161461155c5760405162461bcd60e51b81526004016106d2906134e6565b612710811061157d5760405162461bcd60e51b81526004016106d2906133b3565b60078190556040517f0969f79b044617688492c7c9b226129947037ca88c450002a7561ed78aa549ac906113999083906136b4565b60128181548110610e6257600080fd5b6115ca6123b9565b6001600160a01b03166115db611a5a565b6001600160a01b0316146116015760405162461bcd60e51b81526004016106d2906134e6565b60095447906127109061161490836137f1565b61161e91906137d1565b9050801561081857600061168b826012805480602002602001604051908101604052809291908181526020018280548015610cb7576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610c9957505050505030612413565b90507f928f1d2707e4b3d5c5e5eec211c5885d78b97fbd5e531142fef4255b3a7d42cd8282604051610b5e92919061370b565b6005546001600160a01b031681565b6116d56123b9565b6001600160a01b03166116e6611a5a565b6001600160a01b03161461170c5760405162461bcd60e51b81526004016106d2906134e6565b6103e8841061172d5760405162461bcd60e51b81526004016106d2906133b3565b600e80546001600160a01b0319166001600160a01b0387161790556013849055825161176090600f906020860190612da5565b508151611774906010906020850190612da5565b508051611788906011906020840190612da5565b507fac823b586c853c1953e323c1189297cec5b2cb4b1316ac35ccf979e1969dbc0f85858585856040516117c0959493929190613285565b60405180910390a15050505050565b600e546001600160a01b031681565b6117e66123b9565b6001600160a01b03166117f7611a5a565b6001600160a01b03161461181d5760405162461bcd60e51b81526004016106d2906134e6565b612710811061183e5760405162461bcd60e51b81526004016106d2906133b3565b60098190556040517fcc694eb069971c6c91f6c905b0f66a7a6322a90a42f3904b7508e7b9336a7dfe906113999083906136b4565b61187b6123b9565b6001600160a01b031661188c611a5a565b6001600160a01b0316146118b25760405162461bcd60e51b81526004016106d2906134e6565b61151b6000612956565b60075481565b600f8181548110610e6257600080fd5b6118da6123b9565b6001600160a01b03166118eb611a5a565b6001600160a01b0316146119115760405162461bcd60e51b81526004016106d2906134e6565b6001600160a01b0382161580159061193157506001600160a01b03811615155b61194d5760405162461bcd60e51b81526004016106d290613541565b6000826001600160a01b031663877887826040518163ffffffff1660e01b815260040160206040518083038186803b15801561198857600080fd5b505afa15801561199c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c09190613176565b604051631036c32960e31b81529091506001600160a01b038416906381b61948906119f1908590859060040161326c565b600060405180830381600087803b158015611a0b57600080fd5b505af1158015611a1f573d6000803e3d6000fd5b505050507f7f78141a3bd83bf938eb2a367b5b7e1a1056d8128b3f1809535eed46891c90338383604051610a4792919061322e565b60085481565b6000546001600160a01b031690565b611a716123b9565b6001600160a01b0316611a82611a5a565b6001600160a01b031614611aa85760405162461bcd60e51b81526004016106d2906134e6565b600a54479060029061271090611abe90846137f1565b611ac891906137d1565b611ad291906137d1565b90508015610818576000611b3f826012805480602002602001604051908101604052809291908181526020018280548015610cb7576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610c9957505050505030612413565b90507f928f1d2707e4b3d5c5e5eec211c5885d78b97fbd5e531142fef4255b3a7d42cd8282604051611b7292919061370b565b60405180910390a160055460009081908190611b99906001600160a01b03168686306129a6565b9250925092507f9c1a4864af1ed5a44d37192e4feedda1a1dac5f99eb6d8bc6ecda06664f8febb8284836040516117c093929190613755565b611bda6123b9565b6001600160a01b0316611beb611a5a565b6001600160a01b031614611c115760405162461bcd60e51b81526004016106d2906134e6565b60405147906001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610e4d573d6000803e3d6000fd5b611c516123b9565b6001600160a01b0316611c62611a5a565b6001600160a01b031614611c885760405162461bcd60e51b81526004016106d2906134e6565b600580546001600160a01b0319166001600160a01b0384161790558051611cb6906012906020840190612da5565b507fc64034f00bf45b3ae85afda759ba83d8a53fa17db050eb90fc3a2900ea5b4e6b8282604051610b5e929190613248565b6004546001600160a01b031681565b611cff6123b9565b6001600160a01b0316611d10611a5a565b6001600160a01b031614611d365760405162461bcd60e51b81526004016106d2906134e6565b600954479061271090611d4990836137f1565b611d5391906137d1565b90508015610818576000611dc082600f805480602002602001604051908101604052809291908181526020018280548015610cb7576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610c9957505050505030612413565b90507f5af76d43c73e649d671103b29a6b93de2a53abb35bf2600ac3d04b13d413072d8282604051610b5e92919061370b565b60108181548110610e6257600080fd5b6103e381565b611e116123b9565b6001600160a01b0316611e22611a5a565b6001600160a01b031614611e485760405162461bcd60e51b81526004016106d2906134e6565b600a811015611e695760405162461bcd60e51b81526004016106d29061351b565b60068190556040517f989f99d0a575dfaf67701aef35b8654442a4705a4bce243d8f81e1bb2bc4a63f906113999083906136b4565b611ea66123b9565b6001600160a01b0316611eb7611a5a565b6001600160a01b031614611edd5760405162461bcd60e51b81526004016106d2906134e6565b6002546040516370a0823160e01b81526000916001600160a01b0316906370a0823190611f0e90309060040161321a565b60206040518083038186803b158015611f2657600080fd5b505afa158015611f3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f5e9190613176565b90508015611fec5760025460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90611f98903390859060040161326c565b602060405180830381600087803b158015611fb257600080fd5b505af1158015611fc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fea9190613083565b505b600480546040516370a0823160e01b81526001600160a01b03909116916370a082319161201b9130910161321a565b60206040518083038186803b15801561203357600080fd5b505afa158015612047573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206b9190613176565b905080156120f8576004805460405163a9059cbb60e01b81526001600160a01b039091169163a9059cbb916120a491339186910161326c565b602060405180830381600087803b1580156120be57600080fd5b505af11580156120d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120f69190613083565b505b47801561081657604051339082156108fc029083906000818181858888f19350505050158015610e4d573d6000803e3d6000fd5b6121346123b9565b6001600160a01b0316612145611a5a565b6001600160a01b03161461216b5760405162461bcd60e51b81526004016106d2906134e6565b600a5447906002906127109061218190846137f1565b61218b91906137d1565b61219591906137d1565b9050801561081857600061220282600f805480602002602001604051908101604052809291908181526020018280548015610cb7576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610c9957505050505030612413565b90507f5af76d43c73e649d671103b29a6b93de2a53abb35bf2600ac3d04b13d413072d828260405161223592919061370b565b60405180910390a16002546000908190819061225c906001600160a01b03168686306129a6565b9250925092507fd7f28048575eead8851d024ead087913957dfb4fd1a02b4d1573f5352a5a2be38284836040516117c093929190613755565b61229d6123b9565b6001600160a01b03166122ae611a5a565b6001600160a01b0316146122d45760405162461bcd60e51b81526004016106d2906134e6565b61271081106122f55760405162461bcd60e51b81526004016106d2906133b3565b60088190556040517f0eeb4417a0dd5e563056eaf6d3024509bedf001cfac9394bb02f37e3414fa34b906113999083906136b4565b60065481565b6123386123b9565b6001600160a01b0316612349611a5a565b6001600160a01b03161461236f5760405162461bcd60e51b81526004016106d2906134e6565b6001600160a01b0381166123955760405162461bcd60e51b81526004016106d29061336d565b61081881612956565b60095481565b6002546001600160a01b031681565b60135481565b3390565b610e4d8363a9059cbb60e01b84846040516024016123dc92919061326c565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612a8b565b600e5460405163d06ca61f60e01b815260009182916001600160a01b039091169063d06ca61f9061244a90889088906004016136bd565b60006040518083038186803b15801561246257600080fd5b505afa158015612476573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261249e9190810190612ff3565b9050600081600183516124b19190613810565b815181106124cf57634e487b7160e01b600052603260045260246000fd5b60200260200101519050600085600187516124ea9190613810565b8151811061250857634e487b7160e01b600052603260045260246000fd5b602002602001015190506000816001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401612540919061321a565b60206040518083038186803b15801561255857600080fd5b505afa15801561256c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125909190613176565b600e546013549192506001600160a01b03169063b6f9de95908a906103e8906125b990886137f1565b6125c391906137d1565b8a8a6125d1426102586137b9565b6040518663ffffffff1660e01b81526004016125f094939291906136d6565b6000604051808303818588803b15801561260957600080fd5b505af115801561261d573d6000803e3d6000fd5b50506040516370a0823160e01b8152600093506001600160a01b03861692506370a08231915061265190309060040161321a565b60206040518083038186803b15801561266957600080fd5b505afa15801561267d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126a19190613176565b90506126ad8282613810565b955050505050505b9392505050565b600e5460405163d06ca61f60e01b815260009182916001600160a01b039091169063d06ca61f906126f390889088906004016136bd565b60006040518083038186803b15801561270b57600080fd5b505afa15801561271f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526127479190810190612ff3565b90506000816001835161275a9190613810565b8151811061277857634e487b7160e01b600052603260045260246000fd5b602002602001015190506127dd600e60009054906101000a90046001600160a01b031687876000815181106127bd57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b0316612b1a9092919063ffffffff16565b600085600187516127ee9190613810565b8151811061280c57634e487b7160e01b600052603260045260246000fd5b602002602001015190506000816001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401612844919061321a565b60206040518083038186803b15801561285c57600080fd5b505afa158015612870573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128949190613176565b600e546013549192506001600160a01b031690635c11d795908a906103e8906128bd90886137f1565b6128c791906137d1565b8a8a6128d5426102586137b9565b6040518663ffffffff1660e01b81526004016128f5959493929190613719565b600060405180830381600087803b15801561290f57600080fd5b505af1158015612923573d6000803e3d6000fd5b50506040516370a0823160e01b8152600092506001600160a01b03851691506370a082319061265190309060040161321a565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600e54600090819081906129c7906001600160a01b03898116911687612bdd565b600e546001600160a01b031663f305d7198789886000808a6129eb426102586137b9565b6040518863ffffffff1660e01b8152600401612a0c969594939291906132de565b6060604051808303818588803b158015612a2557600080fd5b505af1158015612a39573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a5e919061318e565b600e549295509093509150612a81906001600160a01b0389811691166000612b1a565b9450945094915050565b6000612ae0826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612c8f9092919063ffffffff16565b805190915015610e4d5780806020019051810190612afe9190613083565b610e4d5760405162461bcd60e51b81526004016106d290613614565b801580612ba25750604051636eb1769f60e11b81526001600160a01b0384169063dd62ed3e90612b50903090869060040161322e565b60206040518083038186803b158015612b6857600080fd5b505afa158015612b7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ba09190613176565b155b612bbe5760405162461bcd60e51b81526004016106d29061365e565b610e4d8363095ea7b360e01b84846040516024016123dc92919061326c565b600081846001600160a01b031663dd62ed3e30866040518363ffffffff1660e01b8152600401612c0e92919061322e565b60206040518083038186803b158015612c2657600080fd5b505afa158015612c3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c5e9190613176565b612c6891906137b9565b9050612c898463095ea7b360e01b85846040516024016123dc92919061326c565b50505050565b6060612c9e8484600085612ca6565b949350505050565b606082471015612cc85760405162461bcd60e51b81526004016106d290613407565b612cd185612d66565b612ced5760405162461bcd60e51b81526004016106d29061356a565b600080866001600160a01b03168587604051612d0991906131fe565b60006040518083038185875af1925050503d8060008114612d46576040519150601f19603f3d011682016040523d82523d6000602084013e612d4b565b606091505b5091509150612d5b828286612d6c565b979650505050505050565b3b151590565b60608315612d7b5750816126b5565b825115612d8b5782518084602001fd5b8160405162461bcd60e51b81526004016106d2919061333a565b828054828255906000526020600020908101928215612dfa579160200282015b82811115612dfa57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190612dc5565b50612e06929150612e0a565b5090565b5b80821115612e065760008155600101612e0b565b600082601f830112612e2f578081fd5b81356020612e44612e3f83613795565b61376b565b8281528181019085830183850287018401881015612e60578586fd5b855b85811015612e87578135612e758161387f565b84529284019290840190600101612e62565b5090979650505050505050565b600060208284031215612ea5578081fd5b81356126b58161387f565b600060208284031215612ec1578081fd5b81516126b58161387f565b60008060408385031215612ede578081fd5b8235612ee98161387f565b91506020830135612ef98161387f565b809150509250929050565b60008060408385031215612f16578182fd5b8235612f218161387f565b9150602083013567ffffffffffffffff811115612f3c578182fd5b612f4885828601612e1f565b9150509250929050565b600080600080600060a08688031215612f69578081fd5b8535612f748161387f565b945060208601359350604086013567ffffffffffffffff80821115612f97578283fd5b612fa389838a01612e1f565b94506060880135915080821115612fb8578283fd5b612fc489838a01612e1f565b93506080880135915080821115612fd9578283fd5b50612fe688828901612e1f565b9150509295509295909350565b60006020808385031215613005578182fd5b825167ffffffffffffffff81111561301b578283fd5b8301601f8101851361302b578283fd5b8051613039612e3f82613795565b8181528381019083850185840285018601891015613055578687fd5b8694505b83851015613077578051835260019490940193918501918501613059565b50979650505050505050565b600060208284031215613094578081fd5b815180151581146126b5578182fd5b60008060008060008060c087890312156130bb578081fd5b86356130c68161387f565b955060208701356130d68161387f565b945060408701356130e68161387f565b9350606087013567ffffffffffffffff80821115613102578283fd5b61310e8a838b01612e1f565b94506080890135915080821115613123578283fd5b61312f8a838b01612e1f565b935060a0890135915080821115613144578283fd5b5061315189828a01612e1f565b9150509295509295509295565b60006020828403121561316f578081fd5b5035919050565b600060208284031215613187578081fd5b5051919050565b6000806000606084860312156131a2578283fd5b8351925060208401519150604084015190509250925092565b6000815180845260208085019450808401835b838110156131f35781516001600160a01b0316875295820195908201906001016131ce565b509495945050505050565b60008251613210818460208701613827565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b0383168152604060208201819052600090612c9e908301846131bb565b6001600160a01b03929092168252602082015260400190565b600060018060a01b038716825285602083015260a060408301526132ac60a08301866131bb565b82810360608401526132be81866131bb565b905082810360808401526132d281856131bb565b98975050505050505050565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6001600160a01b039390931683526020830191909152604082015260600190565b6000602082528251806020840152613359816040850160208701613827565b601f01601f19169190910160400192915050565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b602080825260129082015271496e76616c69642070657263656e7461676560701b604082015260600190565b6020808252600e908201526d125b9d985b1a5908105b5bdd5b9d60921b604082015260600190565b60208082526026908201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6040820152651c8818d85b1b60d21b606082015260800190565b6020808252602b908201527f657863656564206d6178696d756d207769746864726177616c206c696d69742060408201526a666f72203330206461797360a81b606082015260800190565b6020808252602e908201527f657863656564206d6178696d756d204c50207769746864726177616c206c696d60408201526d697420666f72203330206461797360901b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252600c908201526b1cdb585b1b081c195c9a5bd960a21b604082015260600190565b6020808252600f908201526e496e76616c6964204164647265737360881b604082015260600190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b602080825260139082015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b604082015260600190565b60208082526026908201527f43616e6e6f7420626520746f6b656e2026206469766964656e6420746f6b656e60408201526516103830b4b960d11b606082015260800190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b60208082526036908201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60408201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b606082015260800190565b90815260200190565b600083825260406020830152612c9e60408301846131bb565b6000858252608060208301526136ef60808301866131bb565b6001600160a01b03949094166040830152506060015292915050565b918252602082015260400190565b600086825285602083015260a0604083015261373860a08301866131bb565b6001600160a01b0394909416606083015250608001529392505050565b9283526020830191909152604082015260600190565b60405181810167ffffffffffffffff8111828210171561378d5761378d613869565b604052919050565b600067ffffffffffffffff8211156137af576137af613869565b5060209081020190565b600082198211156137cc576137cc613853565b500190565b6000826137ec57634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561380b5761380b613853565b500290565b60008282101561382257613822613853565b500390565b60005b8381101561384257818101518382015260200161382a565b83811115612c895750506000910152565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461081857600080fdfea2646970667358221220ebb181b82961e7aa6684ec75f7656c86aa3e20441b596f00eea22a14a0a44e9564736f6c63430008000033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | Ether (ETH) | 100.00% | $3,393.09 | 0.00766594 | $26.01 |
Loading...
Loading
[ Download: CSV Export ]
[ 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.