Overview
ETH Balance
0 ETH
ETH Value
$0.00More Info
Private Name Tags
ContractCreator
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
0xe5865449abfc881c8b177fc5350ac5020a22a4a5d757e7e636a86933f863344a | - | (pending) | 21 hrs ago | IN | 0.002 ETH | (Pending) | |||
0x3ca76c84f9588ef14955c8209829513bb377a3688d288a20bff9739b8814fe83 | - | (pending) | 21 hrs ago | IN | 0.01 ETH | (Pending) | |||
0xc6d85c165ea2e298752a177fae09881cdf6f6e846923cd92dfb9cb8161df3b32 | - | (pending) | 21 hrs ago | IN | 0.03 ETH | (Pending) | |||
Swap Exact Token... | 9328868 | 15 mins ago | IN | 0 ETH | 0.00005548 | ||||
Remove Liquidity... | 9328857 | 16 mins ago | IN | 0 ETH | 0.00010191 | ||||
Add Liquidity ET... | 9328659 | 26 mins ago | IN | 0.00199799 ETH | 0.00007589 | ||||
Swap Exact ETH F... | 9328618 | 28 mins ago | IN | 0.002 ETH | 0.00005749 | ||||
Swap Exact ETH F... | 9321684 | 6 hrs ago | IN | 0.08442817 ETH | 0.00005275 | ||||
Swap Exact Token... | 9320765 | 6 hrs ago | IN | 0 ETH | 0.00005366 | ||||
Swap Exact ETH F... | 9320697 | 6 hrs ago | IN | 0.0006 ETH | 0.00005763 | ||||
Swap Exact Token... | 9320149 | 7 hrs ago | IN | 0 ETH | 0.00005351 | ||||
Swap Exact ETH F... | 9320100 | 7 hrs ago | IN | 0.0006 ETH | 0.00005758 | ||||
Swap Exact Token... | 9319699 | 7 hrs ago | IN | 0 ETH | 0.00005403 | ||||
Swap Exact ETH F... | 9319663 | 7 hrs ago | IN | 0.0006 ETH | 0.00005828 | ||||
Swap Exact Token... | 9319280 | 8 hrs ago | IN | 0 ETH | 0.00005717 | ||||
Swap Exact ETH F... | 9319251 | 8 hrs ago | IN | 0.0005 ETH | 0.00005931 | ||||
Swap Exact Token... | 9318671 | 8 hrs ago | IN | 0 ETH | 0.00005358 | ||||
Swap Exact ETH F... | 9318640 | 8 hrs ago | IN | 0.0005 ETH | 0.00005765 | ||||
Swap Exact Token... | 9318319 | 8 hrs ago | IN | 0 ETH | 0.00000747 | ||||
Remove Liquidity... | 9318116 | 9 hrs ago | IN | 0 ETH | 0.0000117 | ||||
Swap Exact Token... | 9317837 | 9 hrs ago | IN | 0 ETH | 0.00000736 | ||||
Add Liquidity ET... | 9317621 | 9 hrs ago | IN | 0.00099311 ETH | 0.00001074 | ||||
Remove Liquidity... | 9317612 | 9 hrs ago | IN | 0 ETH | 0.00001187 | ||||
Swap Exact ETH F... | 9317384 | 9 hrs ago | IN | 0.00099311 ETH | 0.00000872 | ||||
Add Liquidity ET... | 9317303 | 9 hrs ago | IN | 0.00210167 ETH | 0.00001137 |
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
9328868 | 15 mins ago | 0.00199002 ETH | ||||
9328868 | 15 mins ago | 0.00199002 ETH | ||||
9328857 | 16 mins ago | 0.00199799 ETH | ||||
9328857 | 16 mins ago | 0.00199799 ETH | ||||
9328659 | 26 mins ago | 0.00199799 ETH | ||||
9328618 | 28 mins ago | 0.002 ETH | ||||
9321684 | 6 hrs ago | 0.08442817 ETH | ||||
9320765 | 6 hrs ago | 0.000597 ETH | ||||
9320765 | 6 hrs ago | 0.000597 ETH | ||||
9320697 | 6 hrs ago | 0.0006 ETH | ||||
9320149 | 7 hrs ago | 0.000597 ETH | ||||
9320149 | 7 hrs ago | 0.000597 ETH | ||||
9320100 | 7 hrs ago | 0.0006 ETH | ||||
9319699 | 7 hrs ago | 0.000597 ETH | ||||
9319699 | 7 hrs ago | 0.000597 ETH | ||||
9319663 | 7 hrs ago | 0.0006 ETH | ||||
9319280 | 8 hrs ago | 0.0004975 ETH | ||||
9319280 | 8 hrs ago | 0.0004975 ETH | ||||
9319251 | 8 hrs ago | 0.0005 ETH | ||||
9318671 | 8 hrs ago | 0.0004975 ETH | ||||
9318671 | 8 hrs ago | 0.0004975 ETH | ||||
9318640 | 8 hrs ago | 0.0005 ETH | ||||
9318319 | 8 hrs ago | 0.00098669 ETH | ||||
9318319 | 8 hrs ago | 0.00098669 ETH | ||||
9318116 | 9 hrs ago | 0.00098296 ETH |
Loading...
Loading
Contract Name:
PunkRouter
Compiler Version
v0.6.6+commit.6c089d02
Contract Source Code (Solidity)
/** *Submitted for verification at scrollscan.com on 2023-10-18 */ // Deployed on zkScroll for PunkSwapDEX // using official WBNB 0x4200000000000000000000000000000000000006 // Same as // https://bscscan.com/address/0x10ed43c718714eb63d5aa57b78b54704e256024e#code // 0.6.6 optimization 999999 // 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, uint 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: APPROVE_FAILED" ); } function safeTransfer(address token, address to, uint 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: TRANSFER_FAILED" ); } function safeTransferFrom( address token, address from, address to, uint 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: TRANSFER_FROM_FAILED" ); } function safeTransferETH(address to, uint value) internal { (bool success, ) = to.call{value: value}(new bytes(0)); require(success, "TransferHelper: ETH_TRANSFER_FAILED"); } } // File: contracts\interfaces\IPunkRouter01.sol pragma solidity >=0.6.2; interface IPunkRouter01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable returns (uint[] memory amounts); function swapTokensForExactETH( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactTokensForETH( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapETHForExactTokens( uint amountOut, address[] calldata path, address to, uint deadline ) external payable returns (uint[] memory amounts); function quote( uint amountA, uint reserveA, uint reserveB ) external pure returns (uint amountB); function getAmountOut( uint amountIn, uint reserveIn, uint reserveOut ) external pure returns (uint amountOut); function getAmountIn( uint amountOut, uint reserveIn, uint reserveOut ) external pure returns (uint amountIn); function getAmountsOut( uint amountIn, address[] calldata path ) external view returns (uint[] memory amounts); function getAmountsIn( uint amountOut, address[] calldata path ) external view returns (uint[] memory amounts); } // File: contracts\interfaces\IPunkRouter02.sol pragma solidity >=0.6.2; interface IPunkRouter02 is IPunkRouter01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } // File: contracts\interfaces\IPunkFactory.sol pragma solidity >=0.5.0; interface IPunkFactory { event PairCreated( address indexed token0, address indexed token1, address pair, uint ); 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(uint) external view returns (address pair); function allPairsLength() external view returns (uint); 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: contracts\libraries\SafeMath.sol pragma solidity =0.6.6; // a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math) library SafeMath { function add(uint x, uint y) internal pure returns (uint z) { require((z = x + y) >= x, "ds-math-add-overflow"); } function sub(uint x, uint y) internal pure returns (uint z) { require((z = x - y) <= x, "ds-math-sub-underflow"); } function mul(uint x, uint y) internal pure returns (uint z) { require(y == 0 || (z = x * y) / y == x, "ds-math-mul-overflow"); } } // File: contracts\interfaces\IPunkPair.sol pragma solidity >=0.5.0; interface IPunkPair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint 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 (uint); function balanceOf(address owner) external view returns (uint); function allowance( address owner, address spender ) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom( address from, address to, uint 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 (uint); function permit( address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn( address indexed sender, uint amount0, uint amount1, address indexed to ); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); 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 (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap( uint amount0Out, uint amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } // File: contracts\libraries\PunkLibrary.sol pragma solidity >=0.5.0; library PunkLibrary { using SafeMath for uint; // 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, "PunkLibrary: IDENTICAL_ADDRESSES"); (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA); require(token0 != address(0), "PunkLibrary: 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( uint( keccak256( abi.encodePacked( hex"ff", factory, keccak256(abi.encodePacked(token0, token1)), // hex"de0be195ffcf9d98e98ba1aa415e4e6746b6cc3a1f593373eb5d7f1b133573bd" // init code hash shibarium // hex"c6df6d56b16b5fa85a036d9217aa52e831471ebbef487c21fccc7210d88f0e75" // init code hash shibariumTest + opBNBTest + opBNB hex"26d46fe42d007086320008307b8928b2ee40d32d0203f2d7e4ce35f2700a7063" // init code hash zkScroll ) ) ) ); } // fetches and sorts the reserves for a pair function getReserves( address factory, address tokenA, address tokenB ) internal view returns (uint reserveA, uint reserveB) { (address token0, ) = sortTokens(tokenA, tokenB); pairFor(factory, tokenA, tokenB); (uint reserve0, uint reserve1, ) = IPunkPair( 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( uint amountA, uint reserveA, uint reserveB ) internal pure returns (uint amountB) { require(amountA > 0, "PunkLibrary: INSUFFICIENT_AMOUNT"); require( reserveA > 0 && reserveB > 0, "PunkLibrary: 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( uint amountIn, uint reserveIn, uint reserveOut ) internal pure returns (uint amountOut) { require(amountIn > 0, "PunkLibrary: INSUFFICIENT_INPUT_AMOUNT"); require( reserveIn > 0 && reserveOut > 0, "PunkLibrary: INSUFFICIENT_LIQUIDITY" ); uint amountInWithFee = amountIn.mul(9975); uint numerator = amountInWithFee.mul(reserveOut); uint 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( uint amountOut, uint reserveIn, uint reserveOut ) internal pure returns (uint amountIn) { require(amountOut > 0, "PunkLibrary: INSUFFICIENT_OUTPUT_AMOUNT"); require( reserveIn > 0 && reserveOut > 0, "PunkLibrary: INSUFFICIENT_LIQUIDITY" ); uint numerator = reserveIn.mul(amountOut).mul(10000); uint denominator = reserveOut.sub(amountOut).mul(9975); amountIn = (numerator / denominator).add(1); } // performs chained getAmountOut calculations on any number of pairs function getAmountsOut( address factory, uint amountIn, address[] memory path ) internal view returns (uint[] memory amounts) { require(path.length >= 2, "PunkLibrary: INVALID_PATH"); amounts = new uint[](path.length); amounts[0] = amountIn; for (uint i; i < path.length - 1; i++) { (uint reserveIn, uint 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, uint amountOut, address[] memory path ) internal view returns (uint[] memory amounts) { require(path.length >= 2, "PunkLibrary: INVALID_PATH"); amounts = new uint[](path.length); amounts[amounts.length - 1] = amountOut; for (uint i = path.length - 1; i > 0; i--) { (uint reserveIn, uint reserveOut) = getReserves( factory, path[i - 1], path[i] ); amounts[i - 1] = getAmountIn(amounts[i], reserveIn, reserveOut); } } } // File: contracts\interfaces\IERC20.sol pragma solidity >=0.5.0; interface IERC20 { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint 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 (uint); function balanceOf(address owner) external view returns (uint); function allowance( address owner, address spender ) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom( address from, address to, uint value ) external returns (bool); } // File: contracts\interfaces\IWETH.sol pragma solidity >=0.5.0; interface IWETH { function deposit() external payable; function transfer(address to, uint value) external returns (bool); function withdraw(uint) external; } // File: contracts\PunkRouter.sol pragma solidity =0.6.6; contract PunkRouter is IPunkRouter02 { using SafeMath for uint; address public immutable override factory; address public immutable override WETH; modifier ensure(uint deadline) { require(deadline >= block.timestamp, "PunkRouter: EXPIRED"); _; } 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, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin ) internal virtual returns (uint amountA, uint amountB) { // create the pair if it doesn't exist yet if (IPunkFactory(factory).getPair(tokenA, tokenB) == address(0)) { IPunkFactory(factory).createPair(tokenA, tokenB); } (uint reserveA, uint reserveB) = PunkLibrary.getReserves( factory, tokenA, tokenB ); if (reserveA == 0 && reserveB == 0) { (amountA, amountB) = (amountADesired, amountBDesired); } else { uint amountBOptimal = PunkLibrary.quote( amountADesired, reserveA, reserveB ); if (amountBOptimal <= amountBDesired) { require( amountBOptimal >= amountBMin, "PunkRouter: INSUFFICIENT_B_AMOUNT" ); (amountA, amountB) = (amountADesired, amountBOptimal); } else { uint amountAOptimal = PunkLibrary.quote( amountBDesired, reserveB, reserveA ); assert(amountAOptimal <= amountADesired); require( amountAOptimal >= amountAMin, "PunkRouter: INSUFFICIENT_A_AMOUNT" ); (amountA, amountB) = (amountAOptimal, amountBDesired); } } } function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external virtual override ensure(deadline) returns (uint amountA, uint amountB, uint liquidity) { (amountA, amountB) = _addLiquidity( tokenA, tokenB, amountADesired, amountBDesired, amountAMin, amountBMin ); address pair = PunkLibrary.pairFor(factory, tokenA, tokenB); TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA); TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB); liquidity = IPunkPair(pair).mint(to); } function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable virtual override ensure(deadline) returns (uint amountToken, uint amountETH, uint liquidity) { (amountToken, amountETH) = _addLiquidity( token, WETH, amountTokenDesired, msg.value, amountTokenMin, amountETHMin ); address pair = PunkLibrary.pairFor(factory, token, WETH); TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken); IWETH(WETH).deposit{value: amountETH}(); assert(IWETH(WETH).transfer(pair, amountETH)); liquidity = IPunkPair(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, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) public virtual override ensure(deadline) returns (uint amountA, uint amountB) { address pair = PunkLibrary.pairFor(factory, tokenA, tokenB); IPunkPair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair (uint amount0, uint amount1) = IPunkPair(pair).burn(to); (address token0, ) = PunkLibrary.sortTokens(tokenA, tokenB); (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0); require(amountA >= amountAMin, "PunkRouter: INSUFFICIENT_A_AMOUNT"); require(amountB >= amountBMin, "PunkRouter: INSUFFICIENT_B_AMOUNT"); } function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) public virtual override ensure(deadline) returns (uint amountToken, uint amountETH) { (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, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external virtual override returns (uint amountA, uint amountB) { address pair = PunkLibrary.pairFor(factory, tokenA, tokenB); uint value = approveMax ? uint(-1) : liquidity; IPunkPair(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, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external virtual override returns (uint amountToken, uint amountETH) { address pair = PunkLibrary.pairFor(factory, token, WETH); uint value = approveMax ? uint(-1) : liquidity; IPunkPair(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, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) public virtual override ensure(deadline) returns (uint 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, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external virtual override returns (uint amountETH) { address pair = PunkLibrary.pairFor(factory, token, WETH); uint value = approveMax ? uint(-1) : liquidity; IPunkPair(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( uint[] memory amounts, address[] memory path, address _to ) internal virtual { for (uint i; i < path.length - 1; i++) { (address input, address output) = (path[i], path[i + 1]); (address token0, ) = PunkLibrary.sortTokens(input, output); uint amountOut = amounts[i + 1]; (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOut) : (amountOut, uint(0)); address to = i < path.length - 2 ? PunkLibrary.pairFor(factory, output, path[i + 2]) : _to; IPunkPair(PunkLibrary.pairFor(factory, input, output)).swap( amount0Out, amount1Out, to, new bytes(0) ); } } function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external virtual override ensure(deadline) returns (uint[] memory amounts) { amounts = PunkLibrary.getAmountsOut(factory, amountIn, path); require( amounts[amounts.length - 1] >= amountOutMin, "PunkRouter: INSUFFICIENT_OUTPUT_AMOUNT" ); TransferHelper.safeTransferFrom( path[0], msg.sender, PunkLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, to); } function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external virtual override ensure(deadline) returns (uint[] memory amounts) { amounts = PunkLibrary.getAmountsIn(factory, amountOut, path); require( amounts[0] <= amountInMax, "PunkRouter: EXCESSIVE_INPUT_AMOUNT" ); TransferHelper.safeTransferFrom( path[0], msg.sender, PunkLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, to); } function swapExactETHForTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable virtual override ensure(deadline) returns (uint[] memory amounts) { require(path[0] == WETH, "PunkRouter: INVALID_PATH"); amounts = PunkLibrary.getAmountsOut(factory, msg.value, path); require( amounts[amounts.length - 1] >= amountOutMin, "PunkRouter: INSUFFICIENT_OUTPUT_AMOUNT" ); IWETH(WETH).deposit{value: amounts[0]}(); assert( IWETH(WETH).transfer( PunkLibrary.pairFor(factory, path[0], path[1]), amounts[0] ) ); _swap(amounts, path, to); } function swapTokensForExactETH( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external virtual override ensure(deadline) returns (uint[] memory amounts) { require(path[path.length - 1] == WETH, "PunkRouter: INVALID_PATH"); amounts = PunkLibrary.getAmountsIn(factory, amountOut, path); require( amounts[0] <= amountInMax, "PunkRouter: EXCESSIVE_INPUT_AMOUNT" ); TransferHelper.safeTransferFrom( path[0], msg.sender, PunkLibrary.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( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external virtual override ensure(deadline) returns (uint[] memory amounts) { require(path[path.length - 1] == WETH, "PunkRouter: INVALID_PATH"); amounts = PunkLibrary.getAmountsOut(factory, amountIn, path); require( amounts[amounts.length - 1] >= amountOutMin, "PunkRouter: INSUFFICIENT_OUTPUT_AMOUNT" ); TransferHelper.safeTransferFrom( path[0], msg.sender, PunkLibrary.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( uint amountOut, address[] calldata path, address to, uint deadline ) external payable virtual override ensure(deadline) returns (uint[] memory amounts) { require(path[0] == WETH, "PunkRouter: INVALID_PATH"); amounts = PunkLibrary.getAmountsIn(factory, amountOut, path); require(amounts[0] <= msg.value, "PunkRouter: EXCESSIVE_INPUT_AMOUNT"); IWETH(WETH).deposit{value: amounts[0]}(); assert( IWETH(WETH).transfer( PunkLibrary.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 (uint i; i < path.length - 1; i++) { (address input, address output) = (path[i], path[i + 1]); (address token0, ) = PunkLibrary.sortTokens(input, output); IPunkPair pair = IPunkPair( PunkLibrary.pairFor(factory, input, output) ); uint amountInput; uint amountOutput; { // scope to avoid stack too deep errors (uint reserve0, uint reserve1, ) = pair.getReserves(); (uint reserveInput, uint reserveOutput) = input == token0 ? (reserve0, reserve1) : (reserve1, reserve0); amountInput = IERC20(input).balanceOf(address(pair)).sub( reserveInput ); amountOutput = PunkLibrary.getAmountOut( amountInput, reserveInput, reserveOutput ); } (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0)); address to = i < path.length - 2 ? PunkLibrary.pairFor(factory, output, path[i + 2]) : _to; pair.swap(amount0Out, amount1Out, to, new bytes(0)); } } function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external virtual override ensure(deadline) { TransferHelper.safeTransferFrom( path[0], msg.sender, PunkLibrary.pairFor(factory, path[0], path[1]), amountIn ); uint balanceBefore = IERC20(path[path.length - 1]).balanceOf(to); _swapSupportingFeeOnTransferTokens(path, to); require( IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin, "PunkRouter: INSUFFICIENT_OUTPUT_AMOUNT" ); } function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable virtual override ensure(deadline) { require(path[0] == WETH, "PunkRouter: INVALID_PATH"); uint amountIn = msg.value; IWETH(WETH).deposit{value: amountIn}(); assert( IWETH(WETH).transfer( PunkLibrary.pairFor(factory, path[0], path[1]), amountIn ) ); uint balanceBefore = IERC20(path[path.length - 1]).balanceOf(to); _swapSupportingFeeOnTransferTokens(path, to); require( IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin, "PunkRouter: INSUFFICIENT_OUTPUT_AMOUNT" ); } function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external virtual override ensure(deadline) { require(path[path.length - 1] == WETH, "PunkRouter: INVALID_PATH"); TransferHelper.safeTransferFrom( path[0], msg.sender, PunkLibrary.pairFor(factory, path[0], path[1]), amountIn ); _swapSupportingFeeOnTransferTokens(path, address(this)); uint amountOut = IERC20(WETH).balanceOf(address(this)); require( amountOut >= amountOutMin, "PunkRouter: INSUFFICIENT_OUTPUT_AMOUNT" ); IWETH(WETH).withdraw(amountOut); TransferHelper.safeTransferETH(to, amountOut); } // **** LIBRARY FUNCTIONS **** function quote( uint amountA, uint reserveA, uint reserveB ) public pure virtual override returns (uint amountB) { return PunkLibrary.quote(amountA, reserveA, reserveB); } function getAmountOut( uint amountIn, uint reserveIn, uint reserveOut ) public pure virtual override returns (uint amountOut) { return PunkLibrary.getAmountOut(amountIn, reserveIn, reserveOut); } function getAmountIn( uint amountOut, uint reserveIn, uint reserveOut ) public pure virtual override returns (uint amountIn) { return PunkLibrary.getAmountIn(amountOut, reserveIn, reserveOut); } function getAmountsOut( uint amountIn, address[] memory path ) public view virtual override returns (uint[] memory amounts) { return PunkLibrary.getAmountsOut(factory, amountIn, path); } function getAmountsIn( uint amountOut, address[] memory path ) public view virtual override returns (uint[] memory amounts) { return PunkLibrary.getAmountsIn(factory, amountOut, path); } }
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"},{"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":[],"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":"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":[{"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"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040523480156200001157600080fd5b506040516200570938038062005709833981810160405260408110156200003757600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c61558262000187600039806101ac5280610e5d5280610e985280610fd5528061129852806116f252806118d65280611e1e5280611fa252806120725280612179528061232c52806123c15280612673528061271a52806127ef52806128f452806129dc5280612a5d52806130ec5280613422528061347852806134ac528061352d528061374752806138f7528061398c5250806110c752806111c5528061136b52806113a4528061154f52806117e452806118b45280611aa1528061225f528061240052806125a95280612a9c5280612ddf5280613071528061309a52806130ca52806132a75280613456528061382d52806139cb528061444a528061448d52806147ed52806149ce5280614f75528061505652806150d652506155826000f3fe60806040526004361061018f5760003560e01c80638803dbee116100d6578063c45a01551161007f578063e8e3370011610059578063e8e3370014610c71578063f305d71914610cfe578063fb3bdb4114610d51576101d5565b8063c45a015514610b25578063d06ca61f14610b3a578063ded9382a14610bf1576101d5565b8063af2979eb116100b0578063af2979eb146109c8578063b6f9de9514610a28578063baa2abde14610abb576101d5565b80638803dbee146108af578063ad5c464814610954578063ad615dec14610992576101d5565b80634a25d94a11610138578063791ac94711610112578063791ac947146107415780637ff36ab5146107e657806385f8c25914610879576101d5565b80634a25d94a146105775780635b0d59841461061c5780635c11d7951461069c576101d5565b80631f00ca74116101695780631f00ca74146103905780632195995c1461044757806338ed1739146104d2576101d5565b806302751cec146101da578063054d50d41461025357806318cbafe51461029b576101d5565b366101d5573373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146101d357fe5b005b600080fd5b3480156101e657600080fd5b5061023a600480360360c08110156101fd57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a00135610de4565b6040805192835260208301919091528051918290030190f35b34801561025f57600080fd5b506102896004803603606081101561027657600080fd5b5080359060208101359060400135610f37565b60408051918252519081900360200190f35b3480156102a757600080fd5b50610340600480360360a08110156102be57600080fd5b8135916020810135918101906060810160408201356401000000008111156102e557600080fd5b8201836020820111156102f757600080fd5b8035906020019184602083028401116401000000008311171561031957600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135610f4c565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561037c578181015183820152602001610364565b505050509050019250505060405180910390f35b34801561039c57600080fd5b50610340600480360360408110156103b357600080fd5b813591908101906040810160208201356401000000008111156103d557600080fd5b8201836020820111156103e757600080fd5b8035906020019184602083028401116401000000008311171561040957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611364945050505050565b34801561045357600080fd5b5061023a600480360361016081101561046b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff610100820135169061012081013590610140013561139a565b3480156104de57600080fd5b50610340600480360360a08110156104f557600080fd5b81359160208101359181019060608101604082013564010000000081111561051c57600080fd5b82018360208201111561052e57600080fd5b8035906020019184602083028401116401000000008311171561055057600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356114d8565b34801561058357600080fd5b50610340600480360360a081101561059a57600080fd5b8135916020810135918101906060810160408201356401000000008111156105c157600080fd5b8201836020820111156105d357600080fd5b803590602001918460208302840111640100000000831117156105f557600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135611669565b34801561062857600080fd5b50610289600480360361014081101561064057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356118ac565b3480156106a857600080fd5b506101d3600480360360a08110156106bf57600080fd5b8135916020810135918101906060810160408201356401000000008111156106e657600080fd5b8201836020820111156106f857600080fd5b8035906020019184602083028401116401000000008311171561071a57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356119fe565b34801561074d57600080fd5b506101d3600480360360a081101561076457600080fd5b81359160208101359181019060608101604082013564010000000081111561078b57600080fd5b82018360208201111561079d57600080fd5b803590602001918460208302840111640100000000831117156107bf57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135611d97565b610340600480360360808110156107fc57600080fd5b8135919081019060408101602082013564010000000081111561081e57600080fd5b82018360208201111561083057600080fd5b8035906020019184602083028401116401000000008311171561085257600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612105565b34801561088557600080fd5b506102896004803603606081101561089c57600080fd5b5080359060208101359060400135612525565b3480156108bb57600080fd5b50610340600480360360a08110156108d257600080fd5b8135916020810135918101906060810160408201356401000000008111156108f957600080fd5b82018360208201111561090b57600080fd5b8035906020019184602083028401116401000000008311171561092d57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612532565b34801561096057600080fd5b50610969612671565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561099e57600080fd5b50610289600480360360608110156109b557600080fd5b5080359060208101359060400135612695565b3480156109d457600080fd5b50610289600480360360c08110156109eb57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a001356126a2565b6101d360048036036080811015610a3e57600080fd5b81359190810190604081016020820135640100000000811115610a6057600080fd5b820183602082011115610a7257600080fd5b80359060200191846020830284011164010000000083111715610a9457600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612882565b348015610ac757600080fd5b5061023a600480360360e0811015610ade57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612d65565b348015610b3157600080fd5b5061096961306f565b348015610b4657600080fd5b5061034060048036036040811015610b5d57600080fd5b81359190810190604081016020820135640100000000811115610b7f57600080fd5b820183602082011115610b9157600080fd5b80359060200191846020830284011164010000000083111715610bb357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550613093945050505050565b348015610bfd57600080fd5b5061023a6004803603610140811015610c1557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356130c0565b348015610c7d57600080fd5b50610ce06004803603610100811015610c9557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135613218565b60408051938452602084019290925282820152519081900360600190f35b610ce0600480360360c0811015610d1457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a001356133a7565b61034060048036036080811015610d6757600080fd5b81359190810190604081016020820135640100000000811115610d8957600080fd5b820183602082011115610d9b57600080fd5b80359060200191846020830284011164010000000083111715610dbd57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356136d3565b6000808242811015610e5757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f50756e6b526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b610e86897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a612d65565b9093509150610e96898685613b22565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610f0957600080fd5b505af1158015610f1d573d6000803e3d6000fd5b50505050610f2b8583613cff565b50965096945050505050565b6000610f44848484613e3c565b949350505050565b60608142811015610fbe57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f50756e6b526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001686867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061102357fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110c257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f50756e6b526f757465723a20494e56414c49445f504154480000000000000000604482015290519081900360640190fd5b6111207f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f6092505050565b9150868260018451038151811061113357fe5b60200260200101511015611192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061547c6026913960400191505060405180910390fd5b611257868660008181106111a257fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff163361123d7f00000000000000000000000000000000000000000000000000000000000000008a8a60008181106111f157fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168b8b600181811061121b57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff166140c6565b8560008151811061124a57fe5b60200260200101516141b1565b61129682878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250614381915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836001855103815181106112e257fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561132057600080fd5b505af1158015611334573d6000803e3d6000fd5b50505050611359848360018551038151811061134c57fe5b6020026020010151613cff565b509695505050505050565b60606113917f00000000000000000000000000000000000000000000000000000000000000008484614608565b90505b92915050565b60008060006113ca7f00000000000000000000000000000000000000000000000000000000000000008f8f6140c6565b90506000876113d9578c6113fb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c48101889052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b15801561149757600080fd5b505af11580156114ab573d6000803e3d6000fd5b505050506114be8f8f8f8f8f8f8f612d65565b809450819550505050509b509b9950505050505050505050565b6060814281101561154a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f50756e6b526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b6115a87f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f6092505050565b915086826001845103815181106115bb57fe5b6020026020010151101561161a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061547c6026913960400191505060405180910390fd5b61162a868660008181106111a257fe5b61135982878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250614381915050565b606081428110156116db57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f50756e6b526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001686867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061174057fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117df57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f50756e6b526f757465723a20494e56414c49445f504154480000000000000000604482015290519081900360640190fd5b61183d7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061460892505050565b9150868260008151811061184d57fe5b60200260200101511115611192576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806154a26022913960400191505060405180910390fd5b6000806118fa7f00000000000000000000000000000000000000000000000000000000000000008d7f00000000000000000000000000000000000000000000000000000000000000006140c6565b9050600086611909578b61192b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c48101879052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b1580156119c757600080fd5b505af11580156119db573d6000803e3d6000fd5b505050506119ed8d8d8d8d8d8d6126a2565b9d9c50505050505050505050505050565b8042811015611a6e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f50756e6b526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b611afd85856000818110611a7e57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1633611af77f000000000000000000000000000000000000000000000000000000000000000089896000818110611acd57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168a8a600181811061121b57fe5b8a6141b1565b600085857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611b2d57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611bc657600080fd5b505afa158015611bda573d6000803e3d6000fd5b505050506040513d6020811015611bf057600080fd5b50516040805160208881028281018201909352888252929350611c32929091899189918291850190849080828437600092019190915250889250614796915050565b86611d368288887fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611c6557fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cfe57600080fd5b505afa158015611d12573d6000803e3d6000fd5b505050506040513d6020811015611d2857600080fd5b50519063ffffffff614b2916565b1015611d8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061547c6026913960400191505060405180910390fd5b5050505050505050565b8042811015611e0757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f50756e6b526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001685857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611e6c57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f0b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f50756e6b526f757465723a20494e56414c49445f504154480000000000000000604482015290519081900360640190fd5b611f1b85856000818110611a7e57fe5b611f59858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250614796915050565b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905160009173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611fe957600080fd5b505afa158015611ffd573d6000803e3d6000fd5b505050506040513d602081101561201357600080fd5b5051905086811015612070576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061547c6026913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156120e357600080fd5b505af11580156120f7573d6000803e3d6000fd5b50505050611d8d8482613cff565b6060814281101561217757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f50756e6b526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16868660008181106121bb57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461225a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f50756e6b526f757465723a20494e56414c49445f504154480000000000000000604482015290519081900360640190fd5b6122b87f000000000000000000000000000000000000000000000000000000000000000034888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f6092505050565b915086826001845103815181106122cb57fe5b6020026020010151101561232a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061547c6026913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db08360008151811061237357fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b1580156123a657600080fd5b505af11580156123ba573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61242c7f000000000000000000000000000000000000000000000000000000000000000089896000818110611acd57fe5b8460008151811061243957fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156124aa57600080fd5b505af11580156124be573d6000803e3d6000fd5b505050506040513d60208110156124d457600080fd5b50516124dc57fe5b61251b82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250614381915050565b5095945050505050565b6000610f44848484614b9b565b606081428110156125a457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f50756e6b526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b6126027f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061460892505050565b9150868260008151811061261257fe5b6020026020010151111561161a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806154a26022913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610f44848484614cbf565b6000814281101561271457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f50756e6b526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b612743887f00000000000000000000000000000000000000000000000000000000000000008989893089612d65565b604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290519194506127ed92508a91879173ffffffffffffffffffffffffffffffffffffffff8416916370a0823191602480820192602092909190829003018186803b1580156127bc57600080fd5b505afa1580156127d0573d6000803e3d6000fd5b505050506040513d60208110156127e657600080fd5b5051613b22565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561286057600080fd5b505af1158015612874573d6000803e3d6000fd5b505050506113598483613cff565b80428110156128f257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f50756e6b526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168585600081811061293657fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129d557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f50756e6b526f757465723a20494e56414c49445f504154480000000000000000604482015290519081900360640190fd5b60003490507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015612a4257600080fd5b505af1158015612a56573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb612ac87f000000000000000000000000000000000000000000000000000000000000000089896000818110611acd57fe5b836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612b3257600080fd5b505af1158015612b46573d6000803e3d6000fd5b505050506040513d6020811015612b5c57600080fd5b5051612b6457fe5b600086867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110612b9457fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612c2d57600080fd5b505afa158015612c41573d6000803e3d6000fd5b505050506040513d6020811015612c5757600080fd5b50516040805160208981028281018201909352898252929350612c999290918a918a918291850190849080828437600092019190915250899250614796915050565b87611d368289897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110612ccc57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231896040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cfe57600080fd5b6000808242811015612dd857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f50756e6b526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b6000612e057f00000000000000000000000000000000000000000000000000000000000000008c8c6140c6565b604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b158015612e8657600080fd5b505af1158015612e9a573d6000803e3d6000fd5b505050506040513d6020811015612eb057600080fd5b5050604080517f89afcb4400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b158015612f2357600080fd5b505af1158015612f37573d6000803e3d6000fd5b505050506040513d6040811015612f4d57600080fd5b50805160209091015190925090506000612f678e8e614db5565b5090508073ffffffffffffffffffffffffffffffffffffffff168e73ffffffffffffffffffffffffffffffffffffffff1614612fa4578183612fa7565b82825b90975095508a871015613005576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806154c46021913960400191505060405180910390fd5b8986101561305e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806154e56021913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606113917f00000000000000000000000000000000000000000000000000000000000000008484613f60565b60008060006131107f00000000000000000000000000000000000000000000000000000000000000008e7f00000000000000000000000000000000000000000000000000000000000000006140c6565b905060008761311f578c613141565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c48101889052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b1580156131dd57600080fd5b505af11580156131f1573d6000803e3d6000fd5b505050506132038e8e8e8e8e8e610de4565b909f909e509c50505050505050505050505050565b6000806000834281101561328d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f50756e6b526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b61329b8c8c8c8c8c8c614f1e565b909450925060006132cd7f00000000000000000000000000000000000000000000000000000000000000008e8e6140c6565b90506132db8d3383886141b1565b6132e78c3383876141b1565b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561336657600080fd5b505af115801561337a573d6000803e3d6000fd5b505050506040513d602081101561339057600080fd5b5051949d939c50939a509198505050505050505050565b6000806000834281101561341c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f50756e6b526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b61344a8a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c614f1e565b9094509250600061349c7f00000000000000000000000000000000000000000000000000000000000000008c7f00000000000000000000000000000000000000000000000000000000000000006140c6565b90506134aa8b3383886141b1565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b15801561351257600080fd5b505af1158015613526573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb82866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156135d257600080fd5b505af11580156135e6573d6000803e3d6000fd5b505050506040513d60208110156135fc57600080fd5b505161360457fe5b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561368357600080fd5b505af1158015613697573d6000803e3d6000fd5b505050506040513d60208110156136ad57600080fd5b50519250348410156136c5576136c533853403613cff565b505096509650969350505050565b6060814281101561374557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f50756e6b526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168686600081811061378957fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461382857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f50756e6b526f757465723a20494e56414c49445f504154480000000000000000604482015290519081900360640190fd5b6138867f00000000000000000000000000000000000000000000000000000000000000008888888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061460892505050565b9150348260008151811061389657fe5b602002602001015111156138f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806154a26022913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db08360008151811061393e57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561397157600080fd5b505af1158015613985573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6139f77f000000000000000000000000000000000000000000000000000000000000000089896000818110611acd57fe5b84600081518110613a0457fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015613a7557600080fd5b505af1158015613a89573d6000803e3d6000fd5b505050506040513d6020811015613a9f57600080fd5b5051613aa757fe5b613ae682878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250614381915050565b81600081518110613af357fe5b602002602001015134111561251b5761251b3383600081518110613b1357fe5b60200260200101513403613cff565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000178152925182516000946060949389169392918291908083835b60208310613bf857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613bbb565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613c5a576040519150601f19603f3d011682016040523d82523d6000602084013e613c5f565b606091505b5091509150818015613c8d575080511580613c8d5750808060200190516020811015613c8a57600080fd5b50515b613cf857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b60208310613d7657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613d39565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613dd8576040519150601f19603f3d011682016040523d82523d6000602084013e613ddd565b606091505b5050905080613e37576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806155066023913960400191505060405180910390fd5b505050565b6000808411613e96576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061542f6026913960400191505060405180910390fd5b600083118015613ea65750600082115b613efb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061540c6023913960400191505060405180910390fd5b6000613f0f856126f763ffffffff61521f16565b90506000613f23828563ffffffff61521f16565b90506000613f4983613f3d8861271063ffffffff61521f16565b9063ffffffff6152a516565b9050808281613f5457fe5b04979650505050505050565b6060600282511015613fd357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f50756e6b4c6962726172793a20494e56414c49445f5041544800000000000000604482015290519081900360640190fd5b815167ffffffffffffffff81118015613feb57600080fd5b50604051908082528060200260200182016040528015614015578160200160208202803683370190505b509050828160008151811061402657fe5b60200260200101818152505060005b60018351038110156140be576000806140788786858151811061405457fe5b602002602001015187866001018151811061406b57fe5b6020026020010151615317565b9150915061409a84848151811061408b57fe5b60200260200101518383613e3c565b8484600101815181106140a957fe5b60209081029190910101525050600101614035565b509392505050565b60008060006140d58585614db5565b604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527f26d46fe42d007086320008307b8928b2ee40d32d0203f2d7e4ce35f2700a7063609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017815292518251600094606094938a169392918291908083835b6020831061428f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101614252565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146142f1576040519150601f19603f3d011682016040523d82523d6000602084013e6142f6565b606091505b5091509150818015614324575080511580614324575080806020019051602081101561432157600080fd5b50515b614379576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806155296024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156146025760008084838151811061439f57fe5b60200260200101518584600101815181106143b657fe5b60200260200101519150915060006143ce8383614db5565b50905060008785600101815181106143e257fe5b602002602001015190506000808373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161461442a5782600061442e565b6000835b91509150600060028a510388106144455788614486565b6144867f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061447957fe5b60200260200101516140c6565b90506144b37f000000000000000000000000000000000000000000000000000000000000000088886140c6565b73ffffffffffffffffffffffffffffffffffffffff1663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156144fd576020820181803683370190505b506040518563ffffffff1660e01b8152600401808581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614588578181015183820152602001614570565b50505050905090810190601f1680156145b55780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156145d757600080fd5b505af11580156145eb573d6000803e3d6000fd5b505060019099019850614384975050505050505050565b50505050565b606060028251101561467b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f50756e6b4c6962726172793a20494e56414c49445f5041544800000000000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561469357600080fd5b506040519080825280602002602001820160405280156146bd578160200160208202803683370190505b50905082816001835103815181106146d157fe5b602090810291909101015281517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff015b80156140be576000806147318786600186038151811061471d57fe5b602002602001015187868151811061406b57fe5b9150915061475384848151811061474457fe5b60200260200101518383614b9b565b84600185038151811061476257fe5b602090810291909101015250507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01614701565b60005b6001835103811015613e37576000808483815181106147b457fe5b60200260200101518584600101815181106147cb57fe5b60200260200101519150915060006147e38383614db5565b50905060006148137f000000000000000000000000000000000000000000000000000000000000000085856140c6565b90506000806000808473ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561486157600080fd5b505afa158015614875573d6000803e3d6000fd5b505050506040513d606081101561488b57600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905060008073ffffffffffffffffffffffffffffffffffffffff8a8116908916146148d55782846148d8565b83835b9150915061495d828b73ffffffffffffffffffffffffffffffffffffffff166370a082318a6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cfe57600080fd5b955061496a868383613e3c565b9450505050506000808573ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16146149ae578260006149b2565b6000835b91509150600060028c51038a106149c9578a6149fd565b6149fd7f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061447957fe5b60408051600080825260208201928390527f022c0d9f000000000000000000000000000000000000000000000000000000008352602482018781526044830187905273ffffffffffffffffffffffffffffffffffffffff8086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015614aad578181015183820152602001614a95565b50505050905090810190601f168015614ada5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015614afc57600080fd5b505af1158015614b10573d6000803e3d6000fd5b50506001909b019a506147999950505050505050505050565b8082038281111561139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b6000808411614bf5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806154556027913960400191505060405180910390fd5b600083118015614c055750600082115b614c5a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061540c6023913960400191505060405180910390fd5b6000614c7e612710614c72868863ffffffff61521f16565b9063ffffffff61521f16565b90506000614c986126f7614c72868963ffffffff614b2916565b9050614cb56001828481614ca857fe5b049063ffffffff6152a516565b9695505050505050565b6000808411614d2f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f50756e6b4c6962726172793a20494e53554646494349454e545f414d4f554e54604482015290519081900360640190fd5b600083118015614d3f5750600082115b614d94576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061540c6023913960400191505060405180910390fd5b82614da5858463ffffffff61521f16565b81614dac57fe5b04949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415614e5357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f50756e6b4c6962726172793a204944454e544943414c5f414444524553534553604482015290519081900360640190fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610614e8d578284614e90565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216614f1757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f50756e6b4c6962726172793a205a45524f5f4144445245535300000000000000604482015290519081900360640190fd5b9250929050565b604080517fe6a4390500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b158015614fbe57600080fd5b505afa158015614fd2573d6000803e3d6000fd5b505050506040513d6020811015614fe857600080fd5b505173ffffffffffffffffffffffffffffffffffffffff1614156150ce57604080517fc9c6539600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b1580156150a157600080fd5b505af11580156150b5573d6000803e3d6000fd5b505050506040513d60208110156150cb57600080fd5b50505b6000806150fc7f00000000000000000000000000000000000000000000000000000000000000008b8b615317565b9150915081600014801561510e575080155b1561511e57879350869250615212565b600061512b898484614cbf565b9050878111615198578581101561518d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806154e56021913960400191505060405180910390fd5b889450925082615210565b60006151a5898486614cbf565b9050898111156151b157fe5b8781101561520a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806154c46021913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b600081158061523a5750508082028282828161523757fe5b04145b61139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b8082018281101561139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b60008060006153268585614db5565b5090506153348686866140c6565b506000806153438888886140c6565b73ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561538857600080fd5b505afa15801561539c573d6000803e3d6000fd5b505050506040513d60608110156153b257600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905073ffffffffffffffffffffffffffffffffffffffff878116908416146153f95780826153fc565b81815b9099909850965050505050505056fe50756e6b4c6962726172793a20494e53554646494349454e545f4c495155494449545950756e6b4c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e5450756e6b4c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e5450756e6b526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e5450756e6b526f757465723a204558434553534956455f494e5055545f414d4f554e5450756e6b526f757465723a20494e53554646494349454e545f415f414d4f554e5450756e6b526f757465723a20494e53554646494349454e545f425f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c45445472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544a2646970667358221220a52397c574c6d09b2596cba160e4ff16de6cf51ad894fbf09d76930a7395d48f64736f6c634300060600330000000000000000000000005640113ea7f369e6dafbe54cbb1406e5bf153e900000000000000000000000005300000000000000000000000000000000000004
Deployed Bytecode
0x60806040526004361061018f5760003560e01c80638803dbee116100d6578063c45a01551161007f578063e8e3370011610059578063e8e3370014610c71578063f305d71914610cfe578063fb3bdb4114610d51576101d5565b8063c45a015514610b25578063d06ca61f14610b3a578063ded9382a14610bf1576101d5565b8063af2979eb116100b0578063af2979eb146109c8578063b6f9de9514610a28578063baa2abde14610abb576101d5565b80638803dbee146108af578063ad5c464814610954578063ad615dec14610992576101d5565b80634a25d94a11610138578063791ac94711610112578063791ac947146107415780637ff36ab5146107e657806385f8c25914610879576101d5565b80634a25d94a146105775780635b0d59841461061c5780635c11d7951461069c576101d5565b80631f00ca74116101695780631f00ca74146103905780632195995c1461044757806338ed1739146104d2576101d5565b806302751cec146101da578063054d50d41461025357806318cbafe51461029b576101d5565b366101d5573373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000530000000000000000000000000000000000000416146101d357fe5b005b600080fd5b3480156101e657600080fd5b5061023a600480360360c08110156101fd57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a00135610de4565b6040805192835260208301919091528051918290030190f35b34801561025f57600080fd5b506102896004803603606081101561027657600080fd5b5080359060208101359060400135610f37565b60408051918252519081900360200190f35b3480156102a757600080fd5b50610340600480360360a08110156102be57600080fd5b8135916020810135918101906060810160408201356401000000008111156102e557600080fd5b8201836020820111156102f757600080fd5b8035906020019184602083028401116401000000008311171561031957600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135610f4c565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561037c578181015183820152602001610364565b505050509050019250505060405180910390f35b34801561039c57600080fd5b50610340600480360360408110156103b357600080fd5b813591908101906040810160208201356401000000008111156103d557600080fd5b8201836020820111156103e757600080fd5b8035906020019184602083028401116401000000008311171561040957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611364945050505050565b34801561045357600080fd5b5061023a600480360361016081101561046b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff610100820135169061012081013590610140013561139a565b3480156104de57600080fd5b50610340600480360360a08110156104f557600080fd5b81359160208101359181019060608101604082013564010000000081111561051c57600080fd5b82018360208201111561052e57600080fd5b8035906020019184602083028401116401000000008311171561055057600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356114d8565b34801561058357600080fd5b50610340600480360360a081101561059a57600080fd5b8135916020810135918101906060810160408201356401000000008111156105c157600080fd5b8201836020820111156105d357600080fd5b803590602001918460208302840111640100000000831117156105f557600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135611669565b34801561062857600080fd5b50610289600480360361014081101561064057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356118ac565b3480156106a857600080fd5b506101d3600480360360a08110156106bf57600080fd5b8135916020810135918101906060810160408201356401000000008111156106e657600080fd5b8201836020820111156106f857600080fd5b8035906020019184602083028401116401000000008311171561071a57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356119fe565b34801561074d57600080fd5b506101d3600480360360a081101561076457600080fd5b81359160208101359181019060608101604082013564010000000081111561078b57600080fd5b82018360208201111561079d57600080fd5b803590602001918460208302840111640100000000831117156107bf57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135611d97565b610340600480360360808110156107fc57600080fd5b8135919081019060408101602082013564010000000081111561081e57600080fd5b82018360208201111561083057600080fd5b8035906020019184602083028401116401000000008311171561085257600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612105565b34801561088557600080fd5b506102896004803603606081101561089c57600080fd5b5080359060208101359060400135612525565b3480156108bb57600080fd5b50610340600480360360a08110156108d257600080fd5b8135916020810135918101906060810160408201356401000000008111156108f957600080fd5b82018360208201111561090b57600080fd5b8035906020019184602083028401116401000000008311171561092d57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612532565b34801561096057600080fd5b50610969612671565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561099e57600080fd5b50610289600480360360608110156109b557600080fd5b5080359060208101359060400135612695565b3480156109d457600080fd5b50610289600480360360c08110156109eb57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a001356126a2565b6101d360048036036080811015610a3e57600080fd5b81359190810190604081016020820135640100000000811115610a6057600080fd5b820183602082011115610a7257600080fd5b80359060200191846020830284011164010000000083111715610a9457600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612882565b348015610ac757600080fd5b5061023a600480360360e0811015610ade57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612d65565b348015610b3157600080fd5b5061096961306f565b348015610b4657600080fd5b5061034060048036036040811015610b5d57600080fd5b81359190810190604081016020820135640100000000811115610b7f57600080fd5b820183602082011115610b9157600080fd5b80359060200191846020830284011164010000000083111715610bb357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550613093945050505050565b348015610bfd57600080fd5b5061023a6004803603610140811015610c1557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356130c0565b348015610c7d57600080fd5b50610ce06004803603610100811015610c9557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135613218565b60408051938452602084019290925282820152519081900360600190f35b610ce0600480360360c0811015610d1457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a001356133a7565b61034060048036036080811015610d6757600080fd5b81359190810190604081016020820135640100000000811115610d8957600080fd5b820183602082011115610d9b57600080fd5b80359060200191846020830284011164010000000083111715610dbd57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356136d3565b6000808242811015610e5757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f50756e6b526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b610e86897f00000000000000000000000053000000000000000000000000000000000000048a8a8a308a612d65565b9093509150610e96898685613b22565b7f000000000000000000000000530000000000000000000000000000000000000473ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610f0957600080fd5b505af1158015610f1d573d6000803e3d6000fd5b50505050610f2b8583613cff565b50965096945050505050565b6000610f44848484613e3c565b949350505050565b60608142811015610fbe57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f50756e6b526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000053000000000000000000000000000000000000041686867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061102357fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110c257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f50756e6b526f757465723a20494e56414c49445f504154480000000000000000604482015290519081900360640190fd5b6111207f0000000000000000000000005640113ea7f369e6dafbe54cbb1406e5bf153e9089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f6092505050565b9150868260018451038151811061113357fe5b60200260200101511015611192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061547c6026913960400191505060405180910390fd5b611257868660008181106111a257fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff163361123d7f0000000000000000000000005640113ea7f369e6dafbe54cbb1406e5bf153e908a8a60008181106111f157fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168b8b600181811061121b57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff166140c6565b8560008151811061124a57fe5b60200260200101516141b1565b61129682878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250614381915050565b7f000000000000000000000000530000000000000000000000000000000000000473ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836001855103815181106112e257fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561132057600080fd5b505af1158015611334573d6000803e3d6000fd5b50505050611359848360018551038151811061134c57fe5b6020026020010151613cff565b509695505050505050565b60606113917f0000000000000000000000005640113ea7f369e6dafbe54cbb1406e5bf153e908484614608565b90505b92915050565b60008060006113ca7f0000000000000000000000005640113ea7f369e6dafbe54cbb1406e5bf153e908f8f6140c6565b90506000876113d9578c6113fb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c48101889052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b15801561149757600080fd5b505af11580156114ab573d6000803e3d6000fd5b505050506114be8f8f8f8f8f8f8f612d65565b809450819550505050509b509b9950505050505050505050565b6060814281101561154a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f50756e6b526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b6115a87f0000000000000000000000005640113ea7f369e6dafbe54cbb1406e5bf153e9089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f6092505050565b915086826001845103815181106115bb57fe5b6020026020010151101561161a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061547c6026913960400191505060405180910390fd5b61162a868660008181106111a257fe5b61135982878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250614381915050565b606081428110156116db57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f50756e6b526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000053000000000000000000000000000000000000041686867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061174057fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117df57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f50756e6b526f757465723a20494e56414c49445f504154480000000000000000604482015290519081900360640190fd5b61183d7f0000000000000000000000005640113ea7f369e6dafbe54cbb1406e5bf153e908988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061460892505050565b9150868260008151811061184d57fe5b60200260200101511115611192576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806154a26022913960400191505060405180910390fd5b6000806118fa7f0000000000000000000000005640113ea7f369e6dafbe54cbb1406e5bf153e908d7f00000000000000000000000053000000000000000000000000000000000000046140c6565b9050600086611909578b61192b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c48101879052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b1580156119c757600080fd5b505af11580156119db573d6000803e3d6000fd5b505050506119ed8d8d8d8d8d8d6126a2565b9d9c50505050505050505050505050565b8042811015611a6e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f50756e6b526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b611afd85856000818110611a7e57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1633611af77f0000000000000000000000005640113ea7f369e6dafbe54cbb1406e5bf153e9089896000818110611acd57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168a8a600181811061121b57fe5b8a6141b1565b600085857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611b2d57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611bc657600080fd5b505afa158015611bda573d6000803e3d6000fd5b505050506040513d6020811015611bf057600080fd5b50516040805160208881028281018201909352888252929350611c32929091899189918291850190849080828437600092019190915250889250614796915050565b86611d368288887fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611c6557fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cfe57600080fd5b505afa158015611d12573d6000803e3d6000fd5b505050506040513d6020811015611d2857600080fd5b50519063ffffffff614b2916565b1015611d8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061547c6026913960400191505060405180910390fd5b5050505050505050565b8042811015611e0757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f50756e6b526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000053000000000000000000000000000000000000041685857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611e6c57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f0b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f50756e6b526f757465723a20494e56414c49445f504154480000000000000000604482015290519081900360640190fd5b611f1b85856000818110611a7e57fe5b611f59858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250614796915050565b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905160009173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000530000000000000000000000000000000000000416916370a0823191602480820192602092909190829003018186803b158015611fe957600080fd5b505afa158015611ffd573d6000803e3d6000fd5b505050506040513d602081101561201357600080fd5b5051905086811015612070576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061547c6026913960400191505060405180910390fd5b7f000000000000000000000000530000000000000000000000000000000000000473ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156120e357600080fd5b505af11580156120f7573d6000803e3d6000fd5b50505050611d8d8482613cff565b6060814281101561217757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f50756e6b526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000530000000000000000000000000000000000000473ffffffffffffffffffffffffffffffffffffffff16868660008181106121bb57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461225a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f50756e6b526f757465723a20494e56414c49445f504154480000000000000000604482015290519081900360640190fd5b6122b87f0000000000000000000000005640113ea7f369e6dafbe54cbb1406e5bf153e9034888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f6092505050565b915086826001845103815181106122cb57fe5b6020026020010151101561232a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061547c6026913960400191505060405180910390fd5b7f000000000000000000000000530000000000000000000000000000000000000473ffffffffffffffffffffffffffffffffffffffff1663d0e30db08360008151811061237357fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b1580156123a657600080fd5b505af11580156123ba573d6000803e3d6000fd5b50505050507f000000000000000000000000530000000000000000000000000000000000000473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61242c7f0000000000000000000000005640113ea7f369e6dafbe54cbb1406e5bf153e9089896000818110611acd57fe5b8460008151811061243957fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156124aa57600080fd5b505af11580156124be573d6000803e3d6000fd5b505050506040513d60208110156124d457600080fd5b50516124dc57fe5b61251b82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250614381915050565b5095945050505050565b6000610f44848484614b9b565b606081428110156125a457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f50756e6b526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b6126027f0000000000000000000000005640113ea7f369e6dafbe54cbb1406e5bf153e908988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061460892505050565b9150868260008151811061261257fe5b6020026020010151111561161a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806154a26022913960400191505060405180910390fd5b7f000000000000000000000000530000000000000000000000000000000000000481565b6000610f44848484614cbf565b6000814281101561271457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f50756e6b526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b612743887f00000000000000000000000053000000000000000000000000000000000000048989893089612d65565b604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290519194506127ed92508a91879173ffffffffffffffffffffffffffffffffffffffff8416916370a0823191602480820192602092909190829003018186803b1580156127bc57600080fd5b505afa1580156127d0573d6000803e3d6000fd5b505050506040513d60208110156127e657600080fd5b5051613b22565b7f000000000000000000000000530000000000000000000000000000000000000473ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561286057600080fd5b505af1158015612874573d6000803e3d6000fd5b505050506113598483613cff565b80428110156128f257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f50756e6b526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000530000000000000000000000000000000000000473ffffffffffffffffffffffffffffffffffffffff168585600081811061293657fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129d557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f50756e6b526f757465723a20494e56414c49445f504154480000000000000000604482015290519081900360640190fd5b60003490507f000000000000000000000000530000000000000000000000000000000000000473ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015612a4257600080fd5b505af1158015612a56573d6000803e3d6000fd5b50505050507f000000000000000000000000530000000000000000000000000000000000000473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb612ac87f0000000000000000000000005640113ea7f369e6dafbe54cbb1406e5bf153e9089896000818110611acd57fe5b836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612b3257600080fd5b505af1158015612b46573d6000803e3d6000fd5b505050506040513d6020811015612b5c57600080fd5b5051612b6457fe5b600086867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110612b9457fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612c2d57600080fd5b505afa158015612c41573d6000803e3d6000fd5b505050506040513d6020811015612c5757600080fd5b50516040805160208981028281018201909352898252929350612c999290918a918a918291850190849080828437600092019190915250899250614796915050565b87611d368289897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110612ccc57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231896040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cfe57600080fd5b6000808242811015612dd857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f50756e6b526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b6000612e057f0000000000000000000000005640113ea7f369e6dafbe54cbb1406e5bf153e908c8c6140c6565b604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b158015612e8657600080fd5b505af1158015612e9a573d6000803e3d6000fd5b505050506040513d6020811015612eb057600080fd5b5050604080517f89afcb4400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b158015612f2357600080fd5b505af1158015612f37573d6000803e3d6000fd5b505050506040513d6040811015612f4d57600080fd5b50805160209091015190925090506000612f678e8e614db5565b5090508073ffffffffffffffffffffffffffffffffffffffff168e73ffffffffffffffffffffffffffffffffffffffff1614612fa4578183612fa7565b82825b90975095508a871015613005576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806154c46021913960400191505060405180910390fd5b8986101561305e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806154e56021913960400191505060405180910390fd5b505050505097509795505050505050565b7f0000000000000000000000005640113ea7f369e6dafbe54cbb1406e5bf153e9081565b60606113917f0000000000000000000000005640113ea7f369e6dafbe54cbb1406e5bf153e908484613f60565b60008060006131107f0000000000000000000000005640113ea7f369e6dafbe54cbb1406e5bf153e908e7f00000000000000000000000053000000000000000000000000000000000000046140c6565b905060008761311f578c613141565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c48101889052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b1580156131dd57600080fd5b505af11580156131f1573d6000803e3d6000fd5b505050506132038e8e8e8e8e8e610de4565b909f909e509c50505050505050505050505050565b6000806000834281101561328d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f50756e6b526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b61329b8c8c8c8c8c8c614f1e565b909450925060006132cd7f0000000000000000000000005640113ea7f369e6dafbe54cbb1406e5bf153e908e8e6140c6565b90506132db8d3383886141b1565b6132e78c3383876141b1565b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561336657600080fd5b505af115801561337a573d6000803e3d6000fd5b505050506040513d602081101561339057600080fd5b5051949d939c50939a509198505050505050505050565b6000806000834281101561341c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f50756e6b526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b61344a8a7f00000000000000000000000053000000000000000000000000000000000000048b348c8c614f1e565b9094509250600061349c7f0000000000000000000000005640113ea7f369e6dafbe54cbb1406e5bf153e908c7f00000000000000000000000053000000000000000000000000000000000000046140c6565b90506134aa8b3383886141b1565b7f000000000000000000000000530000000000000000000000000000000000000473ffffffffffffffffffffffffffffffffffffffff1663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b15801561351257600080fd5b505af1158015613526573d6000803e3d6000fd5b50505050507f000000000000000000000000530000000000000000000000000000000000000473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb82866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156135d257600080fd5b505af11580156135e6573d6000803e3d6000fd5b505050506040513d60208110156135fc57600080fd5b505161360457fe5b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561368357600080fd5b505af1158015613697573d6000803e3d6000fd5b505050506040513d60208110156136ad57600080fd5b50519250348410156136c5576136c533853403613cff565b505096509650969350505050565b6060814281101561374557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f50756e6b526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000530000000000000000000000000000000000000473ffffffffffffffffffffffffffffffffffffffff168686600081811061378957fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461382857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f50756e6b526f757465723a20494e56414c49445f504154480000000000000000604482015290519081900360640190fd5b6138867f0000000000000000000000005640113ea7f369e6dafbe54cbb1406e5bf153e908888888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061460892505050565b9150348260008151811061389657fe5b602002602001015111156138f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806154a26022913960400191505060405180910390fd5b7f000000000000000000000000530000000000000000000000000000000000000473ffffffffffffffffffffffffffffffffffffffff1663d0e30db08360008151811061393e57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561397157600080fd5b505af1158015613985573d6000803e3d6000fd5b50505050507f000000000000000000000000530000000000000000000000000000000000000473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6139f77f0000000000000000000000005640113ea7f369e6dafbe54cbb1406e5bf153e9089896000818110611acd57fe5b84600081518110613a0457fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015613a7557600080fd5b505af1158015613a89573d6000803e3d6000fd5b505050506040513d6020811015613a9f57600080fd5b5051613aa757fe5b613ae682878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250614381915050565b81600081518110613af357fe5b602002602001015134111561251b5761251b3383600081518110613b1357fe5b60200260200101513403613cff565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000178152925182516000946060949389169392918291908083835b60208310613bf857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613bbb565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613c5a576040519150601f19603f3d011682016040523d82523d6000602084013e613c5f565b606091505b5091509150818015613c8d575080511580613c8d5750808060200190516020811015613c8a57600080fd5b50515b613cf857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b60208310613d7657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613d39565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613dd8576040519150601f19603f3d011682016040523d82523d6000602084013e613ddd565b606091505b5050905080613e37576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806155066023913960400191505060405180910390fd5b505050565b6000808411613e96576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061542f6026913960400191505060405180910390fd5b600083118015613ea65750600082115b613efb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061540c6023913960400191505060405180910390fd5b6000613f0f856126f763ffffffff61521f16565b90506000613f23828563ffffffff61521f16565b90506000613f4983613f3d8861271063ffffffff61521f16565b9063ffffffff6152a516565b9050808281613f5457fe5b04979650505050505050565b6060600282511015613fd357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f50756e6b4c6962726172793a20494e56414c49445f5041544800000000000000604482015290519081900360640190fd5b815167ffffffffffffffff81118015613feb57600080fd5b50604051908082528060200260200182016040528015614015578160200160208202803683370190505b509050828160008151811061402657fe5b60200260200101818152505060005b60018351038110156140be576000806140788786858151811061405457fe5b602002602001015187866001018151811061406b57fe5b6020026020010151615317565b9150915061409a84848151811061408b57fe5b60200260200101518383613e3c565b8484600101815181106140a957fe5b60209081029190910101525050600101614035565b509392505050565b60008060006140d58585614db5565b604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527f26d46fe42d007086320008307b8928b2ee40d32d0203f2d7e4ce35f2700a7063609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017815292518251600094606094938a169392918291908083835b6020831061428f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101614252565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146142f1576040519150601f19603f3d011682016040523d82523d6000602084013e6142f6565b606091505b5091509150818015614324575080511580614324575080806020019051602081101561432157600080fd5b50515b614379576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806155296024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156146025760008084838151811061439f57fe5b60200260200101518584600101815181106143b657fe5b60200260200101519150915060006143ce8383614db5565b50905060008785600101815181106143e257fe5b602002602001015190506000808373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161461442a5782600061442e565b6000835b91509150600060028a510388106144455788614486565b6144867f0000000000000000000000005640113ea7f369e6dafbe54cbb1406e5bf153e90878c8b6002018151811061447957fe5b60200260200101516140c6565b90506144b37f0000000000000000000000005640113ea7f369e6dafbe54cbb1406e5bf153e9088886140c6565b73ffffffffffffffffffffffffffffffffffffffff1663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156144fd576020820181803683370190505b506040518563ffffffff1660e01b8152600401808581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614588578181015183820152602001614570565b50505050905090810190601f1680156145b55780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156145d757600080fd5b505af11580156145eb573d6000803e3d6000fd5b505060019099019850614384975050505050505050565b50505050565b606060028251101561467b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f50756e6b4c6962726172793a20494e56414c49445f5041544800000000000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561469357600080fd5b506040519080825280602002602001820160405280156146bd578160200160208202803683370190505b50905082816001835103815181106146d157fe5b602090810291909101015281517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff015b80156140be576000806147318786600186038151811061471d57fe5b602002602001015187868151811061406b57fe5b9150915061475384848151811061474457fe5b60200260200101518383614b9b565b84600185038151811061476257fe5b602090810291909101015250507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01614701565b60005b6001835103811015613e37576000808483815181106147b457fe5b60200260200101518584600101815181106147cb57fe5b60200260200101519150915060006147e38383614db5565b50905060006148137f0000000000000000000000005640113ea7f369e6dafbe54cbb1406e5bf153e9085856140c6565b90506000806000808473ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561486157600080fd5b505afa158015614875573d6000803e3d6000fd5b505050506040513d606081101561488b57600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905060008073ffffffffffffffffffffffffffffffffffffffff8a8116908916146148d55782846148d8565b83835b9150915061495d828b73ffffffffffffffffffffffffffffffffffffffff166370a082318a6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cfe57600080fd5b955061496a868383613e3c565b9450505050506000808573ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16146149ae578260006149b2565b6000835b91509150600060028c51038a106149c9578a6149fd565b6149fd7f0000000000000000000000005640113ea7f369e6dafbe54cbb1406e5bf153e90898e8d6002018151811061447957fe5b60408051600080825260208201928390527f022c0d9f000000000000000000000000000000000000000000000000000000008352602482018781526044830187905273ffffffffffffffffffffffffffffffffffffffff8086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015614aad578181015183820152602001614a95565b50505050905090810190601f168015614ada5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015614afc57600080fd5b505af1158015614b10573d6000803e3d6000fd5b50506001909b019a506147999950505050505050505050565b8082038281111561139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b6000808411614bf5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806154556027913960400191505060405180910390fd5b600083118015614c055750600082115b614c5a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061540c6023913960400191505060405180910390fd5b6000614c7e612710614c72868863ffffffff61521f16565b9063ffffffff61521f16565b90506000614c986126f7614c72868963ffffffff614b2916565b9050614cb56001828481614ca857fe5b049063ffffffff6152a516565b9695505050505050565b6000808411614d2f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f50756e6b4c6962726172793a20494e53554646494349454e545f414d4f554e54604482015290519081900360640190fd5b600083118015614d3f5750600082115b614d94576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061540c6023913960400191505060405180910390fd5b82614da5858463ffffffff61521f16565b81614dac57fe5b04949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415614e5357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f50756e6b4c6962726172793a204944454e544943414c5f414444524553534553604482015290519081900360640190fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610614e8d578284614e90565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216614f1757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f50756e6b4c6962726172793a205a45524f5f4144445245535300000000000000604482015290519081900360640190fd5b9250929050565b604080517fe6a4390500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015287811660248301529151600092839283927f0000000000000000000000005640113ea7f369e6dafbe54cbb1406e5bf153e909092169163e6a4390591604480820192602092909190829003018186803b158015614fbe57600080fd5b505afa158015614fd2573d6000803e3d6000fd5b505050506040513d6020811015614fe857600080fd5b505173ffffffffffffffffffffffffffffffffffffffff1614156150ce57604080517fc9c6539600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a81166004830152898116602483015291517f0000000000000000000000005640113ea7f369e6dafbe54cbb1406e5bf153e909092169163c9c65396916044808201926020929091908290030181600087803b1580156150a157600080fd5b505af11580156150b5573d6000803e3d6000fd5b505050506040513d60208110156150cb57600080fd5b50505b6000806150fc7f0000000000000000000000005640113ea7f369e6dafbe54cbb1406e5bf153e908b8b615317565b9150915081600014801561510e575080155b1561511e57879350869250615212565b600061512b898484614cbf565b9050878111615198578581101561518d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806154e56021913960400191505060405180910390fd5b889450925082615210565b60006151a5898486614cbf565b9050898111156151b157fe5b8781101561520a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806154c46021913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b600081158061523a5750508082028282828161523757fe5b04145b61139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b8082018281101561139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b60008060006153268585614db5565b5090506153348686866140c6565b506000806153438888886140c6565b73ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561538857600080fd5b505afa15801561539c573d6000803e3d6000fd5b505050506040513d60608110156153b257600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905073ffffffffffffffffffffffffffffffffffffffff878116908416146153f95780826153fc565b81815b9099909850965050505050505056fe50756e6b4c6962726172793a20494e53554646494349454e545f4c495155494449545950756e6b4c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e5450756e6b4c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e5450756e6b526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e5450756e6b526f757465723a204558434553534956455f494e5055545f414d4f554e5450756e6b526f757465723a20494e53554646494349454e545f415f414d4f554e5450756e6b526f757465723a20494e53554646494349454e545f425f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c45445472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544a2646970667358221220a52397c574c6d09b2596cba160e4ff16de6cf51ad894fbf09d76930a7395d48f64736f6c63430006060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000005640113ea7f369e6dafbe54cbb1406e5bf153e900000000000000000000000005300000000000000000000000000000000000004
-----Decoded View---------------
Arg [0] : _factory (address): 0x5640113EA7F369E6DAFbe54cBb1406E5BF153E90
Arg [1] : _WETH (address): 0x5300000000000000000000000000000000000004
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000005640113ea7f369e6dafbe54cbb1406e5bf153e90
Arg [1] : 0000000000000000000000005300000000000000000000000000000000000004
Deployed Bytecode Sourcemap
18523:20924:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18988:10;:18;19002:4;18988:18;;18981:26;;;;18523:20924;;12:1:-1;9;2:12;23667:723:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23667:723:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;23667:723:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;38493:241;;5:9:-1;2:2;;;27:1;24;17:12;2:2;38493:241:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;38493:241:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;32162:958;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32162:958:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;32162:958:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;32162:958:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;32162:958:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;32162:958:0;;-1:-1:-1;32162:958:0;-1:-1:-1;32162:958: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;32162:958:0;;;;;;;;;;;;;;;;;39221:223;;5:9:-1;2:2;;;27:1;24;17:12;2:2;39221:223:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;39221:223:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;39221:223:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;39221:223:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;39221:223:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;39221:223:0;;-1:-1:-1;39221:223:0;;-1:-1:-1;;;;;39221:223:0:i;24398:898::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24398:898:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;24398:898:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28908:739::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28908:739:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28908:739:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;28908:739:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28908:739:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;28908:739:0;;-1:-1:-1;28908:739:0;-1:-1:-1;28908:739:0;;;;;;;;;:::i;31218:936::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31218:936:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31218:936:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;31218:936:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31218:936:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;31218:936:0;;-1:-1:-1;31218:936:0;-1:-1:-1;31218:936:0;;;;;;;;;:::i;27018:902::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27018:902:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;27018:902:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;35710:760::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35710:760:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;35710:760:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;35710:760:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;35710:760:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;35710:760:0;;-1:-1:-1;35710:760:0;-1:-1:-1;35710:760:0;;;;;;;;;:::i;37361:863::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;37361:863:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;37361:863:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;37361:863:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;37361:863:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;37361:863:0;;-1:-1:-1;37361:863:0;-1:-1:-1;37361:863:0;;;;;;;;;:::i;30380:830::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30380:830:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;30380:830:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30380:830:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;30380:830:0;;-1:-1:-1;30380:830:0;-1:-1:-1;30380:830:0;;;;;;;;;:::i;38742:240::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;38742:240:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;38742:240:0;;;;;;;;;;;;:::i;29655:717::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29655:717:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;29655:717:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;29655:717:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;29655:717:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;29655:717:0;;-1:-1:-1;29655:717:0;-1:-1:-1;29655:717:0;;;;;;;;;:::i;18647:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18647:38:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;38268:217;;5:9:-1;2:2;;;27:1;24;17:12;2:2;38268:217:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;38268:217:0;;;;;;;;;;;;:::i;26260:750::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26260:750:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;26260:750:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;36478:875::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;36478:875:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;36478:875:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;36478:875:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;36478:875:0;;-1:-1:-1;36478:875:0;-1:-1:-1;36478:875:0;;;;;;;;;:::i;22747:912::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22747:912:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;22747:912:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;18599:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18599:41:0;;;:::i;38990:223::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;38990:223:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;38990:223:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;38990:223:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;38990:223:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;38990:223:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;38990:223:0;;-1:-1:-1;38990:223:0;;-1:-1:-1;;;;;38990:223:0:i;25304:877::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25304:877:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;25304:877:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;20793:867::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20793:867:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;20793:867:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;21668:1036;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;21668:1036:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;33128:919::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;33128:919:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;33128:919:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33128:919:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;33128:919:0;;-1:-1:-1;33128:919:0;-1:-1:-1;33128:919:0;;;;;;;;;:::i;23667:723::-;23949:16;23967:14;23921:8;18756:15;18744:8;:27;;18736:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24026:196:::1;24056:5;24076:4;24095:9;24119:14;24148:12;24183:4;24203:8;24026:15;:196::i;:::-;23999:223:::0;;-1:-1:-1;23999:223:0;-1:-1:-1;24233:51:0::1;24261:5:::0;24268:2;23999:223;24233:27:::1;:51::i;:::-;24301:4;24295:20;;;24316:9;24295:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;24295:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24295:31:0;;;;24337:45;24368:2;24372:9;24337:30;:45::i;:::-;23667:723:::0;;;;;;;;;;:::o;38493:241::-;38635:14;38669:57;38694:8;38704:9;38715:10;38669:24;:57::i;:::-;38662:64;38493:241;-1:-1:-1;;;;38493:241:0:o;32162:958::-;32428:21;32400:8;18756:15;18744:8;:27;;18736:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32475:29:::1;32500:4;32475:29;:4:::0;;32480:15;;;32475:21;;::::1;;;;;;;;;;;;;:29;;;32467:66;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;32554:50;32580:7;32589:8;32599:4;;32554:50;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32554:25:0::1;::::0;-1:-1:-1;;;32554:50:0:i:1;:::-;32544:60;;32668:12;32637:7;32662:1;32645:7;:14;:18;32637:27;;;;;;;;;;;;;;:43;;32615:131;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32757:175;32803:4;;32808:1;32803:7;;;;;;;;;;;;;;;32825:10;32850:46;32870:7;32879:4;;32884:1;32879:7;;;;;;;;;;;;;;;32888:4;;32893:1;32888:7;;;;;;;;;;;;;;;32850:19;:46::i;:::-;32911:7;32919:1;32911:10;;;;;;;;;;;;;;32757:31;:175::i;:::-;32943:35;32949:7;32958:4;;32943:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32972:4:0::1;::::0;-1:-1:-1;32943:5:0::1;::::0;-1:-1:-1;;32943:35:0:i:1;:::-;32995:4;32989:20;;;33010:7;33035:1;33018:7;:14;:18;33010:27;;;;;;;;;;;;;;32989:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32989:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32989:49:0;;;;33049:63;33080:2;33084:7;33109:1;33092:7;:14;:18;33084:27;;;;;;;;;;;;;;33049:30;:63::i;:::-;32162:958:::0;;;;;;;;;:::o;39221:223::-;39345:21;39386:50;39411:7;39420:9;39431:4;39386:24;:50::i;:::-;39379:57;;39221:223;;;;;:::o;24398:898::-;24731:12;24745;24770;24785:44;24805:7;24814:6;24822;24785:19;:44::i;:::-;24770:59;;24840:10;24853;:33;;24877:9;24853:33;;;24871:2;24853:33;24897:177;;;;;;24934:10;24897:177;;;;24967:4;24897:177;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24840:46;;-1:-1:-1;24897:22:0;;;;;;:177;;;;;-1:-1:-1;;24897:177:0;;;;;;;;-1:-1:-1;24897:22:0;:177;;;2:2:-1;;;;27:1;24;17:12;2:2;24897:177:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24897:177:0;;;;25106:182;25136:6;25157;25178:9;25202:10;25227;25252:2;25269:8;25106:15;:182::i;:::-;25085:203;;;;;;;;24398:898;;;;;;;;;;;;;;;;:::o;28908:739::-;29177:21;29149:8;18756:15;18744:8;:27;;18736:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29226:50:::1;29252:7;29261:8;29271:4;;29226:50;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29226:25:0::1;::::0;-1:-1:-1;;;29226:50:0:i:1;:::-;29216:60;;29340:12;29309:7;29334:1;29317:7;:14;:18;29309:27;;;;;;;;;;;;;;:43;;29287:131;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29429:175;29475:4;;29480:1;29475:7;;;;;;29429:175;29615:24;29621:7;29630:4;;29615:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29636:2:0;;-1:-1:-1;29615:5:0::1;::::0;-1:-1:-1;;29615:24:0:i:1;31218:936::-:0;31484:21;31456:8;18756:15;18744:8;:27;;18736:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31531:29:::1;31556:4;31531:29;:4:::0;;31536:15;;;31531:21;;::::1;;;;;;;;;;;;;:29;;;31523:66;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;31610:50;31635:7;31644:9;31655:4;;31610:50;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31610:24:0::1;::::0;-1:-1:-1;;;31610:50:0:i:1;:::-;31600:60;;31707:11;31693:7;31701:1;31693:10;;;;;;;;;;;;;;:25;;31671:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27018:902:::0;27363:14;27390:12;27405:41;27425:7;27434:5;27441:4;27405:19;:41::i;:::-;27390:56;;27457:10;27470;:33;;27494:9;27470:33;;;27488:2;27470:33;27514:177;;;;;;27551:10;27514:177;;;;27584:4;27514:177;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27457:46;;-1:-1:-1;27514:22:0;;;;;;:177;;;;;-1:-1:-1;;27514:177:0;;;;;;;;-1:-1:-1;27514:22:0;:177;;;2:2:-1;;;;27:1;24;17:12;2:2;27514:177:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27514:177:0;;;;27714:198;27776:5;27796:9;27820:14;27849:12;27876:2;27893:8;27714:47;:198::i;:::-;27702:210;27018:902;-1:-1:-1;;;;;;;;;;;;;27018:902:0:o;35710:760::-;35944:8;18756:15;18744:8;:27;;18736:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35965:173:::1;36011:4;;36016:1;36011:7;;;;;;;;;;;;;;;36033:10;36058:46;36078:7;36087:4;;36092:1;36087:7;;;;;;;;;;;;;;;36096:4;;36101:1;36096:7;;;;;;36058:46;36119:8;35965:31;:173::i;:::-;36149:18;36177:4:::0;;36182:15;;;36177:21;;::::1;;;;;;;;;;;;;36170:39;;;36210:2;36170:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;36170:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;36170:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;36170:43:0;36224:44:::1;::::0;;36170:43:::1;36224:44:::0;;::::1;::::0;;;;;;;;;;;36170:43;;-1:-1:-1;36224:44:0::1;::::0;;;36259:4;;;;;;36224:44;::::1;::::0;36259:4;;36224:44;36259:4;36224:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;36265:2:0;;-1:-1:-1;36224:34:0::1;::::0;-1:-1:-1;;36224:44:0:i:1;:::-;36384:12:::0;36301:62:::1;36349:13:::0;36308:4;;36313:15;;;36308:21;;::::1;;;;;;;;;;;;;36301:39;;;36341:2;36301:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;36301:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;36301:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;36301:43:0;;:62:::1;:47;:62;:::i;:::-;:95;;36279:183;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18806:1;35710:760:::0;;;;;;;:::o;37361:863::-;37592:8;18756:15;18744:8;:27;;18736:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37621:29:::1;37646:4;37621:29;:4:::0;;37626:15;;;37621:21;;::::1;;;;;;;;;;;;;:29;;;37613:66;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;37690:173;37736:4;;37741:1;37736:7;;;;;;37690:173;37874:55;37909:4;;37874:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;37923:4:0::1;::::0;-1:-1:-1;37874:34:0::1;::::0;-1:-1:-1;;37874:55:0:i:1;:::-;37957:37;::::0;;;;;37988:4:::1;37957:37;::::0;::::1;::::0;;;37940:14:::1;::::0;37957:22:::1;37964:4;37957:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;37957:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;37957:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;37957:37:0;;-1:-1:-1;38027:25:0;;::::1;;38005:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38135:4;38129:20;;;38150:9;38129:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;38129:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;38129:31:0;;;;38171:45;38202:2;38206:9;38171:30;:45::i;30380:830::-:0;30639:21;30611:8;18756:15;18744:8;:27;;18736:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30697:4:::1;30686:15;;:4;;30691:1;30686:7;;;;;;;;;;;;;;;:15;;;30678:52;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;30751:51;30777:7;30786:9;30797:4;;30751:51;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;30751:25:0::1;::::0;-1:-1:-1;;;30751:51:0:i:1;:::-;30741:61;;30866:12;30835:7;30860:1;30843:7;:14;:18;30835:27;;;;;;;;;;;;;;:43;;30813:131;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30961:4;30955:19;;;30982:7;30990:1;30982:10;;;;;;;;;;;;;;30955:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30955:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30955:40:0;;;;;31033:4;31027:20;;;31066:46;31086:7;31095:4;;31100:1;31095:7;;;;;;31066:46;31131:7;31139:1;31131:10;;;;;;;;;;;;;;31027:129;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31027:129:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31027:129:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31027:129:0;31006:161:::1;;;;31178:24;31184:7;31193:4;;31178:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31199:2:0;;-1:-1:-1;31178:5:0::1;::::0;-1:-1:-1;;31178:24:0:i:1;:::-;30380:830:::0;;;;;;;;:::o;38742:240::-;38884:13;38917:57;38941:9;38952;38963:10;38917:23;:57::i;29655:717::-;29924:21;29896:8;18756:15;18744:8;:27;;18736:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29973:50:::1;29998:7;30007:9;30018:4;;29973:50;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29973:24:0::1;::::0;-1:-1:-1;;;29973:50:0:i:1;:::-;29963:60;;30070:11;30056:7;30064:1;30056:10;;;;;;;;;;;;;;:25;;30034:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18647:38:::0;;;:::o;38268:217::-;38399:12;38431:46;38449:7;38458:8;38468;38431:17;:46::i;26260:750::-;26526:14;26507:8;18756:15;18744:8;:27;;18736:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26569:196:::1;26599:5;26619:4;26638:9;26662:14;26691:12;26726:4;26746:8;26569:15;:196::i;:::-;26855:38;::::0;;;;;26887:4:::1;26855:38;::::0;::::1;::::0;;;26553:212;;-1:-1:-1;26776:128:0::1;::::0;-1:-1:-1;26818:5:0;;26838:2;;26855:23:::1;::::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;26855:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26855:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;26855:38:0;26776:27:::1;:128::i;:::-;26921:4;26915:20;;;26936:9;26915:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26915:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26915:31:0;;;;26957:45;26988:2;26992:9;26957:30;:45::i;36478:875::-:0;36693:8;18756:15;18744:8;:27;;18736:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36733:4:::1;36722:15;;:4;;36727:1;36722:7;;;;;;;;;;;;;;;:15;;;36714:52;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;36777:13;36793:9;36777:25;;36819:4;36813:19;;;36840:8;36813:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;36813:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;36813:38:0;;;;;36889:4;36883:20;;;36922:46;36942:7;36951:4;;36956:1;36951:7;;;;;;36922:46;36987:8;36883:127;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;36883:127:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;36883:127:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;36883:127:0;36862:159:::1;;;;37032:18;37060:4:::0;;37065:15;;;37060:21;;::::1;;;;;;;;;;;;;37053:39;;;37093:2;37053:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;37053:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;37053:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;37053:43:0;37107:44:::1;::::0;;37053:43:::1;37107:44:::0;;::::1;::::0;;;;;;;;;;;37053:43;;-1:-1:-1;37107:44:0::1;::::0;;;37142:4;;;;;;37107:44;::::1;::::0;37142:4;;37107:44;37142:4;37107:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;37148:2:0;;-1:-1:-1;37107:34:0::1;::::0;-1:-1:-1;;37107:44:0:i:1;:::-;37267:12:::0;37184:62:::1;37232:13:::0;37191:4;;37196:15;;;37191:21;;::::1;;;;;;;;;;;;;37184:39;;;37224:2;37184:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;22747:912:0::0;23046:12;23060;23018:8;18756:15;18744:8;:27;;18736:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23090:12:::1;23105:44;23125:7;23134:6;23142;23105:19;:44::i;:::-;23160:57;::::0;;;;;23189:10:::1;23160:57;::::0;::::1;::::0;:28:::1;::::0;::::1;:57:::0;;;;;;;;;;;;;;23090:59;;-1:-1:-1;23160:28:0;;::::1;::::0;:57;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;23160:28:0;:57;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;23160:57:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23160:57:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;23285:24:0::1;::::0;;;;;:20:::1;:24:::0;;::::1;;::::0;::::1;::::0;;;23255:12:::1;::::0;;;23285:20;;::::1;::::0;::::1;::::0;:24;;;;;;;;;;;23255:12;23285:20;:24;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;23285:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23285:24:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;23285:24:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;23285:24:0;-1:-1:-1;23321:14:0::1;23341:38;23364:6:::0;23372;23341:22:::1;:38::i;:::-;23320:59;;;23421:6;23411:16;;:6;:16;;;:84;;23478:7;23487;23411:84;;;23444:7;23453;23411:84;23390:105:::0;;-1:-1:-1;23390:105:0;-1:-1:-1;23514:21:0;;::::1;;23506:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23603:10;23592:7;:21;;23584:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18806:1;;;;22747:912:::0;;;;;;;;;;;:::o;18599:41::-;;;:::o;38990:223::-;39114:21;39155:50;39181:7;39190:8;39200:4;39155:25;:50::i;25304:877::-;25620:16;25638:14;25665:12;25680:41;25700:7;25709:5;25716:4;25680:19;:41::i;:::-;25665:56;;25732:10;25745;:33;;25769:9;25745:33;;;25763:2;25745:33;25789:177;;;;;;25826:10;25789:177;;;;25859:4;25789:177;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25732:46;;-1:-1:-1;25789:22:0;;;;;;:177;;;;;-1:-1:-1;;25789:177:0;;;;;;;;-1:-1:-1;25789:22:0;:177;;;2:2:-1;;;;27:1;24;17:12;2:2;25789:177:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25789:177:0;;;;26004:169;26037:5;26057:9;26081:14;26110:12;26137:2;26154:8;26004:18;:169::i;:::-;25977:196;;;;-1:-1:-1;25304:877:0;-1:-1:-1;;;;;;;;;;;;;25304:877:0:o;20793:867::-;21126:12;21140;21154:14;21098:8;18756:15;18744:8;:27;;18736:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21207:174:::1;21235:6;21256;21277:14;21306;21335:10;21360;21207:13;:174::i;:::-;21186:195:::0;;-1:-1:-1;21186:195:0;-1:-1:-1;21392:12:0::1;21407:44;21427:7;21436:6:::0;21444;21407:19:::1;:44::i;:::-;21392:59;;21462:66;21494:6;21502:10;21514:4;21520:7;21462:31;:66::i;:::-;21539;21571:6;21579:10;21591:4;21597:7;21539:31;:66::i;:::-;21638:4;21628:20;;;21649:2;21628:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21628:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21628:24:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;21628:24:0;20793:867;;;;-1:-1:-1;21628:24:0;;-1:-1:-1;20793:867:0;;-1:-1:-1;;;;;;;;;20793:867:0:o;21668:1036::-;21975:16;21993:14;22009;21947:8;18756:15;18744:8;:27;;18736:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22068:176:::1;22096:5;22116:4;22135:18;22168:9;22192:14;22221:12;22068:13;:176::i;:::-;22041:203:::0;;-1:-1:-1;22041:203:0;-1:-1:-1;22255:12:0::1;22270:41;22290:7;22299:5:::0;22306:4:::1;22270:19;:41::i;:::-;22255:56;;22322:69;22354:5;22361:10;22373:4;22379:11;22322:31;:69::i;:::-;22408:4;22402:19;;;22429:9;22402:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;22402:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22402:39:0;;;;;22465:4;22459:20;;;22480:4;22486:9;22459:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;22459:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22459:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;22459:37:0;22452:45:::1;;;;22530:4;22520:20;;;22541:2;22520:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;22520:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22520:24:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;22520:24:0;;-1:-1:-1;22595:9:0::1;:21:::0;-1:-1:-1;22591:105:0::1;;;22631:65;22662:10;22686:9;22674;:21;22631:30;:65::i;:::-;18806:1;21668:1036:::0;;;;;;;;;;;:::o;33128:919::-;33384:21;33356:8;18756:15;18744:8;:27;;18736:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33442:4:::1;33431:15;;:4;;33436:1;33431:7;;;;;;;;;;;;;;;:15;;;33423:52;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;33496:50;33521:7;33530:9;33541:4;;33496:50;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;33496:24:0::1;::::0;-1:-1:-1;;;33496:50:0:i:1;:::-;33486:60;;33579:9;33565:7;33573:1;33565:10;;;;;;;;;;;;;;:23;;33557:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33644:4;33638:19;;;33665:7;33673:1;33665:10;;;;;;;;;;;;;;33638:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33638:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33638:40:0;;;;;33716:4;33710:20;;;33749:46;33769:7;33778:4;;33783:1;33778:7;;;;;;33749:46;33814:7;33822:1;33814:10;;;;;;;;;;;;;;33710:129;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33710:129:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33710:129:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;33710:129:0;33689:161:::1;;;;33861:24;33867:7;33876:4;;33861:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;33882:2:0;;-1:-1:-1;33861:5:0::1;::::0;-1:-1:-1;;33861:24:0:i:1;:::-;33948:7;33956:1;33948:10;;;;;;;;;;;;;;33936:9;:22;33932:107;;;33973:66;34004:10;34028:7;34036:1;34028:10;;;;;;;;;;;;;;34016:9;:22;33973:30;:66::i;893:422::-:0;1102:45;;;1077:10;1102:45;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1102:45:0;;;;;;;25:18:-1;;61:17;;96:58;182:15;1102:45:0;179:29:-1;160:49;;1077:81:0;;;;1042:12;;1056:17;;1077:10;;;;1102:45;1077:81;;;25:18:-1;1077:81:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;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;;;1077:81: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;;1041:117:0;;;;1191:7;:57;;;;-1:-1:-1;1203:11:0;;:16;;:44;;;1234:4;1223:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1223:24:0;1203:44;1169:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;893:422;;;;;:::o;1837:197::-;1947:12;;;1907;1947;;;;;;;;;1925:7;;;;1940:5;;1925:35;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;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;;;1925: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;;1906:54:0;;;1979:7;1971:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1837:197;;;:::o;14609:580::-;14736:14;14782:1;14771:8;:12;14763:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14871:1;14859:9;:13;:31;;;;;14889:1;14876:10;:14;14859:31;14837:116;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14964:20;14987:18;:8;15000:4;14987:18;:12;:18;:::i;:::-;14964:41;-1:-1:-1;15016:14:0;15033:31;14964:41;15053:10;15033:31;:19;:31;:::i;:::-;15016:48;-1:-1:-1;15075:16:0;15094:41;15119:15;15094:20;:9;15108:5;15094:20;:13;:20;:::i;:::-;:24;:41;:24;:41;:::i;:::-;15075:60;;15170:11;15158:9;:23;;;;;;;14609:580;-1:-1:-1;;;;;;;14609:580:0:o;15927:606::-;16062:21;16119:1;16104:4;:11;:16;;16096:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16182:4;:11;16171:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16171:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;16171:23:0;;16161:33;;16218:8;16205:7;16213:1;16205:10;;;;;;;;;;;;;:21;;;;;16242:6;16237:289;16268:1;16254:4;:11;:15;16250:1;:19;16237:289;;;16292:14;16308:15;16327:108;16357:7;16383:4;16388:1;16383:7;;;;;;;;;;;;;;16409:4;16414:1;16418;16414:5;16409:11;;;;;;;;;;;;;;16327;:108::i;:::-;16291:144;;;;16467:47;16480:7;16488:1;16480:10;;;;;;;;;;;;;;16492:9;16503:10;16467:12;:47::i;:::-;16450:7;16458:1;16462;16458:5;16450:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;16271:3:0;;16237:289;;;;15927:606;;;;;:::o;12486:933::-;12609:12;12635:14;12651;12669:26;12680:6;12688;12669:10;:26::i;:::-;12911:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;12911:32:0;;;;;12901:43;;;;;;12790:576;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;12790:576:0;;;;;;;12758:627;;;;;;;;;12486:933;-1:-1:-1;;;;;12486:933:0:o;1323:506::-;1605:51;;;1580:10;1605:51;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1605:51:0;;;;;;;25:18:-1;;61:17;;96:58;182:15;1605:51:0;179:29:-1;160:49;;1580:87:0;;;;1545:12;;1559:17;;1580:10;;;;1605:51;1580:87;;;25:18:-1;1580:87:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;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;;;1580:87: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;;1544:123:0;;;;1700:7;:57;;;;-1:-1:-1;1712:11:0;;:16;;:44;;;1743:4;1732:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1732:24:0;1712:44;1678:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1323:506;;;;;;:::o;28031:869::-;28172:6;28167:726;28198:1;28184:4;:11;:15;28180:1;:19;28167:726;;;28222:13;28237:14;28256:4;28261:1;28256:7;;;;;;;;;;;;;;28265:4;28270:1;28274;28270:5;28265:11;;;;;;;;;;;;;;28221:56;;;;28293:14;28313:37;28336:5;28343:6;28313:22;:37::i;:::-;28292:58;;;28365:14;28382:7;28390:1;28394;28390:5;28382:14;;;;;;;;;;;;;;28365:31;;28412:15;28429;28457:6;28448:15;;:5;:15;;;:95;;28524:9;28540:1;28448:95;;;28489:1;28493:9;28448:95;28411:132;;;;28558:10;28589:1;28575:4;:11;:15;28571:1;:19;:111;;28679:3;28571:111;;;28610:49;28630:7;28639:6;28647:4;28652:1;28656;28652:5;28647:11;;;;;;;;;;;;;;28610:19;:49::i;:::-;28558:124;;28707:43;28727:7;28736:5;28743:6;28707:19;:43::i;:::-;28697:59;;;28775:10;28804;28833:2;28864:1;28854:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;28854:12:0;87:42:-1;143:17;;-1:-1;28854:12:0;;28697:184;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;28697:184:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28697:184:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;28201:3:0;;;;;-1:-1:-1;28167:726:0;;-1:-1:-1;;;;;;;;28167:726:0;;;28031:869;;;:::o;16614:627::-;16749:21;16806:1;16791:4;:11;:16;;16783:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16869:4;:11;16858:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16858:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;16858:23:0;;16848:33;;16922:9;16892:7;16917:1;16900:7;:14;:18;16892:27;;;;;;;;;;;;;;;;;:39;16956:11;;:15;;16942:292;16973:5;;16942:292;;17001:14;17017:15;17036:108;17066:7;17092:4;17101:1;17097;:5;17092:11;;;;;;;;;;;;;;17122:4;17127:1;17122:7;;;;;;;17036:108;17000:144;;;;17176:46;17188:7;17196:1;17188:10;;;;;;;;;;;;;;17200:9;17211:10;17176:11;:46::i;:::-;17159:7;17171:1;17167;:5;17159:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;16980:3:0;;16942:292;;34194:1508;34332:6;34327:1368;34358:1;34344:4;:11;:15;34340:1;:19;34327:1368;;;34382:13;34397:14;34416:4;34421:1;34416:7;;;;;;;;;;;;;;34425:4;34430:1;34434;34430:5;34425:11;;;;;;;;;;;;;;34381:56;;;;34453:14;34473:37;34496:5;34503:6;34473:22;:37::i;:::-;34452:58;;;34525:14;34570:43;34590:7;34599:5;34606:6;34570:19;:43::i;:::-;34525:103;;34643:16;34674:17;34783:13;34798;34817:4;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34817:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34817:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;34817:18:0;;;;;;;34782:53;;;;;-1:-1:-1;34782:53:0;;-1:-1:-1;34855:17:0;;34896:15;;;;;;;;:103;;34980:8;34990;34896:103;;;34936:8;34946;34896:103;34854:145;;;;35032:96;35097:12;35039:5;35032:23;;;35064:4;35032:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;35032:96:0;35018:110;;35162:148;35209:11;35243:12;35278:13;35162:24;:148::i;:::-;35147:163;;34327:1368;;;;35341:15;35358;35386:6;35377:15;;:5;:15;;;:101;;35456:12;35475:1;35377:101;;;35418:1;35422:12;35377:101;35340:138;;;;35493:10;35524:1;35510:4;:11;:15;35506:1;:19;:111;;35614:3;35506:111;;;35545:49;35565:7;35574:6;35582:4;35587:1;35591;35587:5;35582:11;;;;;;;35545:49;35670:12;;;35680:1;35670:12;;;;;;;;;;35632:51;;;;;;;;;;;;;;;:9;:51;;;;;;;;;;;;;;;;;;;;;;35493:124;;-1:-1:-1;35632:9:0;;;;;;35642:10;;35654;;35493:124;;35670:12;;35632:51;;;;;;;;35670:12;;35632:51;;;;35670: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;35632:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35632:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;34361:3:0;;;;;-1:-1:-1;34327:1368:0;;-1:-1:-1;;;;;;;;;;34327:1368:0;8680:129;8764:5;;;8759:16;;;;8751:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15310:535;15437:13;15483:1;15471:9;:13;15463:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15573:1;15561:9;:13;:31;;;;;15591:1;15578:10;:14;15561:31;15539:116;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15666:14;15683:35;15712:5;15683:24;:9;15697;15683:24;:13;:24;:::i;:::-;:28;:35;:28;:35;:::i;:::-;15666:52;-1:-1:-1;15729:16:0;15748:35;15778:4;15748:25;:10;15763:9;15748:25;:14;:25;:::i;:35::-;15729:54;;15805:32;15835:1;15818:11;15806:9;:23;;;;;;;15805:32;:29;:32;:::i;:::-;15794:43;15310:535;-1:-1:-1;;;;;;15310:535:0:o;14105:382::-;14221:12;14264:1;14254:7;:11;14246:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14346:1;14335:8;:12;:28;;;;;14362:1;14351:8;:12;14335:28;14313:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14471:8;14447:21;:7;14459:8;14447:21;:11;:21;:::i;:::-;:32;;;;;;;14105:382;-1:-1:-1;;;;14105:382:0:o;12004:390::-;12104:14;12120;12165:6;12155:16;;:6;:16;;;;12147:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12247:6;12238:15;;:6;:15;;;:79;;12302:6;12310;12238:79;;;12270:6;12278;12238:79;12219:98;;-1:-1:-1;12219:98:0;-1:-1:-1;12336:20:0;;;12328:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12004:390;;;;;:::o;19110:1675::-;19423:45;;;;;;:59;:45;;;;;;;;;;;;;;;;19328:12;;;;;;19436:7;19423:29;;;;;;:45;;;;;;;;;;;;;;;:29;:45;;;2:2:-1;;;;27:1;24;17:12;2:2;19423:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19423:45:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;19423:45:0;:59;;;19419:140;;;19499:48;;;;;;:32;:48;;;;;;;;;;;;;;;;19512:7;19499:32;;;;;;:48;;;;;;;;;;;;;;;-1:-1:-1;19499:32:0;:48;;;2:2:-1;;;;27:1;24;17:12;2:2;19499:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19499:48:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;19419:140:0;19570:13;19585;19602:98;19640:7;19662:6;19683;19602:23;:98::i;:::-;19569:131;;;;19715:8;19727:1;19715:13;:30;;;;-1:-1:-1;19732:13:0;;19715:30;19711:1067;;;19784:14;;-1:-1:-1;19800:14:0;;-1:-1:-1;19711:1067:0;;;19848:19;19870:119;19906:14;19939:8;19966;19870:17;:119::i;:::-;19848:141;;20026:14;20008;:32;20004:763;;20109:10;20091:14;:28;;20061:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20237:14;;-1:-1:-1;20253:14:0;-1:-1:-1;20253:14:0;20004:763;;;20309:19;20331:135;20371:14;20408:8;20439;20331:17;:135::i;:::-;20309:157;;20510:14;20492;:32;;20485:40;;;;20592:10;20574:14;:28;;20544:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20720:14;-1:-1:-1;20736:14:0;;-1:-1:-1;20004:763:0;19711:1067;;19110:1675;;;;;;;;;;;:::o;8817:142::-;8869:6;8896;;;:30;;-1:-1:-1;;8911:5:0;;;8925:1;8920;8911:5;8920:1;8906:15;;;;;:20;8896:30;8888:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8544:128;8628:5;;;8623:16;;;;8615:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13477:515;13604:13;13619;13646:14;13666:26;13677:6;13685;13666:10;:26::i;:::-;13645:47;;;13703:32;13711:7;13720:6;13728;13703:7;:32::i;:::-;;13747:13;13762;13805:32;13813:7;13822:6;13830;13805:7;:32::i;:::-;13781:79;;;:81;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13781:81:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13781:81:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;13781:81:0;;;;;;;13746:116;;;;;-1:-1:-1;13746:116:0;;-1:-1:-1;13896:16:0;;;;;;;;:88;;13965:8;13975;13896:88;;;13929:8;13939;13896:88;13873:111;;;;-1:-1:-1;13477:515:0;-1:-1:-1;;;;;;;13477:515:0:o
Swarm Source
ipfs://a52397c574c6d09b2596cba160e4ff16de6cf51ad894fbf09d76930a7395d48f
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 27 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
LINEA | 100.00% | $2,267.38 | 0.00017353 | $0.393459 |
[ 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.