Source Code
Overview
ETH Balance
ETH Value
$0.00Latest 25 from a total of 22,097 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Swap Tokens For ... | 760090 | 817 days ago | IN | 0 ETH | 0.00004021 | ||||
| Swap Exact Token... | 582561 | 841 days ago | IN | 0 ETH | 0.00001784 | ||||
| Swap Exact ETH F... | 352480 | 874 days ago | IN | 0.005 ETH | 0.00000012 | ||||
| Swap Tokens For ... | 347461 | 875 days ago | IN | 0 ETH | 0.00008711 | ||||
| Swap Tokens For ... | 347460 | 875 days ago | IN | 0 ETH | 0.00008708 | ||||
| Swap Tokens For ... | 332255 | 877 days ago | IN | 0 ETH | 0.00004075 | ||||
| Swap Tokens For ... | 331621 | 877 days ago | IN | 0 ETH | 0.00003216 | ||||
| Swap Tokens For ... | 284543 | 883 days ago | IN | 0 ETH | 0.00003146 | ||||
| Swap Tokens For ... | 277781 | 884 days ago | IN | 0 ETH | 0.00004127 | ||||
| Swap Exact Token... | 277780 | 884 days ago | IN | 0 ETH | 0.00019651 | ||||
| Swap Tokens For ... | 277776 | 884 days ago | IN | 0 ETH | 0.00004108 | ||||
| Swap Exact Token... | 273623 | 885 days ago | IN | 0 ETH | 0.00020023 | ||||
| Swap Tokens For ... | 266423 | 886 days ago | IN | 0 ETH | 0.00021648 | ||||
| Swap Tokens For ... | 266271 | 886 days ago | IN | 0 ETH | 0.00024726 | ||||
| Swap Exact Token... | 266090 | 886 days ago | IN | 0 ETH | 0.00005115 | ||||
| Swap Tokens For ... | 265903 | 886 days ago | IN | 0 ETH | 0.00004516 | ||||
| Swap Tokens For ... | 265903 | 886 days ago | IN | 0 ETH | 0.00004518 | ||||
| Swap Exact Token... | 265720 | 886 days ago | IN | 0 ETH | 0.00004482 | ||||
| Swap Exact Token... | 265720 | 886 days ago | IN | 0 ETH | 0.0002138 | ||||
| Swap Tokens For ... | 265715 | 886 days ago | IN | 0 ETH | 0.00004428 | ||||
| Swap Tokens For ... | 265715 | 886 days ago | IN | 0 ETH | 0.00004429 | ||||
| Swap Exact Token... | 260036 | 887 days ago | IN | 0 ETH | 0.00004521 | ||||
| Swap Exact Token... | 260036 | 887 days ago | IN | 0 ETH | 0.00004521 | ||||
| Swap Tokens For ... | 260032 | 887 days ago | IN | 0 ETH | 0.00004482 | ||||
| Swap Tokens For ... | 260032 | 887 days ago | IN | 0 ETH | 0.0002071 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 760090 | 817 days ago | 0 ETH | ||||
| 582561 | 841 days ago | 0 ETH | ||||
| 347461 | 875 days ago | 0 ETH | ||||
| 347460 | 875 days ago | 0 ETH | ||||
| 332255 | 877 days ago | 0 ETH | ||||
| 331621 | 877 days ago | 0 ETH | ||||
| 284543 | 883 days ago | 0 ETH | ||||
| 277781 | 884 days ago | 0 ETH | ||||
| 277780 | 884 days ago | 0 ETH | ||||
| 277780 | 884 days ago | 0 ETH | ||||
| 277780 | 884 days ago | 0 ETH | ||||
| 277780 | 884 days ago | 0 ETH | ||||
| 277776 | 884 days ago | 0 ETH | ||||
| 273623 | 885 days ago | 0.00995145 ETH | ||||
| 273623 | 885 days ago | 0.00995145 ETH | ||||
| 273623 | 885 days ago | 0 ETH | ||||
| 273623 | 885 days ago | 0 ETH | ||||
| 273623 | 885 days ago | 0 ETH | ||||
| 273623 | 885 days ago | 0 ETH | ||||
| 273623 | 885 days ago | 0 ETH | ||||
| 266423 | 886 days ago | 0 ETH | ||||
| 266423 | 886 days ago | 0 ETH | ||||
| 266423 | 886 days ago | 0 ETH | ||||
| 266423 | 886 days ago | 0 ETH | ||||
| 266271 | 886 days ago | 0 ETH |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
EchodexRouterFee
Compiler Version
v0.6.6+commit.6c089d02
Contract Source Code (Solidity)
/**
*Submitted for verification at lineascan.build/ on 2023-07-19
*/
pragma solidity =0.6.6;
// SPDX-License-Identifier: GPL-3.0
interface IEchodexFactory {
event PairCreated(address indexed token0, address indexed token1, address pair, uint256);
function getPair(address tokenA, address tokenB) external view returns (address pair);
function allPairs(uint256) external view returns (address pair);
function allPairsLength() external view returns (uint256);
function createPair(address tokenA, address tokenB) external returns (address pair);
function INIT_CODE_PAIR_HASH() external view returns (bytes32);
function calcFeeOrReward(address tokenOut, uint amountOut, uint percent) external view returns(uint amount);
function tokenFee() external view returns (address);
function tokenReward() external view returns (address);
function owner() external view returns (address);
function receiveFeeAddress() external view returns (address);
function setTokenFee(address) external;
function setReceiveFeeAddress(address) external;
function rewardPercent(address pair) external view returns (uint percent);
function setRefundPercentPair(address, uint) external;
function setFeePath(address, address[] calldata) external;
function feePathLength(address) external view returns(uint);
}
// SPDX-License-Identifier: MIT
/**
* @dev Wrappers over Solidity's arithmetic operations with added overflow
* checks.
*
* Arithmetic operations in Solidity wrap on overflow. This can easily result
* in bugs, because programmers usually assume that an overflow raises an
* error, which is the standard behavior in high level programming languages.
* `SafeMath` restores this intuition by reverting the transaction when an
* operation overflows.
*
* Using this library instead of the unchecked operations eliminates an entire
* class of bugs, so it's recommended to use it always.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
uint256 c = a + b;
if (c < a) return (false, 0);
return (true, c);
}
/**
* @dev Returns the substraction of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
if (b > a) return (false, 0);
return (true, a - b);
}
/**
* @dev Returns the multiplication of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) return (true, 0);
uint256 c = a * b;
if (c / a != b) return (false, 0);
return (true, c);
}
/**
* @dev Returns the division of two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
if (b == 0) return (false, 0);
return (true, a / b);
}
/**
* @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
if (b == 0) return (false, 0);
return (true, a % b);
}
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
*
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
require(b <= a, "SafeMath: subtraction overflow");
return a - b;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
*
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
if (a == 0) return 0;
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
/**
* @dev Returns the integer division of two unsigned integers, reverting on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
require(b > 0, "SafeMath: division by zero");
return a / b;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
require(b > 0, "SafeMath: modulo by zero");
return a % b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {trySub}.
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b <= a, errorMessage);
return a - b;
}
/**
* @dev Returns the integer division of two unsigned integers, reverting with custom message on
* division by zero. The result is rounded towards zero.
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {tryDiv}.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b > 0, errorMessage);
return a / b;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting with custom message when dividing by zero.
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {tryMod}.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b > 0, errorMessage);
return a % b;
}
}
// SPDX-License-Identifier: GPL-3.0
interface IEchodexPair {
function transferFrom(
address from,
address to,
uint256 value
) external returns (bool);
function permit(
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) external;
function factory() external view returns (address);
function token0() external view returns (address);
function token1() external view returns (address);
function getReserves()
external
view
returns (
uint112 reserve0,
uint112 reserve1,
uint32 blockTimestampLast
);
function mint(address to) external returns (uint256 liquidity);
function burn(address to) external returns (uint256 amount0, uint256 amount1);
function swap(
uint256 amount0Out,
uint256 amount1Out,
address to,
bytes calldata data
) external;
function swapPayWithTokenFee(
uint256 amount0Out,
uint256 amount1Out,
address to,
bytes calldata data
) external;
function addFee(uint amount) external;
function initialize(address, address) external;
function currentFee() external view returns (uint);
}
// SPDX-License-Identifier: GPL-3.0
library EchodexLibrary {
using SafeMath for uint256;
// returns sorted token addresses, used to handle return values from pairs sorted in this order
function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {
require(tokenA != tokenB, "EchodexLibrary: IDENTICAL_ADDRESSES");
(token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
require(token0 != address(0), "EchodexLibrary: ZERO_ADDRESS");
}
// calculates the CREATE2 address for a pair without making any external calls
function pairFor(
address factory,
address tokenA,
address tokenB
) internal pure returns (address pair) {
(address token0, address token1) = sortTokens(tokenA, tokenB);
pair = address(
uint256(
keccak256(
abi.encodePacked(
hex"ff",
factory,
keccak256(abi.encodePacked(token0, token1)),
hex"0b8162ee38463c04a0629406af3b667364e4487dca66c5c7485a4a5e997811ea" // init code hash
)
)
)
);
}
// fetches and sorts the reserves for a pair
function getReserves(
address factory,
address tokenA,
address tokenB
) internal view returns (uint256 reserveA, uint256 reserveB) {
(address token0, ) = sortTokens(tokenA, tokenB);
(uint256 reserve0, uint256 reserve1, ) = IEchodexPair(pairFor(factory, tokenA, tokenB)).getReserves();
(reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0);
}
// given some amount of an asset and pair reserves, returns an equivalent amount of the other asset
function quote(
uint256 amountA,
uint256 reserveA,
uint256 reserveB
) internal pure returns (uint256 amountB) {
require(amountA > 0, "EchodexLibrary: INSUFFICIENT_AMOUNT");
require(reserveA > 0 && reserveB > 0, "EchodexLibrary: INSUFFICIENT_LIQUIDITY");
amountB = amountA.mul(reserveB) / reserveA;
}
// given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset
function getAmountOutRouterFee(
uint256 amountIn,
uint256 reserveIn,
uint256 reserveOut
) internal pure returns (uint256 amountOut) {
require(amountIn > 0, "EchodexLibrary: INSUFFICIENT_INPUT_AMOUNT");
require(reserveIn > 0 && reserveOut > 0, "EchodexLibrary: INSUFFICIENT_LIQUIDITY");
uint256 numerator = amountIn.mul(reserveOut);
uint256 denominator = reserveIn.add(amountIn);
amountOut = numerator / denominator;
}
function getAmountOut(
uint256 amountIn,
uint256 reserveIn,
uint256 reserveOut
) internal pure returns (uint256 amountOut) {
require(amountIn > 0, "EchodexLibrary: INSUFFICIENT_INPUT_AMOUNT");
require(reserveIn > 0 && reserveOut > 0, "EchodexLibrary: INSUFFICIENT_LIQUIDITY");
uint256 numerator = amountIn.mul(reserveOut);
uint256 denominator = reserveIn.add(amountIn);
amountOut = numerator / denominator;
amountOut = amountOut.mul(997) / 1000;
}
// given an output amount of an asset and pair reserves, returns a required input amount of the other asset
function getAmountInRouterFee(
uint256 amountOut,
uint256 reserveIn,
uint256 reserveOut
) internal pure returns (uint256 amountIn) {
require(amountOut > 0, "EchodexLibrary: INSUFFICIENT_OUTPUT_AMOUNT");
require(reserveIn > 0 && reserveOut > 0, "EchodexLibrary: INSUFFICIENT_LIQUIDITY");
uint256 numerator = reserveIn.mul(amountOut);
uint256 denominator = reserveOut.sub(amountOut);
amountIn = (numerator / denominator).add(1);
}
function getAmountIn(
uint256 amountOut,
uint256 reserveIn,
uint256 reserveOut
) internal pure returns (uint256 amountIn) {
require(amountOut > 0, "EchodexLibrary: INSUFFICIENT_OUTPUT_AMOUNT");
require(reserveIn > 0 && reserveOut > 0, "EchodexLibrary: INSUFFICIENT_LIQUIDITY");
amountOut = amountOut.mul(1000) / 997;
uint256 numerator = reserveIn.mul(amountOut);
uint256 denominator = reserveOut.sub(amountOut);
amountIn = (numerator / denominator).add(1);
}
// performs chained getAmountOut calculations on any number of pairs
function getAmountsOutRouterFee(
address factory,
uint256 amountIn,
address[] memory path
) internal view returns (uint256[] memory amounts) {
require(path.length >= 2, "EchodexLibrary: 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] = getAmountOutRouterFee(amounts[i], reserveIn, reserveOut);
}
}
function getAmountsOut(
address factory,
uint256 amountIn,
address[] memory path
) internal view returns (uint256[] memory amounts) {
require(path.length >= 2, "EchodexLibrary: INVALID_PATH");
amounts = new uint256[](path.length);
amounts[0] = amountIn;
for (uint256 i; i < path.length - 1; i++) {
(uint256 reserveIn, uint256 reserveOut) = getReserves(factory, path[i], path[i + 1]);
amounts[i + 1] = getAmountOut(amounts[i], reserveIn, reserveOut);
}
}
// performs chained getAmountIn calculations on any number of pairs
function getAmountsInRouterFee(
address factory,
uint256 amountOut,
address[] memory path
) internal view returns (uint256[] memory amounts) {
require(path.length >= 2, "EchodexLibrary: 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] = getAmountInRouterFee(amounts[i], reserveIn, reserveOut);
}
}
function getAmountsIn(
address factory,
uint256 amountOut,
address[] memory path
) internal view returns (uint256[] memory amounts) {
require(path.length >= 2, "EchodexLibrary: 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);
}
}
}
// SPDX-License-Identifier: GPL-3.0-or-later
// helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false
library TransferHelper {
function safeApprove(
address token,
address to,
uint256 value
) internal {
// bytes4(keccak256(bytes('approve(address,uint256)')));
(bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value));
require(
success && (data.length == 0 || abi.decode(data, (bool))),
'TransferHelper::safeApprove: approve failed'
);
}
function safeTransfer(
address token,
address to,
uint256 value
) internal {
// bytes4(keccak256(bytes('transfer(address,uint256)')));
(bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
require(
success && (data.length == 0 || abi.decode(data, (bool))),
'TransferHelper::safeTransfer: transfer failed'
);
}
function safeTransferFrom(
address token,
address from,
address to,
uint256 value
) internal {
// bytes4(keccak256(bytes('transferFrom(address,address,uint256)')));
(bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value));
require(
success && (data.length == 0 || abi.decode(data, (bool))),
'TransferHelper::transferFrom: transferFrom failed'
);
}
function safeTransferETH(address to, uint256 value) internal {
(bool success, ) = to.call{value: value}(new bytes(0));
require(success, 'TransferHelper::safeTransferETH: ETH transfer failed');
}
}
// SPDX-License-Identifier: GPL-3.0
interface IERC20 {
event Approval(address indexed owner, address indexed spender, uint256 value);
event Transfer(address indexed from, address indexed to, uint256 value);
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function decimals() external view returns (uint8);
function totalSupply() external view returns (uint256);
function balanceOf(address owner) external view returns (uint256);
function allowance(address owner, address spender) external view returns (uint256);
function approve(address spender, uint256 value) external returns (bool);
function transfer(address to, uint256 value) external returns (bool);
function transferFrom(
address from,
address to,
uint256 value
) external returns (bool);
}
// SPDX-License-Identifier: GPL-3.0
interface IWETH {
function deposit() external payable;
function transfer(address to, uint256 value) external returns (bool);
function withdraw(uint256) external;
}
// SPDX-License-Identifier: GPL-3.0
contract EchodexRouterFee {
using SafeMath for uint256;
address public immutable factory;
address public immutable WETH;
modifier ensure(uint256 deadline) {
require(deadline >= block.timestamp, "EchodexRouter: EXPIRED");
_;
}
constructor(address _factory, address _WETH) public {
factory = _factory;
WETH = _WETH;
}
receive() external payable {
assert(msg.sender == WETH); // only accept ETH via fallback from the WETH contract
}
// **** ADD LIQUIDITY ****
function _addLiquidity(
address tokenA,
address tokenB,
uint256 amountADesired,
uint256 amountBDesired,
uint256 amountAMin,
uint256 amountBMin
) internal virtual returns (uint256 amountA, uint256 amountB) {
// create the pair if it doesn't exist yet
if (IEchodexFactory(factory).getPair(tokenA, tokenB) == address(0)) {
IEchodexFactory(factory).createPair(tokenA, tokenB);
}
(uint256 reserveA, uint256 reserveB) = EchodexLibrary.getReserves(factory, tokenA, tokenB);
if (reserveA == 0 && reserveB == 0) {
(amountA, amountB) = (amountADesired, amountBDesired);
} else {
uint256 amountBOptimal = EchodexLibrary.quote(amountADesired, reserveA, reserveB);
if (amountBOptimal <= amountBDesired) {
require(amountBOptimal >= amountBMin, "EchodexRouter: INSUFFICIENT_B_AMOUNT");
(amountA, amountB) = (amountADesired, amountBOptimal);
} else {
uint256 amountAOptimal = EchodexLibrary.quote(amountBDesired, reserveB, reserveA);
assert(amountAOptimal <= amountADesired);
require(amountAOptimal >= amountAMin, "EchodexRouter: INSUFFICIENT_A_AMOUNT");
(amountA, amountB) = (amountAOptimal, amountBDesired);
}
}
}
function addLiquidity(
address tokenA,
address tokenB,
uint256 amountADesired,
uint256 amountBDesired,
uint256 amountAMin,
uint256 amountBMin,
address to,
uint256 deadline
)
external
virtual
ensure(deadline)
returns (
uint256 amountA,
uint256 amountB,
uint256 liquidity
)
{
(amountA, amountB) = _addLiquidity(tokenA, tokenB, amountADesired, amountBDesired, amountAMin, amountBMin);
address pair = EchodexLibrary.pairFor(factory, tokenA, tokenB);
TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA);
TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB);
liquidity = IEchodexPair(pair).mint(to);
}
function addLiquidityETH(
address token,
uint256 amountTokenDesired,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline
)
external
payable
virtual
ensure(deadline)
returns (
uint256 amountToken,
uint256 amountETH,
uint256 liquidity
)
{
(amountToken, amountETH) = _addLiquidity(
token,
WETH,
amountTokenDesired,
msg.value,
amountTokenMin,
amountETHMin
);
address pair = EchodexLibrary.pairFor(factory, token, WETH);
TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken);
IWETH(WETH).deposit{value: amountETH}();
assert(IWETH(WETH).transfer(pair, amountETH));
liquidity = IEchodexPair(pair).mint(to);
// refund dust eth, if any
if (msg.value > amountETH) TransferHelper.safeTransferETH(msg.sender, msg.value - amountETH);
}
// **** REMOVE LIQUIDITY ****
function removeLiquidity(
address tokenA,
address tokenB,
uint256 liquidity,
uint256 amountAMin,
uint256 amountBMin,
address to,
uint256 deadline
) public virtual ensure(deadline) returns (uint256 amountA, uint256 amountB) {
address pair = EchodexLibrary.pairFor(factory, tokenA, tokenB);
IEchodexPair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair
(uint256 amount0, uint256 amount1) = IEchodexPair(pair).burn(to);
(address token0, ) = EchodexLibrary.sortTokens(tokenA, tokenB);
(amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0);
require(amountA >= amountAMin, "EchodexRouter: INSUFFICIENT_A_AMOUNT");
require(amountB >= amountBMin, "EchodexRouter: INSUFFICIENT_B_AMOUNT");
}
function removeLiquidityETH(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline
) public virtual ensure(deadline) returns (uint256 amountToken, uint256 amountETH) {
(amountToken, amountETH) = removeLiquidity(
token,
WETH,
liquidity,
amountTokenMin,
amountETHMin,
address(this),
deadline
);
TransferHelper.safeTransfer(token, to, amountToken);
IWETH(WETH).withdraw(amountETH);
TransferHelper.safeTransferETH(to, amountETH);
}
function removeLiquidityWithPermit(
address tokenA,
address tokenB,
uint256 liquidity,
uint256 amountAMin,
uint256 amountBMin,
address to,
uint256 deadline,
bool approveMax,
uint8 v,
bytes32 r,
bytes32 s
) external virtual returns (uint256 amountA, uint256 amountB) {
address pair = EchodexLibrary.pairFor(factory, tokenA, tokenB);
uint256 value = approveMax ? uint256(-1) : liquidity;
IEchodexPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
(amountA, amountB) = removeLiquidity(tokenA, tokenB, liquidity, amountAMin, amountBMin, to, deadline);
}
function removeLiquidityETHWithPermit(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline,
bool approveMax,
uint8 v,
bytes32 r,
bytes32 s
) external virtual returns (uint256 amountToken, uint256 amountETH) {
address pair = EchodexLibrary.pairFor(factory, token, WETH);
uint256 value = approveMax ? uint256(-1) : liquidity;
IEchodexPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
(amountToken, amountETH) = removeLiquidityETH(token, liquidity, amountTokenMin, amountETHMin, to, deadline);
}
// **** REMOVE LIQUIDITY (supporting fee-on-transfer tokens) ****
function removeLiquidityETHSupportingFeeOnTransferTokens(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline
) public virtual ensure(deadline) returns (uint256 amountETH) {
(, amountETH) = removeLiquidity(token, WETH, liquidity, amountTokenMin, amountETHMin, address(this), deadline);
TransferHelper.safeTransfer(token, to, IERC20(token).balanceOf(address(this)));
IWETH(WETH).withdraw(amountETH);
TransferHelper.safeTransferETH(to, amountETH);
}
function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline,
bool approveMax,
uint8 v,
bytes32 r,
bytes32 s
) external virtual returns (uint256 amountETH) {
address pair = EchodexLibrary.pairFor(factory, token, WETH);
uint256 value = approveMax ? uint256(-1) : liquidity;
IEchodexPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
amountETH = removeLiquidityETHSupportingFeeOnTransferTokens(
token,
liquidity,
amountTokenMin,
amountETHMin,
to,
deadline
);
}
// **** SWAP ****
// requires the initial amount to have already been sent to the first pair
function _swap(
uint256[] memory amounts,
address[] memory path,
address _to,
uint[] memory amountsFeeAddMore
) internal virtual {
address tokenFee = IEchodexFactory(factory).tokenFee(); // gas savings
for (uint256 i; i < path.length - 1; i++) {
(address input, address output) = (path[i], path[i + 1]);
(address token0,) = EchodexLibrary.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 ? EchodexLibrary.pairFor(factory, output, path[i + 2]) : _to;
address pair = EchodexLibrary.pairFor(factory, input, output);
if (amountsFeeAddMore[i] > 0) {
if (IERC20(tokenFee).allowance(address(this), pair) == 0) {
IERC20(tokenFee).approve(pair, uint256(-1));
}
IERC20(tokenFee).transferFrom(msg.sender, address(this), amountsFeeAddMore[i]);
IEchodexPair(pair).addFee(amountsFeeAddMore[i]);
}
IEchodexPair(pair).swapPayWithTokenFee(amount0Out, amount1Out, to, new bytes(0));
}
}
function swapExactTokensForTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline,
uint[] calldata amountsFeeAddMore
) external virtual ensure(deadline) returns (uint256[] memory amounts) {
amounts = EchodexLibrary.getAmountsOutRouterFee(factory, amountIn, path);
require(amounts[amounts.length - 1] >= amountOutMin, "EchodexRouter: INSUFFICIENT_OUTPUT_AMOUNT");
TransferHelper.safeTransferFrom(
path[0],
msg.sender,
EchodexLibrary.pairFor(factory, path[0], path[1]),
amounts[0]
);
_swap(amounts, path, to, amountsFeeAddMore);
}
function swapTokensForExactTokens(
uint256 amountOut,
uint256 amountInMax,
address[] calldata path,
address to,
uint256 deadline,
uint[] calldata amountsFeeAddMore
) external virtual ensure(deadline) returns (uint256[] memory amounts) {
amounts = EchodexLibrary.getAmountsInRouterFee(factory, amountOut, path);
require(amounts[0] <= amountInMax, "EchodexRouter: EXCESSIVE_INPUT_AMOUNT");
TransferHelper.safeTransferFrom(
path[0],
msg.sender,
EchodexLibrary.pairFor(factory, path[0], path[1]),
amounts[0]
);
_swap(amounts, path, to, amountsFeeAddMore);
}
function swapExactETHForTokens(
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline,
uint[] calldata amountsFeeAddMore
) external payable virtual ensure(deadline) returns (uint256[] memory amounts) {
require(path[0] == WETH, "EchodexRouter: INVALID_PATH");
amounts = EchodexLibrary.getAmountsOutRouterFee(factory, msg.value, path);
require(amounts[amounts.length - 1] >= amountOutMin, "EchodexRouter: INSUFFICIENT_OUTPUT_AMOUNT");
IWETH(WETH).deposit{value: amounts[0]}();
assert(IWETH(WETH).transfer(EchodexLibrary.pairFor(factory, path[0], path[1]), amounts[0]));
_swap(amounts, path, to, amountsFeeAddMore);
}
function swapTokensForExactETH(
uint256 amountOut,
uint256 amountInMax,
address[] calldata path,
address to,
uint256 deadline,
uint[] calldata amountsFeeAddMore
) external virtual ensure(deadline) returns (uint256[] memory amounts) {
require(path[path.length - 1] == WETH, "EchodexRouter: INVALID_PATH");
amounts = EchodexLibrary.getAmountsInRouterFee(factory, amountOut, path);
require(amounts[0] <= amountInMax, "EchodexRouter: EXCESSIVE_INPUT_AMOUNT");
TransferHelper.safeTransferFrom(
path[0],
msg.sender,
EchodexLibrary.pairFor(factory, path[0], path[1]),
amounts[0]
);
_swap(amounts, path, address(this), amountsFeeAddMore);
IWETH(WETH).withdraw(amounts[amounts.length - 1]);
TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]);
}
function swapExactTokensForETH(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline,
uint[] calldata amountsFeeAddMore
) external virtual ensure(deadline) returns (uint256[] memory amounts) {
require(path[path.length - 1] == WETH, "EchodexRouter: INVALID_PATH");
amounts = EchodexLibrary.getAmountsOutRouterFee(factory, amountIn, path);
require(amounts[amounts.length - 1] >= amountOutMin, "EchodexRouter: INSUFFICIENT_OUTPUT_AMOUNT");
TransferHelper.safeTransferFrom(
path[0],
msg.sender,
EchodexLibrary.pairFor(factory, path[0], path[1]),
amounts[0]
);
_swap(amounts, path, address(this), amountsFeeAddMore);
IWETH(WETH).withdraw(amounts[amounts.length - 1]);
TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]);
}
function swapETHForExactTokens(
uint256 amountOut,
address[] calldata path,
address to,
uint256 deadline,
uint[] calldata amountsFeeAddMore
) external payable virtual ensure(deadline) returns (uint256[] memory amounts) {
require(path[0] == WETH, "EchodexRouter: INVALID_PATH");
amounts = EchodexLibrary.getAmountsInRouterFee(factory, amountOut, path);
require(amounts[0] <= msg.value, "EchodexRouter: EXCESSIVE_INPUT_AMOUNT");
IWETH(WETH).deposit{value: amounts[0]}();
assert(IWETH(WETH).transfer(EchodexLibrary.pairFor(factory, path[0], path[1]), amounts[0]));
_swap(amounts, path, to, amountsFeeAddMore);
// refund dust eth, if any
if (msg.value > amounts[0]) TransferHelper.safeTransferETH(msg.sender, msg.value - amounts[0]);
}
// **** SWAP (supporting fee-on-transfer tokens) ****
// requires the initial amount to have already been sent to the first pair
function _swapSupportingFeeOnTransferTokens(address[] memory path, address _to, uint[] memory amountsFeeAddMore) internal virtual {
for (uint256 i; i < path.length - 1; i++) {
(address input, address output) = (path[i], path[i + 1]);
(address token0, ) = EchodexLibrary.sortTokens(input, output);
IEchodexPair pair = IEchodexPair(EchodexLibrary.pairFor(factory, input, output));
uint256 amountInput;
uint256 amountOutput;
{
// scope to avoid stack too deep errors
(uint256 reserve0, uint256 reserve1, ) = pair.getReserves();
(uint256 reserveInput, uint256 reserveOutput) =
input == token0 ? (reserve0, reserve1) : (reserve1, reserve0);
uint balanceInput = IERC20(input).balanceOf(address(pair));
if(input == IEchodexFactory(factory).tokenFee()) {
balanceInput = balanceInput.sub(IEchodexPair(pair).currentFee());
}
amountInput = balanceInput.sub(reserveInput);
amountOutput = EchodexLibrary.getAmountOutRouterFee(amountInput, reserveInput, reserveOutput);
}
(uint256 amount0Out, uint256 amount1Out) =
input == token0 ? (uint256(0), amountOutput) : (amountOutput, uint256(0));
address to = i < path.length - 2 ? EchodexLibrary.pairFor(factory, output, path[i + 2]) : _to;
if (amountsFeeAddMore[i] > 0) {
address tokenFee = IEchodexFactory(factory).tokenFee();
if (IERC20(tokenFee).allowance(address(this), address(pair)) == 0) {
IERC20(tokenFee).approve(address(pair), uint256(-1));
}
IERC20(tokenFee).transferFrom(msg.sender, address(this), amountsFeeAddMore[i]);
IEchodexPair(pair).addFee(amountsFeeAddMore[i]);
}
pair.swapPayWithTokenFee(amount0Out, amount1Out, to, new bytes(0));
}
}
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline,
uint[] calldata amountsFeeAddMore
) external virtual ensure(deadline) {
TransferHelper.safeTransferFrom(
path[0],
msg.sender,
EchodexLibrary.pairFor(factory, path[0], path[1]),
amountIn
);
uint256 balanceBefore = IERC20(path[path.length - 1]).balanceOf(to);
_swapSupportingFeeOnTransferTokens(path, to, amountsFeeAddMore);
require(
IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin,
"EchodexRouter: INSUFFICIENT_OUTPUT_AMOUNT"
);
}
function swapExactETHForTokensSupportingFeeOnTransferTokens(
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline,
uint[] calldata amountsFeeAddMore
) external payable virtual ensure(deadline) {
require(path[0] == WETH, "EchodexRouter: INVALID_PATH");
uint256 amountIn = msg.value;
IWETH(WETH).deposit{value: amountIn}();
assert(IWETH(WETH).transfer(EchodexLibrary.pairFor(factory, path[0], path[1]), amountIn));
uint256 balanceBefore = IERC20(path[path.length - 1]).balanceOf(to);
_swapSupportingFeeOnTransferTokens(path, to, amountsFeeAddMore);
require(
IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin,
"EchodexRouter: INSUFFICIENT_OUTPUT_AMOUNT"
);
}
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline,
uint[] calldata amountsFeeAddMore
) external virtual ensure(deadline) {
require(path[path.length - 1] == WETH, "EchodexRouter: INVALID_PATH");
TransferHelper.safeTransferFrom(
path[0],
msg.sender,
EchodexLibrary.pairFor(factory, path[0], path[1]),
amountIn
);
_swapSupportingFeeOnTransferTokens(path, address(this), amountsFeeAddMore);
uint256 amountOut = IERC20(WETH).balanceOf(address(this));
require(amountOut >= amountOutMin, "EchodexRouter: INSUFFICIENT_OUTPUT_AMOUNT");
IWETH(WETH).withdraw(amountOut);
TransferHelper.safeTransferETH(to, amountOut);
}
// **** LIBRARY FUNCTIONS ****
function quote(
uint256 amountA,
uint256 reserveA,
uint256 reserveB
) public pure virtual returns (uint256 amountB) {
return EchodexLibrary.quote(amountA, reserveA, reserveB);
}
function getAmountOut(
uint256 amountIn,
uint256 reserveIn,
uint256 reserveOut
) public pure virtual returns (uint256 amountOut) {
return EchodexLibrary.getAmountOutRouterFee(amountIn, reserveIn, reserveOut);
}
function getAmountIn(
uint256 amountOut,
uint256 reserveIn,
uint256 reserveOut
) public pure virtual returns (uint256 amountIn) {
return EchodexLibrary.getAmountInRouterFee(amountOut, reserveIn, reserveOut);
}
function getAmountsOut(uint256 amountIn, address[] memory path)
public
view
virtual
returns (uint256[] memory amounts)
{
return EchodexLibrary.getAmountsOutRouterFee(factory, amountIn, path);
}
function getAmountsIn(uint256 amountOut, address[] memory path)
public
view
virtual
returns (uint256[] memory amounts)
{
return EchodexLibrary.getAmountsInRouterFee(factory, amountOut, path);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WETH","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"amountADesired","type":"uint256"},{"internalType":"uint256","name":"amountBDesired","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amountTokenDesired","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountIn","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsIn","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsOut","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"reserveA","type":"uint256"},{"internalType":"uint256","name":"reserveB","type":"uint256"}],"name":"quote","outputs":[{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETHSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermit","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermitSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityWithPermit","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint256[]","name":"amountsFeeAddMore","type":"uint256[]"}],"name":"swapETHForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint256[]","name":"amountsFeeAddMore","type":"uint256[]"}],"name":"swapExactETHForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint256[]","name":"amountsFeeAddMore","type":"uint256[]"}],"name":"swapExactETHForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint256[]","name":"amountsFeeAddMore","type":"uint256[]"}],"name":"swapExactTokensForETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint256[]","name":"amountsFeeAddMore","type":"uint256[]"}],"name":"swapExactTokensForETHSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint256[]","name":"amountsFeeAddMore","type":"uint256[]"}],"name":"swapExactTokensForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint256[]","name":"amountsFeeAddMore","type":"uint256[]"}],"name":"swapExactTokensForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint256[]","name":"amountsFeeAddMore","type":"uint256[]"}],"name":"swapTokensForExactETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint256[]","name":"amountsFeeAddMore","type":"uint256[]"}],"name":"swapTokensForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60c060405234801561001057600080fd5b50604051620052d8380380620052d88339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c615144620001946000398061015f5280610fea5280611025528061145752806114ec5280611560528061189752806119c35280611b095280611b915280611d5f5280611f1e528061201a528061215d52806121e55280612388528061240352806124b252806127d75280612bbe5280612cf45280612e205280612ed652806131e35280613239528061326d52806132e15250806110d3528061110c5280611247528061131b528061159252806118755280611a565280611bc35280611ded52806120ad528061221752806125915280612865528061291852806129a45280612b6c5280612b9c5280612fbf52806130e352806132175280613aba5280613bee5280613c335280613ffe528061416d52806142d352806143245280614b095280614bb75280614c3752506151446000f3fe60806040526004361061014f5760003560e01c8063ad615dec116100b6578063d06ca61f1161006f578063d06ca61f14610bd7578063ded9382a14610c8c578063e5d039a814610cff578063e8e3370014610deb578063f253aaa714610e6b578063f305d71914610f5757610188565b8063ad615dec14610904578063af2979eb1461093a578063baa2abde1461098d578063bc928708146109ea578063c45a015514610ad6578063c8b468ac14610aeb57610188565b80635b0d5984116101085780635b0d59841461058a5780636cc0c555146105fd57806385f8c259146106d757806392ade5101461070d578063994b3ae4146107f9578063ad5c4648146108d357610188565b806302751cec1461018d578063054d50d4146101f95780631f00ca74146102415780632195995c14610346578063339d7238146103c457806350772db7146104b057610188565b3661018857336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461018657fe5b005b600080fd5b34801561019957600080fd5b506101e0600480360360c08110156101b057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610f9d565b6040805192835260208301919091528051918290030190f35b34801561020557600080fd5b5061022f6004803603606081101561021c57600080fd5b50803590602081013590604001356110b7565b60408051918252519081900360200190f35b34801561024d57600080fd5b506102f66004803603604081101561026457600080fd5b81359190810190604081016020820135600160201b81111561028557600080fd5b82018360208201111561029757600080fd5b803590602001918460208302840111600160201b831117156102b857600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506110cc945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561033257818101518382015260200161031a565b505050509050019250505060405180910390f35b34801561035257600080fd5b506101e0600480360361016081101561036a57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611102565b3480156103d057600080fd5b506102f6600480360360c08110156103e757600080fd5b813591602081013591810190606081016040820135600160201b81111561040d57600080fd5b82018360208201111561041f57600080fd5b803590602001918460208302840111600160201b8311171561044057600080fd5b919390926001600160a01b03833516926020810135929190606081019060400135600160201b81111561047257600080fd5b82018360208201111561048457600080fd5b803590602001918460208302840111600160201b831117156104a557600080fd5b5090925090506111fc565b610186600480360360a08110156104c657600080fd5b81359190810190604081016020820135600160201b8111156104e757600080fd5b8201836020820111156104f957600080fd5b803590602001918460208302840111600160201b8311171561051a57600080fd5b919390926001600160a01b03833516926020810135929190606081019060400135600160201b81111561054c57600080fd5b82018360208201111561055e57600080fd5b803590602001918460208302840111600160201b8311171561057f57600080fd5b509092509050611411565b34801561059657600080fd5b5061022f60048036036101408110156105ae57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e0820135169061010081013590610120013561186d565b6102f6600480360360a081101561061357600080fd5b81359190810190604081016020820135600160201b81111561063457600080fd5b82018360208201111561064657600080fd5b803590602001918460208302840111600160201b8311171561066757600080fd5b919390926001600160a01b03833516926020810135929190606081019060400135600160201b81111561069957600080fd5b8201836020820111156106ab57600080fd5b803590602001918460208302840111600160201b831117156106cc57600080fd5b50909250905061197b565b3480156106e357600080fd5b5061022f600480360360608110156106fa57600080fd5b5080359060208101359060400135611d02565b34801561071957600080fd5b506102f6600480360360c081101561073057600080fd5b813591602081013591810190606081016040820135600160201b81111561075657600080fd5b82018360208201111561076857600080fd5b803590602001918460208302840111600160201b8311171561078957600080fd5b919390926001600160a01b03833516926020810135929190606081019060400135600160201b8111156107bb57600080fd5b8201836020820111156107cd57600080fd5b803590602001918460208302840111600160201b831117156107ee57600080fd5b509092509050611d0f565b6102f6600480360360a081101561080f57600080fd5b81359190810190604081016020820135600160201b81111561083057600080fd5b82018360208201111561084257600080fd5b803590602001918460208302840111600160201b8311171561086357600080fd5b919390926001600160a01b03833516926020810135929190606081019060400135600160201b81111561089557600080fd5b8201836020820111156108a757600080fd5b803590602001918460208302840111600160201b831117156108c857600080fd5b509092509050611fd2565b3480156108df57600080fd5b506108e8612386565b604080516001600160a01b039092168252519081900360200190f35b34801561091057600080fd5b5061022f6004803603606081101561092757600080fd5b50803590602081013590604001356123aa565b34801561094657600080fd5b5061022f600480360360c081101561095d57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a001356123b7565b34801561099957600080fd5b506101e0600480360360e08110156109b057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612543565b3480156109f657600080fd5b506102f6600480360360c0811015610a0d57600080fd5b813591602081013591810190606081016040820135600160201b811115610a3357600080fd5b820183602082011115610a4557600080fd5b803590602001918460208302840111600160201b83111715610a6657600080fd5b919390926001600160a01b03833516926020810135929190606081019060400135600160201b811115610a9857600080fd5b820183602082011115610aaa57600080fd5b803590602001918460208302840111600160201b83111715610acb57600080fd5b509092509050612787565b348015610ae257600080fd5b506108e8612916565b348015610af757600080fd5b50610186600480360360c0811015610b0e57600080fd5b813591602081013591810190606081016040820135600160201b811115610b3457600080fd5b820183602082011115610b4657600080fd5b803590602001918460208302840111600160201b83111715610b6757600080fd5b919390926001600160a01b03833516926020810135929190606081019060400135600160201b811115610b9957600080fd5b820183602082011115610bab57600080fd5b803590602001918460208302840111600160201b83111715610bcc57600080fd5b50909250905061293a565b348015610be357600080fd5b506102f660048036036040811015610bfa57600080fd5b81359190810190604081016020820135600160201b811115610c1b57600080fd5b820183602082011115610c2d57600080fd5b803590602001918460208302840111600160201b83111715610c4e57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612b65945050505050565b348015610c9857600080fd5b506101e06004803603610140811015610cb057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135612b92565b348015610d0b57600080fd5b50610186600480360360c0811015610d2257600080fd5b813591602081013591810190606081016040820135600160201b811115610d4857600080fd5b820183602082011115610d5a57600080fd5b803590602001918460208302840111600160201b83111715610d7b57600080fd5b919390926001600160a01b03833516926020810135929190606081019060400135600160201b811115610dad57600080fd5b820183602082011115610dbf57600080fd5b803590602001918460208302840111600160201b83111715610de057600080fd5b509092509050612ca6565b348015610df757600080fd5b50610e4d6004803603610100811015610e0f57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135612f5c565b60408051938452602084019290925282820152519081900360600190f35b348015610e7757600080fd5b506102f6600480360360c0811015610e8e57600080fd5b813591602081013591810190606081016040820135600160201b811115610eb457600080fd5b820183602082011115610ec657600080fd5b803590602001918460208302840111600160201b83111715610ee757600080fd5b919390926001600160a01b03833516926020810135929190606081019060400135600160201b811115610f1957600080fd5b820183602082011115610f2b57600080fd5b803590602001918460208302840111600160201b83111715610f4c57600080fd5b509092509050613098565b610e4d600480360360c0811015610f6d57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135613194565b6000808242811015610fe4576040805162461bcd60e51b81526020600482015260166024820152600080516020615009833981519152604482015290519081900360640190fd5b611013897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a612543565b9093509150611023898685613439565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561108957600080fd5b505af115801561109d573d6000803e3d6000fd5b505050506110ab858361358d565b50965096945050505050565b60006110c4848484613685565b949350505050565b60606110f97f0000000000000000000000000000000000000000000000000000000000000000848461374c565b90505b92915050565b60008060006111327f00000000000000000000000000000000000000000000000000000000000000008f8f613899565b9050600087611141578c611145565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156111bb57600080fd5b505af11580156111cf573d6000803e3d6000fd5b505050506111e28f8f8f8f8f8f8f612543565b809450819550505050509b509b9950505050505050505050565b60608342811015611242576040805162461bcd60e51b81526020600482015260166024820152600080516020615009833981519152604482015290519081900360640190fd5b6112a07f00000000000000000000000000000000000000000000000000000000000000008b8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061374c92505050565b915088826000815181106112b057fe5b602002602001015111156112f55760405162461bcd60e51b8152600401808060200182810382526025815260200180614fe46025913960400191505060405180910390fd5b6113938888600081811061130557fe5b905060200201356001600160a01b0316336113797f00000000000000000000000000000000000000000000000000000000000000008c8c600081811061134757fe5b905060200201356001600160a01b03168d8d600181811061136457fe5b905060200201356001600160a01b0316613899565b8560008151811061138657fe5b6020026020010151613959565b6114048289898080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808b0282810182019093528a82528d94509092508a918a91829190850190849080828437600092019190915250613ab692505050565b5098975050505050505050565b8242811015611455576040805162461bcd60e51b81526020600482015260166024820152600080516020615009833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168787600081811061148c57fe5b905060200201356001600160a01b03166001600160a01b0316146114e5576040805162461bcd60e51b815260206004820152601b6024820152600080516020615029833981519152604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561154557600080fd5b505af1158015611559573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6115db7f00000000000000000000000000000000000000000000000000000000000000008b8b60008181106115be57fe5b905060200201356001600160a01b03168c8c600181811061136457fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561162b57600080fd5b505af115801561163f573d6000803e3d6000fd5b505050506040513d602081101561165557600080fd5b505161165d57fe5b60008888600019810181811061166f57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156116d457600080fd5b505afa1580156116e8573d6000803e3d6000fd5b505050506040513d60208110156116fe57600080fd5b50516040805160208b810282810182019093528b82529293506117729290918c918c91829185019084908082843760009201919091525050604080516020808b0282810182019093528a82528d94509092508a918a91829190850190849080828437600092019190915250613fa792505050565b89611824828b8b600019810181811061178757fe5b905060200201356001600160a01b03166001600160a01b03166370a082318b6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156117ec57600080fd5b505afa158015611800573d6000803e3d6000fd5b505050506040513d602081101561181657600080fd5b50519063ffffffff6146e216565b10156118615760405162461bcd60e51b81526004018080602001828103825260298152602001806150496029913960400191505060405180910390fd5b50505050505050505050565b6000806118bb7f00000000000000000000000000000000000000000000000000000000000000008d7f0000000000000000000000000000000000000000000000000000000000000000613899565b90506000866118ca578b6118ce565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561194457600080fd5b505af1158015611958573d6000803e3d6000fd5b5050505061196a8d8d8d8d8d8d6123b7565b9d9c50505050505050505050505050565b606083428110156119c1576040805162461bcd60e51b81526020600482015260166024820152600080516020615009833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316888860008181106119f857fe5b905060200201356001600160a01b03166001600160a01b031614611a51576040805162461bcd60e51b815260206004820152601b6024820152600080516020615029833981519152604482015290519081900360640190fd5b611aaf7f0000000000000000000000000000000000000000000000000000000000000000348a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061473f92505050565b91508882600184510381518110611ac257fe5b60200260200101511015611b075760405162461bcd60e51b81526004018080602001828103825260298152602001806150496029913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611b4357fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611b7657600080fd5b505af1158015611b8a573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611bef7f00000000000000000000000000000000000000000000000000000000000000008b8b60008181106115be57fe5b84600081518110611bfc57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611c5357600080fd5b505af1158015611c67573d6000803e3d6000fd5b505050506040513d6020811015611c7d57600080fd5b5051611c8557fe5b611cf68289898080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808b0282810182019093528a82528d94509092508a918a91829190850190849080828437600092019190915250613ab692505050565b50979650505050505050565b60006110c4848484614876565b60608342811015611d55576040805162461bcd60e51b81526020600482015260166024820152600080516020615009833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001688886000198101818110611d8f57fe5b905060200201356001600160a01b03166001600160a01b031614611de8576040805162461bcd60e51b815260206004820152601b6024820152600080516020615029833981519152604482015290519081900360640190fd5b611e467f00000000000000000000000000000000000000000000000000000000000000008b8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061374c92505050565b91508882600081518110611e5657fe5b60200260200101511115611e9b5760405162461bcd60e51b8152600401808060200182810382526025815260200180614fe46025913960400191505060405180910390fd5b611eab8888600081811061130557fe5b611f1c8289898080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808b0282810182019093528a82523094509092508a918a91829190850190849080828437600092019190915250613ab692505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d83600185510381518110611f5b57fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611f9957600080fd5b505af1158015611fad573d6000803e3d6000fd5b505050506114048683600185510381518110611fc557fe5b602002602001015161358d565b60608342811015612018576040805162461bcd60e51b81526020600482015260166024820152600080516020615009833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168888600081811061204f57fe5b905060200201356001600160a01b03166001600160a01b0316146120a8576040805162461bcd60e51b815260206004820152601b6024820152600080516020615029833981519152604482015290519081900360640190fd5b6121067f00000000000000000000000000000000000000000000000000000000000000008a8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061374c92505050565b9150348260008151811061211657fe5b6020026020010151111561215b5760405162461bcd60e51b8152600401808060200182810382526025815260200180614fe46025913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db08360008151811061219757fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b1580156121ca57600080fd5b505af11580156121de573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6122437f00000000000000000000000000000000000000000000000000000000000000008b8b60008181106115be57fe5b8460008151811061225057fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156122a757600080fd5b505af11580156122bb573d6000803e3d6000fd5b505050506040513d60208110156122d157600080fd5b50516122d957fe5b61234a8289898080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808b0282810182019093528a82528d94509092508a918a91829190850190849080828437600092019190915250613ab692505050565b8160008151811061235757fe5b6020026020010151341115611cf657611cf6338360008151811061237757fe5b6020026020010151340361358d565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006110c484848461494e565b600081428110156123fd576040805162461bcd60e51b81526020600482015260166024820152600080516020615009833981519152604482015290519081900360640190fd5b61242c887f00000000000000000000000000000000000000000000000000000000000000008989893089612543565b604080516370a0823160e01b815230600482015290519194506124b092508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561247f57600080fd5b505afa158015612493573d6000803e3d6000fd5b505050506040513d60208110156124a957600080fd5b5051613439565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561251657600080fd5b505af115801561252a573d6000803e3d6000fd5b50505050612538848361358d565b509695505050505050565b600080824281101561258a576040805162461bcd60e51b81526020600482015260166024820152600080516020615009833981519152604482015290519081900360640190fd5b60006125b77f00000000000000000000000000000000000000000000000000000000000000008c8c613899565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561261257600080fd5b505af1158015612626573d6000803e3d6000fd5b505050506040513d602081101561263c57600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b15801561268957600080fd5b505af115801561269d573d6000803e3d6000fd5b505050506040513d60408110156126b357600080fd5b508051602090910151909250905060006126cd8e8e6149fa565b509050806001600160a01b03168e6001600160a01b0316146126f05781836126f3565b82825b90975095508a8710156127375760405162461bcd60e51b8152600401808060200182810382526024815260200180614ec76024913960400191505060405180910390fd5b898610156127765760405162461bcd60e51b81526004018080602001828103825260248152602001806150c86024913960400191505060405180910390fd5b505050505097509795505050505050565b606083428110156127cd576040805162461bcd60e51b81526020600482015260166024820152600080516020615009833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168888600019810181811061280757fe5b905060200201356001600160a01b03166001600160a01b031614612860576040805162461bcd60e51b815260206004820152601b6024820152600080516020615029833981519152604482015290519081900360640190fd5b6128be7f00000000000000000000000000000000000000000000000000000000000000008b8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061473f92505050565b915088826001845103815181106128d157fe5b60200260200101511015611e9b5760405162461bcd60e51b81526004018080602001828103825260298152602001806150496029913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b824281101561297e576040805162461bcd60e51b81526020600482015260166024820152600080516020615009833981519152604482015290519081900360640190fd5b6129d68787600081811061298e57fe5b905060200201356001600160a01b0316336129d07f00000000000000000000000000000000000000000000000000000000000000008b8b60008181106115be57fe5b8c613959565b6000878760001981018181106129e857fe5b905060200201356001600160a01b03166001600160a01b03166370a08231876040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015612a4d57600080fd5b505afa158015612a61573d6000803e3d6000fd5b505050506040513d6020811015612a7757600080fd5b50516040805160208a810282810182019093528a8252929350612aeb9290918b918b91829185019084908082843760009201919091525050604080516020808a0282810182019093528982528c945090925089918991829190850190849080828437600092019190915250613fa792505050565b88611824828a8a6000198101818110612b0057fe5b905060200201356001600160a01b03166001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156117ec57600080fd5b60606110f97f0000000000000000000000000000000000000000000000000000000000000000848461473f565b6000806000612be27f00000000000000000000000000000000000000000000000000000000000000008e7f0000000000000000000000000000000000000000000000000000000000000000613899565b9050600087612bf1578c612bf5565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015612c6b57600080fd5b505af1158015612c7f573d6000803e3d6000fd5b50505050612c918e8e8e8e8e8e610f9d565b909f909e509c50505050505050505050505050565b8242811015612cea576040805162461bcd60e51b81526020600482015260166024820152600080516020615009833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001687876000198101818110612d2457fe5b905060200201356001600160a01b03166001600160a01b031614612d7d576040805162461bcd60e51b815260206004820152601b6024820152600080516020615029833981519152604482015290519081900360640190fd5b612d8d8787600081811061298e57fe5b612dfd87878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808902828101820190935288825230945090925088918891829190850190849080828437600092019190915250613fa792505050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015612e6757600080fd5b505afa158015612e7b573d6000803e3d6000fd5b505050506040513d6020811015612e9157600080fd5b5051905088811015612ed45760405162461bcd60e51b81526004018080602001828103825260298152602001806150496029913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015612f3a57600080fd5b505af1158015612f4e573d6000803e3d6000fd5b50505050611861868261358d565b60008060008342811015612fa5576040805162461bcd60e51b81526020600482015260166024820152600080516020615009833981519152604482015290519081900360640190fd5b612fb38c8c8c8c8c8c614ad8565b90945092506000612fe57f00000000000000000000000000000000000000000000000000000000000000008e8e613899565b9050612ff38d338388613959565b612fff8c338387613959565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561305757600080fd5b505af115801561306b573d6000803e3d6000fd5b505050506040513d602081101561308157600080fd5b5051949d939c50939a509198505050505050505050565b606083428110156130de576040805162461bcd60e51b81526020600482015260166024820152600080516020615009833981519152604482015290519081900360640190fd5b61313c7f00000000000000000000000000000000000000000000000000000000000000008b8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061473f92505050565b9150888260018451038151811061314f57fe5b602002602001015110156112f55760405162461bcd60e51b81526004018080602001828103825260298152602001806150496029913960400191505060405180910390fd5b600080600083428110156131dd576040805162461bcd60e51b81526020600482015260166024820152600080516020615009833981519152604482015290519081900360640190fd5b61320b8a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c614ad8565b9094509250600061325d7f00000000000000000000000000000000000000000000000000000000000000008c7f0000000000000000000000000000000000000000000000000000000000000000613899565b905061326b8b338388613959565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b1580156132c657600080fd5b505af11580156132da573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561335f57600080fd5b505af1158015613373573d6000803e3d6000fd5b505050506040513d602081101561338957600080fd5b505161339157fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b1580156133e957600080fd5b505af11580156133fd573d6000803e3d6000fd5b505050506040513d602081101561341357600080fd5b505192503484101561342b5761342b3385340361358d565b505096509650969350505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106134b65780518252601f199092019160209182019101613497565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613518576040519150601f19603f3d011682016040523d82523d6000602084013e61351d565b606091505b509150915081801561354b57508051158061354b575080806020019051602081101561354857600080fd5b50515b6135865760405162461bcd60e51b815260040180806020018281038252602d815260200180615072602d913960400191505060405180910390fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106135d95780518252601f1990920191602091820191016135ba565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461363b576040519150601f19603f3d011682016040523d82523d6000602084013e613640565b606091505b50509050806136805760405162461bcd60e51b8152600401808060200182810382526034815260200180614f466034913960400191505060405180910390fd5b505050565b60008084116136c55760405162461bcd60e51b815260040180806020018281038252602981526020018061509f6029913960400191505060405180910390fd5b6000831180156136d55750600082115b6137105760405162461bcd60e51b8152600401808060200182810382526026815260200180614f7a6026913960400191505060405180910390fd5b6000613722858463ffffffff614d4c16565b90506000613736858763ffffffff614da516565b905080828161374157fe5b049695505050505050565b60606002825110156137a5576040805162461bcd60e51b815260206004820152601c60248201527f4563686f6465784c6962726172793a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b815167ffffffffffffffff811180156137bd57600080fd5b506040519080825280602002602001820160405280156137e7578160200160208202803683370190505b50905082816001835103815181106137fb57fe5b60209081029190910101528151600019015b80156138915760008061384a8786600186038151811061382957fe5b602002602001015187868151811061383d57fe5b6020026020010151614dff565b9150915061386c84848151811061385d57fe5b60200260200101518383614876565b84600185038151811061387b57fe5b602090810291909101015250506000190161380d565b509392505050565b60008060006138a885856149fa565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527f0b8162ee38463c04a0629406af3b667364e4487dca66c5c7485a4a5e997811ea609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106139de5780518252601f1990920191602091820191016139bf565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613a40576040519150601f19603f3d011682016040523d82523d6000602084013e613a45565b606091505b5091509150818015613a73575080511580613a735750808060200190516020811015613a7057600080fd5b50515b613aae5760405162461bcd60e51b8152600401808060200182810382526031815260200180614f156031913960400191505060405180910390fd5b505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663455991366040518163ffffffff1660e01b815260040160206040518083038186803b158015613b1157600080fd5b505afa158015613b25573d6000803e3d6000fd5b505050506040513d6020811015613b3b57600080fd5b5051905060005b6001855103811015613aae57600080868381518110613b5d57fe5b6020026020010151878460010181518110613b7457fe5b6020026020010151915091506000613b8c83836149fa565b5090506000898560010181518110613ba057fe5b60200260200101519050600080836001600160a01b0316866001600160a01b031614613bce57826000613bd2565b6000835b91509150600060028c51038810613be9578a613c2a565b613c2a7f0000000000000000000000000000000000000000000000000000000000000000878e8b60020181518110613c1d57fe5b6020026020010151613899565b90506000613c597f00000000000000000000000000000000000000000000000000000000000000008989613899565b905060008b8a81518110613c6957fe5b60200260200101511115613ea75760408051636eb1769f60e11b81523060048201526001600160a01b0383811660248301529151918c169163dd62ed3e91604480820192602092909190829003018186803b158015613cc757600080fd5b505afa158015613cdb573d6000803e3d6000fd5b505050506040513d6020811015613cf157600080fd5b5051613d78576040805163095ea7b360e01b81526001600160a01b03838116600483015260001960248301529151918c169163095ea7b3916044808201926020929091908290030181600087803b158015613d4b57600080fd5b505af1158015613d5f573d6000803e3d6000fd5b505050506040513d6020811015613d7557600080fd5b50505b896001600160a01b03166323b872dd33308e8d81518110613d9557fe5b60200260200101516040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b031681526020018281526020019350505050602060405180830381600087803b158015613e0557600080fd5b505af1158015613e19573d6000803e3d6000fd5b505050506040513d6020811015613e2f57600080fd5b50508a516001600160a01b038216906321307bac908d908c908110613e5057fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015613e8e57600080fd5b505af1158015613ea2573d6000803e3d6000fd5b505050505b60408051600080825260208201928390526365306a0160e01b835260248201878152604483018790526001600160a01b038681166064850152608060848501908152845160a48601819052918716956365306a01958b958b958b9592949093909260c48601928190849084905b83811015613f2c578181015183820152602001613f14565b50505050905090810190601f168015613f595780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613f7b57600080fd5b505af1158015613f8f573d6000803e3d6000fd5b50506001909a019950613b4298505050505050505050565b60005b60018451038110156146dc57600080858381518110613fc557fe5b6020026020010151868460010181518110613fdc57fe5b6020026020010151915091506000613ff483836149fa565b50905060006140247f00000000000000000000000000000000000000000000000000000000000000008585613899565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561406557600080fd5b505afa158015614079573d6000803e3d6000fd5b505050506040513d606081101561408f57600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a8116908916146140c55782846140c8565b83835b9150915060008a6001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561412457600080fd5b505afa158015614138573d6000803e3d6000fd5b505050506040513d602081101561414e57600080fd5b5051604080516322acc89b60e11b815290519192506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691634559913691600480820192602092909190829003018186803b1580156141b457600080fd5b505afa1580156141c8573d6000803e3d6000fd5b505050506040513d60208110156141de57600080fd5b50516001600160a01b038c81169116141561426b57614268886001600160a01b031663da3c300d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561422f57600080fd5b505afa158015614243573d6000803e3d6000fd5b505050506040513d602081101561425957600080fd5b5051829063ffffffff6146e216565b90505b61427b818463ffffffff6146e216565b9650614288878484613685565b95505050505050600080856001600160a01b0316886001600160a01b0316146142b3578260006142b7565b6000835b91509150600060028d51038a106142ce578b614302565b6143027f0000000000000000000000000000000000000000000000000000000000000000898f8d60020181518110613c1d57fe5b905060008b8b8151811061431257fe5b602002602001015111156145db5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663455991366040518163ffffffff1660e01b815260040160206040518083038186803b15801561437b57600080fd5b505afa15801561438f573d6000803e3d6000fd5b505050506040513d60208110156143a557600080fd5b505160408051636eb1769f60e11b81523060048201526001600160a01b038a8116602483015291519293509083169163dd62ed3e91604480820192602092909190829003018186803b1580156143fa57600080fd5b505afa15801561440e573d6000803e3d6000fd5b505050506040513d602081101561442457600080fd5b50516144ab576040805163095ea7b360e01b81526001600160a01b038981166004830152600019602483015291519183169163095ea7b3916044808201926020929091908290030181600087803b15801561447e57600080fd5b505af1158015614492573d6000803e3d6000fd5b505050506040513d60208110156144a857600080fd5b50505b806001600160a01b03166323b872dd33308f8f815181106144c857fe5b60200260200101516040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b031681526020018281526020019350505050602060405180830381600087803b15801561453857600080fd5b505af115801561454c573d6000803e3d6000fd5b505050506040513d602081101561456257600080fd5b50508b516001600160a01b038816906321307bac908e908e90811061458357fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156145c157600080fd5b505af11580156145d5573d6000803e3d6000fd5b50505050505b60408051600080825260208201928390526365306a0160e01b835260248201868152604483018690526001600160a01b038581166064850152608060848501908152845160a48601819052918c16956365306a01958a958a958a9592949093909260c48601928190849084905b83811015614660578181015183820152602001614648565b50505050905090810190601f16801561468d5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156146af57600080fd5b505af11580156146c3573d6000803e3d6000fd5b50506001909b019a50613faa9950505050505050505050565b50505050565b600082821115614739576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6060600282511015614798576040805162461bcd60e51b815260206004820152601c60248201527f4563686f6465784c6962726172793a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b815167ffffffffffffffff811180156147b057600080fd5b506040519080825280602002602001820160405280156147da578160200160208202803683370190505b50905082816000815181106147eb57fe5b60200260200101818152505060005b6001835103811015613891576000806148308786858151811061481957fe5b602002602001015187866001018151811061383d57fe5b9150915061485284848151811061484357fe5b60200260200101518383613685565b84846001018151811061486157fe5b602090810291909101015250506001016147fa565b60008084116148b65760405162461bcd60e51b815260040180806020018281038252602a815260200180614eeb602a913960400191505060405180910390fd5b6000831180156148c65750600082115b6149015760405162461bcd60e51b8152600401808060200182810382526026815260200180614f7a6026913960400191505060405180910390fd5b6000614913848663ffffffff614d4c16565b90506000614927848763ffffffff6146e216565b9050614944600182848161493757fe5b049063ffffffff614da516565b9695505050505050565b600080841161498e5760405162461bcd60e51b81526004018080602001828103825260238152602001806150ec6023913960400191505060405180910390fd5b60008311801561499e5750600082115b6149d95760405162461bcd60e51b8152600401808060200182810382526026815260200180614f7a6026913960400191505060405180910390fd5b826149ea858463ffffffff614d4c16565b816149f157fe5b04949350505050565b600080826001600160a01b0316846001600160a01b03161415614a4e5760405162461bcd60e51b8152600401808060200182810382526023815260200180614fa06023913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610614a6e578284614a71565b83835b90925090506001600160a01b038216614ad1576040805162461bcd60e51b815260206004820152601c60248201527f4563686f6465784c6962726172793a205a45524f5f4144445245535300000000604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b158015614b5257600080fd5b505afa158015614b66573d6000803e3d6000fd5b505050506040513d6020811015614b7c57600080fd5b50516001600160a01b03161415614c2f57604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b158015614c0257600080fd5b505af1158015614c16573d6000803e3d6000fd5b505050506040513d6020811015614c2c57600080fd5b50505b600080614c5d7f00000000000000000000000000000000000000000000000000000000000000008b8b614dff565b91509150816000148015614c6f575080155b15614c7f57879350869250614d3f565b6000614c8c89848461494e565b9050878111614cdf5785811015614cd45760405162461bcd60e51b81526004018080602001828103825260248152602001806150c86024913960400191505060405180910390fd5b889450925082614d3d565b6000614cec89848661494e565b905089811115614cf857fe5b87811015614d375760405162461bcd60e51b8152600401808060200182810382526024815260200180614ec76024913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b600082614d5b575060006110fc565b82820282848281614d6857fe5b04146110f95760405162461bcd60e51b8152600401808060200182810382526021815260200180614fc36021913960400191505060405180910390fd5b6000828201838110156110f9576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000806000614e0e85856149fa565b509050600080614e1f888888613899565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015614e5757600080fd5b505afa158015614e6b573d6000803e3d6000fd5b505050506040513d6060811015614e8157600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b0387811690841614614eb4578082614eb7565b81815b9099909850965050505050505056fe4563686f646578526f757465723a20494e53554646494349454e545f415f414d4f554e544563686f6465784c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472616e7366657246726f6d206661696c65645472616e7366657248656c7065723a3a736166655472616e736665724554483a20455448207472616e73666572206661696c65644563686f6465784c6962726172793a20494e53554646494349454e545f4c49515549444954594563686f6465784c6962726172793a204944454e544943414c5f414444524553534553536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774563686f646578526f757465723a204558434553534956455f494e5055545f414d4f554e544563686f646578526f757465723a2045585049524544000000000000000000004563686f646578526f757465723a20494e56414c49445f5041544800000000004563686f646578526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a3a736166655472616e736665723a207472616e73666572206661696c65644563686f6465784c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e544563686f646578526f757465723a20494e53554646494349454e545f425f414d4f554e544563686f6465784c6962726172793a20494e53554646494349454e545f414d4f554e54a264697066735822122065482ba60bfa7db95828ec9543353cc5d2075768dece8d9d17f116b47303ed7164736f6c634300060600330000000000000000000000006d1063f2187442cc9adbfad2f55a96b846fcb399000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f
Deployed Bytecode
0x60806040526004361061014f5760003560e01c8063ad615dec116100b6578063d06ca61f1161006f578063d06ca61f14610bd7578063ded9382a14610c8c578063e5d039a814610cff578063e8e3370014610deb578063f253aaa714610e6b578063f305d71914610f5757610188565b8063ad615dec14610904578063af2979eb1461093a578063baa2abde1461098d578063bc928708146109ea578063c45a015514610ad6578063c8b468ac14610aeb57610188565b80635b0d5984116101085780635b0d59841461058a5780636cc0c555146105fd57806385f8c259146106d757806392ade5101461070d578063994b3ae4146107f9578063ad5c4648146108d357610188565b806302751cec1461018d578063054d50d4146101f95780631f00ca74146102415780632195995c14610346578063339d7238146103c457806350772db7146104b057610188565b3661018857336001600160a01b037f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f161461018657fe5b005b600080fd5b34801561019957600080fd5b506101e0600480360360c08110156101b057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610f9d565b6040805192835260208301919091528051918290030190f35b34801561020557600080fd5b5061022f6004803603606081101561021c57600080fd5b50803590602081013590604001356110b7565b60408051918252519081900360200190f35b34801561024d57600080fd5b506102f66004803603604081101561026457600080fd5b81359190810190604081016020820135600160201b81111561028557600080fd5b82018360208201111561029757600080fd5b803590602001918460208302840111600160201b831117156102b857600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506110cc945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561033257818101518382015260200161031a565b505050509050019250505060405180910390f35b34801561035257600080fd5b506101e0600480360361016081101561036a57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611102565b3480156103d057600080fd5b506102f6600480360360c08110156103e757600080fd5b813591602081013591810190606081016040820135600160201b81111561040d57600080fd5b82018360208201111561041f57600080fd5b803590602001918460208302840111600160201b8311171561044057600080fd5b919390926001600160a01b03833516926020810135929190606081019060400135600160201b81111561047257600080fd5b82018360208201111561048457600080fd5b803590602001918460208302840111600160201b831117156104a557600080fd5b5090925090506111fc565b610186600480360360a08110156104c657600080fd5b81359190810190604081016020820135600160201b8111156104e757600080fd5b8201836020820111156104f957600080fd5b803590602001918460208302840111600160201b8311171561051a57600080fd5b919390926001600160a01b03833516926020810135929190606081019060400135600160201b81111561054c57600080fd5b82018360208201111561055e57600080fd5b803590602001918460208302840111600160201b8311171561057f57600080fd5b509092509050611411565b34801561059657600080fd5b5061022f60048036036101408110156105ae57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e0820135169061010081013590610120013561186d565b6102f6600480360360a081101561061357600080fd5b81359190810190604081016020820135600160201b81111561063457600080fd5b82018360208201111561064657600080fd5b803590602001918460208302840111600160201b8311171561066757600080fd5b919390926001600160a01b03833516926020810135929190606081019060400135600160201b81111561069957600080fd5b8201836020820111156106ab57600080fd5b803590602001918460208302840111600160201b831117156106cc57600080fd5b50909250905061197b565b3480156106e357600080fd5b5061022f600480360360608110156106fa57600080fd5b5080359060208101359060400135611d02565b34801561071957600080fd5b506102f6600480360360c081101561073057600080fd5b813591602081013591810190606081016040820135600160201b81111561075657600080fd5b82018360208201111561076857600080fd5b803590602001918460208302840111600160201b8311171561078957600080fd5b919390926001600160a01b03833516926020810135929190606081019060400135600160201b8111156107bb57600080fd5b8201836020820111156107cd57600080fd5b803590602001918460208302840111600160201b831117156107ee57600080fd5b509092509050611d0f565b6102f6600480360360a081101561080f57600080fd5b81359190810190604081016020820135600160201b81111561083057600080fd5b82018360208201111561084257600080fd5b803590602001918460208302840111600160201b8311171561086357600080fd5b919390926001600160a01b03833516926020810135929190606081019060400135600160201b81111561089557600080fd5b8201836020820111156108a757600080fd5b803590602001918460208302840111600160201b831117156108c857600080fd5b509092509050611fd2565b3480156108df57600080fd5b506108e8612386565b604080516001600160a01b039092168252519081900360200190f35b34801561091057600080fd5b5061022f6004803603606081101561092757600080fd5b50803590602081013590604001356123aa565b34801561094657600080fd5b5061022f600480360360c081101561095d57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a001356123b7565b34801561099957600080fd5b506101e0600480360360e08110156109b057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612543565b3480156109f657600080fd5b506102f6600480360360c0811015610a0d57600080fd5b813591602081013591810190606081016040820135600160201b811115610a3357600080fd5b820183602082011115610a4557600080fd5b803590602001918460208302840111600160201b83111715610a6657600080fd5b919390926001600160a01b03833516926020810135929190606081019060400135600160201b811115610a9857600080fd5b820183602082011115610aaa57600080fd5b803590602001918460208302840111600160201b83111715610acb57600080fd5b509092509050612787565b348015610ae257600080fd5b506108e8612916565b348015610af757600080fd5b50610186600480360360c0811015610b0e57600080fd5b813591602081013591810190606081016040820135600160201b811115610b3457600080fd5b820183602082011115610b4657600080fd5b803590602001918460208302840111600160201b83111715610b6757600080fd5b919390926001600160a01b03833516926020810135929190606081019060400135600160201b811115610b9957600080fd5b820183602082011115610bab57600080fd5b803590602001918460208302840111600160201b83111715610bcc57600080fd5b50909250905061293a565b348015610be357600080fd5b506102f660048036036040811015610bfa57600080fd5b81359190810190604081016020820135600160201b811115610c1b57600080fd5b820183602082011115610c2d57600080fd5b803590602001918460208302840111600160201b83111715610c4e57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612b65945050505050565b348015610c9857600080fd5b506101e06004803603610140811015610cb057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135612b92565b348015610d0b57600080fd5b50610186600480360360c0811015610d2257600080fd5b813591602081013591810190606081016040820135600160201b811115610d4857600080fd5b820183602082011115610d5a57600080fd5b803590602001918460208302840111600160201b83111715610d7b57600080fd5b919390926001600160a01b03833516926020810135929190606081019060400135600160201b811115610dad57600080fd5b820183602082011115610dbf57600080fd5b803590602001918460208302840111600160201b83111715610de057600080fd5b509092509050612ca6565b348015610df757600080fd5b50610e4d6004803603610100811015610e0f57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135612f5c565b60408051938452602084019290925282820152519081900360600190f35b348015610e7757600080fd5b506102f6600480360360c0811015610e8e57600080fd5b813591602081013591810190606081016040820135600160201b811115610eb457600080fd5b820183602082011115610ec657600080fd5b803590602001918460208302840111600160201b83111715610ee757600080fd5b919390926001600160a01b03833516926020810135929190606081019060400135600160201b811115610f1957600080fd5b820183602082011115610f2b57600080fd5b803590602001918460208302840111600160201b83111715610f4c57600080fd5b509092509050613098565b610e4d600480360360c0811015610f6d57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135613194565b6000808242811015610fe4576040805162461bcd60e51b81526020600482015260166024820152600080516020615009833981519152604482015290519081900360640190fd5b611013897f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f8a8a8a308a612543565b9093509150611023898685613439565b7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f6001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561108957600080fd5b505af115801561109d573d6000803e3d6000fd5b505050506110ab858361358d565b50965096945050505050565b60006110c4848484613685565b949350505050565b60606110f97f0000000000000000000000006d1063f2187442cc9adbfad2f55a96b846fcb399848461374c565b90505b92915050565b60008060006111327f0000000000000000000000006d1063f2187442cc9adbfad2f55a96b846fcb3998f8f613899565b9050600087611141578c611145565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156111bb57600080fd5b505af11580156111cf573d6000803e3d6000fd5b505050506111e28f8f8f8f8f8f8f612543565b809450819550505050509b509b9950505050505050505050565b60608342811015611242576040805162461bcd60e51b81526020600482015260166024820152600080516020615009833981519152604482015290519081900360640190fd5b6112a07f0000000000000000000000006d1063f2187442cc9adbfad2f55a96b846fcb3998b8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061374c92505050565b915088826000815181106112b057fe5b602002602001015111156112f55760405162461bcd60e51b8152600401808060200182810382526025815260200180614fe46025913960400191505060405180910390fd5b6113938888600081811061130557fe5b905060200201356001600160a01b0316336113797f0000000000000000000000006d1063f2187442cc9adbfad2f55a96b846fcb3998c8c600081811061134757fe5b905060200201356001600160a01b03168d8d600181811061136457fe5b905060200201356001600160a01b0316613899565b8560008151811061138657fe5b6020026020010151613959565b6114048289898080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808b0282810182019093528a82528d94509092508a918a91829190850190849080828437600092019190915250613ab692505050565b5098975050505050505050565b8242811015611455576040805162461bcd60e51b81526020600482015260166024820152600080516020615009833981519152604482015290519081900360640190fd5b7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f6001600160a01b03168787600081811061148c57fe5b905060200201356001600160a01b03166001600160a01b0316146114e5576040805162461bcd60e51b815260206004820152601b6024820152600080516020615029833981519152604482015290519081900360640190fd5b60003490507f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f6001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561154557600080fd5b505af1158015611559573d6000803e3d6000fd5b50505050507f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f6001600160a01b031663a9059cbb6115db7f0000000000000000000000006d1063f2187442cc9adbfad2f55a96b846fcb3998b8b60008181106115be57fe5b905060200201356001600160a01b03168c8c600181811061136457fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561162b57600080fd5b505af115801561163f573d6000803e3d6000fd5b505050506040513d602081101561165557600080fd5b505161165d57fe5b60008888600019810181811061166f57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156116d457600080fd5b505afa1580156116e8573d6000803e3d6000fd5b505050506040513d60208110156116fe57600080fd5b50516040805160208b810282810182019093528b82529293506117729290918c918c91829185019084908082843760009201919091525050604080516020808b0282810182019093528a82528d94509092508a918a91829190850190849080828437600092019190915250613fa792505050565b89611824828b8b600019810181811061178757fe5b905060200201356001600160a01b03166001600160a01b03166370a082318b6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156117ec57600080fd5b505afa158015611800573d6000803e3d6000fd5b505050506040513d602081101561181657600080fd5b50519063ffffffff6146e216565b10156118615760405162461bcd60e51b81526004018080602001828103825260298152602001806150496029913960400191505060405180910390fd5b50505050505050505050565b6000806118bb7f0000000000000000000000006d1063f2187442cc9adbfad2f55a96b846fcb3998d7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f613899565b90506000866118ca578b6118ce565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561194457600080fd5b505af1158015611958573d6000803e3d6000fd5b5050505061196a8d8d8d8d8d8d6123b7565b9d9c50505050505050505050505050565b606083428110156119c1576040805162461bcd60e51b81526020600482015260166024820152600080516020615009833981519152604482015290519081900360640190fd5b7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f6001600160a01b0316888860008181106119f857fe5b905060200201356001600160a01b03166001600160a01b031614611a51576040805162461bcd60e51b815260206004820152601b6024820152600080516020615029833981519152604482015290519081900360640190fd5b611aaf7f0000000000000000000000006d1063f2187442cc9adbfad2f55a96b846fcb399348a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061473f92505050565b91508882600184510381518110611ac257fe5b60200260200101511015611b075760405162461bcd60e51b81526004018080602001828103825260298152602001806150496029913960400191505060405180910390fd5b7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f6001600160a01b031663d0e30db083600081518110611b4357fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611b7657600080fd5b505af1158015611b8a573d6000803e3d6000fd5b50505050507f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f6001600160a01b031663a9059cbb611bef7f0000000000000000000000006d1063f2187442cc9adbfad2f55a96b846fcb3998b8b60008181106115be57fe5b84600081518110611bfc57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611c5357600080fd5b505af1158015611c67573d6000803e3d6000fd5b505050506040513d6020811015611c7d57600080fd5b5051611c8557fe5b611cf68289898080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808b0282810182019093528a82528d94509092508a918a91829190850190849080828437600092019190915250613ab692505050565b50979650505050505050565b60006110c4848484614876565b60608342811015611d55576040805162461bcd60e51b81526020600482015260166024820152600080516020615009833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f1688886000198101818110611d8f57fe5b905060200201356001600160a01b03166001600160a01b031614611de8576040805162461bcd60e51b815260206004820152601b6024820152600080516020615029833981519152604482015290519081900360640190fd5b611e467f0000000000000000000000006d1063f2187442cc9adbfad2f55a96b846fcb3998b8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061374c92505050565b91508882600081518110611e5657fe5b60200260200101511115611e9b5760405162461bcd60e51b8152600401808060200182810382526025815260200180614fe46025913960400191505060405180910390fd5b611eab8888600081811061130557fe5b611f1c8289898080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808b0282810182019093528a82523094509092508a918a91829190850190849080828437600092019190915250613ab692505050565b7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f6001600160a01b0316632e1a7d4d83600185510381518110611f5b57fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611f9957600080fd5b505af1158015611fad573d6000803e3d6000fd5b505050506114048683600185510381518110611fc557fe5b602002602001015161358d565b60608342811015612018576040805162461bcd60e51b81526020600482015260166024820152600080516020615009833981519152604482015290519081900360640190fd5b7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f6001600160a01b03168888600081811061204f57fe5b905060200201356001600160a01b03166001600160a01b0316146120a8576040805162461bcd60e51b815260206004820152601b6024820152600080516020615029833981519152604482015290519081900360640190fd5b6121067f0000000000000000000000006d1063f2187442cc9adbfad2f55a96b846fcb3998a8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061374c92505050565b9150348260008151811061211657fe5b6020026020010151111561215b5760405162461bcd60e51b8152600401808060200182810382526025815260200180614fe46025913960400191505060405180910390fd5b7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f6001600160a01b031663d0e30db08360008151811061219757fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b1580156121ca57600080fd5b505af11580156121de573d6000803e3d6000fd5b50505050507f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f6001600160a01b031663a9059cbb6122437f0000000000000000000000006d1063f2187442cc9adbfad2f55a96b846fcb3998b8b60008181106115be57fe5b8460008151811061225057fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156122a757600080fd5b505af11580156122bb573d6000803e3d6000fd5b505050506040513d60208110156122d157600080fd5b50516122d957fe5b61234a8289898080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808b0282810182019093528a82528d94509092508a918a91829190850190849080828437600092019190915250613ab692505050565b8160008151811061235757fe5b6020026020010151341115611cf657611cf6338360008151811061237757fe5b6020026020010151340361358d565b7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f81565b60006110c484848461494e565b600081428110156123fd576040805162461bcd60e51b81526020600482015260166024820152600080516020615009833981519152604482015290519081900360640190fd5b61242c887f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f8989893089612543565b604080516370a0823160e01b815230600482015290519194506124b092508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561247f57600080fd5b505afa158015612493573d6000803e3d6000fd5b505050506040513d60208110156124a957600080fd5b5051613439565b7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f6001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561251657600080fd5b505af115801561252a573d6000803e3d6000fd5b50505050612538848361358d565b509695505050505050565b600080824281101561258a576040805162461bcd60e51b81526020600482015260166024820152600080516020615009833981519152604482015290519081900360640190fd5b60006125b77f0000000000000000000000006d1063f2187442cc9adbfad2f55a96b846fcb3998c8c613899565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561261257600080fd5b505af1158015612626573d6000803e3d6000fd5b505050506040513d602081101561263c57600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b15801561268957600080fd5b505af115801561269d573d6000803e3d6000fd5b505050506040513d60408110156126b357600080fd5b508051602090910151909250905060006126cd8e8e6149fa565b509050806001600160a01b03168e6001600160a01b0316146126f05781836126f3565b82825b90975095508a8710156127375760405162461bcd60e51b8152600401808060200182810382526024815260200180614ec76024913960400191505060405180910390fd5b898610156127765760405162461bcd60e51b81526004018080602001828103825260248152602001806150c86024913960400191505060405180910390fd5b505050505097509795505050505050565b606083428110156127cd576040805162461bcd60e51b81526020600482015260166024820152600080516020615009833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f168888600019810181811061280757fe5b905060200201356001600160a01b03166001600160a01b031614612860576040805162461bcd60e51b815260206004820152601b6024820152600080516020615029833981519152604482015290519081900360640190fd5b6128be7f0000000000000000000000006d1063f2187442cc9adbfad2f55a96b846fcb3998b8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061473f92505050565b915088826001845103815181106128d157fe5b60200260200101511015611e9b5760405162461bcd60e51b81526004018080602001828103825260298152602001806150496029913960400191505060405180910390fd5b7f0000000000000000000000006d1063f2187442cc9adbfad2f55a96b846fcb39981565b824281101561297e576040805162461bcd60e51b81526020600482015260166024820152600080516020615009833981519152604482015290519081900360640190fd5b6129d68787600081811061298e57fe5b905060200201356001600160a01b0316336129d07f0000000000000000000000006d1063f2187442cc9adbfad2f55a96b846fcb3998b8b60008181106115be57fe5b8c613959565b6000878760001981018181106129e857fe5b905060200201356001600160a01b03166001600160a01b03166370a08231876040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015612a4d57600080fd5b505afa158015612a61573d6000803e3d6000fd5b505050506040513d6020811015612a7757600080fd5b50516040805160208a810282810182019093528a8252929350612aeb9290918b918b91829185019084908082843760009201919091525050604080516020808a0282810182019093528982528c945090925089918991829190850190849080828437600092019190915250613fa792505050565b88611824828a8a6000198101818110612b0057fe5b905060200201356001600160a01b03166001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156117ec57600080fd5b60606110f97f0000000000000000000000006d1063f2187442cc9adbfad2f55a96b846fcb399848461473f565b6000806000612be27f0000000000000000000000006d1063f2187442cc9adbfad2f55a96b846fcb3998e7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f613899565b9050600087612bf1578c612bf5565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015612c6b57600080fd5b505af1158015612c7f573d6000803e3d6000fd5b50505050612c918e8e8e8e8e8e610f9d565b909f909e509c50505050505050505050505050565b8242811015612cea576040805162461bcd60e51b81526020600482015260166024820152600080516020615009833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f1687876000198101818110612d2457fe5b905060200201356001600160a01b03166001600160a01b031614612d7d576040805162461bcd60e51b815260206004820152601b6024820152600080516020615029833981519152604482015290519081900360640190fd5b612d8d8787600081811061298e57fe5b612dfd87878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808902828101820190935288825230945090925088918891829190850190849080828437600092019190915250613fa792505050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f16916370a0823191602480820192602092909190829003018186803b158015612e6757600080fd5b505afa158015612e7b573d6000803e3d6000fd5b505050506040513d6020811015612e9157600080fd5b5051905088811015612ed45760405162461bcd60e51b81526004018080602001828103825260298152602001806150496029913960400191505060405180910390fd5b7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f6001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015612f3a57600080fd5b505af1158015612f4e573d6000803e3d6000fd5b50505050611861868261358d565b60008060008342811015612fa5576040805162461bcd60e51b81526020600482015260166024820152600080516020615009833981519152604482015290519081900360640190fd5b612fb38c8c8c8c8c8c614ad8565b90945092506000612fe57f0000000000000000000000006d1063f2187442cc9adbfad2f55a96b846fcb3998e8e613899565b9050612ff38d338388613959565b612fff8c338387613959565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561305757600080fd5b505af115801561306b573d6000803e3d6000fd5b505050506040513d602081101561308157600080fd5b5051949d939c50939a509198505050505050505050565b606083428110156130de576040805162461bcd60e51b81526020600482015260166024820152600080516020615009833981519152604482015290519081900360640190fd5b61313c7f0000000000000000000000006d1063f2187442cc9adbfad2f55a96b846fcb3998b8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061473f92505050565b9150888260018451038151811061314f57fe5b602002602001015110156112f55760405162461bcd60e51b81526004018080602001828103825260298152602001806150496029913960400191505060405180910390fd5b600080600083428110156131dd576040805162461bcd60e51b81526020600482015260166024820152600080516020615009833981519152604482015290519081900360640190fd5b61320b8a7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f8b348c8c614ad8565b9094509250600061325d7f0000000000000000000000006d1063f2187442cc9adbfad2f55a96b846fcb3998c7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f613899565b905061326b8b338388613959565b7f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f6001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b1580156132c657600080fd5b505af11580156132da573d6000803e3d6000fd5b50505050507f000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f6001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561335f57600080fd5b505af1158015613373573d6000803e3d6000fd5b505050506040513d602081101561338957600080fd5b505161339157fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b1580156133e957600080fd5b505af11580156133fd573d6000803e3d6000fd5b505050506040513d602081101561341357600080fd5b505192503484101561342b5761342b3385340361358d565b505096509650969350505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106134b65780518252601f199092019160209182019101613497565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613518576040519150601f19603f3d011682016040523d82523d6000602084013e61351d565b606091505b509150915081801561354b57508051158061354b575080806020019051602081101561354857600080fd5b50515b6135865760405162461bcd60e51b815260040180806020018281038252602d815260200180615072602d913960400191505060405180910390fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106135d95780518252601f1990920191602091820191016135ba565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461363b576040519150601f19603f3d011682016040523d82523d6000602084013e613640565b606091505b50509050806136805760405162461bcd60e51b8152600401808060200182810382526034815260200180614f466034913960400191505060405180910390fd5b505050565b60008084116136c55760405162461bcd60e51b815260040180806020018281038252602981526020018061509f6029913960400191505060405180910390fd5b6000831180156136d55750600082115b6137105760405162461bcd60e51b8152600401808060200182810382526026815260200180614f7a6026913960400191505060405180910390fd5b6000613722858463ffffffff614d4c16565b90506000613736858763ffffffff614da516565b905080828161374157fe5b049695505050505050565b60606002825110156137a5576040805162461bcd60e51b815260206004820152601c60248201527f4563686f6465784c6962726172793a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b815167ffffffffffffffff811180156137bd57600080fd5b506040519080825280602002602001820160405280156137e7578160200160208202803683370190505b50905082816001835103815181106137fb57fe5b60209081029190910101528151600019015b80156138915760008061384a8786600186038151811061382957fe5b602002602001015187868151811061383d57fe5b6020026020010151614dff565b9150915061386c84848151811061385d57fe5b60200260200101518383614876565b84600185038151811061387b57fe5b602090810291909101015250506000190161380d565b509392505050565b60008060006138a885856149fa565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527f0b8162ee38463c04a0629406af3b667364e4487dca66c5c7485a4a5e997811ea609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106139de5780518252601f1990920191602091820191016139bf565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613a40576040519150601f19603f3d011682016040523d82523d6000602084013e613a45565b606091505b5091509150818015613a73575080511580613a735750808060200190516020811015613a7057600080fd5b50515b613aae5760405162461bcd60e51b8152600401808060200182810382526031815260200180614f156031913960400191505060405180910390fd5b505050505050565b60007f0000000000000000000000006d1063f2187442cc9adbfad2f55a96b846fcb3996001600160a01b031663455991366040518163ffffffff1660e01b815260040160206040518083038186803b158015613b1157600080fd5b505afa158015613b25573d6000803e3d6000fd5b505050506040513d6020811015613b3b57600080fd5b5051905060005b6001855103811015613aae57600080868381518110613b5d57fe5b6020026020010151878460010181518110613b7457fe5b6020026020010151915091506000613b8c83836149fa565b5090506000898560010181518110613ba057fe5b60200260200101519050600080836001600160a01b0316866001600160a01b031614613bce57826000613bd2565b6000835b91509150600060028c51038810613be9578a613c2a565b613c2a7f0000000000000000000000006d1063f2187442cc9adbfad2f55a96b846fcb399878e8b60020181518110613c1d57fe5b6020026020010151613899565b90506000613c597f0000000000000000000000006d1063f2187442cc9adbfad2f55a96b846fcb3998989613899565b905060008b8a81518110613c6957fe5b60200260200101511115613ea75760408051636eb1769f60e11b81523060048201526001600160a01b0383811660248301529151918c169163dd62ed3e91604480820192602092909190829003018186803b158015613cc757600080fd5b505afa158015613cdb573d6000803e3d6000fd5b505050506040513d6020811015613cf157600080fd5b5051613d78576040805163095ea7b360e01b81526001600160a01b03838116600483015260001960248301529151918c169163095ea7b3916044808201926020929091908290030181600087803b158015613d4b57600080fd5b505af1158015613d5f573d6000803e3d6000fd5b505050506040513d6020811015613d7557600080fd5b50505b896001600160a01b03166323b872dd33308e8d81518110613d9557fe5b60200260200101516040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b031681526020018281526020019350505050602060405180830381600087803b158015613e0557600080fd5b505af1158015613e19573d6000803e3d6000fd5b505050506040513d6020811015613e2f57600080fd5b50508a516001600160a01b038216906321307bac908d908c908110613e5057fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015613e8e57600080fd5b505af1158015613ea2573d6000803e3d6000fd5b505050505b60408051600080825260208201928390526365306a0160e01b835260248201878152604483018790526001600160a01b038681166064850152608060848501908152845160a48601819052918716956365306a01958b958b958b9592949093909260c48601928190849084905b83811015613f2c578181015183820152602001613f14565b50505050905090810190601f168015613f595780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613f7b57600080fd5b505af1158015613f8f573d6000803e3d6000fd5b50506001909a019950613b4298505050505050505050565b60005b60018451038110156146dc57600080858381518110613fc557fe5b6020026020010151868460010181518110613fdc57fe5b6020026020010151915091506000613ff483836149fa565b50905060006140247f0000000000000000000000006d1063f2187442cc9adbfad2f55a96b846fcb3998585613899565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561406557600080fd5b505afa158015614079573d6000803e3d6000fd5b505050506040513d606081101561408f57600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a8116908916146140c55782846140c8565b83835b9150915060008a6001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561412457600080fd5b505afa158015614138573d6000803e3d6000fd5b505050506040513d602081101561414e57600080fd5b5051604080516322acc89b60e11b815290519192506001600160a01b037f0000000000000000000000006d1063f2187442cc9adbfad2f55a96b846fcb3991691634559913691600480820192602092909190829003018186803b1580156141b457600080fd5b505afa1580156141c8573d6000803e3d6000fd5b505050506040513d60208110156141de57600080fd5b50516001600160a01b038c81169116141561426b57614268886001600160a01b031663da3c300d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561422f57600080fd5b505afa158015614243573d6000803e3d6000fd5b505050506040513d602081101561425957600080fd5b5051829063ffffffff6146e216565b90505b61427b818463ffffffff6146e216565b9650614288878484613685565b95505050505050600080856001600160a01b0316886001600160a01b0316146142b3578260006142b7565b6000835b91509150600060028d51038a106142ce578b614302565b6143027f0000000000000000000000006d1063f2187442cc9adbfad2f55a96b846fcb399898f8d60020181518110613c1d57fe5b905060008b8b8151811061431257fe5b602002602001015111156145db5760007f0000000000000000000000006d1063f2187442cc9adbfad2f55a96b846fcb3996001600160a01b031663455991366040518163ffffffff1660e01b815260040160206040518083038186803b15801561437b57600080fd5b505afa15801561438f573d6000803e3d6000fd5b505050506040513d60208110156143a557600080fd5b505160408051636eb1769f60e11b81523060048201526001600160a01b038a8116602483015291519293509083169163dd62ed3e91604480820192602092909190829003018186803b1580156143fa57600080fd5b505afa15801561440e573d6000803e3d6000fd5b505050506040513d602081101561442457600080fd5b50516144ab576040805163095ea7b360e01b81526001600160a01b038981166004830152600019602483015291519183169163095ea7b3916044808201926020929091908290030181600087803b15801561447e57600080fd5b505af1158015614492573d6000803e3d6000fd5b505050506040513d60208110156144a857600080fd5b50505b806001600160a01b03166323b872dd33308f8f815181106144c857fe5b60200260200101516040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b031681526020018281526020019350505050602060405180830381600087803b15801561453857600080fd5b505af115801561454c573d6000803e3d6000fd5b505050506040513d602081101561456257600080fd5b50508b516001600160a01b038816906321307bac908e908e90811061458357fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156145c157600080fd5b505af11580156145d5573d6000803e3d6000fd5b50505050505b60408051600080825260208201928390526365306a0160e01b835260248201868152604483018690526001600160a01b038581166064850152608060848501908152845160a48601819052918c16956365306a01958a958a958a9592949093909260c48601928190849084905b83811015614660578181015183820152602001614648565b50505050905090810190601f16801561468d5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156146af57600080fd5b505af11580156146c3573d6000803e3d6000fd5b50506001909b019a50613faa9950505050505050505050565b50505050565b600082821115614739576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6060600282511015614798576040805162461bcd60e51b815260206004820152601c60248201527f4563686f6465784c6962726172793a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b815167ffffffffffffffff811180156147b057600080fd5b506040519080825280602002602001820160405280156147da578160200160208202803683370190505b50905082816000815181106147eb57fe5b60200260200101818152505060005b6001835103811015613891576000806148308786858151811061481957fe5b602002602001015187866001018151811061383d57fe5b9150915061485284848151811061484357fe5b60200260200101518383613685565b84846001018151811061486157fe5b602090810291909101015250506001016147fa565b60008084116148b65760405162461bcd60e51b815260040180806020018281038252602a815260200180614eeb602a913960400191505060405180910390fd5b6000831180156148c65750600082115b6149015760405162461bcd60e51b8152600401808060200182810382526026815260200180614f7a6026913960400191505060405180910390fd5b6000614913848663ffffffff614d4c16565b90506000614927848763ffffffff6146e216565b9050614944600182848161493757fe5b049063ffffffff614da516565b9695505050505050565b600080841161498e5760405162461bcd60e51b81526004018080602001828103825260238152602001806150ec6023913960400191505060405180910390fd5b60008311801561499e5750600082115b6149d95760405162461bcd60e51b8152600401808060200182810382526026815260200180614f7a6026913960400191505060405180910390fd5b826149ea858463ffffffff614d4c16565b816149f157fe5b04949350505050565b600080826001600160a01b0316846001600160a01b03161415614a4e5760405162461bcd60e51b8152600401808060200182810382526023815260200180614fa06023913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610614a6e578284614a71565b83835b90925090506001600160a01b038216614ad1576040805162461bcd60e51b815260206004820152601c60248201527f4563686f6465784c6962726172793a205a45524f5f4144445245535300000000604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f0000000000000000000000006d1063f2187442cc9adbfad2f55a96b846fcb3999092169163e6a4390591604480820192602092909190829003018186803b158015614b5257600080fd5b505afa158015614b66573d6000803e3d6000fd5b505050506040513d6020811015614b7c57600080fd5b50516001600160a01b03161415614c2f57604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f0000000000000000000000006d1063f2187442cc9adbfad2f55a96b846fcb3999092169163c9c65396916044808201926020929091908290030181600087803b158015614c0257600080fd5b505af1158015614c16573d6000803e3d6000fd5b505050506040513d6020811015614c2c57600080fd5b50505b600080614c5d7f0000000000000000000000006d1063f2187442cc9adbfad2f55a96b846fcb3998b8b614dff565b91509150816000148015614c6f575080155b15614c7f57879350869250614d3f565b6000614c8c89848461494e565b9050878111614cdf5785811015614cd45760405162461bcd60e51b81526004018080602001828103825260248152602001806150c86024913960400191505060405180910390fd5b889450925082614d3d565b6000614cec89848661494e565b905089811115614cf857fe5b87811015614d375760405162461bcd60e51b8152600401808060200182810382526024815260200180614ec76024913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b600082614d5b575060006110fc565b82820282848281614d6857fe5b04146110f95760405162461bcd60e51b8152600401808060200182810382526021815260200180614fc36021913960400191505060405180910390fd5b6000828201838110156110f9576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000806000614e0e85856149fa565b509050600080614e1f888888613899565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015614e5757600080fd5b505afa158015614e6b573d6000803e3d6000fd5b505050506040513d6060811015614e8157600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b0387811690841614614eb4578082614eb7565b81815b9099909850965050505050505056fe4563686f646578526f757465723a20494e53554646494349454e545f415f414d4f554e544563686f6465784c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472616e7366657246726f6d206661696c65645472616e7366657248656c7065723a3a736166655472616e736665724554483a20455448207472616e73666572206661696c65644563686f6465784c6962726172793a20494e53554646494349454e545f4c49515549444954594563686f6465784c6962726172793a204944454e544943414c5f414444524553534553536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774563686f646578526f757465723a204558434553534956455f494e5055545f414d4f554e544563686f646578526f757465723a2045585049524544000000000000000000004563686f646578526f757465723a20494e56414c49445f5041544800000000004563686f646578526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a3a736166655472616e736665723a207472616e73666572206661696c65644563686f6465784c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e544563686f646578526f757465723a20494e53554646494349454e545f425f414d4f554e544563686f6465784c6962726172793a20494e53554646494349454e545f414d4f554e54a264697066735822122065482ba60bfa7db95828ec9543353cc5d2075768dece8d9d17f116b47303ed7164736f6c63430006060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000006d1063f2187442cc9adbfad2f55a96b846fcb399000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f
-----Decoded View---------------
Arg [0] : _factory (address): 0x6D1063F2187442Cc9adbFAD2f55A96B846FCB399
Arg [1] : _WETH (address): 0xe5D7C2a44FfDDf6b295A15c148167daaAf5Cf34f
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000006d1063f2187442cc9adbfad2f55a96b846fcb399
Arg [1] : 000000000000000000000000e5d7c2a44ffddf6b295a15c148167daaaf5cf34f
Deployed Bytecode Sourcemap
20278:21013:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20723:10;-1:-1:-1;;;;;20737:4:0;20723:18;;20716:26;;;;20278:21013;;12:1:-1;9;2:12;25109:682:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25109:682:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;25109:682:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;40257:256;;5:9:-1;2:2;;;27:1;24;17:12;2:2;40257:256:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;40257:256:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;41040:248;;5:9:-1;2:2;;;27:1;24;17:12;2:2;41040:248:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;41040:248:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;41040:248:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;41040:248:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;41040:248:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;41040:248:0;;-1:-1:-1;41040:248:0;;-1:-1:-1;;;;;41040:248:0:i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;41040:248:0;;;;;;;;;;;;;;;;;25799:715;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25799:715:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;25799:715:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;30922:714::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30922:714:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30922:714:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;30922:714:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30922:714:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;30922:714:0;;;;-1:-1:-1;;;;;30922:714:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;30922:714:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30922:714:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;-1:-1;30922:714:0;;-1:-1:-1;30922:714:0;-1:-1:-1;30922:714:0;:::i;38213:860::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;38213:860:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;38213:860:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;38213:860:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;38213:860:0;;;;-1:-1:-1;;;;;38213:860:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;38213:860:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;38213:860:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;-1:-1;38213:860:0;;-1:-1:-1;38213:860:0;-1:-1:-1;38213:860:0;:::i;27920:818::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27920:818:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;27920:818:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31644:745::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31644:745:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;31644:745:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31644:745:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;31644:745:0;;;;-1:-1:-1;;;;;31644:745:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;31644:745:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31644:745:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;-1:-1;31644:745:0;;-1:-1:-1;31644:745:0;-1:-1:-1;31644:745:0;:::i;40521:255::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;40521:255:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;40521:255:0;;;;;;;;;;;;:::i;32397:936::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32397:936:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;32397:936:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;32397:936:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;32397:936:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;32397:936:0;;;;-1:-1:-1;;;;;32397:936:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;32397:936:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;32397:936:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;-1:-1;32397:936:0;;-1:-1:-1;32397:936:0;-1:-1:-1;32397:936:0;:::i;34307:858::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;34307:858:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;34307:858:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34307:858:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;34307:858:0;;;;-1:-1:-1;;;;;34307:858:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;34307:858:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34307:858:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;-1:-1;34307:858:0;;-1:-1:-1;34307:858:0;-1:-1:-1;34307:858:0;:::i;20385:29::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20385:29:0;;;:::i;:::-;;;;-1:-1:-1;;;;;20385:29:0;;;;;;;;;;;;;;40026:223;;5:9:-1;2:2;;;27:1;24;17:12;2:2;40026:223:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;40026:223:0;;;;;;;;;;;;:::i;27308:604::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27308:604:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;27308:604:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;24232:869::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24232:869:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;24232:869:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;33341:958::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33341:958:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;33341:958:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;33341:958:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33341:958:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;33341:958:0;;;;-1:-1:-1;;;;;33341:958:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;33341:958:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33341:958:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;-1:-1;33341:958:0;;-1:-1:-1;33341:958:0;-1:-1:-1;33341:958:0;:::i;20346:32::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20346:32:0;;;:::i;37390:815::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;37390:815:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;37390:815:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;37390:815:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;37390:815:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;37390:815:0;;;;-1:-1:-1;;;;;37390:815:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;37390:815:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;37390:815:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;-1:-1;37390:815:0;;-1:-1:-1;37390:815:0;-1:-1:-1;37390:815:0;:::i;40784:248::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;40784:248:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;40784:248:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;40784:248:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;40784:248:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;40784:248:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;40784:248:0;;-1:-1:-1;40784:248:0;;-1:-1:-1;;;;;40784:248:0:i;26522:707::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26522:707:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;26522:707:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;39081:901::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;39081:901:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;39081:901:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;39081:901:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;39081:901:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;39081:901:0;;;;-1:-1:-1;;;;;39081:901:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;39081:901:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;39081:901:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;-1:-1;39081:901:0;;-1:-1:-1;39081:901:0;-1:-1:-1;39081:901:0;:::i;22259:840::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22259:840:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22259:840:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;30178:736;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30178:736:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30178:736:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;30178:736:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30178:736:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;30178:736:0;;;;-1:-1:-1;;;;;30178:736:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;30178:736:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30178:736:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;-1:-1;30178:736:0;;-1:-1:-1;30178:736:0;-1:-1:-1;30178:736:0;:::i;23107:1082::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;23107:1082:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;25109:682::-;25349:19;25370:17;25330:8;20488:15;20476:8;:27;;20468:62;;;;;-1:-1:-1;;;20468:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;20468:62:0;;;;;;;;;;;;;;;25427:196:::1;25457:5;25477:4;25496:9;25520:14;25549:12;25584:4;25604:8;25427:15;:196::i;:::-;25400:223:::0;;-1:-1:-1;25400:223:0;-1:-1:-1;25634:51:0::1;25662:5:::0;25669:2;25400:223;25634:27:::1;:51::i;:::-;25702:4;-1:-1:-1::0;;;;;25696:20:0::1;;25717:9;25696:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;25696:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;25696:31:0;;;;25738:45;25769:2;25773:9;25738:30;:45::i;:::-;25109:682:::0;;;;;;;;;;:::o;40257:256::-;40399:17;40436:69;40473:8;40483:9;40494:10;40436:36;:69::i;:::-;40429:76;40257:256;-1:-1:-1;;;;40257:256:0:o;41040:248::-;41169:24;41218:62;41255:7;41264:9;41275:4;41218:36;:62::i;:::-;41211:69;;41040:248;;;;;:::o;25799:715::-;26135:15;26152;26180:12;26195:47;26218:7;26227:6;26235;26195:22;:47::i;:::-;26180:62;;26253:13;26269:10;:36;;26296:9;26269:36;;;-1:-1:-1;;26269:36:0;26316:78;;;-1:-1:-1;;;26316:78:0;;26342:10;26316:78;;;;26362:4;26316:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26253:52;;-1:-1:-1;;;;;;26316:25:0;;;;;:78;;;;;-1:-1:-1;;26316:78:0;;;;;;;;-1:-1:-1;26316:25:0;:78;;;2:2:-1;;;;27:1;24;17:12;2:2;26316:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26316:78:0;;;;26426:80;26442:6;26450;26458:9;26469:10;26481;26493:2;26497:8;26426:15;:80::i;:::-;26405:101;;;;;;;;25799:715;;;;;;;;;;;;;;;;:::o;30922:714::-;31190:24;31171:8;20488:15;20476:8;:27;;20468:62;;;;;-1:-1:-1;;;20468:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;20468:62:0;;;;;;;;;;;;;;;31237::::1;31274:7;31283:9;31294:4;;31237:62;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31237:36:0::1;::::0;-1:-1:-1;;;31237:62:0:i:1;:::-;31227:72;;31332:11;31318:7;31326:1;31318:10;;;;;;;;;;;;;;:25;;31310:75;;;;-1:-1:-1::0;;;31310:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31396:178;31442:4;;31447:1;31442:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31442:7:0::1;31464:10;31489:49;31512:7;31521:4;;31526:1;31521:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31521:7:0::1;31530:4;;31535:1;31530:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31530:7:0::1;31489:22;:49::i;:::-;31553:7;31561:1;31553:10;;;;;;;;;;;;;;31396:31;:178::i;:::-;31585:43;31591:7;31600:4;;31585:43;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;;31585:43:0::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;31606:2;;-1:-1:-1;31585:43:0;;-1:-1:-1;31610:17:0;;;;;;31585:43;;::::1;::::0;31610:17;;31585:43;31610:17;31585:43;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31585:5:0::1;::::0;-1:-1:-1;;;31585:43:0:i:1;:::-;30922:714:::0;;;;;;;;;;;:::o;38213:860::-;38469:8;20488:15;20476:8;:27;;20468:62;;;;;-1:-1:-1;;;20468:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;20468:62:0;;;;;;;;;;;;;;;38509:4:::1;-1:-1:-1::0;;;;;38498:15:0::1;:4;;38503:1;38498:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;38498:7:0::1;-1:-1:-1::0;;;;;38498:15:0::1;;38490:55;;;::::0;;-1:-1:-1;;;38490:55:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;38490:55:0;;;;;;;;;;;;;::::1;;38556:16;38575:9;38556:28;;38601:4;-1:-1:-1::0;;;;;38595:19:0::1;;38622:8;38595:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;38595:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;38595:38:0;;;;;38657:4;-1:-1:-1::0;;;;;38651:20:0::1;;38672:49;38695:7;38704:4;;38709:1;38704:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;38704:7:0::1;38713:4;;38718:1;38713:7;;;;;;38672:49;38723:8;38651:81;;;;;;;;;;;;;-1:-1:-1::0;;;;;38651:81:0::1;-1:-1:-1::0;;;;;38651:81:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;38651:81:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;38651:81:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;38651:81:0;38644:89:::1;;;;38744:21;38775:4:::0;;-1:-1:-1;;38780:15:0;;38775:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;38775:21:0::1;-1:-1:-1::0;;;;;38768:39:0::1;;38808:2;38768:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;38768:43:0::1;-1:-1:-1::0;;;;;38768:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;38768:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;38768:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;38768:43:0;38822:63:::1;::::0;;38768:43:::1;38822:63:::0;;::::1;::::0;;;;;;;;;;;38768:43;;-1:-1:-1;38822:63:0::1;::::0;;;38857:4;;;;;;38822:63;::::1;::::0;38857:4;;38822:63;38857:4;38822:63;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;;38822:63:0::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;38863:2;;-1:-1:-1;38822:63:0;;-1:-1:-1;38867:17:0;;;;;;38822:63;;::::1;::::0;38867:17;;38822:63;38867:17;38822:63;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;38822:34:0::1;::::0;-1:-1:-1;;;38822:63:0:i:1;:::-;38984:12:::0;38918:62:::1;38966:13:::0;38925:4;;-1:-1:-1;;38930:15:0;;38925:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;38925:21:0::1;-1:-1:-1::0;;;;;38918:39:0::1;;38958:2;38918:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;38918:43:0::1;-1:-1:-1::0;;;;;38918:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;38918:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;38918:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;38918:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;38896:169;;;;-1:-1:-1::0;;;38896:169:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20541:1;;38213:860:::0;;;;;;;;:::o;27920:818::-;28268:17;28298:12;28313:44;28336:7;28345:5;28352:4;28313:22;:44::i;:::-;28298:59;;28368:13;28384:10;:36;;28411:9;28384:36;;;-1:-1:-1;;28384:36:0;28431:78;;;-1:-1:-1;;;28431:78:0;;28457:10;28431:78;;;;28477:4;28431:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28368:52;;-1:-1:-1;;;;;;28431:25:0;;;;;:78;;;;;-1:-1:-1;;28431:78:0;;;;;;;;-1:-1:-1;28431:25:0;:78;;;2:2:-1;;;;27:1;24;17:12;2:2;28431:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28431:78:0;;;;28532:198;28594:5;28614:9;28638:14;28667:12;28694:2;28711:8;28532:47;:198::i;:::-;28520:210;27920:818;-1:-1:-1;;;;;;;;;;;;;27920:818:0:o;31644:745::-;31890:24;31871:8;20488:15;20476:8;:27;;20468:62;;;;;-1:-1:-1;;;20468:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;20468:62:0;;;;;;;;;;;;;;;31946:4:::1;-1:-1:-1::0;;;;;31935:15:0::1;:4;;31940:1;31935:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31935:7:0::1;-1:-1:-1::0;;;;;31935:15:0::1;;31927:55;;;::::0;;-1:-1:-1;;;31927:55:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;31927:55:0;;;;;;;;;;;;;::::1;;32003:63;32041:7;32050:9;32061:4;;32003:63;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32003:37:0::1;::::0;-1:-1:-1;;;32003:63:0:i:1;:::-;31993:73;;32116:12;32085:7;32110:1;32093:7;:14;:18;32085:27;;;;;;;;;;;;;;:43;;32077:97;;;;-1:-1:-1::0;;;32077:97:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32191:4;-1:-1:-1::0;;;;;32185:19:0::1;;32212:7;32220:1;32212:10;;;;;;;;;;;;;;32185:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32185:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32185:40:0;;;;;32249:4;-1:-1:-1::0;;;;;32243:20:0::1;;32264:49;32287:7;32296:4;;32301:1;32296:7;;;;;;32264:49;32315:7;32323:1;32315:10;;;;;;;;;;;;;;32243:83;;;;;;;;;;;;;-1:-1:-1::0;;;;;32243:83:0::1;-1:-1:-1::0;;;;;32243:83:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32243:83:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32243:83:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32243:83:0;32236:91:::1;;;;32338:43;32344:7;32353:4;;32338:43;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;;32338:43:0::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;32359:2;;-1:-1:-1;32338:43:0;;-1:-1:-1;32363:17:0;;;;;;32338:43;;::::1;::::0;32363:17;;32338:43;32363:17;32338:43;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32338:5:0::1;::::0;-1:-1:-1;;;32338:43:0:i:1;:::-;31644:745:::0;;;;;;;;;;:::o;40521:255::-;40663:16;40699:69;40735:9;40746;40757:10;40699:35;:69::i;32397:936::-;32662:24;32643:8;20488:15;20476:8;:27;;20468:62;;;;;-1:-1:-1;;;20468:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;20468:62:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32732:4:0::1;32707:29;:4:::0;;-1:-1:-1;;32712:15:0;;32707:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32707:21:0::1;-1:-1:-1::0;;;;;32707:29:0::1;;32699:69;;;::::0;;-1:-1:-1;;;32699:69:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;32699:69:0;;;;;;;;;;;;;::::1;;32789:62;32826:7;32835:9;32846:4;;32789:62;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32789:36:0::1;::::0;-1:-1:-1;;;32789:62:0:i:1;:::-;32779:72;;32884:11;32870:7;32878:1;32870:10;;;;;;;;;;;;;;:25;;32862:75;;;;-1:-1:-1::0;;;32862:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32948:178;32994:4;;32999:1;32994:7;;;;;;32948:178;33137:54;33143:7;33152:4;;33137:54;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;;33137:54:0::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;33166:4:::1;::::0;-1:-1:-1;33137:54:0;;-1:-1:-1;33173:17:0;;;;;;33137:54;;::::1;::::0;33173:17;;33137:54;33173:17;33137:54;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;33137:5:0::1;::::0;-1:-1:-1;;;33137:54:0:i:1;:::-;33208:4;-1:-1:-1::0;;;;;33202:20:0::1;;33223:7;33248:1;33231:7;:14;:18;33223:27;;;;;;;;;;;;;;33202:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33202:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33202:49:0;;;;33262:63;33293:2;33297:7;33322:1;33305:7;:14;:18;33297:27;;;;;;;;;;;;;;33262:30;:63::i;34307:858::-:0;34550:24;34531:8;20488:15;20476:8;:27;;20468:62;;;;;-1:-1:-1;;;20468:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;20468:62:0;;;;;;;;;;;;;;;34606:4:::1;-1:-1:-1::0;;;;;34595:15:0::1;:4;;34600:1;34595:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;34595:7:0::1;-1:-1:-1::0;;;;;34595:15:0::1;;34587:55;;;::::0;;-1:-1:-1;;;34587:55:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;34587:55:0;;;;;;;;;;;;;::::1;;34663:62;34700:7;34709:9;34720:4;;34663:62;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;34663:36:0::1;::::0;-1:-1:-1;;;34663:62:0:i:1;:::-;34653:72;;34758:9;34744:7;34752:1;34744:10;;;;;;;;;;;;;;:23;;34736:73;;;;-1:-1:-1::0;;;34736:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34826:4;-1:-1:-1::0;;;;;34820:19:0::1;;34847:7;34855:1;34847:10;;;;;;;;;;;;;;34820:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;34820:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;34820:40:0;;;;;34884:4;-1:-1:-1::0;;;;;34878:20:0::1;;34899:49;34922:7;34931:4;;34936:1;34931:7;;;;;;34899:49;34950:7;34958:1;34950:10;;;;;;;;;;;;;;34878:83;;;;;;;;;;;;;-1:-1:-1::0;;;;;34878:83:0::1;-1:-1:-1::0;;;;;34878:83:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;34878:83:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;34878:83:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;34878:83:0;34871:91:::1;;;;34973:43;34979:7;34988:4;;34973:43;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;;34973:43:0::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;34994:2;;-1:-1:-1;34973:43:0;;-1:-1:-1;34998:17:0;;;;;;34973:43;;::::1;::::0;34998:17;;34973:43;34998:17;34973:43;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;34973:5:0::1;::::0;-1:-1:-1;;;34973:43:0:i:1;:::-;35079:7;35087:1;35079:10;;;;;;;;;;;;;;35067:9;:22;35063:94;;;35091:66;35122:10;35146:7;35154:1;35146:10;;;;;;;;;;;;;;35134:9;:22;35091:30;:66::i;20385:29::-:0;;;:::o;40026:223::-;40157:15;40192:49;40213:7;40222:8;40232;40192:20;:49::i;27308:604::-;27577:17;27558:8;20488:15;20476:8;:27;;20468:62;;;;;-1:-1:-1;;;20468:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;20468:62:0;;;;;;;;;;;;;;;27623:94:::1;27639:5;27646:4;27652:9;27663:14;27679:12;27701:4;27708:8;27623:15;:94::i;:::-;27767:38;::::0;;-1:-1:-1;;;27767:38:0;;27799:4:::1;27767:38;::::0;::::1;::::0;;;27607:110;;-1:-1:-1;27728:78:0::1;::::0;-1:-1:-1;27756:5:0;;27763:2;;-1:-1:-1;;;;;27767:23:0;::::1;::::0;::::1;::::0;:38;;;;;::::1;::::0;;;;;;;;;:23;:38;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;27767:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27767:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;27767:38:0;27728:27:::1;:78::i;:::-;27823:4;-1:-1:-1::0;;;;;27817:20:0::1;;27838:9;27817:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27817:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27817:31:0;;;;27859:45;27890:2;27894:9;27859:30;:45::i;:::-;27308:604:::0;;;;;;;;;:::o;24232:869::-;24489:15;24506;24470:8;20488:15;20476:8;:27;;20468:62;;;;;-1:-1:-1;;;20468:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;20468:62:0;;;;;;;;;;;;;;;24534:12:::1;24549:47;24572:7;24581:6;24589;24549:22;:47::i;:::-;24607:60;::::0;;-1:-1:-1;;;24607:60:0;;24639:10:::1;24607:60;::::0;::::1;::::0;-1:-1:-1;;;;;24607:31:0;::::1;:60:::0;;;;;;;;;;;;;;24534:62;;-1:-1:-1;24607:31:0;;::::1;::::0;:60;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;24607:31:0;:60;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;24607:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24607:60:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;24741:27:0::1;::::0;;-1:-1:-1;;;24741:27:0;;-1:-1:-1;;;;;24741:27:0;;::::1;;::::0;::::1;::::0;;;24705:15:::1;::::0;;;24741:23;;::::1;::::0;::::1;::::0;:27;;;;;;;;;;;24705:15;24741:23;:27;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;24741:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24741:27:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;24741:27:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;24741:27:0;-1:-1:-1;24780:14:0::1;24800:41;24826:6:::0;24834;24800:25:::1;:41::i;:::-;24779:62;;;24883:6;-1:-1:-1::0;;;;;24873:16:0::1;:6;-1:-1:-1::0;;;;;24873:16:0::1;;:58;;24914:7;24923;24873:58;;;24893:7;24902;24873:58;24852:79:::0;;-1:-1:-1;24852:79:0;-1:-1:-1;24950:21:0;;::::1;;24942:70;;;;-1:-1:-1::0;;;24942:70:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25042:10;25031:7;:21;;25023:70;;;;-1:-1:-1::0;;;25023:70:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20541:1;;;;24232:869:::0;;;;;;;;;;;:::o;33341:958::-;33606:24;33587:8;20488:15;20476:8;:27;;20468:62;;;;;-1:-1:-1;;;20468:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;20468:62:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;33676:4:0::1;33651:29;:4:::0;;-1:-1:-1;;33656:15:0;;33651:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;33651:21:0::1;-1:-1:-1::0;;;;;33651:29:0::1;;33643:69;;;::::0;;-1:-1:-1;;;33643:69:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;33643:69:0;;;;;;;;;;;;;::::1;;33733:62;33771:7;33780:8;33790:4;;33733:62;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;33733:37:0::1;::::0;-1:-1:-1;;;33733:62:0:i:1;:::-;33723:72;;33845:12;33814:7;33839:1;33822:7;:14;:18;33814:27;;;;;;;;;;;;;;:43;;33806:97;;;;-1:-1:-1::0;;;33806:97:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20346:32:::0;;;:::o;37390:815::-;37668:8;20488:15;20476:8;:27;;20468:62;;;;;-1:-1:-1;;;20468:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;20468:62:0;;;;;;;;;;;;;;;37689:176:::1;37735:4;;37740:1;37735:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;37735:7:0::1;37757:10;37782:49;37805:7;37814:4;;37819:1;37814:7;;;;;;37782:49;37846:8;37689:31;:176::i;:::-;37876:21;37907:4:::0;;-1:-1:-1;;37912:15:0;;37907:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;37907:21:0::1;-1:-1:-1::0;;;;;37900:39:0::1;;37940:2;37900:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;37900:43:0::1;-1:-1:-1::0;;;;;37900:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;37900:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;37900:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;37900:43:0;37954:63:::1;::::0;;37900:43:::1;37954:63:::0;;::::1;::::0;;;;;;;;;;;37900:43;;-1:-1:-1;37954:63:0::1;::::0;;;37989:4;;;;;;37954:63;::::1;::::0;37989:4;;37954:63;37989:4;37954:63;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;;37954:63:0::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;37995:2;;-1:-1:-1;37954:63:0;;-1:-1:-1;37999:17:0;;;;;;37954:63;;::::1;::::0;37999:17;;37954:63;37999:17;37954:63;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;37954:34:0::1;::::0;-1:-1:-1;;;37954:63:0:i:1;:::-;38116:12:::0;38050:62:::1;38098:13:::0;38057:4;;-1:-1:-1;;38062:15:0;;38057:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;38057:21:0::1;-1:-1:-1::0;;;;;38050:39:0::1;;38090:2;38050:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;38050:43:0::1;-1:-1:-1::0;;;;;38050:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;40784:248:0::0;40913:24;40962:62;41000:7;41009:8;41019:4;40962:37;:62::i;26522:707::-;26841:19;26862:17;26892:12;26907:44;26930:7;26939:5;26946:4;26907:22;:44::i;:::-;26892:59;;26962:13;26978:10;:36;;27005:9;26978:36;;;-1:-1:-1;;26978:36:0;27025:78;;;-1:-1:-1;;;27025:78:0;;27051:10;27025:78;;;;27071:4;27025:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26962:52;;-1:-1:-1;;;;;;27025:25:0;;;;;:78;;;;;-1:-1:-1;;27025:78:0;;;;;;;;-1:-1:-1;27025:25:0;:78;;;2:2:-1;;;;27:1;24;17:12;2:2;27025:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27025:78:0;;;;27141:80;27160:5;27167:9;27178:14;27194:12;27208:2;27212:8;27141:18;:80::i;:::-;27114:107;;;;-1:-1:-1;26522:707:0;-1:-1:-1;;;;;;;;;;;;;26522:707:0:o;39081:901::-;39356:8;20488:15;20476:8;:27;;20468:62;;;;;-1:-1:-1;;;20468:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;20468:62:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;39410:4:0::1;39385:29;:4:::0;;-1:-1:-1;;39390:15:0;;39385:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;39385:21:0::1;-1:-1:-1::0;;;;;39385:29:0::1;;39377:69;;;::::0;;-1:-1:-1;;;39377:69:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;39377:69:0;;;;;;;;;;;;;::::1;;39457:176;39503:4;;39508:1;39503:7;;;;;;39457:176;39644:74;39679:4;;39644:74;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;;39644:74:0::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;39693:4:::1;::::0;-1:-1:-1;39644:74:0;;-1:-1:-1;39700:17:0;;;;;;39644:74;;::::1;::::0;39700:17;;39644:74;39700:17;39644:74;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;39644:34:0::1;::::0;-1:-1:-1;;;39644:74:0:i:1;:::-;39749:37;::::0;;-1:-1:-1;;;39749:37:0;;39780:4:::1;39749:37;::::0;::::1;::::0;;;39729:17:::1;::::0;-1:-1:-1;;;;;39756:4:0::1;39749:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;39749:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;39749:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;39749:37:0;;-1:-1:-1;39805:25:0;;::::1;;39797:79;;;;-1:-1:-1::0;;;39797:79:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39893:4;-1:-1:-1::0;;;;;39887:20:0::1;;39908:9;39887:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;39887:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;39887:31:0;;;;39929:45;39960:2;39964:9;39929:30;:45::i;22259:840::-:0;22603:15;22633;22663:17;22561:8;20488:15;20476:8;:27;;20468:62;;;;;-1:-1:-1;;;20468:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;20468:62:0;;;;;;;;;;;;;;;22729:85:::1;22743:6;22751;22759:14;22775;22791:10;22803;22729:13;:85::i;:::-;22708:106:::0;;-1:-1:-1;22708:106:0;-1:-1:-1;22825:12:0::1;22840:47;22863:7;22872:6:::0;22880;22840:22:::1;:47::i;:::-;22825:62;;22898:66;22930:6;22938:10;22950:4;22956:7;22898:31;:66::i;:::-;22975;23007:6;23015:10;23027:4;23033:7;22975:31;:66::i;:::-;23077:4;-1:-1:-1::0;;;;;23064:23:0::1;;23088:2;23064:27;;;;;;;;;;;;;-1:-1:-1::0;;;;;23064:27:0::1;-1:-1:-1::0;;;;;23064:27:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;23064:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23064:27:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;23064:27:0;22259:840;;;;-1:-1:-1;23064:27:0;;-1:-1:-1;22259:840:0;;-1:-1:-1;;;;;;;;;22259:840:0:o;30178:736::-;30446:24;30427:8;20488:15;20476:8;:27;;20468:62;;;;;-1:-1:-1;;;20468:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;20468:62:0;;;;;;;;;;;;;;;30493::::1;30531:7;30540:8;30550:4;;30493:62;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;30493:37:0::1;::::0;-1:-1:-1;;;30493:62:0:i:1;:::-;30483:72;;30605:12;30574:7;30599:1;30582:7;:14;:18;30574:27;;;;;;;;;;;;;;:43;;30566:97;;;;-1:-1:-1::0;;;30566:97:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23107:1082:::0;23422:19;23456:17;23488;23380:8;20488:15;20476:8;:27;;20468:62;;;;;-1:-1:-1;;;20468:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;20468:62:0;;;;;;;;;;;;;;;23560:176:::1;23588:5;23608:4;23627:18;23660:9;23684:14;23713:12;23560:13;:176::i;:::-;23533:203:::0;;-1:-1:-1;23533:203:0;-1:-1:-1;23747:12:0::1;23762:44;23785:7;23794:5:::0;23801:4:::1;23762:22;:44::i;:::-;23747:59;;23817:69;23849:5;23856:10;23868:4;23874:11;23817:31;:69::i;:::-;23903:4;-1:-1:-1::0;;;;;23897:19:0::1;;23924:9;23897:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;23897:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23897:39:0;;;;;23960:4;-1:-1:-1::0;;;;;23954:20:0::1;;23975:4;23981:9;23954:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;23954:37:0::1;-1:-1:-1::0;;;;;23954:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;23954:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23954:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;23954:37:0;23947:45:::1;;;;24028:4;-1:-1:-1::0;;;;;24015:23:0::1;;24039:2;24015:27;;;;;;;;;;;;;-1:-1:-1::0;;;;;24015:27:0::1;-1:-1:-1::0;;;;;24015:27:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;24015:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24015:27:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;24015:27:0;;-1:-1:-1;24093:9:0::1;:21:::0;-1:-1:-1;24089:92:0::1;;;24116:65;24147:10;24171:9;24159;:21;24116:30;:65::i;:::-;20541:1;23107:1082:::0;;;;;;;;;;;:::o;17907:449::-;18139:45;;;-1:-1:-1;;;;;18139:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;18139:45:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;18128:57:0;;;;18093:12;;18107:17;;18128:10;;;;18139:45;18128:57;;;25:18:-1;18128:57:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;18128:57:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;18092:93:0;;;;18218:7;:57;;;;-1:-1:-1;18230:11:0;;:16;;:44;;;18261:4;18250:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;18250:24:0;18230:44;18196:152;;;;-1:-1:-1;;;18196:152:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17907:449;;;;;:::o;18870:217::-;18983:12;;;18943;18983;;;;;;;;;-1:-1:-1;;;;;18961:7:0;;;18976:5;;18961:35;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;18961:35:0;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;18942:54:0;;;19015:7;19007:72;;;;-1:-1:-1;;;19007:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18870:217;;;:::o;12513:501::-;12658:17;12707:1;12696:8;:12;12688:66;;;;-1:-1:-1;;;12688:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12785:1;12773:9;:13;:31;;;;;12803:1;12790:10;:14;12773:31;12765:82;;;;-1:-1:-1;;;12765:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12860:17;12880:24;:8;12893:10;12880:24;:12;:24;:::i;:::-;12860:44;-1:-1:-1;12915:19:0;12937:23;:9;12951:8;12937:23;:13;:23;:::i;:::-;12915:45;;12995:11;12983:9;:23;;;;;;;12513:501;-1:-1:-1;;;;;;12513:501:0:o;16068:600::-;16215:24;16275:1;16260:4;:11;:16;;16252:57;;;;;-1:-1:-1;;;16252:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;16344:4;:11;16330:26;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16330:26:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;16330:26:0;;16320:36;;16397:9;16367:7;16392:1;16375:7;:14;:18;16367:27;;;;;;;;;;;;;;;;;:39;16434:11;;-1:-1:-1;;16434:15:0;16417:244;16451:5;;16417:244;;16479:17;16498:18;16520:42;16532:7;16541:4;16550:1;16546;:5;16541:11;;;;;;;;;;;;;;16554:4;16559:1;16554:7;;;;;;;;;;;;;;16520:11;:42::i;:::-;16478:84;;;;16594:55;16615:7;16623:1;16615:10;;;;;;;;;;;;;;16627:9;16638:10;16594:20;:55::i;:::-;16577:7;16589:1;16585;:5;16577:14;;;;;;;;;;;;;;;;;:72;-1:-1:-1;;;;16458:3:0;16417:244;;;;16068:600;;;;;:::o;10771:651::-;10894:12;10920:14;10936;10954:26;10965:6;10973;10954:10;:26::i;:::-;11199:32;;;-1:-1:-1;;11199:32:0;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;11199:32:0;;;;;11189:43;;;;;;-1:-1:-1;;;;;;11078:291:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;11078:291:0;;;;;;;11046:342;;;;;;;;;10771:651;-1:-1:-1;;;;;10771:651:0:o;18364:498::-;18635:51;;;-1:-1:-1;;;;;18635:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;18635:51:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;18624:63:0;;;;18589:12;;18603:17;;18624:10;;;;18635:51;18624:63;;;25:18:-1;18624:63:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;18624:63:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;18588:99:0;;;;18720:7;:57;;;;-1:-1:-1;18732:11:0;;:16;;:44;;;18763:4;18752:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;18752:24:0;18732:44;18698:156;;;;-1:-1:-1;;;18698:156:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18364:498;;;;;;:::o;28849:1323::-;29030:16;29065:7;-1:-1:-1;;;;;29049:33:0;;:35;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29049:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29049:35:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;29049:35:0;;-1:-1:-1;29115:9:0;29110:1055;29144:1;29130:4;:11;:15;29126:1;:19;29110:1055;;;29168:13;29183:14;29202:4;29207:1;29202:7;;;;;;;;;;;;;;29211:4;29216:1;29220;29216:5;29211:11;;;;;;;;;;;;;;29167:56;;;;29239:14;29258:40;29284:5;29291:6;29258:25;:40::i;:::-;29238:60;;;29313:17;29333:7;29341:1;29345;29341:5;29333:14;;;;;;;;;;;;;;29313:34;;29363:18;29383;29431:6;-1:-1:-1;;;;;29422:15:0;:5;-1:-1:-1;;;;;29422:15:0;;:67;;29467:9;29486:1;29422:67;;;29449:1;29453:9;29422:67;29362:127;;;;29504:10;29535:1;29521:4;:11;:15;29517:1;:19;:80;;29594:3;29517:80;;;29539:52;29562:7;29571:6;29579:4;29584:1;29588;29584:5;29579:11;;;;;;;;;;;;;;29539:22;:52::i;:::-;29504:93;;29612:12;29627:46;29650:7;29659:5;29666:6;29627:22;:46::i;:::-;29612:61;;29715:1;29692:17;29710:1;29692:20;;;;;;;;;;;;;;:24;29688:371;;;29741:47;;;-1:-1:-1;;;29741:47:0;;29776:4;29741:47;;;;-1:-1:-1;;;;;29741:47:0;;;;;;;;;:26;;;;;;:47;;;;;;;;;;;;;;;:26;:47;;;2:2:-1;;;;27:1;24;17:12;2:2;29741:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29741:47:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;29741:47:0;29737:144;;29818:43;;;-1:-1:-1;;;29818:43:0;;-1:-1:-1;;;;;29818:43:0;;;;;;;-1:-1:-1;;29818:43:0;;;;;;:24;;;;;;:43;;;;;;;;;;;;;;;-1:-1:-1;29818:24:0;:43;;;2:2:-1;;;;27:1;24;17:12;2:2;29818:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29818:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;29737:144:0;29906:8;-1:-1:-1;;;;;29899:29:0;;29929:10;29949:4;29956:17;29974:1;29956:20;;;;;;;;;;;;;;29899:78;;;;;;;;;;;;;-1:-1:-1;;;;;29899:78:0;-1:-1:-1;;;;;29899:78:0;;;;;;-1:-1:-1;;;;;29899:78:0;-1:-1:-1;;;;;29899:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29899:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29899:78:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;30022:20:0;;-1:-1:-1;;;;;29996:25:0;;;;;30022:17;;30040:1;;30022:20;;;;;;;;;;;;29996:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29996:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29996:47:0;;;;29688:371;30140:12;;;30150:1;30140:12;;;;;;;;;;-1:-1:-1;;;30073:80:0;;;;;;;;;;;;;;-1:-1:-1;;;;;30073:80:0;;;;;;;;;;;;;;;;;;;;;;:38;;;;;;30112:10;;30124;;30136:2;;30140:12;;30073:80;;;;;;;;;;;;30140:12;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;30073:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30073:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;29147:3:0;;;;;-1:-1:-1;29110:1055:0;;-1:-1:-1;;;;;;;;;29110:1055:0;35312:2070;35458:9;35453:1922;35487:1;35473:4;:11;:15;35469:1;:19;35453:1922;;;35511:13;35526:14;35545:4;35550:1;35545:7;;;;;;;;;;;;;;35554:4;35559:1;35563;35559:5;35554:11;;;;;;;;;;;;;;35510:56;;;;35582:14;35602:40;35628:5;35635:6;35602:25;:40::i;:::-;35581:61;;;35657:17;35690:46;35713:7;35722:5;35729:6;35690:22;:46::i;:::-;35657:80;;35752:19;35786:20;35898:16;35916;35938:4;-1:-1:-1;;;;;35938:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35938:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35938:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;35938:18:0;;;;;;;-1:-1:-1;;;;;35897:59:0;;;;-1:-1:-1;35897:59:0;;-1:-1:-1;35976:20:0;;-1:-1:-1;;;;;36044:15:0;;;;;;;:61;;36086:8;36096;36044:61;;;36063:8;36073;36044:61;35975:130;;;;36124:17;36151:5;-1:-1:-1;;;;;36144:23:0;;36176:4;36144:38;;;;;;;;;;;;;-1:-1:-1;;;;;36144:38:0;-1:-1:-1;;;;;36144:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;36144:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36144:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;36144:38:0;36213:35;;;-1:-1:-1;;;36213:35:0;;;;36144:38;;-1:-1:-1;;;;;;36229:7:0;36213:33;;;;:35;;;;;36144:38;;36213:35;;;;;;;;:33;:35;;;2:2:-1;;;;27:1;24;17:12;2:2;36213:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36213:35:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;36213:35:0;-1:-1:-1;;;;;36204:44:0;;;;;;36201:156;;;36288:49;36318:4;-1:-1:-1;;;;;36305:29:0;;:31;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;36305:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36305:31:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;36305:31:0;36288:12;;:49;:16;:49;:::i;:::-;36273:64;;36201:156;36389:30;:12;36406;36389:30;:16;:30;:::i;:::-;36375:44;;36453:78;36490:11;36503:12;36517:13;36453:36;:78::i;:::-;36438:93;;35453:1922;;;;;36562:18;36582;36630:6;-1:-1:-1;;;;;36621:15:0;:5;-1:-1:-1;;;;;36621:15:0;;:73;;36669:12;36691:1;36621:73;;;36648:1;36652:12;36621:73;36561:133;;;;36709:10;36740:1;36726:4;:11;:15;36722:1;:19;:80;;36799:3;36722:80;;;36744:52;36767:7;36776:6;36784:4;36789:1;36793;36789:5;36784:11;;;;;;;36744:52;36709:93;;36846:1;36823:17;36841:1;36823:20;;;;;;;;;;;;;;:24;36819:462;;;36868:16;36903:7;-1:-1:-1;;;;;36887:33:0;;:35;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;36887:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36887:35:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;36887:35:0;36945:56;;;-1:-1:-1;;;36945:56:0;;36980:4;36945:56;;;;-1:-1:-1;;;;;36945:56:0;;;;;;;;;36887:35;;-1:-1:-1;36945:26:0;;;;;;:56;;;;;36887:35;;36945:56;;;;;;;;:26;:56;;;2:2:-1;;;;27:1;24;17:12;2:2;36945:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36945:56:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;36945:56:0;36941:162;;37031:52;;;-1:-1:-1;;;37031:52:0;;-1:-1:-1;;;;;37031:52:0;;;;;;;-1:-1:-1;;37031:52:0;;;;;;:24;;;;;;:52;;;;;;;;;;;;;;;-1:-1:-1;37031:24:0;:52;;;2:2:-1;;;;27:1;24;17:12;2:2;37031:52:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37031:52:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;36941:162:0;37128:8;-1:-1:-1;;;;;37121:29:0;;37151:10;37171:4;37178:17;37196:1;37178:20;;;;;;;;;;;;;;37121:78;;;;;;;;;;;;;-1:-1:-1;;;;;37121:78:0;-1:-1:-1;;;;;37121:78:0;;;;;;-1:-1:-1;;;;;37121:78:0;-1:-1:-1;;;;;37121:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;37121:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37121:78:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;37244:20:0;;-1:-1:-1;;;;;37218:25:0;;;;;37244:17;;37262:1;;37244:20;;;;;;;;;;;;37218:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;37218:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37218:47:0;;;;36819:462;;37350:12;;;37360:1;37350:12;;;;;;;;;;-1:-1:-1;;;37297:66:0;;;;;;;;;;;;;;-1:-1:-1;;;;;37297:66:0;;;;;;;;;;;;;;;;;;;;;;:24;;;;;;37322:10;;37334;;37346:2;;37350:12;;37297:66;;;;;;;;;;;;37350:12;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;37297:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;37297:66:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;35490:3:0;;;;;-1:-1:-1;35453:1922:0;;-1:-1:-1;;;;;;;;;;35453:1922:0;;;35312:2070;;;:::o;4533:158::-;4591:7;4624:1;4619;:6;;4611:49;;;;;-1:-1:-1;;;4611:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4678:5:0;;;4533:158::o;14839:579::-;14986:24;15046:1;15031:4;:11;:16;;15023:57;;;;;-1:-1:-1;;;15023:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15115:4;:11;15101:26;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15101:26:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;15101:26:0;;15091:36;;15151:8;15138:7;15146:1;15138:10;;;;;;;;;;;;;:21;;;;;15175:9;15170:241;15204:1;15190:4;:11;:15;15186:1;:19;15170:241;;;15228:17;15247:18;15269:42;15281:7;15290:4;15295:1;15290:7;;;;;;;;;;;;;;15299:4;15304:1;15308;15304:5;15299:11;;;;;;;15269:42;15227:84;;;;15343:56;15365:7;15373:1;15365:10;;;;;;;;;;;;;;15377:9;15388:10;15343:21;:56::i;:::-;15326:7;15334:1;15338;15334:5;15326:14;;;;;;;;;;;;;;;;;:73;-1:-1:-1;;15207:3:0;;15170:241;;13685:510;13830:16;13879:1;13867:9;:13;13859:68;;;;-1:-1:-1;;;13859:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13958:1;13946:9;:13;:31;;;;;13976:1;13963:10;:14;13946:31;13938:82;;;;-1:-1:-1;;;13938:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14031:17;14051:24;:9;14065;14051:24;:13;:24;:::i;:::-;14031:44;-1:-1:-1;14086:19:0;14108:25;:10;14123:9;14108:25;:14;:25;:::i;:::-;14086:47;;14155:32;14185:1;14168:11;14156:9;:23;;;;;;;14155:32;:29;:32;:::i;:::-;14144:43;13685:510;-1:-1:-1;;;;;;13685:510:0:o;12028:363::-;12153:15;12199:1;12189:7;:11;12181:59;;;;-1:-1:-1;;;12181:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12270:1;12259:8;:12;:28;;;;;12286:1;12275:8;:12;12259:28;12251:79;;;;-1:-1:-1;;;12251:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12375:8;12351:21;:7;12363:8;12351:21;:11;:21;:::i;:::-;:32;;;;;;;12028:363;-1:-1:-1;;;;12028:363:0:o;10334:345::-;10409:14;10425;10470:6;-1:-1:-1;;;;;10460:16:0;:6;-1:-1:-1;;;;;10460:16:0;;;10452:64;;;;-1:-1:-1;;;10452:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10555:6;-1:-1:-1;;;;;10546:15:0;:6;-1:-1:-1;;;;;10546:15:0;;:53;;10584:6;10592;10546:53;;;10565:6;10573;10546:53;10527:72;;-1:-1:-1;10527:72:0;-1:-1:-1;;;;;;10618:20:0;;10610:61;;;;;-1:-1:-1;;;10610:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10334:345;;;;;:::o;20845:1406::-;21176:48;;;-1:-1:-1;;;21176:48:0;;-1:-1:-1;;;;;21176:48:0;;;;;;;;;;;;;;;;21075:15;;;;;;21192:7;21176:32;;;;;;:48;;;;;;;;;;;;;;;:32;:48;;;2:2:-1;;;;27:1;24;17:12;2:2;21176:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21176:48:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;21176:48:0;-1:-1:-1;;;;;21176:62:0;;21172:146;;;21255:51;;;-1:-1:-1;;;21255:51:0;;-1:-1:-1;;;;;21255:51:0;;;;;;;;;;;;;;;;21271:7;21255:35;;;;;;:51;;;;;;;;;;;;;;;-1:-1:-1;21255:35:0;:51;;;2:2:-1;;;;27:1;24;17:12;2:2;21255:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21255:51:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;21172:146:0;21329:16;21347;21367:51;21394:7;21403:6;21411;21367:26;:51::i;:::-;21328:90;;;;21433:8;21445:1;21433:13;:30;;;;-1:-1:-1;21450:13:0;;21433:30;21429:815;;;21502:14;;-1:-1:-1;21518:14:0;;-1:-1:-1;21429:815:0;;;21566:22;21591:56;21612:14;21628:8;21638;21591:20;:56::i;:::-;21566:81;;21684:14;21666;:32;21662:571;;21745:10;21727:14;:28;;21719:77;;;;-1:-1:-1;;;21719:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21837:14;;-1:-1:-1;21853:14:0;-1:-1:-1;21853:14:0;21662:571;;;21909:22;21934:56;21955:14;21971:8;21981;21934:20;:56::i;:::-;21909:81;;22034:14;22016;:32;;22009:40;;;;22094:10;22076:14;:28;;22068:77;;;;-1:-1:-1;;;22068:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22186:14;-1:-1:-1;22202:14:0;;-1:-1:-1;21662:571:0;21429:815;;20845:1406;;;;;;;;;;;:::o;4950:220::-;5008:7;5032:6;5028:20;;-1:-1:-1;5047:1:0;5040:8;;5028:20;5071:5;;;5075:1;5071;:5;:1;5095:5;;;;;:10;5087:56;;;;-1:-1:-1;;;5087:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4071:179;4129:7;4161:5;;;4185:6;;;;4177:46;;;;;-1:-1:-1;;;4177:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;11478:437;11605:16;11623;11653:14;11673:26;11684:6;11692;11673:10;:26::i;:::-;11652:47;;;11711:16;11729;11764:32;11772:7;11781:6;11789;11764:7;:32::i;:::-;-1:-1:-1;;;;;11751:58:0;;:60;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11751:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11751:60:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;11751:60:0;;;;;;;-1:-1:-1;;;;;11710:101:0;;;;-1:-1:-1;11710:101:0;;-1:-1:-1;;;;;;11845:16:0;;;;;;;:62;;11888:8;11898;11845:62;;;11865:8;11875;11845:62;11822:85;;;;-1:-1:-1;11478:437:0;-1:-1:-1;;;;;;;11478:437:0:o
Swarm Source
ipfs://65482ba60bfa7db95828ec9543353cc5d2075768dece8d9d17f116b47303ed71
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$22.83
Net Worth in ETH
Token Allocations
ETH
100.00%
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| BASE | 100.00% | $2,893.33 | 0.00789 | $22.83 |
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.