More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 244,194 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Swap Exact Token... | 15326350 | 44 hrs ago | IN | 0 ETH | 0.00000023 | ||||
Remove Liquidity... | 15287808 | 2 days ago | IN | 0 ETH | 0.00000037 | ||||
Remove Liquidity... | 15147633 | 6 days ago | IN | 0 ETH | 0.00000034 | ||||
Swap Exact Token... | 15103962 | 7 days ago | IN | 0 ETH | 0.00000028 | ||||
Swap Exact Token... | 15047810 | 8 days ago | IN | 0 ETH | 0.00000026 | ||||
Swap Exact Token... | 15021145 | 8 days ago | IN | 0 ETH | 0.00000056 | ||||
Swap Exact Token... | 15021024 | 8 days ago | IN | 0 ETH | 0.00000057 | ||||
Swap Exact Token... | 15021015 | 8 days ago | IN | 0 ETH | 0.00000069 | ||||
Remove Liquidity... | 15013874 | 9 days ago | IN | 0 ETH | 0.00000052 | ||||
Swap Exact ETH F... | 14753960 | 15 days ago | IN | 0.0003 ETH | 0.00000051 | ||||
Swap Exact ETH F... | 14747039 | 15 days ago | IN | 0.0001 ETH | 0.00000033 | ||||
Swap Exact Token... | 14517409 | 20 days ago | IN | 0 ETH | 0.00000007 | ||||
Swap Exact Token... | 14471036 | 21 days ago | IN | 0 ETH | 0.00000024 | ||||
Swap Exact ETH F... | 14253624 | 26 days ago | IN | 0.002 ETH | 0.00000017 | ||||
Swap Exact Token... | 14116893 | 29 days ago | IN | 0 ETH | 0.00000018 | ||||
Swap Exact ETH F... | 14116875 | 29 days ago | IN | 0.00175 ETH | 0.00000019 | ||||
Remove Liquidity... | 13829205 | 36 days ago | IN | 0 ETH | 0.0000004 | ||||
Swap Exact ETH F... | 13631094 | 41 days ago | IN | 0.001 ETH | 0.00000049 | ||||
Swap Exact Token... | 13614772 | 41 days ago | IN | 0 ETH | 0.00000059 | ||||
Swap Exact Token... | 13562081 | 42 days ago | IN | 0 ETH | 0.00000026 | ||||
Swap Exact Token... | 13436864 | 45 days ago | IN | 0 ETH | 0.00000021 | ||||
Swap Exact Token... | 13430782 | 45 days ago | IN | 0 ETH | 0.00000023 | ||||
Swap Exact Token... | 13421170 | 45 days ago | IN | 0 ETH | 0.00000027 | ||||
Swap Exact Token... | 13421112 | 45 days ago | IN | 0 ETH | 0.00000024 | ||||
Swap Exact Token... | 13395150 | 46 days ago | IN | 0 ETH | 0.00000022 |
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
15326350 | 44 hrs ago | 0.0369802 ETH | ||||
15326350 | 44 hrs ago | 0.0369802 ETH | ||||
15287808 | 2 days ago | 0.00924539 ETH | ||||
15287808 | 2 days ago | 0.00924539 ETH | ||||
15147633 | 6 days ago | 0.00010006 ETH | ||||
15147633 | 6 days ago | 0.00010006 ETH | ||||
15103962 | 7 days ago | 0.00211362 ETH | ||||
15103962 | 7 days ago | 0.00211362 ETH | ||||
15047810 | 8 days ago | 0.00096403 ETH | ||||
15047810 | 8 days ago | 0.00096403 ETH | ||||
15021145 | 8 days ago | 0.00245972 ETH | ||||
15021145 | 8 days ago | 0.00245972 ETH | ||||
15021024 | 8 days ago | 0.00075685 ETH | ||||
15021024 | 8 days ago | 0.00075685 ETH | ||||
15021015 | 8 days ago | 0.00464614 ETH | ||||
15021015 | 8 days ago | 0.00464614 ETH | ||||
15013874 | 9 days ago | 0.00455211 ETH | ||||
15013874 | 9 days ago | 0.00455211 ETH | ||||
14753960 | 15 days ago | 0.0003 ETH | ||||
14747039 | 15 days ago | 0.0001 ETH | ||||
14517409 | 20 days ago | 0.00453164 ETH | ||||
14517409 | 20 days ago | 0.00453164 ETH | ||||
14471036 | 21 days ago | 0.00479421 ETH | ||||
14471036 | 21 days ago | 0.00479421 ETH | ||||
14253624 | 26 days ago | 0.002 ETH |
Loading...
Loading
Contract Name:
DYORRouter
Compiler Version
v0.6.6+commit.6c089d02
Contract Source Code (Solidity)
/** *Submitted for verification at blastscan.io on 2024-03-01 */ /** *Submitted for verification at BscScan.com on 2021-04-23 */ // File: @uniswap\lib\contracts\libraries\TransferHelper.sol pragma solidity >=0.6.0; // helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false library TransferHelper { function safeApprove(address token, address to, uint value) internal { // bytes4(keccak256(bytes('approve(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: APPROVE_FAILED'); } function safeTransfer(address token, address to, uint value) internal { // bytes4(keccak256(bytes('transfer(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FAILED'); } function safeTransferFrom(address token, address from, address to, uint value) internal { // bytes4(keccak256(bytes('transferFrom(address,address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FROM_FAILED'); } function safeTransferETH(address to, uint value) internal { (bool success,) = to.call{value:value}(new bytes(0)); require(success, 'TransferHelper: ETH_TRANSFER_FAILED'); } } pragma solidity >=0.6.2; interface IDYORRouter01 { 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); } pragma solidity >=0.6.2; interface IDYORRouter02 is IDYORRouter01 { 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; } pragma solidity >=0.5.0; interface IDYORFactory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; function INIT_CODE_PAIR_HASH() external view returns (bytes32); } // File: contracts\libraries\SafeMath.sol pragma solidity =0.6.6; // a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math) library SafeMath { function add(uint x, uint y) internal pure returns (uint z) { require((z = x + y) >= x, 'ds-math-add-overflow'); } function sub(uint x, uint y) internal pure returns (uint z) { require((z = x - y) <= x, 'ds-math-sub-underflow'); } function mul(uint x, uint y) internal pure returns (uint z) { require(y == 0 || (z = x * y) / y == x, 'ds-math-mul-overflow'); } } pragma solidity >=0.5.0; interface IDYORPair { 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; } pragma solidity >=0.5.0; library DYORLibrary { 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, 'DYORLibrary: IDENTICAL_ADDRESSES'); (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA); require(token0 != address(0), 'DYORLibrary: ZERO_ADDRESS'); } function pairFor(address factory, address tokenA, address tokenB) internal view returns (address pair) { (address token0, address token1) = sortTokens(tokenA, tokenB); pair = IDYORFactory(factory).getPair(token0, token1); // = address(uint(keccak256(abi.encodePacked( // hex'ff', // factory, // keccak256(abi.encodePacked(token0, token1)), // hex'e18a34eb0e04b04f7a0ac29a6e80748dca96319b42c54d679cb821dca90c6303' // 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); pairFor(factory, tokenA, tokenB); (uint reserve0, uint reserve1,) = IDYORPair(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, 'DYORLibrary: INSUFFICIENT_AMOUNT'); require(reserveA > 0 && reserveB > 0, 'DYORLibrary: 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, 'DYORLibrary: INSUFFICIENT_INPUT_AMOUNT'); require(reserveIn > 0 && reserveOut > 0, 'DYORLibrary: INSUFFICIENT_LIQUIDITY'); uint amountInWithFee = amountIn.mul(9975); uint numerator = amountInWithFee.mul(reserveOut); uint denominator = reserveIn.mul(10000).add(amountInWithFee); amountOut = numerator / denominator; } // given an output amount of an asset and pair reserves, returns a required input amount of the other asset function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) internal pure returns (uint amountIn) { require(amountOut > 0, 'DYORLibrary: INSUFFICIENT_OUTPUT_AMOUNT'); require(reserveIn > 0 && reserveOut > 0, 'DYORLibrary: INSUFFICIENT_LIQUIDITY'); uint numerator = reserveIn.mul(amountOut).mul(10000); uint denominator = reserveOut.sub(amountOut).mul(9975); amountIn = (numerator / denominator).add(1); } // performs chained getAmountOut calculations on any number of pairs function getAmountsOut(address factory, uint amountIn, address[] memory path) internal view returns (uint[] memory amounts) { require(path.length >= 2, 'DYORLibrary: 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, 'DYORLibrary: INVALID_PATH'); amounts = new uint[](path.length); amounts[amounts.length - 1] = amountOut; for (uint i = path.length - 1; i > 0; i--) { (uint reserveIn, uint reserveOut) = getReserves(factory, path[i - 1], path[i]); amounts[i - 1] = getAmountIn(amounts[i], reserveIn, reserveOut); } } } // File: contracts\interfaces\IERC20.sol pragma solidity >=0.5.0; interface IERC20 { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); } // File: contracts\interfaces\IWETH.sol pragma solidity >=0.5.0; interface IWETH { function deposit() external payable; function transfer(address to, uint value) external returns (bool); function withdraw(uint) external; } pragma solidity =0.6.6; contract DYORRouter is IDYORRouter02 { using SafeMath for uint; address public immutable override factory; address public immutable override WETH; modifier ensure(uint deadline) { require(deadline >= block.timestamp, 'DYORRouter: 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 (IDYORFactory(factory).getPair(tokenA, tokenB) == address(0)) { IDYORFactory(factory).createPair(tokenA, tokenB); } (uint reserveA, uint reserveB) = DYORLibrary.getReserves(factory, tokenA, tokenB); if (reserveA == 0 && reserveB == 0) { (amountA, amountB) = (amountADesired, amountBDesired); } else { uint amountBOptimal = DYORLibrary.quote(amountADesired, reserveA, reserveB); if (amountBOptimal <= amountBDesired) { require(amountBOptimal >= amountBMin, 'DYORRouter: INSUFFICIENT_B_AMOUNT'); (amountA, amountB) = (amountADesired, amountBOptimal); } else { uint amountAOptimal = DYORLibrary.quote(amountBDesired, reserveB, reserveA); assert(amountAOptimal <= amountADesired); require(amountAOptimal >= amountAMin, 'DYORRouter: 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 = DYORLibrary.pairFor(factory, tokenA, tokenB); TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA); TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB); liquidity = IDYORPair(pair).mint(to); } function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external virtual override payable ensure(deadline) returns (uint amountToken, uint amountETH, uint liquidity) { (amountToken, amountETH) = _addLiquidity( token, WETH, amountTokenDesired, msg.value, amountTokenMin, amountETHMin ); address pair = DYORLibrary.pairFor(factory, token, WETH); TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken); IWETH(WETH).deposit{value: amountETH}(); assert(IWETH(WETH).transfer(pair, amountETH)); liquidity = IDYORPair(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 = DYORLibrary.pairFor(factory, tokenA, tokenB); IDYORPair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair (uint amount0, uint amount1) = IDYORPair(pair).burn(to); (address token0,) = DYORLibrary.sortTokens(tokenA, tokenB); (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0); require(amountA >= amountAMin, 'DYORRouter: INSUFFICIENT_A_AMOUNT'); require(amountB >= amountBMin, 'DYORRouter: 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 = DYORLibrary.pairFor(factory, tokenA, tokenB); uint value = approveMax ? uint(-1) : liquidity; IDYORPair(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 = DYORLibrary.pairFor(factory, token, WETH); uint value = approveMax ? uint(-1) : liquidity; IDYORPair(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 = DYORLibrary.pairFor(factory, token, WETH); uint value = approveMax ? uint(-1) : liquidity; IDYORPair(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,) = DYORLibrary.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 ? DYORLibrary.pairFor(factory, output, path[i + 2]) : _to; IDYORPair(DYORLibrary.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 = DYORLibrary.getAmountsOut(factory, amountIn, path); require(amounts[amounts.length - 1] >= amountOutMin, 'DYORRouter: INSUFFICIENT_OUTPUT_AMOUNT'); TransferHelper.safeTransferFrom( path[0], msg.sender, DYORLibrary.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 = DYORLibrary.getAmountsIn(factory, amountOut, path); require(amounts[0] <= amountInMax, 'DYORRouter: EXCESSIVE_INPUT_AMOUNT'); TransferHelper.safeTransferFrom( path[0], msg.sender, DYORLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, to); } function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external virtual override payable ensure(deadline) returns (uint[] memory amounts) { require(path[0] == WETH, 'DYORRouter: INVALID_PATH'); amounts = DYORLibrary.getAmountsOut(factory, msg.value, path); require(amounts[amounts.length - 1] >= amountOutMin, 'DYORRouter: INSUFFICIENT_OUTPUT_AMOUNT'); IWETH(WETH).deposit{value: amounts[0]}(); assert(IWETH(WETH).transfer(DYORLibrary.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, 'DYORRouter: INVALID_PATH'); amounts = DYORLibrary.getAmountsIn(factory, amountOut, path); require(amounts[0] <= amountInMax, 'DYORRouter: EXCESSIVE_INPUT_AMOUNT'); TransferHelper.safeTransferFrom( path[0], msg.sender, DYORLibrary.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, 'DYORRouter: INVALID_PATH'); amounts = DYORLibrary.getAmountsOut(factory, amountIn, path); require(amounts[amounts.length - 1] >= amountOutMin, 'DYORRouter: INSUFFICIENT_OUTPUT_AMOUNT'); TransferHelper.safeTransferFrom( path[0], msg.sender, DYORLibrary.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 virtual override payable ensure(deadline) returns (uint[] memory amounts) { require(path[0] == WETH, 'DYORRouter: INVALID_PATH'); amounts = DYORLibrary.getAmountsIn(factory, amountOut, path); require(amounts[0] <= msg.value, 'DYORRouter: EXCESSIVE_INPUT_AMOUNT'); IWETH(WETH).deposit{value: amounts[0]}(); assert(IWETH(WETH).transfer(DYORLibrary.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,) = DYORLibrary.sortTokens(input, output); IDYORPair pair = IDYORPair(DYORLibrary.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 = DYORLibrary.getAmountOut(amountInput, reserveInput, reserveOutput); } (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0)); address to = i < path.length - 2 ? DYORLibrary.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, DYORLibrary.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, 'DYORRouter: INSUFFICIENT_OUTPUT_AMOUNT' ); } function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external virtual override payable ensure(deadline) { require(path[0] == WETH, 'DYORRouter: INVALID_PATH'); uint amountIn = msg.value; IWETH(WETH).deposit{value: amountIn}(); assert(IWETH(WETH).transfer(DYORLibrary.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, 'DYORRouter: 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, 'DYORRouter: INVALID_PATH'); TransferHelper.safeTransferFrom( path[0], msg.sender, DYORLibrary.pairFor(factory, path[0], path[1]), amountIn ); _swapSupportingFeeOnTransferTokens(path, address(this)); uint amountOut = IERC20(WETH).balanceOf(address(this)); require(amountOut >= amountOutMin, 'DYORRouter: 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 DYORLibrary.quote(amountA, reserveA, reserveB); } function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) public pure virtual override returns (uint amountOut) { return DYORLibrary.getAmountOut(amountIn, reserveIn, reserveOut); } function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) public pure virtual override returns (uint amountIn) { return DYORLibrary.getAmountIn(amountOut, reserveIn, reserveOut); } function getAmountsOut(uint amountIn, address[] memory path) public view virtual override returns (uint[] memory amounts) { return DYORLibrary.getAmountsOut(factory, amountIn, path); } function getAmountsIn(uint amountOut, address[] memory path) public view virtual override returns (uint[] memory amounts) { return DYORLibrary.getAmountsIn(factory, amountOut, path); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WETH","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"amountADesired","type":"uint256"},{"internalType":"uint256","name":"amountBDesired","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amountTokenDesired","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountIn","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsIn","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsOut","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"reserveA","type":"uint256"},{"internalType":"uint256","name":"reserveB","type":"uint256"}],"name":"quote","outputs":[{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETHSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermit","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermitSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityWithPermit","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapETHForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETHSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040523480156200001157600080fd5b50604051620056e0380380620056e0833981810160405260408110156200003757600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c61555962000187600039806101ac5280610e5d5280610e985280610fd5528061129852806116f252806118d65280611e1e5280611fa252806120725280612179528061232c52806123c15280612673528061271a52806127ef52806128f452806129dc5280612a5d52806130ec5280613422528061347852806134ac528061352d528061374752806138f7528061398c5250806110c752806111c5528061136b52806113a4528061154f52806117e452806118b45280611aa1528061225f528061240052806125a95280612a9c5280612ddf5280613071528061309a52806130ca52806132a75280613456528061382d52806139cb5280614421528061446452806147c452806149a55280614f4c528061502d52806150ad52506155596000f3fe60806040526004361061018f5760003560e01c80638803dbee116100d6578063c45a01551161007f578063e8e3370011610059578063e8e3370014610c71578063f305d71914610cfe578063fb3bdb4114610d51576101d5565b8063c45a015514610b25578063d06ca61f14610b3a578063ded9382a14610bf1576101d5565b8063af2979eb116100b0578063af2979eb146109c8578063b6f9de9514610a28578063baa2abde14610abb576101d5565b80638803dbee146108af578063ad5c464814610954578063ad615dec14610992576101d5565b80634a25d94a11610138578063791ac94711610112578063791ac947146107415780637ff36ab5146107e657806385f8c25914610879576101d5565b80634a25d94a146105775780635b0d59841461061c5780635c11d7951461069c576101d5565b80631f00ca74116101695780631f00ca74146103905780632195995c1461044757806338ed1739146104d2576101d5565b806302751cec146101da578063054d50d41461025357806318cbafe51461029b576101d5565b366101d5573373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146101d357fe5b005b600080fd5b3480156101e657600080fd5b5061023a600480360360c08110156101fd57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a00135610de4565b6040805192835260208301919091528051918290030190f35b34801561025f57600080fd5b506102896004803603606081101561027657600080fd5b5080359060208101359060400135610f37565b60408051918252519081900360200190f35b3480156102a757600080fd5b50610340600480360360a08110156102be57600080fd5b8135916020810135918101906060810160408201356401000000008111156102e557600080fd5b8201836020820111156102f757600080fd5b8035906020019184602083028401116401000000008311171561031957600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135610f4c565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561037c578181015183820152602001610364565b505050509050019250505060405180910390f35b34801561039c57600080fd5b50610340600480360360408110156103b357600080fd5b813591908101906040810160208201356401000000008111156103d557600080fd5b8201836020820111156103e757600080fd5b8035906020019184602083028401116401000000008311171561040957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611364945050505050565b34801561045357600080fd5b5061023a600480360361016081101561046b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff610100820135169061012081013590610140013561139a565b3480156104de57600080fd5b50610340600480360360a08110156104f557600080fd5b81359160208101359181019060608101604082013564010000000081111561051c57600080fd5b82018360208201111561052e57600080fd5b8035906020019184602083028401116401000000008311171561055057600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356114d8565b34801561058357600080fd5b50610340600480360360a081101561059a57600080fd5b8135916020810135918101906060810160408201356401000000008111156105c157600080fd5b8201836020820111156105d357600080fd5b803590602001918460208302840111640100000000831117156105f557600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135611669565b34801561062857600080fd5b50610289600480360361014081101561064057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356118ac565b3480156106a857600080fd5b506101d3600480360360a08110156106bf57600080fd5b8135916020810135918101906060810160408201356401000000008111156106e657600080fd5b8201836020820111156106f857600080fd5b8035906020019184602083028401116401000000008311171561071a57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356119fe565b34801561074d57600080fd5b506101d3600480360360a081101561076457600080fd5b81359160208101359181019060608101604082013564010000000081111561078b57600080fd5b82018360208201111561079d57600080fd5b803590602001918460208302840111640100000000831117156107bf57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135611d97565b610340600480360360808110156107fc57600080fd5b8135919081019060408101602082013564010000000081111561081e57600080fd5b82018360208201111561083057600080fd5b8035906020019184602083028401116401000000008311171561085257600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612105565b34801561088557600080fd5b506102896004803603606081101561089c57600080fd5b5080359060208101359060400135612525565b3480156108bb57600080fd5b50610340600480360360a08110156108d257600080fd5b8135916020810135918101906060810160408201356401000000008111156108f957600080fd5b82018360208201111561090b57600080fd5b8035906020019184602083028401116401000000008311171561092d57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612532565b34801561096057600080fd5b50610969612671565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561099e57600080fd5b50610289600480360360608110156109b557600080fd5b5080359060208101359060400135612695565b3480156109d457600080fd5b50610289600480360360c08110156109eb57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a001356126a2565b6101d360048036036080811015610a3e57600080fd5b81359190810190604081016020820135640100000000811115610a6057600080fd5b820183602082011115610a7257600080fd5b80359060200191846020830284011164010000000083111715610a9457600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612882565b348015610ac757600080fd5b5061023a600480360360e0811015610ade57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612d65565b348015610b3157600080fd5b5061096961306f565b348015610b4657600080fd5b5061034060048036036040811015610b5d57600080fd5b81359190810190604081016020820135640100000000811115610b7f57600080fd5b820183602082011115610b9157600080fd5b80359060200191846020830284011164010000000083111715610bb357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550613093945050505050565b348015610bfd57600080fd5b5061023a6004803603610140811015610c1557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356130c0565b348015610c7d57600080fd5b50610ce06004803603610100811015610c9557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135613218565b60408051938452602084019290925282820152519081900360600190f35b610ce0600480360360c0811015610d1457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a001356133a7565b61034060048036036080811015610d6757600080fd5b81359190810190604081016020820135640100000000811115610d8957600080fd5b820183602082011115610d9b57600080fd5b80359060200191846020830284011164010000000083111715610dbd57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356136d3565b6000808242811015610e5757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f44594f52526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b610e86897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a612d65565b9093509150610e96898685613b22565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610f0957600080fd5b505af1158015610f1d573d6000803e3d6000fd5b50505050610f2b8583613cff565b50965096945050505050565b6000610f44848484613e3c565b949350505050565b60608142811015610fbe57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f44594f52526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001686867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061102357fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110c257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f44594f52526f757465723a20494e56414c49445f504154480000000000000000604482015290519081900360640190fd5b6111207f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f6092505050565b9150868260018451038151811061113357fe5b60200260200101511015611192576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806154966026913960400191505060405180910390fd5b611257868660008181106111a257fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff163361123d7f00000000000000000000000000000000000000000000000000000000000000008a8a60008181106111f157fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168b8b600181811061121b57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff166140c6565b8560008151811061124a57fe5b6020026020010151614188565b61129682878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250614358915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836001855103815181106112e257fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561132057600080fd5b505af1158015611334573d6000803e3d6000fd5b50505050611359848360018551038151811061134c57fe5b6020026020010151613cff565b509695505050505050565b60606113917f000000000000000000000000000000000000000000000000000000000000000084846145df565b90505b92915050565b60008060006113ca7f00000000000000000000000000000000000000000000000000000000000000008f8f6140c6565b90506000876113d9578c6113fb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c48101889052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b15801561149757600080fd5b505af11580156114ab573d6000803e3d6000fd5b505050506114be8f8f8f8f8f8f8f612d65565b809450819550505050509b509b9950505050505050505050565b6060814281101561154a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f44594f52526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b6115a87f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f6092505050565b915086826001845103815181106115bb57fe5b6020026020010151101561161a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806154966026913960400191505060405180910390fd5b61162a868660008181106111a257fe5b61135982878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250614358915050565b606081428110156116db57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f44594f52526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001686867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061174057fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117df57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f44594f52526f757465723a20494e56414c49445f504154480000000000000000604482015290519081900360640190fd5b61183d7f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506145df92505050565b9150868260008151811061184d57fe5b60200260200101511115611192576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806154746022913960400191505060405180910390fd5b6000806118fa7f00000000000000000000000000000000000000000000000000000000000000008d7f00000000000000000000000000000000000000000000000000000000000000006140c6565b9050600086611909578b61192b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c48101879052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b1580156119c757600080fd5b505af11580156119db573d6000803e3d6000fd5b505050506119ed8d8d8d8d8d8d6126a2565b9d9c50505050505050505050505050565b8042811015611a6e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f44594f52526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b611afd85856000818110611a7e57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1633611af77f000000000000000000000000000000000000000000000000000000000000000089896000818110611acd57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168a8a600181811061121b57fe5b8a614188565b600085857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611b2d57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611bc657600080fd5b505afa158015611bda573d6000803e3d6000fd5b505050506040513d6020811015611bf057600080fd5b50516040805160208881028281018201909352888252929350611c3292909189918991829185019084908082843760009201919091525088925061476d915050565b86611d368288887fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611c6557fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cfe57600080fd5b505afa158015611d12573d6000803e3d6000fd5b505050506040513d6020811015611d2857600080fd5b50519063ffffffff614b0016565b1015611d8d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806154966026913960400191505060405180910390fd5b5050505050505050565b8042811015611e0757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f44594f52526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001685857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611e6c57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f0b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f44594f52526f757465723a20494e56414c49445f504154480000000000000000604482015290519081900360640190fd5b611f1b85856000818110611a7e57fe5b611f5985858080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525030925061476d915050565b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905160009173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611fe957600080fd5b505afa158015611ffd573d6000803e3d6000fd5b505050506040513d602081101561201357600080fd5b5051905086811015612070576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806154966026913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156120e357600080fd5b505af11580156120f7573d6000803e3d6000fd5b50505050611d8d8482613cff565b6060814281101561217757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f44594f52526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16868660008181106121bb57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461225a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f44594f52526f757465723a20494e56414c49445f504154480000000000000000604482015290519081900360640190fd5b6122b87f000000000000000000000000000000000000000000000000000000000000000034888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f6092505050565b915086826001845103815181106122cb57fe5b6020026020010151101561232a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806154966026913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db08360008151811061237357fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b1580156123a657600080fd5b505af11580156123ba573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61242c7f000000000000000000000000000000000000000000000000000000000000000089896000818110611acd57fe5b8460008151811061243957fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156124aa57600080fd5b505af11580156124be573d6000803e3d6000fd5b505050506040513d60208110156124d457600080fd5b50516124dc57fe5b61251b82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250614358915050565b5095945050505050565b6000610f44848484614b72565b606081428110156125a457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f44594f52526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b6126027f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506145df92505050565b9150868260008151811061261257fe5b6020026020010151111561161a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806154746022913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610f44848484614c96565b6000814281101561271457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f44594f52526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b612743887f00000000000000000000000000000000000000000000000000000000000000008989893089612d65565b604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290519194506127ed92508a91879173ffffffffffffffffffffffffffffffffffffffff8416916370a0823191602480820192602092909190829003018186803b1580156127bc57600080fd5b505afa1580156127d0573d6000803e3d6000fd5b505050506040513d60208110156127e657600080fd5b5051613b22565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561286057600080fd5b505af1158015612874573d6000803e3d6000fd5b505050506113598483613cff565b80428110156128f257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f44594f52526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168585600081811061293657fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129d557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f44594f52526f757465723a20494e56414c49445f504154480000000000000000604482015290519081900360640190fd5b60003490507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015612a4257600080fd5b505af1158015612a56573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb612ac87f000000000000000000000000000000000000000000000000000000000000000089896000818110611acd57fe5b836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612b3257600080fd5b505af1158015612b46573d6000803e3d6000fd5b505050506040513d6020811015612b5c57600080fd5b5051612b6457fe5b600086867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110612b9457fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612c2d57600080fd5b505afa158015612c41573d6000803e3d6000fd5b505050506040513d6020811015612c5757600080fd5b50516040805160208981028281018201909352898252929350612c999290918a918a91829185019084908082843760009201919091525089925061476d915050565b87611d368289897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110612ccc57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231896040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cfe57600080fd5b6000808242811015612dd857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f44594f52526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b6000612e057f00000000000000000000000000000000000000000000000000000000000000008c8c6140c6565b604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b158015612e8657600080fd5b505af1158015612e9a573d6000803e3d6000fd5b505050506040513d6020811015612eb057600080fd5b5050604080517f89afcb4400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b158015612f2357600080fd5b505af1158015612f37573d6000803e3d6000fd5b505050506040513d6040811015612f4d57600080fd5b50805160209091015190925090506000612f678e8e614d8c565b5090508073ffffffffffffffffffffffffffffffffffffffff168e73ffffffffffffffffffffffffffffffffffffffff1614612fa4578183612fa7565b82825b90975095508a871015613005576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806154bc6021913960400191505060405180910390fd5b8986101561305e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061542d6021913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606113917f00000000000000000000000000000000000000000000000000000000000000008484613f60565b60008060006131107f00000000000000000000000000000000000000000000000000000000000000008e7f00000000000000000000000000000000000000000000000000000000000000006140c6565b905060008761311f578c613141565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c48101889052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b1580156131dd57600080fd5b505af11580156131f1573d6000803e3d6000fd5b505050506132038e8e8e8e8e8e610de4565b909f909e509c50505050505050505050505050565b6000806000834281101561328d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f44594f52526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b61329b8c8c8c8c8c8c614ef5565b909450925060006132cd7f00000000000000000000000000000000000000000000000000000000000000008e8e6140c6565b90506132db8d338388614188565b6132e78c338387614188565b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561336657600080fd5b505af115801561337a573d6000803e3d6000fd5b505050506040513d602081101561339057600080fd5b5051949d939c50939a509198505050505050505050565b6000806000834281101561341c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f44594f52526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b61344a8a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c614ef5565b9094509250600061349c7f00000000000000000000000000000000000000000000000000000000000000008c7f00000000000000000000000000000000000000000000000000000000000000006140c6565b90506134aa8b338388614188565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b15801561351257600080fd5b505af1158015613526573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb82866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156135d257600080fd5b505af11580156135e6573d6000803e3d6000fd5b505050506040513d60208110156135fc57600080fd5b505161360457fe5b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561368357600080fd5b505af1158015613697573d6000803e3d6000fd5b505050506040513d60208110156136ad57600080fd5b50519250348410156136c5576136c533853403613cff565b505096509650969350505050565b6060814281101561374557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f44594f52526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168686600081811061378957fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461382857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f44594f52526f757465723a20494e56414c49445f504154480000000000000000604482015290519081900360640190fd5b6138867f0000000000000000000000000000000000000000000000000000000000000000888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506145df92505050565b9150348260008151811061389657fe5b602002602001015111156138f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806154746022913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db08360008151811061393e57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561397157600080fd5b505af1158015613985573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6139f77f000000000000000000000000000000000000000000000000000000000000000089896000818110611acd57fe5b84600081518110613a0457fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015613a7557600080fd5b505af1158015613a89573d6000803e3d6000fd5b505050506040513d6020811015613a9f57600080fd5b5051613aa757fe5b613ae682878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250614358915050565b81600081518110613af357fe5b602002602001015134111561251b5761251b3383600081518110613b1357fe5b60200260200101513403613cff565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000178152925182516000946060949389169392918291908083835b60208310613bf857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613bbb565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613c5a576040519150601f19603f3d011682016040523d82523d6000602084013e613c5f565b606091505b5091509150818015613c8d575080511580613c8d5750808060200190516020811015613c8a57600080fd5b50515b613cf857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b60208310613d7657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613d39565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613dd8576040519150601f19603f3d011682016040523d82523d6000602084013e613ddd565b606091505b5050905080613e37576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806154dd6023913960400191505060405180910390fd5b505050565b6000808411613e96576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061544e6026913960400191505060405180910390fd5b600083118015613ea65750600082115b613efb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061540a6023913960400191505060405180910390fd5b6000613f0f856126f763ffffffff6151f616565b90506000613f23828563ffffffff6151f616565b90506000613f4983613f3d8861271063ffffffff6151f616565b9063ffffffff61527c16565b9050808281613f5457fe5b04979650505050505050565b6060600282511015613fd357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f44594f524c6962726172793a20494e56414c49445f5041544800000000000000604482015290519081900360640190fd5b815167ffffffffffffffff81118015613feb57600080fd5b50604051908082528060200260200182016040528015614015578160200160208202803683370190505b509050828160008151811061402657fe5b60200260200101818152505060005b60018351038110156140be576000806140788786858151811061405457fe5b602002602001015187866001018151811061406b57fe5b60200260200101516152ee565b9150915061409a84848151811061408b57fe5b60200260200101518383613e3c565b8484600101815181106140a957fe5b60209081029190910101525050600101614035565b509392505050565b60008060006140d58585614d8c565b604080517fe6a4390500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80851660048301528084166024830152915193955091935088169163e6a4390591604480820192602092909190829003018186803b15801561415257600080fd5b505afa158015614166573d6000803e3d6000fd5b505050506040513d602081101561417c57600080fd5b50519695505050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017815292518251600094606094938a169392918291908083835b6020831061426657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101614229565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146142c8576040519150601f19603f3d011682016040523d82523d6000602084013e6142cd565b606091505b50915091508180156142fb5750805115806142fb57508080602001905160208110156142f857600080fd5b50515b614350576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806155006024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156145d95760008084838151811061437657fe5b602002602001015185846001018151811061438d57fe5b60200260200101519150915060006143a58383614d8c565b50905060008785600101815181106143b957fe5b602002602001015190506000808373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161461440157826000614405565b6000835b91509150600060028a5103881061441c578861445d565b61445d7f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061445057fe5b60200260200101516140c6565b905061448a7f000000000000000000000000000000000000000000000000000000000000000088886140c6565b73ffffffffffffffffffffffffffffffffffffffff1663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156144d4576020820181803683370190505b506040518563ffffffff1660e01b8152600401808581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561455f578181015183820152602001614547565b50505050905090810190601f16801561458c5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156145ae57600080fd5b505af11580156145c2573d6000803e3d6000fd5b50506001909901985061435b975050505050505050565b50505050565b606060028251101561465257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f44594f524c6962726172793a20494e56414c49445f5041544800000000000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561466a57600080fd5b50604051908082528060200260200182016040528015614694578160200160208202803683370190505b50905082816001835103815181106146a857fe5b602090810291909101015281517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff015b80156140be57600080614708878660018603815181106146f457fe5b602002602001015187868151811061406b57fe5b9150915061472a84848151811061471b57fe5b60200260200101518383614b72565b84600185038151811061473957fe5b602090810291909101015250507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016146d8565b60005b6001835103811015613e375760008084838151811061478b57fe5b60200260200101518584600101815181106147a257fe5b60200260200101519150915060006147ba8383614d8c565b50905060006147ea7f000000000000000000000000000000000000000000000000000000000000000085856140c6565b90506000806000808473ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561483857600080fd5b505afa15801561484c573d6000803e3d6000fd5b505050506040513d606081101561486257600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905060008073ffffffffffffffffffffffffffffffffffffffff8a8116908916146148ac5782846148af565b83835b91509150614934828b73ffffffffffffffffffffffffffffffffffffffff166370a082318a6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cfe57600080fd5b9550614941868383613e3c565b9450505050506000808573ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161461498557826000614989565b6000835b91509150600060028c51038a106149a0578a6149d4565b6149d47f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061445057fe5b60408051600080825260208201928390527f022c0d9f000000000000000000000000000000000000000000000000000000008352602482018781526044830187905273ffffffffffffffffffffffffffffffffffffffff8086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015614a84578181015183820152602001614a6c565b50505050905090810190601f168015614ab15780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015614ad357600080fd5b505af1158015614ae7573d6000803e3d6000fd5b50506001909b019a506147709950505050505050505050565b8082038281111561139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b6000808411614bcc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806153e36027913960400191505060405180910390fd5b600083118015614bdc5750600082115b614c31576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061540a6023913960400191505060405180910390fd5b6000614c55612710614c49868863ffffffff6151f616565b9063ffffffff6151f616565b90506000614c6f6126f7614c49868963ffffffff614b0016565b9050614c8c6001828481614c7f57fe5b049063ffffffff61527c16565b9695505050505050565b6000808411614d0657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f44594f524c6962726172793a20494e53554646494349454e545f414d4f554e54604482015290519081900360640190fd5b600083118015614d165750600082115b614d6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061540a6023913960400191505060405180910390fd5b82614d7c858463ffffffff6151f616565b81614d8357fe5b04949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415614e2a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f44594f524c6962726172793a204944454e544943414c5f414444524553534553604482015290519081900360640190fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610614e64578284614e67565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216614eee57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f44594f524c6962726172793a205a45524f5f4144445245535300000000000000604482015290519081900360640190fd5b9250929050565b604080517fe6a4390500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b158015614f9557600080fd5b505afa158015614fa9573d6000803e3d6000fd5b505050506040513d6020811015614fbf57600080fd5b505173ffffffffffffffffffffffffffffffffffffffff1614156150a557604080517fc9c6539600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b15801561507857600080fd5b505af115801561508c573d6000803e3d6000fd5b505050506040513d60208110156150a257600080fd5b50505b6000806150d37f00000000000000000000000000000000000000000000000000000000000000008b8b6152ee565b915091508160001480156150e5575080155b156150f5578793508692506151e9565b6000615102898484614c96565b905087811161516f5785811015615164576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061542d6021913960400191505060405180910390fd5b8894509250826151e7565b600061517c898486614c96565b90508981111561518857fe5b878110156151e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806154bc6021913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b60008115806152115750508082028282828161520e57fe5b04145b61139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b8082018281101561139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b60008060006152fd8585614d8c565b50905061530b8686866140c6565b5060008061531a8888886140c6565b73ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561535f57600080fd5b505afa158015615373573d6000803e3d6000fd5b505050506040513d606081101561538957600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905073ffffffffffffffffffffffffffffffffffffffff878116908416146153d05780826153d3565b81815b9099909850965050505050505056fe44594f524c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e5444594f524c6962726172793a20494e53554646494349454e545f4c495155494449545944594f52526f757465723a20494e53554646494349454e545f425f414d4f554e5444594f524c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e5444594f52526f757465723a204558434553534956455f494e5055545f414d4f554e5444594f52526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e5444594f52526f757465723a20494e53554646494349454e545f415f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c45445472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544a26469706673582212209929c71497c5f2362cc34687db23b24ce82752197c277c5d062d625c72b8ea1b64736f6c63430006060033000000000000000000000000a1da7a7eb5a858da410de8fbc5092c2079b584130000000000000000000000004300000000000000000000000000000000000004
Deployed Bytecode
0x60806040526004361061018f5760003560e01c80638803dbee116100d6578063c45a01551161007f578063e8e3370011610059578063e8e3370014610c71578063f305d71914610cfe578063fb3bdb4114610d51576101d5565b8063c45a015514610b25578063d06ca61f14610b3a578063ded9382a14610bf1576101d5565b8063af2979eb116100b0578063af2979eb146109c8578063b6f9de9514610a28578063baa2abde14610abb576101d5565b80638803dbee146108af578063ad5c464814610954578063ad615dec14610992576101d5565b80634a25d94a11610138578063791ac94711610112578063791ac947146107415780637ff36ab5146107e657806385f8c25914610879576101d5565b80634a25d94a146105775780635b0d59841461061c5780635c11d7951461069c576101d5565b80631f00ca74116101695780631f00ca74146103905780632195995c1461044757806338ed1739146104d2576101d5565b806302751cec146101da578063054d50d41461025357806318cbafe51461029b576101d5565b366101d5573373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000430000000000000000000000000000000000000416146101d357fe5b005b600080fd5b3480156101e657600080fd5b5061023a600480360360c08110156101fd57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a00135610de4565b6040805192835260208301919091528051918290030190f35b34801561025f57600080fd5b506102896004803603606081101561027657600080fd5b5080359060208101359060400135610f37565b60408051918252519081900360200190f35b3480156102a757600080fd5b50610340600480360360a08110156102be57600080fd5b8135916020810135918101906060810160408201356401000000008111156102e557600080fd5b8201836020820111156102f757600080fd5b8035906020019184602083028401116401000000008311171561031957600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135610f4c565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561037c578181015183820152602001610364565b505050509050019250505060405180910390f35b34801561039c57600080fd5b50610340600480360360408110156103b357600080fd5b813591908101906040810160208201356401000000008111156103d557600080fd5b8201836020820111156103e757600080fd5b8035906020019184602083028401116401000000008311171561040957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611364945050505050565b34801561045357600080fd5b5061023a600480360361016081101561046b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff610100820135169061012081013590610140013561139a565b3480156104de57600080fd5b50610340600480360360a08110156104f557600080fd5b81359160208101359181019060608101604082013564010000000081111561051c57600080fd5b82018360208201111561052e57600080fd5b8035906020019184602083028401116401000000008311171561055057600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356114d8565b34801561058357600080fd5b50610340600480360360a081101561059a57600080fd5b8135916020810135918101906060810160408201356401000000008111156105c157600080fd5b8201836020820111156105d357600080fd5b803590602001918460208302840111640100000000831117156105f557600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135611669565b34801561062857600080fd5b50610289600480360361014081101561064057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356118ac565b3480156106a857600080fd5b506101d3600480360360a08110156106bf57600080fd5b8135916020810135918101906060810160408201356401000000008111156106e657600080fd5b8201836020820111156106f857600080fd5b8035906020019184602083028401116401000000008311171561071a57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356119fe565b34801561074d57600080fd5b506101d3600480360360a081101561076457600080fd5b81359160208101359181019060608101604082013564010000000081111561078b57600080fd5b82018360208201111561079d57600080fd5b803590602001918460208302840111640100000000831117156107bf57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135611d97565b610340600480360360808110156107fc57600080fd5b8135919081019060408101602082013564010000000081111561081e57600080fd5b82018360208201111561083057600080fd5b8035906020019184602083028401116401000000008311171561085257600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612105565b34801561088557600080fd5b506102896004803603606081101561089c57600080fd5b5080359060208101359060400135612525565b3480156108bb57600080fd5b50610340600480360360a08110156108d257600080fd5b8135916020810135918101906060810160408201356401000000008111156108f957600080fd5b82018360208201111561090b57600080fd5b8035906020019184602083028401116401000000008311171561092d57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612532565b34801561096057600080fd5b50610969612671565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561099e57600080fd5b50610289600480360360608110156109b557600080fd5b5080359060208101359060400135612695565b3480156109d457600080fd5b50610289600480360360c08110156109eb57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a001356126a2565b6101d360048036036080811015610a3e57600080fd5b81359190810190604081016020820135640100000000811115610a6057600080fd5b820183602082011115610a7257600080fd5b80359060200191846020830284011164010000000083111715610a9457600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612882565b348015610ac757600080fd5b5061023a600480360360e0811015610ade57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612d65565b348015610b3157600080fd5b5061096961306f565b348015610b4657600080fd5b5061034060048036036040811015610b5d57600080fd5b81359190810190604081016020820135640100000000811115610b7f57600080fd5b820183602082011115610b9157600080fd5b80359060200191846020830284011164010000000083111715610bb357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550613093945050505050565b348015610bfd57600080fd5b5061023a6004803603610140811015610c1557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356130c0565b348015610c7d57600080fd5b50610ce06004803603610100811015610c9557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135613218565b60408051938452602084019290925282820152519081900360600190f35b610ce0600480360360c0811015610d1457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a001356133a7565b61034060048036036080811015610d6757600080fd5b81359190810190604081016020820135640100000000811115610d8957600080fd5b820183602082011115610d9b57600080fd5b80359060200191846020830284011164010000000083111715610dbd57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356136d3565b6000808242811015610e5757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f44594f52526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b610e86897f00000000000000000000000043000000000000000000000000000000000000048a8a8a308a612d65565b9093509150610e96898685613b22565b7f000000000000000000000000430000000000000000000000000000000000000473ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610f0957600080fd5b505af1158015610f1d573d6000803e3d6000fd5b50505050610f2b8583613cff565b50965096945050505050565b6000610f44848484613e3c565b949350505050565b60608142811015610fbe57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f44594f52526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000043000000000000000000000000000000000000041686867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061102357fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110c257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f44594f52526f757465723a20494e56414c49445f504154480000000000000000604482015290519081900360640190fd5b6111207f000000000000000000000000a1da7a7eb5a858da410de8fbc5092c2079b5841389888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f6092505050565b9150868260018451038151811061113357fe5b60200260200101511015611192576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806154966026913960400191505060405180910390fd5b611257868660008181106111a257fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff163361123d7f000000000000000000000000a1da7a7eb5a858da410de8fbc5092c2079b584138a8a60008181106111f157fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168b8b600181811061121b57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff166140c6565b8560008151811061124a57fe5b6020026020010151614188565b61129682878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250614358915050565b7f000000000000000000000000430000000000000000000000000000000000000473ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836001855103815181106112e257fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561132057600080fd5b505af1158015611334573d6000803e3d6000fd5b50505050611359848360018551038151811061134c57fe5b6020026020010151613cff565b509695505050505050565b60606113917f000000000000000000000000a1da7a7eb5a858da410de8fbc5092c2079b5841384846145df565b90505b92915050565b60008060006113ca7f000000000000000000000000a1da7a7eb5a858da410de8fbc5092c2079b584138f8f6140c6565b90506000876113d9578c6113fb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c48101889052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b15801561149757600080fd5b505af11580156114ab573d6000803e3d6000fd5b505050506114be8f8f8f8f8f8f8f612d65565b809450819550505050509b509b9950505050505050505050565b6060814281101561154a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f44594f52526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b6115a87f000000000000000000000000a1da7a7eb5a858da410de8fbc5092c2079b5841389888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f6092505050565b915086826001845103815181106115bb57fe5b6020026020010151101561161a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806154966026913960400191505060405180910390fd5b61162a868660008181106111a257fe5b61135982878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250614358915050565b606081428110156116db57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f44594f52526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000043000000000000000000000000000000000000041686867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061174057fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117df57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f44594f52526f757465723a20494e56414c49445f504154480000000000000000604482015290519081900360640190fd5b61183d7f000000000000000000000000a1da7a7eb5a858da410de8fbc5092c2079b58413898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506145df92505050565b9150868260008151811061184d57fe5b60200260200101511115611192576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806154746022913960400191505060405180910390fd5b6000806118fa7f000000000000000000000000a1da7a7eb5a858da410de8fbc5092c2079b584138d7f00000000000000000000000043000000000000000000000000000000000000046140c6565b9050600086611909578b61192b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c48101879052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b1580156119c757600080fd5b505af11580156119db573d6000803e3d6000fd5b505050506119ed8d8d8d8d8d8d6126a2565b9d9c50505050505050505050505050565b8042811015611a6e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f44594f52526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b611afd85856000818110611a7e57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1633611af77f000000000000000000000000a1da7a7eb5a858da410de8fbc5092c2079b5841389896000818110611acd57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168a8a600181811061121b57fe5b8a614188565b600085857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611b2d57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611bc657600080fd5b505afa158015611bda573d6000803e3d6000fd5b505050506040513d6020811015611bf057600080fd5b50516040805160208881028281018201909352888252929350611c3292909189918991829185019084908082843760009201919091525088925061476d915050565b86611d368288887fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611c6557fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cfe57600080fd5b505afa158015611d12573d6000803e3d6000fd5b505050506040513d6020811015611d2857600080fd5b50519063ffffffff614b0016565b1015611d8d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806154966026913960400191505060405180910390fd5b5050505050505050565b8042811015611e0757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f44594f52526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000043000000000000000000000000000000000000041685857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611e6c57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f0b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f44594f52526f757465723a20494e56414c49445f504154480000000000000000604482015290519081900360640190fd5b611f1b85856000818110611a7e57fe5b611f5985858080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525030925061476d915050565b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905160009173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000430000000000000000000000000000000000000416916370a0823191602480820192602092909190829003018186803b158015611fe957600080fd5b505afa158015611ffd573d6000803e3d6000fd5b505050506040513d602081101561201357600080fd5b5051905086811015612070576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806154966026913960400191505060405180910390fd5b7f000000000000000000000000430000000000000000000000000000000000000473ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156120e357600080fd5b505af11580156120f7573d6000803e3d6000fd5b50505050611d8d8482613cff565b6060814281101561217757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f44594f52526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000430000000000000000000000000000000000000473ffffffffffffffffffffffffffffffffffffffff16868660008181106121bb57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461225a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f44594f52526f757465723a20494e56414c49445f504154480000000000000000604482015290519081900360640190fd5b6122b87f000000000000000000000000a1da7a7eb5a858da410de8fbc5092c2079b5841334888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f6092505050565b915086826001845103815181106122cb57fe5b6020026020010151101561232a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806154966026913960400191505060405180910390fd5b7f000000000000000000000000430000000000000000000000000000000000000473ffffffffffffffffffffffffffffffffffffffff1663d0e30db08360008151811061237357fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b1580156123a657600080fd5b505af11580156123ba573d6000803e3d6000fd5b50505050507f000000000000000000000000430000000000000000000000000000000000000473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61242c7f000000000000000000000000a1da7a7eb5a858da410de8fbc5092c2079b5841389896000818110611acd57fe5b8460008151811061243957fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156124aa57600080fd5b505af11580156124be573d6000803e3d6000fd5b505050506040513d60208110156124d457600080fd5b50516124dc57fe5b61251b82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250614358915050565b5095945050505050565b6000610f44848484614b72565b606081428110156125a457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f44594f52526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b6126027f000000000000000000000000a1da7a7eb5a858da410de8fbc5092c2079b58413898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506145df92505050565b9150868260008151811061261257fe5b6020026020010151111561161a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806154746022913960400191505060405180910390fd5b7f000000000000000000000000430000000000000000000000000000000000000481565b6000610f44848484614c96565b6000814281101561271457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f44594f52526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b612743887f00000000000000000000000043000000000000000000000000000000000000048989893089612d65565b604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290519194506127ed92508a91879173ffffffffffffffffffffffffffffffffffffffff8416916370a0823191602480820192602092909190829003018186803b1580156127bc57600080fd5b505afa1580156127d0573d6000803e3d6000fd5b505050506040513d60208110156127e657600080fd5b5051613b22565b7f000000000000000000000000430000000000000000000000000000000000000473ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561286057600080fd5b505af1158015612874573d6000803e3d6000fd5b505050506113598483613cff565b80428110156128f257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f44594f52526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000430000000000000000000000000000000000000473ffffffffffffffffffffffffffffffffffffffff168585600081811061293657fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129d557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f44594f52526f757465723a20494e56414c49445f504154480000000000000000604482015290519081900360640190fd5b60003490507f000000000000000000000000430000000000000000000000000000000000000473ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015612a4257600080fd5b505af1158015612a56573d6000803e3d6000fd5b50505050507f000000000000000000000000430000000000000000000000000000000000000473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb612ac87f000000000000000000000000a1da7a7eb5a858da410de8fbc5092c2079b5841389896000818110611acd57fe5b836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612b3257600080fd5b505af1158015612b46573d6000803e3d6000fd5b505050506040513d6020811015612b5c57600080fd5b5051612b6457fe5b600086867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110612b9457fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612c2d57600080fd5b505afa158015612c41573d6000803e3d6000fd5b505050506040513d6020811015612c5757600080fd5b50516040805160208981028281018201909352898252929350612c999290918a918a91829185019084908082843760009201919091525089925061476d915050565b87611d368289897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110612ccc57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231896040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cfe57600080fd5b6000808242811015612dd857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f44594f52526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b6000612e057f000000000000000000000000a1da7a7eb5a858da410de8fbc5092c2079b584138c8c6140c6565b604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b158015612e8657600080fd5b505af1158015612e9a573d6000803e3d6000fd5b505050506040513d6020811015612eb057600080fd5b5050604080517f89afcb4400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b158015612f2357600080fd5b505af1158015612f37573d6000803e3d6000fd5b505050506040513d6040811015612f4d57600080fd5b50805160209091015190925090506000612f678e8e614d8c565b5090508073ffffffffffffffffffffffffffffffffffffffff168e73ffffffffffffffffffffffffffffffffffffffff1614612fa4578183612fa7565b82825b90975095508a871015613005576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806154bc6021913960400191505060405180910390fd5b8986101561305e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061542d6021913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000a1da7a7eb5a858da410de8fbc5092c2079b5841381565b60606113917f000000000000000000000000a1da7a7eb5a858da410de8fbc5092c2079b584138484613f60565b60008060006131107f000000000000000000000000a1da7a7eb5a858da410de8fbc5092c2079b584138e7f00000000000000000000000043000000000000000000000000000000000000046140c6565b905060008761311f578c613141565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c48101889052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b1580156131dd57600080fd5b505af11580156131f1573d6000803e3d6000fd5b505050506132038e8e8e8e8e8e610de4565b909f909e509c50505050505050505050505050565b6000806000834281101561328d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f44594f52526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b61329b8c8c8c8c8c8c614ef5565b909450925060006132cd7f000000000000000000000000a1da7a7eb5a858da410de8fbc5092c2079b584138e8e6140c6565b90506132db8d338388614188565b6132e78c338387614188565b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561336657600080fd5b505af115801561337a573d6000803e3d6000fd5b505050506040513d602081101561339057600080fd5b5051949d939c50939a509198505050505050505050565b6000806000834281101561341c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f44594f52526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b61344a8a7f00000000000000000000000043000000000000000000000000000000000000048b348c8c614ef5565b9094509250600061349c7f000000000000000000000000a1da7a7eb5a858da410de8fbc5092c2079b584138c7f00000000000000000000000043000000000000000000000000000000000000046140c6565b90506134aa8b338388614188565b7f000000000000000000000000430000000000000000000000000000000000000473ffffffffffffffffffffffffffffffffffffffff1663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b15801561351257600080fd5b505af1158015613526573d6000803e3d6000fd5b50505050507f000000000000000000000000430000000000000000000000000000000000000473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb82866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156135d257600080fd5b505af11580156135e6573d6000803e3d6000fd5b505050506040513d60208110156135fc57600080fd5b505161360457fe5b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561368357600080fd5b505af1158015613697573d6000803e3d6000fd5b505050506040513d60208110156136ad57600080fd5b50519250348410156136c5576136c533853403613cff565b505096509650969350505050565b6060814281101561374557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f44594f52526f757465723a204558504952454400000000000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000430000000000000000000000000000000000000473ffffffffffffffffffffffffffffffffffffffff168686600081811061378957fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461382857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f44594f52526f757465723a20494e56414c49445f504154480000000000000000604482015290519081900360640190fd5b6138867f000000000000000000000000a1da7a7eb5a858da410de8fbc5092c2079b58413888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506145df92505050565b9150348260008151811061389657fe5b602002602001015111156138f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806154746022913960400191505060405180910390fd5b7f000000000000000000000000430000000000000000000000000000000000000473ffffffffffffffffffffffffffffffffffffffff1663d0e30db08360008151811061393e57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561397157600080fd5b505af1158015613985573d6000803e3d6000fd5b50505050507f000000000000000000000000430000000000000000000000000000000000000473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6139f77f000000000000000000000000a1da7a7eb5a858da410de8fbc5092c2079b5841389896000818110611acd57fe5b84600081518110613a0457fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015613a7557600080fd5b505af1158015613a89573d6000803e3d6000fd5b505050506040513d6020811015613a9f57600080fd5b5051613aa757fe5b613ae682878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250614358915050565b81600081518110613af357fe5b602002602001015134111561251b5761251b3383600081518110613b1357fe5b60200260200101513403613cff565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000178152925182516000946060949389169392918291908083835b60208310613bf857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613bbb565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613c5a576040519150601f19603f3d011682016040523d82523d6000602084013e613c5f565b606091505b5091509150818015613c8d575080511580613c8d5750808060200190516020811015613c8a57600080fd5b50515b613cf857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b60208310613d7657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613d39565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613dd8576040519150601f19603f3d011682016040523d82523d6000602084013e613ddd565b606091505b5050905080613e37576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806154dd6023913960400191505060405180910390fd5b505050565b6000808411613e96576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061544e6026913960400191505060405180910390fd5b600083118015613ea65750600082115b613efb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061540a6023913960400191505060405180910390fd5b6000613f0f856126f763ffffffff6151f616565b90506000613f23828563ffffffff6151f616565b90506000613f4983613f3d8861271063ffffffff6151f616565b9063ffffffff61527c16565b9050808281613f5457fe5b04979650505050505050565b6060600282511015613fd357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f44594f524c6962726172793a20494e56414c49445f5041544800000000000000604482015290519081900360640190fd5b815167ffffffffffffffff81118015613feb57600080fd5b50604051908082528060200260200182016040528015614015578160200160208202803683370190505b509050828160008151811061402657fe5b60200260200101818152505060005b60018351038110156140be576000806140788786858151811061405457fe5b602002602001015187866001018151811061406b57fe5b60200260200101516152ee565b9150915061409a84848151811061408b57fe5b60200260200101518383613e3c565b8484600101815181106140a957fe5b60209081029190910101525050600101614035565b509392505050565b60008060006140d58585614d8c565b604080517fe6a4390500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80851660048301528084166024830152915193955091935088169163e6a4390591604480820192602092909190829003018186803b15801561415257600080fd5b505afa158015614166573d6000803e3d6000fd5b505050506040513d602081101561417c57600080fd5b50519695505050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017815292518251600094606094938a169392918291908083835b6020831061426657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101614229565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146142c8576040519150601f19603f3d011682016040523d82523d6000602084013e6142cd565b606091505b50915091508180156142fb5750805115806142fb57508080602001905160208110156142f857600080fd5b50515b614350576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806155006024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156145d95760008084838151811061437657fe5b602002602001015185846001018151811061438d57fe5b60200260200101519150915060006143a58383614d8c565b50905060008785600101815181106143b957fe5b602002602001015190506000808373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161461440157826000614405565b6000835b91509150600060028a5103881061441c578861445d565b61445d7f000000000000000000000000a1da7a7eb5a858da410de8fbc5092c2079b58413878c8b6002018151811061445057fe5b60200260200101516140c6565b905061448a7f000000000000000000000000a1da7a7eb5a858da410de8fbc5092c2079b5841388886140c6565b73ffffffffffffffffffffffffffffffffffffffff1663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156144d4576020820181803683370190505b506040518563ffffffff1660e01b8152600401808581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561455f578181015183820152602001614547565b50505050905090810190601f16801561458c5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156145ae57600080fd5b505af11580156145c2573d6000803e3d6000fd5b50506001909901985061435b975050505050505050565b50505050565b606060028251101561465257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f44594f524c6962726172793a20494e56414c49445f5041544800000000000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561466a57600080fd5b50604051908082528060200260200182016040528015614694578160200160208202803683370190505b50905082816001835103815181106146a857fe5b602090810291909101015281517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff015b80156140be57600080614708878660018603815181106146f457fe5b602002602001015187868151811061406b57fe5b9150915061472a84848151811061471b57fe5b60200260200101518383614b72565b84600185038151811061473957fe5b602090810291909101015250507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016146d8565b60005b6001835103811015613e375760008084838151811061478b57fe5b60200260200101518584600101815181106147a257fe5b60200260200101519150915060006147ba8383614d8c565b50905060006147ea7f000000000000000000000000a1da7a7eb5a858da410de8fbc5092c2079b5841385856140c6565b90506000806000808473ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561483857600080fd5b505afa15801561484c573d6000803e3d6000fd5b505050506040513d606081101561486257600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905060008073ffffffffffffffffffffffffffffffffffffffff8a8116908916146148ac5782846148af565b83835b91509150614934828b73ffffffffffffffffffffffffffffffffffffffff166370a082318a6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cfe57600080fd5b9550614941868383613e3c565b9450505050506000808573ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161461498557826000614989565b6000835b91509150600060028c51038a106149a0578a6149d4565b6149d47f000000000000000000000000a1da7a7eb5a858da410de8fbc5092c2079b58413898e8d6002018151811061445057fe5b60408051600080825260208201928390527f022c0d9f000000000000000000000000000000000000000000000000000000008352602482018781526044830187905273ffffffffffffffffffffffffffffffffffffffff8086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015614a84578181015183820152602001614a6c565b50505050905090810190601f168015614ab15780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015614ad357600080fd5b505af1158015614ae7573d6000803e3d6000fd5b50506001909b019a506147709950505050505050505050565b8082038281111561139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b6000808411614bcc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806153e36027913960400191505060405180910390fd5b600083118015614bdc5750600082115b614c31576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061540a6023913960400191505060405180910390fd5b6000614c55612710614c49868863ffffffff6151f616565b9063ffffffff6151f616565b90506000614c6f6126f7614c49868963ffffffff614b0016565b9050614c8c6001828481614c7f57fe5b049063ffffffff61527c16565b9695505050505050565b6000808411614d0657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f44594f524c6962726172793a20494e53554646494349454e545f414d4f554e54604482015290519081900360640190fd5b600083118015614d165750600082115b614d6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061540a6023913960400191505060405180910390fd5b82614d7c858463ffffffff6151f616565b81614d8357fe5b04949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415614e2a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f44594f524c6962726172793a204944454e544943414c5f414444524553534553604482015290519081900360640190fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610614e64578284614e67565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216614eee57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f44594f524c6962726172793a205a45524f5f4144445245535300000000000000604482015290519081900360640190fd5b9250929050565b604080517fe6a4390500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015287811660248301529151600092839283927f000000000000000000000000a1da7a7eb5a858da410de8fbc5092c2079b584139092169163e6a4390591604480820192602092909190829003018186803b158015614f9557600080fd5b505afa158015614fa9573d6000803e3d6000fd5b505050506040513d6020811015614fbf57600080fd5b505173ffffffffffffffffffffffffffffffffffffffff1614156150a557604080517fc9c6539600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a81166004830152898116602483015291517f000000000000000000000000a1da7a7eb5a858da410de8fbc5092c2079b584139092169163c9c65396916044808201926020929091908290030181600087803b15801561507857600080fd5b505af115801561508c573d6000803e3d6000fd5b505050506040513d60208110156150a257600080fd5b50505b6000806150d37f000000000000000000000000a1da7a7eb5a858da410de8fbc5092c2079b584138b8b6152ee565b915091508160001480156150e5575080155b156150f5578793508692506151e9565b6000615102898484614c96565b905087811161516f5785811015615164576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061542d6021913960400191505060405180910390fd5b8894509250826151e7565b600061517c898486614c96565b90508981111561518857fe5b878110156151e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806154bc6021913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b60008115806152115750508082028282828161520e57fe5b04145b61139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b8082018281101561139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b60008060006152fd8585614d8c565b50905061530b8686866140c6565b5060008061531a8888886140c6565b73ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561535f57600080fd5b505afa158015615373573d6000803e3d6000fd5b505050506040513d606081101561538957600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905073ffffffffffffffffffffffffffffffffffffffff878116908416146153d05780826153d3565b81815b9099909850965050505050505056fe44594f524c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e5444594f524c6962726172793a20494e53554646494349454e545f4c495155494449545944594f52526f757465723a20494e53554646494349454e545f425f414d4f554e5444594f524c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e5444594f52526f757465723a204558434553534956455f494e5055545f414d4f554e5444594f52526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e5444594f52526f757465723a20494e53554646494349454e545f415f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c45445472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544a26469706673582212209929c71497c5f2362cc34687db23b24ce82752197c277c5d062d625c72b8ea1b64736f6c63430006060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000a1da7a7eb5a858da410de8fbc5092c2079b584130000000000000000000000004300000000000000000000000000000000000004
-----Decoded View---------------
Arg [0] : _factory (address): 0xA1da7a7eB5A858da410dE8FBC5092c2079B58413
Arg [1] : _WETH (address): 0x4300000000000000000000000000000000000004
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000a1da7a7eb5a858da410de8fbc5092c2079b58413
Arg [1] : 0000000000000000000000004300000000000000000000000000000000000004
Deployed Bytecode Sourcemap
16010:18192:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16475:10;:18;16489:4;16475:18;;16468:26;;;;16010:18192;;12:1:-1;9;2:12;20540:673:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20540:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;20540:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;33166:257;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33166:257:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33166:257:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;27589:830;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27589:830:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27589:830:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;27589:830:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27589:830:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;27589:830:0;;-1:-1:-1;27589:830:0;-1:-1:-1;27589:830: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;27589:830:0;;;;;;;;;;;;;;;;;33951:248;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33951:248:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;33951:248:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;33951:248:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33951:248:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;33951:248:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;33951:248:0;;-1:-1:-1;33951:248:0;;-1:-1:-1;;;;;33951:248:0:i;21219:667::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21219:667:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;21219:667:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;24876:613::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24876:613:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;24876:613:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;24876:613:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;24876:613:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;24876:613:0;;-1:-1:-1;24876:613:0;-1:-1:-1;24876:613:0;;;;;;;;;:::i;26775:808::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26775:808:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26775:808:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;26775:808:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26775:808:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;26775:808:0;;-1:-1:-1;26775:808:0;-1:-1:-1;26775:808:0;;;;;;;;;:::i;23336:708::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23336:708:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;23336:708:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;30552:704::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30552:704:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30552:704:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;30552:704:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30552:704:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;30552:704:0;;-1:-1:-1;30552:704:0;-1:-1:-1;30552:704:0;;;;;;;;;:::i;32103:828::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32103:828:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;32103:828:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;32103:828:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;32103:828:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;32103:828:0;;-1:-1:-1;32103:828:0;-1:-1:-1;32103:828:0;;;;;;;;;:::i;26092:677::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26092:677:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;26092:677:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26092:677:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;26092:677:0;;-1:-1:-1;26092:677:0;-1:-1:-1;26092:677:0;;;;;;;;;:::i;33431:256::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33431:256:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33431:256:0;;;;;;;;;;;;:::i;25495:591::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25495:591:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25495:591:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;25495:591:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25495:591:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;25495:591:0;;-1:-1:-1;25495:591:0;-1:-1:-1;25495:591:0;;;;;;;;;:::i;16134:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16134:38:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32975:183;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32975:183:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;32975:183:0;;;;;;;;;;;;:::i;22630:700::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22630:700:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;22630:700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31262:835::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31262:835:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;31262:835:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31262:835:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;31262:835:0;;-1:-1:-1;31262:835:0;-1:-1:-1;31262:835:0;;;;;;;;;:::i;19699:::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19699:835:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;19699:835:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16086:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16086:41:0;;;:::i;33695:248::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33695:248:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;33695:248:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;33695:248:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33695:248:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;33695:248:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;33695:248:0;;-1:-1:-1;33695:248:0;;-1:-1:-1;;;;;33695:248:0:i;21892:659::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21892:659:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;21892:659:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17958:728::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17958:728:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;17958:728:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;18692:964;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;18692:964:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28425:790::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28425:790:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;28425:790:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28425:790:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;28425:790:0;;-1:-1:-1;28425:790:0;-1:-1:-1;28425:790:0;;;;;;;;;:::i;20540:673::-;20777:16;20795:14;20758:8;16243:15;16231:8;:27;;16223:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20849:196:::1;20879:5;20899:4;20918:9;20942:14;20971:12;21006:4;21026:8;20849:15;:196::i;:::-;20822:223:::0;;-1:-1:-1;20822:223:0;-1:-1:-1;21056:51:0::1;21084:5:::0;21091:2;20822:223;21056:27:::1;:51::i;:::-;21124:4;21118:20;;;21139:9;21118:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21118:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21118:31:0;;;;21160:45;21191:2;21195:9;21160:30;:45::i;:::-;20540:673:::0;;;;;;;;;;:::o;33166:257::-;33319:14;33358:57;33383:8;33393:9;33404:10;33358:24;:57::i;:::-;33351:64;33166:257;-1:-1:-1;;;;33166:257:0:o;27589:830::-;27803:21;27775:8;16243:15;16231:8;:27;;16223:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27850:29:::1;27875:4;27850:29;:4:::0;;27855:15;;;27850:21;;::::1;;;;;;;;;;;;;:29;;;27842:66;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;27929:50;27955:7;27964:8;27974:4;;27929:50;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27929:25:0::1;::::0;-1:-1:-1;;;27929:50:0:i:1;:::-;27919:60;;28029:12;27998:7;28023:1;28006:7;:14;:18;27998:27;;;;;;;;;;;;;;:43;;27990:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28095:136;28141:4;;28146:1;28141:7;;;;;;;;;;;;;;;28150:10;28162:46;28182:7;28191:4;;28196:1;28191:7;;;;;;;;;;;;;;;28200:4;;28205:1;28200:7;;;;;;;;;;;;;;;28162:19;:46::i;:::-;28210:7;28218:1;28210:10;;;;;;;;;;;;;;28095:31;:136::i;:::-;28242:35;28248:7;28257:4;;28242:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28271:4:0::1;::::0;-1:-1:-1;28242:5:0::1;::::0;-1:-1:-1;;28242:35:0:i:1;:::-;28294:4;28288:20;;;28309:7;28334:1;28317:7;:14;:18;28309:27;;;;;;;;;;;;;;28288:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28288:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28288:49:0;;;;28348:63;28379:2;28383:7;28408:1;28391:7;:14;:18;28383:27;;;;;;;;;;;;;;28348:30;:63::i;:::-;27589:830:::0;;;;;;;;;:::o;33951:248::-;34095:21;34141:50;34166:7;34175:9;34186:4;34141:24;:50::i;:::-;34134:57;;33951:248;;;;;:::o;21219:667::-;21525:12;21539;21564;21579:44;21599:7;21608:6;21616;21579:19;:44::i;:::-;21564:59;;21634:10;21647;:33;;21671:9;21647:33;;;21665:2;21647:33;21691:75;;;;;;21714:10;21691:75;;;;21734:4;21691:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21634:46;;-1:-1:-1;21691:22:0;;;;;;:75;;;;;-1:-1:-1;;21691:75:0;;;;;;;;-1:-1:-1;21691:22:0;:75;;;2:2:-1;;;;27:1;24;17:12;2:2;21691:75:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21691:75:0;;;;21798:80;21814:6;21822;21830:9;21841:10;21853;21865:2;21869:8;21798:15;:80::i;:::-;21777:101;;;;;;;;21219:667;;;;;;;;;;;;;;;;:::o;24876:613::-;25100:21;25081:8;16243:15;16231:8;:27;;16223:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25144:50:::1;25170:7;25179:8;25189:4;;25144:50;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25144:25:0::1;::::0;-1:-1:-1;;;25144:50:0:i:1;:::-;25134:60;;25244:12;25213:7;25238:1;25221:7;:14;:18;25213:27;;;;;;;;;;;;;;:43;;25205:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25310:136;25356:4;;25361:1;25356:7;;;;;;25310:136;25457:24;25463:7;25472:4;;25457:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25478:2:0;;-1:-1:-1;25457:5:0::1;::::0;-1:-1:-1;;25457:24:0:i:1;26775:808::-:0;26989:21;26961:8;16243:15;16231:8;:27;;16223:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27036:29:::1;27061:4;27036:29;:4:::0;;27041:15;;;27036:21;;::::1;;;;;;;;;;;;;:29;;;27028:66;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;27115:50;27140:7;27149:9;27160:4;;27115:50;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27115:24:0::1;::::0;-1:-1:-1;;;27115:50:0:i:1;:::-;27105:60;;27198:11;27184:7;27192:1;27184:10;;;;;;;;;;;;;;:25;;27176:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23336:708:::0;23654:14;23681:12;23696:41;23716:7;23725:5;23732:4;23696:19;:41::i;:::-;23681:56;;23748:10;23761;:33;;23785:9;23761:33;;;23779:2;23761:33;23805:75;;;;;;23828:10;23805:75;;;;23848:4;23805:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23748:46;;-1:-1:-1;23805:22:0;;;;;;:75;;;;;-1:-1:-1;;23805:75:0;;;;;;;;-1:-1:-1;23805:22:0;:75;;;2:2:-1;;;;27:1;24;17:12;2:2;23805:75:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23805:75:0;;;;23903:133;23965:5;23972:9;23983:14;23999:12;24013:2;24017:8;23903:47;:133::i;:::-;23891:145;23336:708;-1:-1:-1;;;;;;;;;;;;;23336:708:0:o;30552:704::-;30786:8;16243:15;16231:8;:27;;16223:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30807:134:::1;30853:4;;30858:1;30853:7;;;;;;;;;;;;;;;30862:10;30874:46;30894:7;30903:4;;30908:1;30903:7;;;;;;;;;;;;;;;30912:4;;30917:1;30912:7;;;;;;30874:46;30922:8;30807:31;:134::i;:::-;30952:18;30980:4:::0;;30985:15;;;30980:21;;::::1;;;;;;;;;;;;;30973:39;;;31013:2;30973:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30973:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30973:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;30973:43:0;31027:44:::1;::::0;;30973:43:::1;31027:44:::0;;::::1;::::0;;;;;;;;;;;30973:43;;-1:-1:-1;31027:44:0::1;::::0;;;31062:4;;;;;;31027:44;::::1;::::0;31062:4;;31027:44;31062:4;31027:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31068:2:0;;-1:-1:-1;31027:34:0::1;::::0;-1:-1:-1;;31027:44:0:i:1;:::-;31170:12:::0;31104:62:::1;31152:13:::0;31111:4;;31116:15;;;31111:21;;::::1;;;;;;;;;;;;;31104:39;;;31144:2;31104:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31104:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31104:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31104:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;31082:166;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16293:1;30552:704:::0;;;;;;;:::o;32103:828::-;32370:8;16243:15;16231:8;:27;;16223:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32404:29:::1;32429:4;32404:29;:4:::0;;32409:15;;;32404:21;;::::1;;;;;;;;;;;;;:29;;;32396:66;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;32473:134;32519:4;;32524:1;32519:7;;;;;;32473:134;32618:55;32653:4;;32618:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32667:4:0::1;::::0;-1:-1:-1;32618:34:0::1;::::0;-1:-1:-1;;32618:55:0:i:1;:::-;32701:37;::::0;;;;;32732:4:::1;32701:37;::::0;::::1;::::0;;;32684:14:::1;::::0;32701:22:::1;32708:4;32701:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;32701:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32701:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32701:37:0;;-1:-1:-1;32757:25:0;;::::1;;32749:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32842:4;32836:20;;;32857:9;32836:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32836:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32836:31:0;;;;32878:45;32909:2;32913:9;32878:30;:45::i;26092:677::-:0;26308:21;26280:8;16243:15;16231:8;:27;;16223:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26366:4:::1;26355:15;;:4;;26360:1;26355:7;;;;;;;;;;;;;;;:15;;;26347:52;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;26420:51;26446:7;26455:9;26466:4;;26420:51;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26420:25:0::1;::::0;-1:-1:-1;;;26420:51:0:i:1;:::-;26410:61;;26521:12;26490:7;26515:1;26498:7;:14;:18;26490:27;;;;;;;;;;;;;;:43;;26482:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26593:4;26587:19;;;26614:7;26622:1;26614:10;;;;;;;;;;;;;;26587:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26587:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26587:40:0;;;;;26651:4;26645:20;;;26666:46;26686:7;26695:4;;26700:1;26695:7;;;;;;26666:46;26714:7;26722:1;26714:10;;;;;;;;;;;;;;26645:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26645:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26645:80:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;26645:80:0;26638:88:::1;;;;26737:24;26743:7;26752:4;;26737:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26758:2:0;;-1:-1:-1;26737:5:0::1;::::0;-1:-1:-1;;26737:24:0:i:1;:::-;26092:677:::0;;;;;;;;:::o;33431:256::-;33584:13;33622:57;33646:9;33657;33668:10;33622:23;:57::i;25495:591::-;25719:21;25700:8;16243:15;16231:8;:27;;16223:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25763:50:::1;25788:7;25797:9;25808:4;;25763:50;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25763:24:0::1;::::0;-1:-1:-1;;;25763:50:0:i:1;:::-;25753:60;;25846:11;25832:7;25840:1;25832:10;;;;;;;;;;;;;;:25;;25824:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16134:38:::0;;;:::o;32975:183::-;33072:12;33104:46;33122:7;33131:8;33141;33104:17;:46::i;22630:700::-;22896:14;22877:8;16243:15;16231:8;:27;;16223:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22939:196:::1;22969:5;22989:4;23008:9;23032:14;23061:12;23096:4;23116:8;22939:15;:196::i;:::-;23185:38;::::0;;;;;23217:4:::1;23185:38;::::0;::::1;::::0;;;22923:212;;-1:-1:-1;23146:78:0::1;::::0;-1:-1:-1;23174:5:0;;23181:2;;23185:23:::1;::::0;::::1;::::0;::::1;::::0;:38;;;;;::::1;::::0;;;;;;;;;:23;:38;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;23185:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23185:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;23185:38:0;23146:27:::1;:78::i;:::-;23241:4;23235:20;;;23256:9;23235:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;23235:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23235:31:0;;;;23277:45;23308:2;23312:9;23277:30;:45::i;31262:835::-:0;31522:8;16243:15;16231:8;:27;;16223:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31567:4:::1;31556:15;;:4;;31561:1;31556:7;;;;;;;;;;;;;;;:15;;;31548:52;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;31611:13;31627:9;31611:25;;31653:4;31647:19;;;31674:8;31647:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31647:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31647:38:0;;;;;31709:4;31703:20;;;31724:46;31744:7;31753:4;;31758:1;31753:7;;;;;;31724:46;31772:8;31703:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31703:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31703:78:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31703:78:0;31696:86:::1;;;;31793:18;31821:4:::0;;31826:15;;;31821:21;;::::1;;;;;;;;;;;;;31814:39;;;31854:2;31814:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31814:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31814:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31814:43:0;31868:44:::1;::::0;;31814:43:::1;31868:44:::0;;::::1;::::0;;;;;;;;;;;31814:43;;-1:-1:-1;31868:44:0::1;::::0;;;31903:4;;;;;;31868:44;::::1;::::0;31903:4;;31868:44;31903:4;31868:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31909:2:0;;-1:-1:-1;31868:34:0::1;::::0;-1:-1:-1;;31868:44:0:i:1;:::-;32011:12:::0;31945:62:::1;31993:13:::0;31952:4;;31957:15;;;31952:21;;::::1;;;;;;;;;;;;;31945:39;;;31985:2;31945:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;19699:835:0::0;19953:12;19967;19934:8;16243:15;16231:8;:27;;16223:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19992:12:::1;20007:44;20027:7;20036:6;20044;20007:19;:44::i;:::-;20062:57;::::0;;;;;20091:10:::1;20062:57;::::0;::::1;::::0;:28:::1;::::0;::::1;:57:::0;;;;;;;;;;;;;;19992:59;;-1:-1:-1;20062:28:0;;::::1;::::0;:57;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;20062:28:0;:57;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;20062:57:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20062:57:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;20187:24:0::1;::::0;;;;;:20:::1;:24:::0;;::::1;;::::0;::::1;::::0;;;20157:12:::1;::::0;;;20187:20;;::::1;::::0;::::1;::::0;:24;;;;;;;;;;;20157:12;20187:20;:24;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;20187:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20187:24:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;20187:24:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;20187:24:0;-1:-1:-1;20223:14:0::1;20242:38;20265:6:::0;20273;20242:22:::1;:38::i;:::-;20222:58;;;20322:6;20312:16;;:6;:16;;;:58;;20353:7;20362;20312:58;;;20332:7;20341;20312:58;20291:79:::0;;-1:-1:-1;20291:79:0;-1:-1:-1;20389:21:0;;::::1;;20381:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20478:10;20467:7;:21;;20459:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16293:1;;;;19699:835:::0;;;;;;;;;;;:::o;16086:41::-;;;:::o;33695:248::-;33839:21;33885:50;33911:7;33920:8;33930:4;33885:25;:50::i;21892:659::-;22181:16;22199:14;22226:12;22241:41;22261:7;22270:5;22277:4;22241:19;:41::i;:::-;22226:56;;22293:10;22306;:33;;22330:9;22306:33;;;22324:2;22306:33;22350:75;;;;;;22373:10;22350:75;;;;22393:4;22350:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22293:46;;-1:-1:-1;22350:22:0;;;;;;:75;;;;;-1:-1:-1;;22350:75:0;;;;;;;;-1:-1:-1;22350:22:0;:75;;;2:2:-1;;;;27:1;24;17:12;2:2;22350:75:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22350:75:0;;;;22463:80;22482:5;22489:9;22500:14;22516:12;22530:2;22534:8;22463:18;:80::i;:::-;22436:107;;;;-1:-1:-1;21892:659:0;-1:-1:-1;;;;;;;;;;;;;21892:659:0:o;17958:728::-;18246:12;18260;18274:14;18227:8;16243:15;16231:8;:27;;16223:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18322:85:::1;18336:6;18344;18352:14;18368;18384:10;18396;18322:13;:85::i;:::-;18301:106:::0;;-1:-1:-1;18301:106:0;-1:-1:-1;18418:12:0::1;18433:44;18453:7;18462:6:::0;18470;18433:19:::1;:44::i;:::-;18418:59;;18488:66;18520:6;18528:10;18540:4;18546:7;18488:31;:66::i;:::-;18565;18597:6;18605:10;18617:4;18623:7;18565:31;:66::i;:::-;18664:4;18654:20;;;18675:2;18654:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18654:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18654:24:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;18654:24:0;17958:728;;;;-1:-1:-1;18654:24:0;;-1:-1:-1;17958:728:0;;-1:-1:-1;;;;;;;;;17958:728:0:o;18692:964::-;18945:16;18963:14;18979;18926:8;16243:15;16231:8;:27;;16223:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19033:176:::1;19061:5;19081:4;19100:18;19133:9;19157:14;19186:12;19033:13;:176::i;:::-;19006:203:::0;;-1:-1:-1;19006:203:0;-1:-1:-1;19220:12:0::1;19235:41;19255:7;19264:5:::0;19271:4:::1;19235:19;:41::i;:::-;19220:56;;19287:69;19319:5;19326:10;19338:4;19344:11;19287:31;:69::i;:::-;19373:4;19367:19;;;19394:9;19367:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19367:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19367:39:0;;;;;19430:4;19424:20;;;19445:4;19451:9;19424:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19424:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19424:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19424:37:0;19417:45:::1;;;;19495:4;19485:20;;;19506:2;19485:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19485:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19485:24:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19485:24:0;;-1:-1:-1;19560:9:0::1;:21:::0;-1:-1:-1;19556:92:0::1;;;19583:65;19614:10;19638:9;19626;:21;19583:30;:65::i;:::-;16293:1;18692:964:::0;;;;;;;;;;;:::o;28425:790::-;28638:21;28610:8;16243:15;16231:8;:27;;16223:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28696:4:::1;28685:15;;:4;;28690:1;28685:7;;;;;;;;;;;;;;;:15;;;28677:52;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;28750:50;28775:7;28784:9;28795:4;;28750:50;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28750:24:0::1;::::0;-1:-1:-1;;;28750:50:0:i:1;:::-;28740:60;;28833:9;28819:7;28827:1;28819:10;;;;;;;;;;;;;;:23;;28811:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28898:4;28892:19;;;28919:7;28927:1;28919:10;;;;;;;;;;;;;;28892:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28892:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28892:40:0;;;;;28956:4;28950:20;;;28971:46;28991:7;29000:4;;29005:1;29000:7;;;;;;28971:46;29019:7;29027:1;29019:10;;;;;;;;;;;;;;28950:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28950:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28950:80:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;28950:80:0;28943:88:::1;;;;29042:24;29048:7;29057:4;;29042:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29063:2:0;;-1:-1:-1;29042:5:0::1;::::0;-1:-1:-1;;29042:24:0:i:1;:::-;29129:7;29137:1;29129:10;;;;;;;;;;;;;;29117:9;:22;29113:94;;;29141:66;29172:10;29196:7;29204:1;29196:10;;;;;;;;;;;;;;29184:9;:22;29141:30;:66::i;670:361::-:0;865:45;;;854:10;865:45;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;865:45:0;;;;;;;25:18:-1;;61:17;;96:58;182:15;865:45:0;179:29:-1;160:49;;854:57:0;;;;819:12;;833:17;;854:10;;;;865:45;854:57;;;25:18:-1;854:57:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;854:57:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;818:93:0;;;;930:7;:57;;;;-1:-1:-1;942:11:0;;:16;;:44;;;973:4;962:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;962:24:0;942:44;922:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;670:361;;;;;:::o;1449:195::-;1557:12;;;1519;1557;;;;;;;;;1536:7;;;;1550:5;;1536:34;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1536:34: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;;1518:52:0;;;1589:7;1581:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1449:195;;;:::o;12538:509::-;12631:14;12677:1;12666:8;:12;12658:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12752:1;12740:9;:13;:31;;;;;12770:1;12757:10;:14;12740:31;12732:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12822:20;12845:18;:8;12858:4;12845:18;:12;:18;:::i;:::-;12822:41;-1:-1:-1;12874:14:0;12891:31;12822:41;12911:10;12891:31;:19;:31;:::i;:::-;12874:48;-1:-1:-1;12933:16:0;12952:41;12977:15;12952:20;:9;12966:5;12952:20;:13;:20;:::i;:::-;:24;:41;:24;:41;:::i;:::-;12933:60;;13028:11;13016:9;:23;;;;;;;12538:509;-1:-1:-1;;;;;;;12538:509:0:o;13714:506::-;13815:21;13872:1;13857:4;:11;:16;;13849:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13935:4;:11;13924:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13924:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;13924:23:0;;13914:33;;13971:8;13958:7;13966:1;13958:10;;;;;;;;;;;;;:21;;;;;13995:6;13990:223;14021:1;14007:4;:11;:15;14003:1;:19;13990:223;;;14045:14;14061:15;14080:42;14092:7;14101:4;14106:1;14101:7;;;;;;;;;;;;;;14110:4;14115:1;14119;14115:5;14110:11;;;;;;;;;;;;;;14080;:42::i;:::-;14044:78;;;;14154:47;14167:7;14175:1;14167:10;;;;;;;;;;;;;;14179:9;14190:10;14154:12;:47::i;:::-;14137:7;14145:1;14149;14145:5;14137:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;14024:3:0;;13990:223;;;;13714:506;;;;;:::o;10947:558::-;11036:12;11062:14;11078;11096:26;11107:6;11115;11096:10;:26::i;:::-;11142:45;;;;;;:29;:45;;;;;;;;;;;;;;;;11061:61;;-1:-1:-1;11061:61:0;;-1:-1:-1;11142:29:0;;;;;:45;;;;;;;;;;;;;;;:29;:45;;;2:2:-1;;;;27:1;24;17:12;2:2;11142:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11142:45:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;11142:45:0;;10947:558;-1:-1:-1;;;;;;10947:558:0:o;1039:402::-;1264:51;;;1253:10;1264:51;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1264:51:0;;;;;;;25:18:-1;;61:17;;96:58;182:15;1264:51:0;179:29:-1;160:49;;1253:63:0;;;;1218:12;;1232:17;;1253:10;;;;1264:51;1253:63;;;25:18:-1;1253:63:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1253:63:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;1217:99:0;;;;1335:7;:57;;;;-1:-1:-1;1347:11:0;;:16;;:44;;;1378:4;1367:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1367:24:0;1347:44;1327:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1039:402;;;;;;:::o;24155:715::-;24262:6;24257:606;24288:1;24274:4;:11;:15;24270:1;:19;24257:606;;;24312:13;24327:14;24346:4;24351:1;24346:7;;;;;;;;;;;;;;24355:4;24360:1;24364;24360:5;24355:11;;;;;;;;;;;;;;24311:56;;;;24383:14;24402:37;24425:5;24432:6;24402:22;:37::i;:::-;24382:57;;;24454:14;24471:7;24479:1;24483;24479:5;24471:14;;;;;;;;;;;;;;24454:31;;24501:15;24518;24546:6;24537:15;;:5;:15;;;:61;;24579:9;24595:1;24537:61;;;24561:1;24565:9;24537:61;24500:98;;;;24613:10;24644:1;24630:4;:11;:15;24626:1;:19;:77;;24700:3;24626:77;;;24648:49;24668:7;24677:6;24685:4;24690:1;24694;24690:5;24685:11;;;;;;;;;;;;;;24648:19;:49::i;:::-;24613:90;;24728:43;24748:7;24757:5;24764:6;24728:19;:43::i;:::-;24718:59;;;24796:10;24808;24820:2;24834:1;24824:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;24824:12:0;87:42:-1;143:17;;-1:-1;24824:12:0;;24718:133;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;24718:133:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24718:133:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;24291:3:0;;;;;-1:-1:-1;24257:606:0;;-1:-1:-1;;;;;;;;24257:606:0;;;24155:715;;;:::o;14301:527::-;14402:21;14459:1;14444:4;:11;:16;;14436:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14522:4;:11;14511:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14511:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;14511:23:0;;14501:33;;14575:9;14545:7;14570:1;14553:7;:14;:18;14545:27;;;;;;;;;;;;;;;;;:39;14609:11;;:15;;14595:226;14626:5;;14595:226;;14654:14;14670:15;14689:42;14701:7;14710:4;14719:1;14715;:5;14710:11;;;;;;;;;;;;;;14723:4;14728:1;14723:7;;;;;;;14689:42;14653:78;;;;14763:46;14775:7;14783:1;14775:10;;;;;;;;;;;;;;14787:9;14798:10;14763:11;:46::i;:::-;14746:7;14758:1;14754;:5;14746:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;14633:3:0;;14595:226;;29362:1184;29475:6;29470:1069;29501:1;29487:4;:11;:15;29483:1;:19;29470:1069;;;29525:13;29540:14;29559:4;29564:1;29559:7;;;;;;;;;;;;;;29568:4;29573:1;29577;29573:5;29568:11;;;;;;;;;;;;;;29524:56;;;;29596:14;29615:37;29638:5;29645:6;29615:22;:37::i;:::-;29595:57;;;29667:14;29694:43;29714:7;29723:5;29730:6;29694:19;:43::i;:::-;29667:71;;29753:16;29784:17;29872:13;29887;29905:4;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29905:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29905:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;29905:18:0;;;;;;;29871:52;;;;;-1:-1:-1;29871:52:0;;-1:-1:-1;29939:17:0;;29980:15;;;;;;;;:61;;30022:8;30032;29980:61;;;29999:8;30009;29980:61;29938:103;;;;30070:56;30113:12;30077:5;30070:23;;;30102:4;30070:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;30070:56:0;30056:70;;30156:66;30181:11;30194:12;30208:13;30156:24;:66::i;:::-;30141:81;;29470:1069;;;;30253:15;30270;30298:6;30289:15;;:5;:15;;;:67;;30334:12;30353:1;30289:67;;;30313:1;30317:12;30289:67;30252:104;;;;30371:10;30402:1;30388:4;:11;:15;30384:1;:19;:77;;30458:3;30384:77;;;30406:49;30426:7;30435:6;30443:4;30448:1;30452;30448:5;30443:11;;;;;;;30406:49;30514:12;;;30524:1;30514:12;;;;;;;;;;30476:51;;;;;;;;;;;;;;;:9;:51;;;;;;;;;;;;;;;;;;;;;;30371:90;;-1:-1:-1;30476:9:0;;;;;;30486:10;;30498;;30371:90;;30514:12;;30476:51;;;;;;;;30514:12;;30476:51;;;;30514: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;30476:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30476:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;29504:3:0;;;;;-1:-1:-1;29470:1069:0;;-1:-1:-1;;;;;;;;;;29470:1069:0;7645:129;7729:5;;;7724:16;;;;7716:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13168:464;13261:13;13307:1;13295:9;:13;13287:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13383:1;13371:9;:13;:31;;;;;13401:1;13388:10;:14;13371:31;13363:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13453:14;13470:35;13499:5;13470:24;:9;13484;13470:24;:13;:24;:::i;:::-;:28;:35;:28;:35;:::i;:::-;13453:52;-1:-1:-1;13516:16:0;13535:35;13565:4;13535:25;:10;13550:9;13535:25;:14;:25;:::i;:35::-;13516:54;;13592:32;13622:1;13605:11;13593:9;:23;;;;;;;13592:32;:29;:32;:::i;:::-;13581:43;13168:464;-1:-1:-1;;;;;;13168:464:0:o;12105:311::-;12187:12;12230:1;12220:7;:11;12212:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12298:1;12287:8;:12;:28;;;;;12314:1;12303:8;:12;12287:28;12279:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12400:8;12376:21;:7;12388:8;12376:21;:11;:21;:::i;:::-;:32;;;;;;;12105:311;-1:-1:-1;;;;12105:311:0:o;10600:339::-;10675:14;10691;10736:6;10726:16;;:6;:16;;;;10718:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10818:6;10809:15;;:6;:15;;;:53;;10847:6;10855;10809:53;;;10828:6;10836;10809:53;10790:72;;-1:-1:-1;10790:72:0;-1:-1:-1;10881:20:0;;;10873:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10600:339;;;;;:::o;16597:1355::-;16910:45;;;;;;:59;:45;;;;;;;;;;;;;;;;16815:12;;;;;;16923:7;16910:29;;;;;;:45;;;;;;;;;;;;;;;:29;:45;;;2:2:-1;;;;27:1;24;17:12;2:2;16910:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16910:45:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;16910:45:0;:59;;;16906:140;;;16986:48;;;;;;:32;:48;;;;;;;;;;;;;;;;16999:7;16986:32;;;;;;:48;;;;;;;;;;;;;;;-1:-1:-1;16986:32:0;:48;;;2:2:-1;;;;27:1;24;17:12;2:2;16986:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16986:48:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;16906:140:0;17057:13;17072;17089:48;17113:7;17122:6;17130;17089:23;:48::i;:::-;17056:81;;;;17152:8;17164:1;17152:13;:30;;;;-1:-1:-1;17169:13:0;;17152:30;17148:797;;;17221:14;;-1:-1:-1;17237:14:0;;-1:-1:-1;17148:797:0;;;17285:19;17307:53;17325:14;17341:8;17351;17307:17;:53::i;:::-;17285:75;;17397:14;17379;:32;17375:559;;17458:10;17440:14;:28;;17432:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17547:14;;-1:-1:-1;17563:14:0;-1:-1:-1;17563:14:0;17375:559;;;17619:19;17641:53;17659:14;17675:8;17685;17641:17;:53::i;:::-;17619:75;;17738:14;17720;:32;;17713:40;;;;17798:10;17780:14;:28;;17772:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17887:14;-1:-1:-1;17903:14:0;;-1:-1:-1;17375:559:0;17148:797;;16597:1355;;;;;;;;;;;:::o;7782:142::-;7834:6;7861;;;:30;;-1:-1:-1;;7876:5:0;;;7890:1;7885;7876:5;7885:1;7871:15;;;;;:20;7861:30;7853:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7509:128;7593:5;;;7588:16;;;;7580:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11563:429;11656:13;11671;11698:14;11717:26;11728:6;11736;11717:10;:26::i;:::-;11697:46;;;11754:32;11762:7;11771:6;11779;11754:7;:32::i;:::-;;11798:13;11813;11841:32;11849:7;11858:6;11866;11841:7;:32::i;:::-;11831:55;;;:57;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11831:57:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11831:57:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;11831:57:0;;;;;;;11797:91;;;;;-1:-1:-1;11797:91:0;;-1:-1:-1;11922:16:0;;;;;;;;:62;;11965:8;11975;11922:62;;;11942:8;11952;11922:62;11899:85;;;;-1:-1:-1;11563:429:0;-1:-1:-1;;;;;;;11563:429:0:o
Swarm Source
ipfs://9929c71497c5f2362cc34687db23b24ce82752197c277c5d062d625c72b8ea1b
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.