Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0.17711 ETH
Eth Value
$581.12 (@ $3,281.13/ETH)More Info
Private Name Tags
ContractCreator
Latest 13 from a total of 13 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Harvest ETH | 17819608 | 361 days ago | IN | 0 ETH | 0.00091886 | ||||
Harvest ETH | 16964571 | 481 days ago | IN | 0 ETH | 0.00067361 | ||||
Harvest ETH | 16779452 | 507 days ago | IN | 0 ETH | 0.00137651 | ||||
Harvest ETH | 16516751 | 544 days ago | IN | 0 ETH | 0.0004943 | ||||
Harvest ETH | 16161665 | 594 days ago | IN | 0 ETH | 0.00043297 | ||||
Set Staking Serv... | 16161654 | 594 days ago | IN | 0 ETH | 0.00051399 | ||||
Harvest ETH | 16054561 | 609 days ago | IN | 0 ETH | 0.0003282 | ||||
Set Staking Serv... | 16054543 | 609 days ago | IN | 0 ETH | 0.00043712 | ||||
Harvest ETH | 15963192 | 621 days ago | IN | 0 ETH | 0.00061543 | ||||
Harvest ETH | 15906804 | 629 days ago | IN | 0 ETH | 0.00035797 | ||||
Transfer Ownersh... | 15481517 | 690 days ago | IN | 0 ETH | 0.00039205 | ||||
Initialize | 15481499 | 690 days ago | IN | 0 ETH | 0.00386324 | ||||
0x60806040 | 15481490 | 690 days ago | IN | 0 ETH | 0.04741875 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
20396539 | 7 hrs ago | 0.00089 ETH | ||||
20396536 | 7 hrs ago | 0.00089 ETH | ||||
20396533 | 7 hrs ago | 0.00089 ETH | ||||
20100868 | 41 days ago | 0.00089 ETH | ||||
20100858 | 41 days ago | 0.00089 ETH | ||||
20095758 | 42 days ago | 0.00089 ETH | ||||
20095686 | 42 days ago | 0.00089 ETH | ||||
19977297 | 58 days ago | 0.00089 ETH | ||||
19896417 | 70 days ago | 0.00089 ETH | ||||
19896414 | 70 days ago | 0.00089 ETH | ||||
19741050 | 91 days ago | 0.00089 ETH | ||||
19731729 | 93 days ago | 0.00089 ETH | ||||
19699893 | 97 days ago | 0.00089 ETH | ||||
19682830 | 100 days ago | 0.00089 ETH | ||||
19682818 | 100 days ago | 0.00089 ETH | ||||
19682812 | 100 days ago | 0.00089 ETH | ||||
19627790 | 107 days ago | 0.00089 ETH | ||||
19467639 | 130 days ago | 0.00089 ETH | ||||
19395322 | 140 days ago | 0.00089 ETH | ||||
19231525 | 163 days ago | 0.00089 ETH | ||||
19231523 | 163 days ago | 0.00089 ETH | ||||
19231501 | 163 days ago | 0.00089 ETH | ||||
19115014 | 179 days ago | 0.00089 ETH | ||||
19075073 | 185 days ago | 0.00089 ETH | ||||
19047340 | 189 days ago | 0.00089 ETH |
Loading...
Loading
Contract Name:
BrewlabsTreasury
Compiler Version
v0.8.4+commit.c7e474f2
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"; interface IStaking { function performanceFee() external view returns (uint256); function setServiceInfo(address _addr, uint256 _fee) external; } interface IFarm { function setBuyBackWallet(address _addr) external; } contract BrewlabsTreasury is Ownable { using SafeERC20 for IERC20; bool private isInitialized; uint256 private constant TIME_UNIT = 1 days; uint256 private constant PERCENT_PRECISION = 10000; IERC20 public token; address public dividendToken; address public pair; address private constant USDC = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48; 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; uint256 public slippageFactor = 8300; // 17% uint256 public constant slippageFactorUL = 9950; event Initialized( address token, address dividendToken, address router, address[] ethToTokenPath, address[] ethToDividendPath, address[] dividendToTokenPath ); event TokenBuyBack(uint256 amountETH, uint256 amountToken); event TokenBuyBackFromDividend(uint256 amount, uint256 amountToken); event LiquidityAdded( 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 EthHarvested(address to, uint256 amount); event EmergencyWithdrawn(); event AdminTokenRecovered(address tokenRecovered, uint256 amount); event UsdcHarvested(address to, uint256[] amounts); event SetSwapConfig( address router, uint256 slipPage, address[] ethToTokenPath, address[] ethToDividendPath, address[] dividendToTokenPath ); 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"); require(_uniRouter != address(0x0), "invalid address"); require(address(_token) != address(0x0), "invalid token address"); // 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; emit Initialized( address(_token), _dividendToken, _uniRouter, _ethToTokenPath, _ethToDividendPath, _dividendToTokenPath ); } /** * @notice Buy token from ETH */ function buyBack() external onlyOwner { uint256 ethAmt = address(this).balance; ethAmt = (ethAmt * buybackRate) / PERCENT_PRECISION; if (ethAmt > 0) { uint256 _tokenAmt = _safeSwapEth(ethAmt, ethToTokenPath, address(this)); emit TokenBuyBack(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) / PERCENT_PRECISION / 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 Swap and harvest reflection for token * @param _to: receiver address */ function harvest(address _to) external onlyOwner { uint256 ethAmt = address(this).balance; ethAmt = (ethAmt * buybackRate) / PERCENT_PRECISION; 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 { require(_to != address(0x0), "invalid address"); uint256 ethAmt = address(this).balance; payable(_to).transfer(ethAmt); emit EthHarvested(_to, ethAmt); } function harvestUSDC(address _to) external onlyOwner { require(_to != address(0x0), "invalid address"); uint256 ethAmt = address(this).balance; ethAmt = (ethAmt * buybackRate) / PERCENT_PRECISION; if (ethAmt == 0) return; address[] memory path = new address[](2); path[0] = IUniRouter02(uniRouterAddress).WETH(); path[1] = USDC; uint256[] memory amounts = IUniRouter02(uniRouterAddress) .swapExactETHForTokens{ value: ethAmt }( 0, path, _to, block.timestamp + 600 ); emit UsdcHarvested(_to, amounts); } /** * @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())) / PERCENT_PRECISION; require( sumWithdrawals + _amount <= limit, "exceed maximum withdrawal limit for 30 days" ); token.safeTransfer(msg.sender, _amount); emit Withdrawn(_amount); } /** * @notice Withdraw liquidity * @param _amount: 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())) / PERCENT_PRECISION; 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); } emit EmergencyWithdrawn(); } /** * @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 < PERCENT_PRECISION, "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 < PERCENT_PRECISION, "Invalid percentage"); withdrawalLimit = _percent; emit WithdrawLimitUpdated(_percent); } /** * @notice Set buyback rate * @param _percent: percentage in point */ function setBuybackRate(uint256 _percent) external onlyOwner { require(_percent < PERCENT_PRECISION, "Invalid percentage"); buybackRate = _percent; emit BuybackRateUpdated(_percent); } /** * @notice Set addliquidy rate * @param _percent: percentage in point */ function setAddLiquidityRate(uint256 _percent) external onlyOwner { require(_percent < PERCENT_PRECISION, "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(_uniRouter != address(0x0), "invalid address"); require(_slipPage <= slippageFactorUL, "_slippage too high"); uniRouterAddress = _uniRouter; slippageFactor = _slipPage; ethToTokenPath = _ethToTokenPath; ethToDividendPath = _ethToDividendPath; dividendToTokenPath = _dividendToTokenPath; emit SetSwapConfig( _uniRouter, _slipPage, _ethToTokenPath, _ethToDividendPath, _dividendToTokenPath ); } /** * @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" ); uint256 _tokenAmount; if (_token == address(0x0)) { _tokenAmount = address(this).balance; payable(msg.sender).transfer(_tokenAmount); } else { _tokenAmount = IERC20(_token).balanceOf(address(this)); IERC20(_token).safeTransfer(msg.sender, _tokenAmount); } emit AdminTokenRecovered(_token, _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) / PERCENT_PRECISION, _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) / PERCENT_PRECISION, _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 // 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":"address","name":"tokenRecovered","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"AdminTokenRecovered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"percent","type":"uint256"}],"name":"BuybackRateUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"EmergencyWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EthHarvested","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":"address","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"dividendToken","type":"address"},{"indexed":false,"internalType":"address","name":"router","type":"address"},{"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":"Initialized","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":"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":"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":"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":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"UsdcHarvested","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":"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":"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":"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":"address","name":"_to","type":"address"}],"name":"harvestUSDC","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":"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":[{"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
6080604052601e6004556101f46005556107d060065561251c6007556124b86008556000600a556000600b5561206c6010553480156200003e57600080fd5b506200004a3362000050565b620000a0565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61377280620000b06000396000f3fe6080604052600436106101d25760003560e01c8063887a7dc9116100f8578063db26eace11610090578063db26eace1461050c578063db2e21bc1461052c578063e8078d9414610541578063e8669da614610556578063ef78d4fd14610576578063f2fde38b1461058c578063f76024c4146105ac578063fc0c546a146105c2578063ffbd3b1f146105e257600080fd5b8063887a7dc9146104165780638a317525146104365780638d583550146104565780638da5cb5b1461046c57806392f735eb14610481578063a8aa1b31146104a1578063acdf4f18146104c1578063b67b7ec7146104d6578063b74cd242146104f657600080fd5b80633c4666cf1161016b5780633c4666cf146103165780633ca68190146103365780634d2e6d2a146103565780635a0768ce1461036b578063630f6f8b1461038b578063693a090b146103ab5780636e10f476146103cb578063715018a6146103eb5780637ddfe78d1461040057600080fd5b8062ae3bf8146101de578063045af258146102005780630a861f2a146102295780630daa6c0d146102495780630e5c011e14610269578063107ee893146102895780631582358e146102b65780632e1a7d4d146102d6578063365247fc146102f657600080fd5b366101d957005b600080fd5b3480156101ea57600080fd5b506101fe6101f9366004612fe9565b6105f8565b005b34801561020c57600080fd5b5061021660085481565b6040519081526020015b60405180910390f35b34801561023557600080fd5b506101fe610244366004613268565b6107e6565b34801561025557600080fd5b506101fe610264366004613021565b610a5a565b34801561027557600080fd5b506101fe610284366004612fe9565b610b54565b34801561029557600080fd5b506102a96102a4366004613268565b610e28565b6040516102209190613324565b3480156102c257600080fd5b506002546102a9906001600160a01b031681565b3480156102e257600080fd5b506101fe6102f1366004613268565b610e52565b34801561030257600080fd5b506101fe610311366004612fe9565b6110ba565b34801561032257600080fd5b506101fe6103313660046131ad565b611334565b34801561034257600080fd5b506101fe610351366004613268565b611646565b34801561036257600080fd5b506101fe6116d2565b34801561037757600080fd5b506101fe610386366004613268565b61183e565b34801561039757600080fd5b506101fe6103a6366004613059565b6118c3565b3480156103b757600080fd5b50600c546102a9906001600160a01b031681565b3480156103d757600080fd5b506101fe6103e6366004613268565b611a01565b3480156103f757600080fd5b506101fe611a86565b34801561040c57600080fd5b5061021660055481565b34801561042257600080fd5b506102a9610431366004613268565b611abf565b34801561044257600080fd5b506101fe610451366004613021565b611acf565b34801561046257600080fd5b5061021660065481565b34801561047857600080fd5b506102a9611c41565b34801561048d57600080fd5b506101fe61049c366004612fe9565b611c50565b3480156104ad57600080fd5b506003546102a9906001600160a01b031681565b3480156104cd57600080fd5b506101fe611d0f565b3480156104e257600080fd5b506102a96104f1366004613268565b611e01565b34801561050257600080fd5b506102166126de81565b34801561051857600080fd5b506101fe610527366004613268565b611e11565b34801561053857600080fd5b506101fe611eb5565b34801561054d57600080fd5b506101fe612164565b34801561056257600080fd5b506101fe610571366004613268565b6122cb565b34801561058257600080fd5b5061021660045481565b34801561059857600080fd5b506101fe6105a7366004612fe9565b612350565b3480156105b857600080fd5b5061021660075481565b3480156105ce57600080fd5b506001546102a9906001600160a01b031681565b3480156105ee57600080fd5b5061021660105481565b33610601611c41565b6001600160a01b0316146106305760405162461bcd60e51b815260040161062790613559565b60405180910390fd5b6001546001600160a01b0382811691161480159061065c57506002546001600160a01b03828116911614155b801561067657506003546001600160a01b03828116911614155b6106d15760405162461bcd60e51b815260206004820152602660248201527f43616e6e6f7420626520746f6b656e2026206469766964656e6420746f6b656e60448201526516103830b4b960d11b6064820152608401610627565b60006001600160a01b03821661071757506040514790339082156108fc029083906000818181858888f19350505050158015610711573d6000803e3d6000fd5b506107a9565b6040516370a0823160e01b81526001600160a01b038316906370a0823190610743903090600401613324565b60206040518083038186803b15801561075b57600080fd5b505afa15801561076f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107939190613280565b90506107a96001600160a01b03831633836123ed565b7f74f5dcd55c394cb1c6d3b9da22c2464bcc46c38cc3865bd629ed75823249b40b82826040516107da929190613402565b60405180910390a15050565b336107ef611c41565b6001600160a01b0316146108155760405162461bcd60e51b815260040161062790613559565b6003546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610846903090600401613324565b60206040518083038186803b15801561085e57600080fd5b505afa158015610872573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108969190613280565b90506000821180156108a85750808211155b6108c45760405162461bcd60e51b815260040161062790613508565b620151806004546108d59190613699565b6009546108e290426136b8565b11156108f257426009556000600b555b6000612710600360009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561094557600080fd5b505afa158015610959573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097d9190613280565b60065461098a9190613699565b6109949190613679565b90508083600b546109a59190613661565b1115610a0a5760405162461bcd60e51b815260206004820152602e60248201527f657863656564206d6178696d756d204c50207769746864726177616c206c696d60448201526d697420666f72203330206461797360901b6064820152608401610627565b600354610a21906001600160a01b031633856123ed565b6040518381527f73ce532f480864bd2fccd1bcdbb4c8151f02cd9450c4f3e5b834ef74503abdb2906020015b60405180910390a1505050565b33610a63611c41565b6001600160a01b031614610a895760405162461bcd60e51b815260040161062790613559565b6001600160a01b03821615801590610aa957506001600160a01b03811615155b610ac55760405162461bcd60e51b81526004016106279061358e565b60405163523205c160e11b81526001600160a01b0383169063a4640b8290610af1908490600401613324565b600060405180830381600087803b158015610b0b57600080fd5b505af1158015610b1f573d6000803e3d6000fd5b505050507f7f78141a3bd83bf938eb2a367b5b7e1a1056d8128b3f1809535eed46891c903382826040516107da929190613338565b33610b5d611c41565b6001600160a01b031614610b835760405162461bcd60e51b815260040161062790613559565b600754479061271090610b969083613699565b610ba09190613679565b6002549091506001600160a01b0316610c25578015610c21576040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610bef573d6000803e3d6000fd5b507f121c5042302bae5fc561fbc64368f297ca60a880878e1e3a7f7e9380377260bf82826040516107da929190613402565b5050565b8015610ce4576000610c9282600e805480602002602001604051908101604052809291908181526020018280548015610c8757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610c69575b505050505030612443565b600254604080516001600160a01b0390921682526020820185905281018290529091507f3a9a9f34f5831e9c8ecb66ab3aa308b2ff31eaca434615f6c9cadc656a9af71c9060600160405180910390a1505b6002546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610d15903090600401613324565b60206040518083038186803b158015610d2d57600080fd5b505afa158015610d41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d659190613280565b90508015610e235760025460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90610d9f9086908590600401613402565b602060405180830381600087803b158015610db957600080fd5b505af1158015610dcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df1919061318d565b507f121c5042302bae5fc561fbc64368f297ca60a880878e1e3a7f7e9380377260bf8382604051610a4d929190613402565b505050565b600f8181548110610e3857600080fd5b6000918252602090912001546001600160a01b0316905081565b33610e5b611c41565b6001600160a01b031614610e815760405162461bcd60e51b815260040161062790613559565b6001546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610eb2903090600401613324565b60206040518083038186803b158015610eca57600080fd5b505afa158015610ede573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f029190613280565b9050600082118015610f145750808211155b610f305760405162461bcd60e51b815260040161062790613508565b62015180600454610f419190613699565b600954610f4e90426136b8565b1115610f5e57426009556000600a555b6000612710600160009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610fb157600080fd5b505afa158015610fc5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe99190613280565b600554610ff69190613699565b6110009190613679565b90508083600a546110119190613661565b11156110735760405162461bcd60e51b815260206004820152602b60248201527f657863656564206d6178696d756d207769746864726177616c206c696d69742060448201526a666f72203330206461797360a81b6064820152608401610627565b60015461108a906001600160a01b031633856123ed565b6040518381527f430648de173157e069201c943adb2d4e340e7cf5b27b1b09c9cb852f03d63b5690602001610a4d565b336110c3611c41565b6001600160a01b0316146110e95760405162461bcd60e51b815260040161062790613559565b6001600160a01b03811661110f5760405162461bcd60e51b815260040161062790613530565b6007544790612710906111229083613699565b61112c9190613679565b905080611137575050565b6040805160028082526060820183526000926020830190803683375050600c54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561119c57600080fd5b505afa1580156111b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d49190613005565b816000815181106111f557634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b03168152505073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb488160018151811061124b57634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152600c5460009116637ff36ab58483858861127d42610258613661565b6040518663ffffffff1660e01b815260040161129c9493929190613474565b6000604051808303818588803b1580156112b557600080fd5b505af11580156112c9573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526112f291908101906130fa565b90507f8b20b26dcda038ac2feab95f28f3dd32b371cce650645b63e301421e62386ea084826040516113259291906133b9565b60405180910390a15050505b50565b3361133d611c41565b6001600160a01b0316146113635760405162461bcd60e51b815260040161062790613559565b600054600160a01b900460ff16156113b35760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606401610627565b6001600160a01b0384166113d95760405162461bcd60e51b815260040161062790613530565b6001600160a01b0386166114275760405162461bcd60e51b8152602060048201526015602482015274696e76616c696420746f6b656e206164647265737360581b6044820152606401610627565b6000805460ff60a01b1916600160a01b179055600180546001600160a01b038089166001600160a01b0319928316179092556002805488841692169190911790556040805163c45a015560e01b815290519186169163c45a015591600480820192602092909190829003018186803b1580156114a257600080fd5b505afa1580156114b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114da9190613005565b6001600160a01b031663e6a439058460008151811061150957634e487b7160e01b600052603260045260246000fd5b60209081029190910101516001546040516001600160e01b031960e085901b16815261154292916001600160a01b031690600401613338565b60206040518083038186803b15801561155a57600080fd5b505afa15801561156e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115929190613005565b600380546001600160a01b03199081166001600160a01b0393841617909155600c805490911691861691909117905582516115d490600d906020860190612ef7565b5081516115e890600e906020850190612ef7565b5080516115fc90600f906020840190612ef7565b507f4ae045405af58409ab59a9b3af6c2424441a8d0cc7f0d58d675d19073dec75e386868686868660405161163696959493929190613352565b60405180910390a1505050505050565b3361164f611c41565b6001600160a01b0316146116755760405162461bcd60e51b815260040161062790613559565b61271081106116965760405162461bcd60e51b8152600401610627906134dc565b60088190556040518181527f71e39bccc2e27c18ea159b9a4fbc08961b9d9583ea143ae3e5021cf6aefb613c906020015b60405180910390a150565b336116db611c41565b6001600160a01b0316146117015760405162461bcd60e51b815260040161062790613559565b6002546001600160a01b031661171357565b6002546040516370a0823160e01b81526000916001600160a01b0316906370a0823190611744903090600401613324565b60206040518083038186803b15801561175c57600080fd5b505afa158015611770573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117949190613280565b9050801561133157600061180382600f8054806020026020016040519081016040528092919081815260200182805480156117f857602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116117da575b5050505050306126ec565b60408051848152602081018390529192507fb578101e5d792c57de69a936b880873b1c2e9f776134e5a89f463decc7963e1c91016107da565b565b33611847611c41565b6001600160a01b03161461186d5760405162461bcd60e51b815260040161062790613559565b612710811061188e5760405162461bcd60e51b8152600401610627906134dc565b60058190556040518181527f0969f79b044617688492c7c9b226129947037ca88c450002a7561ed78aa549ac906020016116c7565b336118cc611c41565b6001600160a01b0316146118f25760405162461bcd60e51b815260040161062790613559565b6001600160a01b0385166119185760405162461bcd60e51b815260040161062790613530565b6126de84111561195f5760405162461bcd60e51b81526020600482015260126024820152710bee6d8d2e0e0c2ceca40e8dede40d0d2ced60731b6044820152606401610627565b600c80546001600160a01b0319166001600160a01b0387161790556010849055825161199290600d906020860190612ef7565b5081516119a690600e906020850190612ef7565b5080516119ba90600f906020840190612ef7565b507fac823b586c853c1953e323c1189297cec5b2cb4b1316ac35ccf979e1969dbc0f85858585856040516119f295949392919061341b565b60405180910390a15050505050565b33611a0a611c41565b6001600160a01b031614611a305760405162461bcd60e51b815260040161062790613559565b6127108110611a515760405162461bcd60e51b8152600401610627906134dc565b60078190556040518181527fcc694eb069971c6c91f6c905b0f66a7a6322a90a42f3904b7508e7b9336a7dfe906020016116c7565b33611a8f611c41565b6001600160a01b031614611ab55760405162461bcd60e51b815260040161062790613559565b61183c6000612986565b600d8181548110610e3857600080fd5b33611ad8611c41565b6001600160a01b031614611afe5760405162461bcd60e51b815260040161062790613559565b6001600160a01b03821615801590611b1e57506001600160a01b03811615155b611b3a5760405162461bcd60e51b81526004016106279061358e565b6000826001600160a01b031663877887826040518163ffffffff1660e01b815260040160206040518083038186803b158015611b7557600080fd5b505afa158015611b89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bad9190613280565b604051631036c32960e31b81529091506001600160a01b038416906381b6194890611bde9085908590600401613402565b600060405180830381600087803b158015611bf857600080fd5b505af1158015611c0c573d6000803e3d6000fd5b505050507f7f78141a3bd83bf938eb2a367b5b7e1a1056d8128b3f1809535eed46891c90338383604051610a4d929190613338565b6000546001600160a01b031690565b33611c59611c41565b6001600160a01b031614611c7f5760405162461bcd60e51b815260040161062790613559565b6001600160a01b038116611ca55760405162461bcd60e51b815260040161062790613530565b60405147906001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611cdd573d6000803e3d6000fd5b507fea0c40665f6f46154fd7f8cb0bab49455cd181005581a97e76d29a474de8bfb282826040516107da929190613402565b33611d18611c41565b6001600160a01b031614611d3e5760405162461bcd60e51b815260040161062790613559565b600754479061271090611d519083613699565b611d5b9190613679565b90508015611331576000611dc882600d805480602002602001604051908101604052809291908181526020018280548015610c87576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610c6957505050505030612443565b60408051848152602081018390529192507f5af76d43c73e649d671103b29a6b93de2a53abb35bf2600ac3d04b13d413072d91016107da565b600e8181548110610e3857600080fd5b33611e1a611c41565b6001600160a01b031614611e405760405162461bcd60e51b815260040161062790613559565b600a811015611e805760405162461bcd60e51b815260206004820152600c60248201526b1cdb585b1b081c195c9a5bd960a21b6044820152606401610627565b60048190556040518181527f989f99d0a575dfaf67701aef35b8654442a4705a4bce243d8f81e1bb2bc4a63f906020016116c7565b33611ebe611c41565b6001600160a01b031614611ee45760405162461bcd60e51b815260040161062790613559565b6001546040516370a0823160e01b81526000916001600160a01b0316906370a0823190611f15903090600401613324565b60206040518083038186803b158015611f2d57600080fd5b505afa158015611f41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f659190613280565b90508015611ff35760015460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90611f9f9033908590600401613402565b602060405180830381600087803b158015611fb957600080fd5b505af1158015611fcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ff1919061318d565b505b6003546040516370a0823160e01b81526001600160a01b03909116906370a0823190612023903090600401613324565b60206040518083038186803b15801561203b57600080fd5b505afa15801561204f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120739190613280565b905080156121015760035460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb906120ad9033908590600401613402565b602060405180830381600087803b1580156120c757600080fd5b505af11580156120db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ff919061318d565b505b47801561213757604051339082156108fc029083906000818181858888f19350505050158015612135573d6000803e3d6000fd5b505b6040517fcd310f174a338d5afb2b17ebca2bda872a317a1e5ec53f6277803b93e8644eb990600090a15050565b3361216d611c41565b6001600160a01b0316146121935760405162461bcd60e51b815260040161062790613559565b6008544790600290612710906121a99084613699565b6121b39190613679565b6121bd9190613679565b9050801561133157600061222a82600d805480602002602001604051908101604052809291908181526020018280548015610c87576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610c6957505050505030612443565b60408051848152602081018390529192507f5af76d43c73e649d671103b29a6b93de2a53abb35bf2600ac3d04b13d413072d910160405180910390a160015460009081908190612285906001600160a01b03168686306129d6565b604080518381526020810185905290810182905292955090935091507fd7f28048575eead8851d024ead087913957dfb4fd1a02b4d1573f5352a5a2be3906060016119f2565b336122d4611c41565b6001600160a01b0316146122fa5760405162461bcd60e51b815260040161062790613559565b612710811061231b5760405162461bcd60e51b8152600401610627906134dc565b60068190556040518181527f0eeb4417a0dd5e563056eaf6d3024509bedf001cfac9394bb02f37e3414fa34b906020016116c7565b33612359611c41565b6001600160a01b03161461237f5760405162461bcd60e51b815260040161062790613559565b6001600160a01b0381166123e45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610627565b61133181612986565b610e238363a9059cbb60e01b848460405160240161240c929190613402565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612ae9565b600c5460405163d06ca61f60e01b815260009182916001600160a01b039091169063d06ca61f9061247a90889088906004016135b7565b60006040518083038186803b15801561249257600080fd5b505afa1580156124a6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526124ce91908101906130fa565b9050600081600183516124e191906136b8565b815181106124ff57634e487b7160e01b600052603260045260246000fd5b602002602001015190506000856001875161251a91906136b8565b8151811061253857634e487b7160e01b600052603260045260246000fd5b602002602001015190506000816001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016125709190613324565b60206040518083038186803b15801561258857600080fd5b505afa15801561259c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125c09190613280565b600c546010549192506001600160a01b03169063b6f9de95908a90612710906125e99088613699565b6125f39190613679565b8a8a61260142610258613661565b6040518663ffffffff1660e01b81526004016126209493929190613474565b6000604051808303818588803b15801561263957600080fd5b505af115801561264d573d6000803e3d6000fd5b50506040516370a0823160e01b8152600093506001600160a01b03861692506370a082319150612681903090600401613324565b60206040518083038186803b15801561269957600080fd5b505afa1580156126ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126d19190613280565b90506126dd82826136b8565b955050505050505b9392505050565b600c5460405163d06ca61f60e01b815260009182916001600160a01b039091169063d06ca61f9061272390889088906004016135b7565b60006040518083038186803b15801561273b57600080fd5b505afa15801561274f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261277791908101906130fa565b90506000816001835161278a91906136b8565b815181106127a857634e487b7160e01b600052603260045260246000fd5b6020026020010151905061280d600c60009054906101000a90046001600160a01b031687876000815181106127ed57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b0316612bbb9092919063ffffffff16565b6000856001875161281e91906136b8565b8151811061283c57634e487b7160e01b600052603260045260246000fd5b602002602001015190506000816001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016128749190613324565b60206040518083038186803b15801561288c57600080fd5b505afa1580156128a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128c49190613280565b600c546010549192506001600160a01b031690635c11d795908a90612710906128ed9088613699565b6128f79190613679565b8a8a61290542610258613661565b6040518663ffffffff1660e01b81526004016129259594939291906135d0565b600060405180830381600087803b15801561293f57600080fd5b505af1158015612953573d6000803e3d6000fd5b50506040516370a0823160e01b8152600092506001600160a01b03851691506370a0823190612681903090600401613324565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600c54600090819081906129f7906001600160a01b03898116911687612ccd565b600c546001600160a01b031663f305d7198789886000808a612a1b42610258613661565b60405160e089901b6001600160e01b03191681526001600160a01b039687166004820152602481019590955260448501939093526064840191909152909216608482015260a481019190915260c4016060604051808303818588803b158015612a8357600080fd5b505af1158015612a97573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612abc9190613298565b600c549295509093509150612adf906001600160a01b0389811691166000612bbb565b9450945094915050565b6000612b3e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612d7f9092919063ffffffff16565b805190915015610e235780806020019051810190612b5c919061318d565b610e235760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610627565b801580612c435750604051636eb1769f60e11b81526001600160a01b0384169063dd62ed3e90612bf19030908690600401613338565b60206040518083038186803b158015612c0957600080fd5b505afa158015612c1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c419190613280565b155b612cae5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b6064820152608401610627565b610e238363095ea7b360e01b848460405160240161240c929190613402565b600081846001600160a01b031663dd62ed3e30866040518363ffffffff1660e01b8152600401612cfe929190613338565b60206040518083038186803b158015612d1657600080fd5b505afa158015612d2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d4e9190613280565b612d589190613661565b9050612d798463095ea7b360e01b858460405160240161240c929190613402565b50505050565b6060612d8e8484600085612d96565b949350505050565b606082471015612df75760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610627565b843b612e455760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610627565b600080866001600160a01b03168587604051612e619190613308565b60006040518083038185875af1925050503d8060008114612e9e576040519150601f19603f3d011682016040523d82523d6000602084013e612ea3565b606091505b5091509150612eb3828286612ebe565b979650505050505050565b60608315612ecd5750816126e5565b825115612edd5782518084602001fd5b8160405162461bcd60e51b815260040161062791906134a9565b828054828255906000526020600020908101928215612f4c579160200282015b82811115612f4c57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190612f17565b50612f58929150612f5c565b5090565b5b80821115612f585760008155600101612f5d565b600082601f830112612f81578081fd5b81356020612f96612f918361363d565b61360c565b80838252828201915082860187848660051b8901011115612fb5578586fd5b855b85811015612fdc578135612fca81613727565b84529284019290840190600101612fb7565b5090979650505050505050565b600060208284031215612ffa578081fd5b81356126e581613727565b600060208284031215613016578081fd5b81516126e581613727565b60008060408385031215613033578081fd5b823561303e81613727565b9150602083013561304e81613727565b809150509250929050565b600080600080600060a08688031215613070578081fd5b853561307b81613727565b945060208601359350604086013567ffffffffffffffff8082111561309e578283fd5b6130aa89838a01612f71565b945060608801359150808211156130bf578283fd5b6130cb89838a01612f71565b935060808801359150808211156130e0578283fd5b506130ed88828901612f71565b9150509295509295909350565b6000602080838503121561310c578182fd5b825167ffffffffffffffff811115613122578283fd5b8301601f81018513613132578283fd5b8051613140612f918261363d565b80828252848201915084840188868560051b870101111561315f578687fd5b8694505b83851015613181578051835260019490940193918501918501613163565b50979650505050505050565b60006020828403121561319e578081fd5b815180151581146126e5578182fd5b60008060008060008060c087890312156131c5578081fd5b86356131d081613727565b955060208701356131e081613727565b945060408701356131f081613727565b9350606087013567ffffffffffffffff8082111561320c578283fd5b6132188a838b01612f71565b9450608089013591508082111561322d578283fd5b6132398a838b01612f71565b935060a089013591508082111561324e578283fd5b5061325b89828a01612f71565b9150509295509295509295565b600060208284031215613279578081fd5b5035919050565b600060208284031215613291578081fd5b5051919050565b6000806000606084860312156132ac578283fd5b8351925060208401519150604084015190509250925092565b6000815180845260208085019450808401835b838110156132fd5781516001600160a01b0316875295820195908201906001016132d8565b509495945050505050565b6000825161331a8184602087016136cf565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03878116825286811660208301528516604082015260c060608201819052600090613386908301866132c5565b828103608084015261339881866132c5565b905082810360a08401526133ac81856132c5565b9998505050505050505050565b6001600160a01b038316815260406020808301829052835191830182905260009184820191906060850190845b81811015612fdc578451835293830193918301916001016133e6565b6001600160a01b03929092168252602082015260400190565b60018060a01b038616815284602082015260a06040820152600061344260a08301866132c5565b828103606084015261345481866132c5565b9050828103608084015261346881856132c5565b98975050505050505050565b84815260806020820152600061348d60808301866132c5565b6001600160a01b03949094166040830152506060015292915050565b60208152600082518060208401526134c88160408501602087016136cf565b601f01601f19169190910160400192915050565b602080825260129082015271496e76616c69642070657263656e7461676560701b604082015260600190565b6020808252600e908201526d125b9d985b1a5908105b5bdd5b9d60921b604082015260600190565b6020808252600f908201526e696e76616c6964206164647265737360881b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252600f908201526e496e76616c6964204164647265737360881b604082015260600190565b828152604060208201526000612d8e60408301846132c5565b85815284602082015260a0604082015260006135ef60a08301866132c5565b6001600160a01b0394909416606083015250608001529392505050565b604051601f8201601f1916810167ffffffffffffffff8111828210171561363557613635613711565b604052919050565b600067ffffffffffffffff82111561365757613657613711565b5060051b60200190565b60008219821115613674576136746136fb565b500190565b60008261369457634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156136b3576136b36136fb565b500290565b6000828210156136ca576136ca6136fb565b500390565b60005b838110156136ea5781810151838201526020016136d2565b83811115612d795750506000910152565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461133157600080fdfea26469706673582212205eff276b0092f015808108883d79c7617b12708782d6bb7b112bc626590c1a0064736f6c63430008040033
Deployed Bytecode
0x6080604052600436106101d25760003560e01c8063887a7dc9116100f8578063db26eace11610090578063db26eace1461050c578063db2e21bc1461052c578063e8078d9414610541578063e8669da614610556578063ef78d4fd14610576578063f2fde38b1461058c578063f76024c4146105ac578063fc0c546a146105c2578063ffbd3b1f146105e257600080fd5b8063887a7dc9146104165780638a317525146104365780638d583550146104565780638da5cb5b1461046c57806392f735eb14610481578063a8aa1b31146104a1578063acdf4f18146104c1578063b67b7ec7146104d6578063b74cd242146104f657600080fd5b80633c4666cf1161016b5780633c4666cf146103165780633ca68190146103365780634d2e6d2a146103565780635a0768ce1461036b578063630f6f8b1461038b578063693a090b146103ab5780636e10f476146103cb578063715018a6146103eb5780637ddfe78d1461040057600080fd5b8062ae3bf8146101de578063045af258146102005780630a861f2a146102295780630daa6c0d146102495780630e5c011e14610269578063107ee893146102895780631582358e146102b65780632e1a7d4d146102d6578063365247fc146102f657600080fd5b366101d957005b600080fd5b3480156101ea57600080fd5b506101fe6101f9366004612fe9565b6105f8565b005b34801561020c57600080fd5b5061021660085481565b6040519081526020015b60405180910390f35b34801561023557600080fd5b506101fe610244366004613268565b6107e6565b34801561025557600080fd5b506101fe610264366004613021565b610a5a565b34801561027557600080fd5b506101fe610284366004612fe9565b610b54565b34801561029557600080fd5b506102a96102a4366004613268565b610e28565b6040516102209190613324565b3480156102c257600080fd5b506002546102a9906001600160a01b031681565b3480156102e257600080fd5b506101fe6102f1366004613268565b610e52565b34801561030257600080fd5b506101fe610311366004612fe9565b6110ba565b34801561032257600080fd5b506101fe6103313660046131ad565b611334565b34801561034257600080fd5b506101fe610351366004613268565b611646565b34801561036257600080fd5b506101fe6116d2565b34801561037757600080fd5b506101fe610386366004613268565b61183e565b34801561039757600080fd5b506101fe6103a6366004613059565b6118c3565b3480156103b757600080fd5b50600c546102a9906001600160a01b031681565b3480156103d757600080fd5b506101fe6103e6366004613268565b611a01565b3480156103f757600080fd5b506101fe611a86565b34801561040c57600080fd5b5061021660055481565b34801561042257600080fd5b506102a9610431366004613268565b611abf565b34801561044257600080fd5b506101fe610451366004613021565b611acf565b34801561046257600080fd5b5061021660065481565b34801561047857600080fd5b506102a9611c41565b34801561048d57600080fd5b506101fe61049c366004612fe9565b611c50565b3480156104ad57600080fd5b506003546102a9906001600160a01b031681565b3480156104cd57600080fd5b506101fe611d0f565b3480156104e257600080fd5b506102a96104f1366004613268565b611e01565b34801561050257600080fd5b506102166126de81565b34801561051857600080fd5b506101fe610527366004613268565b611e11565b34801561053857600080fd5b506101fe611eb5565b34801561054d57600080fd5b506101fe612164565b34801561056257600080fd5b506101fe610571366004613268565b6122cb565b34801561058257600080fd5b5061021660045481565b34801561059857600080fd5b506101fe6105a7366004612fe9565b612350565b3480156105b857600080fd5b5061021660075481565b3480156105ce57600080fd5b506001546102a9906001600160a01b031681565b3480156105ee57600080fd5b5061021660105481565b33610601611c41565b6001600160a01b0316146106305760405162461bcd60e51b815260040161062790613559565b60405180910390fd5b6001546001600160a01b0382811691161480159061065c57506002546001600160a01b03828116911614155b801561067657506003546001600160a01b03828116911614155b6106d15760405162461bcd60e51b815260206004820152602660248201527f43616e6e6f7420626520746f6b656e2026206469766964656e6420746f6b656e60448201526516103830b4b960d11b6064820152608401610627565b60006001600160a01b03821661071757506040514790339082156108fc029083906000818181858888f19350505050158015610711573d6000803e3d6000fd5b506107a9565b6040516370a0823160e01b81526001600160a01b038316906370a0823190610743903090600401613324565b60206040518083038186803b15801561075b57600080fd5b505afa15801561076f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107939190613280565b90506107a96001600160a01b03831633836123ed565b7f74f5dcd55c394cb1c6d3b9da22c2464bcc46c38cc3865bd629ed75823249b40b82826040516107da929190613402565b60405180910390a15050565b336107ef611c41565b6001600160a01b0316146108155760405162461bcd60e51b815260040161062790613559565b6003546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610846903090600401613324565b60206040518083038186803b15801561085e57600080fd5b505afa158015610872573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108969190613280565b90506000821180156108a85750808211155b6108c45760405162461bcd60e51b815260040161062790613508565b620151806004546108d59190613699565b6009546108e290426136b8565b11156108f257426009556000600b555b6000612710600360009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561094557600080fd5b505afa158015610959573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097d9190613280565b60065461098a9190613699565b6109949190613679565b90508083600b546109a59190613661565b1115610a0a5760405162461bcd60e51b815260206004820152602e60248201527f657863656564206d6178696d756d204c50207769746864726177616c206c696d60448201526d697420666f72203330206461797360901b6064820152608401610627565b600354610a21906001600160a01b031633856123ed565b6040518381527f73ce532f480864bd2fccd1bcdbb4c8151f02cd9450c4f3e5b834ef74503abdb2906020015b60405180910390a1505050565b33610a63611c41565b6001600160a01b031614610a895760405162461bcd60e51b815260040161062790613559565b6001600160a01b03821615801590610aa957506001600160a01b03811615155b610ac55760405162461bcd60e51b81526004016106279061358e565b60405163523205c160e11b81526001600160a01b0383169063a4640b8290610af1908490600401613324565b600060405180830381600087803b158015610b0b57600080fd5b505af1158015610b1f573d6000803e3d6000fd5b505050507f7f78141a3bd83bf938eb2a367b5b7e1a1056d8128b3f1809535eed46891c903382826040516107da929190613338565b33610b5d611c41565b6001600160a01b031614610b835760405162461bcd60e51b815260040161062790613559565b600754479061271090610b969083613699565b610ba09190613679565b6002549091506001600160a01b0316610c25578015610c21576040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610bef573d6000803e3d6000fd5b507f121c5042302bae5fc561fbc64368f297ca60a880878e1e3a7f7e9380377260bf82826040516107da929190613402565b5050565b8015610ce4576000610c9282600e805480602002602001604051908101604052809291908181526020018280548015610c8757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610c69575b505050505030612443565b600254604080516001600160a01b0390921682526020820185905281018290529091507f3a9a9f34f5831e9c8ecb66ab3aa308b2ff31eaca434615f6c9cadc656a9af71c9060600160405180910390a1505b6002546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610d15903090600401613324565b60206040518083038186803b158015610d2d57600080fd5b505afa158015610d41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d659190613280565b90508015610e235760025460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90610d9f9086908590600401613402565b602060405180830381600087803b158015610db957600080fd5b505af1158015610dcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df1919061318d565b507f121c5042302bae5fc561fbc64368f297ca60a880878e1e3a7f7e9380377260bf8382604051610a4d929190613402565b505050565b600f8181548110610e3857600080fd5b6000918252602090912001546001600160a01b0316905081565b33610e5b611c41565b6001600160a01b031614610e815760405162461bcd60e51b815260040161062790613559565b6001546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610eb2903090600401613324565b60206040518083038186803b158015610eca57600080fd5b505afa158015610ede573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f029190613280565b9050600082118015610f145750808211155b610f305760405162461bcd60e51b815260040161062790613508565b62015180600454610f419190613699565b600954610f4e90426136b8565b1115610f5e57426009556000600a555b6000612710600160009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610fb157600080fd5b505afa158015610fc5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe99190613280565b600554610ff69190613699565b6110009190613679565b90508083600a546110119190613661565b11156110735760405162461bcd60e51b815260206004820152602b60248201527f657863656564206d6178696d756d207769746864726177616c206c696d69742060448201526a666f72203330206461797360a81b6064820152608401610627565b60015461108a906001600160a01b031633856123ed565b6040518381527f430648de173157e069201c943adb2d4e340e7cf5b27b1b09c9cb852f03d63b5690602001610a4d565b336110c3611c41565b6001600160a01b0316146110e95760405162461bcd60e51b815260040161062790613559565b6001600160a01b03811661110f5760405162461bcd60e51b815260040161062790613530565b6007544790612710906111229083613699565b61112c9190613679565b905080611137575050565b6040805160028082526060820183526000926020830190803683375050600c54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561119c57600080fd5b505afa1580156111b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d49190613005565b816000815181106111f557634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b03168152505073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb488160018151811061124b57634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152600c5460009116637ff36ab58483858861127d42610258613661565b6040518663ffffffff1660e01b815260040161129c9493929190613474565b6000604051808303818588803b1580156112b557600080fd5b505af11580156112c9573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526112f291908101906130fa565b90507f8b20b26dcda038ac2feab95f28f3dd32b371cce650645b63e301421e62386ea084826040516113259291906133b9565b60405180910390a15050505b50565b3361133d611c41565b6001600160a01b0316146113635760405162461bcd60e51b815260040161062790613559565b600054600160a01b900460ff16156113b35760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606401610627565b6001600160a01b0384166113d95760405162461bcd60e51b815260040161062790613530565b6001600160a01b0386166114275760405162461bcd60e51b8152602060048201526015602482015274696e76616c696420746f6b656e206164647265737360581b6044820152606401610627565b6000805460ff60a01b1916600160a01b179055600180546001600160a01b038089166001600160a01b0319928316179092556002805488841692169190911790556040805163c45a015560e01b815290519186169163c45a015591600480820192602092909190829003018186803b1580156114a257600080fd5b505afa1580156114b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114da9190613005565b6001600160a01b031663e6a439058460008151811061150957634e487b7160e01b600052603260045260246000fd5b60209081029190910101516001546040516001600160e01b031960e085901b16815261154292916001600160a01b031690600401613338565b60206040518083038186803b15801561155a57600080fd5b505afa15801561156e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115929190613005565b600380546001600160a01b03199081166001600160a01b0393841617909155600c805490911691861691909117905582516115d490600d906020860190612ef7565b5081516115e890600e906020850190612ef7565b5080516115fc90600f906020840190612ef7565b507f4ae045405af58409ab59a9b3af6c2424441a8d0cc7f0d58d675d19073dec75e386868686868660405161163696959493929190613352565b60405180910390a1505050505050565b3361164f611c41565b6001600160a01b0316146116755760405162461bcd60e51b815260040161062790613559565b61271081106116965760405162461bcd60e51b8152600401610627906134dc565b60088190556040518181527f71e39bccc2e27c18ea159b9a4fbc08961b9d9583ea143ae3e5021cf6aefb613c906020015b60405180910390a150565b336116db611c41565b6001600160a01b0316146117015760405162461bcd60e51b815260040161062790613559565b6002546001600160a01b031661171357565b6002546040516370a0823160e01b81526000916001600160a01b0316906370a0823190611744903090600401613324565b60206040518083038186803b15801561175c57600080fd5b505afa158015611770573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117949190613280565b9050801561133157600061180382600f8054806020026020016040519081016040528092919081815260200182805480156117f857602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116117da575b5050505050306126ec565b60408051848152602081018390529192507fb578101e5d792c57de69a936b880873b1c2e9f776134e5a89f463decc7963e1c91016107da565b565b33611847611c41565b6001600160a01b03161461186d5760405162461bcd60e51b815260040161062790613559565b612710811061188e5760405162461bcd60e51b8152600401610627906134dc565b60058190556040518181527f0969f79b044617688492c7c9b226129947037ca88c450002a7561ed78aa549ac906020016116c7565b336118cc611c41565b6001600160a01b0316146118f25760405162461bcd60e51b815260040161062790613559565b6001600160a01b0385166119185760405162461bcd60e51b815260040161062790613530565b6126de84111561195f5760405162461bcd60e51b81526020600482015260126024820152710bee6d8d2e0e0c2ceca40e8dede40d0d2ced60731b6044820152606401610627565b600c80546001600160a01b0319166001600160a01b0387161790556010849055825161199290600d906020860190612ef7565b5081516119a690600e906020850190612ef7565b5080516119ba90600f906020840190612ef7565b507fac823b586c853c1953e323c1189297cec5b2cb4b1316ac35ccf979e1969dbc0f85858585856040516119f295949392919061341b565b60405180910390a15050505050565b33611a0a611c41565b6001600160a01b031614611a305760405162461bcd60e51b815260040161062790613559565b6127108110611a515760405162461bcd60e51b8152600401610627906134dc565b60078190556040518181527fcc694eb069971c6c91f6c905b0f66a7a6322a90a42f3904b7508e7b9336a7dfe906020016116c7565b33611a8f611c41565b6001600160a01b031614611ab55760405162461bcd60e51b815260040161062790613559565b61183c6000612986565b600d8181548110610e3857600080fd5b33611ad8611c41565b6001600160a01b031614611afe5760405162461bcd60e51b815260040161062790613559565b6001600160a01b03821615801590611b1e57506001600160a01b03811615155b611b3a5760405162461bcd60e51b81526004016106279061358e565b6000826001600160a01b031663877887826040518163ffffffff1660e01b815260040160206040518083038186803b158015611b7557600080fd5b505afa158015611b89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bad9190613280565b604051631036c32960e31b81529091506001600160a01b038416906381b6194890611bde9085908590600401613402565b600060405180830381600087803b158015611bf857600080fd5b505af1158015611c0c573d6000803e3d6000fd5b505050507f7f78141a3bd83bf938eb2a367b5b7e1a1056d8128b3f1809535eed46891c90338383604051610a4d929190613338565b6000546001600160a01b031690565b33611c59611c41565b6001600160a01b031614611c7f5760405162461bcd60e51b815260040161062790613559565b6001600160a01b038116611ca55760405162461bcd60e51b815260040161062790613530565b60405147906001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611cdd573d6000803e3d6000fd5b507fea0c40665f6f46154fd7f8cb0bab49455cd181005581a97e76d29a474de8bfb282826040516107da929190613402565b33611d18611c41565b6001600160a01b031614611d3e5760405162461bcd60e51b815260040161062790613559565b600754479061271090611d519083613699565b611d5b9190613679565b90508015611331576000611dc882600d805480602002602001604051908101604052809291908181526020018280548015610c87576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610c6957505050505030612443565b60408051848152602081018390529192507f5af76d43c73e649d671103b29a6b93de2a53abb35bf2600ac3d04b13d413072d91016107da565b600e8181548110610e3857600080fd5b33611e1a611c41565b6001600160a01b031614611e405760405162461bcd60e51b815260040161062790613559565b600a811015611e805760405162461bcd60e51b815260206004820152600c60248201526b1cdb585b1b081c195c9a5bd960a21b6044820152606401610627565b60048190556040518181527f989f99d0a575dfaf67701aef35b8654442a4705a4bce243d8f81e1bb2bc4a63f906020016116c7565b33611ebe611c41565b6001600160a01b031614611ee45760405162461bcd60e51b815260040161062790613559565b6001546040516370a0823160e01b81526000916001600160a01b0316906370a0823190611f15903090600401613324565b60206040518083038186803b158015611f2d57600080fd5b505afa158015611f41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f659190613280565b90508015611ff35760015460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90611f9f9033908590600401613402565b602060405180830381600087803b158015611fb957600080fd5b505af1158015611fcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ff1919061318d565b505b6003546040516370a0823160e01b81526001600160a01b03909116906370a0823190612023903090600401613324565b60206040518083038186803b15801561203b57600080fd5b505afa15801561204f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120739190613280565b905080156121015760035460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb906120ad9033908590600401613402565b602060405180830381600087803b1580156120c757600080fd5b505af11580156120db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ff919061318d565b505b47801561213757604051339082156108fc029083906000818181858888f19350505050158015612135573d6000803e3d6000fd5b505b6040517fcd310f174a338d5afb2b17ebca2bda872a317a1e5ec53f6277803b93e8644eb990600090a15050565b3361216d611c41565b6001600160a01b0316146121935760405162461bcd60e51b815260040161062790613559565b6008544790600290612710906121a99084613699565b6121b39190613679565b6121bd9190613679565b9050801561133157600061222a82600d805480602002602001604051908101604052809291908181526020018280548015610c87576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610c6957505050505030612443565b60408051848152602081018390529192507f5af76d43c73e649d671103b29a6b93de2a53abb35bf2600ac3d04b13d413072d910160405180910390a160015460009081908190612285906001600160a01b03168686306129d6565b604080518381526020810185905290810182905292955090935091507fd7f28048575eead8851d024ead087913957dfb4fd1a02b4d1573f5352a5a2be3906060016119f2565b336122d4611c41565b6001600160a01b0316146122fa5760405162461bcd60e51b815260040161062790613559565b612710811061231b5760405162461bcd60e51b8152600401610627906134dc565b60068190556040518181527f0eeb4417a0dd5e563056eaf6d3024509bedf001cfac9394bb02f37e3414fa34b906020016116c7565b33612359611c41565b6001600160a01b03161461237f5760405162461bcd60e51b815260040161062790613559565b6001600160a01b0381166123e45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610627565b61133181612986565b610e238363a9059cbb60e01b848460405160240161240c929190613402565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612ae9565b600c5460405163d06ca61f60e01b815260009182916001600160a01b039091169063d06ca61f9061247a90889088906004016135b7565b60006040518083038186803b15801561249257600080fd5b505afa1580156124a6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526124ce91908101906130fa565b9050600081600183516124e191906136b8565b815181106124ff57634e487b7160e01b600052603260045260246000fd5b602002602001015190506000856001875161251a91906136b8565b8151811061253857634e487b7160e01b600052603260045260246000fd5b602002602001015190506000816001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016125709190613324565b60206040518083038186803b15801561258857600080fd5b505afa15801561259c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125c09190613280565b600c546010549192506001600160a01b03169063b6f9de95908a90612710906125e99088613699565b6125f39190613679565b8a8a61260142610258613661565b6040518663ffffffff1660e01b81526004016126209493929190613474565b6000604051808303818588803b15801561263957600080fd5b505af115801561264d573d6000803e3d6000fd5b50506040516370a0823160e01b8152600093506001600160a01b03861692506370a082319150612681903090600401613324565b60206040518083038186803b15801561269957600080fd5b505afa1580156126ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126d19190613280565b90506126dd82826136b8565b955050505050505b9392505050565b600c5460405163d06ca61f60e01b815260009182916001600160a01b039091169063d06ca61f9061272390889088906004016135b7565b60006040518083038186803b15801561273b57600080fd5b505afa15801561274f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261277791908101906130fa565b90506000816001835161278a91906136b8565b815181106127a857634e487b7160e01b600052603260045260246000fd5b6020026020010151905061280d600c60009054906101000a90046001600160a01b031687876000815181106127ed57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b0316612bbb9092919063ffffffff16565b6000856001875161281e91906136b8565b8151811061283c57634e487b7160e01b600052603260045260246000fd5b602002602001015190506000816001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016128749190613324565b60206040518083038186803b15801561288c57600080fd5b505afa1580156128a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128c49190613280565b600c546010549192506001600160a01b031690635c11d795908a90612710906128ed9088613699565b6128f79190613679565b8a8a61290542610258613661565b6040518663ffffffff1660e01b81526004016129259594939291906135d0565b600060405180830381600087803b15801561293f57600080fd5b505af1158015612953573d6000803e3d6000fd5b50506040516370a0823160e01b8152600092506001600160a01b03851691506370a0823190612681903090600401613324565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600c54600090819081906129f7906001600160a01b03898116911687612ccd565b600c546001600160a01b031663f305d7198789886000808a612a1b42610258613661565b60405160e089901b6001600160e01b03191681526001600160a01b039687166004820152602481019590955260448501939093526064840191909152909216608482015260a481019190915260c4016060604051808303818588803b158015612a8357600080fd5b505af1158015612a97573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612abc9190613298565b600c549295509093509150612adf906001600160a01b0389811691166000612bbb565b9450945094915050565b6000612b3e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612d7f9092919063ffffffff16565b805190915015610e235780806020019051810190612b5c919061318d565b610e235760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610627565b801580612c435750604051636eb1769f60e11b81526001600160a01b0384169063dd62ed3e90612bf19030908690600401613338565b60206040518083038186803b158015612c0957600080fd5b505afa158015612c1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c419190613280565b155b612cae5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b6064820152608401610627565b610e238363095ea7b360e01b848460405160240161240c929190613402565b600081846001600160a01b031663dd62ed3e30866040518363ffffffff1660e01b8152600401612cfe929190613338565b60206040518083038186803b158015612d1657600080fd5b505afa158015612d2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d4e9190613280565b612d589190613661565b9050612d798463095ea7b360e01b858460405160240161240c929190613402565b50505050565b6060612d8e8484600085612d96565b949350505050565b606082471015612df75760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610627565b843b612e455760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610627565b600080866001600160a01b03168587604051612e619190613308565b60006040518083038185875af1925050503d8060008114612e9e576040519150601f19603f3d011682016040523d82523d6000602084013e612ea3565b606091505b5091509150612eb3828286612ebe565b979650505050505050565b60608315612ecd5750816126e5565b825115612edd5782518084602001fd5b8160405162461bcd60e51b815260040161062791906134a9565b828054828255906000526020600020908101928215612f4c579160200282015b82811115612f4c57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190612f17565b50612f58929150612f5c565b5090565b5b80821115612f585760008155600101612f5d565b600082601f830112612f81578081fd5b81356020612f96612f918361363d565b61360c565b80838252828201915082860187848660051b8901011115612fb5578586fd5b855b85811015612fdc578135612fca81613727565b84529284019290840190600101612fb7565b5090979650505050505050565b600060208284031215612ffa578081fd5b81356126e581613727565b600060208284031215613016578081fd5b81516126e581613727565b60008060408385031215613033578081fd5b823561303e81613727565b9150602083013561304e81613727565b809150509250929050565b600080600080600060a08688031215613070578081fd5b853561307b81613727565b945060208601359350604086013567ffffffffffffffff8082111561309e578283fd5b6130aa89838a01612f71565b945060608801359150808211156130bf578283fd5b6130cb89838a01612f71565b935060808801359150808211156130e0578283fd5b506130ed88828901612f71565b9150509295509295909350565b6000602080838503121561310c578182fd5b825167ffffffffffffffff811115613122578283fd5b8301601f81018513613132578283fd5b8051613140612f918261363d565b80828252848201915084840188868560051b870101111561315f578687fd5b8694505b83851015613181578051835260019490940193918501918501613163565b50979650505050505050565b60006020828403121561319e578081fd5b815180151581146126e5578182fd5b60008060008060008060c087890312156131c5578081fd5b86356131d081613727565b955060208701356131e081613727565b945060408701356131f081613727565b9350606087013567ffffffffffffffff8082111561320c578283fd5b6132188a838b01612f71565b9450608089013591508082111561322d578283fd5b6132398a838b01612f71565b935060a089013591508082111561324e578283fd5b5061325b89828a01612f71565b9150509295509295509295565b600060208284031215613279578081fd5b5035919050565b600060208284031215613291578081fd5b5051919050565b6000806000606084860312156132ac578283fd5b8351925060208401519150604084015190509250925092565b6000815180845260208085019450808401835b838110156132fd5781516001600160a01b0316875295820195908201906001016132d8565b509495945050505050565b6000825161331a8184602087016136cf565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03878116825286811660208301528516604082015260c060608201819052600090613386908301866132c5565b828103608084015261339881866132c5565b905082810360a08401526133ac81856132c5565b9998505050505050505050565b6001600160a01b038316815260406020808301829052835191830182905260009184820191906060850190845b81811015612fdc578451835293830193918301916001016133e6565b6001600160a01b03929092168252602082015260400190565b60018060a01b038616815284602082015260a06040820152600061344260a08301866132c5565b828103606084015261345481866132c5565b9050828103608084015261346881856132c5565b98975050505050505050565b84815260806020820152600061348d60808301866132c5565b6001600160a01b03949094166040830152506060015292915050565b60208152600082518060208401526134c88160408501602087016136cf565b601f01601f19169190910160400192915050565b602080825260129082015271496e76616c69642070657263656e7461676560701b604082015260600190565b6020808252600e908201526d125b9d985b1a5908105b5bdd5b9d60921b604082015260600190565b6020808252600f908201526e696e76616c6964206164647265737360881b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252600f908201526e496e76616c6964204164647265737360881b604082015260600190565b828152604060208201526000612d8e60408301846132c5565b85815284602082015260a0604082015260006135ef60a08301866132c5565b6001600160a01b0394909416606083015250608001529392505050565b604051601f8201601f1916810167ffffffffffffffff8111828210171561363557613635613711565b604052919050565b600067ffffffffffffffff82111561365757613657613711565b5060051b60200190565b60008219821115613674576136746136fb565b500190565b60008261369457634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156136b3576136b36136fb565b500290565b6000828210156136ca576136ca6136fb565b500390565b60005b838110156136ea5781810151838201526020016136d2565b83811115612d795750506000910152565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461133157600080fdfea26469706673582212205eff276b0092f015808108883d79c7617b12708782d6bb7b112bc626590c1a0064736f6c63430008040033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | Ether (ETH) | 100.00% | $3,281.13 | 0.1771 | $581.12 |
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.