Contract Overview
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Latest 25 internal transaction
[ Download CSV Export ]
Contract Name:
BakerySwapRouter
Compiler Version
v0.6.6+commit.6c089d02
Contract Source Code (Solidity)
/** *Submitted for verification at BscScan.com on 2020-09-14 */ pragma solidity >=0.5.0; interface IBakerySwapFactory { event PairCreated(address indexed token0, address indexed token1, address pair, uint256); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } // helper methods for interacting with BEP20 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: 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: 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: TRANSFER_FROM_FAILED'); } function safeTransferBNB(address to, uint256 value) internal { (bool success, ) = to.call{value: value}(new bytes(0)); require(success, 'TransferHelper: BNB_TRANSFER_FAILED'); } } interface IBakerySwapRouter { function factory() external pure returns (address); function WBNB() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityBNB( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountBNBMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountBNB, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityBNB( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountBNBMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountBNB); 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 returns (uint256 amountA, uint256 amountB); function removeLiquidityBNBWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountBNBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountBNB); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactBNBForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactBNB( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForBNB( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapBNBForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function removeLiquidityBNBSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountBNBMin, address to, uint256 deadline ) external returns (uint256 amountBNB); function removeLiquidityBNBWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountBNBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountBNB); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactBNBForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForBNBSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } library BakerySwapLibrary { 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, 'BakerySwapLibrary: IDENTICAL_ADDRESSES'); (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA); require(token0 != address(0), 'BakerySwapLibrary: 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'e2e87433120e32c4738a7d8f3271f3d872cbe16241d67537139158d90bac61d3' // 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, ) = IBakerySwapPair(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, 'BakerySwapLibrary: INSUFFICIENT_AMOUNT'); require(reserveA > 0 && reserveB > 0, 'BakerySwapLibrary: INSUFFICIENT_LIQUIDITY'); amountB = amountA.mul(reserveB) / reserveA; } // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) internal pure returns (uint256 amountOut) { require(amountIn > 0, 'BakerySwapLibrary: INSUFFICIENT_INPUT_AMOUNT'); require(reserveIn > 0 && reserveOut > 0, 'BakerySwapLibrary: INSUFFICIENT_LIQUIDITY'); uint256 amountInWithFee = amountIn.mul(997); uint256 numerator = amountInWithFee.mul(reserveOut); uint256 denominator = reserveIn.mul(1000).add(amountInWithFee); amountOut = numerator / denominator; } // given an output amount of an asset and pair reserves, returns a required input amount of the other asset function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) internal pure returns (uint256 amountIn) { require(amountOut > 0, 'BakerySwapLibrary: INSUFFICIENT_OUTPUT_AMOUNT'); require(reserveIn > 0 && reserveOut > 0, 'BakerySwapLibrary: INSUFFICIENT_LIQUIDITY'); uint256 numerator = reserveIn.mul(amountOut).mul(1000); uint256 denominator = reserveOut.sub(amountOut).mul(997); amountIn = (numerator / denominator).add(1); } // performs chained getAmountOut calculations on any number of pairs function getAmountsOut( address factory, uint256 amountIn, address[] memory path ) internal view returns (uint256[] memory amounts) { require(path.length >= 2, 'BakerySwapLibrary: 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 getAmountsIn( address factory, uint256 amountOut, address[] memory path ) internal view returns (uint256[] memory amounts) { require(path.length >= 2, 'BakerySwapLibrary: 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); } } } interface IBakerySwapPair { event Approval(address indexed owner, address indexed spender, uint256 value); event Transfer(address indexed from, address indexed to, uint256 value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (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); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn(address indexed sender, uint256 amount0, uint256 amount1, address indexed to); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns ( uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast ); function price0CumulativeLast() external view returns (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } /** * @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, 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) { return sub(a, b, 'SafeMath: subtraction overflow'); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * 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); uint256 c = a - b; return c; } /** * @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) { // 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 0; } uint256 c = a * b; require(c / a == b, 'SafeMath: multiplication overflow'); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts 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) { return div(a, b, 'SafeMath: division by zero'); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message 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, string memory errorMessage ) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts 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) { return mod(a, b, 'SafeMath: modulo by zero'); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message 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, string memory errorMessage ) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } function min(uint256 x, uint256 y) internal pure returns (uint256 z) { z = x < y ? x : y; } // babylonian method (https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method) function sqrt(uint256 y) internal pure returns (uint256 z) { if (y > 3) { z = y; uint256 x = y / 2 + 1; while (x < z) { z = x; x = (y / x + x) / 2; } } else if (y != 0) { z = 1; } } } interface IBEP20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the token decimals. */ function decimals() external view returns (uint8); /** * @dev Returns the token symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the token name. */ function name() external view returns (string memory); /** * @dev Returns the bep token owner. */ function getOwner() external view returns (address); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address _owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } interface IWBNB { function deposit() external payable; function transfer(address to, uint256 value) external returns (bool); function withdraw(uint256) external; } contract BakerySwapRouter is IBakerySwapRouter { using SafeMath for uint256; address public immutable override factory; address public immutable override WBNB; modifier ensure(uint256 deadline) { require(deadline >= block.timestamp, 'BakerySwapRouter: EXPIRED'); _; } constructor(address _factory, address _WBNB) public { factory = _factory; WBNB = _WBNB; } receive() external payable { assert(msg.sender == WBNB); // only accept BNB via fallback from the WBNB 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 (IBakerySwapFactory(factory).getPair(tokenA, tokenB) == address(0)) { IBakerySwapFactory(factory).createPair(tokenA, tokenB); } (uint256 reserveA, uint256 reserveB) = BakerySwapLibrary.getReserves(factory, tokenA, tokenB); if (reserveA == 0 && reserveB == 0) { (amountA, amountB) = (amountADesired, amountBDesired); } else { uint256 amountBOptimal = BakerySwapLibrary.quote(amountADesired, reserveA, reserveB); if (amountBOptimal <= amountBDesired) { require(amountBOptimal >= amountBMin, 'BakerySwapRouter: INSUFFICIENT_B_AMOUNT'); (amountA, amountB) = (amountADesired, amountBOptimal); } else { uint256 amountAOptimal = BakerySwapLibrary.quote(amountBDesired, reserveB, reserveA); assert(amountAOptimal <= amountADesired); require(amountAOptimal >= amountAMin, 'BakerySwapRouter: 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 override ensure(deadline) returns ( uint256 amountA, uint256 amountB, uint256 liquidity ) { (amountA, amountB) = _addLiquidity(tokenA, tokenB, amountADesired, amountBDesired, amountAMin, amountBMin); address pair = BakerySwapLibrary.pairFor(factory, tokenA, tokenB); TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA); TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB); liquidity = IBakerySwapPair(pair).mint(to); } function addLiquidityBNB( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountBNBMin, address to, uint256 deadline ) external virtual override payable ensure(deadline) returns ( uint256 amountToken, uint256 amountBNB, uint256 liquidity ) { (amountToken, amountBNB) = _addLiquidity( token, WBNB, amountTokenDesired, msg.value, amountTokenMin, amountBNBMin ); address pair = BakerySwapLibrary.pairFor(factory, token, WBNB); TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken); IWBNB(WBNB).deposit{value: amountBNB}(); assert(IWBNB(WBNB).transfer(pair, amountBNB)); liquidity = IBakerySwapPair(pair).mint(to); // refund dust bnb, if any if (msg.value > amountBNB) TransferHelper.safeTransferBNB(msg.sender, msg.value - amountBNB); } // **** REMOVE LIQUIDITY **** function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) public virtual override ensure(deadline) returns (uint256 amountA, uint256 amountB) { address pair = BakerySwapLibrary.pairFor(factory, tokenA, tokenB); IBakerySwapPair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair (uint256 amount0, uint256 amount1) = IBakerySwapPair(pair).burn(to); (address token0, ) = BakerySwapLibrary.sortTokens(tokenA, tokenB); (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0); require(amountA >= amountAMin, 'BakerySwapRouter: INSUFFICIENT_A_AMOUNT'); require(amountB >= amountBMin, 'BakerySwapRouter: INSUFFICIENT_B_AMOUNT'); } function removeLiquidityBNB( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountBNBMin, address to, uint256 deadline ) public virtual override ensure(deadline) returns (uint256 amountToken, uint256 amountBNB) { (amountToken, amountBNB) = removeLiquidity( token, WBNB, liquidity, amountTokenMin, amountBNBMin, address(this), deadline ); TransferHelper.safeTransfer(token, to, amountToken); IWBNB(WBNB).withdraw(amountBNB); TransferHelper.safeTransferBNB(to, amountBNB); } 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 override returns (uint256 amountA, uint256 amountB) { address pair = BakerySwapLibrary.pairFor(factory, tokenA, tokenB); uint256 value = approveMax ? uint256(-1) : liquidity; IBakerySwapPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s); (amountA, amountB) = removeLiquidity(tokenA, tokenB, liquidity, amountAMin, amountBMin, to, deadline); } function removeLiquidityBNBWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountBNBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external virtual override returns (uint256 amountToken, uint256 amountBNB) { address pair = BakerySwapLibrary.pairFor(factory, token, WBNB); uint256 value = approveMax ? uint256(-1) : liquidity; IBakerySwapPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s); (amountToken, amountBNB) = removeLiquidityBNB(token, liquidity, amountTokenMin, amountBNBMin, to, deadline); } // **** REMOVE LIQUIDITY (supporting fee-on-transfer tokens) **** function removeLiquidityBNBSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountBNBMin, address to, uint256 deadline ) public virtual override ensure(deadline) returns (uint256 amountBNB) { (, amountBNB) = removeLiquidity(token, WBNB, liquidity, amountTokenMin, amountBNBMin, address(this), deadline); TransferHelper.safeTransfer(token, to, IBEP20(token).balanceOf(address(this))); IWBNB(WBNB).withdraw(amountBNB); TransferHelper.safeTransferBNB(to, amountBNB); } function removeLiquidityBNBWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountBNBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external virtual override returns (uint256 amountBNB) { address pair = BakerySwapLibrary.pairFor(factory, token, WBNB); uint256 value = approveMax ? uint256(-1) : liquidity; IBakerySwapPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s); amountBNB = removeLiquidityBNBSupportingFeeOnTransferTokens( token, liquidity, amountTokenMin, amountBNBMin, 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 ) internal virtual { for (uint256 i; i < path.length - 1; i++) { (address input, address output) = (path[i], path[i + 1]); (address token0, ) = BakerySwapLibrary.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 ? BakerySwapLibrary.pairFor(factory, output, path[i + 2]) : _to; IBakerySwapPair(BakerySwapLibrary.pairFor(factory, input, output)).swap(amount0Out, amount1Out, to); } } function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external virtual override ensure(deadline) returns (uint256[] memory amounts) { amounts = BakerySwapLibrary.getAmountsOut(factory, amountIn, path); require(amounts[amounts.length - 1] >= amountOutMin, 'BakerySwapRouter: INSUFFICIENT_OUTPUT_AMOUNT'); TransferHelper.safeTransferFrom( path[0], msg.sender, BakerySwapLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, to); } function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external virtual override ensure(deadline) returns (uint256[] memory amounts) { amounts = BakerySwapLibrary.getAmountsIn(factory, amountOut, path); require(amounts[0] <= amountInMax, 'BakerySwapRouter: EXCESSIVE_INPUT_AMOUNT'); TransferHelper.safeTransferFrom( path[0], msg.sender, BakerySwapLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, to); } function swapExactBNBForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external virtual override payable ensure(deadline) returns (uint256[] memory amounts) { require(path[0] == WBNB, 'BakerySwapRouter: INVALID_PATH'); amounts = BakerySwapLibrary.getAmountsOut(factory, msg.value, path); require(amounts[amounts.length - 1] >= amountOutMin, 'BakerySwapRouter: INSUFFICIENT_OUTPUT_AMOUNT'); IWBNB(WBNB).deposit{value: amounts[0]}(); assert(IWBNB(WBNB).transfer(BakerySwapLibrary.pairFor(factory, path[0], path[1]), amounts[0])); _swap(amounts, path, to); } function swapTokensForExactBNB( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external virtual override ensure(deadline) returns (uint256[] memory amounts) { require(path[path.length - 1] == WBNB, 'BakerySwapRouter: INVALID_PATH'); amounts = BakerySwapLibrary.getAmountsIn(factory, amountOut, path); require(amounts[0] <= amountInMax, 'BakerySwapRouter: EXCESSIVE_INPUT_AMOUNT'); TransferHelper.safeTransferFrom( path[0], msg.sender, BakerySwapLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, address(this)); IWBNB(WBNB).withdraw(amounts[amounts.length - 1]); TransferHelper.safeTransferBNB(to, amounts[amounts.length - 1]); } function swapExactTokensForBNB( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external virtual override ensure(deadline) returns (uint256[] memory amounts) { require(path[path.length - 1] == WBNB, 'BakerySwapRouter: INVALID_PATH'); amounts = BakerySwapLibrary.getAmountsOut(factory, amountIn, path); require(amounts[amounts.length - 1] >= amountOutMin, 'BakerySwapRouter: INSUFFICIENT_OUTPUT_AMOUNT'); TransferHelper.safeTransferFrom( path[0], msg.sender, BakerySwapLibrary.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, address(this)); IWBNB(WBNB).withdraw(amounts[amounts.length - 1]); TransferHelper.safeTransferBNB(to, amounts[amounts.length - 1]); } function swapBNBForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external virtual override payable ensure(deadline) returns (uint256[] memory amounts) { require(path[0] == WBNB, 'BakerySwapRouter: INVALID_PATH'); amounts = BakerySwapLibrary.getAmountsIn(factory, amountOut, path); require(amounts[0] <= msg.value, 'BakerySwapRouter: EXCESSIVE_INPUT_AMOUNT'); IWBNB(WBNB).deposit{value: amounts[0]}(); assert(IWBNB(WBNB).transfer(BakerySwapLibrary.pairFor(factory, path[0], path[1]), amounts[0])); _swap(amounts, path, to); // refund dust bnb, if any if (msg.value > amounts[0]) TransferHelper.safeTransferBNB(msg.sender, msg.value - amounts[0]); } // **** SWAP (supporting fee-on-transfer tokens) **** // requires the initial amount to have already been sent to the first pair function _swapSupportingFeeOnTransferTokens(address[] memory path, address _to) internal virtual { for (uint256 i; i < path.length - 1; i++) { (address input, address output) = (path[i], path[i + 1]); (address token0, ) = BakerySwapLibrary.sortTokens(input, output); IBakerySwapPair pair = IBakerySwapPair(BakerySwapLibrary.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); amountInput = IBEP20(input).balanceOf(address(pair)).sub(reserveInput); amountOutput = BakerySwapLibrary.getAmountOut(amountInput, reserveInput, reserveOutput); } (uint256 amount0Out, uint256 amount1Out) = input == token0 ? (uint256(0), amountOutput) : (amountOutput, uint256(0)); address to = i < path.length - 2 ? BakerySwapLibrary.pairFor(factory, output, path[i + 2]) : _to; pair.swap(amount0Out, amount1Out, to); } } function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external virtual override ensure(deadline) { TransferHelper.safeTransferFrom( path[0], msg.sender, BakerySwapLibrary.pairFor(factory, path[0], path[1]), amountIn ); uint256 balanceBefore = IBEP20(path[path.length - 1]).balanceOf(to); _swapSupportingFeeOnTransferTokens(path, to); require( IBEP20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin, 'BakerySwapRouter: INSUFFICIENT_OUTPUT_AMOUNT' ); } function swapExactBNBForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external virtual override payable ensure(deadline) { require(path[0] == WBNB, 'BakerySwapRouter: INVALID_PATH'); uint256 amountIn = msg.value; IWBNB(WBNB).deposit{value: amountIn}(); assert(IWBNB(WBNB).transfer(BakerySwapLibrary.pairFor(factory, path[0], path[1]), amountIn)); uint256 balanceBefore = IBEP20(path[path.length - 1]).balanceOf(to); _swapSupportingFeeOnTransferTokens(path, to); require( IBEP20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin, 'BakerySwapRouter: INSUFFICIENT_OUTPUT_AMOUNT' ); } function swapExactTokensForBNBSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external virtual override ensure(deadline) { require(path[path.length - 1] == WBNB, 'BakerySwapRouter: INVALID_PATH'); TransferHelper.safeTransferFrom( path[0], msg.sender, BakerySwapLibrary.pairFor(factory, path[0], path[1]), amountIn ); _swapSupportingFeeOnTransferTokens(path, address(this)); uint256 amountOut = IBEP20(WBNB).balanceOf(address(this)); require(amountOut >= amountOutMin, 'BakerySwapRouter: INSUFFICIENT_OUTPUT_AMOUNT'); IWBNB(WBNB).withdraw(amountOut); TransferHelper.safeTransferBNB(to, amountOut); } // **** LIBRARY FUNCTIONS **** function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) public virtual override pure returns (uint256 amountB) { return BakerySwapLibrary.quote(amountA, reserveA, reserveB); } function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) public virtual override pure returns (uint256 amountOut) { return BakerySwapLibrary.getAmountOut(amountIn, reserveIn, reserveOut); } function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) public virtual override pure returns (uint256 amountIn) { return BakerySwapLibrary.getAmountIn(amountOut, reserveIn, reserveOut); } function getAmountsOut(uint256 amountIn, address[] memory path) public virtual override view returns (uint256[] memory amounts) { return BakerySwapLibrary.getAmountsOut(factory, amountIn, path); } function getAmountsIn(uint256 amountOut, address[] memory path) public virtual override view returns (uint256[] memory amounts) { return BakerySwapLibrary.getAmountsIn(factory, amountOut, path); } }
[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WBNB","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"WBNB","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":"amountBNBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityBNB","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountBNB","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":"amountBNBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityBNB","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountBNB","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":"amountBNBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityBNBSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountBNB","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":"amountBNBMin","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":"removeLiquidityBNBWithPermit","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountBNB","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":"amountBNBMin","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":"removeLiquidityBNBWithPermitSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountBNB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityWithPermit","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapBNBForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactBNBForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactBNBForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForBNB","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForBNBSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactBNB","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040523480156200001157600080fd5b50604051620056d4380380620056d4833981810160405260408110156200003757600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c61554d62000187600039806101ac5280610f995280611388528061147052806114f15280611c1b5280611e295280611f1452806120b0528061226052806122f552806125e35280612679528061282c52806128c15280612aa05280612b755280612fea528061316e528061323e528061335a528061358d52806135c8528061387152806138c752806138fb528061397c525080610e005280610e395280610f77528061113c528061123a5280611530528061195f5280611d0d5280611ef2528061219652806123345280612519528061275f52806129005280612c825280612f145280612f3d528061344c52806136f652806138a552806142be5280614301528061443d528061461e5280614e155280614ef65280614f76525061554d6000f3fe60806040526004361061018f5760003560e01c80638dd95002116100d6578063d06ca61f1161007f578063e058848811610059578063e058848814610ca4578063e8e3370014610d04578063eaaed44214610d91576101d5565b8063d06ca61f14610aa3578063d46d2f8314610b5a578063d67b571e14610bff576101d5565b8063b7e65949116100b0578063b7e65949146109c4578063baa2abde14610a24578063c45a015514610a8e576101d5565b80638dd95002146108bd5780639cf68911146108fb578063ad615dec1461098e576101d5565b80635c11d795116101385780638332a963116101125780638332a9631461074f57806385f8c259146107e25780638803dbee14610818576101d5565b80635c11d795146105855780635d616c5b1461062a578063685a0a34146106cf576101d5565b806334a0772d1161016957806334a0772d146103cd57806338ed17391461044d57806350e27df3146104f2576101d5565b8063054d50d4146101da5780631f00ca74146102225780632195995c14610329576101d5565b366101d5573373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146101d357fe5b005b600080fd5b3480156101e657600080fd5b50610210600480360360608110156101fd57600080fd5b5080359060208101359060400135610de4565b60408051918252519081900360200190f35b34801561022e57600080fd5b506102d96004803603604081101561024557600080fd5b8135919081019060408101602082013564010000000081111561026757600080fd5b82018360208201111561027957600080fd5b8035906020019184602083028401116401000000008311171561029b57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610df9945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103155781810151838201526020016102fd565b505050509050019250505060405180910390f35b34801561033557600080fd5b506103b4600480360361016081101561034d57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135610e2f565b6040805192835260208301919091528051918290030190f35b3480156103d957600080fd5b506103b460048036036101408110156103f157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135610f6d565b34801561045957600080fd5b506102d9600480360360a081101561047057600080fd5b81359160208101359181019060608101604082013564010000000081111561049757600080fd5b8201836020820111156104a957600080fd5b803590602001918460208302840111640100000000831117156104cb57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356110c5565b6101d36004803603608081101561050857600080fd5b8135919081019060408101602082013564010000000081111561052a57600080fd5b82018360208201111561053c57600080fd5b8035906020019184602083028401116401000000008311171561055e57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135611316565b34801561059157600080fd5b506101d3600480360360a08110156105a857600080fd5b8135916020810135918101906060810160408201356401000000008111156105cf57600080fd5b8201836020820111156105e157600080fd5b8035906020019184602083028401116401000000008311171561060357600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356118bc565b34801561063657600080fd5b506102d9600480360360a081101561064d57600080fd5b81359160208101359181019060608101604082013564010000000081111561067457600080fd5b82018360208201111561068657600080fd5b803590602001918460208302840111640100000000831117156106a857600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135611b92565b3480156106db57600080fd5b5061021060048036036101408110156106f357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135611eea565b6102d96004803603608081101561076557600080fd5b8135919081019060408101602082013564010000000081111561078757600080fd5b82018360208201111561079957600080fd5b803590602001918460208302840111640100000000831117156107bb57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff813516906020013561203c565b3480156107ee57600080fd5b506102106004803603606081101561080557600080fd5b5080359060208101359060400135612495565b34801561082457600080fd5b506102d9600480360360a081101561083b57600080fd5b81359160208101359181019060608101604082013564010000000081111561086257600080fd5b82018360208201111561087457600080fd5b8035906020019184602083028401116401000000008311171561089657600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356124a2565b3480156108c957600080fd5b506108d26125e1565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6102d96004803603608081101561091157600080fd5b8135919081019060408101602082013564010000000081111561093357600080fd5b82018360208201111561094557600080fd5b8035906020019184602083028401116401000000008311171561096757600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612605565b34801561099a57600080fd5b50610210600480360360608110156109b157600080fd5b5080359060208101359060400135612a1b565b3480156109d057600080fd5b50610210600480360360c08110156109e757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a00135612a28565b348015610a3057600080fd5b506103b4600480360360e0811015610a4757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612c08565b348015610a9a57600080fd5b506108d2612f12565b348015610aaf57600080fd5b506102d960048036036040811015610ac657600080fd5b81359190810190604081016020820135640100000000811115610ae857600080fd5b820183602082011115610afa57600080fd5b80359060200191846020830284011164010000000083111715610b1c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612f36945050505050565b348015610b6657600080fd5b506101d3600480360360a0811015610b7d57600080fd5b813591602081013591810190606081016040820135640100000000811115610ba457600080fd5b820183602082011115610bb657600080fd5b80359060200191846020830284011164010000000083111715610bd857600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612f63565b348015610c0b57600080fd5b506102d9600480360360a0811015610c2257600080fd5b813591602081013591810190606081016040820135640100000000811115610c4957600080fd5b820183602082011115610c5b57600080fd5b80359060200191846020830284011164010000000083111715610c7d57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356132d1565b348015610cb057600080fd5b506103b4600480360360c0811015610cc757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a00135613514565b348015610d1057600080fd5b50610d736004803603610100811015610d2857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135613667565b60408051938452602084019290925282820152519081900360600190f35b610d73600480360360c0811015610da757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a001356137f6565b6000610df1848484613b22565b949350505050565b6060610e267f00000000000000000000000000000000000000000000000000000000000000008484613c46565b90505b92915050565b6000806000610e5f7f00000000000000000000000000000000000000000000000000000000000000008f8f613de9565b9050600087610e6e578c610e90565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c48101889052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b158015610f2c57600080fd5b505af1158015610f40573d6000803e3d6000fd5b50505050610f538f8f8f8f8f8f8f612c08565b809450819550505050509b509b9950505050505050505050565b6000806000610fbd7f00000000000000000000000000000000000000000000000000000000000000008e7f0000000000000000000000000000000000000000000000000000000000000000613de9565b9050600087610fcc578c610fee565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c48101889052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b15801561108a57600080fd5b505af115801561109e573d6000803e3d6000fd5b505050506110b08e8e8e8e8e8e613514565b909f909e509c50505050505050505050505050565b6060814281101561113757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f42616b65727953776170526f757465723a204558504952454400000000000000604482015290519081900360640190fd5b6111957f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613ed492505050565b915086826001845103815181106111a857fe5b60200260200101511015611207576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c81526020018061544f602c913960400191505060405180910390fd5b6112cc8686600081811061121757fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16336112b27f00000000000000000000000000000000000000000000000000000000000000008a8a600081811061126657fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168b8b600181811061129057fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16613de9565b856000815181106112bf57fe5b6020026020010151614025565b61130b828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506141f5915050565b509695505050505050565b804281101561138657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f42616b65727953776170526f757465723a204558504952454400000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16858560008181106113ca57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461146957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f42616b65727953776170526f757465723a20494e56414c49445f504154480000604482015290519081900360640190fd5b60003490507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156114d657600080fd5b505af11580156114ea573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6115867f00000000000000000000000000000000000000000000000000000000000000008989600081811061155c57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168a8a600181811061129057fe5b836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156115f057600080fd5b505af1158015611604573d6000803e3d6000fd5b505050506040513d602081101561161a57600080fd5b505161162257fe5b600086867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061165257fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156116eb57600080fd5b505afa1580156116ff573d6000803e3d6000fd5b505050506040513d602081101561171557600080fd5b505160408051602089810282810182019093528982529293506117579290918a918a9182918501908490808284376000920191909152508992506143e6915050565b8761185b8289897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061178a57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231896040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561182357600080fd5b505afa158015611837573d6000803e3d6000fd5b505050506040513d602081101561184d57600080fd5b50519063ffffffff61471016565b10156118b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c81526020018061544f602c913960400191505060405180910390fd5b5050505050505050565b804281101561192c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f42616b65727953776170526f757465723a204558504952454400000000000000604482015290519081900360640190fd5b6119918585600081811061193c57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff163361198b7f00000000000000000000000000000000000000000000000000000000000000008989600081811061155c57fe5b8a614025565b600085857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018181106119c157fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611a5a57600080fd5b505afa158015611a6e573d6000803e3d6000fd5b505050506040513d6020811015611a8457600080fd5b50516040805160208881028281018201909352888252929350611ac69290918991899182918501908490808284376000920191909152508892506143e6915050565b8661185b8288887fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611af957fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561182357600080fd5b60608142811015611c0457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f42616b65727953776170526f757465723a204558504952454400000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001686867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611c6957fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d0857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f42616b65727953776170526f757465723a20494e56414c49445f504154480000604482015290519081900360640190fd5b611d667f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613ed492505050565b91508682600184510381518110611d7957fe5b60200260200101511015611dd8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c81526020018061544f602c913960400191505060405180910390fd5b611de88686600081811061121757fe5b611e27828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506141f5915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d83600185510381518110611e7357fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611eb157600080fd5b505af1158015611ec5573d6000803e3d6000fd5b5050505061130b8483600185510381518110611edd57fe5b6020026020010151614752565b600080611f387f00000000000000000000000000000000000000000000000000000000000000008d7f0000000000000000000000000000000000000000000000000000000000000000613de9565b9050600086611f47578b611f69565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c48101879052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b15801561200557600080fd5b505af1158015612019573d6000803e3d6000fd5b5050505061202b8d8d8d8d8d8d612a28565b9d9c50505050505050505050505050565b606081428110156120ae57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f42616b65727953776170526f757465723a204558504952454400000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16868660008181106120f257fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461219157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f42616b65727953776170526f757465723a20494e56414c49445f504154480000604482015290519081900360640190fd5b6121ef7f000000000000000000000000000000000000000000000000000000000000000088888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613c4692505050565b915034826000815181106121ff57fe5b6020026020010151111561225e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806153406028913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0836000815181106122a757fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b1580156122da57600080fd5b505af11580156122ee573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6123607f00000000000000000000000000000000000000000000000000000000000000008989600081811061155c57fe5b8460008151811061236d57fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156123de57600080fd5b505af11580156123f2573d6000803e3d6000fd5b505050506040513d602081101561240857600080fd5b505161241057fe5b61244f828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506141f5915050565b8160008151811061245c57fe5b602002602001015134111561248b5761248b338360008151811061247c57fe5b60200260200101513403614752565b5095945050505050565b6000610df184848461488a565b6060814281101561251457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f42616b65727953776170526f757465723a204558504952454400000000000000604482015290519081900360640190fd5b6125727f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613c4692505050565b9150868260008151811061258257fe5b60200260200101511115611207576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806153406028913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6060814281101561267757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f42616b65727953776170526f757465723a204558504952454400000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16868660008181106126bb57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461275a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f42616b65727953776170526f757465723a20494e56414c49445f504154480000604482015290519081900360640190fd5b6127b87f000000000000000000000000000000000000000000000000000000000000000034888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613ed492505050565b915086826001845103815181106127cb57fe5b6020026020010151101561282a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c81526020018061544f602c913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db08360008151811061287357fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b1580156128a657600080fd5b505af11580156128ba573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61292c7f00000000000000000000000000000000000000000000000000000000000000008989600081811061155c57fe5b8460008151811061293957fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156129aa57600080fd5b505af11580156129be573d6000803e3d6000fd5b505050506040513d60208110156129d457600080fd5b50516129dc57fe5b61248b828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506141f5915050565b6000610df18484846149ae565b60008142811015612a9a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f42616b65727953776170526f757465723a204558504952454400000000000000604482015290519081900360640190fd5b612ac9887f00000000000000000000000000000000000000000000000000000000000000008989893089612c08565b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051919450612b7392508a91879173ffffffffffffffffffffffffffffffffffffffff8416916370a0823191602480820192602092909190829003018186803b158015612b4257600080fd5b505afa158015612b56573d6000803e3d6000fd5b505050506040513d6020811015612b6c57600080fd5b5051614a8e565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015612be657600080fd5b505af1158015612bfa573d6000803e3d6000fd5b5050505061130b8483614752565b6000808242811015612c7b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f42616b65727953776170526f757465723a204558504952454400000000000000604482015290519081900360640190fd5b6000612ca87f00000000000000000000000000000000000000000000000000000000000000008c8c613de9565b604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b158015612d2957600080fd5b505af1158015612d3d573d6000803e3d6000fd5b505050506040513d6020811015612d5357600080fd5b5050604080517f89afcb4400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b158015612dc657600080fd5b505af1158015612dda573d6000803e3d6000fd5b505050506040513d6040811015612df057600080fd5b50805160209091015190925090506000612e0a8e8e614c6b565b5090508073ffffffffffffffffffffffffffffffffffffffff168e73ffffffffffffffffffffffffffffffffffffffff1614612e47578183612e4a565b82825b90975095508a871015612ea8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806154286027913960400191505060405180910390fd5b89861015612f01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806154016027913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6060610e267f00000000000000000000000000000000000000000000000000000000000000008484613ed4565b8042811015612fd357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f42616b65727953776170526f757465723a204558504952454400000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001685857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061303857fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146130d757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f42616b65727953776170526f757465723a20494e56414c49445f504154480000604482015290519081900360640190fd5b6130e78585600081811061193c57fe5b6131258585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506143e6915050565b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905160009173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b1580156131b557600080fd5b505afa1580156131c9573d6000803e3d6000fd5b505050506040513d60208110156131df57600080fd5b505190508681101561323c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c81526020018061544f602c913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156132af57600080fd5b505af11580156132c3573d6000803e3d6000fd5b505050506118b28482614752565b6060814281101561334357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f42616b65727953776170526f757465723a204558504952454400000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001686867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018181106133a857fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461344757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f42616b65727953776170526f757465723a20494e56414c49445f504154480000604482015290519081900360640190fd5b6134a57f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613c4692505050565b915086826000815181106134b557fe5b60200260200101511115611dd8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806153406028913960400191505060405180910390fd5b600080824281101561358757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f42616b65727953776170526f757465723a204558504952454400000000000000604482015290519081900360640190fd5b6135b6897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a612c08565b90935091506135c6898685614a8e565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561363957600080fd5b505af115801561364d573d6000803e3d6000fd5b5050505061365b8583614752565b50965096945050505050565b600080600083428110156136dc57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f42616b65727953776170526f757465723a204558504952454400000000000000604482015290519081900360640190fd5b6136ea8c8c8c8c8c8c614dbe565b9094509250600061371c7f00000000000000000000000000000000000000000000000000000000000000008e8e613de9565b905061372a8d338388614025565b6137368c338387614025565b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1580156137b557600080fd5b505af11580156137c9573d6000803e3d6000fd5b505050506040513d60208110156137df57600080fd5b5051949d939c50939a509198505050505050505050565b6000806000834281101561386b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f42616b65727953776170526f757465723a204558504952454400000000000000604482015290519081900360640190fd5b6138998a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c614dbe565b909450925060006138eb7f00000000000000000000000000000000000000000000000000000000000000008c7f0000000000000000000000000000000000000000000000000000000000000000613de9565b90506138f98b338388614025565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b15801561396157600080fd5b505af1158015613975573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb82866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015613a2157600080fd5b505af1158015613a35573d6000803e3d6000fd5b505050506040513d6020811015613a4b57600080fd5b5051613a5357fe5b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b158015613ad257600080fd5b505af1158015613ae6573d6000803e3d6000fd5b505050506040513d6020811015613afc57600080fd5b5051925034841015613b1457613b1433853403614752565b505096509650969350505050565b6000808411613b7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c81526020018061538e602c913960400191505060405180910390fd5b600083118015613b8c5750600082115b613be1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806154ef6029913960400191505060405180910390fd5b6000613bf5856103e563ffffffff6150bf16565b90506000613c09828563ffffffff6150bf16565b90506000613c2f83613c23886103e863ffffffff6150bf16565b9063ffffffff61513216565b9050808281613c3a57fe5b04979650505050505050565b6060600282511015613cb957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f42616b657279537761704c6962726172793a20494e56414c49445f5041544800604482015290519081900360640190fd5b815167ffffffffffffffff81118015613cd157600080fd5b50604051908082528060200260200182016040528015613cfb578160200160208202803683370190505b5090508281600183510381518110613d0f57fe5b602090810291909101015281517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff015b8015613de157600080613d7c87866001860381518110613d5b57fe5b6020026020010151878681518110613d6f57fe5b60200260200101516151a6565b91509150613d9e848481518110613d8f57fe5b6020026020010151838361488a565b846001850381518110613dad57fe5b602090810291909101015250507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613d3f565b509392505050565b6000806000613df88585614c6b565b604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527fe2e87433120e32c4738a7d8f3271f3d872cbe16241d67537139158d90bac61d3609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b6060600282511015613f4757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f42616b657279537761704c6962726172793a20494e56414c49445f5041544800604482015290519081900360640190fd5b815167ffffffffffffffff81118015613f5f57600080fd5b50604051908082528060200260200182016040528015613f89578160200160208202803683370190505b5090508281600081518110613f9a57fe5b60200260200101818152505060005b6001835103811015613de157600080613fdf87868581518110613fc857fe5b6020026020010151878660010181518110613d6f57fe5b91509150614001848481518110613ff257fe5b60200260200101518383613b22565b84846001018151811061401057fe5b60209081029190910101525050600101613fa9565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017815292518251600094606094938a169392918291908083835b6020831061410357805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016140c6565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614165576040519150601f19603f3d011682016040523d82523d6000602084013e61416a565b606091505b5091509150818015614198575080511580614198575080806020019051602081101561419557600080fd5b50515b6141ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806154cb6024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156143e05760008084838151811061421357fe5b602002602001015185846001018151811061422a57fe5b60200260200101519150915060006142428383614c6b565b509050600087856001018151811061425657fe5b602002602001015190506000808373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161461429e578260006142a2565b6000835b91509150600060028a510388106142b957886142fa565b6142fa7f0000000000000000000000000000000000000000000000000000000000000000878c8b600201815181106142ed57fe5b6020026020010151613de9565b90506143277f00000000000000000000000000000000000000000000000000000000000000008888613de9565b73ffffffffffffffffffffffffffffffffffffffff16636d9a640a8484846040518463ffffffff1660e01b8152600401808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050600060405180830381600087803b1580156143b557600080fd5b505af11580156143c9573d6000803e3d6000fd5b5050600190990198506141f8975050505050505050565b50505050565b60005b600183510381101561470b5760008084838151811061440457fe5b602002602001015185846001018151811061441b57fe5b60200260200101519150915060006144338383614c6b565b50905060006144637f00000000000000000000000000000000000000000000000000000000000000008585613de9565b90506000806000808473ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156144b157600080fd5b505afa1580156144c5573d6000803e3d6000fd5b505050506040513d60608110156144db57600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905060008073ffffffffffffffffffffffffffffffffffffffff8a811690891614614525578284614528565b83835b915091506145ad828b73ffffffffffffffffffffffffffffffffffffffff166370a082318a6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561182357600080fd5b95506145ba868383613b22565b9450505050506000808573ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16146145fe57826000614602565b6000835b91509150600060028c51038a10614619578a61464d565b61464d7f0000000000000000000000000000000000000000000000000000000000000000898e8d600201815181106142ed57fe5b90508573ffffffffffffffffffffffffffffffffffffffff16636d9a640a8484846040518463ffffffff1660e01b8152600401808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050600060405180830381600087803b1580156146de57600080fd5b505af11580156146f2573d6000803e3d6000fd5b50506001909b019a506143e99950505050505050505050565b505050565b6000610e2683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061528e565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b602083106147c957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161478c565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461482b576040519150601f19603f3d011682016040523d82523d6000602084013e614830565b606091505b505090508061470b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061547b6023913960400191505060405180910390fd5b60008084116148e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d81526020018061549e602d913960400191505060405180910390fd5b6000831180156148f45750600082115b614949576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806154ef6029913960400191505060405180910390fd5b600061496d6103e8614961868863ffffffff6150bf16565b9063ffffffff6150bf16565b905060006149876103e5614961868963ffffffff61471016565b90506149a4600182848161499757fe5b049063ffffffff61513216565b9695505050505050565b6000808411614a08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806153ba6026913960400191505060405180910390fd5b600083118015614a185750600082115b614a6d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806154ef6029913960400191505060405180910390fd5b82614a7e858463ffffffff6150bf16565b81614a8557fe5b04949350505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000178152925182516000946060949389169392918291908083835b60208310614b6457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101614b27565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614bc6576040519150601f19603f3d011682016040523d82523d6000602084013e614bcb565b606091505b5091509150818015614bf9575080511580614bf95750808060200190516020811015614bf657600080fd5b50515b614c6457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415614cf3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806153686026913960400191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610614d2d578284614d30565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216614db757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f42616b657279537761704c6962726172793a205a45524f5f4144445245535300604482015290519081900360640190fd5b9250929050565b604080517fe6a4390500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b158015614e5e57600080fd5b505afa158015614e72573d6000803e3d6000fd5b505050506040513d6020811015614e8857600080fd5b505173ffffffffffffffffffffffffffffffffffffffff161415614f6e57604080517fc9c6539600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b158015614f4157600080fd5b505af1158015614f55573d6000803e3d6000fd5b505050506040513d6020811015614f6b57600080fd5b50505b600080614f9c7f00000000000000000000000000000000000000000000000000000000000000008b8b6151a6565b91509150816000148015614fae575080155b15614fbe578793508692506150b2565b6000614fcb8984846149ae565b9050878111615038578581101561502d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806154016027913960400191505060405180910390fd5b8894509250826150b0565b60006150458984866149ae565b90508981111561505157fe5b878110156150aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806154286027913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b6000826150ce57506000610e29565b828202828482816150db57fe5b0414610e26576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806153e06021913960400191505060405180910390fd5b600082820183811015610e2657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008060006151b58585614c6b565b5090506000806151c6888888613de9565b73ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561520b57600080fd5b505afa15801561521f573d6000803e3d6000fd5b505050506040513d606081101561523557600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905073ffffffffffffffffffffffffffffffffffffffff8781169084161461527c57808261527f565b81815b90999098509650505050505050565b60008184841115615337576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156152fc5781810151838201526020016152e4565b50505050905090810190601f1680156153295780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50505090039056fe42616b65727953776170526f757465723a204558434553534956455f494e5055545f414d4f554e5442616b657279537761704c6962726172793a204944454e544943414c5f41444452455353455342616b657279537761704c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e5442616b657279537761704c6962726172793a20494e53554646494349454e545f414d4f554e54536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7742616b65727953776170526f757465723a20494e53554646494349454e545f425f414d4f554e5442616b65727953776170526f757465723a20494e53554646494349454e545f415f414d4f554e5442616b65727953776170526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a20424e425f5452414e534645525f4641494c454442616b657279537761704c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c454442616b657279537761704c6962726172793a20494e53554646494349454e545f4c4951554944495459a2646970667358221220299e6ec863a05b34facb61387047c1629d5fac978f54568d39a4d31919f46fcb64736f6c6343000606003300000000000000000000000001bf7c66c6bd861915cdaae475042d3c4bae16a7000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000001bf7c66c6bd861915cdaae475042d3c4bae16a7000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000001bf7c66c6bd861915cdaae475042d3c4bae16a7
Arg [1] : 000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c
Deployed ByteCode Sourcemap
24821:19546:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25306:10;:18;25320:4;25306:18;;25299:26;;;;24821:19546;;12:1:-1;9;2:12;43303:259:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;43303:259:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;43303:259:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;44104:260;;5:9:-1;2:2;;;27:1;24;17:12;2:2;44104:260:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;44104:260:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;44104:260:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;44104:260:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;44104:260:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;44104:260:0;;-1:-1:-1;44104:260:0;;-1:-1:-1;;;;;44104:260: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;44104:260:0;;;;;;;;;;;;;;;;;30487:730;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30487:730:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;30487:730:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;31225:722;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31225:722:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;31225:722:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;34382:682::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34382:682:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;34382:682:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;34382:682:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34382:682:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;34382:682:0;;-1:-1:-1;34382:682:0;-1:-1:-1;34382:682:0;;;;;;;;;:::i;41337:815::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;41337:815:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;41337:815:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;41337:815:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;41337:815:0;;-1:-1:-1;41337:815:0;-1:-1:-1;41337:815:0;;;;;;;;;:::i;40562:767::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;40562:767:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;40562:767:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;40562:767:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;40562:767:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;40562:767:0;;-1:-1:-1;40562:767:0;-1:-1:-1;40562:767:0;;;;;;;;;:::i;37335:907::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;37335:907:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;37335:907:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;37335:907:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;37335:907:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;37335:907:0;;-1:-1:-1;37335:907:0;-1:-1:-1;37335:907:0;;;;;;;;;:::i;32647:833::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32647:833:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;32647:833:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;38250:807::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;38250:807:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;38250:807:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;38250:807:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;38250:807:0;;-1:-1:-1;38250:807:0;-1:-1:-1;38250:807:0;;;;;;;;;:::i;43570:258::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;43570:258:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;43570:258:0;;;;;;;;;;;;:::i;35072:660::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35072:660:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;35072:660:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;35072:660:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;35072:660:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;35072:660:0;;-1:-1:-1;35072:660:0;-1:-1:-1;35072:660:0;;;;;;;;;:::i;24956:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24956:38:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35740:694;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;35740:694:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;35740:694:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;35740:694:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;35740:694:0;;-1:-1:-1;35740:694:0;-1:-1:-1;35740:694:0;;;;;;;;;:::i;43060:235::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;43060:235:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;43060:235:0;;;;;;;;;;;;:::i;32026:613::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32026:613:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;32026:613:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28884:896::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28884:896:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;28884:896:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;24908:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24908:41:0;;;:::i;43836:260::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;43836:260:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;43836:260:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;43836:260:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;43836:260:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;43836:260:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;43836:260:0;;-1:-1:-1;43836:260:0;;-1:-1:-1;;;;;43836:260:0:i;42160:856::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;42160:856:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;42160:856:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;42160:856:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;42160:856:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;42160:856:0;;-1:-1:-1;42160:856:0;-1:-1:-1;42160:856:0;;;;;;;;;:::i;36442:885::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;36442:885:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;36442:885:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;36442:885:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;36442:885:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;36442:885:0;;-1:-1:-1;36442:885:0;-1:-1:-1;36442:885:0;;;;;;;;;:::i;29788:691::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29788:691:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;29788:691:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;26863:864::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26863:864:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;26863:864:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;27735:1106;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;27735:1106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;43303:259::-;43454:17;43491:63;43522:8;43532:9;43543:10;43491:30;:63::i;:::-;43484:70;43303:259;-1:-1:-1;;;;43303:259:0:o;44104:260::-;44251:24;44300:56;44331:7;44340:9;44351:4;44300:30;:56::i;:::-;44293:63;;44104:260;;;;;:::o;30487:730::-;30832:15;30849;30877:12;30892:50;30918:7;30927:6;30935;30892:25;:50::i;:::-;30877:65;;30953:13;30969:10;:36;;30996:9;30969:36;;;30990:2;30969:36;31016:81;;;;;;31045:10;31016:81;;;;31065:4;31016:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30953:52;;-1:-1:-1;31016:28:0;;;;;;:81;;;;;-1:-1:-1;;31016:81:0;;;;;;;;-1:-1:-1;31016:28:0;:81;;;2:2:-1;;;;27:1;24;17:12;2:2;31016:81:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31016:81:0;;;;31129:80;31145:6;31153;31161:9;31172:10;31184;31196:2;31200:8;31129:15;:80::i;:::-;31108:101;;;;;;;;30487:730;;;;;;;;;;;;;;;;:::o;31225:722::-;31553:19;31574:17;31604:12;31619:47;31645:7;31654:5;31661:4;31619:25;:47::i;:::-;31604:62;;31677:13;31693:10;:36;;31720:9;31693:36;;;31714:2;31693:36;31740:81;;;;;;31769:10;31740:81;;;;31789:4;31740:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31677:52;;-1:-1:-1;31740:28:0;;;;;;:81;;;;;-1:-1:-1;;31740:81:0;;;;;;;;-1:-1:-1;31740:28:0;:81;;;2:2:-1;;;;27:1;24;17:12;2:2;31740:81:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31740:81:0;;;;31859:80;31878:5;31885:9;31896:14;31912:12;31926:2;31930:8;31859:18;:80::i;:::-;31832:107;;;;-1:-1:-1;31225:722:0;-1:-1:-1;;;;;;;;;;;;;31225:722:0:o;34382:682::-;34615:24;34596:8;25068:15;25056:8;:27;;25048:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34662:56:::1;34694:7;34703:8;34713:4;;34662:56;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;34662:31:0::1;::::0;-1:-1:-1;;;34662:56:0:i:1;:::-;34652:66;;34768:12;34737:7;34762:1;34745:7;:14;:18;34737:27;;;;;;;;;;;;;;:43;;34729:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34840:181;34886:4;;34891:1;34886:7;;;;;;;;;;;;;;;34908:10;34933:52;34959:7;34968:4;;34973:1;34968:7;;;;;;;;;;;;;;;34977:4;;34982:1;34977:7;;;;;;;;;;;;;;;34933:25;:52::i;:::-;35000:7;35008:1;35000:10;;;;;;;;;;;;;;34840:31;:181::i;:::-;35032:24;35038:7;35047:4;;35032:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;35053:2:0;;-1:-1:-1;35032:5:0::1;::::0;-1:-1:-1;;35032:24:0:i:1;:::-;34382:682:::0;;;;;;;;;:::o;41337:815::-;41558:8;25068:15;25056:8;:27;;25048:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41598:4:::1;41587:15;;:4;;41592:1;41587:7;;;;;;;;;;;;;;;:15;;;41579:58;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;41648:16;41667:9;41648:28;;41693:4;41687:19;;;41714:8;41687:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;41687:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;41687:38:0;;;;;41749:4;41743:20;;;41764:52;41790:7;41799:4;;41804:1;41799:7;;;;;;;;;;;;;;;41808:4;;41813:1;41808:7;;;;;;41764:52;41818:8;41743:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;41743:84:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;41743:84:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;41743:84:0;41736:92:::1;;;;41839:21;41870:4:::0;;41875:15;;;41870:21;;::::1;;;;;;;;;;;;;41863:39;;;41903:2;41863:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;41863:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;41863:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;41863:43:0;41917:44:::1;::::0;;41863:43:::1;41917:44:::0;;::::1;::::0;;;;;;;;;;;41863:43;;-1:-1:-1;41917:44:0::1;::::0;;;41952:4;;;;;;41917:44;::::1;::::0;41952:4;;41917:44;41952:4;41917:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;41958:2:0;;-1:-1:-1;41917:34:0::1;::::0;-1:-1:-1;;41917:44:0:i:1;:::-;42060:12:::0;41994:62:::1;42042:13:::0;42001:4;;42006:15;;;42001:21;;::::1;;;;;;;;;;;;;41994:39;;;42034:2;41994:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;41994:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;41994:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;41994:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;41972:172;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25124:1;;41337:815:::0;;;;;;:::o;40562:767::-;40805:8;25068:15;25056:8;:27;;25048:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40826:179:::1;40872:4;;40877:1;40872:7;;;;;;;;;;;;;;;40894:10;40919:52;40945:7;40954:4;;40959:1;40954:7;;;;;;40919:52;40986:8;40826:31;:179::i;:::-;41016:21;41047:4:::0;;41052:15;;;41047:21;;::::1;;;;;;;;;;;;;41040:39;;;41080:2;41040:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;41040:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;41040:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;41040:43:0;41094:44:::1;::::0;;41040:43:::1;41094:44:::0;;::::1;::::0;;;;;;;;;;;41040:43;;-1:-1:-1;41094:44:0::1;::::0;;;41129:4;;;;;;41094:44;::::1;::::0;41129:4;;41094:44;41129:4;41094:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;41135:2:0;;-1:-1:-1;41094:34:0::1;::::0;-1:-1:-1;;41094:44:0:i:1;:::-;41237:12:::0;41171:62:::1;41219:13:::0;41178:4;;41183:15;;;41178:21;;::::1;;;;;;;;;;;;;41171:39;;;41211:2;41171:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;37335:907:0::0;37565:24;37546:8;25068:15;25056:8;:27;;25048:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37610:29:::1;37635:4;37610:29;:4:::0;;37615:15;;;37610:21;;::::1;;;;;;;;;;;;;:29;;;37602:72;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;37695:56;37727:7;37736:8;37746:4;;37695:56;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;37695:31:0::1;::::0;-1:-1:-1;;;37695:56:0:i:1;:::-;37685:66;;37801:12;37770:7;37795:1;37778:7;:14;:18;37770:27;;;;;;;;;;;;;;:43;;37762:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37873:181;37919:4;;37924:1;37919:7;;;;;;37873:181;38065:35;38071:7;38080:4;;38065:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;38094:4:0::1;::::0;-1:-1:-1;38065:5:0::1;::::0;-1:-1:-1;;38065:35:0:i:1;:::-;38117:4;38111:20;;;38132:7;38157:1;38140:7;:14;:18;38132:27;;;;;;;;;;;;;;38111:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;38111:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;38111:49:0;;;;38171:63;38202:2;38206:7;38231:1;38214:7;:14;:18;38206:27;;;;;;;;;;;;;;38171:30;:63::i;32647:833::-:0;33004:17;33034:12;33049:47;33075:7;33084:5;33091:4;33049:25;:47::i;:::-;33034:62;;33107:13;33123:10;:36;;33150:9;33123:36;;;33144:2;33123:36;33170:81;;;;;;33199:10;33170:81;;;;33219:4;33170:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33107:52;;-1:-1:-1;33170:28:0;;;;;;:81;;;;;-1:-1:-1;;33170:81:0;;;;;;;;-1:-1:-1;33170:28:0;:81;;;2:2:-1;;;;27:1;24;17:12;2:2;33170:81:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33170:81:0;;;;33274:198;33336:5;33356:9;33380:14;33409:12;33436:2;33453:8;33274:47;:198::i;:::-;33262:210;32647:833;-1:-1:-1;;;;;;;;;;;;;32647:833:0:o;38250:807::-;38458:24;38439:8;25068:15;25056:8;:27;;25048:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38514:4:::1;38503:15;;:4;;38508:1;38503:7;;;;;;;;;;;;;;;:15;;;38495:58;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;38574:56;38605:7;38614:9;38625:4;;38574:56;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;38574:30:0::1;::::0;-1:-1:-1;;;38574:56:0:i:1;:::-;38564:66;;38663:9;38649:7;38657:1;38649:10;;;;;;;;;;;;;;:23;;38641:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38734:4;38728:19;;;38755:7;38763:1;38755:10;;;;;;;;;;;;;;38728:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;38728:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;38728:40:0;;;;;38792:4;38786:20;;;38807:52;38833:7;38842:4;;38847:1;38842:7;;;;;;38807:52;38861:7;38869:1;38861:10;;;;;;;;;;;;;;38786:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;38786:86:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;38786:86:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;38786:86:0;38779:94:::1;;;;38884:24;38890:7;38899:4;;38884:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;38905:2:0;;-1:-1:-1;38884:5:0::1;::::0;-1:-1:-1;;38884:24:0:i:1;:::-;38971:7;38979:1;38971:10;;;;;;;;;;;;;;38959:9;:22;38955:94;;;38983:66;39014:10;39038:7;39046:1;39038:10;;;;;;;;;;;;;;39026:9;:22;38983:30;:66::i;:::-;38250:807:::0;;;;;;;;:::o;43570:258::-;43721:16;43757:63;43787:9;43798;43809:10;43757:29;:63::i;35072:660::-;35305:24;35286:8;25068:15;25056:8;:27;;25048:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35352:56:::1;35383:7;35392:9;35403:4;;35352:56;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;35352:30:0::1;::::0;-1:-1:-1;;;35352:56:0:i:1;:::-;35342:66;;35441:11;35427:7;35435:1;35427:10;;;;;;;;;;;;;;:25;;35419:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24956:38:::0;;;:::o;35740:694::-;35951:24;35932:8;25068:15;25056:8;:27;;25048:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36007:4:::1;35996:15;;:4;;36001:1;35996:7;;;;;;;;;;;;;;;:15;;;35988:58;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;36067:57;36099:7;36108:9;36119:4;;36067:57;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;36067:31:0::1;::::0;-1:-1:-1;;;36067:57:0:i:1;:::-;36057:67;;36174:12;36143:7;36168:1;36151:7;:14;:18;36143:27;;;;;;;;;;;;;;:43;;36135:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36252:4;36246:19;;;36273:7;36281:1;36273:10;;;;;;;;;;;;;;36246:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;36246:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;36246:40:0;;;;;36310:4;36304:20;;;36325:52;36351:7;36360:4;;36365:1;36360:7;;;;;;36325:52;36379:7;36387:1;36379:10;;;;;;;;;;;;;;36304:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;36304:86:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;36304:86:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;36304:86:0;36297:94:::1;;;;36402:24;36408:7;36417:4;;36402:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;36423:2:0;;-1:-1:-1;36402:5:0::1;::::0;-1:-1:-1;;36402:24:0:i:1;43060:235::-:0;43200:15;43235:52;43259:7;43268:8;43278;43235:23;:52::i;32026:613::-;32304:17;32285:8;25068:15;25056:8;:27;;25048:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32350:94:::1;32366:5;32373:4;32379:9;32390:14;32406:12;32428:4;32435:8;32350:15;:94::i;:::-;32494:38;::::0;;;;;32526:4:::1;32494:38;::::0;::::1;::::0;;;32334:110;;-1:-1:-1;32455:78:0::1;::::0;-1:-1:-1;32483:5:0;;32490:2;;32494:23:::1;::::0;::::1;::::0;::::1;::::0;:38;;;;;::::1;::::0;;;;;;;;;:23;:38;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;32494:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32494:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32494:38:0;32455:27:::1;:78::i;:::-;32550:4;32544:20;;;32565:9;32544:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32544:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32544:31:0;;;;32586:45;32617:2;32621:9;32586:30;:45::i;28884:896::-:0;29150:15;29167;29131:8;25068:15;25056:8;:27;;25048:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29195:12:::1;29210:50;29236:7;29245:6;29253;29210:25;:50::i;:::-;29271:63;::::0;;;;;29306:10:::1;29271:63;::::0;::::1;::::0;:34:::1;::::0;::::1;:63:::0;;;;;;;;;;;;;;29195:65;;-1:-1:-1;29271:34:0;;::::1;::::0;:63;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;29271:34:0;:63;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;29271:63:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29271:63:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;29408:30:0::1;::::0;;;;;:26:::1;:30:::0;;::::1;;::::0;::::1;::::0;;;29372:15:::1;::::0;;;29408:26;;::::1;::::0;::::1;::::0;:30;;;;;;;;;;;29372:15;29408:26;:30;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;29408:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29408:30:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;29408:30:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;29408:30:0;-1:-1:-1;29450:14:0::1;29470:44;29499:6:::0;29507;29470:28:::1;:44::i;:::-;29449:65;;;29556:6;29546:16;;:6;:16;;;:58;;29587:7;29596;29546:58;;;29566:7;29575;29546:58;29525:79:::0;;-1:-1:-1;29525:79:0;-1:-1:-1;29623:21:0;;::::1;;29615:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29718:10;29707:7;:21;;29699:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25124:1;;;;28884:896:::0;;;;;;;;;;;:::o;24908:41::-;;;:::o;43836:260::-;43983:24;44032:56;44064:7;44073:8;44083:4;44032:31;:56::i;42160:856::-;42400:8;25068:15;25056:8;:27;;25048:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42429:29:::1;42454:4;42429:29;:4:::0;;42434:15;;;42429:21;;::::1;;;;;;;;;;;;;:29;;;42421:72;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;42504:179;42550:4;;42555:1;42550:7;;;;;;42504:179;42694:55;42729:4;;42694:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;42743:4:0::1;::::0;-1:-1:-1;42694:34:0::1;::::0;-1:-1:-1;;42694:55:0:i:1;:::-;42780:37;::::0;;;;;42811:4:::1;42780:37;::::0;::::1;::::0;;;42760:17:::1;::::0;42780:22:::1;42787:4;42780:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;42780:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;42780:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;42780:37:0;;-1:-1:-1;42836:25:0;;::::1;;42828:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42927:4;42921:20;;;42942:9;42921:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;42921:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;42921:31:0;;;;42963:45;42994:2;42998:9;42963:30;:45::i;36442:885::-:0;36672:24;36653:8;25068:15;25056:8;:27;;25048:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36717:29:::1;36742:4;36717:29;:4:::0;;36722:15;;;36717:21;;::::1;;;;;;;;;;;;;:29;;;36709:72;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;36802:56;36833:7;36842:9;36853:4;;36802:56;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;36802:30:0::1;::::0;-1:-1:-1;;;36802:56:0:i:1;:::-;36792:66;;36891:11;36877:7;36885:1;36877:10;;;;;;;;;;;;;;:25;;36869:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29788:691:::0;30037:19;30058:17;30018:8;25068:15;25056:8;:27;;25048:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30115:196:::1;30145:5;30165:4;30184:9;30208:14;30237:12;30272:4;30292:8;30115:15;:196::i;:::-;30088:223:::0;;-1:-1:-1;30088:223:0;-1:-1:-1;30322:51:0::1;30350:5:::0;30357:2;30088:223;30322:27:::1;:51::i;:::-;30390:4;30384:20;;;30405:9;30384:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30384:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30384:31:0;;;;30426:45;30457:2;30461:9;30426:30;:45::i;:::-;29788:691:::0;;;;;;;;;;:::o;26863:864::-;27225:15;27255;27285:17;27183:8;25068:15;25056:8;:27;;25048:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27351:85:::1;27365:6;27373;27381:14;27397;27413:10;27425;27351:13;:85::i;:::-;27330:106:::0;;-1:-1:-1;27330:106:0;-1:-1:-1;27447:12:0::1;27462:50;27488:7;27497:6:::0;27505;27462:25:::1;:50::i;:::-;27447:65;;27523:66;27555:6;27563:10;27575:4;27581:7;27523:31;:66::i;:::-;27600;27632:6;27640:10;27652:4;27658:7;27600:31;:66::i;:::-;27705:4;27689:26;;;27716:2;27689:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27689:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27689:30:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;27689:30:0;26863:864;;;;-1:-1:-1;27689:30:0;;-1:-1:-1;26863:864:0;;-1:-1:-1;;;;;;;;;26863:864:0:o;27735:1106::-;28068:19;28102:17;28134;28026:8;25068:15;25056:8;:27;;25048:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28206:176:::1;28234:5;28254:4;28273:18;28306:9;28330:14;28359:12;28206:13;:176::i;:::-;28179:203:::0;;-1:-1:-1;28179:203:0;-1:-1:-1;28393:12:0::1;28408:47;28434:7;28443:5:::0;28450:4:::1;28408:25;:47::i;:::-;28393:62;;28466:69;28498:5;28505:10;28517:4;28523:11;28466:31;:69::i;:::-;28552:4;28546:19;;;28573:9;28546:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28546:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28546:39:0;;;;;28609:4;28603:20;;;28624:4;28630:9;28603:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28603:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28603:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;28603:37:0;28596:45:::1;;;;28680:4;28664:26;;;28691:2;28664:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28664:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28664:30:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;28664:30:0;;-1:-1:-1;28745:9:0::1;:21:::0;-1:-1:-1;28741:92:0::1;;;28768:65;28799:10;28823:9;28811;:21;28768:30;:65::i;:::-;25124:1;27735:1106:::0;;;;;;;;;;;:::o;10231:574::-;10367:17;10416:1;10405:8;:12;10397:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10497:1;10485:9;:13;:31;;;;;10515:1;10502:10;:14;10485:31;10477:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10573:23;10599:17;:8;10612:3;10599:17;:12;:17;:::i;:::-;10573:43;-1:-1:-1;10627:17:0;10647:31;10573:43;10667:10;10647:31;:19;:31;:::i;:::-;10627:51;-1:-1:-1;10689:19:0;10711:40;10735:15;10711:19;:9;10725:4;10711:19;:13;:19;:::i;:::-;:23;:40;:23;:40;:::i;:::-;10689:62;;10786:11;10774:9;:23;;;;;;;10231:574;-1:-1:-1;;;;;;;10231:574:0:o;12179:585::-;12317:24;12377:1;12362:4;:11;:16;;12354:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12449:4;:11;12435:26;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12435:26:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;12435:26:0;;12425:36;;12502:9;12472:7;12497:1;12480:7;:14;:18;12472:27;;;;;;;;;;;;;;;;;:39;12539:11;;:15;;12522:235;12556:5;;12522:235;;12584:17;12603:18;12625:42;12637:7;12646:4;12655:1;12651;:5;12646:11;;;;;;;;;;;;;;12659:4;12664:1;12659:7;;;;;;;;;;;;;;12625:11;:42::i;:::-;12583:84;;;;12699:46;12711:7;12719:1;12711:10;;;;;;;;;;;;;;12723:9;12734:10;12699:11;:46::i;:::-;12682:7;12694:1;12690;:5;12682:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;12563:3:0;;12522:235;;;;12179:585;;;;;:::o;8478:651::-;8601:12;8627:14;8643;8661:26;8672:6;8680;8661:10;:26::i;:::-;8906:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;8906:32:0;;;;;8896:43;;;;;;8785:291;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;8785:291:0;;;;;;;8753:342;;;;;;;;;8478:651;-1:-1:-1;;;;;8478:651:0:o;11534:564::-;11672:24;11732:1;11717:4;:11;:16;;11709:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11804:4;:11;11790:26;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11790:26:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;11790:26:0;;11780:36;;11840:8;11827:7;11835:1;11827:10;;;;;;;;;;;;;:21;;;;;11864:9;11859:232;11893:1;11879:4;:11;:15;11875:1;:19;11859:232;;;11917:17;11936:18;11958:42;11970:7;11979:4;11984:1;11979:7;;;;;;;;;;;;;;11988:4;11993:1;11997;11993:5;11988:11;;;;;;;11958:42;11916:84;;;;12032:47;12045:7;12053:1;12045:10;;;;;;;;;;;;;;12057:9;12068:10;12032:12;:47::i;:::-;12015:7;12023:1;12027;12023:5;12015:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;11896:3:0;;11859:232;;1649:448;1920:51;;;1909:10;1920:51;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1920:51:0;;;;;;;25:18:-1;;61:17;;96:58;182:15;1920:51:0;179:29:-1;160:49;;1909:63:0;;;;1874:12;;1888:17;;1909:10;;;;1920:51;1909:63;;;25:18:-1;1909:63:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1909: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;;1873:99:0;;;;1991:7;:57;;;;-1:-1:-1;2003:11:0;;:16;;:44;;;2034:4;2023:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;2023:24:0;2003:44;1983:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1649:448;;;;;;:::o;33591:783::-;33735:9;33730:637;33764:1;33750:4;:11;:15;33746:1;:19;33730:637;;;33788:13;33803:14;33822:4;33827:1;33822:7;;;;;;;;;;;;;;33831:4;33836:1;33840;33836:5;33831:11;;;;;;;;;;;;;;33787:56;;;;33859:14;33879:43;33908:5;33915:6;33879:28;:43::i;:::-;33858:64;;;33937:17;33957:7;33965:1;33969;33965:5;33957:14;;;;;;;;;;;;;;33937:34;;33987:18;34007;34038:6;34029:15;;:5;:15;;;:101;;34108:9;34127:1;34029:101;;;34073:1;34077:9;34029:101;33986:144;;;;34145:10;34176:1;34162:4;:11;:15;34158:1;:19;:83;;34238:3;34158:83;;;34180:55;34206:7;34215:6;34223:4;34228:1;34232;34228:5;34223:11;;;;;;;;;;;;;;34180:25;:55::i;:::-;34145:96;;34272:49;34298:7;34307:5;34314:6;34272:25;:49::i;:::-;34256:71;;;34328:10;34340;34352:2;34256:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34256:99:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;33767:3:0;;;;;-1:-1:-1;33730:637:0;;-1:-1:-1;;;;;;;;33730:637:0;;;33591:783;;;:::o;39204:1350::-;39317:9;39312:1235;39346:1;39332:4;:11;:15;39328:1;:19;39312:1235;;;39370:13;39385:14;39404:4;39409:1;39404:7;;;;;;;;;;;;;;39413:4;39418:1;39422;39418:5;39413:11;;;;;;;;;;;;;;39369:56;;;;39441:14;39461:43;39490:5;39497:6;39461:28;:43::i;:::-;39440:64;;;39519:20;39558:49;39584:7;39593:5;39600:6;39558:25;:49::i;:::-;39519:89;;39623:19;39657:20;39769:16;39787;39809:4;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;39809:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;39809:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;39809:18:0;;;;;;;39768:59;;;;;-1:-1:-1;39768:59:0;;-1:-1:-1;39847:20:0;;39894:15;;;;;;;;:103;;39978:8;39988;39894:103;;;39934:8;39944;39894:103;39846:151;;;;40030:56;40073:12;40037:5;40030:23;;;40062:4;40030:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;40030:56:0;40016:70;;40120:72;40151:11;40164:12;40178:13;40120:30;:72::i;:::-;40105:87;;39312:1235;;;;40223:18;40243;40274:6;40265:15;;:5;:15;;;:107;;40347:12;40369:1;40265:107;;;40309:1;40313:12;40265:107;40222:150;;;;40387:10;40418:1;40404:4;:11;:15;40400:1;:19;:83;;40480:3;40400:83;;;40422:55;40448:7;40457:6;40465:4;40470:1;40474;40470:5;40465:11;;;;;;;40422:55;40387:96;;40498:4;:9;;;40508:10;40520;40532:2;40498:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;40498:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;39349:3:0;;;;;-1:-1:-1;39312:1235:0;;-1:-1:-1;;;;;;;;;;39312:1235:0;;;39204:1350;;:::o;16844:136::-;16902:7;16929:43;16933:1;16936;16929:43;;;;;;;;;;;;;;;;;:3;:43::i;2105:200::-;2218:12;;;2178;2218;;;;;;;;;2196:7;;;;2211:5;;2196:35;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;2196: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;;2177:54:0;;;2250:7;2242:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10926:526;11062:16;11111:1;11099:9;:13;11091:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11193:1;11181:9;:13;:31;;;;;11211:1;11198:10;:14;11181:31;11173:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11269:17;11289:34;11318:4;11289:24;:9;11303;11289:24;:13;:24;:::i;:::-;:28;:34;:28;:34;:::i;:::-;11269:54;-1:-1:-1;11334:19:0;11356:34;11386:3;11356:25;:10;11371:9;11356:25;:14;:25;:::i;:34::-;11334:56;;11412:32;11442:1;11425:11;11413:9;:23;;;;;;;11412:32;:29;:32;:::i;:::-;11401:43;10926:526;-1:-1:-1;;;;;;10926:526:0:o;9740:369::-;9865:15;9911:1;9901:7;:11;9893:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9985:1;9974:8;:12;:28;;;;;10001:1;9990:8;:12;9974:28;9966:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10093:8;10069:21;:7;10081:8;10069:21;:11;:21;:::i;:::-;:32;;;;;;;9740:369;-1:-1:-1;;;;9740:369:0:o;1243:398::-;1475:45;;;1464:10;1475:45;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1475:45:0;;;;;;;25:18:-1;;61:17;;96:58;182:15;1475:45:0;179:29:-1;160:49;;1464:57:0;;;;1429:12;;1443:17;;1464:10;;;;1475:45;1464:57;;;25:18:-1;1464:57:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1464: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;;1428:93:0;;;;1540:7;:57;;;;-1:-1:-1;1552:11:0;;:16;;:44;;;1583:4;1572:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1572:24:0;1552:44;1532:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1243:398;;;;;:::o;8035:351::-;8110:14;8126;8171:6;8161:16;;:6;:16;;;;8153:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8259:6;8250:15;;:6;:15;;;:53;;8288:6;8296;8250:53;;;8269:6;8277;8250:53;8231:72;;-1:-1:-1;8231:72:0;-1:-1:-1;8322:20:0;;;8314:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8035:351;;;;;:::o;25428:1427::-;25759:51;;;;;;:65;:51;;;;;;;;;;;;;;;;25658:15;;;;;;25778:7;25759:35;;;;;;:51;;;;;;;;;;;;;;;:35;:51;;;2:2:-1;;;;27:1;24;17:12;2:2;25759:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25759:51:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;25759:51:0;:65;;;25755:152;;;25841:54;;;;;;:38;:54;;;;;;;;;;;;;;;;25860:7;25841:38;;;;;;:54;;;;;;;;;;;;;;;-1:-1:-1;25841:38:0;:54;;;2:2:-1;;;;27:1;24;17:12;2:2;25841:54:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25841:54:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;25755:152:0;25918:16;25936;25956:54;25986:7;25995:6;26003;25956:29;:54::i;:::-;25917:93;;;;26025:8;26037:1;26025:13;:30;;;;-1:-1:-1;26042:13:0;;26025:30;26021:827;;;26094:14;;-1:-1:-1;26110:14:0;;-1:-1:-1;26021:827:0;;;26158:22;26183:59;26207:14;26223:8;26233;26183:23;:59::i;:::-;26158:84;;26279:14;26261;:32;26257:580;;26340:10;26322:14;:28;;26314:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26435:14;;-1:-1:-1;26451:14:0;-1:-1:-1;26451:14:0;26257:580;;;26507:22;26532:59;26556:14;26572:8;26582;26532:23;:59::i;:::-;26507:84;;26635:14;26617;:32;;26610:40;;;;26695:10;26677:14;:28;;26669:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26790:14;-1:-1:-1;26806:14:0;;-1:-1:-1;26257:580:0;26021:827;;25428:1427;;;;;;;;;;;:::o;17768:471::-;17826:7;18071:6;18067:47;;-1:-1:-1;18101:1:0;18094:8;;18067:47;18138:5;;;18142:1;18138;:5;:1;18162:5;;;;;:10;18154:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16380:181;16438:7;16470:5;;;16494:6;;;;16486:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9187:440;9314:16;9332;9362:14;9382:26;9393:6;9401;9382:10;:26::i;:::-;9361:47;;;9420:16;9438;9476:32;9484:7;9493:6;9501;9476:7;:32::i;:::-;9460:61;;;:63;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;9460:63:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9460:63:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;9460:63:0;;;;;;;9419:104;;;;;-1:-1:-1;9419:104:0;;-1:-1:-1;9557:16:0;;;;;;;;:62;;9600:8;9610;9557:62;;;9577:8;9587;9557:62;9534:85;;;;-1:-1:-1;9187:440:0;-1:-1:-1;;;;;;;9187:440:0:o;17283:226::-;17403:7;17439:12;17431:6;;;;17423:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;17423:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;17475:5:0;;;17283:226::o
Swarm Source
ipfs://299e6ec863a05b34facb61387047c1629d5fac978f54568d39a4d31919f46fcb
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.