Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 2,060 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Swap Exact Token... | 21008970 | 82 days ago | IN | 0 ETH | 0.00096521 | ||||
Remove Liquidity... | 20739281 | 120 days ago | IN | 0 ETH | 0.00028533 | ||||
Swap ETH For Exa... | 20545925 | 147 days ago | IN | 0.02564648 ETH | 0.00010716 | ||||
Swap ETH For Exa... | 20445711 | 161 days ago | IN | 0.00736017 ETH | 0.00015069 | ||||
Swap ETH For Exa... | 20423622 | 164 days ago | IN | 0.00000507 ETH | 0.00035806 | ||||
Remove Liquidity... | 20321961 | 178 days ago | IN | 0 ETH | 0.00216982 | ||||
Add Liquidity ET... | 20321910 | 178 days ago | IN | 0.00467467 ETH | 0.00137779 | ||||
Swap Exact ETH F... | 20321906 | 178 days ago | IN | 0.00320467 ETH | 0.00086608 | ||||
Swap Exact ETH F... | 20321850 | 178 days ago | IN | 0.0015 ETH | 0.00126885 | ||||
Swap Exact ETH F... | 20047819 | 217 days ago | IN | 0.05409459 ETH | 0.00102124 | ||||
Swap Exact Token... | 20006903 | 222 days ago | IN | 0 ETH | 0.00129787 | ||||
Swap Exact Token... | 20006057 | 222 days ago | IN | 0 ETH | 0.00123254 | ||||
Swap Exact Token... | 20000143 | 223 days ago | IN | 0 ETH | 0.00065722 | ||||
Swap Exact Token... | 19994135 | 224 days ago | IN | 0 ETH | 0.00067695 | ||||
Swap Exact Token... | 19986726 | 225 days ago | IN | 0 ETH | 0.00100888 | ||||
Swap Exact Token... | 19986202 | 225 days ago | IN | 0 ETH | 0.00091779 | ||||
Swap Exact Token... | 19984362 | 225 days ago | IN | 0 ETH | 0.0028297 | ||||
Swap Exact Token... | 19982882 | 226 days ago | IN | 0 ETH | 0.00169495 | ||||
Remove Liquidity... | 19971649 | 227 days ago | IN | 0 ETH | 0.00177169 | ||||
Swap Exact ETH F... | 19963065 | 228 days ago | IN | 0.02195516 ETH | 0.00256226 | ||||
Swap Exact Token... | 19918874 | 235 days ago | IN | 0 ETH | 0.00246618 | ||||
Swap Exact ETH F... | 19880368 | 240 days ago | IN | 0.1937 ETH | 0.00068081 | ||||
Swap Exact ETH F... | 19878174 | 240 days ago | IN | 0.045 ETH | 0.00065867 | ||||
Swap Exact ETH F... | 19850034 | 244 days ago | IN | 0.13436159 ETH | 0.00035452 | ||||
Remove Liquidity... | 19850022 | 244 days ago | IN | 0 ETH | 0.00074997 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
21008970 | 82 days ago | 0.01129809 ETH | ||||
21008970 | 82 days ago | 0.01129809 ETH | ||||
20739281 | 120 days ago | 0.00293786 ETH | ||||
20739281 | 120 days ago | 0.00293786 ETH | ||||
20545925 | 147 days ago | 0.00001194 ETH | ||||
20545925 | 147 days ago | 0.02563453 ETH | ||||
20445711 | 161 days ago | 0.00000342 ETH | ||||
20445711 | 161 days ago | 0.00735674 ETH | ||||
20423622 | 164 days ago | 0 ETH | ||||
20423622 | 164 days ago | 0.00000507 ETH | ||||
20321961 | 178 days ago | 0.00467467 ETH | ||||
20321961 | 178 days ago | 0.00467467 ETH | ||||
20321910 | 178 days ago | 0.00467467 ETH | ||||
20321906 | 178 days ago | 0.00320467 ETH | ||||
20321850 | 178 days ago | 0.0015 ETH | ||||
20047819 | 217 days ago | 0.05409459 ETH | ||||
20006903 | 222 days ago | 0.20055726 ETH | ||||
20006903 | 222 days ago | 0.20055726 ETH | ||||
20006057 | 222 days ago | 0.11218607 ETH | ||||
20006057 | 222 days ago | 0.11218607 ETH | ||||
20000143 | 223 days ago | 0.11708099 ETH | ||||
20000143 | 223 days ago | 0.11708099 ETH | ||||
19994135 | 224 days ago | 0.11962267 ETH | ||||
19994135 | 224 days ago | 0.11962267 ETH | ||||
19986726 | 225 days ago | 0.12537862 ETH |
Loading...
Loading
Contract Name:
GroveRouter
Compiler Version
v0.6.6+commit.6c089d02
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-01-11 */ // File: @openzeppelin/[email protected]/utils/Context.sol pragma solidity >=0.6.0 <0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File: @openzeppelin/[email protected]/access/Ownable.sol pragma solidity >=0.6.0 <0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File: pancake/interfaces/IWETH.sol pragma solidity >=0.5.0; interface IWETH { function deposit() external payable; function transfer(address to, uint256 value) external returns (bool); function withdraw(uint256) external; } // File: pancake/interfaces/IERC20.sol pragma solidity >=0.5.0; interface IERC20 { event Approval(address indexed owner, address indexed spender, uint256 value); event Transfer(address indexed from, address indexed to, uint256 value); function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); } // File: pancake/interfaces/IGrovePair.sol pragma solidity >=0.5.0; interface IGrovePair { event Approval(address indexed owner, address indexed spender, uint256 value); event Transfer(address indexed from, address indexed to, uint256 value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn(address indexed sender, uint256 amount0, uint256 amount1, address indexed to); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns ( uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast ); function price0CumulativeLast() external view returns (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } // File: pancake/libraries/SafeMath.sol pragma solidity >=0.5.0 <0.7.0; // a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math) library SafeMath { function add(uint256 x, uint256 y) internal pure returns (uint256 z) { require((z = x + y) >= x, "ds-math-add-overflow"); } function sub(uint256 x, uint256 y) internal pure returns (uint256 z) { require((z = x - y) <= x, "ds-math-sub-underflow"); } function mul(uint256 x, uint256 y) internal pure returns (uint256 z) { require(y == 0 || (z = x * y) / y == x, "ds-math-mul-overflow"); } } // File: pancake/interfaces/IGroveFactory.sol pragma solidity >=0.5.0; interface IGroveFactory { event PairCreated(address indexed token0, address indexed token1, address pair, uint256); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; function INIT_CODE_PAIR_HASH() external view returns (bytes32); } // File: pancake/libraries/GroveLibrary.sol pragma solidity >=0.5.0; library GroveLibrary { using SafeMath for uint256; // returns sorted token addresses, used to handle return values from pairs sorted in this order function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) { require(tokenA != tokenB, "GroveLibrary: IDENTICAL_ADDRESSES"); (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA); require(token0 != address(0), "GroveLibrary: ZERO_ADDRESS"); } // calculates the CREATE2 address for a pair without making any external calls function pairFor( address factory, address tokenA, address tokenB ) internal pure returns (address pair) { (address token0, address token1) = sortTokens(tokenA, tokenB); pair = address( uint256( keccak256( abi.encodePacked( hex"ff", factory, keccak256(abi.encodePacked(token0, token1)), hex"52e084bf7808906b58ff24c0cd6e39d5b5e8b86a688b1efe65844b85542587ae" // init code hash ) ) ) ); } // fetches and sorts the reserves for a pair function getReserves( address factory, address tokenA, address tokenB ) internal view returns (uint256 reserveA, uint256 reserveB) { (address token0, ) = sortTokens(tokenA, tokenB); pairFor(factory, tokenA, tokenB); (uint256 reserve0, uint256 reserve1, ) = IGrovePair(pairFor(factory, tokenA, tokenB)).getReserves(); (reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0); } // given some amount of an asset and pair reserves, returns an equivalent amount of the other asset function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) internal pure returns (uint256 amountB) { require(amountA > 0, "GroveLibrary: INSUFFICIENT_AMOUNT"); require(reserveA > 0 && reserveB > 0, "GroveLibrary: INSUFFICIENT_LIQUIDITY"); amountB = amountA.mul(reserveB) / reserveA; } // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) internal pure returns (uint256 amountOut) { require(amountIn > 0, "GroveLibrary: INSUFFICIENT_INPUT_AMOUNT"); require(reserveIn > 0 && reserveOut > 0, "GroveLibrary: INSUFFICIENT_LIQUIDITY"); uint256 amountInWithFee = amountIn.mul(9930); uint256 numerator = amountInWithFee.mul(reserveOut); uint256 denominator = reserveIn.mul(10000).add(amountInWithFee); amountOut = numerator / denominator; } // given an output amount of an asset and pair reserves, returns a required input amount of the other asset function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) internal pure returns (uint256 amountIn) { require(amountOut > 0, "GroveLibrary: INSUFFICIENT_OUTPUT_AMOUNT"); require(reserveIn > 0 && reserveOut > 0, "GroveLibrary: INSUFFICIENT_LIQUIDITY"); uint256 numerator = reserveIn.mul(amountOut).mul(10000); uint256 denominator = reserveOut.sub(amountOut).mul(9930); amountIn = (numerator / denominator).add(1); } // performs chained getAmountOut calculations on any number of pairs function getAmountsOut( address factory, uint256 amountIn, address[] memory path ) internal view returns (uint256[] memory amounts) { require(path.length >= 2, "GroveLibrary: INVALID_PATH"); amounts = new uint256[](path.length); amounts[0] = amountIn; for (uint256 i; i < path.length - 1; i++) { (uint256 reserveIn, uint256 reserveOut) = getReserves(factory, path[i], path[i + 1]); amounts[i + 1] = getAmountOut(amounts[i], reserveIn, reserveOut); } } // performs chained getAmountIn calculations on any number of pairs function getAmountsIn( address factory, uint256 amountOut, address[] memory path ) internal view returns (uint256[] memory amounts) { require(path.length >= 2, "GroveLibrary: INVALID_PATH"); amounts = new uint256[](path.length); amounts[amounts.length - 1] = amountOut; for (uint256 i = path.length - 1; i > 0; i--) { (uint256 reserveIn, uint256 reserveOut) = getReserves(factory, path[i - 1], path[i]); amounts[i - 1] = getAmountIn(amounts[i], reserveIn, reserveOut); } } } // File: pancake/interfaces/IGroveRouter01.sol pragma solidity >=0.6.2; interface IGroveRouter01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } // File: pancake/interfaces/IGroveRouter02.sol pragma solidity >=0.6.2; interface IGroveRouter02 is IGroveRouter01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } // File: @uniswap/lib/contracts/libraries/TransferHelper.sol pragma solidity >=0.6.0; // helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false library TransferHelper { function safeApprove( address token, address to, uint256 value ) internal { // bytes4(keccak256(bytes('approve(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value)); require( success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper::safeApprove: approve failed' ); } function safeTransfer( address token, address to, uint256 value ) internal { // bytes4(keccak256(bytes('transfer(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value)); require( success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper::safeTransfer: transfer failed' ); } function safeTransferFrom( address token, address from, address to, uint256 value ) internal { // bytes4(keccak256(bytes('transferFrom(address,address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value)); require( success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper::transferFrom: transferFrom failed' ); } function safeTransferETH(address to, uint256 value) internal { (bool success, ) = to.call{value: value}(new bytes(0)); require(success, 'TransferHelper::safeTransferETH: ETH transfer failed'); } } // File: pancake/GroveRouter.sol pragma solidity =0.6.6; contract GroveRouter is IGroveRouter02, Ownable { using SafeMath for uint256; address public immutable override factory; address public immutable override WETH; mapping(address => bool) private _isTokenWhiteList; modifier ensure(uint256 deadline) { require(deadline >= block.timestamp, "GroveRouter: EXPIRED"); _; } // Copied from: @openzeppelin/contracts/security/ReentrancyGuard.sol uint256 private constant _NOT_ENTERED = 0; uint256 private constant _ENTERED = 1; uint256 private _status; modifier nonReentrant() { require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); _status = _ENTERED; _; _status = _NOT_ENTERED; } constructor(address _factory, address _WETH) public { factory = _factory; WETH = _WETH; } receive() external payable { assert(msg.sender == WETH); // only accept ETH via fallback from the WETH contract } // **** ADD LIQUIDITY **** function _addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin ) internal virtual returns (uint256 amountA, uint256 amountB) { // create the pair if it doesn't exist yet if (IGroveFactory(factory).getPair(tokenA, tokenB) == address(0)) { IGroveFactory(factory).createPair(tokenA, tokenB); } (uint256 reserveA, uint256 reserveB) = GroveLibrary.getReserves( factory, tokenA, tokenB ); if (reserveA == 0 && reserveB == 0) { (amountA, amountB) = (amountADesired, amountBDesired); } else { uint256 amountBOptimal = GroveLibrary.quote( amountADesired, reserveA, reserveB ); if (amountBOptimal <= amountBDesired) { require( amountBOptimal >= amountBMin, "GroveRouter: INSUFFICIENT_B_AMOUNT" ); (amountA, amountB) = (amountADesired, amountBOptimal); } else { uint256 amountAOptimal = GroveLibrary.quote( amountBDesired, reserveB, reserveA ); assert(amountAOptimal <= amountADesired); require( amountAOptimal >= amountAMin, "GroveRouter: INSUFFICIENT_A_AMOUNT" ); (amountA, amountB) = (amountAOptimal, amountBDesired); } } } function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external virtual override ensure(deadline) returns ( uint256 amountA, uint256 amountB, uint256 liquidity ) { require(_isTokenWhiteList[tokenA], "Token not in White List!"); require(_isTokenWhiteList[tokenB], "Token not in White List!"); (amountA, amountB) = _addLiquidity( tokenA, tokenB, amountADesired, amountBDesired, amountAMin, amountBMin ); address pair = GroveLibrary.pairFor(factory, tokenA, tokenB); TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA); TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB); liquidity = IGrovePair(pair).mint(to); } function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable virtual override ensure(deadline) returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ) { require(_isTokenWhiteList[token], "Token not in White List!"); (amountToken, amountETH) = _addLiquidity( token, WETH, amountTokenDesired, msg.value, amountTokenMin, amountETHMin ); address pair = GroveLibrary.pairFor(factory, token, WETH); TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken); IWETH(WETH).deposit{value: amountETH}(); assert(IWETH(WETH).transfer(pair, amountETH)); liquidity = IGrovePair(pair).mint(to); // refund dust eth, if any if (msg.value > amountETH) TransferHelper.safeTransferETH(msg.sender, msg.value - amountETH); } // **** REMOVE LIQUIDITY **** function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) public virtual override ensure(deadline) returns (uint256 amountA, uint256 amountB) { require(_isTokenWhiteList[tokenA], "Token not in White List!"); require(_isTokenWhiteList[tokenB], "Token not in White List!"); address pair = GroveLibrary.pairFor(factory, tokenA, tokenB); IGrovePair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair (uint256 amount0, uint256 amount1) = IGrovePair(pair).burn(to); (address token0, ) = GroveLibrary.sortTokens(tokenA, tokenB); (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0); require(amountA >= amountAMin, "GroveRouter: INSUFFICIENT_A_AMOUNT"); require(amountB >= amountBMin, "GroveRouter: INSUFFICIENT_B_AMOUNT"); } function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) public virtual override ensure(deadline) returns (uint256 amountToken, uint256 amountETH) { require(_isTokenWhiteList[token], "Token not in White List!"); (amountToken, amountETH) = removeLiquidity( token, WETH, liquidity, amountTokenMin, amountETHMin, address(this), deadline ); TransferHelper.safeTransfer(token, to, amountToken); IWETH(WETH).withdraw(amountETH); TransferHelper.safeTransferETH(to, amountETH); } function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external virtual override returns (uint256 amountA, uint256 amountB) { address pair = GroveLibrary.pairFor(factory, tokenA, tokenB); uint256 value = approveMax ? uint256(-1) : liquidity; IGrovePair(pair).permit( msg.sender, address(this), value, deadline, v, r, s ); (amountA, amountB) = removeLiquidity( tokenA, tokenB, liquidity, amountAMin, amountBMin, to, deadline ); } function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external virtual override returns (uint256 amountToken, uint256 amountETH) { address pair = GroveLibrary.pairFor(factory, token, WETH); uint256 value = approveMax ? uint256(-1) : liquidity; IGrovePair(pair).permit( msg.sender, address(this), value, deadline, v, r, s ); (amountToken, amountETH) = removeLiquidityETH( token, liquidity, amountTokenMin, amountETHMin, to, deadline ); } // **** REMOVE LIQUIDITY (supporting fee-on-transfer tokens) **** function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) public virtual override ensure(deadline) returns (uint256 amountETH) { (, amountETH) = removeLiquidity( token, WETH, liquidity, amountTokenMin, amountETHMin, address(this), deadline ); TransferHelper.safeTransfer( token, to, IERC20(token).balanceOf(address(this)) ); IWETH(WETH).withdraw(amountETH); TransferHelper.safeTransferETH(to, amountETH); } function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external virtual override returns (uint256 amountETH) { address pair = GroveLibrary.pairFor(factory, token, WETH); uint256 value = approveMax ? uint256(-1) : liquidity; IGrovePair(pair).permit( msg.sender, address(this), value, deadline, v, r, s ); amountETH = removeLiquidityETHSupportingFeeOnTransferTokens( token, liquidity, amountTokenMin, amountETHMin, to, deadline ); } // **** SWAP **** // requires the initial amount to have already been sent to the first pair function _swap( uint256[] memory amounts, address[] memory path, address _to ) internal virtual { for (uint256 i; i < path.length - 1; i++) { (address input, address output) = (path[i], path[i + 1]); (address token0, ) = GroveLibrary.sortTokens(input, output); uint256 amountOut = amounts[i + 1]; (uint256 amount0Out, uint256 amount1Out) = input == token0 ? (uint256(0), amountOut) : (amountOut, uint256(0)); address to = i < path.length - 2 ? GroveLibrary.pairFor(factory, output, path[i + 2]) : _to; IGrovePair(GroveLibrary.pairFor(factory, input, output)).swap( amount0Out, amount1Out, to, new bytes(0) ); } } function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external virtual override ensure(deadline) returns (uint256[] memory amounts) { amounts = GroveLibrary.getAmountsOut(factory, amountIn, path); require( amounts[amounts.length - 1] >= amountOutMin, "GroveRouter: INSUFFICIENT_OUTPUT_AMOUNT" ); TransferHelper.safeTransferFrom( path[0], msg.sender, GroveLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, to); } function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external virtual override ensure(deadline) returns (uint256[] memory amounts) { amounts = GroveLibrary.getAmountsIn(factory, amountOut, path); require( amounts[0] <= amountInMax, "GroveRouter: EXCESSIVE_INPUT_AMOUNT" ); TransferHelper.safeTransferFrom( path[0], msg.sender, GroveLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, to); } function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable virtual override ensure(deadline) returns (uint256[] memory amounts) { require(path[0] == WETH, "GroveRouter: INVALID_PATH"); amounts = GroveLibrary.getAmountsOut(factory, msg.value, path); require( amounts[amounts.length - 1] >= amountOutMin, "GroveRouter: INSUFFICIENT_OUTPUT_AMOUNT" ); IWETH(WETH).deposit{value: amounts[0]}(); assert( IWETH(WETH).transfer( GroveLibrary.pairFor(factory, path[0], path[1]), amounts[0] ) ); _swap(amounts, path, to); } function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external virtual override ensure(deadline) returns (uint256[] memory amounts) { require(path[path.length - 1] == WETH, "GroveRouter: INVALID_PATH"); amounts = GroveLibrary.getAmountsIn(factory, amountOut, path); require( amounts[0] <= amountInMax, "GroveRouter: EXCESSIVE_INPUT_AMOUNT" ); TransferHelper.safeTransferFrom( path[0], msg.sender, GroveLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, address(this)); IWETH(WETH).withdraw(amounts[amounts.length - 1]); TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]); } function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external virtual override ensure(deadline) returns (uint256[] memory amounts) { require(path[path.length - 1] == WETH, "GroveRouter: INVALID_PATH"); amounts = GroveLibrary.getAmountsOut(factory, amountIn, path); require( amounts[amounts.length - 1] >= amountOutMin, "GroveRouter: INSUFFICIENT_OUTPUT_AMOUNT" ); TransferHelper.safeTransferFrom( path[0], msg.sender, GroveLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, address(this)); IWETH(WETH).withdraw(amounts[amounts.length - 1]); TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]); } function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable virtual override ensure(deadline) returns (uint256[] memory amounts) { require(path[0] == WETH, "GroveRouter: INVALID_PATH"); amounts = GroveLibrary.getAmountsIn(factory, amountOut, path); require(amounts[0] <= msg.value, "GroveRouter: EXCESSIVE_INPUT_AMOUNT"); IWETH(WETH).deposit{value: amounts[0]}(); assert( IWETH(WETH).transfer( GroveLibrary.pairFor(factory, path[0], path[1]), amounts[0] ) ); _swap(amounts, path, to); // refund dust eth, if any if (msg.value > amounts[0]) TransferHelper.safeTransferETH(msg.sender, msg.value - amounts[0]); } // **** SWAP (supporting fee-on-transfer tokens) **** // requires the initial amount to have already been sent to the first pair function _swapSupportingFeeOnTransferTokens( address[] memory path, address _to ) internal virtual { for (uint256 i; i < path.length - 1; i++) { (address input, address output) = (path[i], path[i + 1]); (address token0, ) = GroveLibrary.sortTokens(input, output); IGrovePair pair = IGrovePair( GroveLibrary.pairFor(factory, input, output) ); uint256 amountInput; uint256 amountOutput; { // scope to avoid stack too deep errors (uint256 reserve0, uint256 reserve1, ) = pair.getReserves(); (uint256 reserveInput, uint256 reserveOutput) = input == token0 ? (reserve0, reserve1) : (reserve1, reserve0); amountInput = IERC20(input).balanceOf(address(pair)).sub( reserveInput ); amountOutput = GroveLibrary.getAmountOut( amountInput, reserveInput, reserveOutput ); } (uint256 amount0Out, uint256 amount1Out) = input == token0 ? (uint256(0), amountOutput) : (amountOutput, uint256(0)); address to = i < path.length - 2 ? GroveLibrary.pairFor(factory, output, path[i + 2]) : _to; pair.swap(amount0Out, amount1Out, to, new bytes(0)); } } function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external virtual override ensure(deadline) { TransferHelper.safeTransferFrom( path[0], msg.sender, GroveLibrary.pairFor(factory, path[0], path[1]), amountIn ); uint256 balanceBefore = IERC20(path[path.length - 1]).balanceOf(to); _swapSupportingFeeOnTransferTokens(path, to); require( IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin, "GroveRouter: INSUFFICIENT_OUTPUT_AMOUNT" ); } function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable virtual override ensure(deadline) { require(path[0] == WETH, "GroveRouter: INVALID_PATH"); uint256 amountIn = msg.value; IWETH(WETH).deposit{value: amountIn}(); assert( IWETH(WETH).transfer( GroveLibrary.pairFor(factory, path[0], path[1]), amountIn ) ); uint256 balanceBefore = IERC20(path[path.length - 1]).balanceOf(to); _swapSupportingFeeOnTransferTokens(path, to); require( IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin, "GroveRouter: INSUFFICIENT_OUTPUT_AMOUNT" ); } function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external virtual override ensure(deadline) { require(path[path.length - 1] == WETH, "GroveRouter: INVALID_PATH"); TransferHelper.safeTransferFrom( path[0], msg.sender, GroveLibrary.pairFor(factory, path[0], path[1]), amountIn ); _swapSupportingFeeOnTransferTokens(path, address(this)); uint256 amountOut = IERC20(WETH).balanceOf(address(this)); require( amountOut >= amountOutMin, "GroveRouter: INSUFFICIENT_OUTPUT_AMOUNT" ); IWETH(WETH).withdraw(amountOut); TransferHelper.safeTransferETH(to, amountOut); } // **** LIBRARY FUNCTIONS **** function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) public pure virtual override returns (uint256 amountB) { return GroveLibrary.quote(amountA, reserveA, reserveB); } function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) public pure virtual override returns (uint256 amountOut) { return GroveLibrary.getAmountOut(amountIn, reserveIn, reserveOut); } function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) public pure virtual override returns (uint256 amountIn) { return GroveLibrary.getAmountIn(amountOut, reserveIn, reserveOut); } function getAmountsOut(uint256 amountIn, address[] memory path) public view virtual override returns (uint256[] memory amounts) { return GroveLibrary.getAmountsOut(factory, amountIn, path); } function getAmountsIn(uint256 amountOut, address[] memory path) public view virtual override returns (uint256[] memory amounts) { return GroveLibrary.getAmountsIn(factory, amountOut, path); } function excludeFromWhiteList(address token) public onlyOwner { _isTokenWhiteList[token] = false; } function includeInWhiteList(address token) public onlyOwner { _isTokenWhiteList[token] = true; } function checkWhiteList(address token) public view returns (bool) { return _isTokenWhiteList[token]; } function withdraw( address tokenAddr, address payable to, uint256 amount ) external nonReentrant onlyOwner { require(to != address(0), "invalid recipient"); if (tokenAddr == address(0)) { (bool success, ) = to.call{value: amount}(""); require(success, "transfer BNB failed"); } else { IERC20(tokenAddr).transfer(to, amount); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WETH","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"amountADesired","type":"uint256"},{"internalType":"uint256","name":"amountBDesired","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"checkWhiteList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"excludeFromWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountIn","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsIn","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsOut","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"includeInWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"reserveA","type":"uint256"},{"internalType":"uint256","name":"reserveB","type":"uint256"}],"name":"quote","outputs":[{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETHSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermit","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermitSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityWithPermit","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapETHForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETHSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddr","type":"address"},{"internalType":"address payable","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040523480156200001157600080fd5b506040516200519238038062005192833981810160405260408110156200003757600080fd5b5080516020909101516000620000556001600160e01b03620000be16565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001600160601b0319606092831b8116608052911b1660a052620000c2565b3390565b60805160601c60a05160601c614fa2620001f0600039806101ec5280610f195280610f54528061104b5280611269528061167652806117dc5280611c4f5280611d495280611dff5280611ecd5280612013528061209b528061230d5280612388528061243752806125035280612598528061260c5280612e9e5280613324528061337a52806133ae528061342252806135c25280613705528061378d5250806110d952806111b052806113b252806113eb5280611526528061170452806117ba528061192a5280611f6052806120cd5280612230528061263e528061294d5280612bce5280612bf75280612e7c528061309f5280613358528061365552806137bf52806140505280614093528061437a52806144f9528061492952806149d75280614a575250614fa26000f3fe6080604052600436106101dc5760003560e01c80638da5cb5b11610102578063c45a015511610095578063e8e3370011610064578063e8e3370014610cf4578063f2fde38b14610d74578063f305d71914610da7578063fb3bdb4114610ded57610215565b8063c45a015514610b74578063d06ca61f14610b89578063d9caed1214610c3e578063ded9382a14610c8157610215565b8063af2979eb116100d1578063af2979eb14610a0d578063b6f9de9514610a60578063baa2abde14610ae4578063bf93803114610b4157610215565b80638da5cb5b1461094a5780639cce37c61461097b578063ad5c4648146109c2578063ad615dec146109d757610215565b80634a25d94a1161017a578063791ac94711610149578063791ac947146107645780637ff36ab5146107fa57806385f8c2591461087e5780638803dbee146108b457610215565b80634a25d94a146105b05780635b0d5984146106465780635c11d795146106b9578063715018a61461074f57610215565b806319f60ad3116101b657806319f60ad3146103b45780631f00ca74146103e75780632195995c1461049c57806338ed17391461051a57610215565b806302751cec1461021a578063054d50d41461028657806318cbafe5146102ce57610215565b3661021557336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461021357fe5b005b600080fd5b34801561022657600080fd5b5061026d600480360360c081101561023d57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610e71565b6040805192835260208301919091528051918290030190f35b34801561029257600080fd5b506102bc600480360360608110156102a957600080fd5b5080359060208101359060400135610fe6565b60408051918252519081900360200190f35b3480156102da57600080fd5b50610364600480360360a08110156102f157600080fd5b813591602081013591810190606081016040820135600160201b81111561031757600080fd5b82018360208201111561032957600080fd5b803590602001918460208302840111600160201b8311171561034a57600080fd5b91935091506001600160a01b038135169060200135610ffb565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103a0578181015183820152602001610388565b505050509050019250505060405180910390f35b3480156103c057600080fd5b50610213600480360360208110156103d757600080fd5b50356001600160a01b0316611328565b3480156103f357600080fd5b506103646004803603604081101561040a57600080fd5b81359190810190604081016020820135600160201b81111561042b57600080fd5b82018360208201111561043d57600080fd5b803590602001918460208302840111600160201b8311171561045e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506113ab945050505050565b3480156104a857600080fd5b5061026d60048036036101608110156104c057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff61010082013516906101208101359061014001356113e1565b34801561052657600080fd5b50610364600480360360a081101561053d57600080fd5b813591602081013591810190606081016040820135600160201b81111561056357600080fd5b82018360208201111561057557600080fd5b803590602001918460208302840111600160201b8311171561059657600080fd5b91935091506001600160a01b0381351690602001356114db565b3480156105bc57600080fd5b50610364600480360360a08110156105d357600080fd5b813591602081013591810190606081016040820135600160201b8111156105f957600080fd5b82018360208201111561060b57600080fd5b803590602001918460208302840111600160201b8311171561062c57600080fd5b91935091506001600160a01b038135169060200135611626565b34801561065257600080fd5b506102bc600480360361014081101561066a57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356117b2565b3480156106c557600080fd5b50610213600480360360a08110156106dc57600080fd5b813591602081013591810190606081016040820135600160201b81111561070257600080fd5b82018360208201111561071457600080fd5b803590602001918460208302840111600160201b8311171561073557600080fd5b91935091506001600160a01b0381351690602001356118c0565b34801561075b57600080fd5b50610213611b55565b34801561077057600080fd5b50610213600480360360a081101561078757600080fd5b813591602081013591810190606081016040820135600160201b8111156107ad57600080fd5b8201836020820111156107bf57600080fd5b803590602001918460208302840111600160201b831117156107e057600080fd5b91935091506001600160a01b038135169060200135611c01565b6103646004803603608081101561081057600080fd5b81359190810190604081016020820135600160201b81111561083157600080fd5b82018360208201111561084357600080fd5b803590602001918460208302840111600160201b8311171561086457600080fd5b91935091506001600160a01b038135169060200135611e85565b34801561088a57600080fd5b506102bc600480360360608110156108a157600080fd5b50803590602081013590604001356121d8565b3480156108c057600080fd5b50610364600480360360a08110156108d757600080fd5b813591602081013591810190606081016040820135600160201b8111156108fd57600080fd5b82018360208201111561090f57600080fd5b803590602001918460208302840111600160201b8311171561093057600080fd5b91935091506001600160a01b0381351690602001356121e5565b34801561095657600080fd5b5061095f6122de565b604080516001600160a01b039092168252519081900360200190f35b34801561098757600080fd5b506109ae6004803603602081101561099e57600080fd5b50356001600160a01b03166122ed565b604080519115158252519081900360200190f35b3480156109ce57600080fd5b5061095f61230b565b3480156109e357600080fd5b506102bc600480360360608110156109fa57600080fd5b508035906020810135906040013561232f565b348015610a1957600080fd5b506102bc600480360360c0811015610a3057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a0013561233c565b61021360048036036080811015610a7657600080fd5b81359190810190604081016020820135600160201b811115610a9757600080fd5b820183602082011115610aa957600080fd5b803590602001918460208302840111600160201b83111715610aca57600080fd5b91935091506001600160a01b0381351690602001356124bd565b348015610af057600080fd5b5061026d600480360360e0811015610b0757600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612849565b348015610b4d57600080fd5b5061021360048036036020811015610b6457600080fd5b50356001600160a01b0316612b43565b348015610b8057600080fd5b5061095f612bcc565b348015610b9557600080fd5b5061036460048036036040811015610bac57600080fd5b81359190810190604081016020820135600160201b811115610bcd57600080fd5b820183602082011115610bdf57600080fd5b803590602001918460208302840111600160201b83111715610c0057600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612bf0945050505050565b348015610c4a57600080fd5b5061021360048036036060811015610c6157600080fd5b506001600160a01b03813581169160208101359091169060400135612c1d565b348015610c8d57600080fd5b5061026d6004803603610140811015610ca557600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135612e72565b348015610d0057600080fd5b50610d566004803603610100811015610d1857600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135612f86565b60408051938452602084019290925282820152519081900360600190f35b348015610d8057600080fd5b5061021360048036036020811015610d9757600080fd5b50356001600160a01b0316613178565b610d56600480360360c0811015610dbd57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a0013561327a565b61036460048036036080811015610e0357600080fd5b81359190810190604081016020820135600160201b811115610e2457600080fd5b820183602082011115610e3657600080fd5b803590602001918460208302840111600160201b83111715610e5757600080fd5b91935091506001600160a01b03813516906020013561357a565b6000808242811015610eb8576040805162461bcd60e51b81526020600482015260146024820152600080516020614e02833981519152604482015290519081900360640190fd5b6001600160a01b03891660009081526001602052604090205460ff16610f13576040805162461bcd60e51b81526020600482015260186024820152600080516020614e42833981519152604482015290519081900360640190fd5b610f42897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a612849565b9093509150610f528986856138fc565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610fb857600080fd5b505af1158015610fcc573d6000803e3d6000fd5b50505050610fda8583613a50565b50965096945050505050565b6000610ff3848484613b48565b949350505050565b60608142811015611041576040805162461bcd60e51b81526020600482015260146024820152600080516020614e02833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168686600019810181811061107b57fe5b905060200201356001600160a01b03166001600160a01b0316146110d4576040805162461bcd60e51b81526020600482015260196024820152600080516020614d9f833981519152604482015290519081900360640190fd5b6111327f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613c3892505050565b9150868260018451038151811061114557fe5b6020026020010151101561118a5760405162461bcd60e51b8152600401808060200182810382526027815260200180614f466027913960400191505060405180910390fd5b6112288686600081811061119a57fe5b905060200201356001600160a01b03163361120e7f00000000000000000000000000000000000000000000000000000000000000008a8a60008181106111dc57fe5b905060200201356001600160a01b03168b8b60018181106111f957fe5b905060200201356001600160a01b0316613d84565b8560008151811061121b57fe5b6020026020010151613e44565b61126782878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613fa1915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836001855103815181106112a657fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156112e457600080fd5b505af11580156112f8573d6000803e3d6000fd5b5050505061131d848360018551038151811061131057fe5b6020026020010151613a50565b509695505050505050565b6113306141e7565b6001600160a01b03166113416122de565b6001600160a01b03161461138a576040805162461bcd60e51b81526020600482018190526024820152600080516020614e22833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600160205260409020805460ff19169055565b60606113d87f000000000000000000000000000000000000000000000000000000000000000084846141eb565b90505b92915050565b60008060006114117f00000000000000000000000000000000000000000000000000000000000000008f8f613d84565b9050600087611420578c611424565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561149a57600080fd5b505af11580156114ae573d6000803e3d6000fd5b505050506114c18f8f8f8f8f8f8f612849565b809450819550505050509b509b9950505050505050505050565b60608142811015611521576040805162461bcd60e51b81526020600482015260146024820152600080516020614e02833981519152604482015290519081900360640190fd5b61157f7f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613c3892505050565b9150868260018451038151811061159257fe5b602002602001015110156115d75760405162461bcd60e51b8152600401808060200182810382526027815260200180614f466027913960400191505060405180910390fd5b6115e78686600081811061119a57fe5b61131d82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613fa1915050565b6060814281101561166c576040805162461bcd60e51b81526020600482015260146024820152600080516020614e02833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868660001981018181106116a657fe5b905060200201356001600160a01b03166001600160a01b0316146116ff576040805162461bcd60e51b81526020600482015260196024820152600080516020614d9f833981519152604482015290519081900360640190fd5b61175d7f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506141eb92505050565b9150868260008151811061176d57fe5b6020026020010151111561118a5760405162461bcd60e51b8152600401808060200182810382526023815260200180614e626023913960400191505060405180910390fd5b6000806118007f00000000000000000000000000000000000000000000000000000000000000008d7f0000000000000000000000000000000000000000000000000000000000000000613d84565b905060008661180f578b611813565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561188957600080fd5b505af115801561189d573d6000803e3d6000fd5b505050506118af8d8d8d8d8d8d61233c565b9d9c50505050505050505050505050565b8042811015611904576040805162461bcd60e51b81526020600482015260146024820152600080516020614e02833981519152604482015290519081900360640190fd5b6119798585600081811061191457fe5b905060200201356001600160a01b0316336119737f00000000000000000000000000000000000000000000000000000000000000008989600081811061195657fe5b905060200201356001600160a01b03168a8a60018181106111f957fe5b8a613e44565b60008585600019810181811061198b57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156119f057600080fd5b505afa158015611a04573d6000803e3d6000fd5b505050506040513d6020811015611a1a57600080fd5b50516040805160208881028281018201909352888252929350611a5c929091899189918291850190849080828437600092019190915250889250614323915050565b86611b0e8288886000198101818110611a7157fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611ad657600080fd5b505afa158015611aea573d6000803e3d6000fd5b505050506040513d6020811015611b0057600080fd5b50519063ffffffff61462e16565b1015611b4b5760405162461bcd60e51b8152600401808060200182810382526027815260200180614f466027913960400191505060405180910390fd5b5050505050505050565b611b5d6141e7565b6001600160a01b0316611b6e6122de565b6001600160a01b031614611bb7576040805162461bcd60e51b81526020600482018190526024820152600080516020614e22833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b8042811015611c45576040805162461bcd60e51b81526020600482015260146024820152600080516020614e02833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001685856000198101818110611c7f57fe5b905060200201356001600160a01b03166001600160a01b031614611cd8576040805162461bcd60e51b81526020600482015260196024820152600080516020614d9f833981519152604482015290519081900360640190fd5b611ce88585600081811061191457fe5b611d26858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250614323915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611d9057600080fd5b505afa158015611da4573d6000803e3d6000fd5b505050506040513d6020811015611dba57600080fd5b5051905086811015611dfd5760405162461bcd60e51b8152600401808060200182810382526027815260200180614f466027913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611e6357600080fd5b505af1158015611e77573d6000803e3d6000fd5b50505050611b4b8482613a50565b60608142811015611ecb576040805162461bcd60e51b81526020600482015260146024820152600080516020614e02833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611f0257fe5b905060200201356001600160a01b03166001600160a01b031614611f5b576040805162461bcd60e51b81526020600482015260196024820152600080516020614d9f833981519152604482015290519081900360640190fd5b611fb97f000000000000000000000000000000000000000000000000000000000000000034888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613c3892505050565b91508682600184510381518110611fcc57fe5b602002602001015110156120115760405162461bcd60e51b8152600401808060200182810382526027815260200180614f466027913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db08360008151811061204d57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561208057600080fd5b505af1158015612094573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6120f97f00000000000000000000000000000000000000000000000000000000000000008989600081811061195657fe5b8460008151811061210657fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561215d57600080fd5b505af1158015612171573d6000803e3d6000fd5b505050506040513d602081101561218757600080fd5b505161218f57fe5b6121ce82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613fa1915050565b5095945050505050565b6000610ff384848461467e565b6060814281101561222b576040805162461bcd60e51b81526020600482015260146024820152600080516020614e02833981519152604482015290519081900360640190fd5b6122897f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506141eb92505050565b9150868260008151811061229957fe5b602002602001015111156115d75760405162461bcd60e51b8152600401808060200182810382526023815260200180614e626023913960400191505060405180910390fd5b6000546001600160a01b031690565b6001600160a01b031660009081526001602052604090205460ff1690565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610ff384848461476e565b60008142811015612382576040805162461bcd60e51b81526020600482015260146024820152600080516020614e02833981519152604482015290519081900360640190fd5b6123b1887f00000000000000000000000000000000000000000000000000000000000000008989893089612849565b604080516370a0823160e01b8152306004820152905191945061243592508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561240457600080fd5b505afa158015612418573d6000803e3d6000fd5b505050506040513d602081101561242e57600080fd5b50516138fc565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561249b57600080fd5b505af11580156124af573d6000803e3d6000fd5b5050505061131d8483613a50565b8042811015612501576040805162461bcd60e51b81526020600482015260146024820152600080516020614e02833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168585600081811061253857fe5b905060200201356001600160a01b03166001600160a01b031614612591576040805162461bcd60e51b81526020600482015260196024820152600080516020614d9f833981519152604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156125f157600080fd5b505af1158015612605573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb61266a7f00000000000000000000000000000000000000000000000000000000000000008989600081811061195657fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156126ba57600080fd5b505af11580156126ce573d6000803e3d6000fd5b505050506040513d60208110156126e457600080fd5b50516126ec57fe5b6000868660001981018181106126fe57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561276357600080fd5b505afa158015612777573d6000803e3d6000fd5b505050506040513d602081101561278d57600080fd5b505160408051602089810282810182019093528982529293506127cf9290918a918a918291850190849080828437600092019190915250899250614323915050565b87611b0e82898960001981018181106127e457fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611ad657600080fd5b6000808242811015612890576040805162461bcd60e51b81526020600482015260146024820152600080516020614e02833981519152604482015290519081900360640190fd5b6001600160a01b038a1660009081526001602052604090205460ff166128eb576040805162461bcd60e51b81526020600482015260186024820152600080516020614e42833981519152604482015290519081900360640190fd5b6001600160a01b03891660009081526001602052604090205460ff16612946576040805162461bcd60e51b81526020600482015260186024820152600080516020614e42833981519152604482015290519081900360640190fd5b60006129737f00000000000000000000000000000000000000000000000000000000000000008c8c613d84565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b1580156129ce57600080fd5b505af11580156129e2573d6000803e3d6000fd5b505050506040513d60208110156129f857600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b158015612a4557600080fd5b505af1158015612a59573d6000803e3d6000fd5b505050506040513d6040811015612a6f57600080fd5b50805160209091015190925090506000612a898e8e61481a565b509050806001600160a01b03168e6001600160a01b031614612aac578183612aaf565b82825b90975095508a871015612af35760405162461bcd60e51b8152600401808060200182810382526022815260200180614dbf6022913960400191505060405180910390fd5b89861015612b325760405162461bcd60e51b8152600401808060200182810382526022815260200180614cf26022913960400191505060405180910390fd5b505050505097509795505050505050565b612b4b6141e7565b6001600160a01b0316612b5c6122de565b6001600160a01b031614612ba5576040805162461bcd60e51b81526020600482018190526024820152600080516020614e22833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606113d87f00000000000000000000000000000000000000000000000000000000000000008484613c38565b60016002541415612c75576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6001600255612c826141e7565b6001600160a01b0316612c936122de565b6001600160a01b031614612cdc576040805162461bcd60e51b81526020600482018190526024820152600080516020614e22833981519152604482015290519081900360640190fd5b6001600160a01b038216612d2b576040805162461bcd60e51b81526020600482015260116024820152701a5b9d985b1a59081c9958da5c1a595b9d607a1b604482015290519081900360640190fd5b6001600160a01b038316612ddb576040516000906001600160a01b0384169083908381818185875af1925050503d8060008114612d84576040519150601f19603f3d011682016040523d82523d6000602084013e612d89565b606091505b5050905080612dd5576040805162461bcd60e51b81526020600482015260136024820152721d1c985b9cd9995c881093908819985a5b1959606a1b604482015290519081900360640190fd5b50612e68565b826001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612e3b57600080fd5b505af1158015612e4f573d6000803e3d6000fd5b505050506040513d6020811015612e6557600080fd5b50505b5050600060025550565b6000806000612ec27f00000000000000000000000000000000000000000000000000000000000000008e7f0000000000000000000000000000000000000000000000000000000000000000613d84565b9050600087612ed1578c612ed5565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015612f4b57600080fd5b505af1158015612f5f573d6000803e3d6000fd5b50505050612f718e8e8e8e8e8e610e71565b909f909e509c50505050505050505050505050565b60008060008342811015612fcf576040805162461bcd60e51b81526020600482015260146024820152600080516020614e02833981519152604482015290519081900360640190fd5b6001600160a01b038c1660009081526001602052604090205460ff1661302a576040805162461bcd60e51b81526020600482015260186024820152600080516020614e42833981519152604482015290519081900360640190fd5b6001600160a01b038b1660009081526001602052604090205460ff16613085576040805162461bcd60e51b81526020600482015260186024820152600080516020614e42833981519152604482015290519081900360640190fd5b6130938c8c8c8c8c8c6148f8565b909450925060006130c57f00000000000000000000000000000000000000000000000000000000000000008e8e613d84565b90506130d38d338388613e44565b6130df8c338387613e44565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561313757600080fd5b505af115801561314b573d6000803e3d6000fd5b505050506040513d602081101561316157600080fd5b5051949d939c50939a509198505050505050505050565b6131806141e7565b6001600160a01b03166131916122de565b6001600160a01b0316146131da576040805162461bcd60e51b81526020600482018190526024820152600080516020614e22833981519152604482015290519081900360640190fd5b6001600160a01b03811661321f5760405162461bcd60e51b8152600401808060200182810382526026815260200180614d146026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080600083428110156132c3576040805162461bcd60e51b81526020600482015260146024820152600080516020614e02833981519152604482015290519081900360640190fd5b6001600160a01b038a1660009081526001602052604090205460ff1661331e576040805162461bcd60e51b81526020600482015260186024820152600080516020614e42833981519152604482015290519081900360640190fd5b61334c8a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c6148f8565b9094509250600061339e7f00000000000000000000000000000000000000000000000000000000000000008c7f0000000000000000000000000000000000000000000000000000000000000000613d84565b90506133ac8b338388613e44565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b15801561340757600080fd5b505af115801561341b573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156134a057600080fd5b505af11580156134b4573d6000803e3d6000fd5b505050506040513d60208110156134ca57600080fd5b50516134d257fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561352a57600080fd5b505af115801561353e573d6000803e3d6000fd5b505050506040513d602081101561355457600080fd5b505192503484101561356c5761356c33853403613a50565b505096509650969350505050565b606081428110156135c0576040805162461bcd60e51b81526020600482015260146024820152600080516020614e02833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316868660008181106135f757fe5b905060200201356001600160a01b03166001600160a01b031614613650576040805162461bcd60e51b81526020600482015260196024820152600080516020614d9f833981519152604482015290519081900360640190fd5b6136ae7f0000000000000000000000000000000000000000000000000000000000000000888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506141eb92505050565b915034826000815181106136be57fe5b602002602001015111156137035760405162461bcd60e51b8152600401808060200182810382526023815260200180614e626023913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db08360008151811061373f57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561377257600080fd5b505af1158015613786573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6137eb7f00000000000000000000000000000000000000000000000000000000000000008989600081811061195657fe5b846000815181106137f857fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561384f57600080fd5b505af1158015613863573d6000803e3d6000fd5b505050506040513d602081101561387957600080fd5b505161388157fe5b6138c082878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613fa1915050565b816000815181106138cd57fe5b60200260200101513411156121ce576121ce33836000815181106138ed57fe5b60200260200101513403613a50565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106139795780518252601f19909201916020918201910161395a565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146139db576040519150601f19603f3d011682016040523d82523d6000602084013e6139e0565b606091505b5091509150818015613a0e575080511580613a0e5750808060200190516020811015613a0b57600080fd5b50515b613a495760405162461bcd60e51b815260040180806020018281038252602d815260200180614ef2602d913960400191505060405180910390fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b60208310613a9c5780518252601f199092019160209182019101613a7d565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613afe576040519150601f19603f3d011682016040523d82523d6000602084013e613b03565b606091505b5050905080613b435760405162461bcd60e51b8152600401808060200182810382526034815260200180614d6b6034913960400191505060405180910390fd5b505050565b6000808411613b885760405162461bcd60e51b8152600401808060200182810382526027815260200180614f1f6027913960400191505060405180910390fd5b600083118015613b985750600082115b613bd35760405162461bcd60e51b8152600401808060200182810382526024815260200180614e856024913960400191505060405180910390fd5b6000613be7856126ca63ffffffff614b6c16565b90506000613bfb828563ffffffff614b6c16565b90506000613c2183613c158861271063ffffffff614b6c16565b9063ffffffff614bcf16565b9050808281613c2c57fe5b04979650505050505050565b6060600282511015613c91576040805162461bcd60e51b815260206004820152601a60248201527f47726f76654c6962726172793a20494e56414c49445f50415448000000000000604482015290519081900360640190fd5b815167ffffffffffffffff81118015613ca957600080fd5b50604051908082528060200260200182016040528015613cd3578160200160208202803683370190505b5090508281600081518110613ce457fe5b60200260200101818152505060005b6001835103811015613d7c57600080613d3687868581518110613d1257fe5b6020026020010151878660010181518110613d2957fe5b6020026020010151614c1e565b91509150613d58848481518110613d4957fe5b60200260200101518383613b48565b848460010181518110613d6757fe5b60209081029190910101525050600101613cf3565b509392505050565b6000806000613d93858561481a565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527f52e084bf7808906b58ff24c0cd6e39d5b5e8b86a688b1efe65844b85542587ae609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b60208310613ec95780518252601f199092019160209182019101613eaa565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613f2b576040519150601f19603f3d011682016040523d82523d6000602084013e613f30565b606091505b5091509150818015613f5e575080511580613f5e5750808060200190516020811015613f5b57600080fd5b50515b613f995760405162461bcd60e51b8152600401808060200182810382526031815260200180614d3a6031913960400191505060405180910390fd5b505050505050565b60005b60018351038110156141e157600080848381518110613fbf57fe5b6020026020010151858460010181518110613fd657fe5b6020026020010151915091506000613fee838361481a565b509050600087856001018151811061400257fe5b60200260200101519050600080836001600160a01b0316866001600160a01b03161461403057826000614034565b6000835b91509150600060028a5103881061404b578861408c565b61408c7f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061407f57fe5b6020026020010151613d84565b90506140b97f00000000000000000000000000000000000000000000000000000000000000008888613d84565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156140f6576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561416757818101518382015260200161414f565b50505050905090810190601f1680156141945780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156141b657600080fd5b505af11580156141ca573d6000803e3d6000fd5b505060019099019850613fa4975050505050505050565b50505050565b3390565b6060600282511015614244576040805162461bcd60e51b815260206004820152601a60248201527f47726f76654c6962726172793a20494e56414c49445f50415448000000000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561425c57600080fd5b50604051908082528060200260200182016040528015614286578160200160208202803683370190505b509050828160018351038151811061429a57fe5b60209081029190910101528151600019015b8015613d7c576000806142dc878660018603815181106142c857fe5b6020026020010151878681518110613d2957fe5b915091506142fe8484815181106142ef57fe5b6020026020010151838361467e565b84600185038151811061430d57fe5b60209081029190910101525050600019016142ac565b60005b6001835103811015613b435760008084838151811061434157fe5b602002602001015185846001018151811061435857fe5b6020026020010151915091506000614370838361481a565b50905060006143a07f00000000000000000000000000000000000000000000000000000000000000008585613d84565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156143e157600080fd5b505afa1580156143f5573d6000803e3d6000fd5b505050506040513d606081101561440b57600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614614441578284614444565b83835b915091506144a2828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611ad657600080fd5b95506144af868383613b48565b945050505050600080856001600160a01b0316886001600160a01b0316146144d9578260006144dd565b6000835b91509150600060028c51038a106144f4578a614528565b6145287f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061407f57fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b838110156145b257818101518382015260200161459a565b50505050905090810190601f1680156145df5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561460157600080fd5b505af1158015614615573d6000803e3d6000fd5b50506001909b019a506143269950505050505050505050565b808203828111156113db576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b60008084116146be5760405162461bcd60e51b8152600401808060200182810382526028815260200180614eca6028913960400191505060405180910390fd5b6000831180156146ce5750600082115b6147095760405162461bcd60e51b8152600401808060200182810382526024815260200180614e856024913960400191505060405180910390fd5b600061472d612710614721868863ffffffff614b6c16565b9063ffffffff614b6c16565b905060006147476126ca614721868963ffffffff61462e16565b9050614764600182848161475757fe5b049063ffffffff614bcf16565b9695505050505050565b60008084116147ae5760405162461bcd60e51b8152600401808060200182810382526021815260200180614de16021913960400191505060405180910390fd5b6000831180156147be5750600082115b6147f95760405162461bcd60e51b8152600401808060200182810382526024815260200180614e856024913960400191505060405180910390fd5b8261480a858463ffffffff614b6c16565b8161481157fe5b04949350505050565b600080826001600160a01b0316846001600160a01b0316141561486e5760405162461bcd60e51b8152600401808060200182810382526021815260200180614ea96021913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b03161061488e578284614891565b83835b90925090506001600160a01b0382166148f1576040805162461bcd60e51b815260206004820152601a60248201527f47726f76654c6962726172793a205a45524f5f41444452455353000000000000604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b15801561497257600080fd5b505afa158015614986573d6000803e3d6000fd5b505050506040513d602081101561499c57600080fd5b50516001600160a01b03161415614a4f57604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b158015614a2257600080fd5b505af1158015614a36573d6000803e3d6000fd5b505050506040513d6020811015614a4c57600080fd5b50505b600080614a7d7f00000000000000000000000000000000000000000000000000000000000000008b8b614c1e565b91509150816000148015614a8f575080155b15614a9f57879350869250614b5f565b6000614aac89848461476e565b9050878111614aff5785811015614af45760405162461bcd60e51b8152600401808060200182810382526022815260200180614cf26022913960400191505060405180910390fd5b889450925082614b5d565b6000614b0c89848661476e565b905089811115614b1857fe5b87811015614b575760405162461bcd60e51b8152600401808060200182810382526022815260200180614dbf6022913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b6000811580614b8757505080820282828281614b8457fe5b04145b6113db576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b808201828110156113db576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b6000806000614c2d858561481a565b509050614c3b868686613d84565b50600080614c4a888888613d84565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015614c8257600080fd5b505afa158015614c96573d6000803e3d6000fd5b505050506040513d6060811015614cac57600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b0387811690841614614cdf578082614ce2565b81815b9099909850965050505050505056fe47726f7665526f757465723a20494e53554646494349454e545f425f414d4f554e544f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472616e7366657246726f6d206661696c65645472616e7366657248656c7065723a3a736166655472616e736665724554483a20455448207472616e73666572206661696c656447726f7665526f757465723a20494e56414c49445f504154480000000000000047726f7665526f757465723a20494e53554646494349454e545f415f414d4f554e5447726f76654c6962726172793a20494e53554646494349454e545f414d4f554e5447726f7665526f757465723a20455850495245440000000000000000000000004f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572546f6b656e206e6f7420696e205768697465204c69737421000000000000000047726f7665526f757465723a204558434553534956455f494e5055545f414d4f554e5447726f76654c6962726172793a20494e53554646494349454e545f4c495155494449545947726f76654c6962726172793a204944454e544943414c5f41444452455353455347726f76654c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a3a736166655472616e736665723a207472616e73666572206661696c656447726f76654c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e5447726f7665526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e54a2646970667358221220d3346e8d9688b093cf0cbbbfe5ca5cb9b9aaa93e20d16bebaaf35dcb18522e4564736f6c634300060600330000000000000000000000006c565c5bbdc7f023cae8a2495105a531caac6e54000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Deployed Bytecode
0x6080604052600436106101dc5760003560e01c80638da5cb5b11610102578063c45a015511610095578063e8e3370011610064578063e8e3370014610cf4578063f2fde38b14610d74578063f305d71914610da7578063fb3bdb4114610ded57610215565b8063c45a015514610b74578063d06ca61f14610b89578063d9caed1214610c3e578063ded9382a14610c8157610215565b8063af2979eb116100d1578063af2979eb14610a0d578063b6f9de9514610a60578063baa2abde14610ae4578063bf93803114610b4157610215565b80638da5cb5b1461094a5780639cce37c61461097b578063ad5c4648146109c2578063ad615dec146109d757610215565b80634a25d94a1161017a578063791ac94711610149578063791ac947146107645780637ff36ab5146107fa57806385f8c2591461087e5780638803dbee146108b457610215565b80634a25d94a146105b05780635b0d5984146106465780635c11d795146106b9578063715018a61461074f57610215565b806319f60ad3116101b657806319f60ad3146103b45780631f00ca74146103e75780632195995c1461049c57806338ed17391461051a57610215565b806302751cec1461021a578063054d50d41461028657806318cbafe5146102ce57610215565b3661021557336001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2161461021357fe5b005b600080fd5b34801561022657600080fd5b5061026d600480360360c081101561023d57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610e71565b6040805192835260208301919091528051918290030190f35b34801561029257600080fd5b506102bc600480360360608110156102a957600080fd5b5080359060208101359060400135610fe6565b60408051918252519081900360200190f35b3480156102da57600080fd5b50610364600480360360a08110156102f157600080fd5b813591602081013591810190606081016040820135600160201b81111561031757600080fd5b82018360208201111561032957600080fd5b803590602001918460208302840111600160201b8311171561034a57600080fd5b91935091506001600160a01b038135169060200135610ffb565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103a0578181015183820152602001610388565b505050509050019250505060405180910390f35b3480156103c057600080fd5b50610213600480360360208110156103d757600080fd5b50356001600160a01b0316611328565b3480156103f357600080fd5b506103646004803603604081101561040a57600080fd5b81359190810190604081016020820135600160201b81111561042b57600080fd5b82018360208201111561043d57600080fd5b803590602001918460208302840111600160201b8311171561045e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506113ab945050505050565b3480156104a857600080fd5b5061026d60048036036101608110156104c057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff61010082013516906101208101359061014001356113e1565b34801561052657600080fd5b50610364600480360360a081101561053d57600080fd5b813591602081013591810190606081016040820135600160201b81111561056357600080fd5b82018360208201111561057557600080fd5b803590602001918460208302840111600160201b8311171561059657600080fd5b91935091506001600160a01b0381351690602001356114db565b3480156105bc57600080fd5b50610364600480360360a08110156105d357600080fd5b813591602081013591810190606081016040820135600160201b8111156105f957600080fd5b82018360208201111561060b57600080fd5b803590602001918460208302840111600160201b8311171561062c57600080fd5b91935091506001600160a01b038135169060200135611626565b34801561065257600080fd5b506102bc600480360361014081101561066a57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356117b2565b3480156106c557600080fd5b50610213600480360360a08110156106dc57600080fd5b813591602081013591810190606081016040820135600160201b81111561070257600080fd5b82018360208201111561071457600080fd5b803590602001918460208302840111600160201b8311171561073557600080fd5b91935091506001600160a01b0381351690602001356118c0565b34801561075b57600080fd5b50610213611b55565b34801561077057600080fd5b50610213600480360360a081101561078757600080fd5b813591602081013591810190606081016040820135600160201b8111156107ad57600080fd5b8201836020820111156107bf57600080fd5b803590602001918460208302840111600160201b831117156107e057600080fd5b91935091506001600160a01b038135169060200135611c01565b6103646004803603608081101561081057600080fd5b81359190810190604081016020820135600160201b81111561083157600080fd5b82018360208201111561084357600080fd5b803590602001918460208302840111600160201b8311171561086457600080fd5b91935091506001600160a01b038135169060200135611e85565b34801561088a57600080fd5b506102bc600480360360608110156108a157600080fd5b50803590602081013590604001356121d8565b3480156108c057600080fd5b50610364600480360360a08110156108d757600080fd5b813591602081013591810190606081016040820135600160201b8111156108fd57600080fd5b82018360208201111561090f57600080fd5b803590602001918460208302840111600160201b8311171561093057600080fd5b91935091506001600160a01b0381351690602001356121e5565b34801561095657600080fd5b5061095f6122de565b604080516001600160a01b039092168252519081900360200190f35b34801561098757600080fd5b506109ae6004803603602081101561099e57600080fd5b50356001600160a01b03166122ed565b604080519115158252519081900360200190f35b3480156109ce57600080fd5b5061095f61230b565b3480156109e357600080fd5b506102bc600480360360608110156109fa57600080fd5b508035906020810135906040013561232f565b348015610a1957600080fd5b506102bc600480360360c0811015610a3057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a0013561233c565b61021360048036036080811015610a7657600080fd5b81359190810190604081016020820135600160201b811115610a9757600080fd5b820183602082011115610aa957600080fd5b803590602001918460208302840111600160201b83111715610aca57600080fd5b91935091506001600160a01b0381351690602001356124bd565b348015610af057600080fd5b5061026d600480360360e0811015610b0757600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612849565b348015610b4d57600080fd5b5061021360048036036020811015610b6457600080fd5b50356001600160a01b0316612b43565b348015610b8057600080fd5b5061095f612bcc565b348015610b9557600080fd5b5061036460048036036040811015610bac57600080fd5b81359190810190604081016020820135600160201b811115610bcd57600080fd5b820183602082011115610bdf57600080fd5b803590602001918460208302840111600160201b83111715610c0057600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612bf0945050505050565b348015610c4a57600080fd5b5061021360048036036060811015610c6157600080fd5b506001600160a01b03813581169160208101359091169060400135612c1d565b348015610c8d57600080fd5b5061026d6004803603610140811015610ca557600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135612e72565b348015610d0057600080fd5b50610d566004803603610100811015610d1857600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135612f86565b60408051938452602084019290925282820152519081900360600190f35b348015610d8057600080fd5b5061021360048036036020811015610d9757600080fd5b50356001600160a01b0316613178565b610d56600480360360c0811015610dbd57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a0013561327a565b61036460048036036080811015610e0357600080fd5b81359190810190604081016020820135600160201b811115610e2457600080fd5b820183602082011115610e3657600080fd5b803590602001918460208302840111600160201b83111715610e5757600080fd5b91935091506001600160a01b03813516906020013561357a565b6000808242811015610eb8576040805162461bcd60e51b81526020600482015260146024820152600080516020614e02833981519152604482015290519081900360640190fd5b6001600160a01b03891660009081526001602052604090205460ff16610f13576040805162461bcd60e51b81526020600482015260186024820152600080516020614e42833981519152604482015290519081900360640190fd5b610f42897f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28a8a8a308a612849565b9093509150610f528986856138fc565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610fb857600080fd5b505af1158015610fcc573d6000803e3d6000fd5b50505050610fda8583613a50565b50965096945050505050565b6000610ff3848484613b48565b949350505050565b60608142811015611041576040805162461bcd60e51b81526020600482015260146024820152600080516020614e02833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2168686600019810181811061107b57fe5b905060200201356001600160a01b03166001600160a01b0316146110d4576040805162461bcd60e51b81526020600482015260196024820152600080516020614d9f833981519152604482015290519081900360640190fd5b6111327f0000000000000000000000006c565c5bbdc7f023cae8a2495105a531caac6e5489888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613c3892505050565b9150868260018451038151811061114557fe5b6020026020010151101561118a5760405162461bcd60e51b8152600401808060200182810382526027815260200180614f466027913960400191505060405180910390fd5b6112288686600081811061119a57fe5b905060200201356001600160a01b03163361120e7f0000000000000000000000006c565c5bbdc7f023cae8a2495105a531caac6e548a8a60008181106111dc57fe5b905060200201356001600160a01b03168b8b60018181106111f957fe5b905060200201356001600160a01b0316613d84565b8560008151811061121b57fe5b6020026020010151613e44565b61126782878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613fa1915050565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0316632e1a7d4d836001855103815181106112a657fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156112e457600080fd5b505af11580156112f8573d6000803e3d6000fd5b5050505061131d848360018551038151811061131057fe5b6020026020010151613a50565b509695505050505050565b6113306141e7565b6001600160a01b03166113416122de565b6001600160a01b03161461138a576040805162461bcd60e51b81526020600482018190526024820152600080516020614e22833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600160205260409020805460ff19169055565b60606113d87f0000000000000000000000006c565c5bbdc7f023cae8a2495105a531caac6e5484846141eb565b90505b92915050565b60008060006114117f0000000000000000000000006c565c5bbdc7f023cae8a2495105a531caac6e548f8f613d84565b9050600087611420578c611424565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561149a57600080fd5b505af11580156114ae573d6000803e3d6000fd5b505050506114c18f8f8f8f8f8f8f612849565b809450819550505050509b509b9950505050505050505050565b60608142811015611521576040805162461bcd60e51b81526020600482015260146024820152600080516020614e02833981519152604482015290519081900360640190fd5b61157f7f0000000000000000000000006c565c5bbdc7f023cae8a2495105a531caac6e5489888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613c3892505050565b9150868260018451038151811061159257fe5b602002602001015110156115d75760405162461bcd60e51b8152600401808060200182810382526027815260200180614f466027913960400191505060405180910390fd5b6115e78686600081811061119a57fe5b61131d82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613fa1915050565b6060814281101561166c576040805162461bcd60e51b81526020600482015260146024820152600080516020614e02833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc216868660001981018181106116a657fe5b905060200201356001600160a01b03166001600160a01b0316146116ff576040805162461bcd60e51b81526020600482015260196024820152600080516020614d9f833981519152604482015290519081900360640190fd5b61175d7f0000000000000000000000006c565c5bbdc7f023cae8a2495105a531caac6e54898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506141eb92505050565b9150868260008151811061176d57fe5b6020026020010151111561118a5760405162461bcd60e51b8152600401808060200182810382526023815260200180614e626023913960400191505060405180910390fd5b6000806118007f0000000000000000000000006c565c5bbdc7f023cae8a2495105a531caac6e548d7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2613d84565b905060008661180f578b611813565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561188957600080fd5b505af115801561189d573d6000803e3d6000fd5b505050506118af8d8d8d8d8d8d61233c565b9d9c50505050505050505050505050565b8042811015611904576040805162461bcd60e51b81526020600482015260146024820152600080516020614e02833981519152604482015290519081900360640190fd5b6119798585600081811061191457fe5b905060200201356001600160a01b0316336119737f0000000000000000000000006c565c5bbdc7f023cae8a2495105a531caac6e548989600081811061195657fe5b905060200201356001600160a01b03168a8a60018181106111f957fe5b8a613e44565b60008585600019810181811061198b57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156119f057600080fd5b505afa158015611a04573d6000803e3d6000fd5b505050506040513d6020811015611a1a57600080fd5b50516040805160208881028281018201909352888252929350611a5c929091899189918291850190849080828437600092019190915250889250614323915050565b86611b0e8288886000198101818110611a7157fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611ad657600080fd5b505afa158015611aea573d6000803e3d6000fd5b505050506040513d6020811015611b0057600080fd5b50519063ffffffff61462e16565b1015611b4b5760405162461bcd60e51b8152600401808060200182810382526027815260200180614f466027913960400191505060405180910390fd5b5050505050505050565b611b5d6141e7565b6001600160a01b0316611b6e6122de565b6001600160a01b031614611bb7576040805162461bcd60e51b81526020600482018190526024820152600080516020614e22833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b8042811015611c45576040805162461bcd60e51b81526020600482015260146024820152600080516020614e02833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc21685856000198101818110611c7f57fe5b905060200201356001600160a01b03166001600160a01b031614611cd8576040805162461bcd60e51b81526020600482015260196024820152600080516020614d9f833981519152604482015290519081900360640190fd5b611ce88585600081811061191457fe5b611d26858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250614323915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc216916370a0823191602480820192602092909190829003018186803b158015611d9057600080fd5b505afa158015611da4573d6000803e3d6000fd5b505050506040513d6020811015611dba57600080fd5b5051905086811015611dfd5760405162461bcd60e51b8152600401808060200182810382526027815260200180614f466027913960400191505060405180910390fd5b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611e6357600080fd5b505af1158015611e77573d6000803e3d6000fd5b50505050611b4b8482613a50565b60608142811015611ecb576040805162461bcd60e51b81526020600482015260146024820152600080516020614e02833981519152604482015290519081900360640190fd5b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031686866000818110611f0257fe5b905060200201356001600160a01b03166001600160a01b031614611f5b576040805162461bcd60e51b81526020600482015260196024820152600080516020614d9f833981519152604482015290519081900360640190fd5b611fb97f0000000000000000000000006c565c5bbdc7f023cae8a2495105a531caac6e5434888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613c3892505050565b91508682600184510381518110611fcc57fe5b602002602001015110156120115760405162461bcd60e51b8152600401808060200182810382526027815260200180614f466027913960400191505060405180910390fd5b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663d0e30db08360008151811061204d57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561208057600080fd5b505af1158015612094573d6000803e3d6000fd5b50505050507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663a9059cbb6120f97f0000000000000000000000006c565c5bbdc7f023cae8a2495105a531caac6e548989600081811061195657fe5b8460008151811061210657fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561215d57600080fd5b505af1158015612171573d6000803e3d6000fd5b505050506040513d602081101561218757600080fd5b505161218f57fe5b6121ce82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613fa1915050565b5095945050505050565b6000610ff384848461467e565b6060814281101561222b576040805162461bcd60e51b81526020600482015260146024820152600080516020614e02833981519152604482015290519081900360640190fd5b6122897f0000000000000000000000006c565c5bbdc7f023cae8a2495105a531caac6e54898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506141eb92505050565b9150868260008151811061229957fe5b602002602001015111156115d75760405162461bcd60e51b8152600401808060200182810382526023815260200180614e626023913960400191505060405180910390fd5b6000546001600160a01b031690565b6001600160a01b031660009081526001602052604090205460ff1690565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b6000610ff384848461476e565b60008142811015612382576040805162461bcd60e51b81526020600482015260146024820152600080516020614e02833981519152604482015290519081900360640190fd5b6123b1887f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28989893089612849565b604080516370a0823160e01b8152306004820152905191945061243592508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561240457600080fd5b505afa158015612418573d6000803e3d6000fd5b505050506040513d602081101561242e57600080fd5b50516138fc565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561249b57600080fd5b505af11580156124af573d6000803e3d6000fd5b5050505061131d8483613a50565b8042811015612501576040805162461bcd60e51b81526020600482015260146024820152600080516020614e02833981519152604482015290519081900360640190fd5b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b03168585600081811061253857fe5b905060200201356001600160a01b03166001600160a01b031614612591576040805162461bcd60e51b81526020600482015260196024820152600080516020614d9f833981519152604482015290519081900360640190fd5b60003490507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156125f157600080fd5b505af1158015612605573d6000803e3d6000fd5b50505050507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663a9059cbb61266a7f0000000000000000000000006c565c5bbdc7f023cae8a2495105a531caac6e548989600081811061195657fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156126ba57600080fd5b505af11580156126ce573d6000803e3d6000fd5b505050506040513d60208110156126e457600080fd5b50516126ec57fe5b6000868660001981018181106126fe57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561276357600080fd5b505afa158015612777573d6000803e3d6000fd5b505050506040513d602081101561278d57600080fd5b505160408051602089810282810182019093528982529293506127cf9290918a918a918291850190849080828437600092019190915250899250614323915050565b87611b0e82898960001981018181106127e457fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611ad657600080fd5b6000808242811015612890576040805162461bcd60e51b81526020600482015260146024820152600080516020614e02833981519152604482015290519081900360640190fd5b6001600160a01b038a1660009081526001602052604090205460ff166128eb576040805162461bcd60e51b81526020600482015260186024820152600080516020614e42833981519152604482015290519081900360640190fd5b6001600160a01b03891660009081526001602052604090205460ff16612946576040805162461bcd60e51b81526020600482015260186024820152600080516020614e42833981519152604482015290519081900360640190fd5b60006129737f0000000000000000000000006c565c5bbdc7f023cae8a2495105a531caac6e548c8c613d84565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b1580156129ce57600080fd5b505af11580156129e2573d6000803e3d6000fd5b505050506040513d60208110156129f857600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b158015612a4557600080fd5b505af1158015612a59573d6000803e3d6000fd5b505050506040513d6040811015612a6f57600080fd5b50805160209091015190925090506000612a898e8e61481a565b509050806001600160a01b03168e6001600160a01b031614612aac578183612aaf565b82825b90975095508a871015612af35760405162461bcd60e51b8152600401808060200182810382526022815260200180614dbf6022913960400191505060405180910390fd5b89861015612b325760405162461bcd60e51b8152600401808060200182810382526022815260200180614cf26022913960400191505060405180910390fd5b505050505097509795505050505050565b612b4b6141e7565b6001600160a01b0316612b5c6122de565b6001600160a01b031614612ba5576040805162461bcd60e51b81526020600482018190526024820152600080516020614e22833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b7f0000000000000000000000006c565c5bbdc7f023cae8a2495105a531caac6e5481565b60606113d87f0000000000000000000000006c565c5bbdc7f023cae8a2495105a531caac6e548484613c38565b60016002541415612c75576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6001600255612c826141e7565b6001600160a01b0316612c936122de565b6001600160a01b031614612cdc576040805162461bcd60e51b81526020600482018190526024820152600080516020614e22833981519152604482015290519081900360640190fd5b6001600160a01b038216612d2b576040805162461bcd60e51b81526020600482015260116024820152701a5b9d985b1a59081c9958da5c1a595b9d607a1b604482015290519081900360640190fd5b6001600160a01b038316612ddb576040516000906001600160a01b0384169083908381818185875af1925050503d8060008114612d84576040519150601f19603f3d011682016040523d82523d6000602084013e612d89565b606091505b5050905080612dd5576040805162461bcd60e51b81526020600482015260136024820152721d1c985b9cd9995c881093908819985a5b1959606a1b604482015290519081900360640190fd5b50612e68565b826001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612e3b57600080fd5b505af1158015612e4f573d6000803e3d6000fd5b505050506040513d6020811015612e6557600080fd5b50505b5050600060025550565b6000806000612ec27f0000000000000000000000006c565c5bbdc7f023cae8a2495105a531caac6e548e7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2613d84565b9050600087612ed1578c612ed5565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015612f4b57600080fd5b505af1158015612f5f573d6000803e3d6000fd5b50505050612f718e8e8e8e8e8e610e71565b909f909e509c50505050505050505050505050565b60008060008342811015612fcf576040805162461bcd60e51b81526020600482015260146024820152600080516020614e02833981519152604482015290519081900360640190fd5b6001600160a01b038c1660009081526001602052604090205460ff1661302a576040805162461bcd60e51b81526020600482015260186024820152600080516020614e42833981519152604482015290519081900360640190fd5b6001600160a01b038b1660009081526001602052604090205460ff16613085576040805162461bcd60e51b81526020600482015260186024820152600080516020614e42833981519152604482015290519081900360640190fd5b6130938c8c8c8c8c8c6148f8565b909450925060006130c57f0000000000000000000000006c565c5bbdc7f023cae8a2495105a531caac6e548e8e613d84565b90506130d38d338388613e44565b6130df8c338387613e44565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561313757600080fd5b505af115801561314b573d6000803e3d6000fd5b505050506040513d602081101561316157600080fd5b5051949d939c50939a509198505050505050505050565b6131806141e7565b6001600160a01b03166131916122de565b6001600160a01b0316146131da576040805162461bcd60e51b81526020600482018190526024820152600080516020614e22833981519152604482015290519081900360640190fd5b6001600160a01b03811661321f5760405162461bcd60e51b8152600401808060200182810382526026815260200180614d146026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080600083428110156132c3576040805162461bcd60e51b81526020600482015260146024820152600080516020614e02833981519152604482015290519081900360640190fd5b6001600160a01b038a1660009081526001602052604090205460ff1661331e576040805162461bcd60e51b81526020600482015260186024820152600080516020614e42833981519152604482015290519081900360640190fd5b61334c8a7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28b348c8c6148f8565b9094509250600061339e7f0000000000000000000000006c565c5bbdc7f023cae8a2495105a531caac6e548c7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2613d84565b90506133ac8b338388613e44565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b15801561340757600080fd5b505af115801561341b573d6000803e3d6000fd5b50505050507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156134a057600080fd5b505af11580156134b4573d6000803e3d6000fd5b505050506040513d60208110156134ca57600080fd5b50516134d257fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561352a57600080fd5b505af115801561353e573d6000803e3d6000fd5b505050506040513d602081101561355457600080fd5b505192503484101561356c5761356c33853403613a50565b505096509650969350505050565b606081428110156135c0576040805162461bcd60e51b81526020600482015260146024820152600080516020614e02833981519152604482015290519081900360640190fd5b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0316868660008181106135f757fe5b905060200201356001600160a01b03166001600160a01b031614613650576040805162461bcd60e51b81526020600482015260196024820152600080516020614d9f833981519152604482015290519081900360640190fd5b6136ae7f0000000000000000000000006c565c5bbdc7f023cae8a2495105a531caac6e54888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506141eb92505050565b915034826000815181106136be57fe5b602002602001015111156137035760405162461bcd60e51b8152600401808060200182810382526023815260200180614e626023913960400191505060405180910390fd5b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663d0e30db08360008151811061373f57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561377257600080fd5b505af1158015613786573d6000803e3d6000fd5b50505050507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663a9059cbb6137eb7f0000000000000000000000006c565c5bbdc7f023cae8a2495105a531caac6e548989600081811061195657fe5b846000815181106137f857fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561384f57600080fd5b505af1158015613863573d6000803e3d6000fd5b505050506040513d602081101561387957600080fd5b505161388157fe5b6138c082878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613fa1915050565b816000815181106138cd57fe5b60200260200101513411156121ce576121ce33836000815181106138ed57fe5b60200260200101513403613a50565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106139795780518252601f19909201916020918201910161395a565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146139db576040519150601f19603f3d011682016040523d82523d6000602084013e6139e0565b606091505b5091509150818015613a0e575080511580613a0e5750808060200190516020811015613a0b57600080fd5b50515b613a495760405162461bcd60e51b815260040180806020018281038252602d815260200180614ef2602d913960400191505060405180910390fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b60208310613a9c5780518252601f199092019160209182019101613a7d565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613afe576040519150601f19603f3d011682016040523d82523d6000602084013e613b03565b606091505b5050905080613b435760405162461bcd60e51b8152600401808060200182810382526034815260200180614d6b6034913960400191505060405180910390fd5b505050565b6000808411613b885760405162461bcd60e51b8152600401808060200182810382526027815260200180614f1f6027913960400191505060405180910390fd5b600083118015613b985750600082115b613bd35760405162461bcd60e51b8152600401808060200182810382526024815260200180614e856024913960400191505060405180910390fd5b6000613be7856126ca63ffffffff614b6c16565b90506000613bfb828563ffffffff614b6c16565b90506000613c2183613c158861271063ffffffff614b6c16565b9063ffffffff614bcf16565b9050808281613c2c57fe5b04979650505050505050565b6060600282511015613c91576040805162461bcd60e51b815260206004820152601a60248201527f47726f76654c6962726172793a20494e56414c49445f50415448000000000000604482015290519081900360640190fd5b815167ffffffffffffffff81118015613ca957600080fd5b50604051908082528060200260200182016040528015613cd3578160200160208202803683370190505b5090508281600081518110613ce457fe5b60200260200101818152505060005b6001835103811015613d7c57600080613d3687868581518110613d1257fe5b6020026020010151878660010181518110613d2957fe5b6020026020010151614c1e565b91509150613d58848481518110613d4957fe5b60200260200101518383613b48565b848460010181518110613d6757fe5b60209081029190910101525050600101613cf3565b509392505050565b6000806000613d93858561481a565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527f52e084bf7808906b58ff24c0cd6e39d5b5e8b86a688b1efe65844b85542587ae609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b60208310613ec95780518252601f199092019160209182019101613eaa565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613f2b576040519150601f19603f3d011682016040523d82523d6000602084013e613f30565b606091505b5091509150818015613f5e575080511580613f5e5750808060200190516020811015613f5b57600080fd5b50515b613f995760405162461bcd60e51b8152600401808060200182810382526031815260200180614d3a6031913960400191505060405180910390fd5b505050505050565b60005b60018351038110156141e157600080848381518110613fbf57fe5b6020026020010151858460010181518110613fd657fe5b6020026020010151915091506000613fee838361481a565b509050600087856001018151811061400257fe5b60200260200101519050600080836001600160a01b0316866001600160a01b03161461403057826000614034565b6000835b91509150600060028a5103881061404b578861408c565b61408c7f0000000000000000000000006c565c5bbdc7f023cae8a2495105a531caac6e54878c8b6002018151811061407f57fe5b6020026020010151613d84565b90506140b97f0000000000000000000000006c565c5bbdc7f023cae8a2495105a531caac6e548888613d84565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156140f6576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561416757818101518382015260200161414f565b50505050905090810190601f1680156141945780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156141b657600080fd5b505af11580156141ca573d6000803e3d6000fd5b505060019099019850613fa4975050505050505050565b50505050565b3390565b6060600282511015614244576040805162461bcd60e51b815260206004820152601a60248201527f47726f76654c6962726172793a20494e56414c49445f50415448000000000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561425c57600080fd5b50604051908082528060200260200182016040528015614286578160200160208202803683370190505b509050828160018351038151811061429a57fe5b60209081029190910101528151600019015b8015613d7c576000806142dc878660018603815181106142c857fe5b6020026020010151878681518110613d2957fe5b915091506142fe8484815181106142ef57fe5b6020026020010151838361467e565b84600185038151811061430d57fe5b60209081029190910101525050600019016142ac565b60005b6001835103811015613b435760008084838151811061434157fe5b602002602001015185846001018151811061435857fe5b6020026020010151915091506000614370838361481a565b50905060006143a07f0000000000000000000000006c565c5bbdc7f023cae8a2495105a531caac6e548585613d84565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156143e157600080fd5b505afa1580156143f5573d6000803e3d6000fd5b505050506040513d606081101561440b57600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614614441578284614444565b83835b915091506144a2828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611ad657600080fd5b95506144af868383613b48565b945050505050600080856001600160a01b0316886001600160a01b0316146144d9578260006144dd565b6000835b91509150600060028c51038a106144f4578a614528565b6145287f0000000000000000000000006c565c5bbdc7f023cae8a2495105a531caac6e54898e8d6002018151811061407f57fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b838110156145b257818101518382015260200161459a565b50505050905090810190601f1680156145df5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561460157600080fd5b505af1158015614615573d6000803e3d6000fd5b50506001909b019a506143269950505050505050505050565b808203828111156113db576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b60008084116146be5760405162461bcd60e51b8152600401808060200182810382526028815260200180614eca6028913960400191505060405180910390fd5b6000831180156146ce5750600082115b6147095760405162461bcd60e51b8152600401808060200182810382526024815260200180614e856024913960400191505060405180910390fd5b600061472d612710614721868863ffffffff614b6c16565b9063ffffffff614b6c16565b905060006147476126ca614721868963ffffffff61462e16565b9050614764600182848161475757fe5b049063ffffffff614bcf16565b9695505050505050565b60008084116147ae5760405162461bcd60e51b8152600401808060200182810382526021815260200180614de16021913960400191505060405180910390fd5b6000831180156147be5750600082115b6147f95760405162461bcd60e51b8152600401808060200182810382526024815260200180614e856024913960400191505060405180910390fd5b8261480a858463ffffffff614b6c16565b8161481157fe5b04949350505050565b600080826001600160a01b0316846001600160a01b0316141561486e5760405162461bcd60e51b8152600401808060200182810382526021815260200180614ea96021913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b03161061488e578284614891565b83835b90925090506001600160a01b0382166148f1576040805162461bcd60e51b815260206004820152601a60248201527f47726f76654c6962726172793a205a45524f5f41444452455353000000000000604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f0000000000000000000000006c565c5bbdc7f023cae8a2495105a531caac6e549092169163e6a4390591604480820192602092909190829003018186803b15801561497257600080fd5b505afa158015614986573d6000803e3d6000fd5b505050506040513d602081101561499c57600080fd5b50516001600160a01b03161415614a4f57604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f0000000000000000000000006c565c5bbdc7f023cae8a2495105a531caac6e549092169163c9c65396916044808201926020929091908290030181600087803b158015614a2257600080fd5b505af1158015614a36573d6000803e3d6000fd5b505050506040513d6020811015614a4c57600080fd5b50505b600080614a7d7f0000000000000000000000006c565c5bbdc7f023cae8a2495105a531caac6e548b8b614c1e565b91509150816000148015614a8f575080155b15614a9f57879350869250614b5f565b6000614aac89848461476e565b9050878111614aff5785811015614af45760405162461bcd60e51b8152600401808060200182810382526022815260200180614cf26022913960400191505060405180910390fd5b889450925082614b5d565b6000614b0c89848661476e565b905089811115614b1857fe5b87811015614b575760405162461bcd60e51b8152600401808060200182810382526022815260200180614dbf6022913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b6000811580614b8757505080820282828281614b8457fe5b04145b6113db576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b808201828110156113db576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b6000806000614c2d858561481a565b509050614c3b868686613d84565b50600080614c4a888888613d84565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015614c8257600080fd5b505afa158015614c96573d6000803e3d6000fd5b505050506040513d6060811015614cac57600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b0387811690841614614cdf578082614ce2565b81815b9099909850965050505050505056fe47726f7665526f757465723a20494e53554646494349454e545f425f414d4f554e544f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472616e7366657246726f6d206661696c65645472616e7366657248656c7065723a3a736166655472616e736665724554483a20455448207472616e73666572206661696c656447726f7665526f757465723a20494e56414c49445f504154480000000000000047726f7665526f757465723a20494e53554646494349454e545f415f414d4f554e5447726f76654c6962726172793a20494e53554646494349454e545f414d4f554e5447726f7665526f757465723a20455850495245440000000000000000000000004f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572546f6b656e206e6f7420696e205768697465204c69737421000000000000000047726f7665526f757465723a204558434553534956455f494e5055545f414d4f554e5447726f76654c6962726172793a20494e53554646494349454e545f4c495155494449545947726f76654c6962726172793a204944454e544943414c5f41444452455353455347726f76654c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a3a736166655472616e736665723a207472616e73666572206661696c656447726f76654c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e5447726f7665526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e54a2646970667358221220d3346e8d9688b093cf0cbbbfe5ca5cb9b9aaa93e20d16bebaaf35dcb18522e4564736f6c63430006060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000006c565c5bbdc7f023cae8a2495105a531caac6e54000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
-----Decoded View---------------
Arg [0] : _factory (address): 0x6C565c5bbDc7F023Cae8a2495105A531caac6E54
Arg [1] : _WETH (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000006c565c5bbdc7f023cae8a2495105a531caac6e54
Arg [1] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Deployed Bytecode Sourcemap
21576:23314:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22512:10;-1:-1:-1;;;;;22526:4:0;22512:18;;22505:26;;;;21576:23314;;12:1:-1;9;2:12;27777:815:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27777:815:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;27777:815:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;43035:254;;5:9:-1;2:2;;;27:1;24;17:12;2:2;43035:254:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;43035:254:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;36579:974;;5:9:-1;2:2;;;27:1;24;17:12;2:2;36579:974:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;36579:974:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;36579:974:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;36579:974:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;36579:974:0;;-1:-1:-1;36579:974:0;-1:-1:-1;;;;;;36579:974:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;36579:974:0;;;;;;;;;;;;;;;;;44084:113;;5:9:-1;2:2;;;27:1;24;17:12;2:2;44084:113:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;44084:113:0;-1:-1:-1;;;;;44084:113:0;;:::i;43821:255::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;43821:255:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;43821:255:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;43821:255:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;43821:255:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;43821:255:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;43821:255:0;;-1:-1:-1;43821:255:0;;-1:-1:-1;;;;;43821:255:0:i;28600:924::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28600:924:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;28600:924:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;33266:754::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33266:754:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;33266:754:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;33266:754:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33266:754:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;33266:754:0;;-1:-1:-1;33266:754:0;-1:-1:-1;;;;;;33266:754:0;;;;;;;;:::i;35619:952::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35619:952:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;35619:952:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;35619:952:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;35619:952:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;35619:952:0;;-1:-1:-1;35619:952:0;-1:-1:-1;;;;;;35619:952:0;;;;;;;;:::i;31328:925::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31328:925:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;31328:925:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;40195:774::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;40195:774:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;40195:774:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;40195:774:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;40195:774:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;40195:774:0;;-1:-1:-1;40195:774:0;-1:-1:-1;;;;;;40195:774:0;;;;;;;;:::i;2764:148::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;2764:148:0;;;:::i;41875:878::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;41875:878:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;41875:878:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;41875:878:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;41875:878:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;41875:878:0;;-1:-1:-1;41875:878:0;-1:-1:-1;;;;;;41875:878:0;;;;;;;;:::i;34768:843::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;34768:843:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;34768:843:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34768:843:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;34768:843:0;;-1:-1:-1;34768:843:0;-1:-1:-1;;;;;;34768:843:0;;;;;;;;:::i;43297:253::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;43297:253:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;43297:253:0;;;;;;;;;;;;:::i;34028:732::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34028:732:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;34028:732:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;34028:732:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34028:732:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;34028:732:0;;-1:-1:-1;34028:732:0;-1:-1:-1;;;;;;34028:732:0;;;;;;;;:::i;2113:87::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;2113:87:0;;;:::i;:::-;;;;-1:-1:-1;;;;;2113:87:0;;;;;;;;;;;;;;44323:116;;5:9:-1;2:2;;;27:1;24;17:12;2:2;44323:116:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;44323:116:0;-1:-1:-1;;;;;44323:116:0;;:::i;:::-;;;;;;;;;;;;;;;;;;21714:38;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21714:38:0;;;:::i;42797:230::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;42797:230:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;42797:230:0;;;;;;;;;;;;:::i;30555:765::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30555:765:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;30555:765:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;40977:890::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;40977:890:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;40977:890:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;40977:890:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;40977:890:0;;-1:-1:-1;40977:890:0;-1:-1:-1;;;;;;40977:890:0;;;;;;;;:::i;26679:1090::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26679:1090:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;26679:1090:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;44205:110::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;44205:110:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;44205:110:0;-1:-1:-1;;;;;44205:110:0;;:::i;21666:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21666:41:0;;;:::i;43558:255::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;43558:255:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;43558:255:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;43558:255:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;43558:255:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;43558:255:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;43558:255:0;;-1:-1:-1;43558:255:0;;-1:-1:-1;;;;;43558:255:0:i;44447:440::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;44447:440:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;44447:440:0;;;;;;;;;;;;;;;;;:::i;29532:944::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29532:944:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;29532:944:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;24354:1091::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24354:1091:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;24354:1091:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;3067:244;;5:9:-1;2:2;;;27:1;24;17:12;2:2;3067:244:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;3067:244:0;-1:-1:-1;;;;;3067:244:0;;:::i;25453:1183::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;25453:1183:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;37561:932::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;37561:932:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;37561:932:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;37561:932:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;37561:932:0;;-1:-1:-1;37561:932:0;-1:-1:-1;;;;;;37561:932:0;;;;;;;;:::i;27777:815::-;28071:19;28092:17;28043:8;21885:15;21873:8;:27;;21865:60;;;;;-1:-1:-1;;;21865:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21865:60:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;28135:24:0;::::1;;::::0;;;:17:::1;:24;::::0;;;;;::::1;;28127:61;;;::::0;;-1:-1:-1;;;28127:61:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;28127:61:0;;;;;;;;;;;;;::::1;;28228:196;28258:5;28278:4;28297:9;28321:14;28350:12;28385:4;28405:8;28228:15;:196::i;:::-;28201:223:::0;;-1:-1:-1;28201:223:0;-1:-1:-1;28435:51:0::1;28463:5:::0;28470:2;28201:223;28435:27:::1;:51::i;:::-;28503:4;-1:-1:-1::0;;;;;28497:20:0::1;;28518:9;28497:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28497:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28497:31:0;;;;28539:45;28570:2;28574:9;28539:30;:45::i;:::-;27777:815:::0;;;;;;;;;;:::o;43035:254::-;43186:17;43223:58;43249:8;43259:9;43270:10;43223:25;:58::i;:::-;43216:65;43035:254;-1:-1:-1;;;;43035:254:0:o;36579:974::-;36854:24;36826:8;21885:15;21873:8;:27;;21865:60;;;;;-1:-1:-1;;;21865:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21865:60:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;36929:4:0::1;36904:29;:4:::0;;-1:-1:-1;;36909:15:0;;36904:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;36904:21:0::1;-1:-1:-1::0;;;;;36904:29:0::1;;36896:67;;;::::0;;-1:-1:-1;;;36896:67:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;36896:67:0;;;;;;;;;;;;;::::1;;36984:51;37011:7;37020:8;37030:4;;36984:51;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;36984:26:0::1;::::0;-1:-1:-1;;;36984:51:0:i:1;:::-;36974:61;;37099:12;37068:7;37093:1;37076:7;:14;:18;37068:27;;;;;;;;;;;;;;:43;;37046:132;;;;-1:-1:-1::0;;;37046:132:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37189:176;37235:4;;37240:1;37235:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;37235:7:0::1;37257:10;37282:47;37303:7;37312:4;;37317:1;37312:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;37312:7:0::1;37321:4;;37326:1;37321:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;37321:7:0::1;37282:20;:47::i;:::-;37344:7;37352:1;37344:10;;;;;;;;;;;;;;37189:31;:176::i;:::-;37376:35;37382:7;37391:4;;37376:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;37405:4:0::1;::::0;-1:-1:-1;37376:5:0::1;::::0;-1:-1:-1;;37376:35:0:i:1;:::-;37428:4;-1:-1:-1::0;;;;;37422:20:0::1;;37443:7;37468:1;37451:7;:14;:18;37443:27;;;;;;;;;;;;;;37422:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;37422:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;37422:49:0;;;;37482:63;37513:2;37517:7;37542:1;37525:7;:14;:18;37517:27;;;;;;;;;;;;;;37482:30;:63::i;:::-;36579:974:::0;;;;;;;;;:::o;44084:113::-;2344:12;:10;:12::i;:::-;-1:-1:-1;;;;;2333:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2333:23:0;;2325:68;;;;;-1:-1:-1;;;2325:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2325:68:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;44157:24:0::1;44184:5;44157:24:::0;;;:17:::1;:24;::::0;;;;:32;;-1:-1:-1;;44157:32:0::1;::::0;;44084:113::o;43821:255::-;43968:24;44017:51;44043:7;44052:9;44063:4;44017:25;:51::i;:::-;44010:58;;43821:255;;;;;:::o;28600:924::-;28945:15;28962;28990:12;29005:45;29026:7;29035:6;29043;29005:20;:45::i;:::-;28990:60;;29061:13;29077:10;:36;;29104:9;29077:36;;;-1:-1:-1;;29077:36:0;29124:178;;;-1:-1:-1;;;29124:178:0;;29162:10;29124:178;;;;29195:4;29124:178;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29061:52;;-1:-1:-1;;;;;;29124:23:0;;;;;:178;;;;;-1:-1:-1;;29124:178:0;;;;;;;;-1:-1:-1;29124:23:0;:178;;;2:2:-1;;;;27:1;24;17:12;2:2;29124:178:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29124:178:0;;;;29334:182;29364:6;29385;29406:9;29430:10;29455;29480:2;29497:8;29334:15;:182::i;:::-;29313:203;;;;;;;;28600:924;;;;;;;;;;;;;;;;:::o;33266:754::-;33544:24;33516:8;21885:15;21873:8;:27;;21865:60;;;;;-1:-1:-1;;;21865:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21865:60:0;;;;;;;;;;;;;;;33596:51:::1;33623:7;33632:8;33642:4;;33596:51;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;33596:26:0::1;::::0;-1:-1:-1;;;33596:51:0:i:1;:::-;33586:61;;33711:12;33680:7;33705:1;33688:7;:14;:18;33680:27;;;;;;;;;;;;;;:43;;33658:132;;;;-1:-1:-1::0;;;33658:132:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33801:176;33847:4;;33852:1;33847:7;;;;;;33801:176;33988:24;33994:7;34003:4;;33988:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;34009:2:0;;-1:-1:-1;33988:5:0::1;::::0;-1:-1:-1;;33988:24:0:i:1;35619:952::-:0;35894:24;35866:8;21885:15;21873:8;:27;;21865:60;;;;;-1:-1:-1;;;21865:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21865:60:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;35969:4:0::1;35944:29;:4:::0;;-1:-1:-1;;35949:15:0;;35944:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;35944:21:0::1;-1:-1:-1::0;;;;;35944:29:0::1;;35936:67;;;::::0;;-1:-1:-1;;;35936:67:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;35936:67:0;;;;;;;;;;;;;::::1;;36024:51;36050:7;36059:9;36070:4;;36024:51;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;36024:25:0::1;::::0;-1:-1:-1;;;36024:51:0:i:1;:::-;36014:61;;36122:11;36108:7;36116:1;36108:10;;;;;;;;;;;;;;:25;;36086:110;;;;-1:-1:-1::0;;;36086:110:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31328:925:::0;31685:17;31715:12;31730:42;31751:7;31760:5;31767:4;31730:20;:42::i;:::-;31715:57;;31783:13;31799:10;:36;;31826:9;31799:36;;;-1:-1:-1;;31799:36:0;31846:178;;;-1:-1:-1;;;31846:178:0;;31884:10;31846:178;;;;31917:4;31846:178;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31783:52;;-1:-1:-1;;;;;;31846:23:0;;;;;:178;;;;;-1:-1:-1;;31846:178:0;;;;;;;;-1:-1:-1;31846:23:0;:178;;;2:2:-1;;;;27:1;24;17:12;2:2;31846:178:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31846:178:0;;;;32047:198;32109:5;32129:9;32153:14;32182:12;32209:2;32226:8;32047:47;:198::i;:::-;32035:210;31328:925;-1:-1:-1;;;;;;;;;;;;;31328:925:0:o;40195:774::-;40438:8;21885:15;21873:8;:27;;21865:60;;;;;-1:-1:-1;;;21865:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21865:60:0;;;;;;;;;;;;;;;40459:174:::1;40505:4;;40510:1;40505:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;40505:7:0::1;40527:10;40552:47;40573:7;40582:4;;40587:1;40582:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;40582:7:0::1;40591:4;;40596:1;40591:7;;;;;;40552:47;40614:8;40459:31;:174::i;:::-;40644:21;40675:4:::0;;-1:-1:-1;;40680:15:0;;40675:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;40675:21:0::1;-1:-1:-1::0;;;;;40668:39:0::1;;40708:2;40668:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;40668:43:0::1;-1:-1:-1::0;;;;;40668:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;40668:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;40668:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;40668:43:0;40722:44:::1;::::0;;40668:43:::1;40722:44:::0;;::::1;::::0;;;;;;;;;;;40668:43;;-1:-1:-1;40722:44:0::1;::::0;;;40757:4;;;;;;40722:44;::::1;::::0;40757:4;;40722:44;40757:4;40722:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;40763:2:0;;-1:-1:-1;40722:34:0::1;::::0;-1:-1:-1;;40722:44:0:i:1;:::-;40882:12:::0;40799:62:::1;40847:13:::0;40806:4;;-1:-1:-1;;40811:15:0;;40806:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;40806:21:0::1;-1:-1:-1::0;;;;;40799:39:0::1;;40839:2;40799:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;40799:43:0::1;-1:-1:-1::0;;;;;40799:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;40799:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;40799:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;40799:43:0;;:62:::1;:47;:62;:::i;:::-;:95;;40777:184;;;;-1:-1:-1::0;;;40777:184:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21936:1;40195:774:::0;;;;;;;:::o;2764:148::-;2344:12;:10;:12::i;:::-;-1:-1:-1;;;;;2333:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2333:23:0;;2325:68;;;;;-1:-1:-1;;;2325:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2325:68:0;;;;;;;;;;;;;;;2871:1:::1;2855:6:::0;;2834:40:::1;::::0;-1:-1:-1;;;;;2855:6:0;;::::1;::::0;2834:40:::1;::::0;2871:1;;2834:40:::1;2902:1;2885:19:::0;;-1:-1:-1;;;;;;2885:19:0::1;::::0;;2764:148::o;41875:878::-;42115:8;21885:15;21873:8;:27;;21865:60;;;;;-1:-1:-1;;;21865:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21865:60:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;42169:4:0::1;42144:29;:4:::0;;-1:-1:-1;;42149:15:0;;42144:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;42144:21:0::1;-1:-1:-1::0;;;;;42144:29:0::1;;42136:67;;;::::0;;-1:-1:-1;;;42136:67:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;42136:67:0;;;;;;;;;;;;;::::1;;42214:174;42260:4;;42265:1;42260:7;;;;;;42214:174;42399:55;42434:4;;42399:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;42448:4:0::1;::::0;-1:-1:-1;42399:34:0::1;::::0;-1:-1:-1;;42399:55:0:i:1;:::-;42485:37;::::0;;-1:-1:-1;;;42485:37:0;;42516:4:::1;42485:37;::::0;::::1;::::0;;;42465:17:::1;::::0;-1:-1:-1;;;;;42492:4:0::1;42485:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;42485:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;42485:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;42485:37:0;;-1:-1:-1;42555:25:0;;::::1;;42533:114;;;;-1:-1:-1::0;;;42533:114:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42664:4;-1:-1:-1::0;;;;;42658:20:0::1;;42679:9;42658:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;42658:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;42658:31:0;;;;42700:45;42731:2;42735:9;42700:30;:45::i;34768:843::-:0;35033:24;35005:8;21885:15;21873:8;:27;;21865:60;;;;;-1:-1:-1;;;21865:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21865:60:0;;;;;;;;;;;;;;;35094:4:::1;-1:-1:-1::0;;;;;35083:15:0::1;:4;;35088:1;35083:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;35083:7:0::1;-1:-1:-1::0;;;;;35083:15:0::1;;35075:53;;;::::0;;-1:-1:-1;;;35075:53:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;35075:53:0;;;;;;;;;;;;;::::1;;35149:52;35176:7;35185:9;35196:4;;35149:52;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;35149:26:0::1;::::0;-1:-1:-1;;;35149:52:0:i:1;:::-;35139:62;;35265:12;35234:7;35259:1;35242:7;:14;:18;35234:27;;;;;;;;;;;;;;:43;;35212:132;;;;-1:-1:-1::0;;;35212:132:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35361:4;-1:-1:-1::0;;;;;35355:19:0::1;;35382:7;35390:1;35382:10;;;;;;;;;;;;;;35355:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;35355:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;35355:40:0;;;;;35433:4;-1:-1:-1::0;;;;;35427:20:0::1;;35466:47;35487:7;35496:4;;35501:1;35496:7;;;;;;35466:47;35532:7;35540:1;35532:10;;;;;;;;;;;;;;35427:130;;;;;;;;;;;;;-1:-1:-1::0;;;;;35427:130:0::1;-1:-1:-1::0;;;;;35427:130:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;35427:130:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;35427:130:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;35427:130:0;35406:162:::1;;;;35579:24;35585:7;35594:4;;35579:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;35600:2:0;;-1:-1:-1;35579:5:0::1;::::0;-1:-1:-1;;35579:24:0:i:1;:::-;34768:843:::0;;;;;;;;:::o;43297:253::-;43448:16;43484:58;43509:9;43520;43531:10;43484:24;:58::i;34028:732::-;34306:24;34278:8;21885:15;21873:8;:27;;21865:60;;;;;-1:-1:-1;;;21865:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21865:60:0;;;;;;;;;;;;;;;34358:51:::1;34384:7;34393:9;34404:4;;34358:51;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;34358:25:0::1;::::0;-1:-1:-1;;;34358:51:0:i:1;:::-;34348:61;;34456:11;34442:7;34450:1;34442:10;;;;;;;;;;;;;;:25;;34420:110;;;;-1:-1:-1::0;;;34420:110:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2113:87:::0;2159:7;2186:6;-1:-1:-1;;;;;2186:6:0;2113:87;:::o;44323:116::-;-1:-1:-1;;;;;44407:24:0;44383:4;44407:24;;;:17;:24;;;;;;;;;44323:116::o;21714:38::-;;;:::o;42797:230::-;42937:15;42972:47;42991:7;43000:8;43010;42972:18;:47::i;30555:765::-;30833:17;30814:8;21885:15;21873:8;:27;;21865:60;;;;;-1:-1:-1;;;21865:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21865:60:0;;;;;;;;;;;;;;;30879:196:::1;30909:5;30929:4;30948:9;30972:14;31001:12;31036:4;31056:8;30879:15;:196::i;:::-;31165:38;::::0;;-1:-1:-1;;;31165:38:0;;31197:4:::1;31165:38;::::0;::::1;::::0;;;30863:212;;-1:-1:-1;31086:128:0::1;::::0;-1:-1:-1;31128:5:0;;31148:2;;-1:-1:-1;;;;;31165:23:0;::::1;::::0;::::1;::::0;:38;;;;;::::1;::::0;;;;;;;;;:23;:38;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;31165:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31165:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31165:38:0;31086:27:::1;:128::i;:::-;31231:4;-1:-1:-1::0;;;;;31225:20:0::1;;31246:9;31225:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31225:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31225:31:0;;;;31267:45;31298:2;31302:9;31267:30;:45::i;40977:890::-:0;41198:8;21885:15;21873:8;:27;;21865:60;;;;;-1:-1:-1;;;21865:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21865:60:0;;;;;;;;;;;;;;;41238:4:::1;-1:-1:-1::0;;;;;41227:15:0::1;:4;;41232:1;41227:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;41227:7:0::1;-1:-1:-1::0;;;;;41227:15:0::1;;41219:53;;;::::0;;-1:-1:-1;;;41219:53:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;41219:53:0;;;;;;;;;;;;;::::1;;41283:16;41302:9;41283:28;;41328:4;-1:-1:-1::0;;;;;41322:19:0::1;;41349:8;41322:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;41322:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;41322:38:0;;;;;41398:4;-1:-1:-1::0;;;;;41392:20:0::1;;41431:47;41452:7;41461:4;;41466:1;41461:7;;;;;;41431:47;41497:8;41392:128;;;;;;;;;;;;;-1:-1:-1::0;;;;;41392:128:0::1;-1:-1:-1::0;;;;;41392:128:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;41392:128:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;41392:128:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;41392:128:0;41371:160:::1;;;;41542:21;41573:4:::0;;-1:-1:-1;;41578:15:0;;41573:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;41573:21:0::1;-1:-1:-1::0;;;;;41566:39:0::1;;41606:2;41566:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;41566:43:0::1;-1:-1:-1::0;;;;;41566:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;41566:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;41566:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;41566:43:0;41620:44:::1;::::0;;41566:43:::1;41620:44:::0;;::::1;::::0;;;;;;;;;;;41566:43;;-1:-1:-1;41620:44:0::1;::::0;;;41655:4;;;;;;41620:44;::::1;::::0;41655:4;;41620:44;41655:4;41620:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;41661:2:0;;-1:-1:-1;41620:34:0::1;::::0;-1:-1:-1;;41620:44:0:i:1;:::-;41780:12:::0;41697:62:::1;41745:13:::0;41704:4;;-1:-1:-1;;41709:15:0;;41704:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;41704:21:0::1;-1:-1:-1::0;;;;;41697:39:0::1;;41737:2;41697:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;41697:43:0::1;-1:-1:-1::0;;;;;41697:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;26679:1090:0::0;26990:15;27007;26962:8;21885:15;21873:8;:27;;21865:60;;;;;-1:-1:-1;;;21865:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21865:60:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27048:25:0;::::1;;::::0;;;:17:::1;:25;::::0;;;;;::::1;;27040:62;;;::::0;;-1:-1:-1;;;27040:62:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;27040:62:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;27121:25:0;::::1;;::::0;;;:17:::1;:25;::::0;;;;;::::1;;27113:62;;;::::0;;-1:-1:-1;;;27113:62:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;27113:62:0;;;;;;;;;;;;;::::1;;27188:12;27203:45;27224:7;27233:6;27241;27203:20;:45::i;:::-;27259:58;::::0;;-1:-1:-1;;;27259:58:0;;27289:10:::1;27259:58;::::0;::::1;::::0;-1:-1:-1;;;;;27259:29:0;::::1;:58:::0;;;;;;;;;;;;;;27188:60;;-1:-1:-1;27259:29:0;;::::1;::::0;:58;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;27259:29:0;:58;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;27259:58:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27259:58:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;27391:25:0::1;::::0;;-1:-1:-1;;;27391:25:0;;-1:-1:-1;;;;;27391:25:0;;::::1;;::::0;::::1;::::0;;;27355:15:::1;::::0;;;27391:21;;::::1;::::0;::::1;::::0;:25;;;;;;;;;;;27355:15;27391:21;:25;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;27391:25:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27391:25:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;27391:25:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;27391:25:0;-1:-1:-1;27428:14:0::1;27448:39;27472:6:::0;27480;27448:23:::1;:39::i;:::-;27427:60;;;27529:6;-1:-1:-1::0;;;;;27519:16:0::1;:6;-1:-1:-1::0;;;;;27519:16:0::1;;:84;;27586:7;27595;27519:84;;;27552:7;27561;27519:84;27498:105:::0;;-1:-1:-1;27498:105:0;-1:-1:-1;27622:21:0;;::::1;;27614:68;;;;-1:-1:-1::0;;;27614:68:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27712:10;27701:7;:21;;27693:68;;;;-1:-1:-1::0;;;27693:68:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21936:1;;;;26679:1090:::0;;;;;;;;;;;:::o;44205:110::-;2344:12;:10;:12::i;:::-;-1:-1:-1;;;;;2333:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2333:23:0;;2325:68;;;;;-1:-1:-1;;;2325:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2325:68:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;44276:24:0::1;;::::0;;;44303:4:::1;44276:24;::::0;;;;;;;:31;;-1:-1:-1;;44276:31:0::1;::::0;;::::1;::::0;;44205:110::o;21666:41::-;;;:::o;43558:255::-;43705:24;43754:51;43781:7;43790:8;43800:4;43754:26;:51::i;44447:440::-;22111:1;22196:7;;:19;;22188:63;;;;;-1:-1:-1;;;22188:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;22111:1;22264:7;:18;2344:12:::1;:10;:12::i;:::-;-1:-1:-1::0;;;;;2333:23:0::1;:7;:5;:7::i;:::-;-1:-1:-1::0;;;;;2333:23:0::1;;2325:68;;;::::0;;-1:-1:-1;;;2325:68:0;;::::1;;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;;;;;;;;;2325:68:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;44605:16:0;::::2;44597:46;;;::::0;;-1:-1:-1;;;44597:46:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;44597:46:0;;;;;;;;;;;;;::::2;;-1:-1:-1::0;;;;;44658:23:0;::::2;44654:226;;44717:26;::::0;44699:12:::2;::::0;-1:-1:-1;;;;;44717:7:0;::::2;::::0;44732:6;;44699:12;44717:26;44699:12;44717:26;44732:6;44717:7;:26:::2;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;44698:45:0;;;44766:7;44758:39;;;::::0;;-1:-1:-1;;;44758:39:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;44758:39:0;;;;;;;;;;;;;::::2;;44654:226;;;;44837:9;-1:-1:-1::0;;;;;44830:26:0::2;;44857:2;44861:6;44830:38;;;;;;;;;;;;;-1:-1:-1::0;;;;;44830:38:0::2;-1:-1:-1::0;;;;;44830:38:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::2;2:2;44830:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::2;77:16;74:1;67:27;5:2;44830:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::2;4:2;-1:-1:::0;;44654:226:0::2;-1:-1:-1::0;;22067:1:0;22309:7;:22;-1:-1:-1;44447:440:0:o;29532:944::-;29896:19;29917:17;29952:12;29967:42;29988:7;29997:5;30004:4;29967:20;:42::i;:::-;29952:57;;30020:13;30036:10;:36;;30063:9;30036:36;;;-1:-1:-1;;30036:36:0;30083:178;;;-1:-1:-1;;;30083:178:0;;30121:10;30083:178;;;;30154:4;30083:178;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30020:52;;-1:-1:-1;;;;;;30083:23:0;;;;;:178;;;;;-1:-1:-1;;30083:178:0;;;;;;;;-1:-1:-1;30083:23:0;:178;;;2:2:-1;;;;27:1;24;17:12;2:2;30083:178:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30083:178:0;;;;30299:169;30332:5;30352:9;30376:14;30405:12;30432:2;30449:8;30299:18;:169::i;:::-;30272:196;;;;-1:-1:-1;29532:944:0;-1:-1:-1;;;;;;;;;;;;;29532:944:0:o;24354:1091::-;24716:15;24746;24776:17;24674:8;21885:15;21873:8;:27;;21865:60;;;;;-1:-1:-1;;;21865:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21865:60:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;24829:25:0;::::1;;::::0;;;:17:::1;:25;::::0;;;;;::::1;;24821:62;;;::::0;;-1:-1:-1;;;24821:62:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;24821:62:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;24902:25:0;::::1;;::::0;;;:17:::1;:25;::::0;;;;;::::1;;24894:62;;;::::0;;-1:-1:-1;;;24894:62:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;24894:62:0;;;;;;;;;;;;;::::1;;24990:174;25018:6;25039;25060:14;25089;25118:10;25143;24990:13;:174::i;:::-;24969:195:::0;;-1:-1:-1;24969:195:0;-1:-1:-1;25175:12:0::1;25190:45;25211:7;25220:6:::0;25228;25190:20:::1;:45::i;:::-;25175:60;;25246:66;25278:6;25286:10;25298:4;25304:7;25246:31;:66::i;:::-;25323;25355:6;25363:10;25375:4;25381:7;25323:31;:66::i;:::-;25423:4;-1:-1:-1::0;;;;;25412:21:0::1;;25434:2;25412:25;;;;;;;;;;;;;-1:-1:-1::0;;;;;25412:25:0::1;-1:-1:-1::0;;;;;25412:25:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;25412:25:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;25412:25:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;25412:25:0;24354:1091;;;;-1:-1:-1;25412:25:0;;-1:-1:-1;24354:1091:0;;-1:-1:-1;;;;;;;;;24354:1091:0:o;3067:244::-;2344:12;:10;:12::i;:::-;-1:-1:-1;;;;;2333:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2333:23:0;;2325:68;;;;;-1:-1:-1;;;2325:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2325:68:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;3156:22:0;::::1;3148:73;;;;-1:-1:-1::0;;;3148:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3258:6;::::0;;3237:38:::1;::::0;-1:-1:-1;;;;;3237:38:0;;::::1;::::0;3258:6;::::1;::::0;3237:38:::1;::::0;::::1;3286:6;:17:::0;;-1:-1:-1;;;;;;3286:17:0::1;-1:-1:-1::0;;;;;3286:17:0;;;::::1;::::0;;;::::1;::::0;;3067:244::o;25453:1183::-;25786:19;25820:17;25852;25744:8;21885:15;21873:8;:27;;21865:60;;;;;-1:-1:-1;;;21865:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21865:60:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;25905:24:0;::::1;;::::0;;;:17:::1;:24;::::0;;;;;::::1;;25897:61;;;::::0;;-1:-1:-1;;;25897:61:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;25897:61:0;;;;;;;;;;;;;::::1;;25998:176;26026:5;26046:4;26065:18;26098:9;26122:14;26151:12;25998:13;:176::i;:::-;25971:203:::0;;-1:-1:-1;25971:203:0;-1:-1:-1;26185:12:0::1;26200:42;26221:7;26230:5:::0;26237:4:::1;26200:20;:42::i;:::-;26185:57;;26253:69;26285:5;26292:10;26304:4;26310:11;26253:31;:69::i;:::-;26339:4;-1:-1:-1::0;;;;;26333:19:0::1;;26360:9;26333:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26333:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26333:39:0;;;;;26396:4;-1:-1:-1::0;;;;;26390:20:0::1;;26411:4;26417:9;26390:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;26390:37:0::1;-1:-1:-1::0;;;;;26390:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26390:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26390:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;26390:37:0;26383:45:::1;;;;26462:4;-1:-1:-1::0;;;;;26451:21:0::1;;26473:2;26451:25;;;;;;;;;;;;;-1:-1:-1::0;;;;;26451:25:0::1;-1:-1:-1::0;;;;;26451:25:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26451:25:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26451:25:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;26451:25:0;;-1:-1:-1;26527:9:0::1;:21:::0;-1:-1:-1;26523:105:0::1;;;26563:65;26594:10;26618:9;26606;:21;26563:30;:65::i;:::-;21936:1;25453:1183:::0;;;;;;;;;;;:::o;37561:932::-;37823:24;37795:8;21885:15;21873:8;:27;;21865:60;;;;;-1:-1:-1;;;21865:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21865:60:0;;;;;;;;;;;;;;;37884:4:::1;-1:-1:-1::0;;;;;37873:15:0::1;:4;;37878:1;37873:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;37873:7:0::1;-1:-1:-1::0;;;;;37873:15:0::1;;37865:53;;;::::0;;-1:-1:-1;;;37865:53:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;37865:53:0;;;;;;;;;;;;;::::1;;37939:51;37965:7;37974:9;37985:4;;37939:51;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;37939:25:0::1;::::0;-1:-1:-1;;;37939:51:0:i:1;:::-;37929:61;;38023:9;38009:7;38017:1;38009:10;;;;;;;;;;;;;;:23;;38001:71;;;;-1:-1:-1::0;;;38001:71:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38089:4;-1:-1:-1::0;;;;;38083:19:0::1;;38110:7;38118:1;38110:10;;;;;;;;;;;;;;38083:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;38083:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;38083:40:0;;;;;38161:4;-1:-1:-1::0;;;;;38155:20:0::1;;38194:47;38215:7;38224:4;;38229:1;38224:7;;;;;;38194:47;38260:7;38268:1;38260:10;;;;;;;;;;;;;;38155:130;;;;;;;;;;;;;-1:-1:-1::0;;;;;38155:130:0::1;-1:-1:-1::0;;;;;38155:130:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;38155:130:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;38155:130:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;38155:130:0;38134:162:::1;;;;38307:24;38313:7;38322:4;;38307:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;38328:2:0;;-1:-1:-1;38307:5:0::1;::::0;-1:-1:-1;;38307:24:0:i:1;:::-;38394:7;38402:1;38394:10;;;;;;;;;;;;;;38382:9;:22;38378:107;;;38419:66;38450:10;38474:7;38482:1;38474:10;;;;;;;;;;;;;;38462:9;:22;38419:30;:66::i;20308:449::-:0;20540:45;;;-1:-1:-1;;;;;20540:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;20540:45:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;20529:57:0;;;;20494:12;;20508:17;;20529:10;;;;20540:45;20529:57;;;25:18:-1;20529:57:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;20529:57:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;20493:93:0;;;;20619:7;:57;;;;-1:-1:-1;20631:11:0;;:16;;:44;;;20662:4;20651:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;20651:24:0;20631:44;20597:152;;;;-1:-1:-1;;;20597:152:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20308:449;;;;;:::o;21271:217::-;21384:12;;;21344;21384;;;;;;;;;-1:-1:-1;;;;;21362:7:0;;;21377:5;;21362:35;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;21362:35:0;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;21343:54:0;;;21416:7;21408:72;;;;-1:-1:-1;;;21408:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21271:217;;;:::o;11341:566::-;11477:17;11526:1;11515:8;:12;11507:64;;;;-1:-1:-1;;;11507:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11602:1;11590:9;:13;:31;;;;;11620:1;11607:10;:14;11590:31;11582:80;;;;-1:-1:-1;;;11582:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11673:23;11699:18;:8;11712:4;11699:18;:12;:18;:::i;:::-;11673:44;-1:-1:-1;11728:17:0;11748:31;11673:44;11768:10;11748:31;:19;:31;:::i;:::-;11728:51;-1:-1:-1;11790:19:0;11812:41;11837:15;11812:20;:9;11826:5;11812:20;:13;:20;:::i;:::-;:24;:41;:24;:41;:::i;:::-;11790:63;;11888:11;11876:9;:23;;;;;;;11341:566;-1:-1:-1;;;;;;;11341:566:0:o;12628:559::-;12766:24;12826:1;12811:4;:11;:16;;12803:55;;;;;-1:-1:-1;;;12803:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;12893:4;:11;12879:26;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12879:26:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;12879:26:0;;12869:36;;12929:8;12916:7;12924:1;12916:10;;;;;;;;;;;;;:21;;;;;12953:9;12948:232;12982:1;12968:4;:11;:15;12964:1;:19;12948:232;;;13006:17;13025:18;13047:42;13059:7;13068:4;13073:1;13068:7;;;;;;;;;;;;;;13077:4;13082:1;13086;13082:5;13077:11;;;;;;;;;;;;;;13047;:42::i;:::-;13005:84;;;;13121:47;13134:7;13142:1;13134:10;;;;;;;;;;;;;;13146:9;13157:10;13121:12;:47::i;:::-;13104:7;13112:1;13116;13112:5;13104:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;12985:3:0;;12948:232;;;;12628:559;;;;;:::o;9560:651::-;9683:12;9709:14;9725;9743:26;9754:6;9762;9743:10;:26::i;:::-;9988:32;;;-1:-1:-1;;9988:32:0;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;9988:32:0;;;;;9978:43;;;;;;-1:-1:-1;;;;;;9867:291:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;9867:291:0;;;;;;;9835:342;;;;;;;;;9560:651;-1:-1:-1;;;;;9560:651:0:o;20765:498::-;21036:51;;;-1:-1:-1;;;;;21036:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;21036:51:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;21025:63:0;;;;20990:12;;21004:17;;21025:10;;;;21036:51;21025:63;;;25:18:-1;21025:63:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;21025:63:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;20989:99:0;;;;21121:7;:57;;;;-1:-1:-1;21133:11:0;;:16;;:44;;;21164:4;21153:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;21153:24:0;21133:44;21099:156;;;;-1:-1:-1;;;21099:156:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20765:498;;;;;;:::o;32364:894::-;32508:9;32503:748;32537:1;32523:4;:11;:15;32519:1;:19;32503:748;;;32561:13;32576:14;32595:4;32600:1;32595:7;;;;;;;;;;;;;;32604:4;32609:1;32613;32609:5;32604:11;;;;;;;;;;;;;;32560:56;;;;32632:14;32652:38;32676:5;32683:6;32652:23;:38::i;:::-;32631:59;;;32705:17;32725:7;32733:1;32737;32733:5;32725:14;;;;;;;;;;;;;;32705:34;;32755:18;32775;32806:6;-1:-1:-1;;;;;32797:15:0;:5;-1:-1:-1;;;;;32797:15:0;;:101;;32876:9;32895:1;32797:101;;;32841:1;32845:9;32797:101;32754:144;;;;32913:10;32944:1;32930:4;:11;:15;32926:1;:19;:112;;33035:3;32926:112;;;32965:50;32986:7;32995:6;33003:4;33008:1;33012;33008:5;33003:11;;;;;;;;;;;;;;32965:20;:50::i;:::-;32913:125;;33064:44;33085:7;33094:5;33101:6;33064:20;:44::i;:::-;-1:-1:-1;;;;;33053:61:0;;33133:10;33162;33191:2;33222:1;33212:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;33212:12:0;87:42:-1;143:17;;-1:-1;33212:12:0;;33053:186;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33053:186:0;-1:-1:-1;;;;;33053:186:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;33053:186:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33053:186:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;32540:3:0;;;;;-1:-1:-1;32503:748:0;;-1:-1:-1;;;;;;;;32503:748:0;;;32364:894;;;:::o;642:106::-;730:10;642:106;:::o;13268:580::-;13406:24;13466:1;13451:4;:11;:16;;13443:55;;;;;-1:-1:-1;;;13443:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;13533:4;:11;13519:26;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13519:26:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;13519:26:0;;13509:36;;13586:9;13556:7;13581:1;13564:7;:14;:18;13556:27;;;;;;;;;;;;;;;;;:39;13623:11;;-1:-1:-1;;13623:15:0;13606:235;13640:5;;13606:235;;13668:17;13687:18;13709:42;13721:7;13730:4;13739:1;13735;:5;13730:11;;;;;;;;;;;;;;13743:4;13748:1;13743:7;;;;;;;13709:42;13667:84;;;;13783:46;13795:7;13803:1;13795:10;;;;;;;;;;;;;;13807:9;13818:10;13783:11;:46::i;:::-;13766:7;13778:1;13774;:5;13766:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;13647:3:0;13606:235;;38640:1547;38778:9;38773:1407;38807:1;38793:4;:11;:15;38789:1;:19;38773:1407;;;38831:13;38846:14;38865:4;38870:1;38865:7;;;;;;;;;;;;;;38874:4;38879:1;38883;38879:5;38874:11;;;;;;;;;;;;;;38830:56;;;;38902:14;38922:38;38946:5;38953:6;38922:23;:38::i;:::-;38901:59;;;38975:15;39022:44;39043:7;39052:5;39059:6;39022:20;:44::i;:::-;38975:106;;39096:19;39130:20;39242:16;39260;39282:4;-1:-1:-1;;;;;39282:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;39282:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;39282:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;39282:18:0;;;;;;;-1:-1:-1;;;;;39241:59:0;;;;-1:-1:-1;39241:59:0;;-1:-1:-1;39320:20:0;;-1:-1:-1;;;;;39367:15:0;;;;;;;:103;;39451:8;39461;39367:103;;;39407:8;39417;39367:103;39319:151;;;;39503:96;39568:12;39510:5;-1:-1:-1;;;;;39503:23:0;;39535:4;39503:38;;;;;;;;;;;;;-1:-1:-1;;;;;39503:38:0;-1:-1:-1;;;;;39503:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;39503:96:0;39489:110;;39633:149;39681:11;39715:12;39750:13;39633:25;:149::i;:::-;39618:164;;38773:1407;;;;39813:18;39833;39864:6;-1:-1:-1;;;;;39855:15:0;:5;-1:-1:-1;;;;;39855:15:0;;:107;;39937:12;39959:1;39855:107;;;39899:1;39903:12;39855:107;39812:150;;;;39977:10;40008:1;39994:4;:11;:15;39990:1;:19;:112;;40099:3;39990:112;;;40029:50;40050:7;40059:6;40067:4;40072:1;40076;40072:5;40067:11;;;;;;;40029:50;40155:12;;;40165:1;40155:12;;;;;;;;;;-1:-1:-1;;;40117:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;40117:51:0;;;;;;;;;;;;;;;;;;;;;;39977:125;;-1:-1:-1;40117:9:0;;;;;;40127:10;;40139;;39977:125;;40155:12;;40117:51;;;;;;;;40155:12;;40117:51;;;;40155:12;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;40117:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;40117:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;38810:3:0;;;;;-1:-1:-1;38773:1407:0;;-1:-1:-1;;;;;;;;;;38773:1407:0;7761:138;7854:5;;;7849:16;;;;7841:50;;;;;-1:-1:-1;;;7841:50:0;;;;;;;;;;;;-1:-1:-1;;;7841:50:0;;;;;;;;;;;;;;12028:518;12164:16;12213:1;12201:9;:13;12193:66;;;;-1:-1:-1;;;12193:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12290:1;12278:9;:13;:31;;;;;12308:1;12295:10;:14;12278:31;12270:80;;;;-1:-1:-1;;;12270:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12361:17;12381:35;12410:5;12381:24;:9;12395;12381:24;:13;:24;:::i;:::-;:28;:35;:28;:35;:::i;:::-;12361:55;-1:-1:-1;12427:19:0;12449:35;12479:4;12449:25;:10;12464:9;12449:25;:14;:25;:::i;:35::-;12427:57;;12506:32;12536:1;12519:11;12507:9;:23;;;;;;;12506:32;:29;:32;:::i;:::-;12495:43;12028:518;-1:-1:-1;;;;;;12028:518:0:o;10860:359::-;10985:15;11031:1;11021:7;:11;11013:57;;;;-1:-1:-1;;;11013:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11100:1;11089:8;:12;:28;;;;;11116:1;11105:8;:12;11089:28;11081:77;;;;-1:-1:-1;;;11081:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11203:8;11179:21;:7;11191:8;11179:21;:11;:21;:::i;:::-;:32;;;;;;;10860:359;-1:-1:-1;;;;10860:359:0:o;9127:341::-;9202:14;9218;9263:6;-1:-1:-1;;;;;9253:16:0;:6;-1:-1:-1;;;;;9253:16:0;;;9245:62;;;;-1:-1:-1;;;9245:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9346:6;-1:-1:-1;;;;;9337:15:0;:6;-1:-1:-1;;;;;9337:15:0;;:53;;9375:6;9383;9337:53;;;9356:6;9364;9337:53;9318:72;;-1:-1:-1;9318:72:0;-1:-1:-1;;;;;;9409:20:0;;9401:59;;;;;-1:-1:-1;;;9401:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;9127:341;;;;;:::o;22634:1712::-;22965:46;;;-1:-1:-1;;;22965:46:0;;-1:-1:-1;;;;;22965:46:0;;;;;;;;;;;;;;;;22864:15;;;;;;22979:7;22965:30;;;;;;:46;;;;;;;;;;;;;;;:30;:46;;;2:2:-1;;;;27:1;24;17:12;2:2;22965:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22965:46:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;22965:46:0;-1:-1:-1;;;;;22965:60:0;;22961:142;;;23042:49;;;-1:-1:-1;;;23042:49:0;;-1:-1:-1;;;;;23042:49:0;;;;;;;;;;;;;;;;23056:7;23042:33;;;;;;:49;;;;;;;;;;;;;;;-1:-1:-1;23042:33:0;:49;;;2:2:-1;;;;27:1;24;17:12;2:2;23042:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23042:49:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;22961:142:0;23114:16;23132;23152:99;23191:7;23213:6;23234;23152:24;:99::i;:::-;23113:138;;;;23266:8;23278:1;23266:13;:30;;;;-1:-1:-1;23283:13:0;;23266:30;23262:1077;;;23335:14;;-1:-1:-1;23351:14:0;;-1:-1:-1;23262:1077:0;;;23399:22;23424:120;23461:14;23494:8;23521;23424:18;:120::i;:::-;23399:145;;23581:14;23563;:32;23559:769;;23664:10;23646:14;:28;;23616:136;;;;-1:-1:-1;;;23616:136:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23793:14;;-1:-1:-1;23809:14:0;-1:-1:-1;23809:14:0;23559:769;;;23865:22;23890:136;23931:14;23968:8;23999;23890:18;:136::i;:::-;23865:161;;24070:14;24052;:32;;24045:40;;;;24152:10;24134:14;:28;;24104:136;;;;-1:-1:-1;;;24104:136:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24281:14;-1:-1:-1;24297:14:0;;-1:-1:-1;23559:769:0;23262:1077;;22634:1712;;;;;;;;;;;:::o;7907:151::-;7965:9;7995:6;;;:30;;-1:-1:-1;;8010:5:0;;;8024:1;8019;8010:5;8019:1;8005:15;;;;;:20;7995:30;7987:63;;;;;-1:-1:-1;;;7987:63:0;;;;;;;;;;;;-1:-1:-1;;;7987:63:0;;;;;;;;;;;;;;7616:137;7709:5;;;7704:16;;;;7696:49;;;;;-1:-1:-1;;;7696:49:0;;;;;;;;;;;;-1:-1:-1;;;7696:49:0;;;;;;;;;;;;;;10269:478;10396:16;10414;10444:14;10464:26;10475:6;10483;10464:10;:26::i;:::-;10443:47;;;10501:32;10509:7;10518:6;10526;10501:7;:32::i;:::-;;10545:16;10563;10596:32;10604:7;10613:6;10621;10596:7;:32::i;:::-;-1:-1:-1;;;;;10585:56:0;;:58;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10585:58:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10585:58:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;10585:58:0;;;;;;;-1:-1:-1;;;;;10544:99:0;;;;-1:-1:-1;10544:99:0;;-1:-1:-1;;;;;;10677:16:0;;;;;;;:62;;10720:8;10730;10677:62;;;10697:8;10707;10677:62;10654:85;;;;-1:-1:-1;10269:478:0;-1:-1:-1;;;;;;;10269:478:0:o
Swarm Source
ipfs://d3346e8d9688b093cf0cbbbfe5ca5cb9b9aaa93e20d16bebaaf35dcb18522e45
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
BSC | 100.00% | $0.009867 | 17.689 | $0.1745 |
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.