Overview
APE Balance
0 APE
APE Value
$0.00More Info
Private Name Tags
ContractCreator
Loading...
Loading
Contract Name:
ApeFiSwapRouter02
Compiler Version
v0.6.6+commit.6c089d02
Contract Source Code (Solidity)
/** *Submitted for verification at apescan.io on 2024-12-29 */ pragma solidity ^0.6.6; interface IUniswapV2Factory { 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; } interface IUniswapV2Pair { 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; } interface IUniswapV2Router01 { 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); } interface IUniswapV2Router02 is IUniswapV2Router01 { 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; } 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); } interface IWETH { function deposit() external payable; function transfer(address to, uint value) external returns (bool); function withdraw(uint) external; } contract ApeFiSwapRouter02 is IUniswapV2Router02 { using SafeMath for uint; address public immutable override factory; address public immutable override WETH; modifier ensure(uint deadline) { require(deadline >= block.timestamp, "ApeFiSwapRouter: 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 (IUniswapV2Factory(factory).getPair(tokenA, tokenB) == address(0)) { IUniswapV2Factory(factory).createPair(tokenA, tokenB); } (uint reserveA, uint reserveB) = UniswapV2Library.getReserves( factory, tokenA, tokenB ); if (reserveA == 0 && reserveB == 0) { (amountA, amountB) = (amountADesired, amountBDesired); } else { uint amountBOptimal = UniswapV2Library.quote( amountADesired, reserveA, reserveB ); if (amountBOptimal <= amountBDesired) { require( amountBOptimal >= amountBMin, "ApeFiSwapRouter: INSUFFICIENT_B_AMOUNT" ); (amountA, amountB) = (amountADesired, amountBOptimal); } else { uint amountAOptimal = UniswapV2Library.quote( amountBDesired, reserveB, reserveA ); assert(amountAOptimal <= amountADesired); require( amountAOptimal >= amountAMin, "ApeFiSwapRouter: 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 = UniswapV2Library.pairFor(factory, tokenA, tokenB); TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA); TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB); liquidity = IUniswapV2Pair(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 = UniswapV2Library.pairFor(factory, token, WETH); TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken); IWETH(WETH).deposit{value: amountETH}(); assert(IWETH(WETH).transfer(pair, amountETH)); liquidity = IUniswapV2Pair(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 = UniswapV2Library.pairFor(factory, tokenA, tokenB); IUniswapV2Pair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair (uint amount0, uint amount1) = IUniswapV2Pair(pair).burn(to); (address token0, ) = UniswapV2Library.sortTokens(tokenA, tokenB); (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0); require( amountA >= amountAMin, "ApeFiSwapRouter: INSUFFICIENT_A_AMOUNT" ); require( amountB >= amountBMin, "ApeFiSwapRouter: 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 = UniswapV2Library.pairFor(factory, tokenA, tokenB); uint value = approveMax ? uint(-1) : liquidity; IUniswapV2Pair(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 = UniswapV2Library.pairFor(factory, token, WETH); uint value = approveMax ? uint(-1) : liquidity; IUniswapV2Pair(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 = UniswapV2Library.pairFor(factory, token, WETH); uint value = approveMax ? uint(-1) : liquidity; IUniswapV2Pair(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, ) = UniswapV2Library.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 ? UniswapV2Library.pairFor(factory, output, path[i + 2]) : _to; IUniswapV2Pair(UniswapV2Library.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 = UniswapV2Library.getAmountsOut(factory, amountIn, path); require( amounts[amounts.length - 1] >= amountOutMin, "ApeFiSwapRouter: INSUFFICIENT_OUTPUT_AMOUNT" ); TransferHelper.safeTransferFrom( path[0], msg.sender, UniswapV2Library.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 = UniswapV2Library.getAmountsIn(factory, amountOut, path); require( amounts[0] <= amountInMax, "ApeFiSwapRouter: EXCESSIVE_INPUT_AMOUNT" ); TransferHelper.safeTransferFrom( path[0], msg.sender, UniswapV2Library.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, "ApeFiSwapRouter: INVALID_PATH"); amounts = UniswapV2Library.getAmountsOut(factory, msg.value, path); require( amounts[amounts.length - 1] >= amountOutMin, "ApeFiSwapRouter: INSUFFICIENT_OUTPUT_AMOUNT" ); IWETH(WETH).deposit{value: amounts[0]}(); assert( IWETH(WETH).transfer( UniswapV2Library.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, "ApeFiSwapRouter: INVALID_PATH"); amounts = UniswapV2Library.getAmountsIn(factory, amountOut, path); require( amounts[0] <= amountInMax, "ApeFiSwapRouter: EXCESSIVE_INPUT_AMOUNT" ); TransferHelper.safeTransferFrom( path[0], msg.sender, UniswapV2Library.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, "ApeFiSwapRouter: INVALID_PATH"); amounts = UniswapV2Library.getAmountsOut(factory, amountIn, path); require( amounts[amounts.length - 1] >= amountOutMin, "ApeFiSwapRouter: INSUFFICIENT_OUTPUT_AMOUNT" ); TransferHelper.safeTransferFrom( path[0], msg.sender, UniswapV2Library.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, "ApeFiSwapRouter: INVALID_PATH"); amounts = UniswapV2Library.getAmountsIn(factory, amountOut, path); require( amounts[0] <= msg.value, "ApeFiSwapRouter: EXCESSIVE_INPUT_AMOUNT" ); IWETH(WETH).deposit{value: amounts[0]}(); assert( IWETH(WETH).transfer( UniswapV2Library.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, ) = UniswapV2Library.sortTokens(input, output); IUniswapV2Pair pair = IUniswapV2Pair( UniswapV2Library.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 = UniswapV2Library.getAmountOut( amountInput, reserveInput, reserveOutput ); } (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0)); address to = i < path.length - 2 ? UniswapV2Library.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, UniswapV2Library.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, "ApeFiSwapRouter: INSUFFICIENT_OUTPUT_AMOUNT" ); } function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable virtual override ensure(deadline) { require(path[0] == WETH, "ApeFiSwapRouter: INVALID_PATH"); uint amountIn = msg.value; IWETH(WETH).deposit{value: amountIn}(); assert( IWETH(WETH).transfer( UniswapV2Library.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, "UniswapV2Router: 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, "ApeFiSwapRouter: INVALID_PATH"); TransferHelper.safeTransferFrom( path[0], msg.sender, UniswapV2Library.pairFor(factory, path[0], path[1]), amountIn ); _swapSupportingFeeOnTransferTokens(path, address(this)); uint amountOut = IERC20(WETH).balanceOf(address(this)); require( amountOut >= amountOutMin, "ApeFiSwapRouter: 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 UniswapV2Library.quote(amountA, reserveA, reserveB); } function getAmountOut( uint amountIn, uint reserveIn, uint reserveOut ) public pure virtual override returns (uint amountOut) { return UniswapV2Library.getAmountOut(amountIn, reserveIn, reserveOut); } function getAmountIn( uint amountOut, uint reserveIn, uint reserveOut ) public pure virtual override returns (uint amountIn) { return UniswapV2Library.getAmountIn(amountOut, reserveIn, reserveOut); } function getAmountsOut( uint amountIn, address[] memory path ) public view virtual override returns (uint[] memory amounts) { return UniswapV2Library.getAmountsOut(factory, amountIn, path); } function getAmountsIn( uint amountOut, address[] memory path ) public view virtual override returns (uint[] memory amounts) { return UniswapV2Library.getAmountsIn(factory, amountOut, path); } } // 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"); } } library UniswapV2Library { 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, "ApeFiSwapLibrary: IDENTICAL_ADDRESSES"); (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA); require(token0 != address(0), "ApeFiSwapLibrary: 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"28665df95fe68139cd8fb06865120c345dc21c3318ffc6724b3bcda329ccf5a4" // init code hash ) ) ) ); } // 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); (uint reserve0, uint reserve1, ) = IUniswapV2Pair( 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, "ApeFiSwapLibrary: INSUFFICIENT_AMOUNT"); require( reserveA > 0 && reserveB > 0, "ApeFiSwapLibrary: 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, "ApeFiSwapLibrary: INSUFFICIENT_INPUT_AMOUNT"); require( reserveIn > 0 && reserveOut > 0, "ApeFiSwapLibrary: INSUFFICIENT_LIQUIDITY" ); uint amountInWithFee = amountIn.mul(997); uint numerator = amountInWithFee.mul(reserveOut); uint denominator = reserveIn.mul(1000).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, "ApeFiSwapLibrary: INSUFFICIENT_OUTPUT_AMOUNT"); require( reserveIn > 0 && reserveOut > 0, "ApeFiSwapLibrary: INSUFFICIENT_LIQUIDITY" ); uint numerator = reserveIn.mul(amountOut).mul(1000); uint denominator = reserveOut.sub(amountOut).mul(997); 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, "ApeFiSwapLibrary: 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, "ApeFiSwapLibrary: 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); } } } // 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"); } }
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
60c060405234801561001057600080fd5b50604051620047d0380380620047d08339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c61464b620001856000398061015f5280610ce45280610d1f5280610e16528061103452806113be528061152452806118eb52806119e55280611a9b5280611b695280611caf5280611d375280611f7c5280611ff752806120a652806121725280612207528061227b52806127b65280612a295280612a7f5280612ab35280612b275280612cc75280612e0a5280612e92525080610ea45280610f7b52806110fa5280611133528061126e528061144c528061150252806116725280611bfc5280611d695280611ecc52806122ad5280612543528061273b5280612764528061279452806129015280612a5d5280612d5a5280612ec4528061376b52806137ae5280613a915280613c10528061404052806140ee528061416e525061464b6000f3fe60806040526004361061014f5760003560e01c80638803dbee116100b6578063c45a01551161006f578063c45a015514610a10578063d06ca61f14610a25578063ded9382a14610ada578063e8e3370014610b4d578063f305d71914610bcd578063fb3bdb4114610c1357610188565b80638803dbee146107df578063ad5c464814610875578063ad615dec146108a6578063af2979eb146108dc578063b6f9de951461092f578063baa2abde146109b357610188565b80634a25d94a116101085780634a25d94a146104f05780635b0d5984146105865780635c11d795146105f9578063791ac9471461068f5780637ff36ab51461072557806385f8c259146107a957610188565b806302751cec1461018d578063054d50d4146101f957806318cbafe5146102415780631f00ca74146103275780632195995c146103dc57806338ed17391461045a57610188565b3661018857336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461018657fe5b005b600080fd5b34801561019957600080fd5b506101e0600480360360c08110156101b057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610c97565b6040805192835260208301919091528051918290030190f35b34801561020557600080fd5b5061022f6004803603606081101561021c57600080fd5b5080359060208101359060400135610db1565b60408051918252519081900360200190f35b34801561024d57600080fd5b506102d7600480360360a081101561026457600080fd5b813591602081013591810190606081016040820135600160201b81111561028a57600080fd5b82018360208201111561029c57600080fd5b803590602001918460208302840111600160201b831117156102bd57600080fd5b91935091506001600160a01b038135169060200135610dc6565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103135781810151838201526020016102fb565b505050509050019250505060405180910390f35b34801561033357600080fd5b506102d76004803603604081101561034a57600080fd5b81359190810190604081016020820135600160201b81111561036b57600080fd5b82018360208201111561037d57600080fd5b803590602001918460208302840111600160201b8311171561039e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506110f3945050505050565b3480156103e857600080fd5b506101e0600480360361016081101561040057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611129565b34801561046657600080fd5b506102d7600480360360a081101561047d57600080fd5b813591602081013591810190606081016040820135600160201b8111156104a357600080fd5b8201836020820111156104b557600080fd5b803590602001918460208302840111600160201b831117156104d657600080fd5b91935091506001600160a01b038135169060200135611223565b3480156104fc57600080fd5b506102d7600480360360a081101561051357600080fd5b813591602081013591810190606081016040820135600160201b81111561053957600080fd5b82018360208201111561054b57600080fd5b803590602001918460208302840111600160201b8311171561056c57600080fd5b91935091506001600160a01b03813516906020013561136e565b34801561059257600080fd5b5061022f60048036036101408110156105aa57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356114fa565b34801561060557600080fd5b50610186600480360360a081101561061c57600080fd5b813591602081013591810190606081016040820135600160201b81111561064257600080fd5b82018360208201111561065457600080fd5b803590602001918460208302840111600160201b8311171561067557600080fd5b91935091506001600160a01b038135169060200135611608565b34801561069b57600080fd5b50610186600480360360a08110156106b257600080fd5b813591602081013591810190606081016040820135600160201b8111156106d857600080fd5b8201836020820111156106ea57600080fd5b803590602001918460208302840111600160201b8311171561070b57600080fd5b91935091506001600160a01b03813516906020013561189d565b6102d76004803603608081101561073b57600080fd5b81359190810190604081016020820135600160201b81111561075c57600080fd5b82018360208201111561076e57600080fd5b803590602001918460208302840111600160201b8311171561078f57600080fd5b91935091506001600160a01b038135169060200135611b21565b3480156107b557600080fd5b5061022f600480360360608110156107cc57600080fd5b5080359060208101359060400135611e74565b3480156107eb57600080fd5b506102d7600480360360a081101561080257600080fd5b813591602081013591810190606081016040820135600160201b81111561082857600080fd5b82018360208201111561083a57600080fd5b803590602001918460208302840111600160201b8311171561085b57600080fd5b91935091506001600160a01b038135169060200135611e81565b34801561088157600080fd5b5061088a611f7a565b604080516001600160a01b039092168252519081900360200190f35b3480156108b257600080fd5b5061022f600480360360608110156108c957600080fd5b5080359060208101359060400135611f9e565b3480156108e857600080fd5b5061022f600480360360c08110156108ff57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135611fab565b6101866004803603608081101561094557600080fd5b81359190810190604081016020820135600160201b81111561096657600080fd5b82018360208201111561097857600080fd5b803590602001918460208302840111600160201b8311171561099957600080fd5b91935091506001600160a01b03813516906020013561212c565b3480156109bf57600080fd5b506101e0600480360360e08110156109d657600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c001356124f5565b348015610a1c57600080fd5b5061088a612739565b348015610a3157600080fd5b506102d760048036036040811015610a4857600080fd5b81359190810190604081016020820135600160201b811115610a6957600080fd5b820183602082011115610a7b57600080fd5b803590602001918460208302840111600160201b83111715610a9c57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061275d945050505050565b348015610ae657600080fd5b506101e06004803603610140811015610afe57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e0820135169061010081013590610120013561278a565b348015610b5957600080fd5b50610baf6004803603610100811015610b7157600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e0013561289e565b60408051938452602084019290925282820152519081900360600190f35b610baf600480360360c0811015610be357600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a001356129da565b6102d760048036036080811015610c2957600080fd5b81359190810190604081016020820135600160201b811115610c4a57600080fd5b820183602082011115610c5c57600080fd5b803590602001918460208302840111600160201b83111715610c7d57600080fd5b91935091506001600160a01b038135169060200135612c7f565b6000808242811015610cde576040805162461bcd60e51b815260206004820152601860248201526000805160206143fd833981519152604482015290519081900360640190fd5b610d0d897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a6124f5565b9093509150610d1d898685613001565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610d8357600080fd5b505af1158015610d97573d6000803e3d6000fd5b50505050610da5858361316b565b50965096945050505050565b6000610dbe848484613263565b949350505050565b60608142811015610e0c576040805162461bcd60e51b815260206004820152601860248201526000805160206143fd833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110610e4657fe5b905060200201356001600160a01b03166001600160a01b031614610e9f576040805162461bcd60e51b815260206004820152601d602482015260008051602061450c833981519152604482015290519081900360640190fd5b610efd7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061335392505050565b91508682600184510381518110610f1057fe5b60200260200101511015610f555760405162461bcd60e51b815260040180806020018281038252602b81526020018061446a602b913960400191505060405180910390fd5b610ff386866000818110610f6557fe5b905060200201356001600160a01b031633610fd97f00000000000000000000000000000000000000000000000000000000000000008a8a6000818110610fa757fe5b905060200201356001600160a01b03168b8b6001818110610fc457fe5b905060200201356001600160a01b031661349f565b85600081518110610fe657fe5b602002602001015161355f565b611032828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506136bc915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551038151811061107157fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156110af57600080fd5b505af11580156110c3573d6000803e3d6000fd5b505050506110e884836001855103815181106110db57fe5b602002602001015161316b565b509695505050505050565b60606111207f00000000000000000000000000000000000000000000000000000000000000008484613902565b90505b92915050565b60008060006111597f00000000000000000000000000000000000000000000000000000000000000008f8f61349f565b9050600087611168578c61116c565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156111e257600080fd5b505af11580156111f6573d6000803e3d6000fd5b505050506112098f8f8f8f8f8f8f6124f5565b809450819550505050509b509b9950505050505050505050565b60608142811015611269576040805162461bcd60e51b815260206004820152601860248201526000805160206143fd833981519152604482015290519081900360640190fd5b6112c77f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061335392505050565b915086826001845103815181106112da57fe5b6020026020010151101561131f5760405162461bcd60e51b815260040180806020018281038252602b81526020018061446a602b913960400191505060405180910390fd5b61132f86866000818110610f6557fe5b6110e8828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506136bc915050565b606081428110156113b4576040805162461bcd60e51b815260206004820152601860248201526000805160206143fd833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868660001981018181106113ee57fe5b905060200201356001600160a01b03166001600160a01b031614611447576040805162461bcd60e51b815260206004820152601d602482015260008051602061450c833981519152604482015290519081900360640190fd5b6114a57f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061390292505050565b915086826000815181106114b557fe5b60200260200101511115610f555760405162461bcd60e51b815260040180806020018281038252602781526020018061452c6027913960400191505060405180910390fd5b6000806115487f00000000000000000000000000000000000000000000000000000000000000008d7f000000000000000000000000000000000000000000000000000000000000000061349f565b9050600086611557578b61155b565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156115d157600080fd5b505af11580156115e5573d6000803e3d6000fd5b505050506115f78d8d8d8d8d8d611fab565b9d9c50505050505050505050505050565b804281101561164c576040805162461bcd60e51b815260206004820152601860248201526000805160206143fd833981519152604482015290519081900360640190fd5b6116c18585600081811061165c57fe5b905060200201356001600160a01b0316336116bb7f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b905060200201356001600160a01b03168a8a6001818110610fc457fe5b8a61355f565b6000858560001981018181106116d357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561173857600080fd5b505afa15801561174c573d6000803e3d6000fd5b505050506040513d602081101561176257600080fd5b505160408051602088810282810182019093528882529293506117a4929091899189918291850190849080828437600092019190915250889250613a3a915050565b8661185682888860001981018181106117b957fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b505afa158015611832573d6000803e3d6000fd5b505050506040513d602081101561184857600080fd5b50519063ffffffff613d4516565b10156118935760405162461bcd60e51b815260040180806020018281038252602b81526020018061446a602b913960400191505060405180910390fd5b5050505050505050565b80428110156118e1576040805162461bcd60e51b815260206004820152601860248201526000805160206143fd833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168585600019810181811061191b57fe5b905060200201356001600160a01b03166001600160a01b031614611974576040805162461bcd60e51b815260206004820152601d602482015260008051602061450c833981519152604482015290519081900360640190fd5b6119848585600081811061165c57fe5b6119c2858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613a3a915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611a2c57600080fd5b505afa158015611a40573d6000803e3d6000fd5b505050506040513d6020811015611a5657600080fd5b5051905086811015611a995760405162461bcd60e51b815260040180806020018281038252602b81526020018061446a602b913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611aff57600080fd5b505af1158015611b13573d6000803e3d6000fd5b50505050611893848261316b565b60608142811015611b67576040805162461bcd60e51b815260206004820152601860248201526000805160206143fd833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611b9e57fe5b905060200201356001600160a01b03166001600160a01b031614611bf7576040805162461bcd60e51b815260206004820152601d602482015260008051602061450c833981519152604482015290519081900360640190fd5b611c557f00000000000000000000000000000000000000000000000000000000000000003488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061335392505050565b91508682600184510381518110611c6857fe5b60200260200101511015611cad5760405162461bcd60e51b815260040180806020018281038252602b81526020018061446a602b913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611ce957fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d1c57600080fd5b505af1158015611d30573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611d957f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110611da257fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611df957600080fd5b505af1158015611e0d573d6000803e3d6000fd5b505050506040513d6020811015611e2357600080fd5b5051611e2b57fe5b611e6a828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506136bc915050565b5095945050505050565b6000610dbe848484613d95565b60608142811015611ec7576040805162461bcd60e51b815260206004820152601860248201526000805160206143fd833981519152604482015290519081900360640190fd5b611f257f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061390292505050565b91508682600081518110611f3557fe5b6020026020010151111561131f5760405162461bcd60e51b815260040180806020018281038252602781526020018061452c6027913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610dbe848484613e85565b60008142811015611ff1576040805162461bcd60e51b815260206004820152601860248201526000805160206143fd833981519152604482015290519081900360640190fd5b612020887f000000000000000000000000000000000000000000000000000000000000000089898930896124f5565b604080516370a0823160e01b815230600482015290519194506120a492508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561207357600080fd5b505afa158015612087573d6000803e3d6000fd5b505050506040513d602081101561209d57600080fd5b5051613001565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561210a57600080fd5b505af115801561211e573d6000803e3d6000fd5b505050506110e8848361316b565b8042811015612170576040805162461bcd60e51b815260206004820152601860248201526000805160206143fd833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316858560008181106121a757fe5b905060200201356001600160a01b03166001600160a01b031614612200576040805162461bcd60e51b815260206004820152601d602482015260008051602061450c833981519152604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561226057600080fd5b505af1158015612274573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6122d97f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561232957600080fd5b505af115801561233d573d6000803e3d6000fd5b505050506040513d602081101561235357600080fd5b505161235b57fe5b60008686600019810181811061236d57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156123d257600080fd5b505afa1580156123e6573d6000803e3d6000fd5b505050506040513d60208110156123fc57600080fd5b5051604080516020898102828101820190935289825292935061243e9290918a918a918291850190849080828437600092019190915250899250613a3a915050565b876124b8828989600019810181811061245357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b10156118935760405162461bcd60e51b815260040180806020018281038252602b815260200180614576602b913960400191505060405180910390fd5b600080824281101561253c576040805162461bcd60e51b815260206004820152601860248201526000805160206143fd833981519152604482015290519081900360640190fd5b60006125697f00000000000000000000000000000000000000000000000000000000000000008c8c61349f565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b1580156125c457600080fd5b505af11580156125d8573d6000803e3d6000fd5b505050506040513d60208110156125ee57600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b15801561263b57600080fd5b505af115801561264f573d6000803e3d6000fd5b505050506040513d604081101561266557600080fd5b5080516020909101519092509050600061267f8e8e613f31565b509050806001600160a01b03168e6001600160a01b0316146126a25781836126a5565b82825b90975095508a8710156126e95760405162461bcd60e51b81526004018080602001828103825260268152602001806145cc6026913960400191505060405180910390fd5b898610156127285760405162461bcd60e51b81526004018080602001828103825260268152602001806144e66026913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606111207f00000000000000000000000000000000000000000000000000000000000000008484613353565b60008060006127da7f00000000000000000000000000000000000000000000000000000000000000008e7f000000000000000000000000000000000000000000000000000000000000000061349f565b90506000876127e9578c6127ed565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561286357600080fd5b505af1158015612877573d6000803e3d6000fd5b505050506128898e8e8e8e8e8e610c97565b909f909e509c50505050505050505050505050565b600080600083428110156128e7576040805162461bcd60e51b815260206004820152601860248201526000805160206143fd833981519152604482015290519081900360640190fd5b6128f58c8c8c8c8c8c61400f565b909450925060006129277f00000000000000000000000000000000000000000000000000000000000000008e8e61349f565b90506129358d33838861355f565b6129418c33838761355f565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561299957600080fd5b505af11580156129ad573d6000803e3d6000fd5b505050506040513d60208110156129c357600080fd5b5051949d939c50939a509198505050505050505050565b60008060008342811015612a23576040805162461bcd60e51b815260206004820152601860248201526000805160206143fd833981519152604482015290519081900360640190fd5b612a518a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c61400f565b90945092506000612aa37f00000000000000000000000000000000000000000000000000000000000000008c7f000000000000000000000000000000000000000000000000000000000000000061349f565b9050612ab18b33838861355f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612b0c57600080fd5b505af1158015612b20573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612ba557600080fd5b505af1158015612bb9573d6000803e3d6000fd5b505050506040513d6020811015612bcf57600080fd5b5051612bd757fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612c2f57600080fd5b505af1158015612c43573d6000803e3d6000fd5b505050506040513d6020811015612c5957600080fd5b5051925034841015612c7157612c713385340361316b565b505096509650969350505050565b60608142811015612cc5576040805162461bcd60e51b815260206004820152601860248201526000805160206143fd833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110612cfc57fe5b905060200201356001600160a01b03166001600160a01b031614612d55576040805162461bcd60e51b815260206004820152601d602482015260008051602061450c833981519152604482015290519081900360640190fd5b612db37f00000000000000000000000000000000000000000000000000000000000000008888888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061390292505050565b91503482600081518110612dc357fe5b60200260200101511115612e085760405162461bcd60e51b815260040180806020018281038252602781526020018061452c6027913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110612e4457fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612e7757600080fd5b505af1158015612e8b573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612ef07f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110612efd57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612f5457600080fd5b505af1158015612f68573d6000803e3d6000fd5b505050506040513d6020811015612f7e57600080fd5b5051612f8657fe5b612fc5828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506136bc915050565b81600081518110612fd257fe5b6020026020010151341115611e6a57611e6a3383600081518110612ff257fe5b6020026020010151340361316b565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b6020831061307e5780518252601f19909201916020918201910161305f565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146130e0576040519150601f19603f3d011682016040523d82523d6000602084013e6130e5565b606091505b5091509150818015613113575080511580613113575080806020019051602081101561311057600080fd5b50515b613164576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106131b75780518252601f199092019160209182019101613198565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613219576040519150601f19603f3d011682016040523d82523d6000602084013e61321e565b606091505b505090508061325e5760405162461bcd60e51b81526004018080602001828103825260238152602001806145536023913960400191505060405180910390fd5b505050565b60008084116132a35760405162461bcd60e51b815260040180806020018281038252602b8152602001806145a1602b913960400191505060405180910390fd5b6000831180156132b35750600082115b6132ee5760405162461bcd60e51b815260040180806020018281038252602881526020018061441d6028913960400191505060405180910390fd5b6000613302856103e563ffffffff61428316565b90506000613316828563ffffffff61428316565b9050600061333c83613330886103e863ffffffff61428316565b9063ffffffff6142e616565b905080828161334757fe5b04979650505050505050565b60606002825110156133ac576040805162461bcd60e51b815260206004820152601e60248201527f4170654669537761704c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff811180156133c457600080fd5b506040519080825280602002602001820160405280156133ee578160200160208202803683370190505b50905082816000815181106133ff57fe5b60200260200101818152505060005b6001835103811015613497576000806134518786858151811061342d57fe5b602002602001015187866001018151811061344457fe5b6020026020010151614335565b9150915061347384848151811061346457fe5b60200260200101518383613263565b84846001018151811061348257fe5b6020908102919091010152505060010161340e565b509392505050565b60008060006134ae8585613f31565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527f28665df95fe68139cd8fb06865120c345dc21c3318ffc6724b3bcda329ccf5a4609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106135e45780518252601f1990920191602091820191016135c5565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613646576040519150601f19603f3d011682016040523d82523d6000602084013e61364b565b606091505b5091509150818015613679575080511580613679575080806020019051602081101561367657600080fd5b50515b6136b45760405162461bcd60e51b81526004018080602001828103825260248152602001806145f26024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156138fc576000808483815181106136da57fe5b60200260200101518584600101815181106136f157fe5b60200260200101519150915060006137098383613f31565b509050600087856001018151811061371d57fe5b60200260200101519050600080836001600160a01b0316866001600160a01b03161461374b5782600061374f565b6000835b91509150600060028a5103881061376657886137a7565b6137a77f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061379a57fe5b602002602001015161349f565b90506137d47f0000000000000000000000000000000000000000000000000000000000000000888861349f565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015613811576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561388257818101518382015260200161386a565b50505050905090810190601f1680156138af5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156138d157600080fd5b505af11580156138e5573d6000803e3d6000fd5b5050600190990198506136bf975050505050505050565b50505050565b606060028251101561395b576040805162461bcd60e51b815260206004820152601e60248201527f4170654669537761704c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561397357600080fd5b5060405190808252806020026020018201604052801561399d578160200160208202803683370190505b50905082816001835103815181106139b157fe5b60209081029190910101528151600019015b8015613497576000806139f3878660018603815181106139df57fe5b602002602001015187868151811061344457fe5b91509150613a15848481518110613a0657fe5b60200260200101518383613d95565b846001850381518110613a2457fe5b60209081029190910101525050600019016139c3565b60005b600183510381101561325e57600080848381518110613a5857fe5b6020026020010151858460010181518110613a6f57fe5b6020026020010151915091506000613a878383613f31565b5090506000613ab77f0000000000000000000000000000000000000000000000000000000000000000858561349f565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613af857600080fd5b505afa158015613b0c573d6000803e3d6000fd5b505050506040513d6060811015613b2257600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614613b58578284613b5b565b83835b91509150613bb9828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b9550613bc6868383613263565b945050505050600080856001600160a01b0316886001600160a01b031614613bf057826000613bf4565b6000835b91509150600060028c51038a10613c0b578a613c3f565b613c3f7f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061379a57fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613cc9578181015183820152602001613cb1565b50505050905090810190601f168015613cf65780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613d1857600080fd5b505af1158015613d2c573d6000803e3d6000fd5b50506001909b019a50613a3d9950505050505050505050565b80820382811115611123576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6000808411613dd55760405162461bcd60e51b815260040180806020018281038252602c8152602001806144ba602c913960400191505060405180910390fd5b600083118015613de55750600082115b613e205760405162461bcd60e51b815260040180806020018281038252602881526020018061441d6028913960400191505060405180910390fd5b6000613e446103e8613e38868863ffffffff61428316565b9063ffffffff61428316565b90506000613e5e6103e5613e38868963ffffffff613d4516565b9050613e7b6001828481613e6e57fe5b049063ffffffff6142e616565b9695505050505050565b6000808411613ec55760405162461bcd60e51b81526004018080602001828103825260258152602001806144956025913960400191505060405180910390fd5b600083118015613ed55750600082115b613f105760405162461bcd60e51b815260040180806020018281038252602881526020018061441d6028913960400191505060405180910390fd5b82613f21858463ffffffff61428316565b81613f2857fe5b04949350505050565b600080826001600160a01b0316846001600160a01b03161415613f855760405162461bcd60e51b81526004018080602001828103825260258152602001806144456025913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610613fa5578284613fa8565b83835b90925090506001600160a01b038216614008576040805162461bcd60e51b815260206004820152601e60248201527f4170654669537761704c6962726172793a205a45524f5f414444524553530000604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b15801561408957600080fd5b505afa15801561409d573d6000803e3d6000fd5b505050506040513d60208110156140b357600080fd5b50516001600160a01b0316141561416657604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b15801561413957600080fd5b505af115801561414d573d6000803e3d6000fd5b505050506040513d602081101561416357600080fd5b50505b6000806141947f00000000000000000000000000000000000000000000000000000000000000008b8b614335565b915091508160001480156141a6575080155b156141b657879350869250614276565b60006141c3898484613e85565b9050878111614216578581101561420b5760405162461bcd60e51b81526004018080602001828103825260268152602001806144e66026913960400191505060405180910390fd5b889450925082614274565b6000614223898486613e85565b90508981111561422f57fe5b8781101561426e5760405162461bcd60e51b81526004018080602001828103825260268152602001806145cc6026913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b600081158061429e5750508082028282828161429b57fe5b04145b611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b60008060006143448585613f31565b50905060008061435588888861349f565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561438d57600080fd5b505afa1580156143a1573d6000803e3d6000fd5b505050506040513d60608110156143b757600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b03878116908416146143ea5780826143ed565b81815b9099909850965050505050505056fe417065466953776170526f757465723a204558504952454400000000000000004170654669537761704c6962726172793a20494e53554646494349454e545f4c49515549444954594170654669537761704c6962726172793a204944454e544943414c5f414444524553534553417065466953776170526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e544170654669537761704c6962726172793a20494e53554646494349454e545f414d4f554e544170654669537761704c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e54417065466953776170526f757465723a20494e53554646494349454e545f425f414d4f554e54417065466953776170526f757465723a20494e56414c49445f50415448000000417065466953776170526f757465723a204558434553534956455f494e5055545f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544556e69737761705632526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e544170654669537761704c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e54417065466953776170526f757465723a20494e53554646494349454e545f415f414d4f554e545472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544a2646970667358221220814c5d30f503082ea03eec9b685fa1535f468a5df65e3e3c7222fea4e41fc76b64736f6c6343000606003300000000000000000000000040a15788078b92a67f3eaa914fca3937368f7f8100000000000000000000000048b62137edfa95a428d35c09e44256a739f6b557
Deployed Bytecode
0x60806040526004361061014f5760003560e01c80638803dbee116100b6578063c45a01551161006f578063c45a015514610a10578063d06ca61f14610a25578063ded9382a14610ada578063e8e3370014610b4d578063f305d71914610bcd578063fb3bdb4114610c1357610188565b80638803dbee146107df578063ad5c464814610875578063ad615dec146108a6578063af2979eb146108dc578063b6f9de951461092f578063baa2abde146109b357610188565b80634a25d94a116101085780634a25d94a146104f05780635b0d5984146105865780635c11d795146105f9578063791ac9471461068f5780637ff36ab51461072557806385f8c259146107a957610188565b806302751cec1461018d578063054d50d4146101f957806318cbafe5146102415780631f00ca74146103275780632195995c146103dc57806338ed17391461045a57610188565b3661018857336001600160a01b037f00000000000000000000000048b62137edfa95a428d35c09e44256a739f6b557161461018657fe5b005b600080fd5b34801561019957600080fd5b506101e0600480360360c08110156101b057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610c97565b6040805192835260208301919091528051918290030190f35b34801561020557600080fd5b5061022f6004803603606081101561021c57600080fd5b5080359060208101359060400135610db1565b60408051918252519081900360200190f35b34801561024d57600080fd5b506102d7600480360360a081101561026457600080fd5b813591602081013591810190606081016040820135600160201b81111561028a57600080fd5b82018360208201111561029c57600080fd5b803590602001918460208302840111600160201b831117156102bd57600080fd5b91935091506001600160a01b038135169060200135610dc6565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103135781810151838201526020016102fb565b505050509050019250505060405180910390f35b34801561033357600080fd5b506102d76004803603604081101561034a57600080fd5b81359190810190604081016020820135600160201b81111561036b57600080fd5b82018360208201111561037d57600080fd5b803590602001918460208302840111600160201b8311171561039e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506110f3945050505050565b3480156103e857600080fd5b506101e0600480360361016081101561040057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611129565b34801561046657600080fd5b506102d7600480360360a081101561047d57600080fd5b813591602081013591810190606081016040820135600160201b8111156104a357600080fd5b8201836020820111156104b557600080fd5b803590602001918460208302840111600160201b831117156104d657600080fd5b91935091506001600160a01b038135169060200135611223565b3480156104fc57600080fd5b506102d7600480360360a081101561051357600080fd5b813591602081013591810190606081016040820135600160201b81111561053957600080fd5b82018360208201111561054b57600080fd5b803590602001918460208302840111600160201b8311171561056c57600080fd5b91935091506001600160a01b03813516906020013561136e565b34801561059257600080fd5b5061022f60048036036101408110156105aa57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356114fa565b34801561060557600080fd5b50610186600480360360a081101561061c57600080fd5b813591602081013591810190606081016040820135600160201b81111561064257600080fd5b82018360208201111561065457600080fd5b803590602001918460208302840111600160201b8311171561067557600080fd5b91935091506001600160a01b038135169060200135611608565b34801561069b57600080fd5b50610186600480360360a08110156106b257600080fd5b813591602081013591810190606081016040820135600160201b8111156106d857600080fd5b8201836020820111156106ea57600080fd5b803590602001918460208302840111600160201b8311171561070b57600080fd5b91935091506001600160a01b03813516906020013561189d565b6102d76004803603608081101561073b57600080fd5b81359190810190604081016020820135600160201b81111561075c57600080fd5b82018360208201111561076e57600080fd5b803590602001918460208302840111600160201b8311171561078f57600080fd5b91935091506001600160a01b038135169060200135611b21565b3480156107b557600080fd5b5061022f600480360360608110156107cc57600080fd5b5080359060208101359060400135611e74565b3480156107eb57600080fd5b506102d7600480360360a081101561080257600080fd5b813591602081013591810190606081016040820135600160201b81111561082857600080fd5b82018360208201111561083a57600080fd5b803590602001918460208302840111600160201b8311171561085b57600080fd5b91935091506001600160a01b038135169060200135611e81565b34801561088157600080fd5b5061088a611f7a565b604080516001600160a01b039092168252519081900360200190f35b3480156108b257600080fd5b5061022f600480360360608110156108c957600080fd5b5080359060208101359060400135611f9e565b3480156108e857600080fd5b5061022f600480360360c08110156108ff57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135611fab565b6101866004803603608081101561094557600080fd5b81359190810190604081016020820135600160201b81111561096657600080fd5b82018360208201111561097857600080fd5b803590602001918460208302840111600160201b8311171561099957600080fd5b91935091506001600160a01b03813516906020013561212c565b3480156109bf57600080fd5b506101e0600480360360e08110156109d657600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c001356124f5565b348015610a1c57600080fd5b5061088a612739565b348015610a3157600080fd5b506102d760048036036040811015610a4857600080fd5b81359190810190604081016020820135600160201b811115610a6957600080fd5b820183602082011115610a7b57600080fd5b803590602001918460208302840111600160201b83111715610a9c57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061275d945050505050565b348015610ae657600080fd5b506101e06004803603610140811015610afe57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e0820135169061010081013590610120013561278a565b348015610b5957600080fd5b50610baf6004803603610100811015610b7157600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e0013561289e565b60408051938452602084019290925282820152519081900360600190f35b610baf600480360360c0811015610be357600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a001356129da565b6102d760048036036080811015610c2957600080fd5b81359190810190604081016020820135600160201b811115610c4a57600080fd5b820183602082011115610c5c57600080fd5b803590602001918460208302840111600160201b83111715610c7d57600080fd5b91935091506001600160a01b038135169060200135612c7f565b6000808242811015610cde576040805162461bcd60e51b815260206004820152601860248201526000805160206143fd833981519152604482015290519081900360640190fd5b610d0d897f00000000000000000000000048b62137edfa95a428d35c09e44256a739f6b5578a8a8a308a6124f5565b9093509150610d1d898685613001565b7f00000000000000000000000048b62137edfa95a428d35c09e44256a739f6b5576001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610d8357600080fd5b505af1158015610d97573d6000803e3d6000fd5b50505050610da5858361316b565b50965096945050505050565b6000610dbe848484613263565b949350505050565b60608142811015610e0c576040805162461bcd60e51b815260206004820152601860248201526000805160206143fd833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000048b62137edfa95a428d35c09e44256a739f6b5571686866000198101818110610e4657fe5b905060200201356001600160a01b03166001600160a01b031614610e9f576040805162461bcd60e51b815260206004820152601d602482015260008051602061450c833981519152604482015290519081900360640190fd5b610efd7f00000000000000000000000040a15788078b92a67f3eaa914fca3937368f7f818988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061335392505050565b91508682600184510381518110610f1057fe5b60200260200101511015610f555760405162461bcd60e51b815260040180806020018281038252602b81526020018061446a602b913960400191505060405180910390fd5b610ff386866000818110610f6557fe5b905060200201356001600160a01b031633610fd97f00000000000000000000000040a15788078b92a67f3eaa914fca3937368f7f818a8a6000818110610fa757fe5b905060200201356001600160a01b03168b8b6001818110610fc457fe5b905060200201356001600160a01b031661349f565b85600081518110610fe657fe5b602002602001015161355f565b611032828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506136bc915050565b7f00000000000000000000000048b62137edfa95a428d35c09e44256a739f6b5576001600160a01b0316632e1a7d4d8360018551038151811061107157fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156110af57600080fd5b505af11580156110c3573d6000803e3d6000fd5b505050506110e884836001855103815181106110db57fe5b602002602001015161316b565b509695505050505050565b60606111207f00000000000000000000000040a15788078b92a67f3eaa914fca3937368f7f818484613902565b90505b92915050565b60008060006111597f00000000000000000000000040a15788078b92a67f3eaa914fca3937368f7f818f8f61349f565b9050600087611168578c61116c565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156111e257600080fd5b505af11580156111f6573d6000803e3d6000fd5b505050506112098f8f8f8f8f8f8f6124f5565b809450819550505050509b509b9950505050505050505050565b60608142811015611269576040805162461bcd60e51b815260206004820152601860248201526000805160206143fd833981519152604482015290519081900360640190fd5b6112c77f00000000000000000000000040a15788078b92a67f3eaa914fca3937368f7f818988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061335392505050565b915086826001845103815181106112da57fe5b6020026020010151101561131f5760405162461bcd60e51b815260040180806020018281038252602b81526020018061446a602b913960400191505060405180910390fd5b61132f86866000818110610f6557fe5b6110e8828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506136bc915050565b606081428110156113b4576040805162461bcd60e51b815260206004820152601860248201526000805160206143fd833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000048b62137edfa95a428d35c09e44256a739f6b55716868660001981018181106113ee57fe5b905060200201356001600160a01b03166001600160a01b031614611447576040805162461bcd60e51b815260206004820152601d602482015260008051602061450c833981519152604482015290519081900360640190fd5b6114a57f00000000000000000000000040a15788078b92a67f3eaa914fca3937368f7f818988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061390292505050565b915086826000815181106114b557fe5b60200260200101511115610f555760405162461bcd60e51b815260040180806020018281038252602781526020018061452c6027913960400191505060405180910390fd5b6000806115487f00000000000000000000000040a15788078b92a67f3eaa914fca3937368f7f818d7f00000000000000000000000048b62137edfa95a428d35c09e44256a739f6b55761349f565b9050600086611557578b61155b565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156115d157600080fd5b505af11580156115e5573d6000803e3d6000fd5b505050506115f78d8d8d8d8d8d611fab565b9d9c50505050505050505050505050565b804281101561164c576040805162461bcd60e51b815260206004820152601860248201526000805160206143fd833981519152604482015290519081900360640190fd5b6116c18585600081811061165c57fe5b905060200201356001600160a01b0316336116bb7f00000000000000000000000040a15788078b92a67f3eaa914fca3937368f7f818989600081811061169e57fe5b905060200201356001600160a01b03168a8a6001818110610fc457fe5b8a61355f565b6000858560001981018181106116d357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561173857600080fd5b505afa15801561174c573d6000803e3d6000fd5b505050506040513d602081101561176257600080fd5b505160408051602088810282810182019093528882529293506117a4929091899189918291850190849080828437600092019190915250889250613a3a915050565b8661185682888860001981018181106117b957fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b505afa158015611832573d6000803e3d6000fd5b505050506040513d602081101561184857600080fd5b50519063ffffffff613d4516565b10156118935760405162461bcd60e51b815260040180806020018281038252602b81526020018061446a602b913960400191505060405180910390fd5b5050505050505050565b80428110156118e1576040805162461bcd60e51b815260206004820152601860248201526000805160206143fd833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000048b62137edfa95a428d35c09e44256a739f6b557168585600019810181811061191b57fe5b905060200201356001600160a01b03166001600160a01b031614611974576040805162461bcd60e51b815260206004820152601d602482015260008051602061450c833981519152604482015290519081900360640190fd5b6119848585600081811061165c57fe5b6119c2858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613a3a915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f00000000000000000000000048b62137edfa95a428d35c09e44256a739f6b55716916370a0823191602480820192602092909190829003018186803b158015611a2c57600080fd5b505afa158015611a40573d6000803e3d6000fd5b505050506040513d6020811015611a5657600080fd5b5051905086811015611a995760405162461bcd60e51b815260040180806020018281038252602b81526020018061446a602b913960400191505060405180910390fd5b7f00000000000000000000000048b62137edfa95a428d35c09e44256a739f6b5576001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611aff57600080fd5b505af1158015611b13573d6000803e3d6000fd5b50505050611893848261316b565b60608142811015611b67576040805162461bcd60e51b815260206004820152601860248201526000805160206143fd833981519152604482015290519081900360640190fd5b7f00000000000000000000000048b62137edfa95a428d35c09e44256a739f6b5576001600160a01b031686866000818110611b9e57fe5b905060200201356001600160a01b03166001600160a01b031614611bf7576040805162461bcd60e51b815260206004820152601d602482015260008051602061450c833981519152604482015290519081900360640190fd5b611c557f00000000000000000000000040a15788078b92a67f3eaa914fca3937368f7f813488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061335392505050565b91508682600184510381518110611c6857fe5b60200260200101511015611cad5760405162461bcd60e51b815260040180806020018281038252602b81526020018061446a602b913960400191505060405180910390fd5b7f00000000000000000000000048b62137edfa95a428d35c09e44256a739f6b5576001600160a01b031663d0e30db083600081518110611ce957fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d1c57600080fd5b505af1158015611d30573d6000803e3d6000fd5b50505050507f00000000000000000000000048b62137edfa95a428d35c09e44256a739f6b5576001600160a01b031663a9059cbb611d957f00000000000000000000000040a15788078b92a67f3eaa914fca3937368f7f818989600081811061169e57fe5b84600081518110611da257fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611df957600080fd5b505af1158015611e0d573d6000803e3d6000fd5b505050506040513d6020811015611e2357600080fd5b5051611e2b57fe5b611e6a828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506136bc915050565b5095945050505050565b6000610dbe848484613d95565b60608142811015611ec7576040805162461bcd60e51b815260206004820152601860248201526000805160206143fd833981519152604482015290519081900360640190fd5b611f257f00000000000000000000000040a15788078b92a67f3eaa914fca3937368f7f818988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061390292505050565b91508682600081518110611f3557fe5b6020026020010151111561131f5760405162461bcd60e51b815260040180806020018281038252602781526020018061452c6027913960400191505060405180910390fd5b7f00000000000000000000000048b62137edfa95a428d35c09e44256a739f6b55781565b6000610dbe848484613e85565b60008142811015611ff1576040805162461bcd60e51b815260206004820152601860248201526000805160206143fd833981519152604482015290519081900360640190fd5b612020887f00000000000000000000000048b62137edfa95a428d35c09e44256a739f6b55789898930896124f5565b604080516370a0823160e01b815230600482015290519194506120a492508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561207357600080fd5b505afa158015612087573d6000803e3d6000fd5b505050506040513d602081101561209d57600080fd5b5051613001565b7f00000000000000000000000048b62137edfa95a428d35c09e44256a739f6b5576001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561210a57600080fd5b505af115801561211e573d6000803e3d6000fd5b505050506110e8848361316b565b8042811015612170576040805162461bcd60e51b815260206004820152601860248201526000805160206143fd833981519152604482015290519081900360640190fd5b7f00000000000000000000000048b62137edfa95a428d35c09e44256a739f6b5576001600160a01b0316858560008181106121a757fe5b905060200201356001600160a01b03166001600160a01b031614612200576040805162461bcd60e51b815260206004820152601d602482015260008051602061450c833981519152604482015290519081900360640190fd5b60003490507f00000000000000000000000048b62137edfa95a428d35c09e44256a739f6b5576001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561226057600080fd5b505af1158015612274573d6000803e3d6000fd5b50505050507f00000000000000000000000048b62137edfa95a428d35c09e44256a739f6b5576001600160a01b031663a9059cbb6122d97f00000000000000000000000040a15788078b92a67f3eaa914fca3937368f7f818989600081811061169e57fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561232957600080fd5b505af115801561233d573d6000803e3d6000fd5b505050506040513d602081101561235357600080fd5b505161235b57fe5b60008686600019810181811061236d57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156123d257600080fd5b505afa1580156123e6573d6000803e3d6000fd5b505050506040513d60208110156123fc57600080fd5b5051604080516020898102828101820190935289825292935061243e9290918a918a918291850190849080828437600092019190915250899250613a3a915050565b876124b8828989600019810181811061245357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b10156118935760405162461bcd60e51b815260040180806020018281038252602b815260200180614576602b913960400191505060405180910390fd5b600080824281101561253c576040805162461bcd60e51b815260206004820152601860248201526000805160206143fd833981519152604482015290519081900360640190fd5b60006125697f00000000000000000000000040a15788078b92a67f3eaa914fca3937368f7f818c8c61349f565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b1580156125c457600080fd5b505af11580156125d8573d6000803e3d6000fd5b505050506040513d60208110156125ee57600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b15801561263b57600080fd5b505af115801561264f573d6000803e3d6000fd5b505050506040513d604081101561266557600080fd5b5080516020909101519092509050600061267f8e8e613f31565b509050806001600160a01b03168e6001600160a01b0316146126a25781836126a5565b82825b90975095508a8710156126e95760405162461bcd60e51b81526004018080602001828103825260268152602001806145cc6026913960400191505060405180910390fd5b898610156127285760405162461bcd60e51b81526004018080602001828103825260268152602001806144e66026913960400191505060405180910390fd5b505050505097509795505050505050565b7f00000000000000000000000040a15788078b92a67f3eaa914fca3937368f7f8181565b60606111207f00000000000000000000000040a15788078b92a67f3eaa914fca3937368f7f818484613353565b60008060006127da7f00000000000000000000000040a15788078b92a67f3eaa914fca3937368f7f818e7f00000000000000000000000048b62137edfa95a428d35c09e44256a739f6b55761349f565b90506000876127e9578c6127ed565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561286357600080fd5b505af1158015612877573d6000803e3d6000fd5b505050506128898e8e8e8e8e8e610c97565b909f909e509c50505050505050505050505050565b600080600083428110156128e7576040805162461bcd60e51b815260206004820152601860248201526000805160206143fd833981519152604482015290519081900360640190fd5b6128f58c8c8c8c8c8c61400f565b909450925060006129277f00000000000000000000000040a15788078b92a67f3eaa914fca3937368f7f818e8e61349f565b90506129358d33838861355f565b6129418c33838761355f565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561299957600080fd5b505af11580156129ad573d6000803e3d6000fd5b505050506040513d60208110156129c357600080fd5b5051949d939c50939a509198505050505050505050565b60008060008342811015612a23576040805162461bcd60e51b815260206004820152601860248201526000805160206143fd833981519152604482015290519081900360640190fd5b612a518a7f00000000000000000000000048b62137edfa95a428d35c09e44256a739f6b5578b348c8c61400f565b90945092506000612aa37f00000000000000000000000040a15788078b92a67f3eaa914fca3937368f7f818c7f00000000000000000000000048b62137edfa95a428d35c09e44256a739f6b55761349f565b9050612ab18b33838861355f565b7f00000000000000000000000048b62137edfa95a428d35c09e44256a739f6b5576001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612b0c57600080fd5b505af1158015612b20573d6000803e3d6000fd5b50505050507f00000000000000000000000048b62137edfa95a428d35c09e44256a739f6b5576001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612ba557600080fd5b505af1158015612bb9573d6000803e3d6000fd5b505050506040513d6020811015612bcf57600080fd5b5051612bd757fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612c2f57600080fd5b505af1158015612c43573d6000803e3d6000fd5b505050506040513d6020811015612c5957600080fd5b5051925034841015612c7157612c713385340361316b565b505096509650969350505050565b60608142811015612cc5576040805162461bcd60e51b815260206004820152601860248201526000805160206143fd833981519152604482015290519081900360640190fd5b7f00000000000000000000000048b62137edfa95a428d35c09e44256a739f6b5576001600160a01b031686866000818110612cfc57fe5b905060200201356001600160a01b03166001600160a01b031614612d55576040805162461bcd60e51b815260206004820152601d602482015260008051602061450c833981519152604482015290519081900360640190fd5b612db37f00000000000000000000000040a15788078b92a67f3eaa914fca3937368f7f818888888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061390292505050565b91503482600081518110612dc357fe5b60200260200101511115612e085760405162461bcd60e51b815260040180806020018281038252602781526020018061452c6027913960400191505060405180910390fd5b7f00000000000000000000000048b62137edfa95a428d35c09e44256a739f6b5576001600160a01b031663d0e30db083600081518110612e4457fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612e7757600080fd5b505af1158015612e8b573d6000803e3d6000fd5b50505050507f00000000000000000000000048b62137edfa95a428d35c09e44256a739f6b5576001600160a01b031663a9059cbb612ef07f00000000000000000000000040a15788078b92a67f3eaa914fca3937368f7f818989600081811061169e57fe5b84600081518110612efd57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612f5457600080fd5b505af1158015612f68573d6000803e3d6000fd5b505050506040513d6020811015612f7e57600080fd5b5051612f8657fe5b612fc5828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506136bc915050565b81600081518110612fd257fe5b6020026020010151341115611e6a57611e6a3383600081518110612ff257fe5b6020026020010151340361316b565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b6020831061307e5780518252601f19909201916020918201910161305f565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146130e0576040519150601f19603f3d011682016040523d82523d6000602084013e6130e5565b606091505b5091509150818015613113575080511580613113575080806020019051602081101561311057600080fd5b50515b613164576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106131b75780518252601f199092019160209182019101613198565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613219576040519150601f19603f3d011682016040523d82523d6000602084013e61321e565b606091505b505090508061325e5760405162461bcd60e51b81526004018080602001828103825260238152602001806145536023913960400191505060405180910390fd5b505050565b60008084116132a35760405162461bcd60e51b815260040180806020018281038252602b8152602001806145a1602b913960400191505060405180910390fd5b6000831180156132b35750600082115b6132ee5760405162461bcd60e51b815260040180806020018281038252602881526020018061441d6028913960400191505060405180910390fd5b6000613302856103e563ffffffff61428316565b90506000613316828563ffffffff61428316565b9050600061333c83613330886103e863ffffffff61428316565b9063ffffffff6142e616565b905080828161334757fe5b04979650505050505050565b60606002825110156133ac576040805162461bcd60e51b815260206004820152601e60248201527f4170654669537761704c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff811180156133c457600080fd5b506040519080825280602002602001820160405280156133ee578160200160208202803683370190505b50905082816000815181106133ff57fe5b60200260200101818152505060005b6001835103811015613497576000806134518786858151811061342d57fe5b602002602001015187866001018151811061344457fe5b6020026020010151614335565b9150915061347384848151811061346457fe5b60200260200101518383613263565b84846001018151811061348257fe5b6020908102919091010152505060010161340e565b509392505050565b60008060006134ae8585613f31565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527f28665df95fe68139cd8fb06865120c345dc21c3318ffc6724b3bcda329ccf5a4609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106135e45780518252601f1990920191602091820191016135c5565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613646576040519150601f19603f3d011682016040523d82523d6000602084013e61364b565b606091505b5091509150818015613679575080511580613679575080806020019051602081101561367657600080fd5b50515b6136b45760405162461bcd60e51b81526004018080602001828103825260248152602001806145f26024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156138fc576000808483815181106136da57fe5b60200260200101518584600101815181106136f157fe5b60200260200101519150915060006137098383613f31565b509050600087856001018151811061371d57fe5b60200260200101519050600080836001600160a01b0316866001600160a01b03161461374b5782600061374f565b6000835b91509150600060028a5103881061376657886137a7565b6137a77f00000000000000000000000040a15788078b92a67f3eaa914fca3937368f7f81878c8b6002018151811061379a57fe5b602002602001015161349f565b90506137d47f00000000000000000000000040a15788078b92a67f3eaa914fca3937368f7f81888861349f565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015613811576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561388257818101518382015260200161386a565b50505050905090810190601f1680156138af5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156138d157600080fd5b505af11580156138e5573d6000803e3d6000fd5b5050600190990198506136bf975050505050505050565b50505050565b606060028251101561395b576040805162461bcd60e51b815260206004820152601e60248201527f4170654669537761704c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561397357600080fd5b5060405190808252806020026020018201604052801561399d578160200160208202803683370190505b50905082816001835103815181106139b157fe5b60209081029190910101528151600019015b8015613497576000806139f3878660018603815181106139df57fe5b602002602001015187868151811061344457fe5b91509150613a15848481518110613a0657fe5b60200260200101518383613d95565b846001850381518110613a2457fe5b60209081029190910101525050600019016139c3565b60005b600183510381101561325e57600080848381518110613a5857fe5b6020026020010151858460010181518110613a6f57fe5b6020026020010151915091506000613a878383613f31565b5090506000613ab77f00000000000000000000000040a15788078b92a67f3eaa914fca3937368f7f81858561349f565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613af857600080fd5b505afa158015613b0c573d6000803e3d6000fd5b505050506040513d6060811015613b2257600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614613b58578284613b5b565b83835b91509150613bb9828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b9550613bc6868383613263565b945050505050600080856001600160a01b0316886001600160a01b031614613bf057826000613bf4565b6000835b91509150600060028c51038a10613c0b578a613c3f565b613c3f7f00000000000000000000000040a15788078b92a67f3eaa914fca3937368f7f81898e8d6002018151811061379a57fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613cc9578181015183820152602001613cb1565b50505050905090810190601f168015613cf65780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613d1857600080fd5b505af1158015613d2c573d6000803e3d6000fd5b50506001909b019a50613a3d9950505050505050505050565b80820382811115611123576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6000808411613dd55760405162461bcd60e51b815260040180806020018281038252602c8152602001806144ba602c913960400191505060405180910390fd5b600083118015613de55750600082115b613e205760405162461bcd60e51b815260040180806020018281038252602881526020018061441d6028913960400191505060405180910390fd5b6000613e446103e8613e38868863ffffffff61428316565b9063ffffffff61428316565b90506000613e5e6103e5613e38868963ffffffff613d4516565b9050613e7b6001828481613e6e57fe5b049063ffffffff6142e616565b9695505050505050565b6000808411613ec55760405162461bcd60e51b81526004018080602001828103825260258152602001806144956025913960400191505060405180910390fd5b600083118015613ed55750600082115b613f105760405162461bcd60e51b815260040180806020018281038252602881526020018061441d6028913960400191505060405180910390fd5b82613f21858463ffffffff61428316565b81613f2857fe5b04949350505050565b600080826001600160a01b0316846001600160a01b03161415613f855760405162461bcd60e51b81526004018080602001828103825260258152602001806144456025913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610613fa5578284613fa8565b83835b90925090506001600160a01b038216614008576040805162461bcd60e51b815260206004820152601e60248201527f4170654669537761704c6962726172793a205a45524f5f414444524553530000604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000040a15788078b92a67f3eaa914fca3937368f7f819092169163e6a4390591604480820192602092909190829003018186803b15801561408957600080fd5b505afa15801561409d573d6000803e3d6000fd5b505050506040513d60208110156140b357600080fd5b50516001600160a01b0316141561416657604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000040a15788078b92a67f3eaa914fca3937368f7f819092169163c9c65396916044808201926020929091908290030181600087803b15801561413957600080fd5b505af115801561414d573d6000803e3d6000fd5b505050506040513d602081101561416357600080fd5b50505b6000806141947f00000000000000000000000040a15788078b92a67f3eaa914fca3937368f7f818b8b614335565b915091508160001480156141a6575080155b156141b657879350869250614276565b60006141c3898484613e85565b9050878111614216578581101561420b5760405162461bcd60e51b81526004018080602001828103825260268152602001806144e66026913960400191505060405180910390fd5b889450925082614274565b6000614223898486613e85565b90508981111561422f57fe5b8781101561426e5760405162461bcd60e51b81526004018080602001828103825260268152602001806145cc6026913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b600081158061429e5750508082028282828161429b57fe5b04145b611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b60008060006143448585613f31565b50905060008061435588888861349f565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561438d57600080fd5b505afa1580156143a1573d6000803e3d6000fd5b505050506040513d60608110156143b757600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b03878116908416146143ea5780826143ed565b81815b9099909850965050505050505056fe417065466953776170526f757465723a204558504952454400000000000000004170654669537761704c6962726172793a20494e53554646494349454e545f4c49515549444954594170654669537761704c6962726172793a204944454e544943414c5f414444524553534553417065466953776170526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e544170654669537761704c6962726172793a20494e53554646494349454e545f414d4f554e544170654669537761704c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e54417065466953776170526f757465723a20494e53554646494349454e545f425f414d4f554e54417065466953776170526f757465723a20494e56414c49445f50415448000000417065466953776170526f757465723a204558434553534956455f494e5055545f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544556e69737761705632526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e544170654669537761704c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e54417065466953776170526f757465723a20494e53554646494349454e545f415f414d4f554e545472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544a2646970667358221220814c5d30f503082ea03eec9b685fa1535f468a5df65e3e3c7222fea4e41fc76b64736f6c63430006060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000040a15788078b92a67f3eaa914fca3937368f7f8100000000000000000000000048b62137edfa95a428d35c09e44256a739f6b557
-----Decoded View---------------
Arg [0] : _factory (address): 0x40a15788078B92A67f3EAa914fCa3937368f7f81
Arg [1] : _WETH (address): 0x48b62137EdfA95a428D35C09E44256a739F6B557
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000040a15788078b92a67f3eaa914fca3937368f7f81
Arg [1] : 00000000000000000000000048b62137edfa95a428d35c09e44256a739f6b557
Deployed Bytecode Sourcemap
9839:21327:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10321:10;-1:-1:-1;;;;;10335:4:0;10321:18;;10314:26;;;;9839:21327;;12:1:-1;9;2:12;15159:723:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15159:723:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;15159:723:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;30192:246;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30192:246:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;30192:246:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;23709:978;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23709:978:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;23709:978:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;23709:978:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;23709:978:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;23709:978:0;;-1:-1:-1;23709:978:0;-1:-1:-1;;;;;;23709:978: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;23709:978:0;;;;;;;;;;;;;;;;;30935:228;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30935:228:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;30935:228:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;30935:228:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30935:228:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;30935:228:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;30935:228:0;;-1:-1:-1;30935:228:0;;-1:-1:-1;;;;;30935:228:0:i;15890:908::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15890:908:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;15890:908:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;20385:754::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20385:754:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;20385:754:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;20385:754:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;20385:754:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;20385:754:0;;-1:-1:-1;20385:754:0;-1:-1:-1;;;;;;20385:754:0;;;;;;;;:::i;22745:956::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22745:956:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;22745:956:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;22745:956:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;22745:956:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;22745:956:0;;-1:-1:-1;22745:956:0;-1:-1:-1;;;;;;22745:956:0;;;;;;;;:::i;18530:912::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18530:912:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;18530:912:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;27364:770::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27364:770:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27364:770:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;27364:770:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27364:770:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;27364:770:0;;-1:-1:-1;27364:770:0;-1:-1:-1;;;;;;27364:770:0;;;;;;;;:::i;29040:878::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29040:878:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;29040:878:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;29040:878:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;29040:878:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;29040:878:0;;-1:-1:-1;29040:878:0;-1:-1:-1;;;;;;29040:878:0;;;;;;;;:::i;21887:850::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;21887:850:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;21887:850:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;21887:850:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;21887:850:0;;-1:-1:-1;21887:850:0;-1:-1:-1;;;;;;21887:850:0;;;;;;;;:::i;30446:245::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30446:245:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;30446:245:0;;;;;;;;;;;;:::i;21147:732::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21147:732:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;21147:732:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;21147:732:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;21147:732:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;21147:732:0;;-1:-1:-1;21147:732:0;-1:-1:-1;;;;;;21147:732:0;;;;;;;;:::i;9975:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;9975:38:0;;;:::i;:::-;;;;-1:-1:-1;;;;;9975:38:0;;;;;;;;;;;;;;29962:222;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29962:222:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;29962:222:0;;;;;;;;;;;;:::i;17772:750::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17772:750:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;17772:750:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28142:890::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28142:890:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;28142:890:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28142:890:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;28142:890:0;;-1:-1:-1;28142:890:0;-1:-1:-1;;;;;;28142:890:0;;;;;;;;:::i;14135:1016::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14135:1016:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;14135:1016:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;9927:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;9927:41:0;;;:::i;30699:228::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30699:228:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;30699:228:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;30699:228:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30699:228:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;30699:228:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;30699:228:0;;-1:-1:-1;30699:228:0;;-1:-1:-1;;;;;30699:228:0:i;16806:887::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16806:887:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;16806:887:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;12161:877::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12161:877:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;12161:877:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;13046:1046;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;13046:1046:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;24695:976::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;24695:976:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;24695:976:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;24695:976:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;24695:976:0;;-1:-1:-1;24695:976:0;-1:-1:-1;;;;;;24695:976:0;;;;;;;;:::i;15159:723::-;15441:16;15459:14;15413:8;10084:15;10072:8;:27;;10064:64;;;;;-1:-1:-1;;;10064:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10064:64:0;;;;;;;;;;;;;;;15518:196:::1;15548:5;15568:4;15587:9;15611:14;15640:12;15675:4;15695:8;15518:15;:196::i;:::-;15491:223:::0;;-1:-1:-1;15491:223:0;-1:-1:-1;15725:51:0::1;15753:5:::0;15760:2;15491:223;15725:27:::1;:51::i;:::-;15793:4;-1:-1:-1::0;;;;;15787:20:0::1;;15808:9;15787:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;15787:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;15787:31:0;;;;15829:45;15860:2;15864:9;15829:30;:45::i;:::-;15159:723:::0;;;;;;;;;;:::o;30192:246::-;30334:14;30368:62;30398:8;30408:9;30419:10;30368:29;:62::i;:::-;30361:69;30192:246;-1:-1:-1;;;;30192:246:0:o;23709:978::-;23975:21;23947:8;10084:15;10072:8;:27;;10064:64;;;;;-1:-1:-1;;;10064:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10064:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;24047:4:0::1;24022:29;:4:::0;;-1:-1:-1;;24027:15:0;;24022:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;24022:21:0::1;-1:-1:-1::0;;;;;24022:29:0::1;;24014:71;;;::::0;;-1:-1:-1;;;24014:71:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;24014:71:0;;;;;;;;;;;;;::::1;;24106:55;24137:7;24146:8;24156:4;;24106:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;24106:30:0::1;::::0;-1:-1:-1;;;24106:55:0:i:1;:::-;24096:65;;24225:12;24194:7;24219:1;24202:7;:14;:18;24194:27;;;;;;;;;;;;;;:43;;24172:136;;;;-1:-1:-1::0;;;24172:136:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24319:180;24365:4;;24370:1;24365:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;24365:7:0::1;24387:10;24412:51;24437:7;24446:4;;24451:1;24446:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;24446:7:0::1;24455:4;;24460:1;24455:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;24455:7:0::1;24412:24;:51::i;:::-;24478:7;24486:1;24478:10;;;;;;;;;;;;;;24319:31;:180::i;:::-;24510:35;24516:7;24525:4;;24510:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;24539:4:0::1;::::0;-1:-1:-1;24510:5:0::1;::::0;-1:-1:-1;;24510:35:0:i:1;:::-;24562:4;-1:-1:-1::0;;;;;24556:20:0::1;;24577:7;24602:1;24585:7;:14;:18;24577:27;;;;;;;;;;;;;;24556:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;24556:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24556:49:0;;;;24616:63;24647:2;24651:7;24676:1;24659:7;:14;:18;24651:27;;;;;;;;;;;;;;24616:30;:63::i;:::-;23709:978:::0;;;;;;;;;:::o;30935:228::-;31059:21;31100:55;31130:7;31139:9;31150:4;31100:29;:55::i;:::-;31093:62;;30935:228;;;;;:::o;15890:908::-;16223:12;16237;16262;16277:49;16302:7;16311:6;16319;16277:24;:49::i;:::-;16262:64;;16337:10;16350;:33;;16374:9;16350:33;;;-1:-1:-1;;16350:33:0;16394:182;;;-1:-1:-1;;;16394:182:0;;16436:10;16394:182;;;;16469:4;16394:182;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16337:46;;-1:-1:-1;;;;;;16394:27:0;;;;;:182;;;;;-1:-1:-1;;16394:182:0;;;;;;;;-1:-1:-1;16394:27:0;:182;;;2:2:-1;;;;27:1;24;17:12;2:2;16394:182:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16394:182:0;;;;16608;16638:6;16659;16680:9;16704:10;16729;16754:2;16771:8;16608:15;:182::i;:::-;16587:203;;;;;;;;15890:908;;;;;;;;;;;;;;;;:::o;20385:754::-;20654:21;20626:8;10084:15;10072:8;:27;;10064:64;;;;;-1:-1:-1;;;10064:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10064:64:0;;;;;;;;;;;;;;;20703:55:::1;20734:7;20743:8;20753:4;;20703:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;20703:30:0::1;::::0;-1:-1:-1;;;20703:55:0:i:1;:::-;20693:65;;20822:12;20791:7;20816:1;20799:7;:14;:18;20791:27;;;;;;;;;;;;;;:43;;20769:136;;;;-1:-1:-1::0;;;20769:136:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20916:180;20962:4;;20967:1;20962:7;;;;;;20916:180;21107:24;21113:7;21122:4;;21107:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;21128:2:0;;-1:-1:-1;21107:5:0::1;::::0;-1:-1:-1;;21107:24:0:i:1;22745:956::-:0;23011:21;22983:8;10084:15;10072:8;:27;;10064:64;;;;;-1:-1:-1;;;10064:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10064:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;23083:4:0::1;23058:29;:4:::0;;-1:-1:-1;;23063:15:0;;23058:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;23058:21:0::1;-1:-1:-1::0;;;;;23058:29:0::1;;23050:71;;;::::0;;-1:-1:-1;;;23050:71:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;23050:71:0;;;;;;;;;;;;;::::1;;23142:55;23172:7;23181:9;23192:4;;23142:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;23142:29:0::1;::::0;-1:-1:-1;;;23142:55:0:i:1;:::-;23132:65;;23244:11;23230:7;23238:1;23230:10;;;;;;;;;;;;;;:25;;23208:114;;;;-1:-1:-1::0;;;23208:114:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18530:912:::0;18875:14;18902:12;18917:46;18942:7;18951:5;18958:4;18917:24;:46::i;:::-;18902:61;;18974:10;18987;:33;;19011:9;18987:33;;;-1:-1:-1;;18987:33:0;19031:182;;;-1:-1:-1;;;19031:182:0;;19073:10;19031:182;;;;19106:4;19031:182;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18974:46;;-1:-1:-1;;;;;;19031:27:0;;;;;:182;;;;;-1:-1:-1;;19031:182:0;;;;;;;;-1:-1:-1;19031:27:0;:182;;;2:2:-1;;;;27:1;24;17:12;2:2;19031:182:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19031:182:0;;;;19236:198;19298:5;19318:9;19342:14;19371:12;19398:2;19415:8;19236:47;:198::i;:::-;19224:210;18530:912;-1:-1:-1;;;;;;;;;;;;;18530:912:0:o;27364:770::-;27598:8;10084:15;10072:8;:27;;10064:64;;;;;-1:-1:-1;;;10064:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10064:64:0;;;;;;;;;;;;;;;27619:178:::1;27665:4;;27670:1;27665:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;27665:7:0::1;27687:10;27712:51;27737:7;27746:4;;27751:1;27746:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;27746:7:0::1;27755:4;;27760:1;27755:7;;;;;;27712:51;27778:8;27619:31;:178::i;:::-;27808:18;27836:4:::0;;-1:-1:-1;;27841:15:0;;27836:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27836:21:0::1;-1:-1:-1::0;;;;;27829:39:0::1;;27869:2;27829:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;27829:43:0::1;-1:-1:-1::0;;;;;27829:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27829:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27829:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;27829:43:0;27883:44:::1;::::0;;27829:43:::1;27883:44:::0;;::::1;::::0;;;;;;;;;;;27829:43;;-1:-1:-1;27883:44:0::1;::::0;;;27918:4;;;;;;27883:44;::::1;::::0;27918:4;;27883:44;27918:4;27883:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27924:2:0;;-1:-1:-1;27883:34:0::1;::::0;-1:-1:-1;;27883:44:0:i:1;:::-;28043:12:::0;27960:62:::1;28008:13:::0;27967:4;;-1:-1:-1;;27972:15:0;;27967:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27967:21:0::1;-1:-1:-1::0;;;;;27960:39:0::1;;28000:2;27960:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;27960:43:0::1;-1:-1:-1::0;;;;;27960:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27960:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27960:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;27960:43:0;;:62:::1;:47;:62;:::i;:::-;:95;;27938:188;;;;-1:-1:-1::0;;;27938:188:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10139:1;27364:770:::0;;;;;;;:::o;29040:878::-;29271:8;10084:15;10072:8;:27;;10064:64;;;;;-1:-1:-1;;;10064:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10064:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;29325:4:0::1;29300:29;:4:::0;;-1:-1:-1;;29305:15:0;;29300:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;29300:21:0::1;-1:-1:-1::0;;;;;29300:29:0::1;;29292:71;;;::::0;;-1:-1:-1;;;29292:71:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;29292:71:0;;;;;;;;;;;;;::::1;;29374:178;29420:4;;29425:1;29420:7;;;;;;29374:178;29563:55;29598:4;;29563:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29612:4:0::1;::::0;-1:-1:-1;29563:34:0::1;::::0;-1:-1:-1;;29563:55:0:i:1;:::-;29646:37;::::0;;-1:-1:-1;;;29646:37:0;;29677:4:::1;29646:37;::::0;::::1;::::0;;;29629:14:::1;::::0;-1:-1:-1;;;;;29653:4:0::1;29646:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;29646:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29646:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;29646:37:0;;-1:-1:-1;29716:25:0;;::::1;;29694:118;;;;-1:-1:-1::0;;;29694:118:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29829:4;-1:-1:-1::0;;;;;29823:20:0::1;;29844:9;29823:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29823:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29823:31:0;;;;29865:45;29896:2;29900:9;29865:30;:45::i;21887:850::-:0;22146:21;22118:8;10084:15;10072:8;:27;;10064:64;;;;;-1:-1:-1;;;10064:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10064:64:0;;;;;;;;;;;;;;;22204:4:::1;-1:-1:-1::0;;;;;22193:15:0::1;:4;;22198:1;22193:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;22193:7:0::1;-1:-1:-1::0;;;;;22193:15:0::1;;22185:57;;;::::0;;-1:-1:-1;;;22185:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;22185:57:0;;;;;;;;;;;;;::::1;;22263:56;22294:7;22303:9;22314:4;;22263:56;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;22263:30:0::1;::::0;-1:-1:-1;;;22263:56:0:i:1;:::-;22253:66;;22383:12;22352:7;22377:1;22360:7;:14;:18;22352:27;;;;;;;;;;;;;;:43;;22330:136;;;;-1:-1:-1::0;;;22330:136:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22483:4;-1:-1:-1::0;;;;;22477:19:0::1;;22504:7;22512:1;22504:10;;;;;;;;;;;;;;22477:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;22477:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22477:40:0;;;;;22555:4;-1:-1:-1::0;;;;;22549:20:0::1;;22588:51;22613:7;22622:4;;22627:1;22622:7;;;;;;22588:51;22658:7;22666:1;22658:10;;;;;;;;;;;;;;22549:134;;;;;;;;;;;;;-1:-1:-1::0;;;;;22549:134:0::1;-1:-1:-1::0;;;;;22549:134:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;22549:134:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22549:134:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;22549:134:0;22528:166:::1;;;;22705:24;22711:7;22720:4;;22705:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;22726:2:0;;-1:-1:-1;22705:5:0::1;::::0;-1:-1:-1;;22705:24:0:i:1;:::-;21887:850:::0;;;;;;;;:::o;30446:245::-;30588:13;30621:62;30650:9;30661;30672:10;30621:28;:62::i;21147:732::-;21416:21;21388:8;10084:15;10072:8;:27;;10064:64;;;;;-1:-1:-1;;;10064:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10064:64:0;;;;;;;;;;;;;;;21465:55:::1;21495:7;21504:9;21515:4;;21465:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;21465:29:0::1;::::0;-1:-1:-1;;;21465:55:0:i:1;:::-;21455:65;;21567:11;21553:7;21561:1;21553:10;;;;;;;;;;;;;;:25;;21531:114;;;;-1:-1:-1::0;;;21531:114:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9975:38:::0;;;:::o;29962:222::-;30093:12;30125:51;30148:7;30157:8;30167;30125:22;:51::i;17772:750::-;18038:14;18019:8;10084:15;10072:8;:27;;10064:64;;;;;-1:-1:-1;;;10064:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10064:64:0;;;;;;;;;;;;;;;18081:196:::1;18111:5;18131:4;18150:9;18174:14;18203:12;18238:4;18258:8;18081:15;:196::i;:::-;18367:38;::::0;;-1:-1:-1;;;18367:38:0;;18399:4:::1;18367:38;::::0;::::1;::::0;;;18065:212;;-1:-1:-1;18288:128:0::1;::::0;-1:-1:-1;18330:5:0;;18350:2;;-1:-1:-1;;;;;18367:23:0;::::1;::::0;::::1;::::0;:38;;;;;::::1;::::0;;;;;;;;;:23;:38;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;18367:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18367:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;18367:38:0;18288:27:::1;:128::i;:::-;18433:4;-1:-1:-1::0;;;;;18427:20:0::1;;18448:9;18427:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18427:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18427:31:0;;;;18469:45;18500:2;18504:9;18469:30;:45::i;28142:890::-:0;28357:8;10084:15;10072:8;:27;;10064:64;;;;;-1:-1:-1;;;10064:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10064:64:0;;;;;;;;;;;;;;;28397:4:::1;-1:-1:-1::0;;;;;28386:15:0::1;:4;;28391:1;28386:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28386:7:0::1;-1:-1:-1::0;;;;;28386:15:0::1;;28378:57;;;::::0;;-1:-1:-1;;;28378:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;28378:57:0;;;;;;;;;;;;;::::1;;28446:13;28462:9;28446:25;;28488:4;-1:-1:-1::0;;;;;28482:19:0::1;;28509:8;28482:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28482:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28482:38:0;;;;;28558:4;-1:-1:-1::0;;;;;28552:20:0::1;;28591:51;28616:7;28625:4;;28630:1;28625:7;;;;;;28591:51;28661:8;28552:132;;;;;;;;;;;;;-1:-1:-1::0;;;;;28552:132:0::1;-1:-1:-1::0;;;;;28552:132:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28552:132:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28552:132:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;28552:132:0;28531:164:::1;;;;28706:18;28734:4:::0;;-1:-1:-1;;28739:15:0;;28734:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;28734:21:0::1;-1:-1:-1::0;;;;;28727:39:0::1;;28767:2;28727:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;28727:43:0::1;-1:-1:-1::0;;;;;28727:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28727:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28727:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;28727:43:0;28781:44:::1;::::0;;28727:43:::1;28781:44:::0;;::::1;::::0;;;;;;;;;;;28727:43;;-1:-1:-1;28781:44:0::1;::::0;;;28816:4;;;;;;28781:44;::::1;::::0;28816:4;;28781:44;28816:4;28781:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28822:2:0;;-1:-1:-1;28781:34:0::1;::::0;-1:-1:-1;;28781:44:0:i:1;:::-;28941:12:::0;28858:62:::1;28906:13:::0;28865:4;;-1:-1:-1;;28870:15:0;;28865:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;28865:21:0::1;-1:-1:-1::0;;;;;28858:39:0::1;;28898:2;28858:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;28858:43:0::1;-1:-1:-1::0;;;;;28858:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;28858:62:0;:95;;28836:188;;;;-1:-1:-1::0;;;28836:188:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14135:1016:::0;14434:12;14448;14406:8;10084:15;10072:8;:27;;10064:64;;;;;-1:-1:-1;;;10064:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10064:64:0;;;;;;;;;;;;;;;14478:12:::1;14493:49;14518:7;14527:6;14535;14493:24;:49::i;:::-;14553:62;::::0;;-1:-1:-1;;;14553:62:0;;14587:10:::1;14553:62;::::0;::::1;::::0;-1:-1:-1;;;;;14553:33:0;::::1;:62:::0;;;;;;;;;;;;;;14478:64;;-1:-1:-1;14553:33:0;;::::1;::::0;:62;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;14553:33:0;:62;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;14553:62:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;14553:62:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;14683:29:0::1;::::0;;-1:-1:-1;;;14683:29:0;;-1:-1:-1;;;;;14683:29:0;;::::1;;::::0;::::1;::::0;;;14653:12:::1;::::0;;;14683:25;;::::1;::::0;::::1;::::0;:29;;;;;;;;;;;14653:12;14683:25;:29;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;14683:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;14683:29:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;14683:29:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;14683:29:0;-1:-1:-1;14724:14:0::1;14744:43;14772:6:::0;14780;14744:27:::1;:43::i;:::-;14723:64;;;14829:6;-1:-1:-1::0;;;;;14819:16:0::1;:6;-1:-1:-1::0;;;;;14819:16:0::1;;:84;;14886:7;14895;14819:84;;;14852:7;14861;14819:84;14798:105:::0;;-1:-1:-1;14798:105:0;-1:-1:-1;14936:21:0;;::::1;;14914:109;;;;-1:-1:-1::0;;;14914:109:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15067:10;15056:7;:21;;15034:109;;;;-1:-1:-1::0;;;15034:109:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10139:1;;;;14135:1016:::0;;;;;;;;;;;:::o;9927:41::-;;;:::o;30699:228::-;30823:21;30864:55;30895:7;30904:8;30914:4;30864:30;:55::i;16806:887::-;17122:16;17140:14;17167:12;17182:46;17207:7;17216:5;17223:4;17182:24;:46::i;:::-;17167:61;;17239:10;17252;:33;;17276:9;17252:33;;;-1:-1:-1;;17252:33:0;17296:182;;;-1:-1:-1;;;17296:182:0;;17338:10;17296:182;;;;17371:4;17296:182;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17239:46;;-1:-1:-1;;;;;;17296:27:0;;;;;:182;;;;;-1:-1:-1;;17296:182:0;;;;;;;;-1:-1:-1;17296:27:0;:182;;;2:2:-1;;;;27:1;24;17:12;2:2;17296:182:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17296:182:0;;;;17516:169;17549:5;17569:9;17593:14;17622:12;17649:2;17666:8;17516:18;:169::i;:::-;17489:196;;;;-1:-1:-1;16806:887:0;-1:-1:-1;;;;;;;;;;;;;16806:887:0:o;12161:877::-;12494:12;12508;12522:14;12466:8;10084:15;10072:8;:27;;10064:64;;;;;-1:-1:-1;;;10064:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10064:64:0;;;;;;;;;;;;;;;12575:174:::1;12603:6;12624;12645:14;12674;12703:10;12728;12575:13;:174::i;:::-;12554:195:::0;;-1:-1:-1;12554:195:0;-1:-1:-1;12760:12:0::1;12775:49;12800:7;12809:6:::0;12817;12775:24:::1;:49::i;:::-;12760:64;;12835:66;12867:6;12875:10;12887:4;12893:7;12835:31;:66::i;:::-;12912;12944:6;12952:10;12964:4;12970:7;12912:31;:66::i;:::-;13016:4;-1:-1:-1::0;;;;;13001:25:0::1;;13027:2;13001:29;;;;;;;;;;;;;-1:-1:-1::0;;;;;13001:29:0::1;-1:-1:-1::0;;;;;13001:29:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;13001:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;13001:29:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;13001:29:0;12161:877;;;;-1:-1:-1;13001:29:0;;-1:-1:-1;12161:877:0;;-1:-1:-1;;;;;;;;;12161:877:0:o;13046:1046::-;13353:16;13371:14;13387;13325:8;10084:15;10072:8;:27;;10064:64;;;;;-1:-1:-1;;;10064:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10064:64:0;;;;;;;;;;;;;;;13446:176:::1;13474:5;13494:4;13513:18;13546:9;13570:14;13599:12;13446:13;:176::i;:::-;13419:203:::0;;-1:-1:-1;13419:203:0;-1:-1:-1;13633:12:0::1;13648:46;13673:7;13682:5:::0;13689:4:::1;13648:24;:46::i;:::-;13633:61;;13705:69;13737:5;13744:10;13756:4;13762:11;13705:31;:69::i;:::-;13791:4;-1:-1:-1::0;;;;;13785:19:0::1;;13812:9;13785:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;13785:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;13785:39:0;;;;;13848:4;-1:-1:-1::0;;;;;13842:20:0::1;;13863:4;13869:9;13842:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;13842:37:0::1;-1:-1:-1::0;;;;;13842:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;13842:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;13842:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;13842:37:0;13835:45:::1;;;;13918:4;-1:-1:-1::0;;;;;13903:25:0::1;;13929:2;13903:29;;;;;;;;;;;;;-1:-1:-1::0;;;;;13903:29:0::1;-1:-1:-1::0;;;;;13903:29:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;13903:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;13903:29:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;13903:29:0;;-1:-1:-1;13983:9:0::1;:21:::0;-1:-1:-1;13979:105:0::1;;;14019:65;14050:10;14074:9;14062;:21;14019:30;:65::i;:::-;10139:1;13046:1046:::0;;;;;;;;;;;:::o;24695:976::-;24951:21;24923:8;10084:15;10072:8;:27;;10064:64;;;;;-1:-1:-1;;;10064:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10064:64:0;;;;;;;;;;;;;;;25009:4:::1;-1:-1:-1::0;;;;;24998:15:0::1;:4;;25003:1;24998:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;24998:7:0::1;-1:-1:-1::0;;;;;24998:15:0::1;;24990:57;;;::::0;;-1:-1:-1;;;24990:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;24990:57:0;;;;;;;;;;;;;::::1;;25068:55;25098:7;25107:9;25118:4;;25068:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25068:29:0::1;::::0;-1:-1:-1;;;25068:55:0:i:1;:::-;25058:65;;25170:9;25156:7;25164:1;25156:10;;;;;;;;;;;;;;:23;;25134:112;;;;-1:-1:-1::0;;;25134:112:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25263:4;-1:-1:-1::0;;;;;25257:19:0::1;;25284:7;25292:1;25284:10;;;;;;;;;;;;;;25257:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;25257:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;25257:40:0;;;;;25335:4;-1:-1:-1::0;;;;;25329:20:0::1;;25368:51;25393:7;25402:4;;25407:1;25402:7;;;;;;25368:51;25438:7;25446:1;25438:10;;;;;;;;;;;;;;25329:134;;;;;;;;;;;;;-1:-1:-1::0;;;;;25329:134:0::1;-1:-1:-1::0;;;;;25329:134:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;25329:134:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;25329:134:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;25329:134:0;25308:166:::1;;;;25485:24;25491:7;25500:4;;25485:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25506:2:0;;-1:-1:-1;25485:5:0::1;::::0;-1:-1:-1;;25485:24:0:i:1;:::-;25572:7;25580:1;25572:10;;;;;;;;;;;;;;25560:9;:22;25556:107;;;25597:66;25628:10;25652:7;25660:1;25652:10;;;;;;;;;;;;;;25640:9;:22;25597:30;:66::i;37425:422::-:0;37634:45;;;-1:-1:-1;;;;;37634:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;37634:45:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;37609:81:0;;;;37574:12;;37588:17;;37609:10;;;;37634:45;37609:81;;;25:18:-1;37609:81:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;37609: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;;37573:117:0;;;;37723:7;:57;;;;-1:-1:-1;37735:11:0;;:16;;:44;;;37766:4;37755:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;37755:24:0;37735:44;37701:138;;;;;-1:-1:-1;;;37701:138:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;37425:422;;;;;:::o;38369:197::-;38479:12;;;38439;38479;;;;;;;;;-1:-1:-1;;;;;38457:7:0;;;38472:5;;38457:35;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;38457: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;;38438:54:0;;;38511:7;38503:55;;;;-1:-1:-1;;;38503:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38369:197;;;:::o;34191:588::-;34318:14;34364:1;34353:8;:12;34345:68;;;;-1:-1:-1;;;34345:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34458:1;34446:9;:13;:31;;;;;34476:1;34463:10;:14;34446:31;34424:121;;;;-1:-1:-1;;;34424:121:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34556:20;34579:17;:8;34592:3;34579:17;:12;:17;:::i;:::-;34556:40;-1:-1:-1;34607:14:0;34624:31;34556:40;34644:10;34624:31;:19;:31;:::i;:::-;34607:48;-1:-1:-1;34666:16:0;34685:40;34709:15;34685:19;:9;34699:4;34685:19;:13;:19;:::i;:::-;:23;:40;:23;:40;:::i;:::-;34666:59;;34760:11;34748:9;:23;;;;;;;34191:588;-1:-1:-1;;;;;;;34191:588:0:o;35525:611::-;35660:21;35717:1;35702:4;:11;:16;;35694:59;;;;;-1:-1:-1;;;35694:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;35785:4;:11;35774:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35774:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;35774:23:0;;35764:33;;35821:8;35808:7;35816:1;35808:10;;;;;;;;;;;;;:21;;;;;35845:6;35840:289;35871:1;35857:4;:11;:15;35853:1;:19;35840:289;;;35895:14;35911:15;35930:108;35960:7;35986:4;35991:1;35986:7;;;;;;;;;;;;;;36012:4;36017:1;36021;36017:5;36012:11;;;;;;;;;;;;;;35930;:108::i;:::-;35894:144;;;;36070:47;36083:7;36091:1;36083:10;;;;;;;;;;;;;;36095:9;36106:10;36070:12;:47::i;:::-;36053:7;36061:1;36065;36061:5;36053:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;35874:3:0;;35840:289;;;;35525:611;;;;;:::o;32381:648::-;32504:12;32530:14;32546;32564:26;32575:6;32583;32564:10;:26::i;:::-;32806:32;;;-1:-1:-1;;32806:32:0;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;32806:32:0;;;;;32796:43;;;;;;-1:-1:-1;;;;;;32685:291:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;32685:291:0;;;;;;;32653:342;;;;;;;;;32381:648;-1:-1:-1;;;;;32381:648:0:o;37855:506::-;38137:51;;;-1:-1:-1;;;;;38137:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;38137:51:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;38112:87:0;;;;38077:12;;38091:17;;38112:10;;;;38137:51;38112:87;;;25:18:-1;38112:87:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;38112: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;;38076:123:0;;;;38232:7;:57;;;;-1:-1:-1;38244:11:0;;:16;;:44;;;38275:4;38264:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;38264:24:0;38244:44;38210:143;;;;-1:-1:-1;;;38210:143:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37855:506;;;;;;:::o;19553:824::-;19694:6;19689:681;19720:1;19706:4;:11;:15;19702:1;:19;19689:681;;;19744:13;19759:14;19778:4;19783:1;19778:7;;;;;;;;;;;;;;19787:4;19792:1;19796;19792:5;19787:11;;;;;;;;;;;;;;19743:56;;;;19815:14;19835:42;19863:5;19870:6;19835:27;:42::i;:::-;19814:63;;;19892:14;19909:7;19917:1;19921;19917:5;19909:14;;;;;;;;;;;;;;19892:31;;19939:15;19956;19984:6;-1:-1:-1;;;;;19975:15:0;:5;-1:-1:-1;;;;;19975:15:0;;:95;;20051:9;20067:1;19975:95;;;20016:1;20020:9;19975:95;19938:132;;;;20085:10;20116:1;20102:4;:11;:15;20098:1;:19;:116;;20211:3;20098:116;;;20137:54;20162:7;20171:6;20179:4;20184:1;20188;20184:5;20179:11;;;;;;;;;;;;;;20137:24;:54::i;:::-;20085:129;;20244:48;20269:7;20278:5;20285:6;20244:24;:48::i;:::-;-1:-1:-1;;;;;20229:87:0;;20317:10;20329;20341:2;20355:1;20345:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;20345:12:0;87:42:-1;143:17;;-1:-1;20345:12:0;;20229:129;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20229:129:0;-1:-1:-1;;;;;20229:129:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;20229:129:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20229:129:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;19723:3:0;;;;;-1:-1:-1;19689:681:0;;-1:-1:-1;;;;;;;;19689:681:0;;;19553:824;;;:::o;36217:632::-;36352:21;36409:1;36394:4;:11;:16;;36386:59;;;;;-1:-1:-1;;;36386:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;36477:4;:11;36466:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;36466:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;36466:23:0;;36456:33;;36530:9;36500:7;36525:1;36508:7;:14;:18;36500:27;;;;;;;;;;;;;;;;;:39;36564:11;;-1:-1:-1;;36564:15:0;36550:292;36581:5;;36550:292;;36609:14;36625:15;36644:108;36674:7;36700:4;36709:1;36705;:5;36700:11;;;;;;;;;;;;;;36730:4;36735:1;36730:7;;;;;;;36644:108;36608:144;;;;36784:46;36796:7;36804:1;36796:10;;;;;;;;;;;;;;36808:9;36819:10;36784:11;:46::i;:::-;36767:7;36779:1;36775;:5;36767:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;36588:3:0;36550:292;;25818:1538;25956:6;25951:1398;25982:1;25968:4;:11;:15;25964:1;:19;25951:1398;;;26006:13;26021:14;26040:4;26045:1;26040:7;;;;;;;;;;;;;;26049:4;26054:1;26058;26054:5;26049:11;;;;;;;;;;;;;;26005:56;;;;26077:14;26097:42;26125:5;26132:6;26097:27;:42::i;:::-;26076:63;;;26154:19;26209:48;26234:7;26243:5;26250:6;26209:24;:48::i;:::-;26154:118;;26287:16;26318:17;26427:13;26442;26461:4;-1:-1:-1;;;;;26461:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26461:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26461:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;26461:18:0;;;;;;;-1:-1:-1;;;;;26426:53:0;;;;-1:-1:-1;26426:53:0;;-1:-1:-1;26499:17:0;;-1:-1:-1;;;;;26540:15:0;;;;;;;:103;;26624:8;26634;26540:103;;;26580:8;26590;26540:103;26498:145;;;;26676:96;26741:12;26683:5;-1:-1:-1;;;;;26676:23:0;;26708:4;26676:38;;;;;;;;;;;;;-1:-1:-1;;;;;26676:38:0;-1:-1:-1;;;;;26676:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;26676:96:0;26662:110;;26806:153;26858:11;26892:12;26927:13;26806:29;:153::i;:::-;26791:168;;25951:1398;;;;26990:15;27007;27035:6;-1:-1:-1;;;;;27026:15:0;:5;-1:-1:-1;;;;;27026:15:0;;:101;;27105:12;27124:1;27026:101;;;27067:1;27071:12;27026:101;26989:138;;;;27142:10;27173:1;27159:4;:11;:15;27155:1;:19;:116;;27268:3;27155:116;;;27194:54;27219:7;27228:6;27236:4;27241:1;27245;27241:5;27236:11;;;;;;;27194:54;27324:12;;;27334:1;27324:12;;;;;;;;;;-1:-1:-1;;;27286:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;27286:51:0;;;;;;;;;;;;;;;;;;;;;;27142:129;;-1:-1:-1;27286:9:0;;;;;;27296:10;;27308;;27142:129;;27324:12;;27286:51;;;;;;;;27324:12;;27286:51;;;;27324: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;27286:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27286:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;25985:3:0;;;;;-1:-1:-1;25951:1398:0;;-1:-1:-1;;;;;;;;;;25951:1398:0;31438:129;31522:5;;;31517:16;;;;31509:50;;;;;-1:-1:-1;;;31509:50:0;;;;;;;;;;;;-1:-1:-1;;;31509:50:0;;;;;;;;;;;;;;34900:543;35027:13;35073:1;35061:9;:13;35053:70;;;;-1:-1:-1;;;35053:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35168:1;35156:9;:13;:31;;;;;35186:1;35173:10;:14;35156:31;35134:121;;;;-1:-1:-1;;;35134:121:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35266:14;35283:34;35312:4;35283:24;:9;35297;35283:24;:13;:24;:::i;:::-;:28;:34;:28;:34;:::i;:::-;35266:51;-1:-1:-1;35328:16:0;35347:34;35377:3;35347:25;:10;35362:9;35347:25;:14;:25;:::i;:34::-;35328:53;;35403:32;35433:1;35416:11;35404:9;:23;;;;;;;35403:32;:29;:32;:::i;:::-;35392:43;34900:543;-1:-1:-1;;;;;;34900:543:0:o;33677:392::-;33793:12;33836:1;33826:7;:11;33818:61;;;;-1:-1:-1;;;33818:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33923:1;33912:8;:12;:28;;;;;33939:1;33928:8;:12;33912:28;33890:118;;;;-1:-1:-1;;;33890:118:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34053:8;34029:21;:7;34041:8;34029:21;:11;:21;:::i;:::-;:32;;;;;;;33677:392;-1:-1:-1;;;;33677:392:0:o;31889:400::-;31989:14;32005;32050:6;-1:-1:-1;;;;;32040:16:0;:6;-1:-1:-1;;;;;32040:16:0;;;32032:66;;;;-1:-1:-1;;;32032:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32137:6;-1:-1:-1;;;;;32128:15:0;:6;-1:-1:-1;;;;;32128:15:0;;:79;;32192:6;32200;32128:79;;;32160:6;32168;32128:79;32109:98;;-1:-1:-1;32109:98:0;-1:-1:-1;;;;;;32226:20:0;;32218:63;;;;;-1:-1:-1;;;32218:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;31889:400;;;;;:::o;10443:1710::-;10756:50;;;-1:-1:-1;;;10756:50:0;;-1:-1:-1;;;;;10756:50:0;;;;;;;;;;;;;;;;10661:12;;;;;;10774:7;10756:34;;;;;;:50;;;;;;;;;;;;;;;:34;:50;;;2:2:-1;;;;27:1;24;17:12;2:2;10756:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10756:50:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;10756:50:0;-1:-1:-1;;;;;10756:64:0;;10752:150;;;10837:53;;;-1:-1:-1;;;10837:53:0;;-1:-1:-1;;;;;10837:53:0;;;;;;;;;;;;;;;;10855:7;10837:37;;;;;;:53;;;;;;;;;;;;;;;-1:-1:-1;10837:37:0;:53;;;2:2:-1;;;;27:1;24;17:12;2:2;10837:53:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10837:53:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;10752:150:0;10913:13;10928;10945:103;10988:7;11010:6;11031;10945:28;:103::i;:::-;10912:136;;;;11063:8;11075:1;11063:13;:30;;;;-1:-1:-1;11080:13:0;;11063:30;11059:1087;;;11132:14;;-1:-1:-1;11148:14:0;;-1:-1:-1;11059:1087:0;;;11196:19;11218:124;11259:14;11292:8;11319;11218:22;:124::i;:::-;11196:146;;11379:14;11361;:32;11357:778;;11462:10;11444:14;:28;;11414:140;;;;-1:-1:-1;;;11414:140:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11595:14;;-1:-1:-1;11611:14:0;-1:-1:-1;11611:14:0;11357:778;;;11667:19;11689:140;11734:14;11771:8;11802;11689:22;:140::i;:::-;11667:162;;11873:14;11855;:32;;11848:40;;;;11955:10;11937:14;:28;;11907:140;;;;-1:-1:-1;;;11907:140:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12088:14;-1:-1:-1;12104:14:0;;-1:-1:-1;11357:778:0;11059:1087;;10443:1710;;;;;;;;;;;:::o;31575:142::-;31627:6;31654;;;:30;;-1:-1:-1;;31669:5:0;;;31683:1;31678;31669:5;31678:1;31664:15;;;;;:20;31654:30;31646:63;;;;;-1:-1:-1;;;31646:63:0;;;;;;;;;;;;-1:-1:-1;;;31646:63:0;;;;;;;;;;;;;;31302:128;31386:5;;;31381:16;;;;31373:49;;;;;-1:-1:-1;;;31373:49:0;;;;;;;;;;;;-1:-1:-1;;;31373:49:0;;;;;;;;;;;;;;33087:477;33214:13;33229;33256:14;33276:26;33287:6;33295;33276:10;:26::i;:::-;33255:47;;;33314:13;33329;33377:32;33385:7;33394:6;33402;33377:7;:32::i;:::-;-1:-1:-1;;;;;33348:84:0;;:86;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33348:86:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33348:86:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33348:86:0;;;;;;;-1:-1:-1;;;;;33313:121:0;;;;-1:-1:-1;33313:121:0;;-1:-1:-1;;;;;;33468:16:0;;;;;;;:88;;33537:8;33547;33468:88;;;33501:8;33511;33468:88;33445:111;;;;-1:-1:-1;33087:477:0;-1:-1:-1;;;;;;;33087:477:0:o
Swarm Source
ipfs://814c5d30f503082ea03eec9b685fa1535f468a5df65e3e3c7222fea4e41fc76b
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ 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.