More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 104 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Make Liquidity D... | 21727467 | 10 days ago | IN | 0 ETH | 0.00051554 | ||||
Make Liquidity | 21706212 | 13 days ago | IN | 0.001 ETH | 0.00094876 | ||||
Make Liquidity | 21706193 | 13 days ago | IN | 0.003 ETH | 0.00090015 | ||||
Make Liquidity | 21702865 | 13 days ago | IN | 0.000011 ETH | 0.0025506 | ||||
Make Liquidity | 21381806 | 58 days ago | IN | 0.001 ETH | 0.00752184 | ||||
Make Liquidity D... | 21357457 | 62 days ago | IN | 0 ETH | 0.00217249 | ||||
Make Liquidity D... | 21354655 | 62 days ago | IN | 0 ETH | 0.00261844 | ||||
Make Liquidity | 20983261 | 114 days ago | IN | 0.014 ETH | 0.00221358 | ||||
Make Liquidity D... | 20919017 | 123 days ago | IN | 0 ETH | 0.00307053 | ||||
Make Liquidity D... | 20860359 | 131 days ago | IN | 0 ETH | 0.00176127 | ||||
Make Liquidity D... | 20859581 | 131 days ago | IN | 0 ETH | 0.00168491 | ||||
Make Liquidity D... | 20859566 | 131 days ago | IN | 0 ETH | 0.00168184 | ||||
Make Liquidity D... | 20859551 | 131 days ago | IN | 0 ETH | 0.00171672 | ||||
Make Liquidity D... | 20859539 | 131 days ago | IN | 0 ETH | 0.00169679 | ||||
Make Liquidity D... | 20859524 | 131 days ago | IN | 0 ETH | 0.00206974 | ||||
Make Liquidity D... | 20834180 | 135 days ago | IN | 0 ETH | 0.0004303 | ||||
Make Liquidity D... | 20834176 | 135 days ago | IN | 0 ETH | 0.00348257 | ||||
Make Liquidity D... | 20782544 | 142 days ago | IN | 0 ETH | 0.00097244 | ||||
Make Liquidity D... | 20775666 | 143 days ago | IN | 0 ETH | 0.00115828 | ||||
Make Liquidity D... | 20760151 | 145 days ago | IN | 0 ETH | 0.0005562 | ||||
Make Liquidity | 20737479 | 148 days ago | IN | 0.007913 ETH | 0.00127971 | ||||
Make Liquidity D... | 20704970 | 153 days ago | IN | 0 ETH | 0.00022527 | ||||
Make Liquidity D... | 20704964 | 153 days ago | IN | 0 ETH | 0.00015333 | ||||
Make Liquidity D... | 20703878 | 153 days ago | IN | 0 ETH | 0.00010662 | ||||
Make Liquidity D... | 20703874 | 153 days ago | IN | 0 ETH | 0.00010662 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
21706212 | 13 days ago | 0.001 ETH | ||||
21706193 | 13 days ago | 0.003 ETH | ||||
21702865 | 13 days ago | 0.000011 ETH | ||||
21381806 | 58 days ago | 0.001 ETH | ||||
20983261 | 114 days ago | 0.014 ETH | ||||
20737479 | 148 days ago | 0.007913 ETH | ||||
20703847 | 153 days ago | 0.000764 ETH | ||||
20703837 | 153 days ago | 0.000293 ETH | ||||
20694207 | 154 days ago | 0.01 ETH | ||||
20693301 | 154 days ago | 0.005 ETH | ||||
20674342 | 157 days ago | 0.0005 ETH | ||||
20654209 | 160 days ago | 0.008 ETH | ||||
20650349 | 160 days ago | 0.04 ETH | ||||
20567988 | 172 days ago | 0.001 ETH | ||||
20500392 | 181 days ago | 0.01 ETH | ||||
20500341 | 181 days ago | 0.0001 ETH | ||||
20436635 | 190 days ago | 0.020534 ETH | ||||
20396208 | 196 days ago | 0.01532 ETH | ||||
20390960 | 197 days ago | 0.003 ETH | ||||
20347512 | 203 days ago | 0.0001 ETH | ||||
20304883 | 209 days ago | 0.020449 ETH | ||||
20300153 | 209 days ago | 0.004186 ETH | ||||
20285890 | 211 days ago | 0.02347 ETH | ||||
20271606 | 213 days ago | 0.009909 ETH | ||||
20271383 | 213 days ago | 0.010312 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
LiquidityMaker
Compiler Version
v0.8.25+commit.b61c2a91
Optimization Enabled:
Yes with 999999 runs
Other Settings:
cancun EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: -- BCOM -- pragma solidity =0.8.25; import "./IWETH.sol"; import "./ISwapsPair.sol"; import "./ISwapsRouter.sol"; import "./ISwapsFactory.sol"; import "./LiquidityHelper.sol"; contract LiquidityMaker is LiquidityHelper { address immutable WETH_ADDRESS; address immutable ROUTER_ADDRESS; IWETH public immutable WETH; ISwapsRouter public immutable ROUTER; ISwapsFactory public immutable FACTORY; event SwapResults( address tokenIn, address tokenOut, uint256 amountIn, uint256 amountOut ); event LiquidityAdded( uint256 tokenAmountA, uint256 tokenAmountB, uint256 tokenAmountLP, address indexed tokenA, address indexed tokenB, address indexed addedTo ); event CleanUp( uint256 tokenAmount, ISwapsERC20 indexed tokenAddress ); constructor( ISwapsRouter _router, ISwapsFactory _factory ) { ROUTER_ADDRESS = address( _router ); ROUTER = _router; FACTORY = _factory; WETH_ADDRESS = ROUTER.WETH(); WETH = IWETH( WETH_ADDRESS ); } /** * @dev * Optimal one-sided supply using ETH * 1. Swaps optimal amount from ETH to ERC20 * 2. Adds liquidity for ETH and Token pair */ function makeLiquidity( address _tokenAddress, uint256 _expectedTokenAmount, uint256 _minimumLiquidityEther, uint256 _minimumLiquidityToken ) external payable returns (uint256) { _wrapEther( msg.value ); return _makeLiquidity( WETH_ADDRESS, _tokenAddress, msg.value, _expectedTokenAmount, _minimumLiquidityEther, _minimumLiquidityToken, msg.sender ); } /** * @dev * Optimal one-sided supply using ERC20 * 1. Swaps optimal amount from ERC20-A to ERC20-B * 2. Adds liquidity for _tokenA and _tokenB pair */ function makeLiquidityDual( address _tokenA, address _tokenB, uint256 _initialAmountA, uint256 _expectedAmountB, uint256 _minimumLiquidityA, uint256 _minimumLiquidityB ) external { _safeTransferFrom( _tokenA, msg.sender, address(this), _initialAmountA ); _makeLiquidity( _tokenA, _tokenB, _initialAmountA, _expectedAmountB, _minimumLiquidityA, _minimumLiquidityB, msg.sender ); } function _makeLiquidity( address _tokenA, address _tokenB, uint256 _initialAmountA, uint256 _expectedAmountB, uint256 _minimumLiquidityA, uint256 _minimumLiquidityB, address _beneficiaryAddress ) internal returns (uint256) { ISwapsPair pair = _getPair( _tokenA, _tokenB ); ( uint256 reserve0, uint256 reserve1, ) = pair.getReserves(); uint256 swapAmount = pair.token0() == _tokenA ? getSwapAmount(reserve0, _initialAmountA) : getSwapAmount(reserve1, _initialAmountA); uint256[] memory swapResults = _swapTokens( _tokenA, _tokenB, swapAmount, _expectedAmountB ); emit SwapResults( _tokenA, _tokenB, swapResults[0], swapResults[1] ); _addLiquidity( _tokenA, _tokenB, swapResults[0], swapResults[1], _minimumLiquidityA, _minimumLiquidityB, _beneficiaryAddress ); return swapAmount; } /** * @dev * Uses swapExactTokensForTokens to split provided value * 1. Swaps optimal amount from _tokenIn to _tokenOut * return swap amounts as a result (input and ouput) */ function _swapTokens( address _tokenIn, address _tokenOut, uint256 _swapAmountIn, uint256 _expectedAmountOut ) private returns (uint256[] memory) { if (ISwapsERC20(_tokenIn).allowance(address(this), ROUTER_ADDRESS) == 0) { _forceApprove( IERC20(_tokenIn), ROUTER_ADDRESS, MAX_VALUE ); } return ROUTER.swapExactTokensForTokens( _swapAmountIn, _expectedAmountOut, _makePath( _tokenIn, _tokenOut ), address(this), block.timestamp ); } /** * @dev * Adds liquidity for _tokenA and _tokenB pair * can send LP tokens to _beneficiary address */ function _addLiquidity( address _tokenA, address _tokenB, uint256 _amountA, uint256 _amountB, uint256 _minTokenA, uint256 _minTokenB, address _beneficiary ) private { _forceApprove( IERC20(_tokenB), ROUTER_ADDRESS, _amountB ); ( uint256 tokenAmountA, uint256 tokenAmountB, uint256 tokenAmountLP ) = ROUTER.addLiquidity( _tokenA, _tokenB, _amountA, _amountB, _minTokenA, _minTokenB, _beneficiary, block.timestamp ); emit LiquidityAdded( tokenAmountA, tokenAmountB, tokenAmountLP, _tokenA, _tokenB, _beneficiary ); } /** * @dev * Read address of the pair * by calling FACTORY contract */ function _getPair( address _tokenA, address _tokenB ) private view returns (ISwapsPair) { return ISwapsPair( FACTORY.getPair( _tokenA, _tokenB ) ); } /** * @dev * Allows to wrap Ether * by calling WETH contract */ function _wrapEther( uint256 _amount ) private { WETH.deposit{ value: _amount }(); } /** * @dev * Allows to cleanup any tokens stuck * in the contract as leftover dust or * if accidentally sent to the contract */ function cleanUp( ISwapsERC20 _token ) external { uint256 balance = _token.balanceOf( address(this) ); _token.transfer( FACTORY.feeTo(), balance ); emit CleanUp( balance, _token ); } }
// SPDX-License-Identifier: -- BCOM -- pragma solidity =0.8.25; interface IWETH { function deposit() external payable; function transfer( address _to, uint256 _value ) external returns (bool); function withdraw( uint256 ) external; }
// SPDX-License-Identifier: -- BCOM -- pragma solidity =0.8.25; import "./ISwapsERC20.sol"; interface ISwapsPair is ISwapsERC20 { function MINIMUM_LIQUIDITY() external pure returns (uint256); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns ( uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast ); function price0CumulativeLast() external view returns (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint( address _to ) external returns (uint256 liquidity); function burn( address _to ) external returns ( uint256 amount0, uint256 amount1 ); function swap( uint256 _amount0Out, uint256 _amount1Out, address _to, bytes calldata _data ) external; function skim() external; function initialize( address, address ) external; }
// SPDX-License-Identifier: -- BCOM -- pragma solidity =0.8.25; interface ISwapsRouter { function WETH() external 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 swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns ( uint[] memory amounts ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB ); function getReserves( address factory, address tokenA, address tokenB ) external view returns ( uint112 reserveA, uint112 reserveB, uint32 blockTimestampLast ); function FACTORY() external view returns (address); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function pairFor( address factory, address tokenA, address tokenB ) external pure returns (address); }
// SPDX-License-Identifier: -- BCOM -- pragma solidity =0.8.25; interface ISwapsFactory { function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair( address _tokenA, address _tokenB ) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair( address _tokenA, address _tokenB ) external returns (address pair); function setFeeTo( address ) external; function setFeeToSetter( address ) external; function cloneTarget() external view returns (address target); }
// SPDX-License-Identifier: -- BCOM -- pragma solidity =0.8.25; import "./IERC20.sol"; import "./Errors.sol"; contract LiquidityHelper { uint256 constant MAX_VALUE = type(uint256).max; uint256 constant ZERO_VALUE = 0; /** * @dev * Prepares path for the swap */ function _makePath( address _tokenIn, address _tokenOut ) internal pure returns (address[] memory path) { path = new address[](2); path[0] = _tokenIn; path[1] = _tokenOut; return path; } /** * @dev * Allows to execute transferFrom for a token */ function _safeTransferFrom( address _token, address _from, address _to, uint256 _value ) internal { IERC20 token = IERC20(_token); _callOptionalReturn( _token, abi.encodeWithSelector( token.transferFrom.selector, _from, _to, _value ) ); } function _callOptionalReturn( address _token, bytes memory _data ) private { ( bool success, bytes memory returndata ) = _token.call(_data); require( success, "LiquidityHelper: CALL_FAILED" ); if (returndata.length > 0) { require( abi.decode( returndata, (bool) ), "LiquidityHelper: OPERATION_FAILED" ); } } /** * @dev * s = optimal swap amount * r = amount of reserve for token a * a = amount of token a the user currently has (not added to reserve yet) * f = swap fee percent * s = (sqrt(((2 - f)r)^2 + 4(1 - f)ar) - (2 - f)r) / (2(1 - f)) */ function getSwapAmount( uint256 _r, uint256 _a ) public pure returns (uint256) { return ( _sqrt( _r * (_r * 3988009 + _a * 3988000) ) - _r * 1997 ) / 1994; } /** * @dev * Calculates square root of the _y number */ function _sqrt( uint256 _y ) internal pure returns (uint256 z) { if (_y > 3) { z = _y; uint256 x = _y / 2 + 1; while (x < z) { z = x; x = (_y / x + x) / 2; } } else if (_y != 0) { z = 1; } } function _forceApprove( IERC20 _token, address _spender, uint256 _value ) internal { bytes memory approvalCall = abi.encodeCall( _token.approve, ( _spender, _value ) ); if (!_callOptionalReturnBool(_token, approvalCall)) { bytes memory zeroApprove = abi.encodeCall( _token.approve, ( _spender, ZERO_VALUE ) ); _callOptionalReturn( _token, zeroApprove ); _callOptionalReturn( _token, approvalCall ); } } function _callOptionalReturn( IERC20 _token, bytes memory _data ) private { bytes memory returndata = _functionCall( address(_token), _data ); if (returndata.length != 0 && !abi.decode(returndata, (bool))) { revert SafeERC20FailedOperation( address(_token) ); } } function _callOptionalReturnBool( IERC20 _token, bytes memory _data ) private returns (bool) { ( bool success, bytes memory returndata ) = address(_token).call(_data); return success && (returndata.length == 0 || abi.decode(returndata, (bool))) && address(_token).code.length > 0; } function _functionCall( address _target, bytes memory _data ) internal returns (bytes memory) { return _functionCallWithValue( _target, _data, ZERO_VALUE ); } function _functionCallWithValue( address _target, bytes memory _data, uint256 _value ) internal returns (bytes memory) { if (address(this).balance < _value) { revert InsufficientBalance( address(this).balance, _value ); } ( bool success, bytes memory returndata ) = _target.call{ value: _value }(_data); return _verifyCallResultFromTarget( _target, success, returndata ); } function _verifyCallResultFromTarget( address target, bool success, bytes memory returndata ) internal view returns (bytes memory) { if (!success) { _revert( returndata ); } else { if (returndata.length == 0 && target.code.length == 0) { revert AddressEmptyCode( target ); } return returndata; } } function _revert( bytes memory _returndata ) private pure { if (_returndata.length > 0) { assembly { let returndata_size := mload(_returndata) revert(add(32, _returndata), returndata_size) } } else { revert FailedCall(); } } }
// SPDX-License-Identifier: BCOM pragma solidity =0.8.25; interface ISwapsERC20 { function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint256); function balanceOf( address _owner ) external view returns (uint256); function allowance( address _owner, address _spender ) external view returns (uint256); function approve( address _spender, uint256 _value ) external returns (bool); function transfer( address _to, uint256 _value ) external returns (bool); function transferFrom( address _from, address _to, uint256 _value ) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces( address _owner ) external view returns (uint256); function permit( address _owner, address _spender, uint256 _value, uint256 _deadline, uint8 _v, bytes32 _r, bytes32 _s ) external; }
// SPDX-License-Identifier: -- BCOM -- pragma solidity =0.8.25; interface IERC20 { function balanceOf( address _owner ) external view returns (uint256); function transfer( address _to, uint256 _value ) external returns (bool); function transferFrom( address _from, address _to, uint256 _value ) external returns (bool); function approve( address _spender, uint256 _value ) external returns (bool); }
// SPDX-License-Identifier: -- BCOM -- pragma solidity =0.8.25; error FailedCall(); error AddressEmptyCode( address target ); error SafeERC20FailedOperation( address token ); error InsufficientBalance( uint256 balance, uint256 value );
{ "remappings": [ "ds-test/=lib/forge-std/lib/ds-test/src/", "forge-std/=lib/forge-std/src/" ], "optimizer": { "enabled": true, "runs": 999999 }, "metadata": { "useLiteralContent": false, "bytecodeHash": "ipfs", "appendCBOR": true }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "cancun", "viaIR": false, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract ISwapsRouter","name":"_router","type":"address"},{"internalType":"contract ISwapsFactory","name":"_factory","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[],"name":"FailedCall","type":"error"},{"inputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":true,"internalType":"contract ISwapsERC20","name":"tokenAddress","type":"address"}],"name":"CleanUp","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmountA","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenAmountB","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenAmountLP","type":"uint256"},{"indexed":true,"internalType":"address","name":"tokenA","type":"address"},{"indexed":true,"internalType":"address","name":"tokenB","type":"address"},{"indexed":true,"internalType":"address","name":"addedTo","type":"address"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"tokenIn","type":"address"},{"indexed":false,"internalType":"address","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"}],"name":"SwapResults","type":"event"},{"inputs":[],"name":"FACTORY","outputs":[{"internalType":"contract ISwapsFactory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ROUTER","outputs":[{"internalType":"contract ISwapsRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"contract IWETH","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract ISwapsERC20","name":"_token","type":"address"}],"name":"cleanUp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_r","type":"uint256"},{"internalType":"uint256","name":"_a","type":"uint256"}],"name":"getSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_expectedTokenAmount","type":"uint256"},{"internalType":"uint256","name":"_minimumLiquidityEther","type":"uint256"},{"internalType":"uint256","name":"_minimumLiquidityToken","type":"uint256"}],"name":"makeLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenA","type":"address"},{"internalType":"address","name":"_tokenB","type":"address"},{"internalType":"uint256","name":"_initialAmountA","type":"uint256"},{"internalType":"uint256","name":"_expectedAmountB","type":"uint256"},{"internalType":"uint256","name":"_minimumLiquidityA","type":"uint256"},{"internalType":"uint256","name":"_minimumLiquidityB","type":"uint256"}],"name":"makeLiquidityDual","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
610120604052348015610010575f80fd5b506040516118ed3803806118ed83398101604081905261002f916100d9565b6001600160a01b0380831660a081905260e081905290821661010052604080516315ab88c960e31b8152905163ad5c46489160048082019260209290919082900301815f875af1158015610085573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100a99190610111565b6001600160a01b0316608081905260c052506101339050565b6001600160a01b03811681146100d6575f80fd5b50565b5f80604083850312156100ea575f80fd5b82516100f5816100c2565b6020840151909250610106816100c2565b809150509250929050565b5f60208284031215610121575f80fd5b815161012c816100c2565b9392505050565b60805160a05160c05160e0516101005161174d6101a05f395f818160c3015281816102870152610a5c01525f818161012001528181610bd20152610d4201525f8181610180015261080c01525f8181610b0a01528181610b8b0152610ca001525f61046c015261174d5ff3fe60806040526004361061006e575f3560e01c806332fe7b261161004c57806332fe7b261461010f578063368519f314610142578063ad5c46481461016f578063f5b1655f146101a2575f80fd5b80631a8e57a1146100725780632d36ad42146100935780632dd31000146100b2575b5f80fd5b34801561007d575f80fd5b5061009161008c3660046112f6565b6101b5565b005b34801561009e575f80fd5b506100916100ad36600461134b565b6101d9565b3480156100bd575f80fd5b506100e57f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561011a575f80fd5b506100e57f000000000000000000000000000000000000000000000000000000000000000081565b34801561014d575f80fd5b5061016161015c366004611366565b6103fa565b604051908152602001610106565b34801561017a575f80fd5b506100e57f000000000000000000000000000000000000000000000000000000000000000081565b6101616101b0366004611386565b61045d565b6101c18633308761049f565b6101d08686868686863361053d565b50505050505050565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f9073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015610243573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061026791906113be565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663017e7e586040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102ee573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061031291906113d5565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602481018490526044016020604051808303815f875af1158015610381573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103a591906113f0565b508173ffffffffffffffffffffffffffffffffffffffff167f4c12b37cb51b51f87a2d628b2572d0b6f52f19d9a647e81904fb041094ca8b22826040516103ee91815260200190565b60405180910390a25050565b5f6107ca61040a846107cd61143c565b61044061041a85623cda2061143c565b61042787623cda2961143c565b6104319190611453565b61043b908761143c565b61079c565b61044a9190611466565b6104549190611479565b90505b92915050565b5f6104673461080a565b6104967f000000000000000000000000000000000000000000000000000000000000000086348787873361053d565b95945050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052849061053690829061088a565b5050505050565b5f806105498989610a0d565b90505f808273ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610596573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105ba91906114ce565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff1691505f8b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610640573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061066491906113d5565b73ffffffffffffffffffffffffffffffffffffffff161461068e57610689828b6103fa565b610698565b610698838b6103fa565b90505f6106a78d8d848d610ac7565b90507fb38ff273801509f7e755c30acfb5062f9494702bfe3436d5845e7f4aaa4c2b838d8d835f815181106106de576106de61151a565b6020026020010151846001815181106106f9576106f961151a565b6020026020010151604051610742949392919073ffffffffffffffffffffffffffffffffffffffff94851681529290931660208301526040820152606081019190915260800190565b60405180910390a161078c8d8d835f815181106107615761076161151a565b60200260200101518460018151811061077c5761077c61151a565b60200260200101518d8d8d610c9a565b509b9a5050505050505050505050565b5f60038211156107fb5750805f6107b4600283611479565b6107bf906001611453565b90505b818110156107f5579050806002816107da8186611479565b6107e49190611453565b6107ee9190611479565b90506107c2565b50919050565b8115610805575060015b919050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004015f604051808303818588803b158015610870575f80fd5b505af1158015610882573d5f803e3d5ffd5b505050505050565b5f808373ffffffffffffffffffffffffffffffffffffffff16836040516108b19190611547565b5f604051808303815f865af19150503d805f81146108ea576040519150601f19603f3d011682016040523d82523d5f602084013e6108ef565b606091505b509150915081610960576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4c697175696469747948656c7065723a2043414c4c5f4641494c45440000000060448201526064015b60405180910390fd5b805115610a07578080602001905181019061097b91906113f0565b610a07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4c697175696469747948656c7065723a204f5045524154494f4e5f4641494c4560448201527f44000000000000000000000000000000000000000000000000000000000000006064820152608401610957565b50505050565b6040517fe6a4390500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301525f917f00000000000000000000000000000000000000000000000000000000000000009091169063e6a4390590604401602060405180830381865afa158015610aa3573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061045491906113d5565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301526060919086169063dd62ed3e90604401602060405180830381865afa158015610b5b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b7f91906113be565b5f03610bd057610bd0857f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610e52565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166338ed17398484610c188989610f7a565b30426040518663ffffffff1660e01b8152600401610c3a95949392919061155d565b5f604051808303815f875af1158015610c55573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526104969190810190611615565b610cc5867f000000000000000000000000000000000000000000000000000000000000000086610e52565b6040517fe8e3370000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152878116602483015260448201879052606482018690526084820185905260a4820184905282811660c48301524260e48301525f91829182917f00000000000000000000000000000000000000000000000000000000000000009091169063e8e3370090610104016060604051808303815f875af1158015610d8b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610daf91906116ec565b9250925092508373ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fa844a53d987de033c0f217dddaf976083864fbcb56935c1bd11dbbad0ad61b33868686604051610e3e939291909283526020830191909152604082015260600190565b60405180910390a450505050505050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b300000000000000000000000000000000000000000000000000000000179052610ede848261103b565b610a07576040805173ffffffffffffffffffffffffffffffffffffffff851660248201525f6044808301919091528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b300000000000000000000000000000000000000000000000000000000179052610f7085826110f2565b61053685836110f2565b604080516002808252606080830184529260208301908036833701905050905082815f81518110610fad57610fad61151a565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508181600181518110610ffb57610ffb61151a565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505092915050565b5f805f8473ffffffffffffffffffffffffffffffffffffffff16846040516110639190611547565b5f604051808303815f865af19150503d805f811461109c576040519150601f19603f3d011682016040523d82523d5f602084013e6110a1565b606091505b50915091508180156110cb5750805115806110cb5750808060200190518101906110cb91906113f0565b801561049657505050505073ffffffffffffffffffffffffffffffffffffffff163b151590565b5f6110fd8383611175565b905080515f1415801561112157508080602001905181019061111f91906113f0565b155b15611170576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610957565b505050565b606061045483835f845f808573ffffffffffffffffffffffffffffffffffffffff1684866040516111a69190611547565b5f6040518083038185875af1925050503d805f81146111e0576040519150601f19603f3d011682016040523d82523d5f602084013e6111e5565b606091505b50915091506111f5868383611201565b925050505b9392505050565b6060826112165761121182611290565b6111fa565b815115801561123a575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611289576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610957565b50806111fa565b8051156112a05780518082602001fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b73ffffffffffffffffffffffffffffffffffffffff811681146112d2575f80fd5b5f805f805f8060c0878903121561130b575f80fd5b8635611316816112d5565b95506020870135611326816112d5565b95989597505050506040840135936060810135936080820135935060a0909101359150565b5f6020828403121561135b575f80fd5b81356111fa816112d5565b5f8060408385031215611377575f80fd5b50508035926020909101359150565b5f805f8060808587031215611399575f80fd5b84356113a4816112d5565b966020860135965060408601359560600135945092505050565b5f602082840312156113ce575f80fd5b5051919050565b5f602082840312156113e5575f80fd5b81516111fa816112d5565b5f60208284031215611400575f80fd5b815180151581146111fa575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b80820281158282048414176104575761045761140f565b808201808211156104575761045761140f565b818103818111156104575761045761140f565b5f826114ac577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b80516dffffffffffffffffffffffffffff81168114610805575f80fd5b5f805f606084860312156114e0575f80fd5b6114e9846114b1565b92506114f7602085016114b1565b9150604084015163ffffffff8116811461150f575f80fd5b809150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82518060208501845e5f920191825250919050565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b818110156115ba57845173ffffffffffffffffffffffffffffffffffffffff1683529383019391830191600101611588565b505073ffffffffffffffffffffffffffffffffffffffff969096166060850152505050608001529392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f6020808385031215611626575f80fd5b825167ffffffffffffffff8082111561163d575f80fd5b818501915085601f830112611650575f80fd5b815181811115611662576116626115e8565b8060051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811085821117156116a5576116a56115e8565b6040529182528482019250838101850191888311156116c2575f80fd5b938501935b828510156116e0578451845293850193928501926116c7565b98975050505050505050565b5f805f606084860312156116fe575f80fd5b835192506020840151915060408401519050925092509256fea2646970667358221220f5190d54926619af4a7b9444ae535711c01aa23d876b9e276ba0c57ad87099a164736f6c63430008190033000000000000000000000000b4b0ea46fe0e9e8eab4afb765b527739f2718671000000000000000000000000ee3e9e46e34a27dc755a63e2849c9913ee1a06e2
Deployed Bytecode
0x60806040526004361061006e575f3560e01c806332fe7b261161004c57806332fe7b261461010f578063368519f314610142578063ad5c46481461016f578063f5b1655f146101a2575f80fd5b80631a8e57a1146100725780632d36ad42146100935780632dd31000146100b2575b5f80fd5b34801561007d575f80fd5b5061009161008c3660046112f6565b6101b5565b005b34801561009e575f80fd5b506100916100ad36600461134b565b6101d9565b3480156100bd575f80fd5b506100e57f000000000000000000000000ee3e9e46e34a27dc755a63e2849c9913ee1a06e281565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561011a575f80fd5b506100e57f000000000000000000000000b4b0ea46fe0e9e8eab4afb765b527739f271867181565b34801561014d575f80fd5b5061016161015c366004611366565b6103fa565b604051908152602001610106565b34801561017a575f80fd5b506100e57f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b6101616101b0366004611386565b61045d565b6101c18633308761049f565b6101d08686868686863361053d565b50505050505050565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f9073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015610243573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061026791906113be565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb7f000000000000000000000000ee3e9e46e34a27dc755a63e2849c9913ee1a06e273ffffffffffffffffffffffffffffffffffffffff1663017e7e586040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102ee573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061031291906113d5565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602481018490526044016020604051808303815f875af1158015610381573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103a591906113f0565b508173ffffffffffffffffffffffffffffffffffffffff167f4c12b37cb51b51f87a2d628b2572d0b6f52f19d9a647e81904fb041094ca8b22826040516103ee91815260200190565b60405180910390a25050565b5f6107ca61040a846107cd61143c565b61044061041a85623cda2061143c565b61042787623cda2961143c565b6104319190611453565b61043b908761143c565b61079c565b61044a9190611466565b6104549190611479565b90505b92915050565b5f6104673461080a565b6104967f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc286348787873361053d565b95945050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052849061053690829061088a565b5050505050565b5f806105498989610a0d565b90505f808273ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610596573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105ba91906114ce565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff1691505f8b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610640573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061066491906113d5565b73ffffffffffffffffffffffffffffffffffffffff161461068e57610689828b6103fa565b610698565b610698838b6103fa565b90505f6106a78d8d848d610ac7565b90507fb38ff273801509f7e755c30acfb5062f9494702bfe3436d5845e7f4aaa4c2b838d8d835f815181106106de576106de61151a565b6020026020010151846001815181106106f9576106f961151a565b6020026020010151604051610742949392919073ffffffffffffffffffffffffffffffffffffffff94851681529290931660208301526040820152606081019190915260800190565b60405180910390a161078c8d8d835f815181106107615761076161151a565b60200260200101518460018151811061077c5761077c61151a565b60200260200101518d8d8d610c9a565b509b9a5050505050505050505050565b5f60038211156107fb5750805f6107b4600283611479565b6107bf906001611453565b90505b818110156107f5579050806002816107da8186611479565b6107e49190611453565b6107ee9190611479565b90506107c2565b50919050565b8115610805575060015b919050565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004015f604051808303818588803b158015610870575f80fd5b505af1158015610882573d5f803e3d5ffd5b505050505050565b5f808373ffffffffffffffffffffffffffffffffffffffff16836040516108b19190611547565b5f604051808303815f865af19150503d805f81146108ea576040519150601f19603f3d011682016040523d82523d5f602084013e6108ef565b606091505b509150915081610960576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4c697175696469747948656c7065723a2043414c4c5f4641494c45440000000060448201526064015b60405180910390fd5b805115610a07578080602001905181019061097b91906113f0565b610a07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4c697175696469747948656c7065723a204f5045524154494f4e5f4641494c4560448201527f44000000000000000000000000000000000000000000000000000000000000006064820152608401610957565b50505050565b6040517fe6a4390500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301525f917f000000000000000000000000ee3e9e46e34a27dc755a63e2849c9913ee1a06e29091169063e6a4390590604401602060405180830381865afa158015610aa3573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061045491906113d5565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000b4b0ea46fe0e9e8eab4afb765b527739f2718671811660248301526060919086169063dd62ed3e90604401602060405180830381865afa158015610b5b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b7f91906113be565b5f03610bd057610bd0857f000000000000000000000000b4b0ea46fe0e9e8eab4afb765b527739f27186717fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610e52565b7f000000000000000000000000b4b0ea46fe0e9e8eab4afb765b527739f271867173ffffffffffffffffffffffffffffffffffffffff166338ed17398484610c188989610f7a565b30426040518663ffffffff1660e01b8152600401610c3a95949392919061155d565b5f604051808303815f875af1158015610c55573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526104969190810190611615565b610cc5867f000000000000000000000000b4b0ea46fe0e9e8eab4afb765b527739f271867186610e52565b6040517fe8e3370000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152878116602483015260448201879052606482018690526084820185905260a4820184905282811660c48301524260e48301525f91829182917f000000000000000000000000b4b0ea46fe0e9e8eab4afb765b527739f27186719091169063e8e3370090610104016060604051808303815f875af1158015610d8b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610daf91906116ec565b9250925092508373ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fa844a53d987de033c0f217dddaf976083864fbcb56935c1bd11dbbad0ad61b33868686604051610e3e939291909283526020830191909152604082015260600190565b60405180910390a450505050505050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b300000000000000000000000000000000000000000000000000000000179052610ede848261103b565b610a07576040805173ffffffffffffffffffffffffffffffffffffffff851660248201525f6044808301919091528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b300000000000000000000000000000000000000000000000000000000179052610f7085826110f2565b61053685836110f2565b604080516002808252606080830184529260208301908036833701905050905082815f81518110610fad57610fad61151a565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508181600181518110610ffb57610ffb61151a565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505092915050565b5f805f8473ffffffffffffffffffffffffffffffffffffffff16846040516110639190611547565b5f604051808303815f865af19150503d805f811461109c576040519150601f19603f3d011682016040523d82523d5f602084013e6110a1565b606091505b50915091508180156110cb5750805115806110cb5750808060200190518101906110cb91906113f0565b801561049657505050505073ffffffffffffffffffffffffffffffffffffffff163b151590565b5f6110fd8383611175565b905080515f1415801561112157508080602001905181019061111f91906113f0565b155b15611170576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610957565b505050565b606061045483835f845f808573ffffffffffffffffffffffffffffffffffffffff1684866040516111a69190611547565b5f6040518083038185875af1925050503d805f81146111e0576040519150601f19603f3d011682016040523d82523d5f602084013e6111e5565b606091505b50915091506111f5868383611201565b925050505b9392505050565b6060826112165761121182611290565b6111fa565b815115801561123a575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611289576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610957565b50806111fa565b8051156112a05780518082602001fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b73ffffffffffffffffffffffffffffffffffffffff811681146112d2575f80fd5b5f805f805f8060c0878903121561130b575f80fd5b8635611316816112d5565b95506020870135611326816112d5565b95989597505050506040840135936060810135936080820135935060a0909101359150565b5f6020828403121561135b575f80fd5b81356111fa816112d5565b5f8060408385031215611377575f80fd5b50508035926020909101359150565b5f805f8060808587031215611399575f80fd5b84356113a4816112d5565b966020860135965060408601359560600135945092505050565b5f602082840312156113ce575f80fd5b5051919050565b5f602082840312156113e5575f80fd5b81516111fa816112d5565b5f60208284031215611400575f80fd5b815180151581146111fa575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b80820281158282048414176104575761045761140f565b808201808211156104575761045761140f565b818103818111156104575761045761140f565b5f826114ac577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b80516dffffffffffffffffffffffffffff81168114610805575f80fd5b5f805f606084860312156114e0575f80fd5b6114e9846114b1565b92506114f7602085016114b1565b9150604084015163ffffffff8116811461150f575f80fd5b809150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82518060208501845e5f920191825250919050565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b818110156115ba57845173ffffffffffffffffffffffffffffffffffffffff1683529383019391830191600101611588565b505073ffffffffffffffffffffffffffffffffffffffff969096166060850152505050608001529392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f6020808385031215611626575f80fd5b825167ffffffffffffffff8082111561163d575f80fd5b818501915085601f830112611650575f80fd5b815181811115611662576116626115e8565b8060051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811085821117156116a5576116a56115e8565b6040529182528482019250838101850191888311156116c2575f80fd5b938501935b828510156116e0578451845293850193928501926116c7565b98975050505050505050565b5f805f606084860312156116fe575f80fd5b835192506020840151915060408401519050925092509256fea2646970667358221220f5190d54926619af4a7b9444ae535711c01aa23d876b9e276ba0c57ad87099a164736f6c63430008190033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000b4b0ea46fe0e9e8eab4afb765b527739f2718671000000000000000000000000ee3e9e46e34a27dc755a63e2849c9913ee1a06e2
-----Decoded View---------------
Arg [0] : _router (address): 0xB4B0ea46Fe0E9e8EAB4aFb765b527739F2718671
Arg [1] : _factory (address): 0xee3E9E46E34a27dC755a63e2849C9913Ee1A06E2
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000b4b0ea46fe0e9e8eab4afb765b527739f2718671
Arg [1] : 000000000000000000000000ee3e9e46e34a27dc755a63e2849c9913ee1a06e2
Loading...
Loading
Loading...
Loading
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.