My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Latest 25 internal transaction
[ Download CSV Export ]
Contract Name:
Router
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at moonbeam.moonscan.io on 2022-02-04 */ // File: contracts/core/interfaces/IFactory.sol pragma solidity >=0.8.0; interface IFactory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); event PairCreateLocked( address indexed caller ); event PairCreateUnlocked( address indexed caller ); event BootstrapSetted( address indexed tokenA, address indexed tokenB, address indexed bootstrap ); event FeetoUpdated( address indexed feeto ); event FeeBasePointUpdated( uint8 basePoint ); function feeto() external view returns (address); function feeBasePoint() external view returns (uint8); function lockForPairCreate() external view returns (bool); function getPair(address tokenA, address tokenB) external view returns (address pair); function getBootstrap(address tokenA, address tokenB) external view returns (address bootstrap); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); } // File: contracts/core/interfaces/IPair.sol pragma solidity >=0.8.0; interface IPair { event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to ) external; function initialize(address, address) external; } // File: contracts/libraries/Math.sol pragma solidity >=0.8.0; // a library for performing various math operations library Math { function min(uint256 x, uint256 y) internal pure returns (uint256 z) { z = x < y ? x : y; } // babylonian method (https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method) function sqrt(uint256 y) internal pure returns (uint256 z) { if (y > 3) { z = y; uint256 x = y / 2 + 1; while (x < z) { z = x; x = (y / x + x) / 2; } } else if (y != 0) { z = 1; } } function add(uint256 x, uint256 y) internal pure returns (uint256 z) { require((z = x + y) >= x, "ds-math-add-overflow"); } function sub(uint256 x, uint256 y) internal pure returns (uint256 z) { require((z = x - y) <= x, "ds-math-sub-underflow"); } function mul(uint256 x, uint256 y) internal pure returns (uint256 z) { require(y == 0 || (z = x * y) / y == x, "ds-math-mul-overflow"); } } // File: contracts/libraries/Helper.sol pragma solidity >=0.8.0; library Helper { using Math for uint256; function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) { require(tokenA != tokenB, "Helper: IDENTICAL_ADDRESSES"); (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA); require(token0 != address(0), "Helper: ZERO_ADDRESS"); } function pairFor( address factory, address tokenA, address tokenB ) internal view returns (address pair) { return IFactory(factory).getPair(tokenA, tokenB); } function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) internal pure returns (uint256 amountB) { require(amountA > 0, "INSUFFICIENT_AMOUNT"); require(reserveA > 0 && reserveB > 0, "INSUFFICIENT_LIQUIDITY"); amountB = amountA.mul(reserveB) / reserveA; } function getReserves( address factory, address tokenA, address tokenB ) internal view returns (uint256 reserveA, uint256 reserveB) { (address token0, ) = sortTokens(tokenA, tokenB); (uint256 reserve0, uint256 reserve1) = IPair( pairFor(factory, tokenA, tokenB) ).getReserves(); (reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0); } function safeTransferFrom( address token, address from, address to, uint256 value ) internal { // bytes4(keccak256(bytes('transferFrom(address,address,uint256)'))); (bool success, bytes memory data) = token.call( abi.encodeWithSelector(0x23b872dd, from, to, value) ); require( success && (data.length == 0 || abi.decode(data, (bool))), "TransferHelper::transferFrom: transferFrom failed" ); } function safeTransfer( address token, address to, uint256 value ) internal { // bytes4(keccak256(bytes('transfer(address,uint256)'))); (bool success, bytes memory data) = token.call( abi.encodeWithSelector(0xa9059cbb, to, value) ); require( success && (data.length == 0 || abi.decode(data, (bool))), "TransferHelper::safeTransfer: transfer failed" ); } function safeTransferNativeCurrency(address to, uint256 value) internal { (bool success, ) = to.call{value: value}(new bytes(0)); require( success, "TransferHelper::safeTransferNativeCurrency: NativeCurrency transfer failed" ); } // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) internal pure returns (uint256 amountOut) { require(amountIn > 0, "Helper: INSUFFICIENT_INPUT_AMOUNT"); require( reserveIn > 0 && reserveOut > 0, "Helper: INSUFFICIENT_LIQUIDITY" ); uint256 amountInWithFee = amountIn.mul(997); uint256 numerator = amountInWithFee.mul(reserveOut); uint256 denominator = reserveIn.mul(1000).add(amountInWithFee); amountOut = numerator / denominator; } // given an output amount of an asset and pair reserves, returns a required input amount of the other asset function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) internal pure returns (uint256 amountIn) { require(amountOut > 0, "Helper: INSUFFICIENT_OUTPUT_AMOUNT"); require( reserveIn > 0 && reserveOut > 0, "Helper: INSUFFICIENT_LIQUIDITY" ); uint256 numerator = reserveIn.mul(amountOut).mul(1000); uint256 denominator = reserveOut.sub(amountOut).mul(997); amountIn = (numerator / denominator).add(1); } // performs chained getAmountOut calculations on any number of pairs function getAmountsOut( address factory, uint256 amountIn, address[] memory path ) internal view returns (uint256[] memory amounts) { require(path.length >= 2, "Helper: INVALID_PATH"); amounts = new uint256[](path.length); amounts[0] = amountIn; for (uint256 i; i < path.length - 1; i++) { (uint256 reserveIn, uint256 reserveOut) = getReserves( factory, path[i], path[i + 1] ); amounts[i + 1] = getAmountOut(amounts[i], reserveIn, reserveOut); } } function getAmountsIn( address factory, uint256 amountOut, address[] memory path ) internal view returns (uint256[] memory amounts) { require(path.length >= 2, "Helper: INVALID_PATH"); amounts = new uint256[](path.length); amounts[amounts.length - 1] = amountOut; for (uint256 i = path.length - 1; i > 0; i--) { (uint256 reserveIn, uint256 reserveOut) = getReserves( factory, path[i - 1], path[i] ); amounts[i - 1] = getAmountIn(amounts[i], reserveIn, reserveOut); } } } // File: contracts/periphery/interfaces/IWNativeCurrency.sol pragma solidity >=0.8.0; interface IWNativeCurrency { function deposit() external payable; function withdraw(uint256) external; } // File: contracts/periphery/interfaces/IRouter.sol pragma solidity >=0.8.0; interface IRouter { function factory() external view returns (address); function WNativeCurrency() external view returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquiditySingleToken( address[] calldata path, uint256 amountIn, uint256 amountSwapIn, uint256 amountSwapOutMin, uint256 amountInReserveMin, address to, uint256 deadline ) external returns ( uint256 liquidity ); function addLiquidityNativeCurrency( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountNativeCurrencyMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountNativeCurrency, uint256 liquidity ); function addLiquiditySingleNativeCurrency( address[] calldata path, uint256 amountSwapOut, uint256 nativeCurrencySwapInMax, uint256 nativeCurrencyReserveMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountNativeCurrency, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityNativeCurrency( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountNativeCurrencyMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountNativeCurrency); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactNativeCurrencyForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactNativeCurrency( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForNativeCurrency( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapNativeCurrencyForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File: contracts/periphery/Router.sol pragma solidity >=0.8.0; contract Router is IRouter { using Math for uint256; address public override factory; address public override WNativeCurrency; constructor(address _factory, address _WNativeCurrency) { factory = _factory; WNativeCurrency = _WNativeCurrency; } modifier ensure(uint256 deadline) { require(deadline >= block.timestamp, "Router: EXPIRED"); _; } receive() external payable { require(msg.sender == WNativeCurrency); // only accept Native Currency via fallback from the WNativeCurrency contract } function addLiquidity( address token0, address token1, uint256 amount0Desired, uint256 amount1Desired, uint256 amount0Min, uint256 amount1Min, address to, uint256 deadline ) public override ensure(deadline) returns ( uint256 amount0, uint256 amount1, uint256 liquidity ) { (amount0, amount1) = _addLiquidity( token0, token1, amount0Desired, amount1Desired, amount0Min, amount1Min ); address pair = Helper.pairFor(factory, token0, token1); Helper.safeTransferFrom(token0, msg.sender, pair, amount0); Helper.safeTransferFrom(token1, msg.sender, pair, amount1); liquidity = IPair(pair).mint(to); } function addLiquiditySingleToken( address[] calldata path, uint256 amountIn, uint256 amountSwapOut, uint256 amountSwapInMax, uint256 amountInReserveMin, address to, uint256 deadline ) external override ensure(deadline) returns (uint256 liquidity) { address token0 = path[0]; address token1 = path[path.length - 1]; uint256[] memory amounts = swapTokensForExactTokens( amountSwapOut, amountSwapInMax, path, to, deadline ); uint256 amountInReserve = amountIn - amounts[0]; (, , liquidity) = addLiquidity( token1, token0, amounts[amounts.length - 1], amountInReserve, amounts[amounts.length - 1], amountInReserveMin, to, deadline ); } function addLiquidityNativeCurrency( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountNativeCurrencyMin, address to, uint256 deadline ) external payable override ensure(deadline) returns ( uint256 amountToken, uint256 amountNativeCurrency, uint256 liquidity ) { (amountToken, amountNativeCurrency) = _addLiquidity( token, WNativeCurrency, amountTokenDesired, msg.value, amountTokenMin, amountNativeCurrencyMin ); address pair = Helper.pairFor(factory, token, WNativeCurrency); Helper.safeTransferFrom(token, msg.sender, pair, amountToken); IWNativeCurrency(WNativeCurrency).deposit{ value: amountNativeCurrency }(); require(IERC20(WNativeCurrency).transfer(pair, amountNativeCurrency)); liquidity = IPair(pair).mint(to); if (msg.value > amountNativeCurrency) Helper.safeTransferNativeCurrency( msg.sender, msg.value - amountNativeCurrency ); // refund dust native currency, if any } function addLiquiditySingleNativeCurrency( address[] memory path, uint256 amountSwapOut, uint256 nativeCurrencySwapInMax, uint256 nativeCurrencyReserveMin, address to, uint256 deadline ) external payable override ensure(deadline) returns ( uint256 amountToken, uint256 amountNativeCurrency, uint256 liquidity ) { // Swap require(path[0] == WNativeCurrency, "Router: INVALID_PATH"); uint256[] memory amounts = Helper.getAmountsIn( factory, amountSwapOut, path ); require(amounts[0] <= msg.value, "Router: EXCESSIVE_INPUT_AMOUNT"); IWNativeCurrency(WNativeCurrency).deposit{value: amounts[0]}(); require( IERC20(WNativeCurrency).transfer( Helper.pairFor(factory, path[0], path[1]), amounts[0] ) ); _swap(amounts, path, to); require( amounts[0] <= nativeCurrencySwapInMax, "not allow bigger than nativeCurrencySwapInMax" ); // Addliquidity address token = path[path.length - 1]; uint256 nativeCurrencyReserve = msg.value - amounts[0]; (amountToken, amountNativeCurrency) = _addLiquidity( token, WNativeCurrency, amounts[amounts.length - 1], nativeCurrencyReserve, amounts[amounts.length - 1], nativeCurrencyReserveMin ); address pair = Helper.pairFor(factory, token, WNativeCurrency); Helper.safeTransferFrom(token, msg.sender, pair, amountToken); IWNativeCurrency(WNativeCurrency).deposit{ value: amountNativeCurrency }(); require(IERC20(WNativeCurrency).transfer(pair, amountNativeCurrency)); liquidity = IPair(pair).mint(to); if (msg.value > (amountNativeCurrency + amounts[0])) Helper.safeTransferNativeCurrency( msg.sender, msg.value - (amountNativeCurrency + amounts[0]) ); // refund dust native currency, if any } function _addLiquidity( address token0, address token1, uint256 amount0Desired, uint256 amount1Desired, uint256 amount0Min, uint256 amount1Min ) private returns (uint256 amount0, uint256 amount1) { if (IFactory(factory).getPair(token0, token1) == address(0)) { IFactory(factory).createPair(token0, token1); } (uint256 reserve0, uint256 reserve1) = Helper.getReserves( factory, token0, token1 ); if (reserve0 == 0 && reserve1 == 0) { (amount0, amount1) = (amount0Desired, amount1Desired); } else { uint256 amount1Optimal = Helper.quote( amount0Desired, reserve0, reserve1 ); if (amount1Optimal <= amount1Desired) { require( amount1Optimal >= amount1Min, "Router: INSUFFICIENT_1_AMOUNT" ); (amount0, amount1) = (amount0Desired, amount1Optimal); } else { uint256 amount0Optimal = Helper.quote( amount1Desired, reserve1, reserve0 ); require(amount0Optimal <= amount0Desired); require( amount0Optimal >= amount0Min, "Router: INSUFFICIENT_0_AMOUNT" ); (amount0, amount1) = (amount0Optimal, amount1Desired); } } } function removeLiquidity( address token0, address token1, uint256 liquidity, uint256 amount0Min, uint256 amount1Min, address to, uint256 deadline ) public override ensure(deadline) returns (uint256 amount0, uint256 amount1) { address pair = Helper.pairFor(factory, token0, token1); IERC20(pair).transferFrom(msg.sender, pair, liquidity); (uint256 amountA, uint256 amountB) = IPair(pair).burn(to); (address tokenA, ) = Helper.sortTokens(token0, token1); (amount0, amount1) = tokenA == token0 ? (amountA, amountB) : (amountB, amountA); require(amount0 >= amount0Min, "Router: INSUFFICIENT_0_AMOUNT"); require(amount1 >= amount1Min, "Router: INSUFFICIENT_1_AMOUNT"); } function removeLiquidityNativeCurrency( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountNativeCurrencyMin, address to, uint256 deadline ) public override ensure(deadline) returns (uint256 amountToken, uint256 amountNativeCurrency) { (amountToken, amountNativeCurrency) = removeLiquidity( token, WNativeCurrency, liquidity, amountTokenMin, amountNativeCurrencyMin, address(this), deadline ); Helper.safeTransfer(token, to, amountToken); IWNativeCurrency(WNativeCurrency).withdraw(amountNativeCurrency); Helper.safeTransferNativeCurrency(to, amountNativeCurrency); } function _swap( uint256[] memory amounts, address[] memory path, address _to ) private { for (uint256 i; i < path.length - 1; i++) { (address input, address output) = (path[i], path[i + 1]); (address token0, ) = Helper.sortTokens(input, output); uint256 amountOut = amounts[i + 1]; (uint256 amount0Out, uint256 amount1Out) = input == token0 ? (uint256(0), amountOut) : (amountOut, uint256(0)); address to = i < path.length - 2 ? Helper.pairFor(factory, output, path[i + 2]) : _to; IPair(Helper.pairFor(factory, input, output)).swap( amount0Out, amount1Out, to ); } } function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) public override ensure(deadline) returns (uint256[] memory amounts) { amounts = Helper.getAmountsOut(factory, amountIn, path); require( amounts[amounts.length - 1] >= amountOutMin, "Router: INSUFFICIENT_OUTPUT_AMOUNT" ); Helper.safeTransferFrom( path[0], msg.sender, Helper.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, to); } function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) public override ensure(deadline) returns (uint256[] memory amounts) { amounts = Helper.getAmountsIn(factory, amountOut, path); require(amounts[0] <= amountInMax, "Router: EXCESSIVE_INPUT_AMOUNT"); Helper.safeTransferFrom( path[0], msg.sender, Helper.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, to); } function swapExactNativeCurrencyForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable override ensure(deadline) returns (uint256[] memory amounts) { require(path[0] == WNativeCurrency, "Router: INVALID_PATH"); amounts = Helper.getAmountsOut(factory, msg.value, path); require( amounts[amounts.length - 1] >= amountOutMin, "Router: INSUFFICIENT_OUTPUT_AMOUNT" ); IWNativeCurrency(WNativeCurrency).deposit{value: amounts[0]}(); require( IERC20(WNativeCurrency).transfer( Helper.pairFor(factory, path[0], path[1]), amounts[0] ) ); _swap(amounts, path, to); } function swapTokensForExactNativeCurrency( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external override ensure(deadline) returns (uint256[] memory amounts) { require( path[path.length - 1] == WNativeCurrency, "Router: INVALID_PATH" ); amounts = Helper.getAmountsIn(factory, amountOut, path); require(amounts[0] <= amountInMax, "Router: EXCESSIVE_INPUT_AMOUNT"); Helper.safeTransferFrom( path[0], msg.sender, Helper.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, address(this)); IWNativeCurrency(WNativeCurrency).withdraw(amounts[amounts.length - 1]); Helper.safeTransferNativeCurrency(to, amounts[amounts.length - 1]); } function swapExactTokensForNativeCurrency( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external override ensure(deadline) returns (uint256[] memory amounts) { require( path[path.length - 1] == WNativeCurrency, "Router: INVALID_PATH" ); amounts = Helper.getAmountsOut(factory, amountIn, path); require( amounts[amounts.length - 1] >= amountOutMin, "Router: INSUFFICIENT_OUTPUT_AMOUNT" ); Helper.safeTransferFrom( path[0], msg.sender, Helper.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, address(this)); IWNativeCurrency(WNativeCurrency).withdraw(amounts[amounts.length - 1]); Helper.safeTransferNativeCurrency(to, amounts[amounts.length - 1]); } function swapNativeCurrencyForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable override ensure(deadline) returns (uint256[] memory amounts) { require(path[0] == WNativeCurrency, "Router: INVALID_PATH"); amounts = Helper.getAmountsIn(factory, amountOut, path); require(amounts[0] <= msg.value, "Router: EXCESSIVE_INPUT_AMOUNT"); IWNativeCurrency(WNativeCurrency).deposit{value: amounts[0]}(); require( IERC20(WNativeCurrency).transfer( Helper.pairFor(factory, path[0], path[1]), amounts[0] ) ); _swap(amounts, path, to); if (msg.value > amounts[0]) Helper.safeTransferNativeCurrency( msg.sender, msg.value - amounts[0] ); // refund dust eth, if any } function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) public pure override returns (uint256 amountOut) { return Helper.getAmountOut(amountIn, reserveIn, reserveOut); } function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) public pure override returns (uint256 amountIn) { return Helper.getAmountOut(amountOut, reserveIn, reserveOut); } function getAmountsOut(uint256 amountIn, address[] memory path) public view override returns (uint256[] memory amounts) { return Helper.getAmountsOut(factory, amountIn, path); } function getAmountsIn(uint256 amountOut, address[] memory path) public view override returns (uint256[] memory amounts) { return Helper.getAmountsIn(factory, amountOut, path); } }
[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WNativeCurrency","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"WNativeCurrency","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token0","type":"address"},{"internalType":"address","name":"token1","type":"address"},{"internalType":"uint256","name":"amount0Desired","type":"uint256"},{"internalType":"uint256","name":"amount1Desired","type":"uint256"},{"internalType":"uint256","name":"amount0Min","type":"uint256"},{"internalType":"uint256","name":"amount1Min","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidity","outputs":[{"internalType":"uint256","name":"amount0","type":"uint256"},{"internalType":"uint256","name":"amount1","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":"amountNativeCurrencyMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityNativeCurrency","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountNativeCurrency","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"uint256","name":"amountSwapOut","type":"uint256"},{"internalType":"uint256","name":"nativeCurrencySwapInMax","type":"uint256"},{"internalType":"uint256","name":"nativeCurrencyReserveMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquiditySingleNativeCurrency","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountNativeCurrency","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountSwapOut","type":"uint256"},{"internalType":"uint256","name":"amountSwapInMax","type":"uint256"},{"internalType":"uint256","name":"amountInReserveMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquiditySingleToken","outputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountIn","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsIn","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsOut","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token0","type":"address"},{"internalType":"address","name":"token1","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amount0Min","type":"uint256"},{"internalType":"uint256","name":"amount1Min","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"amount0","type":"uint256"},{"internalType":"uint256","name":"amount1","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountNativeCurrencyMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityNativeCurrency","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountNativeCurrency","type":"uint256"}],"stateMutability":"nonpayable","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":"swapExactNativeCurrencyForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"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":"swapExactTokensForNativeCurrency","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":"swapExactTokensForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","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":"swapNativeCurrencyForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","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":"swapTokensForExactNativeCurrency","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
60806040523480156200001157600080fd5b506040516200353138038062003531833981016040819052620000349162000083565b600080546001600160a01b039384166001600160a01b03199182161790915560018054929093169116179055620000bb565b80516001600160a01b03811681146200007e57600080fd5b919050565b600080604083850312156200009757600080fd5b620000a28362000066565b9150620000b26020840162000066565b90509250929050565b61346680620000cb6000396000f3fe60806040526004361061010d5760003560e01c80639be7614d11610095578063cd1bd0d911610064578063cd1bd0d9146102f1578063d06ca61f14610304578063dcff1b9414610324578063e8e3370014610344578063f85b7c8b1461036457600080fd5b80639be7614d1461027e578063b1ea829214610291578063baa2abde146102b1578063c45a0155146102d157600080fd5b8063419591ed116100dc578063419591ed146101e5578063686589671461021d57806385f8c259146101305780638803dbee1461024b578063937ca0da1461026b57600080fd5b8063054d50d4146101305780631f00ca741461016357806338ed173914610190578063403bf1f2146101b057600080fd5b3661012b576001546001600160a01b0316331461012957600080fd5b005b600080fd5b34801561013c57600080fd5b5061015061014b3660046131b9565b610384565b6040519081526020015b60405180910390f35b34801561016f57600080fd5b5061018361017e3660046130db565b610399565b60405161015a9190613220565b34801561019c57600080fd5b506101836101ab366004613146565b6103bc565b3480156101bc57600080fd5b506101d06101cb366004612ebf565b610576565b6040805192835260208301919091520161015a565b3480156101f157600080fd5b50600154610205906001600160a01b031681565b6040516001600160a01b03909116815260200161015a565b61023061022b366004612fa4565b61063a565b6040805193845260208401929092529082015260600161015a565b34801561025757600080fd5b50610183610266366004613146565b610c05565b610230610279366004612ebf565b610cae565b61018361028c366004613074565b610ebd565b34801561029d57600080fd5b506101506102ac366004612f1d565b6111c8565b3480156102bd57600080fd5b506101d06102cc366004612dd1565b6112fe565b3480156102dd57600080fd5b50600054610205906001600160a01b031681565b6101836102ff366004613074565b61152f565b34801561031057600080fd5b5061018361031f3660046130db565b6117c8565b34801561033057600080fd5b5061018361033f366004613146565b6117e2565b34801561035057600080fd5b5061023061035f366004612e43565b611a0d565b34801561037057600080fd5b5061018361037f366004613146565b611b07565b6000610391848484611c16565b949350505050565b6000546060906103b3906001600160a01b03168484611d1a565b90505b92915050565b606081428110156103e85760405162461bcd60e51b81526004016103df906132c9565b60405180910390fd5b6000546040805160208089028281018201909352888252610432936001600160a01b0316928c92918b918b91829190850190849080828437600092019190915250611ea792505050565b9150868260018451610444919061338d565b81518110610454576104546133ec565b6020026020010151101561047a5760405162461bcd60e51b81526004016103df906132f2565b61052c86866000818110610490576104906133ec565b90506020020160208101906104a59190612d90565b60008054339161050c916001600160a01b0316908b908b90816104ca576104ca6133ec565b90506020020160208101906104df9190612d90565b8b8b60018181106104f2576104f26133ec565b90506020020160208101906105079190612d90565b612014565b8560008151811061051f5761051f6133ec565b6020026020010151612099565b61056b828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506121d7915050565b509695505050505050565b600080824281101561059a5760405162461bcd60e51b81526004016103df906132c9565b6001546105b6908a906001600160a01b03168a8a8a308a6112fe565b90935091506105c6898685612387565b600154604051632e1a7d4d60e01b8152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b15801561060c57600080fd5b505af1158015610620573d6000803e3d6000fd5b5050505061062e85836124b8565b50965096945050505050565b600080600083428110156106605760405162461bcd60e51b81526004016103df906132c9565b6001548a516001600160a01b03909116908b90600090610682576106826133ec565b60200260200101516001600160a01b0316146106b05760405162461bcd60e51b81526004016103df90613264565b600080546106c8906001600160a01b03168b8d611d1a565b905034816000815181106106de576106de6133ec565b602002602001015111156107045760405162461bcd60e51b81526004016103df90613292565b60015481516001600160a01b039091169063d0e30db090839060009061072c5761072c6133ec565b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561075f57600080fd5b505af1158015610773573d6000803e3d6000fd5b5050505050600160009054906101000a90046001600160a01b03166001600160a01b031663a9059cbb6107ee60008054906101000a90046001600160a01b03168e6000815181106107c6576107c66133ec565b60200260200101518f6001815181106107e1576107e16133ec565b6020026020010151612014565b83600081518110610801576108016133ec565b60200260200101516040518363ffffffff1660e01b815260040161083a9291906001600160a01b03929092168252602082015260400190565b602060405180830381600087803b15801561085457600080fd5b505af1158015610868573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061088c9190613006565b61089557600080fd5b6108a0818c896121d7565b88816000815181106108b4576108b46133ec565b602002602001015111156109205760405162461bcd60e51b815260206004820152602d60248201527f6e6f7420616c6c6f7720626967676572207468616e206e61746976654375727260448201526c0cadcc6f2a6eec2e092dc9ac2f609b1b60648201526084016103df565b60008b60018d51610931919061338d565b81518110610941576109416133ec565b60200260200101519050600082600081518110610960576109606133ec565b602002602001015134610973919061338d565b90506109e482600160009054906101000a90046001600160a01b0316856001875161099e919061338d565b815181106109ae576109ae6133ec565b60200260200101518487600189516109c6919061338d565b815181106109d6576109d66133ec565b60200260200101518f6125b3565b60008054600154939a5091985091610a0a916001600160a01b0390811691869116612014565b9050610a188333838b612099565b600160009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0886040518263ffffffff1660e01b81526004016000604051808303818588803b158015610a6857600080fd5b505af1158015610a7c573d6000803e3d6000fd5b505060015460405163a9059cbb60e01b81526001600160a01b038681166004830152602482018d9052909116935063a9059cbb92506044019050602060405180830381600087803b158015610ad057600080fd5b505af1158015610ae4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b089190613006565b610b1157600080fd5b6040516335313c2160e11b81526001600160a01b038b81166004830152821690636a62784290602401602060405180830381600087803b158015610b5457600080fd5b505af1158015610b68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8c919061305b565b955083600081518110610ba157610ba16133ec565b602002602001015187610bb49190613334565b341115610bf457610bf43385600081518110610bd257610bd26133ec565b602002602001015189610be59190613334565b610bef903461338d565b6124b8565b505050505096509650969350505050565b60608142811015610c285760405162461bcd60e51b81526004016103df906132c9565b6000546040805160208089028281018201909352888252610c72936001600160a01b0316928c92918b918b91829190850190849080828437600092019190915250611d1a92505050565b91508682600081518110610c8857610c886133ec565b6020026020010151111561047a5760405162461bcd60e51b81526004016103df90613292565b60008060008342811015610cd45760405162461bcd60e51b81526004016103df906132c9565b600154610cef908b906001600160a01b03168b348c8c6125b3565b6000805460015493975091955091610d15916001600160a01b03908116918e9116612014565b9050610d238b338388612099565b600160009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015610d7357600080fd5b505af1158015610d87573d6000803e3d6000fd5b505060015460405163a9059cbb60e01b81526001600160a01b038681166004830152602482018a9052909116935063a9059cbb92506044019050602060405180830381600087803b158015610ddb57600080fd5b505af1158015610def573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e139190613006565b610e1c57600080fd5b6040516335313c2160e11b81526001600160a01b038881166004830152821690636a62784290602401602060405180830381600087803b158015610e5f57600080fd5b505af1158015610e73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e97919061305b565b925083341115610eaf57610eaf33610bef863461338d565b505096509650969350505050565b60608142811015610ee05760405162461bcd60e51b81526004016103df906132c9565b6001546001600160a01b03168686600081610efd57610efd6133ec565b9050602002016020810190610f129190612d90565b6001600160a01b031614610f385760405162461bcd60e51b81526004016103df90613264565b6000546040805160208089028281018201909352888252610f82936001600160a01b0316928b92918b918b91829190850190849080828437600092019190915250611d1a92505050565b91503482600081518110610f9857610f986133ec565b60200260200101511115610fbe5760405162461bcd60e51b81526004016103df90613292565b60015482516001600160a01b039091169063d0e30db0908490600090610fe657610fe66133ec565b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561101957600080fd5b505af115801561102d573d6000803e3d6000fd5b5050600154600080546001600160a01b03928316955063a9059cbb945061108c9350909116908a908a9081611064576110646133ec565b90506020020160208101906110799190612d90565b8a8a60018181106104f2576104f26133ec565b8460008151811061109f5761109f6133ec565b60200260200101516040518363ffffffff1660e01b81526004016110d89291906001600160a01b03929092168252602082015260400190565b602060405180830381600087803b1580156110f257600080fd5b505af1158015611106573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112a9190613006565b61113357600080fd5b611172828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506121d7915050565b81600081518110611185576111856133ec565b60200260200101513411156111be576111be33836000815181106111ab576111ab6133ec565b602002602001015134610bef919061338d565b5095945050505050565b600081428110156111eb5760405162461bcd60e51b81526004016103df906132c9565b60008a8a6000818110611200576112006133ec565b90506020020160208101906112159190612d90565b905060008b8b61122660018261338d565b818110611235576112356133ec565b905060200201602081019061124a9190612d90565b9050600061125c8a8a8f8f8b8b610c05565b9050600081600081518110611273576112736133ec565b60200260200101518c611286919061338d565b90506112e48385846001865161129c919061338d565b815181106112ac576112ac6133ec565b60200260200101518486600188516112c4919061338d565b815181106112d4576112d46133ec565b60200260200101518e8e8e611a0d565b909150905080965050505050505098975050505050505050565b60008082428110156113225760405162461bcd60e51b81526004016103df906132c9565b6000805461133a906001600160a01b03168c8c612014565b6040516323b872dd60e01b81523360048201526001600160a01b03821660248201819052604482018c90529192506323b872dd90606401602060405180830381600087803b15801561138b57600080fd5b505af115801561139f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c39190613006565b5060405163226bf2d160e21b81526001600160a01b03878116600483015260009182918416906389afcb44906024016040805180830381600087803b15801561140b57600080fd5b505af115801561141f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114439190613122565b9150915060006114538e8e612802565b5090508d6001600160a01b0316816001600160a01b031614611476578183611479565b82825b90975095508a8710156114ce5760405162461bcd60e51b815260206004820152601d60248201527f526f757465723a20494e53554646494349454e545f305f414d4f554e5400000060448201526064016103df565b8986101561151e5760405162461bcd60e51b815260206004820152601d60248201527f526f757465723a20494e53554646494349454e545f315f414d4f554e5400000060448201526064016103df565b505050505097509795505050505050565b606081428110156115525760405162461bcd60e51b81526004016103df906132c9565b6001546001600160a01b0316868660008161156f5761156f6133ec565b90506020020160208101906115849190612d90565b6001600160a01b0316146115aa5760405162461bcd60e51b81526004016103df90613264565b60005460408051602080890282810182019093528882526115f4936001600160a01b0316923492918b918b91829190850190849080828437600092019190915250611ea792505050565b9150868260018451611606919061338d565b81518110611616576116166133ec565b6020026020010151101561163c5760405162461bcd60e51b81526004016103df906132f2565b60015482516001600160a01b039091169063d0e30db0908490600090611664576116646133ec565b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561169757600080fd5b505af11580156116ab573d6000803e3d6000fd5b5050600154600080546001600160a01b03928316955063a9059cbb94506116e29350909116908a908a9081611064576110646133ec565b846000815181106116f5576116f56133ec565b60200260200101516040518363ffffffff1660e01b815260040161172e9291906001600160a01b03929092168252602082015260400190565b602060405180830381600087803b15801561174857600080fd5b505af115801561175c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117809190613006565b61178957600080fd5b6111be828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506121d7915050565b6000546060906103b3906001600160a01b03168484611ea7565b606081428110156118055760405162461bcd60e51b81526004016103df906132c9565b600180546001600160a01b03169087908790611821908261338d565b818110611830576118306133ec565b90506020020160208101906118459190612d90565b6001600160a01b03161461186b5760405162461bcd60e51b81526004016103df90613264565b60005460408051602080890282810182019093528882526118b5936001600160a01b0316928c92918b918b91829190850190849080828437600092019190915250611ea792505050565b91508682600184516118c7919061338d565b815181106118d7576118d76133ec565b602002602001015110156118fd5760405162461bcd60e51b81526004016103df906132f2565b61191386866000818110610490576104906133ec565b611952828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506121d7915050565b6001805483516001600160a01b0390911691632e1a7d4d9185916119759161338d565b81518110611985576119856133ec565b60200260200101516040518263ffffffff1660e01b81526004016119ab91815260200190565b600060405180830381600087803b1580156119c557600080fd5b505af11580156119d9573d6000803e3d6000fd5b5050505061056b8483600185516119f0919061338d565b81518110611a0057611a006133ec565b60200260200101516124b8565b60008060008342811015611a335760405162461bcd60e51b81526004016103df906132c9565b611a418c8c8c8c8c8c6125b3565b6000805492965090945090611a60906001600160a01b03168e8e612014565b9050611a6e8d338388612099565b611a7a8c338387612099565b6040516335313c2160e11b81526001600160a01b038881166004830152821690636a62784290602401602060405180830381600087803b158015611abd57600080fd5b505af1158015611ad1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af5919061305b565b92505050985098509895505050505050565b60608142811015611b2a5760405162461bcd60e51b81526004016103df906132c9565b600180546001600160a01b03169087908790611b46908261338d565b818110611b5557611b556133ec565b9050602002016020810190611b6a9190612d90565b6001600160a01b031614611b905760405162461bcd60e51b81526004016103df90613264565b6000546040805160208089028281018201909352888252611bda936001600160a01b0316928c92918b918b91829190850190849080828437600092019190915250611d1a92505050565b91508682600081518110611bf057611bf06133ec565b602002602001015111156118fd5760405162461bcd60e51b81526004016103df90613292565b6000808411611c715760405162461bcd60e51b815260206004820152602160248201527f48656c7065723a20494e53554646494349454e545f494e5055545f414d4f554e6044820152601560fa1b60648201526084016103df565b600083118015611c815750600082115b611ccd5760405162461bcd60e51b815260206004820152601e60248201527f48656c7065723a20494e53554646494349454e545f4c4951554944495459000060448201526064016103df565b6000611cdb856103e56128e3565b90506000611ce982856128e3565b90506000611d0383611cfd886103e86128e3565b9061294a565b9050611d0f818361334c565b979650505050505050565b6060600282511015611d655760405162461bcd60e51b8152602060048201526014602482015273090cad8e0cae47440929cac82989288bea082a8960631b60448201526064016103df565b815167ffffffffffffffff811115611d7f57611d7f613402565b604051908082528060200260200182016040528015611da8578160200160208202803683370190505b509050828160018351611dbb919061338d565b81518110611dcb57611dcb6133ec565b602002602001018181525050600060018351611de7919061338d565b90505b8015611e9f57600080611e3a8786611e0360018761338d565b81518110611e1357611e136133ec565b6020026020010151878681518110611e2d57611e2d6133ec565b602002602001015161299f565b91509150611e62848481518110611e5357611e536133ec565b60200260200101518383612a76565b84611e6e60018661338d565b81518110611e7e57611e7e6133ec565b60200260200101818152505050508080611e97906133a4565b915050611dea565b509392505050565b6060600282511015611ef25760405162461bcd60e51b8152602060048201526014602482015273090cad8e0cae47440929cac82989288bea082a8960631b60448201526064016103df565b815167ffffffffffffffff811115611f0c57611f0c613402565b604051908082528060200260200182016040528015611f35578160200160208202803683370190505b5090508281600081518110611f4c57611f4c6133ec565b60200260200101818152505060005b60018351611f69919061338d565b811015611e9f57600080611faf87868581518110611f8957611f896133ec565b602002602001015187866001611f9f9190613334565b81518110611e2d57611e2d6133ec565b91509150611fd7848481518110611fc857611fc86133ec565b60200260200101518383611c16565b84611fe3856001613334565b81518110611ff357611ff36133ec565b6020026020010181815250505050808061200c906133bb565b915050611f5b565b60405163e6a4390560e01b81526001600160a01b03838116600483015282811660248301526000919085169063e6a439059060440160206040518083038186803b15801561206157600080fd5b505afa158015612075573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103919190612db4565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17905291516000928392908816916120fd91906131e5565b6000604051808303816000865af19150503d806000811461213a576040519150601f19603f3d011682016040523d82523d6000602084013e61213f565b606091505b50915091508180156121695750805115806121695750808060200190518101906121699190613006565b6121cf5760405162461bcd60e51b815260206004820152603160248201527f5472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472604482015270185b9cd9995c919c9bdb4819985a5b1959607a1b60648201526084016103df565b505050505050565b60005b600183516121e8919061338d565b81101561238157600080848381518110612204576122046133ec565b60200260200101518584600161221a9190613334565b8151811061222a5761222a6133ec565b60200260200101519150915060006122428383612802565b509050600087612253866001613334565b81518110612263576122636133ec565b60200260200101519050600080836001600160a01b0316866001600160a01b03161461229157826000612295565b6000835b91509150600060028a516122a9919061338d565b88106122b557886122e2565b6000546122e2906001600160a01b0316878c6122d28c6002613334565b815181106107e1576107e16133ec565b6000549091506122fc906001600160a01b03168888612014565b6040516336cd320560e11b815260048101859052602481018490526001600160a01b0383811660448301529190911690636d9a640a90606401600060405180830381600087803b15801561234f57600080fd5b505af1158015612363573d6000803e3d6000fd5b50505050505050505050508080612379906133bb565b9150506121da565b50505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291516000928392908716916123e391906131e5565b6000604051808303816000865af19150503d8060008114612420576040519150601f19603f3d011682016040523d82523d6000602084013e612425565b606091505b509150915081801561244f57508051158061244f57508080602001905181019061244f9190613006565b6124b15760405162461bcd60e51b815260206004820152602d60248201527f5472616e7366657248656c7065723a3a736166655472616e736665723a20747260448201526c185b9cd9995c8819985a5b1959609a1b60648201526084016103df565b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040516124e291906131e5565b60006040518083038185875af1925050503d806000811461251f576040519150601f19603f3d011682016040523d82523d6000602084013e612524565b606091505b50509050806125ae5760405162461bcd60e51b815260206004820152604a60248201527f5472616e7366657248656c7065723a3a736166655472616e736665724e61746960448201527f766543757272656e63793a204e617469766543757272656e6379207472616e7360648201526919995c8819985a5b195960b21b608482015260a4016103df565b505050565b6000805460405163e6a4390560e01b81526001600160a01b03898116600483015288811660248301528392839291169063e6a439059060440160206040518083038186803b15801561260457600080fd5b505afa158015612618573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061263c9190612db4565b6001600160a01b031614156126d4576000546040516364e329cb60e11b81526001600160a01b038a8116600483015289811660248301529091169063c9c6539690604401602060405180830381600087803b15801561269a57600080fd5b505af11580156126ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126d29190612db4565b505b6000805481906126ee906001600160a01b03168b8b61299f565b91509150816000148015612700575080155b15612710578793508692506127f5565b600061271d898484612b75565b905087811161278157858110156127765760405162461bcd60e51b815260206004820152601d60248201527f526f757465723a20494e53554646494349454e545f315f414d4f554e5400000060448201526064016103df565b8894509250826127f3565b600061278e898486612b75565b90508981111561279d57600080fd5b878110156127ed5760405162461bcd60e51b815260206004820152601d60248201527f526f757465723a20494e53554646494349454e545f305f414d4f554e5400000060448201526064016103df565b94508793505b505b5050965096945050505050565b600080826001600160a01b0316846001600160a01b031614156128675760405162461bcd60e51b815260206004820152601b60248201527f48656c7065723a204944454e544943414c5f414444524553534553000000000060448201526064016103df565b826001600160a01b0316846001600160a01b03161061288757828461288a565b83835b90925090506001600160a01b0382166128dc5760405162461bcd60e51b815260206004820152601460248201527348656c7065723a205a45524f5f4144445245535360601b60448201526064016103df565b9250929050565b6000811580612907575082826128f9818361336e565b9250612905908361334c565b145b6103b65760405162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b60448201526064016103df565b6000826129578382613334565b91508110156103b65760405162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b60448201526064016103df565b60008060006129ae8585612802565b5090506000806129bf888888612014565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401604080518083038186803b1580156129f657600080fd5b505afa158015612a0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2e9190613028565b6001600160701b031691506001600160701b03169150826001600160a01b0316876001600160a01b031614612a64578082612a67565b81815b90999098509650505050505050565b6000808411612ad25760405162461bcd60e51b815260206004820152602260248201527f48656c7065723a20494e53554646494349454e545f4f55545055545f414d4f55604482015261139560f21b60648201526084016103df565b600083118015612ae25750600082115b612b2e5760405162461bcd60e51b815260206004820152601e60248201527f48656c7065723a20494e53554646494349454e545f4c4951554944495459000060448201526064016103df565b6000612b466103e8612b4086886128e3565b906128e3565b90506000612b5a6103e5612b408689612c26565b9050612b6b6001611cfd838561334c565b9695505050505050565b6000808411612bbc5760405162461bcd60e51b8152602060048201526013602482015272125394d551919250d251539517d05353d55395606a1b60448201526064016103df565b600083118015612bcc5750600082115b612c115760405162461bcd60e51b8152602060048201526016602482015275494e53554646494349454e545f4c495155494449545960501b60448201526064016103df565b82612c1c85846128e3565b610391919061334c565b600082612c33838261338d565b91508111156103b65760405162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b60448201526064016103df565b8035612c8781613418565b919050565b60008083601f840112612c9e57600080fd5b50813567ffffffffffffffff811115612cb657600080fd5b6020830191508360208260051b85010111156128dc57600080fd5b600082601f830112612ce257600080fd5b8135602067ffffffffffffffff80831115612cff57612cff613402565b8260051b604051601f19603f83011681018181108482111715612d2457612d24613402565b60405284815283810192508684018288018501891015612d4357600080fd5b600092505b85831015612d6d57612d5981612c7c565b845292840192600192909201918401612d48565b50979650505050505050565b80516001600160701b0381168114612c8757600080fd5b600060208284031215612da257600080fd5b8135612dad81613418565b9392505050565b600060208284031215612dc657600080fd5b8151612dad81613418565b600080600080600080600060e0888a031215612dec57600080fd5b8735612df781613418565b96506020880135612e0781613418565b955060408801359450606088013593506080880135925060a0880135612e2c81613418565b8092505060c0880135905092959891949750929550565b600080600080600080600080610100898b031215612e6057600080fd5b8835612e6b81613418565b97506020890135612e7b81613418565b965060408901359550606089013594506080890135935060a0890135925060c0890135612ea781613418565b8092505060e089013590509295985092959890939650565b60008060008060008060c08789031215612ed857600080fd5b8635612ee381613418565b95506020870135945060408701359350606087013592506080870135612f0881613418565b8092505060a087013590509295509295509295565b60008060008060008060008060e0898b031215612f3957600080fd5b883567ffffffffffffffff811115612f5057600080fd5b612f5c8b828c01612c8c565b9099509750506020890135955060408901359450606089013593506080890135925060a0890135612f8c81613418565b8092505060c089013590509295985092959890939650565b60008060008060008060c08789031215612fbd57600080fd5b863567ffffffffffffffff811115612fd457600080fd5b612fe089828a01612cd1565b9650506020870135945060408701359350606087013592506080870135612f0881613418565b60006020828403121561301857600080fd5b81518015158114612dad57600080fd5b6000806040838503121561303b57600080fd5b61304483612d79565b915061305260208401612d79565b90509250929050565b60006020828403121561306d57600080fd5b5051919050565b60008060008060006080868803121561308c57600080fd5b85359450602086013567ffffffffffffffff8111156130aa57600080fd5b6130b688828901612c8c565b90955093505060408601356130ca81613418565b949793965091946060013592915050565b600080604083850312156130ee57600080fd5b82359150602083013567ffffffffffffffff81111561310c57600080fd5b61311885828601612cd1565b9150509250929050565b6000806040838503121561313557600080fd5b505080516020909101519092909150565b60008060008060008060a0878903121561315f57600080fd5b8635955060208701359450604087013567ffffffffffffffff81111561318457600080fd5b61319089828a01612c8c565b90955093505060608701356131a481613418565b80925050608087013590509295509295509295565b6000806000606084860312156131ce57600080fd5b505081359360208301359350604090920135919050565b6000825160005b8181101561320657602081860181015185830152016131ec565b81811115613215576000828501525b509190910192915050565b6020808252825182820181905260009190848201906040850190845b818110156132585783518352928401929184019160010161323c565b50909695505050505050565b6020808252601490820152730a4deeae8cae47440929cac82989288bea082a8960631b604082015260600190565b6020808252601e908201527f526f757465723a204558434553534956455f494e5055545f414d4f554e540000604082015260600190565b6020808252600f908201526e149bdd5d195c8e8811561412549151608a1b604082015260600190565b60208082526022908201527f526f757465723a20494e53554646494349454e545f4f55545055545f414d4f55604082015261139560f21b606082015260800190565b60008219821115613347576133476133d6565b500190565b60008261336957634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615613388576133886133d6565b500290565b60008282101561339f5761339f6133d6565b500390565b6000816133b3576133b36133d6565b506000190190565b60006000198214156133cf576133cf6133d6565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461342d57600080fd5b5056fea26469706673582212209e009d451135d8f7785354bbd0067448d7f55ac869805336dbb4ecd29444fdc464736f6c63430008070033000000000000000000000000f49255205dfd7933c4d0f25a57d40b1511f92fef000000000000000000000000acc15dc74880c9944775448304b263d191c6077f
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000f49255205dfd7933c4d0f25a57d40b1511f92fef000000000000000000000000acc15dc74880c9944775448304b263d191c6077f
-----Decoded View---------------
Arg [0] : _factory (address): 0xf49255205dfd7933c4d0f25a57d40b1511f92fef
Arg [1] : _WNativeCurrency (address): 0xacc15dc74880c9944775448304b263d191c6077f
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000f49255205dfd7933c4d0f25a57d40b1511f92fef
Arg [1] : 000000000000000000000000acc15dc74880c9944775448304b263d191c6077f
Deployed ByteCode Sourcemap
16894:16263:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17379:15;;-1:-1:-1;;;;;17379:15:0;17365:10;:29;17357:38;;;;;;16894:16263;;;;;32186:240;;;;;;;;;;-1:-1:-1;32186:240:0;;;;;:::i;:::-;;:::i;:::-;;;19704:25:1;;;19692:2;19677:18;32186:240:0;;;;;;;;32922:232;;;;;;;;;;-1:-1:-1;32922:232:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;27124:669::-;;;;;;;;;;-1:-1:-1;27124:669:0;;;;;:::i;:::-;;:::i;25448:829::-;;;;;;;;;;-1:-1:-1;25448:829:0;;;;;:::i;:::-;;:::i;:::-;;;;19914:25:1;;;19970:2;19955:18;;19948:34;;;;19887:18;25448:829:0;19740:248:1;16997:39:0;;;;;;;;;;-1:-1:-1;16997:39:0;;;;-1:-1:-1;;;;;16997:39:0;;;;;;-1:-1:-1;;;;;10044:32:1;;;10026:51;;10014:2;9999:18;16997:39:0;9880:203:1;20658:2284:0;;;;;;:::i;:::-;;:::i;:::-;;;;20545:25:1;;;20601:2;20586:18;;20579:34;;;;20629:18;;;20622:34;20533:2;20518:18;20658:2284:0;20343:319:1;27801:610:0;;;;;;;;;;-1:-1:-1;27801:610:0;;;;;:::i;:::-;;:::i;19342:1308::-;;;;;;:::i;:::-;;:::i;31185:993::-;;;;;;:::i;:::-;;:::i;18394:940::-;;;;;;;;;;-1:-1:-1;18394:940:0;;;;;:::i;:::-;;:::i;24572:868::-;;;;;;;;;;-1:-1:-1;24572:868:0;;;;;:::i;:::-;;:::i;16959:31::-;;;;;;;;;;-1:-1:-1;16959:31:0;;;;-1:-1:-1;;;;;16959:31:0;;;28419:861;;;;;;:::i;:::-;;:::i;32682:232::-;;;;;;;;;;-1:-1:-1;32682:232:0;;;;;:::i;:::-;;:::i;30207:970::-;;;;;;;;;;-1:-1:-1;30207:970:0;;;;;:::i;:::-;;:::i;17489:897::-;;;;;;;;;;-1:-1:-1;17489:897:0;;;;;:::i;:::-;;:::i;29288:911::-;;;;;;;;;;-1:-1:-1;29288:911:0;;;;;:::i;:::-;;:::i;32186:240::-;32329:17;32366:52;32386:8;32396:9;32407:10;32366:19;:52::i;:::-;32359:59;32186:240;-1:-1:-1;;;;32186:240:0:o;32922:232::-;33121:7;;33052:24;;33101:45;;-1:-1:-1;;;;;33121:7:0;33130:9;33141:4;33101:19;:45::i;:::-;33094:52;;32922:232;;;;;:::o;27124:669::-;27347:24;27328:8;17256:15;17244:8;:27;;17236:55;;;;-1:-1:-1;;;17236:55:0;;;;;;;:::i;:::-;;;;;;;;;27415:7:::1;::::0;27394:45:::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;::::1;::::0;-1:-1:-1;;;;;27415:7:0::1;::::0;27424:8;;27394:45;27434:4;;;;;;27394:45;;::::1;::::0;27434:4;;27394:45;27434:4;27394:45;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;27394:20:0::1;::::0;-1:-1:-1;;;27394:45:0:i:1;:::-;27384:55;;27503:12;27472:7;27497:1;27480:7;:14;:18;;;;:::i;:::-;27472:27;;;;;;;;:::i;:::-;;;;;;;:43;;27450:127;;;;-1:-1:-1::0;;;27450:127:0::1;;;;;;;:::i;:::-;27588:162;27626:4;;27631:1;27626:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;27688;::::0;;27648:10:::1;::::0;27673:41:::1;::::0;-1:-1:-1;;;;;27688:7:0::1;::::0;27697:4;;;;:7;::::1;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;27706:4;;27711:1;27706:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;27673:14;:41::i;:::-;27729:7;27737:1;27729:10;;;;;;;;:::i;:::-;;;;;;;27588:23;:162::i;:::-;27761:24;27767:7;27776:4;;27761:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;27782:2:0;;-1:-1:-1;27761:5:0::1;::::0;-1:-1:-1;;27761:24:0:i:1;:::-;27124:669:::0;;;;;;;;;:::o;25448:829::-;25747:19;25768:28;25719:8;17256:15;17244:8;:27;;17236:55;;;;-1:-1:-1;;;17236:55:0;;;;;;;:::i;:::-;25902:15:::1;::::0;25852:218:::1;::::0;25882:5;;-1:-1:-1;;;;;25902:15:0::1;25932:9:::0;25956:14;25985:23;26031:4:::1;26051:8:::0;25852:15:::1;:218::i;:::-;25814:256:::0;;-1:-1:-1;25814:256:0;-1:-1:-1;26081:43:0::1;26101:5:::0;26108:2;25814:256;26081:19:::1;:43::i;:::-;26152:15;::::0;26135:64:::1;::::0;-1:-1:-1;;;26135:64:0;;::::1;::::0;::::1;19704:25:1::0;;;-1:-1:-1;;;;;26152:15:0;;::::1;::::0;26135:42:::1;::::0;19677:18:1;;26135:64:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;26210:59;26244:2;26248:20;26210:33;:59::i;:::-;25448:829:::0;;;;;;;;;;:::o;20658:2284::-;21015:19;21049:28;21092:17;20973:8;17256:15;17244:8;:27;;17236:55;;;;-1:-1:-1;;;17236:55:0;;;;;;;:::i;:::-;21173:15:::1;::::0;21162:7;;-1:-1:-1;;;;;21173:15:0;;::::1;::::0;21162:4;;21173:15:::1;::::0;21162:7:::1;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;21162:26:0::1;;21154:59;;;;-1:-1:-1::0;;;21154:59:0::1;;;;;;;:::i;:::-;21224:24;21285:7:::0;;21251:99:::1;::::0;-1:-1:-1;;;;;21285:7:0::1;21307:13:::0;21335:4;21251:19:::1;:99::i;:::-;21224:126;;21385:9;21371:7;21379:1;21371:10;;;;;;;;:::i;:::-;;;;;;;:23;;21363:66;;;;-1:-1:-1::0;;;21363:66:0::1;;;;;;;:::i;:::-;21457:15;::::0;21489:10;;-1:-1:-1;;;;;21457:15:0;;::::1;::::0;21440:41:::1;::::0;21489:7;;21457:15:::1;::::0;21489:10:::1;;;;:::i;:::-;;;;;;;21440:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;21544:15;;;;;;;;;-1:-1:-1::0;;;;;21544:15:0::1;-1:-1:-1::0;;;;;21537:32:0::1;;21588:41;21603:7;::::0;::::1;;;;;;-1:-1:-1::0;;;;;21603:7:0::1;21612:4;21617:1;21612:7;;;;;;;;:::i;:::-;;;;;;;21621:4;21626:1;21621:7;;;;;;;;:::i;:::-;;;;;;;21588:14;:41::i;:::-;21648:7;21656:1;21648:10;;;;;;;;:::i;:::-;;;;;;;21537:136;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;10969:32:1;;;;10951:51;;11033:2;11018:18;;11011:34;10939:2;10924:18;;10777:274;21537:136:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21515:169;;;::::0;::::1;;21697:24;21703:7;21712:4;21718:2;21697:5;:24::i;:::-;21770:23;21756:7;21764:1;21756:10;;;;;;;;:::i;:::-;;;;;;;:37;;21734:132;;;::::0;-1:-1:-1;;;21734:132:0;;16362:2:1;21734:132:0::1;::::0;::::1;16344:21:1::0;16401:2;16381:18;;;16374:30;16440:34;16420:18;;;16413:62;-1:-1:-1;;;16491:18:1;;;16484:43;16544:19;;21734:132:0::1;16160:409:1::0;21734:132:0::1;21904:13;21920:4;21939:1;21925:4;:11;:15;;;;:::i;:::-;21920:21;;;;;;;;:::i;:::-;;;;;;;21904:37;;21952:29;21996:7;22004:1;21996:10;;;;;;;;:::i;:::-;;;;;;;21984:9;:22;;;;:::i;:::-;21952:54;;22055:233;22083:5;22103:15;;;;;;;;;-1:-1:-1::0;;;;;22103:15:0::1;22133:7;22158:1;22141:7;:14;:18;;;;:::i;:::-;22133:27;;;;;;;;:::i;:::-;;;;;;;22175:21;22211:7;22236:1;22219:7;:14;:18;;;;:::i;:::-;22211:27;;;;;;;;:::i;:::-;;;;;;;22253:24;22055:13;:233::i;:::-;22301:12;22331:7:::0;;;22347:15;22017:271;;-1:-1:-1;22017:271:0;;-1:-1:-1;22301:12:0;22316:47:::1;::::0;-1:-1:-1;;;;;22331:7:0;;::::1;::::0;22340:5;;22347:15:::1;22316:14;:47::i;:::-;22301:62;;22376:61;22400:5;22407:10;22419:4;22425:11;22376:23;:61::i;:::-;22467:15;;;;;;;;;-1:-1:-1::0;;;;;22467:15:0::1;-1:-1:-1::0;;;;;22450:41:0::1;;22513:20;22450:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;22574:15:0::1;::::0;22567:60:::1;::::0;-1:-1:-1;;;22567:60:0;;-1:-1:-1;;;;;10969:32:1;;;22567:60:0::1;::::0;::::1;10951:51:1::0;11018:18;;;11011:34;;;22574:15:0;;::::1;::::0;-1:-1:-1;22567:32:0::1;::::0;-1:-1:-1;10924:18:1;;;-1:-1:-1;22567:60:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22559:69;;;::::0;::::1;;22653:20;::::0;-1:-1:-1;;;22653:20:0;;-1:-1:-1;;;;;10044:32:1;;;22653:20:0::1;::::0;::::1;10026:51:1::0;22653:16:0;::::1;::::0;::::1;::::0;9999:18:1;;22653:20:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22641:32;;22726:7;22734:1;22726:10;;;;;;;;:::i;:::-;;;;;;;22703:20;:33;;;;:::i;:::-;22690:9;:47;22686:209;;;22752:143;22804:10;22869:7;22877:1;22869:10;;;;;;;;:::i;:::-;;;;;;;22846:20;:33;;;;:::i;:::-;22833:47;::::0;:9:::1;:47;:::i;:::-;22752:33;:143::i;:::-;21126:1816;;;;20658:2284:::0;;;;;;;;;;;:::o;27801:610::-;28024:24;28005:8;17256:15;17244:8;:27;;17236:55;;;;-1:-1:-1;;;17236:55:0;;;;;;;:::i;:::-;28091:7:::1;::::0;28071:45:::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;::::1;::::0;-1:-1:-1;;;;;28091:7:0::1;::::0;28100:9;;28071:45;28111:4;;;;;;28071:45;;::::1;::::0;28111:4;;28071:45;28111:4;28071:45;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;28071:19:0::1;::::0;-1:-1:-1;;;28071:45:0:i:1;:::-;28061:55;;28149:11;28135:7;28143:1;28135:10;;;;;;;;:::i;:::-;;;;;;;:25;;28127:68;;;;-1:-1:-1::0;;;28127:68:0::1;;;;;;;:::i;19342:1308::-:0;19680:19;19714:28;19757:17;19638:8;17256:15;17244:8;:27;;17236:55;;;;-1:-1:-1;;;17236:55:0;;;;;;;:::i;:::-;19888:15:::1;::::0;19840:198:::1;::::0;19868:5;;-1:-1:-1;;;;;19888:15:0::1;19918:18:::0;19951:9:::1;19975:14:::0;20004:23;19840:13:::1;:198::i;:::-;20049:12;20079:7:::0;;;20095:15;19802:236;;-1:-1:-1;19802:236:0;;-1:-1:-1;20049:12:0;20064:47:::1;::::0;-1:-1:-1;;;;;20079:7:0;;::::1;::::0;20088:5;;20095:15:::1;20064:14;:47::i;:::-;20049:62;;20122:61;20146:5;20153:10;20165:4;20171:11;20122:23;:61::i;:::-;20211:15;;;;;;;;;-1:-1:-1::0;;;;;20211:15:0::1;-1:-1:-1::0;;;;;20194:41:0::1;;20257:20;20194:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;20316:15:0::1;::::0;20309:60:::1;::::0;-1:-1:-1;;;20309:60:0;;-1:-1:-1;;;;;10969:32:1;;;20309:60:0::1;::::0;::::1;10951:51:1::0;11018:18;;;11011:34;;;20316:15:0;;::::1;::::0;-1:-1:-1;20309:32:0::1;::::0;-1:-1:-1;10924:18:1;;;-1:-1:-1;20309:60:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20301:69;;;::::0;::::1;;20393:20;::::0;-1:-1:-1;;;20393:20:0;;-1:-1:-1;;;;;10044:32:1;;;20393:20:0::1;::::0;::::1;10026:51:1::0;20393:16:0;::::1;::::0;::::1;::::0;9999:18:1;;20393:20:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20381:32;;20440:20;20428:9;:32;20424:179;;;20475:128;20527:10;20556:32;20568:20:::0;20556:9:::1;:32;:::i;20475:128::-;19791:859;19342:1308:::0;;;;;;;;;;;:::o;31185:993::-;31441:24;31413:8;17256:15;17244:8;:27;;17236:55;;;;-1:-1:-1;;;17236:55:0;;;;;;;:::i;:::-;31502:15:::1;::::0;-1:-1:-1;;;;;31502:15:0::1;31491:4:::0;;31502:15:::1;31491:7:::0;::::1;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;31491:26:0::1;;31483:59;;;;-1:-1:-1::0;;;31483:59:0::1;;;;;;;:::i;:::-;31583:7;::::0;31563:45:::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;::::1;::::0;-1:-1:-1;;;;;31583:7:0::1;::::0;31592:9;;31563:45;31603:4;;;;;;31563:45;;::::1;::::0;31603:4;;31563:45;31603:4;31563:45;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;31563:19:0::1;::::0;-1:-1:-1;;;31563:45:0:i:1;:::-;31553:55;;31641:9;31627:7;31635:1;31627:10;;;;;;;;:::i;:::-;;;;;;;:23;;31619:66;;;;-1:-1:-1::0;;;31619:66:0::1;;;;;;;:::i;:::-;31713:15;::::0;31745:10;;-1:-1:-1;;;;;31713:15:0;;::::1;::::0;31696:41:::1;::::0;31745:7;;31713:15:::1;::::0;31745:10:::1;;;;:::i;:::-;;;;;;;31696:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;31798:15:0::1;::::0;::::1;31857:7:::0;;-1:-1:-1;;;;;31798:15:0;;::::1;::::0;-1:-1:-1;31791:32:0::1;::::0;-1:-1:-1;31842:41:0::1;::::0;-1:-1:-1;31857:7:0;;::::1;::::0;31866:4;;;;:7;::::1;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;31875:4;;31880:1;31875:7;;;;;;;:::i;31842:41::-;31902:7;31910:1;31902:10;;;;;;;;:::i;:::-;;;;;;;31791:136;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;10969:32:1;;;;10951:51;;11033:2;11018:18;;11011:34;10939:2;10924:18;;10777:274;31791:136:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31769:169;;;::::0;::::1;;31949:24;31955:7;31964:4;;31949:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;31970:2:0;;-1:-1:-1;31949:5:0::1;::::0;-1:-1:-1;;31949:24:0:i:1;:::-;32000:7;32008:1;32000:10;;;;;;;;:::i;:::-;;;;;;;31988:9;:22;31984:159;;;32025:118;32077:10;32118:7;32126:1;32118:10;;;;;;;;:::i;:::-;;;;;;;32106:9;:22;;;;:::i;32025:118::-;31185:993:::0;;;;;;;;:::o;18394:940::-;18690:17;18671:8;17256:15;17244:8;:27;;17236:55;;;;-1:-1:-1;;;17236:55:0;;;;;;;:::i;:::-;18720:14:::1;18737:4;;18742:1;18737:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;18720:24:::0;-1:-1:-1;18755:14:0::1;18772:4:::0;;18777:15:::1;18791:1;18772:4:::0;18777:15:::1;:::i;:::-;18772:21;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;18755:38;;18806:24;18833:152;18872:13;18900:15;18930:4;;18949:2;18966:8;18833:24;:152::i;:::-;18806:179;;18998:23;19035:7;19043:1;19035:10;;;;;;;;:::i;:::-;;;;;;;19024:8;:21;;;;:::i;:::-;18998:47;;19074:252;19101:6;19122;19143:7;19168:1;19151:7;:14;:18;;;;:::i;:::-;19143:27;;;;;;;;:::i;:::-;;;;;;;19185:15;19215:7;19240:1;19223:7;:14;:18;;;;:::i;:::-;19215:27;;;;;;;;:::i;:::-;;;;;;;19257:18;19290:2;19307:8;19074:12;:252::i;:::-;19056:270;;;;;;;;;18709:625;;;;18394:940:::0;;;;;;;;;;;:::o;24572:868::-;24866:15;24883;24838:8;17256:15;17244:8;:27;;17236:55;;;;-1:-1:-1;;;17236:55:0;;;;;;;:::i;:::-;24916:12:::1;24946:7:::0;;24931:39:::1;::::0;-1:-1:-1;;;;;24946:7:0::1;24955:6:::0;24963;24931:14:::1;:39::i;:::-;24981:54;::::0;-1:-1:-1;;;24981:54:0;;25007:10:::1;24981:54;::::0;::::1;10637:34:1::0;-1:-1:-1;;;;;24981:25:0;::::1;10687:18:1::0;;;10680:43;;;10739:18;;;10732:34;;;24916:54:0;;-1:-1:-1;24981:25:0::1;::::0;10572:18:1;;24981:54:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;25083:20:0::1;::::0;-1:-1:-1;;;25083:20:0;;-1:-1:-1;;;;;10044:32:1;;;25083:20:0::1;::::0;::::1;10026:51:1::0;25047:15:0::1;::::0;;;25083:16;::::1;::::0;::::1;::::0;9999:18:1;;25083:20:0::1;::::0;::::1;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25046:57;;;;25115:14;25135:33;25153:6;25161;25135:17;:33::i;:::-;25114:54;;;25210:6;-1:-1:-1::0;;;;;25200:16:0::1;:6;-1:-1:-1::0;;;;;25200:16:0::1;;:84;;25267:7;25276;25200:84;;;25233:7;25242;25200:84;25179:105:::0;;-1:-1:-1;25179:105:0;-1:-1:-1;25303:21:0;;::::1;;25295:63;;;::::0;-1:-1:-1;;;25295:63:0;;16776:2:1;25295:63:0::1;::::0;::::1;16758:21:1::0;16815:2;16795:18;;;16788:30;16854:31;16834:18;;;16827:59;16903:18;;25295:63:0::1;16574:353:1::0;25295:63:0::1;25388:10;25377:7;:21;;25369:63;;;::::0;-1:-1:-1;;;25369:63:0;;14069:2:1;25369:63:0::1;::::0;::::1;14051:21:1::0;14108:2;14088:18;;;14081:30;14147:31;14127:18;;;14120:59;14196:18;;25369:63:0::1;13867:353:1::0;25369:63:0::1;24905:535;;;;24572:868:::0;;;;;;;;;;;:::o;28419:861::-;28678:24;28650:8;17256:15;17244:8;:27;;17236:55;;;;-1:-1:-1;;;17236:55:0;;;;;;;:::i;:::-;28739:15:::1;::::0;-1:-1:-1;;;;;28739:15:0::1;28728:4:::0;;28739:15:::1;28728:7:::0;::::1;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28728:26:0::1;;28720:59;;;;-1:-1:-1::0;;;28720:59:0::1;;;;;;;:::i;:::-;28821:7;::::0;28800:46:::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;::::1;::::0;-1:-1:-1;;;;;28821:7:0::1;::::0;28830:9:::1;::::0;28800:46;28841:4;;;;;;28800:46;;::::1;::::0;28841:4;;28800:46;28841:4;28800:46;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;28800:20:0::1;::::0;-1:-1:-1;;;28800:46:0:i:1;:::-;28790:56;;28910:12;28879:7;28904:1;28887:7;:14;:18;;;;:::i;:::-;28879:27;;;;;;;;:::i;:::-;;;;;;;:43;;28857:127;;;;-1:-1:-1::0;;;28857:127:0::1;;;;;;;:::i;:::-;29012:15;::::0;29044:10;;-1:-1:-1;;;;;29012:15:0;;::::1;::::0;28995:41:::1;::::0;29044:7;;29012:15:::1;::::0;29044:10:::1;;;;:::i;:::-;;;;;;;28995:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;29097:15:0::1;::::0;::::1;29156:7:::0;;-1:-1:-1;;;;;29097:15:0;;::::1;::::0;-1:-1:-1;29090:32:0::1;::::0;-1:-1:-1;29141:41:0::1;::::0;-1:-1:-1;29156:7:0;;::::1;::::0;29165:4;;;;:7;::::1;;;;:::i;29141:41::-;29201:7;29209:1;29201:10;;;;;;;;:::i;:::-;;;;;;;29090:136;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;10969:32:1;;;;10951:51;;11033:2;11018:18;;11011:34;10939:2;10924:18;;10777:274;29090:136:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29068:169;;;::::0;::::1;;29248:24;29254:7;29263:4;;29248:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;29269:2:0;;-1:-1:-1;29248:5:0::1;::::0;-1:-1:-1;;29248:24:0:i:1;32682:232::-:0;32882:7;;32812:24;;32861:45;;-1:-1:-1;;;;;32882:7:0;32891:8;32901:4;32861:20;:45::i;30207:970::-;30440:24;30421:8;17256:15;17244:8;:27;;17236:55;;;;-1:-1:-1;;;17236:55:0;;;;;;;:::i;:::-;30524:15:::1;::::0;;-1:-1:-1;;;;;30524:15:0::1;::::0;30499:4;;;;30504:15:::1;::::0;30499:4;30504:15:::1;:::i;:::-;30499:21;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30499:40:0::1;;30477:110;;;;-1:-1:-1::0;;;30477:110:0::1;;;;;;;:::i;:::-;30629:7;::::0;30608:45:::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;::::1;::::0;-1:-1:-1;;;;;30629:7:0::1;::::0;30638:8;;30608:45;30648:4;;;;;;30608:45;;::::1;::::0;30648:4;;30608:45;30648:4;30608:45;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;30608:20:0::1;::::0;-1:-1:-1;;;30608:45:0:i:1;:::-;30598:55;;30717:12;30686:7;30711:1;30694:7;:14;:18;;;;:::i;:::-;30686:27;;;;;;;;:::i;:::-;;;;;;;:43;;30664:127;;;;-1:-1:-1::0;;;30664:127:0::1;;;;;;;:::i;:::-;30802:162;30840:4;;30845:1;30840:7;;;;;;;:::i;30802:162::-;30975:35;30981:7;30990:4;;30975:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;31004:4:0::1;::::0;-1:-1:-1;30975:5:0::1;::::0;-1:-1:-1;;30975:35:0:i:1;:::-;31038:15;::::0;;31072:14;;-1:-1:-1;;;;;31038:15:0;;::::1;::::0;31021:42:::1;::::0;31064:7;;31072:18:::1;::::0;::::1;:::i;:::-;31064:27;;;;;;;;:::i;:::-;;;;;;;31021:71;;;;;;;;;;;;;19704:25:1::0;;19692:2;19677:18;;19558:177;31021:71:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;31103:66;31137:2;31141:7;31166:1;31149:7;:14;:18;;;;:::i;:::-;31141:27;;;;;;;;:::i;:::-;;;;;;;31103:33;:66::i;17489:897::-:0;17832:15;17862;17892:17;17790:8;17256:15;17244:8;:27;;17236:55;;;;-1:-1:-1;;;17236:55:0;;;;;;;:::i;:::-;17958:174:::1;17986:6;18007;18028:14;18057;18086:10;18111;17958:13;:174::i;:::-;18143:12;18173:7:::0;;17937:195;;-1:-1:-1;17937:195:0;;-1:-1:-1;18143:12:0;18158:39:::1;::::0;-1:-1:-1;;;;;18173:7:0::1;18182:6:::0;18190;18158:14:::1;:39::i;:::-;18143:54;;18208:58;18232:6;18240:10;18252:4;18258:7;18208:23;:58::i;:::-;18277;18301:6;18309:10;18321:4;18327:7;18277:23;:58::i;:::-;18358:20;::::0;-1:-1:-1;;;18358:20:0;;-1:-1:-1;;;;;10044:32:1;;;18358:20:0::1;::::0;::::1;10026:51:1::0;18358:16:0;::::1;::::0;::::1;::::0;9999:18:1;;18358:20:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18346:32;;17926:460;17489:897:::0;;;;;;;;;;;;;:::o;29288:911::-;29521:24;29502:8;17256:15;17244:8;:27;;17236:55;;;;-1:-1:-1;;;17236:55:0;;;;;;;:::i;:::-;29605:15:::1;::::0;;-1:-1:-1;;;;;29605:15:0::1;::::0;29580:4;;;;29585:15:::1;::::0;29580:4;29585:15:::1;:::i;:::-;29580:21;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29580:40:0::1;;29558:110;;;;-1:-1:-1::0;;;29558:110:0::1;;;;;;;:::i;:::-;29709:7;::::0;29689:45:::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;::::1;::::0;-1:-1:-1;;;;;29709:7:0::1;::::0;29718:9;;29689:45;29729:4;;;;;;29689:45;;::::1;::::0;29729:4;;29689:45;29729:4;29689:45;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;29689:19:0::1;::::0;-1:-1:-1;;;29689:45:0:i:1;:::-;29679:55;;29767:11;29753:7;29761:1;29753:10;;;;;;;;:::i;:::-;;;;;;;:25;;29745:68;;;;-1:-1:-1::0;;;29745:68:0::1;;;;;;;:::i;6749:589::-:0;6885:17;6934:1;6923:8;:12;6915:58;;;;-1:-1:-1;;;6915:58:0;;19358:2:1;6915:58:0;;;19340:21:1;19397:2;19377:18;;;19370:30;19436:34;19416:18;;;19409:62;-1:-1:-1;;;19487:18:1;;;19480:31;19528:19;;6915:58:0;19156:397:1;6915:58:0;7018:1;7006:9;:13;:31;;;;;7036:1;7023:10;:14;7006:31;6984:111;;;;-1:-1:-1;;;6984:111:0;;17951:2:1;6984:111:0;;;17933:21:1;17990:2;17970:18;;;17963:30;18029:32;18009:18;;;18002:60;18079:18;;6984:111:0;17749:354:1;6984:111:0;7106:23;7132:17;:8;7145:3;7132:12;:17::i;:::-;7106:43;-1:-1:-1;7160:17:0;7180:31;7106:43;7200:10;7180:19;:31::i;:::-;7160:51;-1:-1:-1;7222:19:0;7244:40;7268:15;7244:19;:9;7258:4;7244:13;:19::i;:::-;:23;;:40::i;:::-;7222:62;-1:-1:-1;7307:23:0;7222:62;7307:9;:23;:::i;:::-;7295:35;6749:589;-1:-1:-1;;;;;;;6749:589:0:o;8709:640::-;8847:24;8907:1;8892:4;:11;:16;;8884:49;;;;-1:-1:-1;;;8884:49:0;;18310:2:1;8884:49:0;;;18292:21:1;18349:2;18329:18;;;18322:30;-1:-1:-1;;;18368:18:1;;;18361:50;18428:18;;8884:49:0;18108:344:1;8884:49:0;8968:4;:11;8954:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8954:26:0;;8944:36;;9021:9;8991:7;9016:1;8999:7;:14;:18;;;;:::i;:::-;8991:27;;;;;;;;:::i;:::-;;;;;;:39;;;;;9046:9;9072:1;9058:4;:11;:15;;;;:::i;:::-;9046:27;;9041:301;9075:5;;9041:301;;9103:17;;9144:108;9174:7;9200:4;9205:5;9209:1;9205;:5;:::i;:::-;9200:11;;;;;;;;:::i;:::-;;;;;;;9230:4;9235:1;9230:7;;;;;;;;:::i;:::-;;;;;;;9144:11;:108::i;:::-;9102:150;;;;9284:46;9296:7;9304:1;9296:10;;;;;;;;:::i;:::-;;;;;;;9308:9;9319:10;9284:11;:46::i;:::-;9267:7;9275:5;9279:1;9275;:5;:::i;:::-;9267:14;;;;;;;;:::i;:::-;;;;;;:63;;;;;9087:255;;9082:3;;;;;:::i;:::-;;;;9041:301;;;;8709:640;;;;;:::o;8082:619::-;8220:24;8280:1;8265:4;:11;:16;;8257:49;;;;-1:-1:-1;;;8257:49:0;;18310:2:1;8257:49:0;;;18292:21:1;18349:2;18329:18;;;18322:30;-1:-1:-1;;;18368:18:1;;;18361:50;18428:18;;8257:49:0;18108:344:1;8257:49:0;8341:4;:11;8327:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8327:26:0;;8317:36;;8377:8;8364:7;8372:1;8364:10;;;;;;;;:::i;:::-;;;;;;:21;;;;;8401:9;8396:298;8430:1;8416:4;:11;:15;;;;:::i;:::-;8412:1;:19;8396:298;;;8454:17;8473:18;8495:108;8525:7;8551:4;8556:1;8551:7;;;;;;;;:::i;:::-;;;;;;;8577:4;8582:1;8586;8582:5;;;;:::i;:::-;8577:11;;;;;;;;:::i;8495:108::-;8453:150;;;;8635:47;8648:7;8656:1;8648:10;;;;;;;;:::i;:::-;;;;;;;8660:9;8671:10;8635:12;:47::i;:::-;8618:7;8626:5;:1;8630;8626:5;:::i;:::-;8618:14;;;;;;;;:::i;:::-;;;;;;:64;;;;;8438:256;;8433:3;;;;;:::i;:::-;;;;8396:298;;4292:204;4447:41;;-1:-1:-1;;;4447:41:0;;-1:-1:-1;;;;;10318:15:1;;;4447:41:0;;;10300:34:1;10370:15;;;10350:18;;;10343:43;4415:12:0;;4447:25;;;;;;10235:18:1;;4447:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;5329:522::-;5614:51;;;-1:-1:-1;;;;;10655:15:1;;;5614:51:0;;;10637:34:1;10707:15;;;10687:18;;;10680:43;10739:18;;;;10732:34;;;5614:51:0;;;;;;;;;;10572:18:1;;;;5614:51:0;;;;;;;-1:-1:-1;;;;;5614:51:0;-1:-1:-1;;;5614:51:0;;;5589:87;;-1:-1:-1;;;;5589:10:0;;;;:87;;5614:51;5589:87;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5553:123;;;;5709:7;:57;;;;-1:-1:-1;5721:11:0;;:16;;:44;;;5752:4;5741:24;;;;;;;;;;;;:::i;:::-;5687:156;;;;-1:-1:-1;;;5687:156:0;;13651:2:1;5687:156:0;;;13633:21:1;13690:2;13670:18;;;13663:30;13729:34;13709:18;;;13702:62;-1:-1:-1;;;13780:18:1;;;13773:47;13837:19;;5687:156:0;13449:413:1;5687:156:0;5463:388;;5329:522;;;;:::o;26285:831::-;26420:9;26415:694;26449:1;26435:4;:11;:15;;;;:::i;:::-;26431:1;:19;26415:694;;;26473:13;26488:14;26507:4;26512:1;26507:7;;;;;;;;:::i;:::-;;;;;;;26516:4;26521:1;26525;26521:5;;;;:::i;:::-;26516:11;;;;;;;;:::i;:::-;;;;;;;26472:56;;;;26544:14;26564:32;26582:5;26589:6;26564:17;:32::i;:::-;-1:-1:-1;26543:53:0;-1:-1:-1;26611:17:0;26631:7;26639:5;:1;26643;26639:5;:::i;:::-;26631:14;;;;;;;;:::i;:::-;;;;;;;26611:34;;26661:18;26681;26712:6;-1:-1:-1;;;;;26703:15:0;:5;-1:-1:-1;;;;;26703:15:0;;:101;;26782:9;26801:1;26703:101;;;26747:1;26751:9;26703:101;26660:144;;;;26819:10;26850:1;26836:4;:11;:15;;;;:::i;:::-;26832:1;:19;:106;;26935:3;26832:106;;;26886:7;;26871:44;;-1:-1:-1;;;;;26886:7:0;26895:6;26903:4;26908:5;:1;26912;26908:5;:::i;:::-;26903:11;;;;;;;;:::i;26871:44::-;26974:7;;26819:119;;-1:-1:-1;26959:38:0;;-1:-1:-1;;;;;26974:7:0;26983:5;26990:6;26959:14;:38::i;:::-;26953:144;;-1:-1:-1;;;26953:144:0;;;;;20195:25:1;;;20236:18;;;20229:34;;;-1:-1:-1;;;;;20299:32:1;;;20279:18;;;20272:60;26953:50:0;;;;;;;20168:18:1;;26953:144:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26457:652;;;;;;;26452:3;;;;;:::i;:::-;;;;26415:694;;;;26285:831;;;:::o;5859:473::-;6105:45;;;-1:-1:-1;;;;;10969:32:1;;;6105:45:0;;;10951:51:1;11018:18;;;;11011:34;;;6105:45:0;;;;;;;;;;10924:18:1;;;;6105:45:0;;;;;;;-1:-1:-1;;;;;6105:45:0;-1:-1:-1;;;6105:45:0;;;6080:81;;-1:-1:-1;;;;6080:10:0;;;;:81;;6105:45;6080:81;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6044:117;;;;6194:7;:57;;;;-1:-1:-1;6206:11:0;;:16;;:44;;;6237:4;6226:24;;;;;;;;;;;;:::i;:::-;6172:152;;;;-1:-1:-1;;;6172:152:0;;17537:2:1;6172:152:0;;;17519:21:1;17576:2;17556:18;;;17549:30;17615:34;17595:18;;;17588:62;-1:-1:-1;;;17666:18:1;;;17659:43;17719:19;;6172:152:0;17335:409:1;6172:152:0;5966:366;;5859:473;;;:::o;6340:287::-;6464:12;;;6424;6464;;;;;;;;;-1:-1:-1;;;;;6442:7:0;;;6457:5;;6442:35;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6423:54;;;6510:7;6488:131;;;;-1:-1:-1;;;6488:131:0;;14427:2:1;6488:131:0;;;14409:21:1;14466:2;14446:18;;;14439:30;14505:34;14485:18;;;14478:62;14576:34;14556:18;;;14549:62;-1:-1:-1;;;14627:19:1;;;14620:41;14678:19;;6488:131:0;14225:478:1;6488:131:0;6412:215;6340:287;;:::o;22950:1614::-;23171:15;23229:7;;23220:41;;-1:-1:-1;;;23220:41:0;;-1:-1:-1;;;;;10318:15:1;;;23220:41:0;;;10300:34:1;10370:15;;;10350:18;;;10343:43;23171:15:0;;;;23229:7;;;23220:25;;10235:18:1;;23220:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;23220:55:0;;23216:132;;;23301:7;;23292:44;;-1:-1:-1;;;23292:44:0;;-1:-1:-1;;;;;10318:15:1;;;23292:44:0;;;10300:34:1;10370:15;;;10350:18;;;10343:43;23301:7:0;;;;23292:28;;10235:18:1;;23292:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23216:132;23359:16;23430:7;;23359:16;;23397:93;;-1:-1:-1;;;;;23430:7:0;23452:6;23473;23397:18;:93::i;:::-;23358:132;;;;23505:8;23517:1;23505:13;:30;;;;-1:-1:-1;23522:13:0;;23505:30;23501:1056;;;23574:14;;-1:-1:-1;23590:14:0;;-1:-1:-1;23501:1056:0;;;23638:22;23663:114;23694:14;23727:8;23754;23663:12;:114::i;:::-;23638:139;;23814:14;23796;:32;23792:754;;23897:10;23879:14;:28;;23849:131;;;;-1:-1:-1;;;23849:131:0;;14069:2:1;23849:131:0;;;14051:21:1;14108:2;14088:18;;;14081:30;14147:31;14127:18;;;14120:59;14196:18;;23849:131:0;13867:353:1;23849:131:0;24021:14;;-1:-1:-1;24037:14:0;-1:-1:-1;24037:14:0;23792:754;;;24093:22;24118:130;24153:14;24190:8;24221;24118:12;:130::i;:::-;24093:155;;24293:14;24275;:32;;24267:41;;;;;;24375:10;24357:14;:28;;24327:131;;;;-1:-1:-1;;;24327:131:0;;16776:2:1;24327:131:0;;;16758:21:1;16815:2;16795:18;;;16788:30;16854:31;16834:18;;;16827:59;16903:18;;24327:131:0;16574:353:1;24327:131:0;24499:14;-1:-1:-1;24515:14:0;;-1:-1:-1;23792:754:0;23623:934;23501:1056;23205:1359;;22950:1614;;;;;;;;;:::o;3897:387::-;3999:14;4015;4065:6;-1:-1:-1;;;;;4055:16:0;:6;-1:-1:-1;;;;;4055:16:0;;;4047:56;;;;-1:-1:-1;;;4047:56:0;;16006:2:1;4047:56:0;;;15988:21:1;16045:2;16025:18;;;16018:30;16084:29;16064:18;;;16057:57;16131:18;;4047:56:0;15804:351:1;4047:56:0;4142:6;-1:-1:-1;;;;;4133:15:0;:6;-1:-1:-1;;;;;4133:15:0;;:79;;4197:6;4205;4133:79;;;4165:6;4173;4133:79;4114:98;;-1:-1:-1;4114:98:0;-1:-1:-1;;;;;;4231:20:0;;4223:53;;;;-1:-1:-1;;;4223:53:0;;14910:2:1;4223:53:0;;;14892:21:1;14949:2;14929:18;;;14922:30;-1:-1:-1;;;14968:18:1;;;14961:50;15028:18;;4223:53:0;14708:344:1;4223:53:0;3897:387;;;;;:::o;3605:151::-;3663:9;3693:6;;;:30;;-1:-1:-1;3722:1:0;3717;3708:5;3717:1;3722;3708:5;:::i;:::-;3704:9;-1:-1:-1;3703:15:0;;3704:9;3703:15;:::i;:::-;:20;3693:30;3685:63;;;;-1:-1:-1;;;3685:63:0;;12594:2:1;3685:63:0;;;12576:21:1;12633:2;12613:18;;;12606:30;-1:-1:-1;;;12652:18:1;;;12645:50;12712:18;;3685:63:0;12392:344:1;3314:137:0;3372:9;3417:1;3407:5;3411:1;3417;3407:5;:::i;:::-;3403:9;;;3402:16;;3394:49;;;;-1:-1:-1;;;3394:49:0;;13302:2:1;3394:49:0;;;13284:21:1;13341:2;13321:18;;;13314:30;-1:-1:-1;;;13360:18:1;;;13353:50;13420:18;;3394:49:0;13100:344:1;4843:478:0;4970:16;4988;5018:14;5038:26;5049:6;5057;5038:10;:26::i;:::-;5017:47;;;5076:16;5094;5134:32;5142:7;5151:6;5159;5134:7;:32::i;:::-;-1:-1:-1;;;;;5114:75:0;;:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;5075:116:0;;;-1:-1:-1;;;;;5075:116:0;;;5235:6;-1:-1:-1;;;;;5225:16:0;:6;-1:-1:-1;;;;;5225:16:0;;:88;;5294:8;5304;5225:88;;;5258:8;5268;5225:88;5202:111;;;;-1:-1:-1;4843:478:0;-1:-1:-1;;;;;;;4843:478:0:o;7459:541::-;7595:16;7644:1;7632:9;:13;7624:60;;;;-1:-1:-1;;;7624:60:0;;15603:2:1;7624:60:0;;;15585:21:1;15642:2;15622:18;;;15615:30;15681:34;15661:18;;;15654:62;-1:-1:-1;;;15732:18:1;;;15725:32;15774:19;;7624:60:0;15401:398:1;7624:60:0;7729:1;7717:9;:13;:31;;;;;7747:1;7734:10;:14;7717:31;7695:111;;;;-1:-1:-1;;;7695:111:0;;17951:2:1;7695:111:0;;;17933:21:1;17990:2;17970:18;;;17963:30;18029:32;18009:18;;;18002:60;18079:18;;7695:111:0;17749:354:1;7695:111:0;7817:17;7837:34;7866:4;7837:24;:9;7851;7837:13;:24::i;:::-;:28;;:34::i;:::-;7817:54;-1:-1:-1;7882:19:0;7904:34;7934:3;7904:25;:10;7919:9;7904:14;:25::i;:34::-;7882:56;-1:-1:-1;7960:32:0;7990:1;7961:23;7882:56;7961:9;:23;:::i;7960:32::-;7949:43;7459:541;-1:-1:-1;;;;;;7459:541:0:o;4504:331::-;4629:15;4675:1;4665:7;:11;4657:43;;;;-1:-1:-1;;;4657:43:0;;18659:2:1;4657:43:0;;;18641:21:1;18698:2;18678:18;;;18671:30;-1:-1:-1;;;18717:18:1;;;18710:49;18776:18;;4657:43:0;18457:343:1;4657:43:0;4730:1;4719:8;:12;:28;;;;;4746:1;4735:8;:12;4719:28;4711:63;;;;-1:-1:-1;;;4711:63:0;;19007:2:1;4711:63:0;;;18989:21:1;19046:2;19026:18;;;19019:30;-1:-1:-1;;;19065:18:1;;;19058:52;19127:18;;4711:63:0;18805:346:1;4711:63:0;4819:8;4795:21;:7;4807:8;4795:11;:21::i;:::-;:32;;;;:::i;3459:138::-;3517:9;3562:1;3552:5;3556:1;3562;3552:5;:::i;:::-;3548:9;;;3547:16;;3539:50;;;;-1:-1:-1;;;3539:50:0;;11895:2:1;3539:50:0;;;11877:21:1;11934:2;11914:18;;;11907:30;-1:-1:-1;;;11953:18:1;;;11946:51;12014:18;;3539:50:0;11693:345:1;14:134;82:20;;111:31;82:20;111:31;:::i;:::-;14:134;;;:::o;153:367::-;216:8;226:6;280:3;273:4;265:6;261:17;257:27;247:55;;298:1;295;288:12;247:55;-1:-1:-1;321:20:1;;364:18;353:30;;350:50;;;396:1;393;386:12;350:50;433:4;425:6;421:17;409:29;;493:3;486:4;476:6;473:1;469:14;461:6;457:27;453:38;450:47;447:67;;;510:1;507;500:12;525:919;579:5;632:3;625:4;617:6;613:17;609:27;599:55;;650:1;647;640:12;599:55;686:6;673:20;712:4;735:18;772:2;768;765:10;762:36;;;778:18;;:::i;:::-;824:2;821:1;817:10;856:2;850:9;919:2;915:7;910:2;906;902:11;898:25;890:6;886:38;974:6;962:10;959:22;954:2;942:10;939:18;936:46;933:72;;;985:18;;:::i;:::-;1021:2;1014:22;1071:18;;;1105:15;;;;-1:-1:-1;1140:15:1;;;1174;;;1170:24;;1167:33;-1:-1:-1;1164:53:1;;;1213:1;1210;1203:12;1164:53;1235:1;1226:10;;1245:169;1259:2;1256:1;1253:9;1245:169;;;1316:23;1335:3;1316:23;:::i;:::-;1304:36;;1360:12;;;;1277:1;1270:9;;;;;1392:12;;1245:169;;;-1:-1:-1;1432:6:1;525:919;-1:-1:-1;;;;;;;525:919:1:o;1449:188::-;1528:13;;-1:-1:-1;;;;;1570:42:1;;1560:53;;1550:81;;1627:1;1624;1617:12;1642:247;1701:6;1754:2;1742:9;1733:7;1729:23;1725:32;1722:52;;;1770:1;1767;1760:12;1722:52;1809:9;1796:23;1828:31;1853:5;1828:31;:::i;:::-;1878:5;1642:247;-1:-1:-1;;;1642:247:1:o;1894:251::-;1964:6;2017:2;2005:9;1996:7;1992:23;1988:32;1985:52;;;2033:1;2030;2023:12;1985:52;2065:9;2059:16;2084:31;2109:5;2084:31;:::i;2150:805::-;2263:6;2271;2279;2287;2295;2303;2311;2364:3;2352:9;2343:7;2339:23;2335:33;2332:53;;;2381:1;2378;2371:12;2332:53;2420:9;2407:23;2439:31;2464:5;2439:31;:::i;:::-;2489:5;-1:-1:-1;2546:2:1;2531:18;;2518:32;2559:33;2518:32;2559:33;:::i;:::-;2611:7;-1:-1:-1;2665:2:1;2650:18;;2637:32;;-1:-1:-1;2716:2:1;2701:18;;2688:32;;-1:-1:-1;2767:3:1;2752:19;;2739:33;;-1:-1:-1;2824:3:1;2809:19;;2796:33;2838;2796;2838;:::i;:::-;2890:7;2880:17;;;2944:3;2933:9;2929:19;2916:33;2906:43;;2150:805;;;;;;;;;;:::o;2960:874::-;3082:6;3090;3098;3106;3114;3122;3130;3138;3191:3;3179:9;3170:7;3166:23;3162:33;3159:53;;;3208:1;3205;3198:12;3159:53;3247:9;3234:23;3266:31;3291:5;3266:31;:::i;:::-;3316:5;-1:-1:-1;3373:2:1;3358:18;;3345:32;3386:33;3345:32;3386:33;:::i;:::-;3438:7;-1:-1:-1;3492:2:1;3477:18;;3464:32;;-1:-1:-1;3543:2:1;3528:18;;3515:32;;-1:-1:-1;3594:3:1;3579:19;;3566:33;;-1:-1:-1;3646:3:1;3631:19;;3618:33;;-1:-1:-1;3703:3:1;3688:19;;3675:33;3717;3675;3717;:::i;:::-;3769:7;3759:17;;;3823:3;3812:9;3808:19;3795:33;3785:43;;2960:874;;;;;;;;;;;:::o;3839:663::-;3943:6;3951;3959;3967;3975;3983;4036:3;4024:9;4015:7;4011:23;4007:33;4004:53;;;4053:1;4050;4043:12;4004:53;4092:9;4079:23;4111:31;4136:5;4111:31;:::i;:::-;4161:5;-1:-1:-1;4213:2:1;4198:18;;4185:32;;-1:-1:-1;4264:2:1;4249:18;;4236:32;;-1:-1:-1;4315:2:1;4300:18;;4287:32;;-1:-1:-1;4371:3:1;4356:19;;4343:33;4385;4343;4385;:::i;:::-;4437:7;4427:17;;;4491:3;4480:9;4476:19;4463:33;4453:43;;3839:663;;;;;;;;:::o;4507:916::-;4647:6;4655;4663;4671;4679;4687;4695;4703;4756:3;4744:9;4735:7;4731:23;4727:33;4724:53;;;4773:1;4770;4763:12;4724:53;4813:9;4800:23;4846:18;4838:6;4835:30;4832:50;;;4878:1;4875;4868:12;4832:50;4917:70;4979:7;4970:6;4959:9;4955:22;4917:70;:::i;:::-;5006:8;;-1:-1:-1;4891:96:1;-1:-1:-1;;5088:2:1;5073:18;;5060:32;;-1:-1:-1;5139:2:1;5124:18;;5111:32;;-1:-1:-1;5190:2:1;5175:18;;5162:32;;-1:-1:-1;5241:3:1;5226:19;;5213:33;;-1:-1:-1;5296:3:1;5281:19;;5268:33;5310:31;5268:33;5310:31;:::i;:::-;5360:5;5350:15;;;5412:3;5401:9;5397:19;5384:33;5374:43;;4507:916;;;;;;;;;;;:::o;5428:758::-;5557:6;5565;5573;5581;5589;5597;5650:3;5638:9;5629:7;5625:23;5621:33;5618:53;;;5667:1;5664;5657:12;5618:53;5707:9;5694:23;5740:18;5732:6;5729:30;5726:50;;;5772:1;5769;5762:12;5726:50;5795:61;5848:7;5839:6;5828:9;5824:22;5795:61;:::i;:::-;5785:71;;;5903:2;5892:9;5888:18;5875:32;5865:42;;5954:2;5943:9;5939:18;5926:32;5916:42;;6005:2;5994:9;5990:18;5977:32;5967:42;;6059:3;6048:9;6044:19;6031:33;6073:31;6098:5;6073:31;:::i;6191:277::-;6258:6;6311:2;6299:9;6290:7;6286:23;6282:32;6279:52;;;6327:1;6324;6317:12;6279:52;6359:9;6353:16;6412:5;6405:13;6398:21;6391:5;6388:32;6378:60;;6434:1;6431;6424:12;6473:293;6552:6;6560;6613:2;6601:9;6592:7;6588:23;6584:32;6581:52;;;6629:1;6626;6619:12;6581:52;6652:40;6682:9;6652:40;:::i;:::-;6642:50;;6711:49;6756:2;6745:9;6741:18;6711:49;:::i;:::-;6701:59;;6473:293;;;;;:::o;6771:184::-;6841:6;6894:2;6882:9;6873:7;6869:23;6865:32;6862:52;;;6910:1;6907;6900:12;6862:52;-1:-1:-1;6933:16:1;;6771:184;-1:-1:-1;6771:184:1:o;6960:709::-;7073:6;7081;7089;7097;7105;7158:3;7146:9;7137:7;7133:23;7129:33;7126:53;;;7175:1;7172;7165:12;7126:53;7211:9;7198:23;7188:33;;7272:2;7261:9;7257:18;7244:32;7299:18;7291:6;7288:30;7285:50;;;7331:1;7328;7321:12;7285:50;7370:70;7432:7;7423:6;7412:9;7408:22;7370:70;:::i;:::-;7459:8;;-1:-1:-1;7344:96:1;-1:-1:-1;;7544:2:1;7529:18;;7516:32;7557:31;7516:32;7557:31;:::i;:::-;6960:709;;;;-1:-1:-1;6960:709:1;;7659:2;7644:18;7631:32;;6960:709;-1:-1:-1;;6960:709:1:o;7674:416::-;7767:6;7775;7828:2;7816:9;7807:7;7803:23;7799:32;7796:52;;;7844:1;7841;7834:12;7796:52;7880:9;7867:23;7857:33;;7941:2;7930:9;7926:18;7913:32;7968:18;7960:6;7957:30;7954:50;;;8000:1;7997;7990:12;7954:50;8023:61;8076:7;8067:6;8056:9;8052:22;8023:61;:::i;:::-;8013:71;;;7674:416;;;;;:::o;8095:245::-;8174:6;8182;8235:2;8223:9;8214:7;8210:23;8206:32;8203:52;;;8251:1;8248;8241:12;8203:52;-1:-1:-1;;8274:16:1;;8330:2;8315:18;;;8309:25;8274:16;;8309:25;;-1:-1:-1;8095:245:1:o;8345:778::-;8467:6;8475;8483;8491;8499;8507;8560:3;8548:9;8539:7;8535:23;8531:33;8528:53;;;8577:1;8574;8567:12;8528:53;8613:9;8600:23;8590:33;;8670:2;8659:9;8655:18;8642:32;8632:42;;8725:2;8714:9;8710:18;8697:32;8752:18;8744:6;8741:30;8738:50;;;8784:1;8781;8774:12;8738:50;8823:70;8885:7;8876:6;8865:9;8861:22;8823:70;:::i;:::-;8912:8;;-1:-1:-1;8797:96:1;-1:-1:-1;;8997:2:1;8982:18;;8969:32;9010:31;8969:32;9010:31;:::i;:::-;9060:5;9050:15;;;9112:3;9101:9;9097:19;9084:33;9074:43;;8345:778;;;;;;;;:::o;9128:316::-;9205:6;9213;9221;9274:2;9262:9;9253:7;9249:23;9245:32;9242:52;;;9290:1;9287;9280:12;9242:52;-1:-1:-1;;9313:23:1;;;9383:2;9368:18;;9355:32;;-1:-1:-1;9434:2:1;9419:18;;;9406:32;;9128:316;-1:-1:-1;9128:316:1:o;9449:426::-;9578:3;9616:6;9610:13;9641:1;9651:129;9665:6;9662:1;9659:13;9651:129;;;9763:4;9747:14;;;9743:25;;9737:32;9724:11;;;9717:53;9680:12;9651:129;;;9798:6;9795:1;9792:13;9789:48;;;9833:1;9824:6;9819:3;9815:16;9808:27;9789:48;-1:-1:-1;9853:16:1;;;;;9449:426;-1:-1:-1;;9449:426:1:o;11056:632::-;11227:2;11279:21;;;11349:13;;11252:18;;;11371:22;;;11198:4;;11227:2;11450:15;;;;11424:2;11409:18;;;11198:4;11493:169;11507:6;11504:1;11501:13;11493:169;;;11568:13;;11556:26;;11637:15;;;;11602:12;;;;11529:1;11522:9;11493:169;;;-1:-1:-1;11679:3:1;;11056:632;-1:-1:-1;;;;;;11056:632:1:o;12043:344::-;12245:2;12227:21;;;12284:2;12264:18;;;12257:30;-1:-1:-1;;;12318:2:1;12303:18;;12296:50;12378:2;12363:18;;12043:344::o;12741:354::-;12943:2;12925:21;;;12982:2;12962:18;;;12955:30;13021:32;13016:2;13001:18;;12994:60;13086:2;13071:18;;12741:354::o;15057:339::-;15259:2;15241:21;;;15298:2;15278:18;;;15271:30;-1:-1:-1;;;15332:2:1;15317:18;;15310:45;15387:2;15372:18;;15057:339::o;16932:398::-;17134:2;17116:21;;;17173:2;17153:18;;;17146:30;17212:34;17207:2;17192:18;;17185:62;-1:-1:-1;;;17278:2:1;17263:18;;17256:32;17320:3;17305:19;;16932:398::o;20667:128::-;20707:3;20738:1;20734:6;20731:1;20728:13;20725:39;;;20744:18;;:::i;:::-;-1:-1:-1;20780:9:1;;20667:128::o;20800:217::-;20840:1;20866;20856:132;;20910:10;20905:3;20901:20;20898:1;20891:31;20945:4;20942:1;20935:15;20973:4;20970:1;20963:15;20856:132;-1:-1:-1;21002:9:1;;20800:217::o;21022:168::-;21062:7;21128:1;21124;21120:6;21116:14;21113:1;21110:21;21105:1;21098:9;21091:17;21087:45;21084:71;;;21135:18;;:::i;:::-;-1:-1:-1;21175:9:1;;21022:168::o;21195:125::-;21235:4;21263:1;21260;21257:8;21254:34;;;21268:18;;:::i;:::-;-1:-1:-1;21305:9:1;;21195:125::o;21325:136::-;21364:3;21392:5;21382:39;;21401:18;;:::i;:::-;-1:-1:-1;;;21437:18:1;;21325:136::o;21466:135::-;21505:3;-1:-1:-1;;21526:17:1;;21523:43;;;21546:18;;:::i;:::-;-1:-1:-1;21593:1:1;21582:13;;21466:135::o;21606:127::-;21667:10;21662:3;21658:20;21655:1;21648:31;21698:4;21695:1;21688:15;21722:4;21719:1;21712:15;21738:127;21799:10;21794:3;21790:20;21787:1;21780:31;21830:4;21827:1;21820:15;21854:4;21851:1;21844:15;21870:127;21931:10;21926:3;21922:20;21919:1;21912:31;21962:4;21959:1;21952:15;21986:4;21983:1;21976:15;22002:131;-1:-1:-1;;;;;22077:31:1;;22067:42;;22057:70;;22123:1;22120;22113:12;22057:70;22002:131;:::o
Swarm Source
ipfs://9e009d451135d8f7785354bbd0067448d7f55ac869805336dbb4ecd29444fdc4
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.