More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 37,692 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Swap Exact Token... | 1208190 | 496 days ago | IN | 0 ETH | 0.00058334 | ||||
Swap ETH For Exa... | 1204975 | 496 days ago | IN | 0.00975754 ETH | 0.00052765 | ||||
Swap ETH For Exa... | 1204967 | 496 days ago | IN | 0.00933142 ETH | 0.00055384 | ||||
Swap Exact Token... | 1196457 | 496 days ago | IN | 0 ETH | 0.000737 | ||||
Remove Liquidity | 1195784 | 496 days ago | IN | 0 ETH | 0.0008658 | ||||
Swap Exact Token... | 1195640 | 496 days ago | IN | 0 ETH | 0.00076831 | ||||
Swap Exact Token... | 1195596 | 496 days ago | IN | 0 ETH | 0.00060481 | ||||
Swap Exact Token... | 1195563 | 496 days ago | IN | 0 ETH | 0.0005517 | ||||
Swap Exact Token... | 1195545 | 496 days ago | IN | 0 ETH | 0.00061025 | ||||
Swap Exact Token... | 1195532 | 496 days ago | IN | 0 ETH | 0.00060785 | ||||
Swap Exact Token... | 1195524 | 496 days ago | IN | 0 ETH | 0.00058783 | ||||
Swap Exact Token... | 1195508 | 496 days ago | IN | 0 ETH | 0.00056568 | ||||
Swap Exact Token... | 1195505 | 496 days ago | IN | 0 ETH | 0.00056492 | ||||
Swap Exact Token... | 1195505 | 496 days ago | IN | 0 ETH | 0.00056492 | ||||
Swap Exact Token... | 1195447 | 496 days ago | IN | 0 ETH | 0.00057596 | ||||
Swap Exact Token... | 1195426 | 496 days ago | IN | 0 ETH | 0.00059324 | ||||
Swap Exact ETH F... | 1195421 | 496 days ago | IN | 0.007 ETH | 0.00053091 | ||||
Swap Exact Token... | 1195414 | 496 days ago | IN | 0 ETH | 0.00054636 | ||||
Swap Exact ETH F... | 1195405 | 496 days ago | IN | 0.0123 ETH | 0.00059739 | ||||
Swap Exact ETH F... | 1195404 | 496 days ago | IN | 0.0121 ETH | 0.00059737 | ||||
Swap Exact ETH F... | 1195399 | 496 days ago | IN | 0.0122 ETH | 0.0005973 | ||||
Swap Exact ETH F... | 1195384 | 496 days ago | IN | 0.007685 ETH | 0.00059674 | ||||
Swap Exact ETH F... | 1195383 | 496 days ago | IN | 0.00778 ETH | 0.00059678 | ||||
Swap Exact ETH F... | 1195378 | 496 days ago | IN | 0.008 ETH | 0.00059671 | ||||
Swap Exact ETH F... | 1195375 | 496 days ago | IN | 0.0079978 ETH | 0.00059641 |
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
12260502 | 155 days ago | 0 ETH | ||||
12260502 | 155 days ago | 0 ETH | ||||
12260502 | 155 days ago | 0 ETH | ||||
8864141 | 234 days ago | 0 ETH | ||||
8864141 | 234 days ago | 0 ETH | ||||
8864141 | 234 days ago | 0 ETH | ||||
6563535 | 288 days ago | 0 ETH | ||||
6563535 | 288 days ago | 0 ETH | ||||
6563535 | 288 days ago | 0 ETH | ||||
5688513 | 308 days ago | 0 ETH | ||||
5688513 | 308 days ago | 0 ETH | ||||
5688513 | 308 days ago | 0 ETH | ||||
5688504 | 308 days ago | 0 ETH | ||||
5688504 | 308 days ago | 0 ETH | ||||
5688504 | 308 days ago | 0 ETH | ||||
5686805 | 308 days ago | 0 ETH | ||||
5686805 | 308 days ago | 0 ETH | ||||
5686805 | 308 days ago | 0 ETH | ||||
5686805 | 308 days ago | 0 ETH | ||||
5686805 | 308 days ago | 0 ETH | ||||
5686805 | 308 days ago | 0 ETH | ||||
5686797 | 308 days ago | 0 ETH | ||||
5686797 | 308 days ago | 0 ETH | ||||
5686797 | 308 days ago | 0 ETH | ||||
5686740 | 308 days ago | 0 ETH |
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
XfaiV0Periphery03
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.19; import './XfaiLibrary.sol'; import './TransferHelper.sol'; import './IXfaiV0Core.sol'; import './IXfaiPool.sol'; import './IXfaiV0Periphery03.sol'; import './IXfaiFactory.sol'; import './IXfaiINFT.sol'; import './IERC20.sol'; import './IWETH.sol'; /** * @title Xfai's Xfai Periphery Contract * @author Xfai * @notice XfaiV0Periphery03 performs the necessary high level safety checks to interact with XfaiV0Core. It does not store any pool related state. */ contract XfaiV0Periphery03 is IXfaiV0Periphery03 { /** * @notice The factory address of Xfai */ address private immutable factory; /** * @notice The address of the XfaiV0Core contract */ address private immutable core; /** * @notice The weth address. * @dev In the case of a chain ID other than Ethereum, the wrapped ERC20 token address of the chain's native coin */ address private immutable weth; /** * @notice The code hash od XfaiPool * @dev keccak256(type(XfaiPool).creationCode) */ bytes32 private immutable poolCodeHash; modifier ensure(uint deadline) { require(deadline >= block.timestamp, 'XfaiV0Periphery03: EXPIRED'); _; } /** * @notice XfaiV0Periphery03 constructor * @param _factory The factory address of Xfai * @param _weth The weth address */ constructor(address _factory, address _weth) { factory = _factory; core = IXfaiFactory(_factory).getXfaiCore(); weth = _weth; poolCodeHash = IXfaiFactory(_factory).poolCodeHash(); } receive() external payable { assert(msg.sender == weth); // only accept ETH via fallback from the weth contract } // **** ADD LIQUIDITY **** function _getLiquidityAmounts( address _token, uint _amountTokenDesired, uint _amountWETHDesired, uint _amountTokenMin, uint _amountWETHMin ) internal returns (uint amountToken, uint amountWETH) { address pool = IXfaiFactory(factory).getPool(_token); if (pool == address(0)) { // create the pool if it doesn't exist yet pool = IXfaiFactory(factory).createPool(_token); } (uint reserve, uint weight) = IXfaiPool(pool).getStates(); if (reserve == 0 && weight == 0) { (amountToken, amountWETH) = (_amountTokenDesired, _amountWETHDesired); } else { uint amountWETHOptimal = XfaiLibrary.quote(_amountTokenDesired, weight, reserve); if (amountWETHOptimal <= _amountWETHDesired) { require(amountWETHOptimal >= _amountWETHMin, 'XfaiV0Periphery03: INSUFFICIENT_1_AMOUNT'); (amountToken, amountWETH) = (_amountTokenDesired, amountWETHOptimal); } else { uint amountTokenOptimal = XfaiLibrary.quote(_amountWETHDesired, reserve, weight); assert(amountTokenOptimal <= _amountTokenDesired); require(amountTokenOptimal >= _amountTokenMin, 'XfaiV0Periphery03: INSUFFICIENT_0_AMOUNT'); (amountToken, amountWETH) = (amountTokenOptimal, _amountWETHDesired); } } } /** * @notice Provide two-sided liquidity to a pool * @dev Requires _token approval. A given amount of _token and ETH get consumed and a given amount of liquidity tokens is minted * @param _to The address of the recipient * @param _token An ERC20 token address * @param _amountTokenDesired The input amount of _token to be provided * @param _amountTokenMin The minimal amount that the user will accept for _amountTokenDesired * @param _amountETHMin The minimal amount that the user will accept for the provided ETH * @param _deadline The UTC timestamp that if reached, causes the transaction to fail automatically */ function addLiquidity( address _to, address _token, uint _amountTokenDesired, uint _amountTokenMin, uint _amountETHMin, uint _deadline ) external payable override ensure(_deadline) returns (uint liquidity) { address pool = XfaiLibrary.poolFor(_token, factory, poolCodeHash); (uint amount0, uint amount1) = _getLiquidityAmounts( _token, _amountTokenDesired, msg.value, _amountTokenMin, _amountETHMin ); TransferHelper.safeTransferFrom(_token, msg.sender, pool, amount0); IWETH(weth).deposit{value: amount1}(); TransferHelper.safeTransfer(weth, pool, amount1); liquidity = IXfaiV0Core(core).mint(_token, _to); // refund dust eth, if any if (msg.value > amount1) TransferHelper.safeTransferETH(msg.sender, msg.value - amount1); } // **** REMOVE LIQUIDITY **** function _removeLiquidity( address _token0, address _token1, uint _liquidity, uint _amount0Min, uint _amount1Min, address _to ) private returns (uint amount0, uint amount1) { address _core = core; // gas saving address pool = XfaiLibrary.poolFor(_token0, factory, poolCodeHash); TransferHelper.safeTransferFrom(pool, msg.sender, _core, _liquidity); (amount0, amount1) = IXfaiV0Core(_core).burn(_token0, _token1, _to); require(amount0 >= _amount0Min, 'XfaiV0Periphery03: INSUFFICIENT_AMOUNT0'); require(amount1 >= _amount1Min, 'XfaiV0Periphery03: INSUFFICIENT_AMOUNT1'); } function _removeLiquidityOptions( address _to, address _token0, address _token1, uint _liquidity, uint _amount0Min, uint _amount1Min ) private returns (uint amount0, uint amount1) { address wrappedETH = weth; // gas saving require(_token0 != wrappedETH, 'XfaiV0Periphery03: INVALID_TOKEN'); if (_token1 == wrappedETH) { (amount0, amount1) = _removeLiquidity( _token0, wrappedETH, _liquidity, _amount0Min, _amount1Min, address(this) ); IWETH(wrappedETH).withdraw(amount1); TransferHelper.safeTransferETH(_to, amount1); TransferHelper.safeTransfer(_token0, _to, amount0); } else { (amount0, amount1) = _removeLiquidity( _token0, _token1, _liquidity, _amount0Min, _amount1Min, _to ); } } /** * @notice Remove liquidity from pool0 * @dev Requires approval of the pool's liquidity token. At the end of the function call, a given amount of LP tokens are burned, and a given amount of _token0 and _token1 are returned to the recipient. * @param _to The address of the recipient * @param _token0 The address of an ERC20 token * @param _token1 The address of an ERC20 token * @param _liquidity The amount of LP tokens to be burned * @param _amount0Min The minimal amount of _token that the user will accept for a given amount of _liquidity * @param _amount1Min The minimal amount of _token that the user will accept for a given amount of _liquidity * @param _deadline The UTC timestamp that if reached, causes the transaction to fail automatically * @return amount0 The amount of _token that are returned to the recipient * @return amount1 The amount of ether that are returned to the recipient */ function removeLiquidity( address _to, address _token0, address _token1, uint _liquidity, uint _amount0Min, uint _amount1Min, uint _deadline ) external override ensure(_deadline) returns (uint amount0, uint amount1) { (amount0, amount1) = _removeLiquidityOptions( _to, _token0, _token1, _liquidity, _amount0Min, _amount1Min ); } // **** SWAP **** // requires the initial amount to have already been sent to the primary pool function _swap( address _token0, address _token1, address _to ) internal returns (uint input, uint output) { (input, output) = IXfaiV0Core(core).swap(_token0, _token1, _to); } /** * @notice Swap an exact amount of one ERC20 token (_token0) for another one (_token1) * @dev Requires _token0 approval. At the end of the function call, an amount _amount0In of _token0 is deposited into Xfai, and a given amount (larger than _amount1OutMin) of _token1 is returned to the recipient. * @param _to The address of the recipient * @param _token0 An ERC20 token address * @param _token1 An ERC20 token address * @param _amount0In The amount of _token0 to be swapped * @param _amount1OutMin The minimal amount of _token1 that the user will accept for a given amount of _amount0In * @param _deadline The UTC timestamp that if reached, causes the transaction to fail automatically */ function swapExactTokensForTokens( address _to, address _token0, address _token1, uint _amount0In, uint _amount1OutMin, uint _deadline ) external override ensure(_deadline) returns (uint) { address pool; if (_token0 == weth) { pool = XfaiLibrary.poolFor(_token1, factory, poolCodeHash); } else { pool = XfaiLibrary.poolFor(_token0, factory, poolCodeHash); } TransferHelper.safeTransferFrom(_token0, msg.sender, pool, _amount0In); (, uint amount1Out) = _swap(_token0, _token1, _to); require(amount1Out >= _amount1OutMin, 'XfaiV0Periphery03: INSUFFICIENT_OUTPUT_AMOUNT'); return amount1Out; } /** * @notice Swap an amount of one ERC20 token (_token0) for an exact amount of another one (_token1) * @dev Requires _token0 approval. At the end of the function call, an amount (smaller than _amount0InMax) of _token0 is deposited into xfai, and an amount _amount1Out og _token1 is returned to the recipient. * @param _to The address of the recipient * @param _token0 An ERC20 token address * @param _token1 An ERC20 token address * @param _amount1Out The amount of _token1 that one wants to receive * @param _amount0InMax The maximal amount of _token0 that the user is willing to trade for a given amount of _amount1Out * @param _deadline The UTC timestamp that if reached, causes the swap transaction to fail automatically */ function swapTokensForExactTokens( address _to, address _token0, address _token1, uint _amount1Out, uint _amount0InMax, uint _deadline ) external override ensure(_deadline) returns (uint amount0In) { address pool0; address pool1; if (_token0 == weth) { pool0 = XfaiLibrary.poolFor(_token1, factory, poolCodeHash); pool1 = XfaiLibrary.poolFor(_token1, factory, poolCodeHash); (uint r, uint w) = IXfaiPool(pool0).getStates(); amount0In = XfaiLibrary.getAmountIn(w, r, _amount1Out, IXfaiV0Core(core).getTotalFee()); } else if (_token1 == weth) { pool0 = XfaiLibrary.poolFor(_token0, factory, poolCodeHash); (uint r, uint w) = IXfaiPool(pool0).getStates(); amount0In = XfaiLibrary.getAmountIn(r, w, _amount1Out, IXfaiV0Core(core).getTotalFee()); } else { pool0 = XfaiLibrary.poolFor(_token0, factory, poolCodeHash); pool1 = XfaiLibrary.poolFor(_token1, factory, poolCodeHash); amount0In = XfaiLibrary.getAmountsIn( pool0, pool1, _amount1Out, IXfaiV0Core(core).getTotalFee() ); } require(amount0In <= _amount0InMax, 'XfaiV0Periphery03: INSUFFICIENT_INPUT_AMOUNT'); TransferHelper.safeTransferFrom(_token0, msg.sender, pool0, amount0In); _swap(_token0, _token1, _to); } /** * @notice Swap an exact amount of ether for an ERC20 token (_token1) * @dev At the end of the function call, an exact amount of ether is deposited into Xfai, and a given amount (larger than _amount1OutMin) of _token1 is returned to the recipient. * @param _to The address of the recipient * @param _token An ERC20 token address * @param _amountOutMin The minimal amount of _token1 that the user will accept for a given amount of _amount0In * @param _deadline The UTC timestamp that if reached, causes the swap transaction to fail automatically */ function swapExactETHForTokens( address _to, address _token, uint _amountOutMin, uint _deadline ) external payable override ensure(_deadline) returns (uint output) { address _weth = weth; IWETH(_weth).deposit{value: msg.value}(); if (_token == _weth) { assert(IWETH(_weth).transfer(_to, msg.value)); output = msg.value; } else { address pool = XfaiLibrary.poolFor(_token, factory, poolCodeHash); assert(IWETH(_weth).transfer(pool, msg.value)); (, output) = _swap(_weth, _token, _to); } require(output >= _amountOutMin, 'XfaiV0Periphery03: INSUFFICIENT_OUTPUT_AMOUNT'); } /** * @notice Swap an amount of one ERC20 token (_token0) for an exact amount of ether * @dev Requires _token0 approval. At the end of the function call, a given amount (smaller than _amount0InMax) of _token0 is deposited into xfai, and and the amount _amount1Out of ether is returned to the recipient. * @param _to The address of the recipient * @param _token An ERC20 token address * @param _amountOut The amount of ether that one wants to receive * @param _amountInMax The maximal amount of _token0 that the user is willing to trade for a given amount of _amount1Out * @param _deadline The UTC timestamp that if reached, causes the swap transaction to fail automatically */ function swapTokensForExactETH( address _to, address _token, uint _amountOut, uint _amountInMax, uint _deadline ) external override ensure(_deadline) returns (uint input) { address _weth = weth; if (_token == _weth) { TransferHelper.safeTransferFrom(_weth, msg.sender, address(this), _amountOut); } else { address pool = XfaiLibrary.poolFor(_token, factory, poolCodeHash); (uint r, uint w) = IXfaiPool(pool).getStates(); input = XfaiLibrary.getAmountIn(r, w, _amountOut, IXfaiV0Core(core).getTotalFee()); require(input <= _amountInMax, 'XfaiV0Periphery03: INSUFFICIENT_INPUT_AMOUNT'); TransferHelper.safeTransferFrom(_token, msg.sender, pool, input); _swap(_token, _weth, address(this)); } IWETH(_weth).withdraw(_amountOut); TransferHelper.safeTransferETH(_to, _amountOut); } /** * @notice Swap an exact amount of one ERC20 token (_token0) for ether * @dev Requires _token0 approval. At the end of the function call, a given amount _amount0In of _token0 is deposited into Xfai, and an amount (larger than _amount1OutMin) of ether is returned to the recipient. * @param _to The address of the recipient * @param _token An ERC20 token address * @param _amountIn The amount of _token0 to be swapped * @param _amountOutMin The minimal amount of ether that the user will accept for a given amount of _amount0In * @param _deadline The UTC timestamp that if reached, causes the transaction to fail automatically */ function swapExactTokensForETH( address _to, address _token, uint _amountIn, uint _amountOutMin, uint _deadline ) external override ensure(_deadline) returns (uint output) { address _weth = weth; if (_token == _weth) { TransferHelper.safeTransferFrom(_token, msg.sender, address(this), _amountIn); IWETH(_weth).withdraw(_amountIn); output = _amountIn; } else { address pool = XfaiLibrary.poolFor(_token, factory, poolCodeHash); TransferHelper.safeTransferFrom(_token, msg.sender, pool, _amountIn); (, output) = _swap(_token, _weth, address(this)); IWETH(_weth).withdraw(output); } require(output >= _amountOutMin, 'XfaiV0Periphery03: INSUFFICIENT_OUTPUT_AMOUNT'); TransferHelper.safeTransferETH(_to, output); } /** * @notice Swap an amount of ether for an exact amount of ERC20 tokens (_token1) * @dev At the end of the function call, a given amount of ether is deposited into xfai, and a given amount _amount1Out of _token1 is returned to the recipient. * @param _to The address of the recipient * @param _token An ERC20 token address * @param _amountOut The amount of _token1 that the user accepts for a given amount of ether * @param _deadline The UTC timestamp that if reached, causes the swap transaction to fail automatically */ function swapETHForExactTokens( address _to, address _token, uint _amountOut, uint _deadline ) external payable override ensure(_deadline) returns (uint input) { address _weth = weth; if (_token == _weth) { require(_amountOut <= msg.value, 'XfaiV0Periphery03: INSUFFICIENT_INPUT_AMOUNT'); IWETH(_weth).deposit{value: _amountOut}(); assert(IWETH(_weth).transfer(_to, _amountOut)); } else { address pool = XfaiLibrary.poolFor(_token, factory, poolCodeHash); (uint r, uint w) = IXfaiPool(pool).getStates(); input = XfaiLibrary.getAmountIn(w, r, _amountOut, IXfaiV0Core(core).getTotalFee()); require(input <= msg.value, 'XfaiV0Periphery03: INSUFFICIENT_INPUT_AMOUNT'); IWETH(_weth).deposit{value: input}(); assert(IWETH(_weth).transfer(pool, input)); _swap(_weth, _token, _to); } // refund dust eth, if any if (msg.value > input) TransferHelper.safeTransferETH(msg.sender, msg.value - input); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; import './IERC165.sol'; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.19; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @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); /** * @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 `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, 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 `from` to `to` 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 from, address to, uint256 amount) external returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; import './IERC20.sol'; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.19; import './IERC165.sol'; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721 * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must * understand this adds an external call which potentially creates a reentrancy vulnerability. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 tokenId) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.19; import './IERC721.sol'; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); }
// SPDX-License-Identifier: GPL-3.0-only pragma solidity ^0.8.19; import './IERC20Metadata.sol'; interface IWETH is IERC20Metadata { function deposit() external payable; function transfer(address to, uint value) external returns (bool); function withdraw(uint) external; }
// SPDX-License-Identifier: GPL-3.0-only pragma solidity ^0.8.19; interface IXfaiFactory { function getPool(address _token) external view returns (address pool); function allPools(uint256) external view returns (address pool); function poolCodeHash() external pure returns (bytes32); function allPoolsLength() external view returns (uint); function createPool(address _token) external returns (address pool); function setXfaiCore(address _core) external; function getXfaiCore() external view returns (address); function setOwner(address _owner) external; function getOwner() external view returns (address); event ChangedOwner(address indexed owner); event ChangedCore(address indexed core); event Whitelisting(bool state); event PoolCreated(address indexed token, address indexed pool, uint allPoolsSize); }
// SPDX-License-Identifier: GPL-3.0-only pragma solidity ^0.8.19; import './IERC721Enumerable.sol'; interface IXfaiINFT is IERC721Enumerable { function reserve() external view returns (uint); function totalSharesIssued() external view returns (uint); function initialReserve() external view returns (uint); function harvestedBalance(address _token) external view returns (uint); function INFTShares(uint _id) external view returns (uint); function sharesHarvestedByPool(address _token, uint _id) external view returns (uint); function totalSharesHarvestedByPool(address _token) external view returns (uint); function setBaseURI(string memory _baseURI) external; function getStates() external view returns (uint, uint, uint); function shareToTokenAmount( uint _tokenID, address _token ) external view returns (uint share2amount, uint inftShare, uint harvestedShares); function premint(address[] memory _legacyLNFTHolders, uint[] memory _initialShares) external; function mint(address _to) external returns (uint tokenID, uint share); function boost(uint _tokenID) external returns (uint share); function harvestToken(address _token, uint _tokenID, uint _amount) external returns (uint); function harvestETH(uint _tokenID, uint _amount) external returns (uint); event Mint(address indexed from, address indexed to, uint share, uint id); event Boost(address indexed from, uint share, uint id); event HarvestToken(address token, uint harvestedAmount, uint harvestedShare, uint id); event HarvestETH(uint harvestedAmount, uint harvestedShare, uint id); }
// SPDX-License-Identifier: GPL-3.0-only pragma solidity ^0.8.19; import './IERC20Metadata.sol'; interface IXfaiPool is IERC20Metadata { function getXfaiCore() external view returns (address); function poolToken() external view returns (address); function initialize(address _token, address _xfaiFactory) external; function getStates() external view returns (uint, uint); function update(uint _reserveBalance, uint _weightBalance) external; function mint(address _to, uint _amount) external; function burn(address _to, uint _amount) external; function linkedTransfer(address _token, address _to, uint256 _value) external; event Sync(uint _reserve, uint _weight); event Write(uint _reserve, uint _weight, uint _blockTimestamp); }
// SPDX-License-Identifier: GPL-3.0-only pragma solidity ^0.8.19; interface IXfaiV0Core { function lpFee() external view returns (uint); function changeLpFee(uint _newFee) external; function infinityNFTFee() external view returns (uint); function changeInfinityNFTFee(uint _newFee) external; function getTotalFee() external view returns (uint); function pause(bool _p) external; function swap( address _token0, address _token1, address _to ) external returns (uint input, uint output); function flashLoan( address _token, uint _tokenAmount, uint _wethAmount, address _to, bytes calldata _data ) external; function mint(address _token, address _to) external returns (uint liquidity); function burn( address _token0, address _token1, address _to ) external returns (uint amount0, uint amount1); function skim(address _token, address _to) external; function sync(address _token) external; event ChangedOwner(address indexed owner); event Mint(address indexed sender, uint liquidity); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap(address indexed sender, uint input, uint output, address indexed to); event FlashLoan(address indexed sender, uint tokenAmount, uint wethAmount); event LpFeeChange(uint newFee); event InfinityNFTFeeChange(uint newFee); event Paused(bool p); }
// SPDX-License-Identifier: GPL-3.0-only pragma solidity ^0.8.19; interface IXfaiV0Periphery03 { function addLiquidity( address _to, address _token, uint _amountTokenDesired, uint _amountTokenMin, uint _amountETHMin, uint _deadline ) external payable returns (uint liquidity); function removeLiquidity( address _to, address _token0, address _token1, uint _liquidity, uint _amount0Min, uint _amount1Min, uint _deadline ) external returns (uint amount0, uint amount1); function swapExactTokensForTokens( address _to, address _token0, address _token1, uint _amount0In, uint _amount1OutMin, uint _deadline ) external returns (uint); function swapTokensForExactTokens( address _to, address _token0, address _token1, uint _amount1Out, uint _amount0InMax, uint _deadline ) external returns (uint); function swapExactETHForTokens( address _to, address _token, uint _amountOutMin, uint _deadline ) external payable returns (uint amountOut); function swapTokensForExactETH( address _to, address _token, uint _amountOut, uint _amountInMax, uint _deadline ) external returns (uint input); function swapExactTokensForETH( address _to, address _token, uint _amountIn, uint _amountOutMin, uint _deadline ) external returns (uint output); function swapETHForExactTokens( address _to, address _token, uint _amountOut, uint _deadline ) external payable returns (uint input); }
// SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.19; import './IERC20.sol'; library TransferHelper { function safeTransferFrom(address _token, address _from, address _to, uint256 _value) internal { require(_token.code.length > 0, 'Xfai: TRANSFERFROM_FAILED'); (bool success, bytes memory data) = _token.call( abi.encodeWithSelector(IERC20.transferFrom.selector, _from, _to, _value) ); require(success && (data.length == 0 || abi.decode(data, (bool))), 'Xfai: TRANSFERFROM_FAILED'); } function safeTransferETH(address _to, uint _value) internal { (bool success, ) = _to.call{value: _value}(new bytes(0)); require(success, 'Xfai: ETH_TRANSFER_FAILED'); } function safeTransfer(address _token, address _to, uint256 _value) internal { require(_token.code.length > 0, 'Xfai: TRANSFER_FAILED'); (bool success, bytes memory data) = _token.call( abi.encodeWithSelector(IERC20.transfer.selector, _to, _value) ); require(success && (data.length == 0 || abi.decode(data, (bool))), 'Xfai: TRANSFER_FAILED'); } }
// SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.19; import './IXfaiPool.sol'; library XfaiLibrary { /** * @notice Calculates the CREATE2 address for a pool without making any external calls * @param _token An ERC20 token address * @param _factory The factory contract of Xfai * @param _poolCodeHash The codehash of the Xfai pool contract * @return pool The deterministic pool address for a given _token */ function poolFor( address _token, address _factory, bytes32 _poolCodeHash ) internal pure returns (address pool) { pool = address( uint160( uint256( keccak256( abi.encodePacked( hex'ff', _factory, keccak256(abi.encodePacked(_token)), _poolCodeHash // init code hash ) ) ) ) ); } function getAdjustedOutput(uint _amountIn, uint _r, uint _w) internal pure returns (uint out) { out = (_amountIn * _w) / (_r + _amountIn); } function getAdjustedInput(uint _amountOut, uint _r, uint _w) internal pure returns (uint input) { input = ((_amountOut * _r) / (_w - _amountOut)) + 1; } function quote(uint _amountIn, uint _a, uint _b) internal pure returns (uint out) { out = (_amountIn * _a) / _b; } /** * @notice Calculates the adjusted price of an _amountIn (of a token from _pool0) in terms of the token in _pool1 * @dev either token0 or token1 must be xfETH * @param _reserve0 The reserve of _token0 (can be xfETH) * @param _reserve1 The reserve of _token1 (can be xfETH) * @param _amountIn The token input amount to _pool0 * @return output The token output between a token - xfETH interaction */ function getAmountOut( uint _reserve0, uint _reserve1, uint _amountIn, uint _totalFee ) public pure returns (uint output) { require(_amountIn > 0, 'Xfai: INSUFFICIENT_AMOUNT'); require(_reserve0 > 0, 'Xfai: INSUFFICIENT_LIQUIDITY'); require(_reserve1 > 0, 'Xfai: INSUFFICIENT_LIQUIDITY'); uint amountInWithFee = _amountIn * (10000 - _totalFee); uint numerator = amountInWithFee * _reserve1; output = numerator / (_reserve0 * 10000 + amountInWithFee); } /** * @notice Calculates the adjusted price of an _amountOut (of a token from _pool1) in terms of the token in _pool0 * @param _reserve0 The reserve of _token0 (can be xfETH) * @param _reserve1 The reserve of _token1 (can be xfETH) * @param _amountOut The token output amount from _pool0 * @return input The token input amount to _pool0 */ function getAmountIn( uint _reserve0, uint _reserve1, uint _amountOut, uint _totalFee ) public pure returns (uint input) { require(_amountOut > 0, 'Xfai: INSUFFICIENT_AMOUNT'); require(_reserve0 > 0, 'Xfai: INSUFFICIENT_LIQUIDITY'); require(_reserve1 > 0, 'Xfai: INSUFFICIENT_LIQUIDITY'); uint numerator = _amountOut * _reserve0 * 10000; uint denominator = (_reserve1 - _amountOut) * (10000 - _totalFee); input = (numerator / denominator) + 1; } /** * @notice Calculates the adjusted price of an _amountIn (of a token from _pool0) in terms of the token in _pool1 * @param _pool0 A pool address * @param _pool1 A pool address * @param _amountIn The token input amount to _pool0 * @return out1 The token output amount from _pool1 */ function getAmountsOut( address _pool0, address _pool1, uint _amountIn, uint _totalFee ) public view returns (uint out1) { (uint r0, uint w0) = IXfaiPool(_pool0).getStates(); (uint r1, uint w1) = IXfaiPool(_pool1).getStates(); uint weight0Out = getAmountOut(r0, w0, _amountIn, _totalFee); out1 = getAdjustedOutput(weight0Out, w1, r1); } /** * @notice Calculates the adjusted price of an _amountOut (of a token from _pool1) in terms of the token in _pool0 * @param _pool0 A pool address * @param _pool1 A pool address * @param _amountOut The token output amount from _pool1 * @return inp0 The token input amount to _pool0 */ function getAmountsIn( address _pool0, address _pool1, uint _amountOut, uint _totalFee ) public view returns (uint inp0) { (uint r0, uint w0) = IXfaiPool(_pool0).getStates(); (uint r1, uint w1) = IXfaiPool(_pool1).getStates(); uint weight0Out = getAdjustedInput(_amountOut, w1, r1); inp0 = getAmountIn(r0, w0, weight0Out, _totalFee); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_weth","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amountTokenDesired","type":"uint256"},{"internalType":"uint256","name":"_amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"_amountETHMin","type":"uint256"},{"internalType":"uint256","name":"_deadline","type":"uint256"}],"name":"addLiquidity","outputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"address","name":"_token0","type":"address"},{"internalType":"address","name":"_token1","type":"address"},{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_amount0Min","type":"uint256"},{"internalType":"uint256","name":"_amount1Min","type":"uint256"},{"internalType":"uint256","name":"_deadline","type":"uint256"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"amount0","type":"uint256"},{"internalType":"uint256","name":"amount1","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amountOut","type":"uint256"},{"internalType":"uint256","name":"_deadline","type":"uint256"}],"name":"swapETHForExactTokens","outputs":[{"internalType":"uint256","name":"input","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amountOutMin","type":"uint256"},{"internalType":"uint256","name":"_deadline","type":"uint256"}],"name":"swapExactETHForTokens","outputs":[{"internalType":"uint256","name":"output","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amountIn","type":"uint256"},{"internalType":"uint256","name":"_amountOutMin","type":"uint256"},{"internalType":"uint256","name":"_deadline","type":"uint256"}],"name":"swapExactTokensForETH","outputs":[{"internalType":"uint256","name":"output","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"address","name":"_token0","type":"address"},{"internalType":"address","name":"_token1","type":"address"},{"internalType":"uint256","name":"_amount0In","type":"uint256"},{"internalType":"uint256","name":"_amount1OutMin","type":"uint256"},{"internalType":"uint256","name":"_deadline","type":"uint256"}],"name":"swapExactTokensForTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amountOut","type":"uint256"},{"internalType":"uint256","name":"_amountInMax","type":"uint256"},{"internalType":"uint256","name":"_deadline","type":"uint256"}],"name":"swapTokensForExactETH","outputs":[{"internalType":"uint256","name":"input","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"address","name":"_token0","type":"address"},{"internalType":"address","name":"_token1","type":"address"},{"internalType":"uint256","name":"_amount1Out","type":"uint256"},{"internalType":"uint256","name":"_amount0InMax","type":"uint256"},{"internalType":"uint256","name":"_deadline","type":"uint256"}],"name":"swapTokensForExactTokens","outputs":[{"internalType":"uint256","name":"amount0In","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6101006040523480156200001257600080fd5b506040516200337c3803806200337c833981016040819052620000359162000149565b6001600160a01b038216608081905260408051637f86e3b960e01b81529051637f86e3b9916004808201926020929091908290030181865afa15801562000080573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000a6919062000181565b6001600160a01b0390811660a05281811660c0526040805163554dcae760e01b815290519184169163554dcae7916004808201926020929091908290030181865afa158015620000fa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001209190620001a6565b60e05250620001c09050565b80516001600160a01b03811681146200014457600080fd5b919050565b600080604083850312156200015d57600080fd5b62000168836200012c565b915062000178602084016200012c565b90509250929050565b6000602082840312156200019457600080fd5b6200019f826200012c565b9392505050565b600060208284031215620001b957600080fd5b5051919050565b60805160a05160c05160e05161305662000326600039600081816103d1015281816107ba01528181610be601528181610ea00152818161129f015281816112ec015281816115400152818161168a015281816116d701528181611a6d01528181611d4001528181611d920152612ab8015260008181609c01528181610247015281816105b601528181610c2e01528181610cb201528181610e2701528181611227015281816114c80152818161197101528181611cc801526128ac01526000818161087401528181610d2501528181610f5a015281816113a6015281816115fa0152818161171c01528181611fc80152612a710152600081816103b00152818161079901528181610bc501528181610e7f0152818161127e015281816112cb0152818161151f01528181611669015281816116b601528181611a4c01528181611d1f01528181611d7101528181612175015281816122440152612a9701526130566000f3fe60806040526004361061007f5760003560e01c8063515a22d31161004e578063515a22d31461013c578063b1f0d8401461015c578063cb7cfbe71461017c578063f448a616146101b157600080fd5b806312d4b07c146100d0578063293b15a9146100f65780633351733f14610109578063433182141461011c57600080fd5b366100cb573373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146100c9576100c9612cbd565b005b600080fd5b6100e36100de366004612d11565b6101d1565b6040519081526020015b60405180910390f35b6100e3610104366004612d11565b610547565b6100e3610117366004612d57565b610b50565b34801561012857600080fd5b506100e3610137366004612db0565b610db8565b34801561014857600080fd5b506100e3610157366004612e01565b6111b5565b34801561016857600080fd5b506100e3610177366004612db0565b611902565b34801561018857600080fd5b5061019c610197366004612e66565b611bca565b604080519283526020830191909152016100ed565b3480156101bd57600080fd5b506100e36101cc366004612e01565b611c57565b60008142811015610243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f58666169563050657269706865727930333a204558504952454400000000000060448201526064015b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156102b057600080fd5b505af11580156102c4573d6000803e3d6000fd5b50505050508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16036103a8576040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015234602483015282169063a9059cbb906044016020604051808303816000875af1158015610370573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103949190612ed4565b6103a0576103a0612cbd565b3492506104ad565b60006103f5877f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611e72565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301523460248301529192509083169063a9059cbb906044016020604051808303816000875af115801561046d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104919190612ed4565b61049d5761049d612cbd565b6104a882888a611f6e565b945050505b8483101561053d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f58666169563050657269706865727930333a20494e53554646494349454e545f60448201527f4f55545055545f414d4f554e5400000000000000000000000000000000000000606482015260840161023a565b5050949350505050565b600081428110156105b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f58666169563050657269706865727930333a2045585049524544000000000000604482015260640161023a565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff808216908716036107915734851115610685576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f58666169563050657269706865727930333a20494e53554646494349454e545f60448201527f494e5055545f414d4f554e540000000000000000000000000000000000000000606482015260840161023a565b8073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0866040518263ffffffff1660e01b81526004016000604051808303818588803b1580156106cd57600080fd5b505af11580156106e1573d6000803e3d6000fd5b50506040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152602482018a90528516935063a9059cbb925060440190506020604051808303816000875af115801561075c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107809190612ed4565b61078c5761078c612cbd565b610b35565b60006107de877f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611e72565b90506000808273ffffffffffffffffffffffffffffffffffffffff1663d8ab82746040518163ffffffff1660e01b81526004016040805180830381865afa15801561082d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108519190612efd565b915091507359eaeb942af4b7025481e3ef46265c5dad50d31563571fd01282848b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637ae316d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109019190612f21565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b1681526004810194909452602484019290925260448301526064820152608401602060405180830381865af4158015610967573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061098b9190612f21565b955034861115610a1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f58666169563050657269706865727930333a20494e53554646494349454e545f60448201527f494e5055545f414d4f554e540000000000000000000000000000000000000000606482015260840161023a565b8373ffffffffffffffffffffffffffffffffffffffff1663d0e30db0876040518263ffffffff1660e01b81526004016000604051808303818588803b158015610a6557600080fd5b505af1158015610a79573d6000803e3d6000fd5b50506040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018b90528816935063a9059cbb925060440190506020604051808303816000875af1158015610af4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b189190612ed4565b610b2457610b24612cbd565b610b2f848a8c611f6e565b50505050505b8234111561053d5761053d33610b4b8534612f69565b612040565b60008142811015610bbd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f58666169563050657269706865727930333a2045585049524544000000000000604482015260640161023a565b6000610c0a887f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611e72565b9050600080610c1c8a8a348b8b612129565b91509150610c2c8a3385856124bc565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015610c9457600080fd5b505af1158015610ca8573d6000803e3d6000fd5b5050505050610cd87f000000000000000000000000000000000000000000000000000000000000000084836126b6565b6040517fee1fe2ad00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b811660048301528c811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063ee1fe2ad906044016020604051808303816000875af1158015610d6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d929190612f21565b945080341115610daa57610daa33610b4b8334612f69565b505050509695505050505050565b60008142811015610e25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f58666169563050657269706865727930333a2045585049524544000000000000604482015260640161023a565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff80821690881603610e7757610e72813330896124bc565b611120565b6000610ec4887f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611e72565b90506000808273ffffffffffffffffffffffffffffffffffffffff1663d8ab82746040518163ffffffff1660e01b81526004016040805180830381865afa158015610f13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f379190612efd565b915091507359eaeb942af4b7025481e3ef46265c5dad50d31563571fd01283838c7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637ae316d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe79190612f21565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b1681526004810194909452602484019290925260448301526064820152608401602060405180830381865af415801561104d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110719190612f21565b955087861115611103576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f58666169563050657269706865727930333a20494e53554646494349454e545f60448201527f494e5055545f414d4f554e540000000000000000000000000000000000000000606482015260840161023a565b61110f8a3385896124bc565b61111a8a8530611f6e565b50505050505b6040517f2e1a7d4d0000000000000000000000000000000000000000000000000000000081526004810187905273ffffffffffffffffffffffffffffffffffffffff821690632e1a7d4d90602401600060405180830381600087803b15801561118857600080fd5b505af115801561119c573d6000803e3d6000fd5b505050506111aa8887612040565b505095945050505050565b60008142811015611222576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f58666169563050657269706865727930333a2045585049524544000000000000604482015260640161023a565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16036114c6576112c3887f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611e72565b9150611310887f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611e72565b90506000808373ffffffffffffffffffffffffffffffffffffffff1663d8ab82746040518163ffffffff1660e01b81526004016040805180830381865afa15801561135f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113839190612efd565b915091507359eaeb942af4b7025481e3ef46265c5dad50d31563571fd01282848c7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637ae316d06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561140f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114339190612f21565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b1681526004810194909452602484019290925260448301526064820152608401602060405180830381865af4158015611499573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bd9190612f21565b9550505061184c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff160361166357611564897f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611e72565b91506000808373ffffffffffffffffffffffffffffffffffffffff1663d8ab82746040518163ffffffff1660e01b81526004016040805180830381865afa1580156115b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d79190612efd565b915091507359eaeb942af4b7025481e3ef46265c5dad50d31563571fd01283838c7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637ae316d06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561140f573d6000803e3d6000fd5b6116ae897f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611e72565b91506116fb887f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611e72565b90507359eaeb942af4b7025481e3ef46265c5dad50d3156364e2be4483838a7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637ae316d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015611785573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a99190612f21565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b16815273ffffffffffffffffffffffffffffffffffffffff948516600482015293909216602484015260448301526064820152608401602060405180830381865af4158015611825573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118499190612f21565b93505b858411156118dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f58666169563050657269706865727930333a20494e53554646494349454e545f60448201527f494e5055545f414d4f554e540000000000000000000000000000000000000000606482015260840161023a565b6118e8893384876124bc565b6118f389898c611f6e565b50505050509695505050505050565b6000814281101561196f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f58666169563050657269706865727930333a2045585049524544000000000000604482015260640161023a565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff80821690881603611a44576119bc873330896124bc565b6040517f2e1a7d4d0000000000000000000000000000000000000000000000000000000081526004810187905273ffffffffffffffffffffffffffffffffffffffff821690632e1a7d4d90602401600060405180830381600087803b158015611a2457600080fd5b505af1158015611a38573d6000803e3d6000fd5b50505050859250611b30565b6000611a91887f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611e72565b9050611a9f8833838a6124bc565b611aaa888330611f6e565b6040517f2e1a7d4d0000000000000000000000000000000000000000000000000000000081526004810182905290955073ffffffffffffffffffffffffffffffffffffffff84169150632e1a7d4d90602401600060405180830381600087803b158015611b1657600080fd5b505af1158015611b2a573d6000803e3d6000fd5b50505050505b84831015611bc0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f58666169563050657269706865727930333a20494e53554646494349454e545f60448201527f4f55545055545f414d4f554e5400000000000000000000000000000000000000606482015260840161023a565b6111aa8884612040565b6000808242811015611c38576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f58666169563050657269706865727930333a2045585049524544000000000000604482015260640161023a565b611c468a8a8a8a8a8a6128a7565b909b909a5098505050505050505050565b60008142811015611cc4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f58666169563050657269706865727930333a2045585049524544000000000000604482015260640161023a565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1603611d6b57611d64877f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611e72565b9050611db9565b611db6887f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611e72565b90505b611dc5883383896124bc565b6000611dd289898c611f6e565b91505085811015611e65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f58666169563050657269706865727930333a20494e53554646494349454e545f60448201527f4f55545055545f414d4f554e5400000000000000000000000000000000000000606482015260840161023a565b9998505050505050505050565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606085901b16602082015260009083906034016040516020818303038152906040528051906020012083604051602001611f30939291907fff00000000000000000000000000000000000000000000000000000000000000815260609390931b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660018401526015830191909152603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120949350505050565b6040517f9331621200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301528381166024830152828116604483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063933162129060640160408051808303816000875af1158015612010573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120349190612efd565b90969095509350505050565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040516120779190612f82565b60006040518083038185875af1925050503d80600081146120b4576040519150601f19603f3d011682016040523d82523d6000602084013e6120b9565b606091505b5050905080612124576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f586661693a204554485f5452414e534645525f4641494c454400000000000000604482015260640161023a565b505050565b6040517fbbe4f6db00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152600091829182917f00000000000000000000000000000000000000000000000000000000000000009091169063bbe4f6db90602401602060405180830381865afa1580156121be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121e29190612fb1565b905073ffffffffffffffffffffffffffffffffffffffff81166122b4576040517f9049f9d200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff89811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639049f9d2906024016020604051808303816000875af115801561228d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b19190612fb1565b90505b6000808273ffffffffffffffffffffffffffffffffffffffff1663d8ab82746040518163ffffffff1660e01b81526004016040805180830381865afa158015612301573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123259190612efd565b91509150816000148015612337575080155b15612347578894508793506124af565b60006123548a8385612a4d565b90508881116123f857868110156123ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f58666169563050657269706865727930333a20494e53554646494349454e545f60448201527f315f414d4f554e54000000000000000000000000000000000000000000000000606482015260840161023a565b8995509350836124ad565b60006124058a8585612a4d565b90508a81111561241757612417612cbd565b888110156124a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f58666169563050657269706865727930333a20494e53554646494349454e545f60448201527f305f414d4f554e54000000000000000000000000000000000000000000000000606482015260840161023a565b95508894505b505b5050509550959350505050565b60008473ffffffffffffffffffffffffffffffffffffffff163b1161253d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f586661693a205452414e5346455246524f4d5f4641494c454400000000000000604482015260640161023a565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905291516000928392908816916125dc9190612f82565b6000604051808303816000865af19150503d8060008114612619576040519150601f19603f3d011682016040523d82523d6000602084013e61261e565b606091505b50915091508180156126485750805115806126485750808060200190518101906126489190612ed4565b6126ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f586661693a205452414e5346455246524f4d5f4641494c454400000000000000604482015260640161023a565b505050505050565b60008373ffffffffffffffffffffffffffffffffffffffff163b11612737576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f586661693a205452414e534645525f4641494c45440000000000000000000000604482015260640161023a565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905291516000928392908716916127ce9190612f82565b6000604051808303816000865af19150503d806000811461280b576040519150601f19603f3d011682016040523d82523d6000602084013e612810565b606091505b509150915081801561283a57508051158061283a57508080602001905181019061283a9190612ed4565b6128a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f586661693a205452414e534645525f4641494c45440000000000000000000000604482015260640161023a565b5050505050565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff8082169089160361294d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f58666169563050657269706865727930333a20494e56414c49445f544f4b454e604482015260640161023a565b8073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1603612a2d5761298e888288888830612a6c565b6040517f2e1a7d4d00000000000000000000000000000000000000000000000000000000815260048101829052919450925073ffffffffffffffffffffffffffffffffffffffff821690632e1a7d4d90602401600060405180830381600087803b1580156129fb57600080fd5b505af1158015612a0f573d6000803e3d6000fd5b50505050612a1d8983612040565b612a28888a856126b6565b612a41565b612a3b88888888888e612a6c565b90935091505b50965096945050505050565b600081612a5a8486612fce565b612a649190612fe5565b949350505050565b6000807f000000000000000000000000000000000000000000000000000000000000000081612adc8a7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611e72565b9050612aea8133848b6124bc565b6040517f45a11cec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b811660048301528a8116602483015286811660448301528316906345a11cec9060640160408051808303816000875af1158015612b67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b8b9190612efd565b909450925086841015612c20576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f58666169563050657269706865727930333a20494e53554646494349454e545f60448201527f414d4f554e543000000000000000000000000000000000000000000000000000606482015260840161023a565b85831015612cb0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f58666169563050657269706865727930333a20494e53554646494349454e545f60448201527f414d4f554e543100000000000000000000000000000000000000000000000000606482015260840161023a565b5050965096945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff81168114612d0e57600080fd5b50565b60008060008060808587031215612d2757600080fd5b8435612d3281612cec565b93506020850135612d4281612cec565b93969395505050506040820135916060013590565b60008060008060008060c08789031215612d7057600080fd5b8635612d7b81612cec565b95506020870135612d8b81612cec565b95989597505050506040840135936060810135936080820135935060a0909101359150565b600080600080600060a08688031215612dc857600080fd5b8535612dd381612cec565b94506020860135612de381612cec565b94979496505050506040830135926060810135926080909101359150565b60008060008060008060c08789031215612e1a57600080fd5b8635612e2581612cec565b95506020870135612e3581612cec565b94506040870135612e4581612cec565b959894975094956060810135955060808101359460a0909101359350915050565b600080600080600080600060e0888a031215612e8157600080fd5b8735612e8c81612cec565b96506020880135612e9c81612cec565b95506040880135612eac81612cec565b969995985095966060810135965060808101359560a0820135955060c0909101359350915050565b600060208284031215612ee657600080fd5b81518015158114612ef657600080fd5b9392505050565b60008060408385031215612f1057600080fd5b505080516020909101519092909150565b600060208284031215612f3357600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115612f7c57612f7c612f3a565b92915050565b6000825160005b81811015612fa35760208186018101518583015201612f89565b506000920191825250919050565b600060208284031215612fc357600080fd5b8151612ef681612cec565b8082028115828204841417612f7c57612f7c612f3a565b60008261301b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea2646970667358221220b4a875164cf612857c9da07799465c7c18f71c3826b75cccdf197f92399f620664736f6c63430008130033000000000000000000000000a5136ead459f0e61c99cec70fe8f5c24cf3eca26000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f
Deployed Bytecode
0x60806040526004361061007f5760003560e01c8063515a22d31161004e578063515a22d31461013c578063b1f0d8401461015c578063cb7cfbe71461017c578063f448a616146101b157600080fd5b806312d4b07c146100d0578063293b15a9146100f65780633351733f14610109578063433182141461011c57600080fd5b366100cb573373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f16146100c9576100c9612cbd565b005b600080fd5b6100e36100de366004612d11565b6101d1565b6040519081526020015b60405180910390f35b6100e3610104366004612d11565b610547565b6100e3610117366004612d57565b610b50565b34801561012857600080fd5b506100e3610137366004612db0565b610db8565b34801561014857600080fd5b506100e3610157366004612e01565b6111b5565b34801561016857600080fd5b506100e3610177366004612db0565b611902565b34801561018857600080fd5b5061019c610197366004612e66565b611bca565b604080519283526020830191909152016100ed565b3480156101bd57600080fd5b506100e36101cc366004612e01565b611c57565b60008142811015610243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f58666169563050657269706865727930333a204558504952454400000000000060448201526064015b60405180910390fd5b60007f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f90508073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156102b057600080fd5b505af11580156102c4573d6000803e3d6000fd5b50505050508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16036103a8576040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015234602483015282169063a9059cbb906044016020604051808303816000875af1158015610370573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103949190612ed4565b6103a0576103a0612cbd565b3492506104ad565b60006103f5877f000000000000000000000000a5136ead459f0e61c99cec70fe8f5c24cf3eca267fd29425d309539268aa2f934062f86ea332822e787dafc6baba7cfda029630330611e72565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301523460248301529192509083169063a9059cbb906044016020604051808303816000875af115801561046d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104919190612ed4565b61049d5761049d612cbd565b6104a882888a611f6e565b945050505b8483101561053d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f58666169563050657269706865727930333a20494e53554646494349454e545f60448201527f4f55545055545f414d4f554e5400000000000000000000000000000000000000606482015260840161023a565b5050949350505050565b600081428110156105b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f58666169563050657269706865727930333a2045585049524544000000000000604482015260640161023a565b7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f73ffffffffffffffffffffffffffffffffffffffff808216908716036107915734851115610685576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f58666169563050657269706865727930333a20494e53554646494349454e545f60448201527f494e5055545f414d4f554e540000000000000000000000000000000000000000606482015260840161023a565b8073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0866040518263ffffffff1660e01b81526004016000604051808303818588803b1580156106cd57600080fd5b505af11580156106e1573d6000803e3d6000fd5b50506040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152602482018a90528516935063a9059cbb925060440190506020604051808303816000875af115801561075c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107809190612ed4565b61078c5761078c612cbd565b610b35565b60006107de877f000000000000000000000000a5136ead459f0e61c99cec70fe8f5c24cf3eca267fd29425d309539268aa2f934062f86ea332822e787dafc6baba7cfda029630330611e72565b90506000808273ffffffffffffffffffffffffffffffffffffffff1663d8ab82746040518163ffffffff1660e01b81526004016040805180830381865afa15801561082d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108519190612efd565b915091507359eaeb942af4b7025481e3ef46265c5dad50d31563571fd01282848b7f0000000000000000000000008d58ee2d23f7920ea32e534aad8d6753c88bc01a73ffffffffffffffffffffffffffffffffffffffff16637ae316d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109019190612f21565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b1681526004810194909452602484019290925260448301526064820152608401602060405180830381865af4158015610967573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061098b9190612f21565b955034861115610a1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f58666169563050657269706865727930333a20494e53554646494349454e545f60448201527f494e5055545f414d4f554e540000000000000000000000000000000000000000606482015260840161023a565b8373ffffffffffffffffffffffffffffffffffffffff1663d0e30db0876040518263ffffffff1660e01b81526004016000604051808303818588803b158015610a6557600080fd5b505af1158015610a79573d6000803e3d6000fd5b50506040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018b90528816935063a9059cbb925060440190506020604051808303816000875af1158015610af4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b189190612ed4565b610b2457610b24612cbd565b610b2f848a8c611f6e565b50505050505b8234111561053d5761053d33610b4b8534612f69565b612040565b60008142811015610bbd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f58666169563050657269706865727930333a2045585049524544000000000000604482015260640161023a565b6000610c0a887f000000000000000000000000a5136ead459f0e61c99cec70fe8f5c24cf3eca267fd29425d309539268aa2f934062f86ea332822e787dafc6baba7cfda029630330611e72565b9050600080610c1c8a8a348b8b612129565b91509150610c2c8a3385856124bc565b7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f73ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015610c9457600080fd5b505af1158015610ca8573d6000803e3d6000fd5b5050505050610cd87f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f84836126b6565b6040517fee1fe2ad00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b811660048301528c811660248301527f0000000000000000000000008d58ee2d23f7920ea32e534aad8d6753c88bc01a169063ee1fe2ad906044016020604051808303816000875af1158015610d6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d929190612f21565b945080341115610daa57610daa33610b4b8334612f69565b505050509695505050505050565b60008142811015610e25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f58666169563050657269706865727930333a2045585049524544000000000000604482015260640161023a565b7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f73ffffffffffffffffffffffffffffffffffffffff80821690881603610e7757610e72813330896124bc565b611120565b6000610ec4887f000000000000000000000000a5136ead459f0e61c99cec70fe8f5c24cf3eca267fd29425d309539268aa2f934062f86ea332822e787dafc6baba7cfda029630330611e72565b90506000808273ffffffffffffffffffffffffffffffffffffffff1663d8ab82746040518163ffffffff1660e01b81526004016040805180830381865afa158015610f13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f379190612efd565b915091507359eaeb942af4b7025481e3ef46265c5dad50d31563571fd01283838c7f0000000000000000000000008d58ee2d23f7920ea32e534aad8d6753c88bc01a73ffffffffffffffffffffffffffffffffffffffff16637ae316d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe79190612f21565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b1681526004810194909452602484019290925260448301526064820152608401602060405180830381865af415801561104d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110719190612f21565b955087861115611103576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f58666169563050657269706865727930333a20494e53554646494349454e545f60448201527f494e5055545f414d4f554e540000000000000000000000000000000000000000606482015260840161023a565b61110f8a3385896124bc565b61111a8a8530611f6e565b50505050505b6040517f2e1a7d4d0000000000000000000000000000000000000000000000000000000081526004810187905273ffffffffffffffffffffffffffffffffffffffff821690632e1a7d4d90602401600060405180830381600087803b15801561118857600080fd5b505af115801561119c573d6000803e3d6000fd5b505050506111aa8887612040565b505095945050505050565b60008142811015611222576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f58666169563050657269706865727930333a2045585049524544000000000000604482015260640161023a565b6000807f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f73ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16036114c6576112c3887f000000000000000000000000a5136ead459f0e61c99cec70fe8f5c24cf3eca267fd29425d309539268aa2f934062f86ea332822e787dafc6baba7cfda029630330611e72565b9150611310887f000000000000000000000000a5136ead459f0e61c99cec70fe8f5c24cf3eca267fd29425d309539268aa2f934062f86ea332822e787dafc6baba7cfda029630330611e72565b90506000808373ffffffffffffffffffffffffffffffffffffffff1663d8ab82746040518163ffffffff1660e01b81526004016040805180830381865afa15801561135f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113839190612efd565b915091507359eaeb942af4b7025481e3ef46265c5dad50d31563571fd01282848c7f0000000000000000000000008d58ee2d23f7920ea32e534aad8d6753c88bc01a73ffffffffffffffffffffffffffffffffffffffff16637ae316d06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561140f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114339190612f21565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b1681526004810194909452602484019290925260448301526064820152608401602060405180830381865af4158015611499573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bd9190612f21565b9550505061184c565b7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff160361166357611564897f000000000000000000000000a5136ead459f0e61c99cec70fe8f5c24cf3eca267fd29425d309539268aa2f934062f86ea332822e787dafc6baba7cfda029630330611e72565b91506000808373ffffffffffffffffffffffffffffffffffffffff1663d8ab82746040518163ffffffff1660e01b81526004016040805180830381865afa1580156115b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d79190612efd565b915091507359eaeb942af4b7025481e3ef46265c5dad50d31563571fd01283838c7f0000000000000000000000008d58ee2d23f7920ea32e534aad8d6753c88bc01a73ffffffffffffffffffffffffffffffffffffffff16637ae316d06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561140f573d6000803e3d6000fd5b6116ae897f000000000000000000000000a5136ead459f0e61c99cec70fe8f5c24cf3eca267fd29425d309539268aa2f934062f86ea332822e787dafc6baba7cfda029630330611e72565b91506116fb887f000000000000000000000000a5136ead459f0e61c99cec70fe8f5c24cf3eca267fd29425d309539268aa2f934062f86ea332822e787dafc6baba7cfda029630330611e72565b90507359eaeb942af4b7025481e3ef46265c5dad50d3156364e2be4483838a7f0000000000000000000000008d58ee2d23f7920ea32e534aad8d6753c88bc01a73ffffffffffffffffffffffffffffffffffffffff16637ae316d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015611785573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a99190612f21565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b16815273ffffffffffffffffffffffffffffffffffffffff948516600482015293909216602484015260448301526064820152608401602060405180830381865af4158015611825573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118499190612f21565b93505b858411156118dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f58666169563050657269706865727930333a20494e53554646494349454e545f60448201527f494e5055545f414d4f554e540000000000000000000000000000000000000000606482015260840161023a565b6118e8893384876124bc565b6118f389898c611f6e565b50505050509695505050505050565b6000814281101561196f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f58666169563050657269706865727930333a2045585049524544000000000000604482015260640161023a565b7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f73ffffffffffffffffffffffffffffffffffffffff80821690881603611a44576119bc873330896124bc565b6040517f2e1a7d4d0000000000000000000000000000000000000000000000000000000081526004810187905273ffffffffffffffffffffffffffffffffffffffff821690632e1a7d4d90602401600060405180830381600087803b158015611a2457600080fd5b505af1158015611a38573d6000803e3d6000fd5b50505050859250611b30565b6000611a91887f000000000000000000000000a5136ead459f0e61c99cec70fe8f5c24cf3eca267fd29425d309539268aa2f934062f86ea332822e787dafc6baba7cfda029630330611e72565b9050611a9f8833838a6124bc565b611aaa888330611f6e565b6040517f2e1a7d4d0000000000000000000000000000000000000000000000000000000081526004810182905290955073ffffffffffffffffffffffffffffffffffffffff84169150632e1a7d4d90602401600060405180830381600087803b158015611b1657600080fd5b505af1158015611b2a573d6000803e3d6000fd5b50505050505b84831015611bc0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f58666169563050657269706865727930333a20494e53554646494349454e545f60448201527f4f55545055545f414d4f554e5400000000000000000000000000000000000000606482015260840161023a565b6111aa8884612040565b6000808242811015611c38576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f58666169563050657269706865727930333a2045585049524544000000000000604482015260640161023a565b611c468a8a8a8a8a8a6128a7565b909b909a5098505050505050505050565b60008142811015611cc4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f58666169563050657269706865727930333a2045585049524544000000000000604482015260640161023a565b60007f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1603611d6b57611d64877f000000000000000000000000a5136ead459f0e61c99cec70fe8f5c24cf3eca267fd29425d309539268aa2f934062f86ea332822e787dafc6baba7cfda029630330611e72565b9050611db9565b611db6887f000000000000000000000000a5136ead459f0e61c99cec70fe8f5c24cf3eca267fd29425d309539268aa2f934062f86ea332822e787dafc6baba7cfda029630330611e72565b90505b611dc5883383896124bc565b6000611dd289898c611f6e565b91505085811015611e65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f58666169563050657269706865727930333a20494e53554646494349454e545f60448201527f4f55545055545f414d4f554e5400000000000000000000000000000000000000606482015260840161023a565b9998505050505050505050565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606085901b16602082015260009083906034016040516020818303038152906040528051906020012083604051602001611f30939291907fff00000000000000000000000000000000000000000000000000000000000000815260609390931b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660018401526015830191909152603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120949350505050565b6040517f9331621200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301528381166024830152828116604483015260009182917f0000000000000000000000008d58ee2d23f7920ea32e534aad8d6753c88bc01a169063933162129060640160408051808303816000875af1158015612010573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120349190612efd565b90969095509350505050565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040516120779190612f82565b60006040518083038185875af1925050503d80600081146120b4576040519150601f19603f3d011682016040523d82523d6000602084013e6120b9565b606091505b5050905080612124576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f586661693a204554485f5452414e534645525f4641494c454400000000000000604482015260640161023a565b505050565b6040517fbbe4f6db00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152600091829182917f000000000000000000000000a5136ead459f0e61c99cec70fe8f5c24cf3eca269091169063bbe4f6db90602401602060405180830381865afa1580156121be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121e29190612fb1565b905073ffffffffffffffffffffffffffffffffffffffff81166122b4576040517f9049f9d200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff89811660048301527f000000000000000000000000a5136ead459f0e61c99cec70fe8f5c24cf3eca261690639049f9d2906024016020604051808303816000875af115801561228d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b19190612fb1565b90505b6000808273ffffffffffffffffffffffffffffffffffffffff1663d8ab82746040518163ffffffff1660e01b81526004016040805180830381865afa158015612301573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123259190612efd565b91509150816000148015612337575080155b15612347578894508793506124af565b60006123548a8385612a4d565b90508881116123f857868110156123ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f58666169563050657269706865727930333a20494e53554646494349454e545f60448201527f315f414d4f554e54000000000000000000000000000000000000000000000000606482015260840161023a565b8995509350836124ad565b60006124058a8585612a4d565b90508a81111561241757612417612cbd565b888110156124a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f58666169563050657269706865727930333a20494e53554646494349454e545f60448201527f305f414d4f554e54000000000000000000000000000000000000000000000000606482015260840161023a565b95508894505b505b5050509550959350505050565b60008473ffffffffffffffffffffffffffffffffffffffff163b1161253d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f586661693a205452414e5346455246524f4d5f4641494c454400000000000000604482015260640161023a565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905291516000928392908816916125dc9190612f82565b6000604051808303816000865af19150503d8060008114612619576040519150601f19603f3d011682016040523d82523d6000602084013e61261e565b606091505b50915091508180156126485750805115806126485750808060200190518101906126489190612ed4565b6126ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f586661693a205452414e5346455246524f4d5f4641494c454400000000000000604482015260640161023a565b505050505050565b60008373ffffffffffffffffffffffffffffffffffffffff163b11612737576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f586661693a205452414e534645525f4641494c45440000000000000000000000604482015260640161023a565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905291516000928392908716916127ce9190612f82565b6000604051808303816000865af19150503d806000811461280b576040519150601f19603f3d011682016040523d82523d6000602084013e612810565b606091505b509150915081801561283a57508051158061283a57508080602001905181019061283a9190612ed4565b6128a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f586661693a205452414e534645525f4641494c45440000000000000000000000604482015260640161023a565b5050505050565b6000807f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f73ffffffffffffffffffffffffffffffffffffffff8082169089160361294d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f58666169563050657269706865727930333a20494e56414c49445f544f4b454e604482015260640161023a565b8073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1603612a2d5761298e888288888830612a6c565b6040517f2e1a7d4d00000000000000000000000000000000000000000000000000000000815260048101829052919450925073ffffffffffffffffffffffffffffffffffffffff821690632e1a7d4d90602401600060405180830381600087803b1580156129fb57600080fd5b505af1158015612a0f573d6000803e3d6000fd5b50505050612a1d8983612040565b612a28888a856126b6565b612a41565b612a3b88888888888e612a6c565b90935091505b50965096945050505050565b600081612a5a8486612fce565b612a649190612fe5565b949350505050565b6000807f0000000000000000000000008d58ee2d23f7920ea32e534aad8d6753c88bc01a81612adc8a7f000000000000000000000000a5136ead459f0e61c99cec70fe8f5c24cf3eca267fd29425d309539268aa2f934062f86ea332822e787dafc6baba7cfda029630330611e72565b9050612aea8133848b6124bc565b6040517f45a11cec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b811660048301528a8116602483015286811660448301528316906345a11cec9060640160408051808303816000875af1158015612b67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b8b9190612efd565b909450925086841015612c20576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f58666169563050657269706865727930333a20494e53554646494349454e545f60448201527f414d4f554e543000000000000000000000000000000000000000000000000000606482015260840161023a565b85831015612cb0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f58666169563050657269706865727930333a20494e53554646494349454e545f60448201527f414d4f554e543100000000000000000000000000000000000000000000000000606482015260840161023a565b5050965096945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff81168114612d0e57600080fd5b50565b60008060008060808587031215612d2757600080fd5b8435612d3281612cec565b93506020850135612d4281612cec565b93969395505050506040820135916060013590565b60008060008060008060c08789031215612d7057600080fd5b8635612d7b81612cec565b95506020870135612d8b81612cec565b95989597505050506040840135936060810135936080820135935060a0909101359150565b600080600080600060a08688031215612dc857600080fd5b8535612dd381612cec565b94506020860135612de381612cec565b94979496505050506040830135926060810135926080909101359150565b60008060008060008060c08789031215612e1a57600080fd5b8635612e2581612cec565b95506020870135612e3581612cec565b94506040870135612e4581612cec565b959894975094956060810135955060808101359460a0909101359350915050565b600080600080600080600060e0888a031215612e8157600080fd5b8735612e8c81612cec565b96506020880135612e9c81612cec565b95506040880135612eac81612cec565b969995985095966060810135965060808101359560a0820135955060c0909101359350915050565b600060208284031215612ee657600080fd5b81518015158114612ef657600080fd5b9392505050565b60008060408385031215612f1057600080fd5b505080516020909101519092909150565b600060208284031215612f3357600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115612f7c57612f7c612f3a565b92915050565b6000825160005b81811015612fa35760208186018101518583015201612f89565b506000920191825250919050565b600060208284031215612fc357600080fd5b8151612ef681612cec565b8082028115828204841417612f7c57612f7c612f3a565b60008261301b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea2646970667358221220b4a875164cf612857c9da07799465c7c18f71c3826b75cccdf197f92399f620664736f6c63430008130033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000a5136ead459f0e61c99cec70fe8f5c24cf3eca26000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f
-----Decoded View---------------
Arg [0] : _factory (address): 0xa5136eAd459F0E61C99Cec70fe8F5C24cF3ecA26
Arg [1] : _weth (address): 0xe5D7C2a44FfDDf6b295A15c148167daaAf5Cf34f
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000a5136ead459f0e61c99cec70fe8f5c24cf3eca26
Arg [1] : 000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f
Deployed Bytecode Sourcemap
526:16416:14:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1607:10;:18;1621:4;1607:18;;1600:26;;;;:::i;:::-;526:16416;;;;;11715:644;;;;;;:::i;:::-;;:::i;:::-;;;1038:25:15;;;1026:2;1011:18;11715:644:14;;;;;;;;15946:994;;;;;;:::i;:::-;;:::i;3655:820::-;;;;;;:::i;:::-;;:::i;13067:865::-;;;;;;;;;;-1:-1:-1;13067:865:14;;;;;:::i;:::-;;:::i;9812:1325::-;;;;;;;;;;-1:-1:-1;9812:1325:14;;;;;:::i;:::-;;:::i;14595:800::-;;;;;;;;;;-1:-1:-1;14595:800:14;;;;;:::i;:::-;;:::i;6955:404::-;;;;;;;;;;-1:-1:-1;6955:404:14;;;;;:::i;:::-;;:::i;:::-;;;;4066:25:15;;;4122:2;4107:18;;4100:34;;;;4039:18;6955:404:14;3892:248:15;8386:662:14;;;;;;;;;;-1:-1:-1;8386:662:14;;;;;:::i;:::-;;:::i;11715:644::-;11884:11;11864:9;1163:15;1151:8;:27;;1143:66;;;;;;;4347:2:15;1143:66:14;;;4329:21:15;4386:2;4366:18;;;4359:30;4425:28;4405:18;;;4398:56;4471:18;;1143:66:14;;;;;;;;;11903:13:::1;11919:4;11903:20;;11935:5;11929:20;;;11957:9;11929:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;11989:5;11979:15;;:6;:15;;::::0;11975:293:::1;;12011:37;::::0;;;;:21:::1;4692:55:15::0;;;12011:37:14::1;::::0;::::1;4674:74:15::0;12038:9:14::1;4764:18:15::0;;;4757:34;12011:21:14;::::1;::::0;::::1;::::0;4647:18:15;;12011:37:14::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12004:45;;;;:::i;:::-;12066:9;12057:18;;11975:293;;;12096:12;12111:50;12131:6;12139:7;12148:12;12111:19;:50::i;:::-;12176:38;::::0;;;;:21:::1;4692:55:15::0;;;12176:38:14::1;::::0;::::1;4674:74:15::0;12204:9:14::1;4764:18:15::0;;;4757:34;12096:65:14;;-1:-1:-1;12176:21:14;;::::1;::::0;::::1;::::0;4647:18:15;;12176:38:14::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12169:46;;;;:::i;:::-;12236:25;12242:5;12249:6;12257:3;12236:5;:25::i;:::-;12223:38:::0;-1:-1:-1;;;11975:293:14::1;12291:13;12281:6;:23;;12273:81;;;::::0;::::1;::::0;;5286:2:15;12273:81:14::1;::::0;::::1;5268:21:15::0;5325:2;5305:18;;;5298:30;5364:34;5344:18;;;5337:62;5435:15;5415:18;;;5408:43;5468:19;;12273:81:14::1;5084:409:15::0;12273:81:14::1;11897:462;11715:644:::0;;;;;;;:::o;15946:994::-;16112:10;16092:9;1163:15;1151:8;:27;;1143:66;;;;;;;4347:2:15;1143:66:14;;;4329:21:15;4386:2;4366:18;;;4359:30;4425:28;4405:18;;;4398:56;4471:18;;1143:66:14;4145:350:15;1143:66:14;16146:4:::1;16160:15;::::0;;::::1;::::0;;::::1;::::0;16156:659:::1;;16207:9;16193:10;:23;;16185:80;;;::::0;::::1;::::0;;5700:2:15;16185:80:14::1;::::0;::::1;5682:21:15::0;5739:2;5719:18;;;5712:30;5778:34;5758:18;;;5751:62;5849:14;5829:18;;;5822:42;5881:19;;16185:80:14::1;5498:408:15::0;16185:80:14::1;16279:5;16273:20;;;16301:10;16273:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;16329:38:14::1;::::0;;;;:21:::1;4692:55:15::0;;;16329:38:14::1;::::0;::::1;4674:74:15::0;4764:18;;;4757:34;;;16329:21:14;::::1;::::0;-1:-1:-1;16329:21:14::1;::::0;-1:-1:-1;4647:18:15;;;-1:-1:-1;16329:38:14::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16322:46;;;;:::i;:::-;16156:659;;;16389:12;16404:50;16424:6;16432:7;16441:12;16404:19;:50::i;:::-;16389:65;;16463:6;16471::::0;16491:4:::1;16481:25;;;:27;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16462:46;;;;16524:11;:23;16548:1;16551;16554:10;16578:4;16566:29;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16524:74;::::0;;::::1;::::0;;;;;;::::1;::::0;::::1;6589:25:15::0;;;;6630:18;;;6623:34;;;;6673:18;;;6666:34;6716:18;;;6709:34;6561:19;;16524:74:14::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16516:82;;16623:9;16614:5;:18;;16606:75;;;::::0;::::1;::::0;;5700:2:15;16606:75:14::1;::::0;::::1;5682:21:15::0;5739:2;5719:18;;;5712:30;5778:34;5758:18;;;5751:62;5849:14;5829:18;;;5822:42;5881:19;;16606:75:14::1;5498:408:15::0;16606:75:14::1;16695:5;16689:20;;;16717:5;16689:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;16740:34:14::1;::::0;;;;:21:::1;4692:55:15::0;;;16740:34:14::1;::::0;::::1;4674:74:15::0;4764:18;;;4757:34;;;16740:21:14;::::1;::::0;-1:-1:-1;16740:21:14::1;::::0;-1:-1:-1;4647:18:15;;;-1:-1:-1;16740:34:14::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16733:42;;;;:::i;:::-;16783:25;16789:5;16796:6;16804:3;16783:5;:25::i;:::-;;;16381:434;;;16156:659;16867:5;16855:9;:17;16851:84;;;16874:61;16905:10;16917:17;16929:5:::0;16917:9:::1;:17;:::i;:::-;16874:30;:61::i;3655:820::-:0;3871:14;3851:9;1163:15;1151:8;:27;;1143:66;;;;;;;4347:2:15;1143:66:14;;;4329:21:15;4386:2;4366:18;;;4359:30;4425:28;4405:18;;;4398:56;4471:18;;1143:66:14;4145:350:15;1143:66:14;3893:12:::1;3908:50;3928:6;3936:7;3945:12;3908:19;:50::i;:::-;3893:65;;3965:12;3979::::0;3995:128:::1;4023:6;4037:19;4064:9;4081:15;4104:13;3995:20;:128::i;:::-;3964:159;;;;4129:66;4161:6;4169:10;4181:4;4187:7;4129:31;:66::i;:::-;4207:4;4201:19;;;4228:7;4201:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;4244:48;4272:4;4278;4284:7;4244:27;:48::i;:::-;4310:35;::::0;;;;:22:::1;7329:15:15::0;;;4310:35:14::1;::::0;::::1;7311:34:15::0;7381:15;;;7361:18;;;7354:43;4322:4:14::1;4310:22;::::0;::::1;::::0;7223:18:15;;4310:35:14::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4298:47;;4398:7;4386:9;:19;4382:88;;;4407:63;4438:10;4450:19;4462:7:::0;4450:9:::1;:19;:::i;4407:63::-;3887:588;;;3655:820:::0;;;;;;;;;:::o;13067:865::-;13248:10;13228:9;1163:15;1151:8;:27;;1143:66;;;;;;;4347:2:15;1143:66:14;;;4329:21:15;4386:2;4366:18;;;4359:30;4425:28;4405:18;;;4398:56;4471:18;;1143:66:14;4145:350:15;1143:66:14;13282:4:::1;13296:15;::::0;;::::1;::::0;;::::1;::::0;13292:544:::1;;13321:77;13353:5;13360:10;13380:4;13387:10;13321:31;:77::i;:::-;13292:544;;;13419:12;13434:50;13454:6;13462:7;13471:12;13434:19;:50::i;:::-;13419:65;;13493:6;13501::::0;13521:4:::1;13511:25;;;:27;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13492:46;;;;13554:11;:23;13578:1;13581;13584:10;13608:4;13596:29;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13554:74;::::0;;::::1;::::0;;;;;;::::1;::::0;::::1;6589:25:15::0;;;;6630:18;;;6623:34;;;;6673:18;;;6666:34;6716:18;;;6709:34;6561:19;;13554:74:14::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13546:82;;13653:12;13644:5;:21;;13636:78;;;::::0;::::1;::::0;;5700:2:15;13636:78:14::1;::::0;::::1;5682:21:15::0;5739:2;5719:18;;;5712:30;5778:34;5758:18;;;5751:62;5849:14;5829:18;;;5822:42;5881:19;;13636:78:14::1;5498:408:15::0;13636:78:14::1;13722:64;13754:6;13762:10;13774:4;13780:5;13722:31;:64::i;:::-;13794:35;13800:6;13808:5;13823:4;13794:5;:35::i;:::-;;;13411:425;;;13292:544;13841:33;::::0;;;;::::1;::::0;::::1;1038:25:15::0;;;13841:21:14::1;::::0;::::1;::::0;::::1;::::0;1011:18:15;;13841:33:14::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;13880:47;13911:3;13916:10;13880:30;:47::i;:::-;13260:672;13067:865:::0;;;;;;;;:::o;9812:1325::-;10020:14;10000:9;1163:15;1151:8;:27;;1143:66;;;;;;;4347:2:15;1143:66:14;;;4329:21:15;4386:2;4366:18;;;4359:30;4425:28;4405:18;;;4398:56;4471:18;;1143:66:14;4145:350:15;1143:66:14;10042:13:::1;10061::::0;10095:4:::1;10084:15;;:7;:15;;::::0;10080:854:::1;;10117:51;10137:7;10146;10155:12;10117:19;:51::i;:::-;10109:59;;10184:51;10204:7;10213;10222:12;10184:19;:51::i;:::-;10176:59;;10244:6;10252::::0;10272:5:::1;10262:26;;;:28;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10243:47;;;;10310:11;:23;10334:1;10337;10340:11;10365:4;10353:29;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10310:75;::::0;;::::1;::::0;;;;;;::::1;::::0;::::1;6589:25:15::0;;;;6630:18;;;6623:34;;;;6673:18;;;6666:34;6716:18;;;6709:34;6561:19;;10310:75:14::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10298:87;;10101:291;;10080:854;;;10413:4;10402:15;;:7;:15;;::::0;10398:536:::1;;10435:51;10455:7;10464;10473:12;10435:19;:51::i;:::-;10427:59;;10495:6;10503::::0;10523:5:::1;10513:26;;;:28;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10494:47;;;;10561:11;:23;10585:1;10588;10591:11;10616:4;10604:29;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;10398:536;10665:51;10685:7;10694;10703:12;10665:19;:51::i;:::-;10657:59;;10732:51;10752:7;10761;10770:12;10732:19;:51::i;:::-;10724:59;;10803:11;:24;10837:5;10852;10867:11;10900:4;10888:29;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10803:124;::::0;;::::1;::::0;;;;;;7657:42:15;7726:15;;;10803:124:14::1;::::0;::::1;7708:34:15::0;7778:15;;;;7758:18;;;7751:43;7810:18;;;7803:34;7853:18;;;7846:34;7619:19;;10803:124:14::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10791:136;;10398:536;10960:13;10947:9;:26;;10939:83;;;::::0;::::1;::::0;;5700:2:15;10939:83:14::1;::::0;::::1;5682:21:15::0;5739:2;5719:18;;;5712:30;5778:34;5758:18;;;5751:62;5849:14;5829:18;;;5822:42;5881:19;;10939:83:14::1;5498:408:15::0;10939:83:14::1;11028:70;11060:7;11069:10;11081:5;11088:9;11028:31;:70::i;:::-;11104:28;11110:7;11119;11128:3;11104:5;:28::i;:::-;;;10036:1101;;9812:1325:::0;;;;;;;;;:::o;14595:800::-;14776:11;14756:9;1163:15;1151:8;:27;;1143:66;;;;;;;4347:2:15;1143:66:14;;;4329:21:15;4386:2;4366:18;;;4359:30;4425:28;4405:18;;;4398:56;4471:18;;1143:66:14;4145:350:15;1143:66:14;14811:4:::1;14825:15;::::0;;::::1;::::0;;::::1;::::0;14821:434:::1;;14850:77;14882:6;14890:10;14910:4;14917:9;14850:31;:77::i;:::-;14935:32;::::0;;;;::::1;::::0;::::1;1038:25:15::0;;;14935:21:14::1;::::0;::::1;::::0;::::1;::::0;1011:18:15;;14935:32:14::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;14984:9;14975:18;;14821:434;;;15014:12;15029:50;15049:6;15057:7;15066:12;15029:19;:50::i;:::-;15014:65;;15087:68;15119:6;15127:10;15139:4;15145:9;15087:31;:68::i;:::-;15176:35;15182:6;15190:5;15205:4;15176:5;:35::i;:::-;15219:29;::::0;;;;::::1;::::0;::::1;1038:25:15::0;;;15163:48:14;;-1:-1:-1;15219:21:14::1;::::0;::::1;::::0;-1:-1:-1;15219:21:14::1;::::0;1011:18:15;;15219:29:14::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;15006:249;14821:434;15278:13;15268:6;:23;;15260:81;;;::::0;::::1;::::0;;5286:2:15;15260:81:14::1;::::0;::::1;5268:21:15::0;5325:2;5305:18;;;5298:30;5364:34;5344:18;;;5337:62;5435:15;5415:18;;;5408:43;5468:19;;15260:81:14::1;5084:409:15::0;15260:81:14::1;15347:43;15378:3;15383:6;15347:30;:43::i;6955:404::-:0;7173:12;7187;7153:9;1163:15;1151:8;:27;;1143:66;;;;;;;4347:2:15;1143:66:14;;;4329:21:15;4386:2;4366:18;;;4359:30;4425:28;4405:18;;;4398:56;4471:18;;1143:66:14;4145:350:15;1143:66:14;7228:126:::1;7259:3;7270:7;7285;7300:10;7318:11;7337;7228:23;:126::i;:::-;7207:147:::0;;;;-1:-1:-1;6955:404:14;-1:-1:-1;;;;;;;;;6955:404:14:o;8386:662::-;8594:4;8574:9;1163:15;1151:8;:27;;1143:66;;;;;;;4347:2:15;1143:66:14;;;4329:21:15;4386:2;4366:18;;;4359:30;4425:28;4405:18;;;4398:56;4471:18;;1143:66:14;4145:350:15;1143:66:14;8606:12:::1;8639:4;8628:15;;:7;:15;;::::0;8624:173:::1;;8660:51;8680:7;8689;8698:12;8660:19;:51::i;:::-;8653:58;;8624:173;;;8739:51;8759:7;8768;8777:12;8739:19;:51::i;:::-;8732:58;;8624:173;8802:70;8834:7;8843:10;8855:4;8861:10;8802:31;:70::i;:::-;8881:15;8900:28;8906:7;8915;8924:3;8900:5;:28::i;:::-;8878:50;;;8956:14;8942:10;:28;;8934:86;;;::::0;::::1;::::0;;5286:2:15;8934:86:14::1;::::0;::::1;5268:21:15::0;5325:2;5305:18;;;5298:30;5364:34;5344:18;;;5337:62;5435:15;5415:18;;;5408:43;5468:19;;8934:86:14::1;5084:409:15::0;8934:86:14::1;9033:10:::0;8386:662;-1:-1:-1;;;;;;;;;8386:662:14:o;440:430:13:-;743:24;;8053:66:15;8040:2;8036:15;;;8032:88;743:24:13;;;8020:101:15;553:12:13;;709:8;;8137:12:15;;743:24:13;;;;;;;;;;;;733:35;;;;;;784:13;654:175;;;;;;;;;8458:66:15;8446:79;;8562:2;8558:15;;;;8575:66;8554:88;8550:1;8541:11;;8534:109;8668:2;8659:12;;8652:28;;;;8705:2;8696:12;;8689:28;8742:2;8733:12;;8160:591;654:175:13;;;;;;;;;;;;;;631:210;;654:175;631:210;;;;;440:430;-1:-1:-1;;;;440:430:13:o;7462:195:14:-;7607:45;;;;;:22;9037:15:15;;;7607:45:14;;;9019:34:15;9089:15;;;9069:18;;;9062:43;9141:15;;;9121:18;;;9114:43;7558:10:14;;;;7619:4;7607:22;;;;8931:18:15;;7607:45:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7589:63;;;;-1:-1:-1;7462:195:14;-1:-1:-1;;;;7462:195:14:o;524:178:12:-;633:12;;;591;633;;;;;;;;;609:8;;;;625:6;;609:37;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;590:56;;;660:7;652:45;;;;;;;9976:2:15;652:45:12;;;9958:21:15;10015:2;9995:18;;;9988:30;10054:27;10034:18;;;10027:55;10099:18;;652:45:12;9774:349:15;652:45:12;584:118;524:178;;:::o;1720:1285:14:-;1958:37;;;;;:29;10292:55:15;;;1958:37:14;;;10274:74:15;-1:-1:-1;;;;;;1971:7:14;1958:29;;;;;;10247:18:15;;1958:37:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1943:52;-1:-1:-1;2005:18:14;;;2001:135;;2089:40;;;;;:32;10292:55:15;;;2089:40:14;;;10274:74:15;2102:7:14;2089:32;;;;10247:18:15;;2089:40:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2082:47;;2001:135;2142:12;2156:11;2181:4;2171:25;;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2141:57;;;;2208:7;2219:1;2208:12;:27;;;;-1:-1:-1;2224:11:14;;2208:27;2204:797;;;2274:19;;-1:-1:-1;2295:18:14;;-1:-1:-1;2204:797:14;;;2335:22;2360:55;2378:19;2399:6;2407:7;2360:17;:55::i;:::-;2335:80;;2448:18;2427:17;:39;2423:572;;2507:14;2486:17;:35;;2478:88;;;;;;;10817:2:15;2478:88:14;;;10799:21:15;10856:2;10836:18;;;10829:30;10895:34;10875:18;;;10868:62;10966:10;10946:18;;;10939:38;10994:19;;2478:88:14;10615:404:15;2478:88:14;2605:19;;-1:-1:-1;2626:17:14;-1:-1:-1;2626:17:14;2423:572;;;2669:23;2695:54;2713:18;2733:7;2742:6;2695:17;:54::i;:::-;2669:80;;2788:19;2766:18;:41;;2759:49;;;;:::i;:::-;2848:15;2826:18;:37;;2818:90;;;;;;;11226:2:15;2818:90:14;;;11208:21:15;11265:2;11245:18;;;11238:30;11304:34;11284:18;;;11277:62;11375:10;11355:18;;;11348:38;11403:19;;2818:90:14;11024:404:15;2818:90:14;2947:18;-1:-1:-1;2967:18:14;;-1:-1:-1;2423:572:14;2327:674;2204:797;1937:1068;;;1720:1285;;;;;;;;:::o;114:406:12:-;244:1;223:6;:18;;;:22;215:60;;;;;;;11635:2:15;215:60:12;;;11617:21:15;11674:2;11654:18;;;11647:30;11713:27;11693:18;;;11686:55;11758:18;;215:60:12;11433:349:15;215:60:12;336:72;;;317:11;12068:15:15;;;336:72:12;;;12050:34:15;12120:15;;;12100:18;;;12093:43;12152:18;;;;12145:34;;;336:72:12;;;;;;;;;;11962:18:15;;;;336:72:12;;;;;;;;;359:28;336:72;;;317:97;;-1:-1:-1;;;;317:11:12;;;;:97;;336:72;317:97;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;281:133;;;;428:7;:57;;;;-1:-1:-1;440:11:12;;:16;;:44;;;471:4;460:24;;;;;;;;;;;;:::i;:::-;420:95;;;;;;;11635:2:15;420:95:12;;;11617:21:15;11674:2;11654:18;;;11647:30;11713:27;11693:18;;;11686:55;11758:18;;420:95:12;11433:349:15;420:95:12;209:311;;114:406;;;;:::o;706:368::-;817:1;796:6;:18;;;:22;788:56;;;;;;;12392:2:15;788:56:12;;;12374:21:15;12431:2;12411:18;;;12404:30;12470:23;12450:18;;;12443:51;12511:18;;788:56:12;12190:345:15;788:56:12;905:61;;;886:11;4692:55:15;;;905:61:12;;;4674:74:15;4764:18;;;;4757:34;;;905:61:12;;;;;;;;;;4647:18:15;;;;905:61:12;;;;;;;;;928:24;905:61;;;886:86;;-1:-1:-1;;;;886:11:12;;;;:86;;905:61;886:86;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;850:122;;;;986:7;:57;;;;-1:-1:-1;998:11:12;;:16;;:44;;;1029:4;1018:24;;;;;;;;;;;;:::i;:::-;978:91;;;;;;;12392:2:15;978:91:12;;;12374:21:15;12431:2;12411:18;;;12404:30;12470:23;12450:18;;;12443:51;12511:18;;978:91:12;12190:345:15;978:91:12;782:292;;706:368;;;:::o;5139:870:14:-;5317:12;;5372:4;5404:21;;;;;;;;5396:66;;;;;;;12742:2:15;5396:66:14;;;12724:21:15;;;12761:18;;;12754:30;12820:34;12800:18;;;12793:62;12872:18;;5396:66:14;12540:356:15;5396:66:14;5483:10;5472:21;;:7;:21;;;5468:537;;5524:146;5550:7;5567:10;5587;5607:11;5628;5657:4;5524:16;:146::i;:::-;5678:35;;;;;;;;1038:25:15;;;5503:167:14;;-1:-1:-1;5503:167:14;-1:-1:-1;5678:26:14;;;;;;1011:18:15;;5678:35:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5721:44;5752:3;5757:7;5721:30;:44::i;:::-;5773:50;5801:7;5810:3;5815:7;5773:27;:50::i;:::-;5468:537;;;5865:133;5891:7;5908;5925:10;5945:11;5966;5987:3;5865:16;:133::i;:::-;5844:154;;-1:-1:-1;5844:154:14;-1:-1:-1;5468:537:14;5345:664;5139:870;;;;;;;;;:::o;1186:120:13:-;1258:8;1299:2;1281:14;1293:2;1281:9;:14;:::i;:::-;1280:21;;;;:::i;:::-;1274:27;1186:120;-1:-1:-1;;;;1186:120:13:o;4512:623:14:-;4683:12;;4733:4;4683:12;4772:51;4792:7;4801;4810:12;4772:19;:51::i;:::-;4757:66;;4829:68;4861:4;4867:10;4879:5;4886:10;4829:31;:68::i;:::-;4924:46;;;;;:23;9037:15:15;;;4924:46:14;;;9019:34:15;9089:15;;;9069:18;;;9062:43;9141:15;;;9121:18;;;9114:43;4924:23:14;;;;;8931:18:15;;4924:46:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4903:67;;-1:-1:-1;4903:67:14;-1:-1:-1;4984:22:14;;;;4976:74;;;;;;;13555:2:15;4976:74:14;;;13537:21:15;13594:2;13574:18;;;13567:30;13633:34;13613:18;;;13606:62;13704:9;13684:18;;;13677:37;13731:19;;4976:74:14;13353:403:15;4976:74:14;5075:11;5064:7;:22;;5056:74;;;;;;;13963:2:15;5056:74:14;;;13945:21:15;14002:2;13982:18;;;13975:30;14041:34;14021:18;;;14014:62;14112:9;14092:18;;;14085:37;14139:19;;5056:74:14;13761:403:15;5056:74:14;4711:424;;4512:623;;;;;;;;;:::o;14:184:15:-;66:77;63:1;56:88;163:4;160:1;153:15;187:4;184:1;177:15;203:154;289:42;282:5;278:54;271:5;268:65;258:93;;347:1;344;337:12;258:93;203:154;:::o;362:525::-;448:6;456;464;472;525:3;513:9;504:7;500:23;496:33;493:53;;;542:1;539;532:12;493:53;581:9;568:23;600:31;625:5;600:31;:::i;:::-;650:5;-1:-1:-1;707:2:15;692:18;;679:32;720:33;679:32;720:33;:::i;:::-;362:525;;772:7;;-1:-1:-1;;;;826:2:15;811:18;;798:32;;877:2;862:18;849:32;;362:525::o;1074:663::-;1178:6;1186;1194;1202;1210;1218;1271:3;1259:9;1250:7;1246:23;1242:33;1239:53;;;1288:1;1285;1278:12;1239:53;1327:9;1314:23;1346:31;1371:5;1346:31;:::i;:::-;1396:5;-1:-1:-1;1453:2:15;1438:18;;1425:32;1466:33;1425:32;1466:33;:::i;:::-;1074:663;;1518:7;;-1:-1:-1;;;;1572:2:15;1557:18;;1544:32;;1623:2;1608:18;;1595:32;;1674:3;1659:19;;1646:33;;-1:-1:-1;1726:3:15;1711:19;;;1698:33;;-1:-1:-1;1074:663:15:o;1742:594::-;1837:6;1845;1853;1861;1869;1922:3;1910:9;1901:7;1897:23;1893:33;1890:53;;;1939:1;1936;1929:12;1890:53;1978:9;1965:23;1997:31;2022:5;1997:31;:::i;:::-;2047:5;-1:-1:-1;2104:2:15;2089:18;;2076:32;2117:33;2076:32;2117:33;:::i;:::-;1742:594;;2169:7;;-1:-1:-1;;;;2223:2:15;2208:18;;2195:32;;2274:2;2259:18;;2246:32;;2325:3;2310:19;;;2297:33;;-1:-1:-1;1742:594:15:o;2341:736::-;2445:6;2453;2461;2469;2477;2485;2538:3;2526:9;2517:7;2513:23;2509:33;2506:53;;;2555:1;2552;2545:12;2506:53;2594:9;2581:23;2613:31;2638:5;2613:31;:::i;:::-;2663:5;-1:-1:-1;2720:2:15;2705:18;;2692:32;2733:33;2692:32;2733:33;:::i;:::-;2785:7;-1:-1:-1;2844:2:15;2829:18;;2816:32;2857:33;2816:32;2857:33;:::i;:::-;2341:736;;;;-1:-1:-1;2909:7:15;;2963:2;2948:18;;2935:32;;-1:-1:-1;3014:3:15;2999:19;;2986:33;;3066:3;3051:19;;;3038:33;;-1:-1:-1;2341:736:15;-1:-1:-1;;2341:736:15:o;3082:805::-;3195:6;3203;3211;3219;3227;3235;3243;3296:3;3284:9;3275:7;3271:23;3267:33;3264:53;;;3313:1;3310;3303:12;3264:53;3352:9;3339:23;3371:31;3396:5;3371:31;:::i;:::-;3421:5;-1:-1:-1;3478:2:15;3463:18;;3450:32;3491:33;3450:32;3491:33;:::i;:::-;3543:7;-1:-1:-1;3602:2:15;3587:18;;3574:32;3615:33;3574:32;3615:33;:::i;:::-;3082:805;;;;-1:-1:-1;3667:7:15;;3721:2;3706:18;;3693:32;;-1:-1:-1;3772:3:15;3757:19;;3744:33;;3824:3;3809:19;;3796:33;;-1:-1:-1;3876:3:15;3861:19;;;3848:33;;-1:-1:-1;3082:805:15;-1:-1:-1;;3082:805:15:o;4802:277::-;4869:6;4922:2;4910:9;4901:7;4897:23;4893:32;4890:52;;;4938:1;4935;4928:12;4890:52;4970:9;4964:16;5023:5;5016:13;5009:21;5002:5;4999:32;4989:60;;5045:1;5042;5035:12;4989:60;5068:5;4802:277;-1:-1:-1;;;4802:277:15:o;5911:245::-;5990:6;5998;6051:2;6039:9;6030:7;6026:23;6022:32;6019:52;;;6067:1;6064;6057:12;6019:52;-1:-1:-1;;6090:16:15;;6146:2;6131:18;;;6125:25;6090:16;;6125:25;;-1:-1:-1;5911:245:15:o;6161:184::-;6231:6;6284:2;6272:9;6263:7;6259:23;6255:32;6252:52;;;6300:1;6297;6290:12;6252:52;-1:-1:-1;6323:16:15;;6161:184;-1:-1:-1;6161:184:15:o;6754:::-;6806:77;6803:1;6796:88;6903:4;6900:1;6893:15;6927:4;6924:1;6917:15;6943:128;7010:9;;;7031:11;;;7028:37;;;7045:18;;:::i;:::-;6943:128;;;;:::o;9357:412::-;9486:3;9524:6;9518:13;9549:1;9559:129;9573:6;9570:1;9567:13;9559:129;;;9671:4;9655:14;;;9651:25;;9645:32;9632:11;;;9625:53;9588:12;9559:129;;;-1:-1:-1;9743:1:15;9707:16;;9732:13;;;-1:-1:-1;9707:16:15;9357:412;-1:-1:-1;9357:412:15:o;10359:251::-;10429:6;10482:2;10470:9;10461:7;10457:23;10453:32;10450:52;;;10498:1;10495;10488:12;10450:52;10530:9;10524:16;10549:31;10574:5;10549:31;:::i;12901:168::-;12974:9;;;13005;;13022:15;;;13016:22;;13002:37;12992:71;;13043:18;;:::i;13074:274::-;13114:1;13140;13130:189;;13175:77;13172:1;13165:88;13276:4;13273:1;13266:15;13304:4;13301:1;13294:15;13130:189;-1:-1:-1;13333:9:15;;13074:274::o
Swarm Source
ipfs://b4a875164cf612857c9da07799465c7c18f71c3826b75cccdf197f92399f6206
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
LINEA | 100.00% | $0.999987 | 250 | $250 |
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.