Source Code
Latest 25 from a total of 13,824 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Swap Exact Alpha... | 17072101 | 1003 days ago | IN | 0 ETH | 0.00740346 | ||||
| Remove Liquidity... | 17072095 | 1003 days ago | IN | 0 ETH | 0.00833173 | ||||
| Remove Liquidity... | 17035599 | 1008 days ago | IN | 0 ETH | 0.00704504 | ||||
| Swap Exact Alpha... | 16592061 | 1071 days ago | IN | 0 ETH | 0.0064643 | ||||
| Remove Liquidity... | 16076987 | 1143 days ago | IN | 0 ETH | 0.00227757 | ||||
| Remove Liquidity... | 15680870 | 1198 days ago | IN | 0 ETH | 0.00087732 | ||||
| Transfer Ownersh... | 14828771 | 1333 days ago | IN | 0 ETH | 0.00032416 | ||||
| Remove Liquidity... | 14379334 | 1404 days ago | IN | 0 ETH | 0.00693817 | ||||
| Remove Liquidity... | 13666704 | 1514 days ago | IN | 0 ETH | 0.00417034 | ||||
| Remove Liquidity... | 13666700 | 1514 days ago | IN | 0 ETH | 0.0333614 | ||||
| Swap Exact ETH F... | 13602480 | 1525 days ago | IN | 2 ETH | 0.02269324 | ||||
| Swap Exact ETH F... | 13602445 | 1525 days ago | IN | 1 ETH | 0.02411931 | ||||
| Remove Liquidity... | 13568919 | 1530 days ago | IN | 0 ETH | 0.01564186 | ||||
| Remove Liquidity... | 13473808 | 1545 days ago | IN | 0 ETH | 0.00947878 | ||||
| Swap Exact Alpha... | 13010461 | 1617 days ago | IN | 0 ETH | 0.00747707 | ||||
| Remove Liquidity... | 13008483 | 1617 days ago | IN | 0 ETH | 0.01286134 | ||||
| Remove Liquidity... | 12872968 | 1638 days ago | IN | 0 ETH | 0.00417643 | ||||
| Swap Exact ETH F... | 12829953 | 1645 days ago | IN | 0.01 ETH | 0.00505797 | ||||
| Swap Exact ETH F... | 12809793 | 1648 days ago | IN | 0.01 ETH | 0.00188398 | ||||
| Swap Exact ETH F... | 12798071 | 1650 days ago | IN | 0.01 ETH | 0.00247134 | ||||
| Swap Exact Alpha... | 12740646 | 1659 days ago | IN | 0 ETH | 0.00578401 | ||||
| Swap Exact ETH F... | 12692622 | 1666 days ago | IN | 0.11324066 ETH | 0.00252898 | ||||
| Swap Exact Alpha... | 12689060 | 1667 days ago | IN | 0 ETH | 0.00204141 | ||||
| Swap Exact ETH F... | 12688204 | 1667 days ago | IN | 0.18934324 ETH | 0.0036126 | ||||
| Remove Liquidity... | 12682144 | 1668 days ago | IN | 0 ETH | 0.00248824 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Transfer | 17072101 | 1003 days ago | 1.82497213 ETH | ||||
| Transfer | 17072101 | 1003 days ago | 1.82497213 ETH | ||||
| Transfer | 16592061 | 1071 days ago | 0.68572926 ETH | ||||
| Transfer | 16592061 | 1071 days ago | 0.68572926 ETH | ||||
| - | 13602480 | 1525 days ago | 2 ETH | ||||
| - | 13602445 | 1525 days ago | 1 ETH | ||||
| - | 13010461 | 1617 days ago | 1.17685256 ETH | ||||
| - | 13010461 | 1617 days ago | 1.17685256 ETH | ||||
| - | 12829953 | 1645 days ago | 0.01 ETH | ||||
| - | 12809793 | 1648 days ago | 0.01 ETH | ||||
| - | 12798071 | 1650 days ago | 0.01 ETH | ||||
| - | 12740646 | 1659 days ago | 3.8572661 ETH | ||||
| - | 12740646 | 1659 days ago | 3.8572661 ETH | ||||
| - | 12692622 | 1666 days ago | 0.11324066 ETH | ||||
| - | 12689060 | 1667 days ago | 0.18802423 ETH | ||||
| - | 12689060 | 1667 days ago | 0.18802423 ETH | ||||
| - | 12688204 | 1667 days ago | 0.18934324 ETH | ||||
| - | 12681621 | 1668 days ago | 1.69758763 ETH | ||||
| - | 12546543 | 1689 days ago | 0.27322482 ETH | ||||
| - | 12546543 | 1689 days ago | 0.27322482 ETH | ||||
| - | 12490716 | 1698 days ago | 3.25241793 ETH | ||||
| - | 12490716 | 1698 days ago | 3.25241793 ETH | ||||
| - | 12471928 | 1701 days ago | 0.5276609 ETH | ||||
| - | 12471928 | 1701 days ago | 0.5276609 ETH | ||||
| - | 12456337 | 1703 days ago | 0.47056277 ETH |
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
IbETHRouter
Compiler Version
v0.5.16+commit.9c3226ce
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2020-11-15
*/
// File: openzeppelin-solidity-2.3.0/contracts/ownership/Ownable.sol
pragma solidity ^0.5.0;
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be aplied to your functions to restrict their use to
* the owner.
*/
contract Ownable {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor () internal {
_owner = msg.sender;
emit OwnershipTransferred(address(0), _owner);
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(isOwner(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Returns true if the caller is the current owner.
*/
function isOwner() public view returns (bool) {
return msg.sender == _owner;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* > Note: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public onlyOwner {
emit OwnershipTransferred(_owner, address(0));
_owner = address(0);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public onlyOwner {
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
*/
function _transferOwnership(address newOwner) internal {
require(newOwner != address(0), "Ownable: new owner is the zero address");
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
}
// File: openzeppelin-solidity-2.3.0/contracts/token/ERC20/IERC20.sol
pragma solidity ^0.5.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP. Does not include
* the optional functions; to access them see `ERC20Detailed`.
*/
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a `Transfer` event.
*/
function transfer(address recipient, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through `transferFrom`. This is
* zero by default.
*
* This value changes when `approve` or `transferFrom` are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* > Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an `Approval` event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a `Transfer` event.
*/
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to `approve`. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
}
// File: @uniswap/v2-core/contracts/libraries/Math.sol
pragma solidity =0.5.16;
// a library for performing various math operations
library Math {
function min(uint x, uint y) internal pure returns (uint z) {
z = x < y ? x : y;
}
// babylonian method (https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method)
function sqrt(uint y) internal pure returns (uint z) {
if (y > 3) {
z = y;
uint x = y / 2 + 1;
while (x < z) {
z = x;
x = (y / x + x) / 2;
}
} else if (y != 0) {
z = 1;
}
}
}
// File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol
pragma solidity >=0.5.0;
interface IUniswapV2Pair {
event Approval(address indexed owner, address indexed spender, uint value);
event Transfer(address indexed from, address indexed to, uint value);
function name() external pure returns (string memory);
function symbol() external pure returns (string memory);
function decimals() external pure returns (uint8);
function totalSupply() external view returns (uint);
function balanceOf(address owner) external view returns (uint);
function allowance(address owner, address spender) external view returns (uint);
function approve(address spender, uint value) external returns (bool);
function transfer(address to, uint value) external returns (bool);
function transferFrom(address from, address to, uint value) external returns (bool);
function DOMAIN_SEPARATOR() external view returns (bytes32);
function PERMIT_TYPEHASH() external pure returns (bytes32);
function nonces(address owner) external view returns (uint);
function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
event Mint(address indexed sender, uint amount0, uint amount1);
event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
event Swap(
address indexed sender,
uint amount0In,
uint amount1In,
uint amount0Out,
uint amount1Out,
address indexed to
);
event Sync(uint112 reserve0, uint112 reserve1);
function MINIMUM_LIQUIDITY() external pure returns (uint);
function factory() external view returns (address);
function token0() external view returns (address);
function token1() external view returns (address);
function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
function price0CumulativeLast() external view returns (uint);
function price1CumulativeLast() external view returns (uint);
function kLast() external view returns (uint);
function mint(address to) external returns (uint liquidity);
function burn(address to) external returns (uint amount0, uint amount1);
function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
function skim(address to) external;
function sync() external;
function initialize(address, address) external;
}
// File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol
pragma solidity >=0.5.0;
interface IUniswapV2Factory {
event PairCreated(address indexed token0, address indexed token1, address pair, uint);
function feeTo() external view returns (address);
function feeToSetter() external view returns (address);
function getPair(address tokenA, address tokenB) external view returns (address pair);
function allPairs(uint) external view returns (address pair);
function allPairsLength() external view returns (uint);
function createPair(address tokenA, address tokenB) external returns (address pair);
function setFeeTo(address) external;
function setFeeToSetter(address) external;
}
// File: openzeppelin-solidity-2.3.0/contracts/math/SafeMath.sol
pragma solidity ^0.5.0;
/**
* @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) {
require(b <= a, "SafeMath: subtraction overflow");
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-solidity/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) {
// Solidity only automatically asserts when dividing by 0
require(b > 0, "SafeMath: division by zero");
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) {
require(b != 0, "SafeMath: modulo by zero");
return a % b;
}
}
// File: contracts/5/uniswap/IUniswapV2Router02.sol
pragma solidity >=0.5.0;
interface IUniswapV2Router02 {
function factory() external pure returns (address);
function WETH() 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 addLiquidityETH(
address token,
uint256 amountTokenDesired,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline
)
external
payable
returns (
uint256 amountToken,
uint256 amountETH,
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 removeLiquidityETH(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline
) external returns (uint256 amountToken, uint256 amountETH);
function removeLiquidityWithPermit(
address tokenA,
address tokenB,
uint256 liquidity,
uint256 amountAMin,
uint256 amountBMin,
address to,
uint256 deadline,
bool approveMax,
uint8 v,
bytes32 r,
bytes32 s
) external returns (uint256 amountA, uint256 amountB);
function removeLiquidityETHWithPermit(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline,
bool approveMax,
uint8 v,
bytes32 r,
bytes32 s
) external returns (uint256 amountToken, uint256 amountETH);
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 swapExactETHForTokens(
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external payable returns (uint256[] memory amounts);
function swapTokensForExactETH(
uint256 amountOut,
uint256 amountInMax,
address[] calldata path,
address to,
uint256 deadline
) external returns (uint256[] memory amounts);
function swapExactTokensForETH(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external returns (uint256[] memory amounts);
function swapETHForExactTokens(
uint256 amountOut,
address[] calldata path,
address to,
uint256 deadline
) external payable returns (uint256[] memory amounts);
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);
function removeLiquidityETHSupportingFeeOnTransferTokens(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline
) external returns (uint256 amountETH);
function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline,
bool approveMax,
uint8 v,
bytes32 r,
bytes32 s
) external returns (uint256 amountETH);
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external;
function swapExactETHForTokensSupportingFeeOnTransferTokens(
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external payable;
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external;
}
// File: contracts/5/interfaces/IBank.sol
pragma solidity 0.5.16;
interface IBank {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a `Transfer` event.
*/
function transfer(address recipient, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through `transferFrom`. This is
* zero by default.
*
* This value changes when `approve` or `transferFrom` are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* > 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 Return the total ETH entitled to the token holders. Be careful of unaccrued interests.
function totalETH() external view returns (uint256);
/// @dev Add more ETH to the bank. Hope to get some good returns.
function deposit() external payable;
/// @dev Withdraw ETH from the bank by burning the share tokens.
function withdraw(uint256 share) external;
}
// File: contracts/5/IbETHRouter.sol
pragma solidity =0.5.16;
// helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false
library TransferHelper {
function safeApprove(
address token,
address to,
uint256 value
) internal {
// bytes4(keccak256(bytes('approve(address,uint256)')));
(bool success, bytes memory data) = token.call(
abi.encodeWithSelector(0x095ea7b3, to, value)
);
require(
success && (data.length == 0 || abi.decode(data, (bool))),
"TransferHelper: 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 safeTransferETH(address to, uint256 value) internal {
(bool success, ) = to.call.value(value)(new bytes(0));
require(success, "TransferHelper: ETH_TRANSFER_FAILED");
}
}
contract IbETHRouter is Ownable {
using SafeMath for uint256;
address public router;
address public ibETH;
address public alpha;
address public lpToken;
constructor(address _router, address _ibETH, address _alpha) public {
router = _router;
ibETH = _ibETH;
alpha = _alpha;
address factory = IUniswapV2Router02(router).factory();
lpToken = IUniswapV2Factory(factory).getPair(ibETH, alpha);
IUniswapV2Pair(lpToken).approve(router, uint256(-1)); // 100% trust in the router
IBank(ibETH).approve(router, uint256(-1)); // 100% trust in the router
IERC20(alpha).approve(router, uint256(-1)); // 100% trust in the router
}
function() external payable {
assert(msg.sender == ibETH); // only accept ETH via fallback from the Bank contract
}
// **** ETH-ibETH FUNCTIONS ****
// Get number of ibETH needed to withdraw to get exact amountETH from the Bank
function ibETHForExactETH(uint256 amountETH) public view returns (uint256) {
uint256 totalETH = IBank(ibETH).totalETH();
return totalETH == 0 ? amountETH : amountETH.mul(IBank(ibETH).totalSupply()).add(totalETH).sub(1).div(totalETH);
}
// Add ETH and Alpha from ibETH-Alpha Pool.
// 1. Receive ETH and Alpha from caller.
// 2. Wrap ETH to ibETH.
// 3. Provide liquidity to the pool.
function addLiquidityETH(
uint256 amountAlphaDesired,
uint256 amountAlphaMin,
uint256 amountETHMin,
address to,
uint256 deadline
)
external
payable
returns (
uint256 amountAlpha,
uint256 amountETH,
uint256 liquidity
) {
TransferHelper.safeTransferFrom(alpha, msg.sender, address(this), amountAlphaDesired);
IBank(ibETH).deposit.value(msg.value)();
uint256 amountIbETHDesired = IBank(ibETH).balanceOf(address(this));
uint256 amountIbETH;
(amountAlpha, amountIbETH, liquidity) = IUniswapV2Router02(router).addLiquidity(
alpha,
ibETH,
amountAlphaDesired,
amountIbETHDesired,
amountAlphaMin,
0,
to,
deadline
);
if (amountAlphaDesired > amountAlpha) {
TransferHelper.safeTransfer(alpha, msg.sender, amountAlphaDesired.sub(amountAlpha));
}
IBank(ibETH).withdraw(amountIbETHDesired.sub(amountIbETH));
amountETH = msg.value - address(this).balance;
if (amountETH > 0) {
TransferHelper.safeTransferETH(msg.sender, address(this).balance);
}
require(amountETH >= amountETHMin, "IbETHRouter: require more ETH than amountETHmin");
}
/// @dev Compute optimal deposit amount
/// @param amtA amount of token A desired to deposit
/// @param amtB amonut of token B desired to deposit
/// @param resA amount of token A in reserve
/// @param resB amount of token B in reserve
/// (forked from ./StrategyAddTwoSidesOptimal.sol)
function optimalDeposit(
uint256 amtA,
uint256 amtB,
uint256 resA,
uint256 resB
) internal pure returns (uint256 swapAmt, bool isReversed) {
if (amtA.mul(resB) >= amtB.mul(resA)) {
swapAmt = _optimalDepositA(amtA, amtB, resA, resB);
isReversed = false;
} else {
swapAmt = _optimalDepositA(amtB, amtA, resB, resA);
isReversed = true;
}
}
/// @dev Compute optimal deposit amount helper
/// @param amtA amount of token A desired to deposit
/// @param amtB amonut of token B desired to deposit
/// @param resA amount of token A in reserve
/// @param resB amount of token B in reserve
/// (forked from ./StrategyAddTwoSidesOptimal.sol)
function _optimalDepositA(
uint256 amtA,
uint256 amtB,
uint256 resA,
uint256 resB
) internal pure returns (uint256) {
require(amtA.mul(resB) >= amtB.mul(resA), "Reversed");
uint256 a = 997;
uint256 b = uint256(1997).mul(resA);
uint256 _c = (amtA.mul(resB)).sub(amtB.mul(resA));
uint256 c = _c.mul(1000).div(amtB.add(resB)).mul(resA);
uint256 d = a.mul(c).mul(4);
uint256 e = Math.sqrt(b.mul(b).add(d));
uint256 numerator = e.sub(b);
uint256 denominator = a.mul(2);
return numerator.div(denominator);
}
// Add ibETH and Alpha to ibETH-Alpha Pool.
// All ibETH and Alpha supplied are optimally swap and add too ibETH-Alpha Pool.
function addLiquidityTwoSidesOptimal(
uint256 amountIbETHDesired,
uint256 amountAlphaDesired,
uint256 amountLPMin,
address to,
uint256 deadline
)
external
returns (
uint256 liquidity
) {
if (amountIbETHDesired > 0) {
TransferHelper.safeTransferFrom(ibETH, msg.sender, address(this), amountIbETHDesired);
}
if (amountAlphaDesired > 0) {
TransferHelper.safeTransferFrom(alpha, msg.sender, address(this), amountAlphaDesired);
}
uint256 swapAmt;
bool isReversed;
{
(uint256 r0, uint256 r1, ) = IUniswapV2Pair(lpToken).getReserves();
(uint256 ibETHReserve, uint256 alphaReserve) = IUniswapV2Pair(lpToken).token0() == ibETH ? (r0, r1) : (r1, r0);
(swapAmt, isReversed) = optimalDeposit(amountIbETHDesired, amountAlphaDesired, ibETHReserve, alphaReserve);
}
address[] memory path = new address[](2);
(path[0], path[1]) = isReversed ? (alpha, ibETH) : (ibETH, alpha);
IUniswapV2Router02(router).swapExactTokensForTokens(swapAmt, 0, path, address(this), now);
(,, liquidity) = IUniswapV2Router02(router).addLiquidity(
alpha,
ibETH,
IERC20(alpha).balanceOf(address(this)),
IBank(ibETH).balanceOf(address(this)),
0,
0,
to,
deadline
);
uint256 dustAlpha = IERC20(alpha).balanceOf(address(this));
uint256 dustIbETH = IBank(ibETH).balanceOf(address(this));
if (dustAlpha > 0) {
TransferHelper.safeTransfer(alpha, msg.sender, dustAlpha);
}
if (dustIbETH > 0) {
TransferHelper.safeTransfer(ibETH, msg.sender, dustIbETH);
}
require(liquidity >= amountLPMin, "IbETHRouter: receive less lpToken than amountLPMin");
}
// Add ETH and Alpha to ibETH-Alpha Pool.
// All ETH and Alpha supplied are optimally swap and add too ibETH-Alpha Pool.
function addLiquidityTwoSidesOptimalETH(
uint256 amountAlphaDesired,
uint256 amountLPMin,
address to,
uint256 deadline
)
external
payable
returns (
uint256 liquidity
) {
if (amountAlphaDesired > 0) {
TransferHelper.safeTransferFrom(alpha, msg.sender, address(this), amountAlphaDesired);
}
IBank(ibETH).deposit.value(msg.value)();
uint256 amountIbETHDesired = IBank(ibETH).balanceOf(address(this));
uint256 swapAmt;
bool isReversed;
{
(uint256 r0, uint256 r1, ) = IUniswapV2Pair(lpToken).getReserves();
(uint256 ibETHReserve, uint256 alphaReserve) = IUniswapV2Pair(lpToken).token0() == ibETH ? (r0, r1) : (r1, r0);
(swapAmt, isReversed) = optimalDeposit(amountIbETHDesired, amountAlphaDesired, ibETHReserve, alphaReserve);
}
address[] memory path = new address[](2);
(path[0], path[1]) = isReversed ? (alpha, ibETH) : (ibETH, alpha);
IUniswapV2Router02(router).swapExactTokensForTokens(swapAmt, 0, path, address(this), now);
(,, liquidity) = IUniswapV2Router02(router).addLiquidity(
alpha,
ibETH,
IERC20(alpha).balanceOf(address(this)),
IBank(ibETH).balanceOf(address(this)),
0,
0,
to,
deadline
);
uint256 dustAlpha = IERC20(alpha).balanceOf(address(this));
uint256 dustIbETH = IBank(ibETH).balanceOf(address(this));
if (dustAlpha > 0) {
TransferHelper.safeTransfer(alpha, msg.sender, dustAlpha);
}
if (dustIbETH > 0) {
TransferHelper.safeTransfer(ibETH, msg.sender, dustIbETH);
}
require(liquidity >= amountLPMin, "IbETHRouter: receive less lpToken than amountLPMin");
}
// Remove ETH and Alpha from ibETH-Alpha Pool.
// 1. Remove ibETH and Alpha from the pool.
// 2. Unwrap ibETH to ETH.
// 3. Return ETH and Alpha to caller.
function removeLiquidityETH(
uint256 liquidity,
uint256 amountAlphaMin,
uint256 amountETHMin,
address to,
uint256 deadline
) public returns (uint256 amountAlpha, uint256 amountETH) {
TransferHelper.safeTransferFrom(lpToken, msg.sender, address(this), liquidity);
uint256 amountIbETH;
(amountAlpha, amountIbETH) = IUniswapV2Router02(router).removeLiquidity(
alpha,
ibETH,
liquidity,
amountAlphaMin,
0,
address(this),
deadline
);
TransferHelper.safeTransfer(alpha, to, amountAlpha);
IBank(ibETH).withdraw(amountIbETH);
amountETH = address(this).balance;
if (amountETH > 0) {
TransferHelper.safeTransferETH(msg.sender, address(this).balance);
}
require(amountETH >= amountETHMin, "IbETHRouter: receive less ETH than amountETHmin");
}
// Remove liquidity from ibETH-Alpha Pool and convert all ibETH to Alpha
// 1. Remove ibETH and Alpha from the pool.
// 2. Swap ibETH for Alpha.
// 3. Return Alpha to caller.
function removeLiquidityAllAlpha(
uint256 liquidity,
uint256 amountAlphaMin,
address to,
uint256 deadline
) public returns (uint256 amountAlpha) {
TransferHelper.safeTransferFrom(lpToken, msg.sender, address(this), liquidity);
(uint256 removeAmountAlpha, uint256 removeAmountIbETH) = IUniswapV2Router02(router).removeLiquidity(
alpha,
ibETH,
liquidity,
0,
0,
address(this),
deadline
);
address[] memory path = new address[](2);
path[0] = ibETH;
path[1] = alpha;
uint256[] memory amounts = IUniswapV2Router02(router).swapExactTokensForTokens(removeAmountIbETH, 0, path, to, deadline);
TransferHelper.safeTransfer(alpha, to, removeAmountAlpha);
amountAlpha = removeAmountAlpha.add(amounts[1]);
require(amountAlpha >= amountAlphaMin, "IbETHRouter: receive less Alpha than amountAlphaMin");
}
// Swap exact amount of ETH for Token
// 1. Receive ETH from caller
// 2. Wrap ETH to ibETH.
// 3. Swap ibETH for Token
function swapExactETHForAlpha(
uint256 amountAlphaOutMin,
address to,
uint256 deadline
) external payable returns (uint256[] memory amounts) {
IBank(ibETH).deposit.value(msg.value)();
address[] memory path = new address[](2);
path[0] = ibETH;
path[1] = alpha;
uint256[] memory swapAmounts = IUniswapV2Router02(router).swapExactTokensForTokens(IBank(ibETH).balanceOf(address(this)), amountAlphaOutMin, path, to, deadline);
amounts = new uint256[](2);
amounts[0] = msg.value;
amounts[1] = swapAmounts[1];
}
// Swap Token for exact amount of ETH
// 1. Receive Token from caller
// 2. Swap Token for ibETH.
// 3. Unwrap ibETH to ETH.
function swapAlphaForExactETH(
uint256 amountETHOut,
uint256 amountAlphaInMax,
address to,
uint256 deadline
) external returns (uint256[] memory amounts) {
TransferHelper.safeTransferFrom(alpha, msg.sender, address(this), amountAlphaInMax);
address[] memory path = new address[](2);
path[0] = alpha;
path[1] = ibETH;
IBank(ibETH).withdraw(0);
uint256[] memory swapAmounts = IUniswapV2Router02(router).swapTokensForExactTokens(ibETHForExactETH(amountETHOut), amountAlphaInMax, path, address(this), deadline);
IBank(ibETH).withdraw(swapAmounts[1]);
amounts = new uint256[](2);
amounts[0] = swapAmounts[0];
amounts[1] = address(this).balance;
TransferHelper.safeTransferETH(to, address(this).balance);
if (amountAlphaInMax > amounts[0]) {
TransferHelper.safeTransfer(alpha, msg.sender, amountAlphaInMax.sub(amounts[0]));
}
}
// Swap exact amount of Token for ETH
// 1. Receive Token from caller
// 2. Swap Token for ibETH.
// 3. Unwrap ibETH to ETH.
function swapExactAlphaForETH(
uint256 amountAlphaIn,
uint256 amountETHOutMin,
address to,
uint256 deadline
) external returns (uint256[] memory amounts) {
TransferHelper.safeTransferFrom(alpha, msg.sender, address(this), amountAlphaIn);
address[] memory path = new address[](2);
path[0] = alpha;
path[1] = ibETH;
uint256[] memory swapAmounts = IUniswapV2Router02(router).swapExactTokensForTokens(amountAlphaIn, 0, path, address(this), deadline);
IBank(ibETH).withdraw(swapAmounts[1]);
amounts = new uint256[](2);
amounts[0] = swapAmounts[0];
amounts[1] = address(this).balance;
TransferHelper.safeTransferETH(to, amounts[1]);
require(amounts[1] >= amountETHOutMin, "IbETHRouter: receive less ETH than amountETHmin");
}
// Swap ETH for exact amount of Token
// 1. Receive ETH from caller
// 2. Wrap ETH to ibETH.
// 3. Swap ibETH for Token
function swapETHForExactAlpha(
uint256 amountAlphaOut,
address to,
uint256 deadline
) external payable returns (uint256[] memory amounts) {
IBank(ibETH).deposit.value(msg.value)();
uint256 amountIbETHInMax = IBank(ibETH).balanceOf(address(this));
address[] memory path = new address[](2);
path[0] = ibETH;
path[1] = alpha;
uint256[] memory swapAmounts = IUniswapV2Router02(router).swapTokensForExactTokens(amountAlphaOut, amountIbETHInMax, path, to, deadline);
amounts = new uint256[](2);
amounts[0] = msg.value;
amounts[1] = swapAmounts[1];
// Transfer left over ETH back
if (amountIbETHInMax > swapAmounts[0]) {
IBank(ibETH).withdraw(amountIbETHInMax.sub(swapAmounts[0]));
amounts[0] = msg.value - address(this).balance;
TransferHelper.safeTransferETH(to, address(this).balance);
}
}
/// @dev Recover ERC20 tokens that were accidentally sent to this smart contract.
/// @param token The token contract. Can be anything. This contract should not hold ERC20 tokens.
/// @param to The address to send the tokens to.
/// @param value The number of tokens to transfer to `to`.
function recover(address token, address to, uint256 value) external onlyOwner {
TransferHelper.safeTransfer(token, to, value);
}
/// @dev Recover ETH that were accidentally sent to this smart contract.
/// @param to The address to send the ETH to.
/// @param value The number of ETH to transfer to `to`.
function recoverETH(address to, uint256 value) external onlyOwner {
TransferHelper.safeTransferETH(to, value);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_router","type":"address"},{"internalType":"address","name":"_ibETH","type":"address"},{"internalType":"address","name":"_alpha","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amountAlphaDesired","type":"uint256"},{"internalType":"uint256","name":"amountAlphaMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityETH","outputs":[{"internalType":"uint256","name":"amountAlpha","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amountIbETHDesired","type":"uint256"},{"internalType":"uint256","name":"amountAlphaDesired","type":"uint256"},{"internalType":"uint256","name":"amountLPMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityTwoSidesOptimal","outputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amountAlphaDesired","type":"uint256"},{"internalType":"uint256","name":"amountLPMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityTwoSidesOptimalETH","outputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"alpha","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ibETH","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"name":"ibETHForExactETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lpToken","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"recover","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"recoverETH","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAlphaMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityAllAlpha","outputs":[{"internalType":"uint256","name":"amountAlpha","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAlphaMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETH","outputs":[{"internalType":"uint256","name":"amountAlpha","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"router","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amountETHOut","type":"uint256"},{"internalType":"uint256","name":"amountAlphaInMax","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapAlphaForExactETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amountAlphaOut","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapETHForExactAlpha","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amountAlphaIn","type":"uint256"},{"internalType":"uint256","name":"amountETHOutMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactAlphaForETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amountAlphaOutMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForAlpha","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60806040523480156200001157600080fd5b5060405162003ae138038062003ae1833981810160405260608110156200003757600080fd5b5080516020820151604092830151600080546001600160a01b031916331780825594519394929391926001600160a01b0316917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3600180546001600160a01b038086166001600160a01b0319928316179283905560028054868316908416179055600380548583169316929092179091556040805163c45a015560e01b815290516000939092169163c45a015591600480820192602092909190829003018186803b1580156200010a57600080fd5b505afa1580156200011f573d6000803e3d6000fd5b505050506040513d60208110156200013657600080fd5b50516002546003546040805163e6a4390560e01b81526001600160a01b0393841660048201529183166024830152519293509083169163e6a4390591604480820192602092909190829003018186803b1580156200019357600080fd5b505afa158015620001a8573d6000803e3d6000fd5b505050506040513d6020811015620001bf57600080fd5b5051600480546001600160a01b0319166001600160a01b03928316178082556001546040805163095ea7b360e01b8152918516938201939093526000196024820152915192169163095ea7b3916044808201926020929091908290030181600087803b1580156200022f57600080fd5b505af115801562000244573d6000803e3d6000fd5b505050506040513d60208110156200025b57600080fd5b50506002546001546040805163095ea7b360e01b81526001600160a01b03928316600482015260001960248201529051919092169163095ea7b39160448083019260209291908290030181600087803b158015620002b857600080fd5b505af1158015620002cd573d6000803e3d6000fd5b505050506040513d6020811015620002e457600080fd5b50506003546001546040805163095ea7b360e01b81526001600160a01b03928316600482015260001960248201529051919092169163095ea7b39160448083019260209291908290030181600087803b1580156200034157600080fd5b505af115801562000356573d6000803e3d6000fd5b505050506040513d60208110156200036d57600080fd5b50505050505061375e80620003836000396000f3fe60806040526004361061011f5760003560e01c80638f32d59b116100a0578063ee1fae3c11610064578063ee1fae3c1461048e578063f2fde38b146104f2578063f58a733c14610525578063f887ea401461054f578063fca03f47146105645761011f565b80638f32d59b146103ad578063b8f3962f146103d6578063bab8e1c014610408578063bb8a88bb1461041d578063db1d0fd5146104795761011f565b80636faad94e116100e75780636faad94e146102bb578063715018a61461030057806376f7b35f146103155780638596f3d61461034d5780638da5cb5b146103985761011f565b806305ea4671146101355780631ec82cb8146101b75780633e0c0629146101fa57806347241fad146102335780635fcbd2851461028a575b6002546001600160a01b0316331461013357fe5b005b6101676004803603606081101561014b57600080fd5b508035906001600160a01b0360208201351690604001356105a9565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156101a357818101518382015260200161018b565b505050509050019250505060405180910390f35b3480156101c357600080fd5b50610133600480360360608110156101da57600080fd5b506001600160a01b038135811691602081013590911690604001356108f5565b34801561020657600080fd5b506101336004803603604081101561021d57600080fd5b506001600160a01b03813516906020013561094c565b34801561023f57600080fd5b506102786004803603608081101561025657600080fd5b508035906020810135906001600160a01b0360408201351690606001356109a1565b60408051918252519081900360200190f35b34801561029657600080fd5b5061029f610d1e565b604080516001600160a01b039092168252519081900360200190f35b3480156102c757600080fd5b50610167600480360360808110156102de57600080fd5b508035906020810135906001600160a01b036040820135169060600135610d2d565b34801561030c57600080fd5b5061013361109b565b6102786004803603608081101561032b57600080fd5b508035906020810135906001600160a01b03604082013516906060013561112c565b34801561035957600080fd5b50610278600480360360a081101561037057600080fd5b508035906020810135906040810135906001600160a01b0360608201351690608001356118a6565b3480156103a457600080fd5b5061029f611f60565b3480156103b957600080fd5b506103c2611f6f565b604080519115158252519081900360200190f35b610167600480360360608110156103ec57600080fd5b508035906001600160a01b036020820135169060400135611f80565b34801561041457600080fd5b5061029f6123c3565b61045b600480360360a081101561043357600080fd5b508035906020810135906040810135906001600160a01b0360608201351690608001356123d2565b60408051938452602084019290925282820152519081900360600190f35b34801561048557600080fd5b5061029f61269f565b34801561049a57600080fd5b506104d9600480360360a08110156104b157600080fd5b508035906020810135906040810135906001600160a01b0360608201351690608001356126ae565b6040805192835260208301919091528051918290030190f35b3480156104fe57600080fd5b506101336004803603602081101561051557600080fd5b50356001600160a01b031661285e565b34801561053157600080fd5b506102786004803603602081101561054857600080fd5b50356128b1565b34801561055b57600080fd5b5061029f612a01565b34801561057057600080fd5b506101676004803603608081101561058757600080fd5b508035906020810135906001600160a01b036040820135169060600135612a10565b6060600260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156105fb57600080fd5b505af115801561060f573d6000803e3d6000fd5b50506040805160028082526060808301845295509093509150602083019080388339505060025482519293506001600160a01b03169183915060009061065157fe5b6001600160a01b03928316602091820292909201015260035482519116908290600190811061067c57fe5b6001600160a01b03928316602091820292909201810191909152600154600254604080516370a0823160e01b81523060048201529051606095938416946338ed17399493909316926370a082319260248082019391829003018186803b1580156106e557600080fd5b505afa1580156106f9573d6000803e3d6000fd5b505050506040513d602081101561070f57600080fd5b50516040516001600160e01b031960e084901b16815260048101828152602482018b90526001600160a01b038a1660648301526084820189905260a060448301908152875160a484015287518c9389938d938d939192909160c4909101906020878101910280838360005b8381101561079257818101518382015260200161077a565b505050509050019650505050505050600060405180830381600087803b1580156107bb57600080fd5b505af11580156107cf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156107f857600080fd5b8101908080516040519392919084600160201b82111561081757600080fd5b90830190602082018581111561082c57600080fd5b82518660208202830111600160201b8211171561084857600080fd5b82525081516020918201928201910280838360005b8381101561087557818101518382015260200161085d565b505060029490920184815260608101604052979850929550505050505081602001602082028038833901905050925034836000815181106108b257fe5b602002602001018181525050806001815181106108cb57fe5b6020026020010151836001815181106108e057fe5b60200260200101818152505050509392505050565b6108fd611f6f565b61093c576040805162461bcd60e51b81526020600482018190526024820152600080516020613694833981519152604482015290519081900360640190fd5b610947838383612dd3565b505050565b610954611f6f565b610993576040805162461bcd60e51b81526020600482018190526024820152600080516020613694833981519152604482015290519081900360640190fd5b61099d8282612f3d565b5050565b6004546000906109bc906001600160a01b0316333088613030565b60015460035460025460408051635d5155ef60e11b81526001600160a01b039384166004820152918316602483015260448201899052600060648301819052608483018190523060a484015260c48301879052815190948594169263baa2abde9260e480830193919282900301818787803b158015610a3a57600080fd5b505af1158015610a4e573d6000803e3d6000fd5b505050506040513d6040811015610a6457600080fd5b50805160209182015160408051600280825260608083018452949750929550929383019080388339505060025482519293506001600160a01b031691839150600090610aac57fe5b6001600160a01b039283166020918202929092010152600354825191169082906001908110610ad757fe5b60200260200101906001600160a01b031690816001600160a01b0316815250506060600160009054906101000a90046001600160a01b03166001600160a01b03166338ed1739846000858b8b6040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03166001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015610b9c578181015183820152602001610b84565b505050509050019650505050505050600060405180830381600087803b158015610bc557600080fd5b505af1158015610bd9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015610c0257600080fd5b8101908080516040519392919084600160201b821115610c2157600080fd5b908301906020820185811115610c3657600080fd5b82518660208202830111600160201b82111715610c5257600080fd5b82525081516020918201928201910280838360005b83811015610c7f578181015183820152602001610c67565b50505050919091016040525050600354929350610caa926001600160a01b0316915089905086612dd3565b610cd181600181518110610cba57fe5b60200260200101518561318d90919063ffffffff16565b945087851015610d125760405162461bcd60e51b81526004018080602001828103825260338152602001806136116033913960400191505060405180910390fd5b50505050949350505050565b6004546001600160a01b031681565b600354606090610d48906001600160a01b0316333088613030565b6040805160028082526060808301845292602083019080388339505060035482519293506001600160a01b031691839150600090610d8257fe5b6001600160a01b039283166020918202929092010152600254825191169082906001908110610dad57fe5b6001600160a01b039283166020918202929092018101919091526001546040516338ed173960e01b8152600481018a81526000602483018190523060648401819052608484018a905260a060448501908152885160a4860152885160609896909616966338ed1739968f9694958b958e949193919260c49091019187810191028083838b5b83811015610e4a578181015183820152602001610e32565b505050509050019650505050505050600060405180830381600087803b158015610e7357600080fd5b505af1158015610e87573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015610eb057600080fd5b8101908080516040519392919084600160201b821115610ecf57600080fd5b908301906020820185811115610ee457600080fd5b82518660208202830111600160201b82111715610f0057600080fd5b82525081516020918201928201910280838360005b83811015610f2d578181015183820152602001610f15565b5050505091909101604052505060025483519394506001600160a01b031692632e1a7d4d92508491506001908110610f6157fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610f9f57600080fd5b505af1158015610fb3573d6000803e3d6000fd5b5050604080516002808252606082018352909350915060208301908038833901905050925080600081518110610fe557fe5b602002602001015183600081518110610ffa57fe5b602002602001018181525050478360018151811061101457fe5b60200260200101818152505061103e858460018151811061103157fe5b6020026020010151612f3d565b858360018151811061104c57fe5b602002602001015110156110915760405162461bcd60e51b815260040180806020018281038252602f815260200180613644602f913960400191505060405180910390fd5b5050949350505050565b6110a3611f6f565b6110e2576040805162461bcd60e51b81526020600482018190526024820152600080516020613694833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000841561114c5760035461114c906001600160a01b0316333088613030565b600260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561119c57600080fd5b505af11580156111b0573d6000803e3d6000fd5b5050600254604080516370a0823160e01b81523060048201529051600095506001600160a01b0390921693506370a082319250602480820192602092909190829003018186803b15801561120357600080fd5b505afa158015611217573d6000803e3d6000fd5b505050506040513d602081101561122d57600080fd5b50516004805460408051630240bc6b60e21b815290519394506000938493849384936001600160a01b0390911692630902f1ac92828101926060929190829003018186803b15801561127e57600080fd5b505afa158015611292573d6000803e3d6000fd5b505050506040513d60608110156112a857600080fd5b5080516020918201516002546004805460408051630dfe168160e01b815290516001600160701b03968716995095909416965060009586956001600160a01b03948516959290941693630dfe16819383810193829003018186803b15801561130f57600080fd5b505afa158015611323573d6000803e3d6000fd5b505050506040513d602081101561133957600080fd5b50516001600160a01b031614611350578284611353565b83835b91509150611363878d84846131f0565b60408051600280825260608083018452949a50929850929650919450925060208401915080388339019050509050816113ae576002546003546001600160a01b0391821691166113c2565b6003546002546001600160a01b0391821691165b826000815181106113cf57fe5b60200260200101836001815181106113e357fe5b6001600160a01b0393841660209182029290920181019190915292821690526001546040516338ed173960e01b8152600481018781526000602483018190523060648401819052426084850181905260a060448601908152895160a4870152895196909716976338ed1739978c9794968b969495939493919260c49091019187820191028083838b5b8381101561148457818101518382015260200161146c565b505050509050019650505050505050600060405180830381600087803b1580156114ad57600080fd5b505af11580156114c1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156114ea57600080fd5b8101908080516040519392919084600160201b82111561150957600080fd5b90830190602082018581111561151e57600080fd5b82518660208202830111600160201b8211171561153a57600080fd5b82525081516020918201928201910280838360005b8381101561156757818101518382015260200161154f565b505050509190910160408181526001546003546002546370a0823160e01b855230600486015292516001600160a01b03928316995063e8e3370098509082169650911693508492506370a0823191602480820192602092909190829003018186803b1580156115d557600080fd5b505afa1580156115e9573d6000803e3d6000fd5b505050506040513d60208110156115ff57600080fd5b5051600254604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561164c57600080fd5b505afa158015611660573d6000803e3d6000fd5b505050506040513d602081101561167657600080fd5b5051604080516001600160e01b031960e088901b1681526001600160a01b03958616600482015293851660248501526044840192909252606483015260006084830181905260a48301819052928c1660c483015260e482018b9052516101048083019360609383900390910190829087803b1580156116f457600080fd5b505af1158015611708573d6000803e3d6000fd5b505050506040513d606081101561171e57600080fd5b5060409081015160035482516370a0823160e01b815230600482015292519197506000926001600160a01b03909116916370a0823191602480820192602092909190829003018186803b15801561177457600080fd5b505afa158015611788573d6000803e3d6000fd5b505050506040513d602081101561179e57600080fd5b5051600254604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156117f157600080fd5b505afa158015611805573d6000803e3d6000fd5b505050506040513d602081101561181b57600080fd5b50519050811561183c5760035461183c906001600160a01b03163384612dd3565b801561185957600254611859906001600160a01b03163383612dd3565b898710156118985760405162461bcd60e51b81526004018080602001828103825260328152602001806135b96032913960400191505060405180910390fd5b505050505050949350505050565b600085156118c6576002546118c6906001600160a01b0316333089613030565b84156118e4576003546118e4906001600160a01b0316333088613030565b600080600080600460009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561193857600080fd5b505afa15801561194c573d6000803e3d6000fd5b505050506040513d606081101561196257600080fd5b5080516020918201516002546004805460408051630dfe168160e01b815290516001600160701b03968716995095909416965060009586956001600160a01b03948516959290941693630dfe16819383810193829003018186803b1580156119c957600080fd5b505afa1580156119dd573d6000803e3d6000fd5b505050506040513d60208110156119f357600080fd5b50516001600160a01b031614611a0a578284611a0d565b83835b91509150611a1d8c8c84846131f0565b60408051600280825260608083018452949a5092985092965091945092506020840191508038833901905050905081611a68576002546003546001600160a01b039182169116611a7c565b6003546002546001600160a01b0391821691165b82600081518110611a8957fe5b6020026020010183600181518110611a9d57fe5b6001600160a01b0393841660209182029290920181019190915292821690526001546040516338ed173960e01b8152600481018781526000602483018190523060648401819052426084850181905260a060448601908152895160a4870152895196909716976338ed1739978c9794968b969495939493919260c49091019187820191028083838b5b83811015611b3e578181015183820152602001611b26565b505050509050019650505050505050600060405180830381600087803b158015611b6757600080fd5b505af1158015611b7b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015611ba457600080fd5b8101908080516040519392919084600160201b821115611bc357600080fd5b908301906020820185811115611bd857600080fd5b82518660208202830111600160201b82111715611bf457600080fd5b82525081516020918201928201910280838360005b83811015611c21578181015183820152602001611c09565b505050509190910160408181526001546003546002546370a0823160e01b855230600486015292516001600160a01b03928316995063e8e3370098509082169650911693508492506370a0823191602480820192602092909190829003018186803b158015611c8f57600080fd5b505afa158015611ca3573d6000803e3d6000fd5b505050506040513d6020811015611cb957600080fd5b5051600254604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015611d0657600080fd5b505afa158015611d1a573d6000803e3d6000fd5b505050506040513d6020811015611d3057600080fd5b5051604080516001600160e01b031960e088901b1681526001600160a01b03958616600482015293851660248501526044840192909252606483015260006084830181905260a48301819052928b1660c483015260e482018a9052516101048083019360609383900390910190829087803b158015611dae57600080fd5b505af1158015611dc2573d6000803e3d6000fd5b505050506040513d6060811015611dd857600080fd5b5060409081015160035482516370a0823160e01b815230600482015292519196506000926001600160a01b03909116916370a0823191602480820192602092909190829003018186803b158015611e2e57600080fd5b505afa158015611e42573d6000803e3d6000fd5b505050506040513d6020811015611e5857600080fd5b5051600254604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015611eab57600080fd5b505afa158015611ebf573d6000803e3d6000fd5b505050506040513d6020811015611ed557600080fd5b505190508115611ef657600354611ef6906001600160a01b03163384612dd3565b8015611f1357600254611f13906001600160a01b03163383612dd3565b88861015611f525760405162461bcd60e51b81526004018080602001828103825260328152602001806135b96032913960400191505060405180910390fd5b505050505095945050505050565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b6060600260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015611fd257600080fd5b505af1158015611fe6573d6000803e3d6000fd5b5050600254604080516370a0823160e01b81523060048201529051600095506001600160a01b0390921693506370a082319250602480820192602092909190829003018186803b15801561203957600080fd5b505afa15801561204d573d6000803e3d6000fd5b505050506040513d602081101561206357600080fd5b5051604080516002808252606080830184529394509091602083019080388339505060025482519293506001600160a01b0316918391506000906120a357fe5b6001600160a01b0392831660209182029290920101526003548251911690829060019081106120ce57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250506060600160009054906101000a90046001600160a01b03166001600160a01b0316638803dbee8885858a8a6040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03166001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b8381101561219257818101518382015260200161217a565b505050509050019650505050505050600060405180830381600087803b1580156121bb57600080fd5b505af11580156121cf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156121f857600080fd5b8101908080516040519392919084600160201b82111561221757600080fd5b90830190602082018581111561222c57600080fd5b82518660208202830111600160201b8211171561224857600080fd5b82525081516020918201928201910280838360005b8381101561227557818101518382015260200161225d565b505060029490920184815260608101604052979850929550505050505081602001602082028038833901905050935034846000815181106122b257fe5b602002602001018181525050806001815181106122cb57fe5b6020026020010151846001815181106122e057fe5b602002602001018181525050806000815181106122f957fe5b60200260200101518311156123b95760025481516001600160a01b0390911690632e1a7d4d9061234590849060009061232e57fe5b60200260200101518661324b90919063ffffffff16565b6040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561237b57600080fd5b505af115801561238f573d6000803e3d6000fd5b50505050473403846000815181106123a357fe5b6020026020010181815250506123b98647612f3d565b5050509392505050565b6002546001600160a01b031681565b600354600090819081906123f1906001600160a01b031633308b613030565b600260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561244157600080fd5b505af1158015612455573d6000803e3d6000fd5b5050600254604080516370a0823160e01b81523060048201529051600095506001600160a01b0390921693506370a082319250602480820192602092909190829003018186803b1580156124a857600080fd5b505afa1580156124bc573d6000803e3d6000fd5b505050506040513d60208110156124d257600080fd5b50516001546003546002546040805162e8e33760e81b81526001600160a01b0393841660048201529183166024830152604482018e905260648201859052608482018d9052600060a483018190528b841660c484015260e483018b9052905194955093919092169163e8e337009161010480830192606092919082900301818787803b15801561256157600080fd5b505af1158015612575573d6000803e3d6000fd5b505050506040513d606081101561258b57600080fd5b508051602082015160409092015190965093509050848a11156125ce576003546125ce906001600160a01b0316336125c98d8963ffffffff61324b16565b612dd3565b6002546001600160a01b0316632e1a7d4d6125ef848463ffffffff61324b16565b6040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561262557600080fd5b505af1158015612639573d6000803e3d6000fd5b505047340395505084159050612653576126533347612f3d565b878410156126925760405162461bcd60e51b815260040180806020018281038252602f8152602001806136b4602f913960400191505060405180910390fd5b5050955095509592505050565b6003546001600160a01b031681565b60045460009081906126cb906001600160a01b031633308a613030565b60015460035460025460408051635d5155ef60e11b81526001600160a01b0393841660048201529183166024830152604482018b9052606482018a90526000608483018190523060a484015260c4830188905281519094939093169263baa2abde9260e480820193929182900301818787803b15801561274a57600080fd5b505af115801561275e573d6000803e3d6000fd5b505050506040513d604081101561277457600080fd5b5080516020909101516003549194509150612799906001600160a01b03168685612dd3565b60025460408051632e1a7d4d60e01b81526004810184905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b1580156127e657600080fd5b505af11580156127fa573d6000803e3d6000fd5b505050504791506000821115612814576128143347612f3d565b858210156128535760405162461bcd60e51b815260040180806020018281038252602f815260200180613644602f913960400191505060405180910390fd5b509550959350505050565b612866611f6f565b6128a5576040805162461bcd60e51b81526020600482018190526024820152600080516020613694833981519152604482015290519081900360640190fd5b6128ae816132a8565b50565b600080600260009054906101000a90046001600160a01b03166001600160a01b03166336bdee746040518163ffffffff1660e01b815260040160206040518083038186803b15801561290257600080fd5b505afa158015612916573d6000803e3d6000fd5b505050506040513d602081101561292c57600080fd5b5051905080156129f6576129f1816129e560016129d9856129cd600260009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561299457600080fd5b505afa1580156129a8573d6000803e3d6000fd5b505050506040513d60208110156129be57600080fd5b50518a9063ffffffff61334816565b9063ffffffff61318d16565b9063ffffffff61324b16565b9063ffffffff6133a116565b6129f8565b825b9150505b919050565b6001546001600160a01b031681565b600354606090612a2b906001600160a01b0316333087613030565b6040805160028082526060808301845292602083019080388339505060035482519293506001600160a01b031691839150600090612a6557fe5b6001600160a01b039283166020918202929092010152600254825191169082906001908110612a9057fe5b6001600160a01b03928316602091820292909201015260025460408051632e1a7d4d60e01b815260006004820181905291519290931692632e1a7d4d926024808301939282900301818387803b158015612ae957600080fd5b505af1158015612afd573d6000803e3d6000fd5b5050600154606092506001600160a01b03169050638803dbee612b1f896128b1565b888530896040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03166001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015612b9c578181015183820152602001612b84565b505050509050019650505050505050600060405180830381600087803b158015612bc557600080fd5b505af1158015612bd9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015612c0257600080fd5b8101908080516040519392919084600160201b821115612c2157600080fd5b908301906020820185811115612c3657600080fd5b82518660208202830111600160201b82111715612c5257600080fd5b82525081516020918201928201910280838360005b83811015612c7f578181015183820152602001612c67565b5050505091909101604052505060025483519394506001600160a01b031692632e1a7d4d92508491506001908110612cb357fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015612cf157600080fd5b505af1158015612d05573d6000803e3d6000fd5b5050604080516002808252606082018352909350915060208301908038833901905050925080600081518110612d3757fe5b602002602001015183600081518110612d4c57fe5b6020026020010181815250504783600181518110612d6657fe5b602002602001018181525050612d7c8547612f3d565b82600081518110612d8957fe5b6020026020010151861115611091576003548351611091916001600160a01b03169033906125c9908790600090612dbc57fe5b60200260200101518a61324b90919063ffffffff16565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b60208310612e505780518252601f199092019160209182019101612e31565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612eb2576040519150601f19603f3d011682016040523d82523d6000602084013e612eb7565b606091505b5091509150818015612ee5575080511580612ee55750808060200190516020811015612ee257600080fd5b50515b612f36576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b60208310612f895780518252601f199092019160209182019101612f6a565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114612feb576040519150601f19603f3d011682016040523d82523d6000602084013e612ff0565b606091505b50509050806109475760405162461bcd60e51b81526004018080602001828103825260238152602001806136e36023913960400191505060405180910390fd5b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106130b55780518252601f199092019160209182019101613096565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613117576040519150601f19603f3d011682016040523d82523d6000602084013e61311c565b606091505b509150915081801561314a57508051158061314a575080806020019051602081101561314757600080fd5b50515b6131855760405162461bcd60e51b81526004018080602001828103825260248152602001806137066024913960400191505060405180910390fd5b505050505050565b6000828201838110156131e7576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b600080613203858563ffffffff61334816565b613213878563ffffffff61334816565b1061322f576132248686868661340b565b915060009050613242565b61323b8587858761340b565b9150600190505b94509492505050565b6000828211156132a2576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6001600160a01b0381166132ed5760405162461bcd60e51b81526004018080602001828103825260268152602001806135eb6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600082613357575060006131ea565b8282028284828161336457fe5b04146131e75760405162461bcd60e51b81526004018080602001828103825260218152602001806136736021913960400191505060405180910390fd5b60008082116133f7576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b600082848161340257fe5b04949350505050565b600061341d848463ffffffff61334816565b61342d868463ffffffff61334816565b101561346b576040805162461bcd60e51b815260206004820152600860248201526714995d995c9cd95960c21b604482015290519081900360640190fd5b6103e560006134826107cd8663ffffffff61334816565b905060006134a9613499888863ffffffff61334816565b6129d98a8863ffffffff61334816565b905060006134e2876134d66134c48b8a63ffffffff61318d16565b6129e5866103e863ffffffff61334816565b9063ffffffff61334816565b905060006134fb60046134d6878563ffffffff61334816565b9050600061351b613516836129cd888063ffffffff61334816565b613567565b9050600061352f828763ffffffff61324b16565b9050600061354488600263ffffffff61334816565b9050613556828263ffffffff6133a116565b9d9c50505050505050505050505050565b600060038211156135aa575080600160028204015b818110156135a45780915060028182858161359357fe5b04018161359c57fe5b04905061357c565b506129fc565b81156129fc5750600191905056fe4962455448526f757465723a2072656365697665206c657373206c70546f6b656e207468616e20616d6f756e744c504d696e4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734962455448526f757465723a2072656365697665206c65737320416c706861207468616e20616d6f756e74416c7068614d696e4962455448526f757465723a2072656365697665206c65737320455448207468616e20616d6f756e744554486d696e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724962455448526f757465723a2072657175697265206d6f726520455448207468616e20616d6f756e744554486d696e5472616e7366657248656c7065723a204554485f5452414e534645525f4641494c45445472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544a265627a7a72315820f77379384557f8f54d21d798975b1723e099e8efaf9a1525450fd0f7109975b664736f6c634300051000320000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d00000000000000000000000067b66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a000000000000000000000000a1faa113cbe53436df28ff0aee54275c13b40975
Deployed Bytecode
0x60806040526004361061011f5760003560e01c80638f32d59b116100a0578063ee1fae3c11610064578063ee1fae3c1461048e578063f2fde38b146104f2578063f58a733c14610525578063f887ea401461054f578063fca03f47146105645761011f565b80638f32d59b146103ad578063b8f3962f146103d6578063bab8e1c014610408578063bb8a88bb1461041d578063db1d0fd5146104795761011f565b80636faad94e116100e75780636faad94e146102bb578063715018a61461030057806376f7b35f146103155780638596f3d61461034d5780638da5cb5b146103985761011f565b806305ea4671146101355780631ec82cb8146101b75780633e0c0629146101fa57806347241fad146102335780635fcbd2851461028a575b6002546001600160a01b0316331461013357fe5b005b6101676004803603606081101561014b57600080fd5b508035906001600160a01b0360208201351690604001356105a9565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156101a357818101518382015260200161018b565b505050509050019250505060405180910390f35b3480156101c357600080fd5b50610133600480360360608110156101da57600080fd5b506001600160a01b038135811691602081013590911690604001356108f5565b34801561020657600080fd5b506101336004803603604081101561021d57600080fd5b506001600160a01b03813516906020013561094c565b34801561023f57600080fd5b506102786004803603608081101561025657600080fd5b508035906020810135906001600160a01b0360408201351690606001356109a1565b60408051918252519081900360200190f35b34801561029657600080fd5b5061029f610d1e565b604080516001600160a01b039092168252519081900360200190f35b3480156102c757600080fd5b50610167600480360360808110156102de57600080fd5b508035906020810135906001600160a01b036040820135169060600135610d2d565b34801561030c57600080fd5b5061013361109b565b6102786004803603608081101561032b57600080fd5b508035906020810135906001600160a01b03604082013516906060013561112c565b34801561035957600080fd5b50610278600480360360a081101561037057600080fd5b508035906020810135906040810135906001600160a01b0360608201351690608001356118a6565b3480156103a457600080fd5b5061029f611f60565b3480156103b957600080fd5b506103c2611f6f565b604080519115158252519081900360200190f35b610167600480360360608110156103ec57600080fd5b508035906001600160a01b036020820135169060400135611f80565b34801561041457600080fd5b5061029f6123c3565b61045b600480360360a081101561043357600080fd5b508035906020810135906040810135906001600160a01b0360608201351690608001356123d2565b60408051938452602084019290925282820152519081900360600190f35b34801561048557600080fd5b5061029f61269f565b34801561049a57600080fd5b506104d9600480360360a08110156104b157600080fd5b508035906020810135906040810135906001600160a01b0360608201351690608001356126ae565b6040805192835260208301919091528051918290030190f35b3480156104fe57600080fd5b506101336004803603602081101561051557600080fd5b50356001600160a01b031661285e565b34801561053157600080fd5b506102786004803603602081101561054857600080fd5b50356128b1565b34801561055b57600080fd5b5061029f612a01565b34801561057057600080fd5b506101676004803603608081101561058757600080fd5b508035906020810135906001600160a01b036040820135169060600135612a10565b6060600260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156105fb57600080fd5b505af115801561060f573d6000803e3d6000fd5b50506040805160028082526060808301845295509093509150602083019080388339505060025482519293506001600160a01b03169183915060009061065157fe5b6001600160a01b03928316602091820292909201015260035482519116908290600190811061067c57fe5b6001600160a01b03928316602091820292909201810191909152600154600254604080516370a0823160e01b81523060048201529051606095938416946338ed17399493909316926370a082319260248082019391829003018186803b1580156106e557600080fd5b505afa1580156106f9573d6000803e3d6000fd5b505050506040513d602081101561070f57600080fd5b50516040516001600160e01b031960e084901b16815260048101828152602482018b90526001600160a01b038a1660648301526084820189905260a060448301908152875160a484015287518c9389938d938d939192909160c4909101906020878101910280838360005b8381101561079257818101518382015260200161077a565b505050509050019650505050505050600060405180830381600087803b1580156107bb57600080fd5b505af11580156107cf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156107f857600080fd5b8101908080516040519392919084600160201b82111561081757600080fd5b90830190602082018581111561082c57600080fd5b82518660208202830111600160201b8211171561084857600080fd5b82525081516020918201928201910280838360005b8381101561087557818101518382015260200161085d565b505060029490920184815260608101604052979850929550505050505081602001602082028038833901905050925034836000815181106108b257fe5b602002602001018181525050806001815181106108cb57fe5b6020026020010151836001815181106108e057fe5b60200260200101818152505050509392505050565b6108fd611f6f565b61093c576040805162461bcd60e51b81526020600482018190526024820152600080516020613694833981519152604482015290519081900360640190fd5b610947838383612dd3565b505050565b610954611f6f565b610993576040805162461bcd60e51b81526020600482018190526024820152600080516020613694833981519152604482015290519081900360640190fd5b61099d8282612f3d565b5050565b6004546000906109bc906001600160a01b0316333088613030565b60015460035460025460408051635d5155ef60e11b81526001600160a01b039384166004820152918316602483015260448201899052600060648301819052608483018190523060a484015260c48301879052815190948594169263baa2abde9260e480830193919282900301818787803b158015610a3a57600080fd5b505af1158015610a4e573d6000803e3d6000fd5b505050506040513d6040811015610a6457600080fd5b50805160209182015160408051600280825260608083018452949750929550929383019080388339505060025482519293506001600160a01b031691839150600090610aac57fe5b6001600160a01b039283166020918202929092010152600354825191169082906001908110610ad757fe5b60200260200101906001600160a01b031690816001600160a01b0316815250506060600160009054906101000a90046001600160a01b03166001600160a01b03166338ed1739846000858b8b6040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03166001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015610b9c578181015183820152602001610b84565b505050509050019650505050505050600060405180830381600087803b158015610bc557600080fd5b505af1158015610bd9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015610c0257600080fd5b8101908080516040519392919084600160201b821115610c2157600080fd5b908301906020820185811115610c3657600080fd5b82518660208202830111600160201b82111715610c5257600080fd5b82525081516020918201928201910280838360005b83811015610c7f578181015183820152602001610c67565b50505050919091016040525050600354929350610caa926001600160a01b0316915089905086612dd3565b610cd181600181518110610cba57fe5b60200260200101518561318d90919063ffffffff16565b945087851015610d125760405162461bcd60e51b81526004018080602001828103825260338152602001806136116033913960400191505060405180910390fd5b50505050949350505050565b6004546001600160a01b031681565b600354606090610d48906001600160a01b0316333088613030565b6040805160028082526060808301845292602083019080388339505060035482519293506001600160a01b031691839150600090610d8257fe5b6001600160a01b039283166020918202929092010152600254825191169082906001908110610dad57fe5b6001600160a01b039283166020918202929092018101919091526001546040516338ed173960e01b8152600481018a81526000602483018190523060648401819052608484018a905260a060448501908152885160a4860152885160609896909616966338ed1739968f9694958b958e949193919260c49091019187810191028083838b5b83811015610e4a578181015183820152602001610e32565b505050509050019650505050505050600060405180830381600087803b158015610e7357600080fd5b505af1158015610e87573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015610eb057600080fd5b8101908080516040519392919084600160201b821115610ecf57600080fd5b908301906020820185811115610ee457600080fd5b82518660208202830111600160201b82111715610f0057600080fd5b82525081516020918201928201910280838360005b83811015610f2d578181015183820152602001610f15565b5050505091909101604052505060025483519394506001600160a01b031692632e1a7d4d92508491506001908110610f6157fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610f9f57600080fd5b505af1158015610fb3573d6000803e3d6000fd5b5050604080516002808252606082018352909350915060208301908038833901905050925080600081518110610fe557fe5b602002602001015183600081518110610ffa57fe5b602002602001018181525050478360018151811061101457fe5b60200260200101818152505061103e858460018151811061103157fe5b6020026020010151612f3d565b858360018151811061104c57fe5b602002602001015110156110915760405162461bcd60e51b815260040180806020018281038252602f815260200180613644602f913960400191505060405180910390fd5b5050949350505050565b6110a3611f6f565b6110e2576040805162461bcd60e51b81526020600482018190526024820152600080516020613694833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000841561114c5760035461114c906001600160a01b0316333088613030565b600260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561119c57600080fd5b505af11580156111b0573d6000803e3d6000fd5b5050600254604080516370a0823160e01b81523060048201529051600095506001600160a01b0390921693506370a082319250602480820192602092909190829003018186803b15801561120357600080fd5b505afa158015611217573d6000803e3d6000fd5b505050506040513d602081101561122d57600080fd5b50516004805460408051630240bc6b60e21b815290519394506000938493849384936001600160a01b0390911692630902f1ac92828101926060929190829003018186803b15801561127e57600080fd5b505afa158015611292573d6000803e3d6000fd5b505050506040513d60608110156112a857600080fd5b5080516020918201516002546004805460408051630dfe168160e01b815290516001600160701b03968716995095909416965060009586956001600160a01b03948516959290941693630dfe16819383810193829003018186803b15801561130f57600080fd5b505afa158015611323573d6000803e3d6000fd5b505050506040513d602081101561133957600080fd5b50516001600160a01b031614611350578284611353565b83835b91509150611363878d84846131f0565b60408051600280825260608083018452949a50929850929650919450925060208401915080388339019050509050816113ae576002546003546001600160a01b0391821691166113c2565b6003546002546001600160a01b0391821691165b826000815181106113cf57fe5b60200260200101836001815181106113e357fe5b6001600160a01b0393841660209182029290920181019190915292821690526001546040516338ed173960e01b8152600481018781526000602483018190523060648401819052426084850181905260a060448601908152895160a4870152895196909716976338ed1739978c9794968b969495939493919260c49091019187820191028083838b5b8381101561148457818101518382015260200161146c565b505050509050019650505050505050600060405180830381600087803b1580156114ad57600080fd5b505af11580156114c1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156114ea57600080fd5b8101908080516040519392919084600160201b82111561150957600080fd5b90830190602082018581111561151e57600080fd5b82518660208202830111600160201b8211171561153a57600080fd5b82525081516020918201928201910280838360005b8381101561156757818101518382015260200161154f565b505050509190910160408181526001546003546002546370a0823160e01b855230600486015292516001600160a01b03928316995063e8e3370098509082169650911693508492506370a0823191602480820192602092909190829003018186803b1580156115d557600080fd5b505afa1580156115e9573d6000803e3d6000fd5b505050506040513d60208110156115ff57600080fd5b5051600254604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561164c57600080fd5b505afa158015611660573d6000803e3d6000fd5b505050506040513d602081101561167657600080fd5b5051604080516001600160e01b031960e088901b1681526001600160a01b03958616600482015293851660248501526044840192909252606483015260006084830181905260a48301819052928c1660c483015260e482018b9052516101048083019360609383900390910190829087803b1580156116f457600080fd5b505af1158015611708573d6000803e3d6000fd5b505050506040513d606081101561171e57600080fd5b5060409081015160035482516370a0823160e01b815230600482015292519197506000926001600160a01b03909116916370a0823191602480820192602092909190829003018186803b15801561177457600080fd5b505afa158015611788573d6000803e3d6000fd5b505050506040513d602081101561179e57600080fd5b5051600254604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156117f157600080fd5b505afa158015611805573d6000803e3d6000fd5b505050506040513d602081101561181b57600080fd5b50519050811561183c5760035461183c906001600160a01b03163384612dd3565b801561185957600254611859906001600160a01b03163383612dd3565b898710156118985760405162461bcd60e51b81526004018080602001828103825260328152602001806135b96032913960400191505060405180910390fd5b505050505050949350505050565b600085156118c6576002546118c6906001600160a01b0316333089613030565b84156118e4576003546118e4906001600160a01b0316333088613030565b600080600080600460009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561193857600080fd5b505afa15801561194c573d6000803e3d6000fd5b505050506040513d606081101561196257600080fd5b5080516020918201516002546004805460408051630dfe168160e01b815290516001600160701b03968716995095909416965060009586956001600160a01b03948516959290941693630dfe16819383810193829003018186803b1580156119c957600080fd5b505afa1580156119dd573d6000803e3d6000fd5b505050506040513d60208110156119f357600080fd5b50516001600160a01b031614611a0a578284611a0d565b83835b91509150611a1d8c8c84846131f0565b60408051600280825260608083018452949a5092985092965091945092506020840191508038833901905050905081611a68576002546003546001600160a01b039182169116611a7c565b6003546002546001600160a01b0391821691165b82600081518110611a8957fe5b6020026020010183600181518110611a9d57fe5b6001600160a01b0393841660209182029290920181019190915292821690526001546040516338ed173960e01b8152600481018781526000602483018190523060648401819052426084850181905260a060448601908152895160a4870152895196909716976338ed1739978c9794968b969495939493919260c49091019187820191028083838b5b83811015611b3e578181015183820152602001611b26565b505050509050019650505050505050600060405180830381600087803b158015611b6757600080fd5b505af1158015611b7b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015611ba457600080fd5b8101908080516040519392919084600160201b821115611bc357600080fd5b908301906020820185811115611bd857600080fd5b82518660208202830111600160201b82111715611bf457600080fd5b82525081516020918201928201910280838360005b83811015611c21578181015183820152602001611c09565b505050509190910160408181526001546003546002546370a0823160e01b855230600486015292516001600160a01b03928316995063e8e3370098509082169650911693508492506370a0823191602480820192602092909190829003018186803b158015611c8f57600080fd5b505afa158015611ca3573d6000803e3d6000fd5b505050506040513d6020811015611cb957600080fd5b5051600254604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015611d0657600080fd5b505afa158015611d1a573d6000803e3d6000fd5b505050506040513d6020811015611d3057600080fd5b5051604080516001600160e01b031960e088901b1681526001600160a01b03958616600482015293851660248501526044840192909252606483015260006084830181905260a48301819052928b1660c483015260e482018a9052516101048083019360609383900390910190829087803b158015611dae57600080fd5b505af1158015611dc2573d6000803e3d6000fd5b505050506040513d6060811015611dd857600080fd5b5060409081015160035482516370a0823160e01b815230600482015292519196506000926001600160a01b03909116916370a0823191602480820192602092909190829003018186803b158015611e2e57600080fd5b505afa158015611e42573d6000803e3d6000fd5b505050506040513d6020811015611e5857600080fd5b5051600254604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015611eab57600080fd5b505afa158015611ebf573d6000803e3d6000fd5b505050506040513d6020811015611ed557600080fd5b505190508115611ef657600354611ef6906001600160a01b03163384612dd3565b8015611f1357600254611f13906001600160a01b03163383612dd3565b88861015611f525760405162461bcd60e51b81526004018080602001828103825260328152602001806135b96032913960400191505060405180910390fd5b505050505095945050505050565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b6060600260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015611fd257600080fd5b505af1158015611fe6573d6000803e3d6000fd5b5050600254604080516370a0823160e01b81523060048201529051600095506001600160a01b0390921693506370a082319250602480820192602092909190829003018186803b15801561203957600080fd5b505afa15801561204d573d6000803e3d6000fd5b505050506040513d602081101561206357600080fd5b5051604080516002808252606080830184529394509091602083019080388339505060025482519293506001600160a01b0316918391506000906120a357fe5b6001600160a01b0392831660209182029290920101526003548251911690829060019081106120ce57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250506060600160009054906101000a90046001600160a01b03166001600160a01b0316638803dbee8885858a8a6040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03166001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b8381101561219257818101518382015260200161217a565b505050509050019650505050505050600060405180830381600087803b1580156121bb57600080fd5b505af11580156121cf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156121f857600080fd5b8101908080516040519392919084600160201b82111561221757600080fd5b90830190602082018581111561222c57600080fd5b82518660208202830111600160201b8211171561224857600080fd5b82525081516020918201928201910280838360005b8381101561227557818101518382015260200161225d565b505060029490920184815260608101604052979850929550505050505081602001602082028038833901905050935034846000815181106122b257fe5b602002602001018181525050806001815181106122cb57fe5b6020026020010151846001815181106122e057fe5b602002602001018181525050806000815181106122f957fe5b60200260200101518311156123b95760025481516001600160a01b0390911690632e1a7d4d9061234590849060009061232e57fe5b60200260200101518661324b90919063ffffffff16565b6040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561237b57600080fd5b505af115801561238f573d6000803e3d6000fd5b50505050473403846000815181106123a357fe5b6020026020010181815250506123b98647612f3d565b5050509392505050565b6002546001600160a01b031681565b600354600090819081906123f1906001600160a01b031633308b613030565b600260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561244157600080fd5b505af1158015612455573d6000803e3d6000fd5b5050600254604080516370a0823160e01b81523060048201529051600095506001600160a01b0390921693506370a082319250602480820192602092909190829003018186803b1580156124a857600080fd5b505afa1580156124bc573d6000803e3d6000fd5b505050506040513d60208110156124d257600080fd5b50516001546003546002546040805162e8e33760e81b81526001600160a01b0393841660048201529183166024830152604482018e905260648201859052608482018d9052600060a483018190528b841660c484015260e483018b9052905194955093919092169163e8e337009161010480830192606092919082900301818787803b15801561256157600080fd5b505af1158015612575573d6000803e3d6000fd5b505050506040513d606081101561258b57600080fd5b508051602082015160409092015190965093509050848a11156125ce576003546125ce906001600160a01b0316336125c98d8963ffffffff61324b16565b612dd3565b6002546001600160a01b0316632e1a7d4d6125ef848463ffffffff61324b16565b6040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561262557600080fd5b505af1158015612639573d6000803e3d6000fd5b505047340395505084159050612653576126533347612f3d565b878410156126925760405162461bcd60e51b815260040180806020018281038252602f8152602001806136b4602f913960400191505060405180910390fd5b5050955095509592505050565b6003546001600160a01b031681565b60045460009081906126cb906001600160a01b031633308a613030565b60015460035460025460408051635d5155ef60e11b81526001600160a01b0393841660048201529183166024830152604482018b9052606482018a90526000608483018190523060a484015260c4830188905281519094939093169263baa2abde9260e480820193929182900301818787803b15801561274a57600080fd5b505af115801561275e573d6000803e3d6000fd5b505050506040513d604081101561277457600080fd5b5080516020909101516003549194509150612799906001600160a01b03168685612dd3565b60025460408051632e1a7d4d60e01b81526004810184905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b1580156127e657600080fd5b505af11580156127fa573d6000803e3d6000fd5b505050504791506000821115612814576128143347612f3d565b858210156128535760405162461bcd60e51b815260040180806020018281038252602f815260200180613644602f913960400191505060405180910390fd5b509550959350505050565b612866611f6f565b6128a5576040805162461bcd60e51b81526020600482018190526024820152600080516020613694833981519152604482015290519081900360640190fd5b6128ae816132a8565b50565b600080600260009054906101000a90046001600160a01b03166001600160a01b03166336bdee746040518163ffffffff1660e01b815260040160206040518083038186803b15801561290257600080fd5b505afa158015612916573d6000803e3d6000fd5b505050506040513d602081101561292c57600080fd5b5051905080156129f6576129f1816129e560016129d9856129cd600260009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561299457600080fd5b505afa1580156129a8573d6000803e3d6000fd5b505050506040513d60208110156129be57600080fd5b50518a9063ffffffff61334816565b9063ffffffff61318d16565b9063ffffffff61324b16565b9063ffffffff6133a116565b6129f8565b825b9150505b919050565b6001546001600160a01b031681565b600354606090612a2b906001600160a01b0316333087613030565b6040805160028082526060808301845292602083019080388339505060035482519293506001600160a01b031691839150600090612a6557fe5b6001600160a01b039283166020918202929092010152600254825191169082906001908110612a9057fe5b6001600160a01b03928316602091820292909201015260025460408051632e1a7d4d60e01b815260006004820181905291519290931692632e1a7d4d926024808301939282900301818387803b158015612ae957600080fd5b505af1158015612afd573d6000803e3d6000fd5b5050600154606092506001600160a01b03169050638803dbee612b1f896128b1565b888530896040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03166001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015612b9c578181015183820152602001612b84565b505050509050019650505050505050600060405180830381600087803b158015612bc557600080fd5b505af1158015612bd9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015612c0257600080fd5b8101908080516040519392919084600160201b821115612c2157600080fd5b908301906020820185811115612c3657600080fd5b82518660208202830111600160201b82111715612c5257600080fd5b82525081516020918201928201910280838360005b83811015612c7f578181015183820152602001612c67565b5050505091909101604052505060025483519394506001600160a01b031692632e1a7d4d92508491506001908110612cb357fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015612cf157600080fd5b505af1158015612d05573d6000803e3d6000fd5b5050604080516002808252606082018352909350915060208301908038833901905050925080600081518110612d3757fe5b602002602001015183600081518110612d4c57fe5b6020026020010181815250504783600181518110612d6657fe5b602002602001018181525050612d7c8547612f3d565b82600081518110612d8957fe5b6020026020010151861115611091576003548351611091916001600160a01b03169033906125c9908790600090612dbc57fe5b60200260200101518a61324b90919063ffffffff16565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b60208310612e505780518252601f199092019160209182019101612e31565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612eb2576040519150601f19603f3d011682016040523d82523d6000602084013e612eb7565b606091505b5091509150818015612ee5575080511580612ee55750808060200190516020811015612ee257600080fd5b50515b612f36576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b60208310612f895780518252601f199092019160209182019101612f6a565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114612feb576040519150601f19603f3d011682016040523d82523d6000602084013e612ff0565b606091505b50509050806109475760405162461bcd60e51b81526004018080602001828103825260238152602001806136e36023913960400191505060405180910390fd5b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106130b55780518252601f199092019160209182019101613096565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613117576040519150601f19603f3d011682016040523d82523d6000602084013e61311c565b606091505b509150915081801561314a57508051158061314a575080806020019051602081101561314757600080fd5b50515b6131855760405162461bcd60e51b81526004018080602001828103825260248152602001806137066024913960400191505060405180910390fd5b505050505050565b6000828201838110156131e7576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b600080613203858563ffffffff61334816565b613213878563ffffffff61334816565b1061322f576132248686868661340b565b915060009050613242565b61323b8587858761340b565b9150600190505b94509492505050565b6000828211156132a2576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6001600160a01b0381166132ed5760405162461bcd60e51b81526004018080602001828103825260268152602001806135eb6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600082613357575060006131ea565b8282028284828161336457fe5b04146131e75760405162461bcd60e51b81526004018080602001828103825260218152602001806136736021913960400191505060405180910390fd5b60008082116133f7576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b600082848161340257fe5b04949350505050565b600061341d848463ffffffff61334816565b61342d868463ffffffff61334816565b101561346b576040805162461bcd60e51b815260206004820152600860248201526714995d995c9cd95960c21b604482015290519081900360640190fd5b6103e560006134826107cd8663ffffffff61334816565b905060006134a9613499888863ffffffff61334816565b6129d98a8863ffffffff61334816565b905060006134e2876134d66134c48b8a63ffffffff61318d16565b6129e5866103e863ffffffff61334816565b9063ffffffff61334816565b905060006134fb60046134d6878563ffffffff61334816565b9050600061351b613516836129cd888063ffffffff61334816565b613567565b9050600061352f828763ffffffff61324b16565b9050600061354488600263ffffffff61334816565b9050613556828263ffffffff6133a116565b9d9c50505050505050505050505050565b600060038211156135aa575080600160028204015b818110156135a45780915060028182858161359357fe5b04018161359c57fe5b04905061357c565b506129fc565b81156129fc5750600191905056fe4962455448526f757465723a2072656365697665206c657373206c70546f6b656e207468616e20616d6f756e744c504d696e4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734962455448526f757465723a2072656365697665206c65737320416c706861207468616e20616d6f756e74416c7068614d696e4962455448526f757465723a2072656365697665206c65737320455448207468616e20616d6f756e744554486d696e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724962455448526f757465723a2072657175697265206d6f726520455448207468616e20616d6f756e744554486d696e5472616e7366657248656c7065723a204554485f5452414e534645525f4641494c45445472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544a265627a7a72315820f77379384557f8f54d21d798975b1723e099e8efaf9a1525450fd0f7109975b664736f6c63430005100032
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d00000000000000000000000067b66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a000000000000000000000000a1faa113cbe53436df28ff0aee54275c13b40975
-----Decoded View---------------
Arg [0] : _router (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [1] : _ibETH (address): 0x67B66C99D3Eb37Fa76Aa3Ed1ff33E8e39F0b9c7A
Arg [2] : _alpha (address): 0xa1faa113cbE53436Df28FF0aEe54275c13B40975
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [1] : 00000000000000000000000067b66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a
Arg [2] : 000000000000000000000000a1faa113cbe53436df28ff0aee54275c13b40975
Deployed Bytecode Sourcemap
23230:17210:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24112:5;;-1:-1:-1;;;;;24112:5:0;24098:10;:19;24091:27;;;;23230:17210;35295:664;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35295:664:0;;;-1:-1:-1;;;;;35295:664: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;35295:664:0;;;;;;;;;;;;;;;;;39919:166;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39919:166:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;39919:166:0;;;;;;;;;;;;;;;;;:::i;40287:150::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40287:150:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;40287:150:0;;;;;;;;:::i;33999:1137::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33999:1137:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;33999:1137:0;;;;;;;;-1:-1:-1;;;;;33999:1137:0;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;23392:22;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23392:22:0;;;:::i;:::-;;;;-1:-1:-1;;;;;23392:22:0;;;;;;;;;;;;;;37326:945;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37326:945:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;37326:945:0;;;;;;;;-1:-1:-1;;;;;37326:945:0;;;;;;;;;;:::i;1724:140::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1724:140:0;;;:::i;30416:2107::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;30416:2107:0;;;;;;;;-1:-1:-1;;;;;30416:2107:0;;;;;;;;;;:::i;28162:2115::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28162:2115:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;28162:2115:0;;;;;;;;;;;;;-1:-1:-1;;;;;28162:2115:0;;;;;;;;;;:::i;913:79::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;913:79:0;;;:::i;1279:92::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1279:92:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;38423:1177;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38423:1177:0;;;-1:-1:-1;;;;;38423:1177:0;;;;;;;;;;:::i;23332:20::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23332:20:0;;;:::i;24760:1496::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;24760:1496:0;;;;;;;;;;;;;-1:-1:-1;;;;;24760:1496:0;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;23360:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23360:20:0;;;:::i;32713:1079::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32713:1079:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;32713:1079:0;;;;;;;;;;;;;-1:-1:-1;;;;;32713:1079:0;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2019:109;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2019:109:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2019:109:0;-1:-1:-1;;;;;2019:109:0;;:::i;24311:267::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24311:267:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24311:267:0;;:::i;23304:21::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23304:21:0;;;:::i;36112:1061::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36112:1061:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;36112:1061:0;;;;;;;;-1:-1:-1;;;;;36112:1061:0;;;;;;;;;;:::i;35295:664::-;35450:24;35520:5;;;;;;;;;-1:-1:-1;;;;;35520:5:0;-1:-1:-1;;;;;35514:20:0;;35541:9;35514:39;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35514:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;35591:16:0;;;35605:1;35591:16;;;35567:21;35591:16;;;;;35567:21;-1:-1:-1;35591:16:0;;-1:-1:-1;35605:1:0;-1:-1:-1;35591:16:0;;;;;105:10:-1;35591:16:0;88:34:-1;-1:-1;;35628:5:0;;35618:7;;;;-1:-1:-1;;;;;;35628:5:0;;35618:7;;-1:-1:-1;35628:5:0;;35618:7;;;;-1:-1:-1;;;;;35618:15:0;;;:7;;;;;;;;;:15;35654:5;;35644:7;;35654:5;;;35644:4;;35654:5;;35644:7;;;;;;-1:-1:-1;;;;;35644:15:0;;;:7;;;;;;;;;;:15;;;;35725:6;;35764:5;;35758:37;;;-1:-1:-1;;;35758:37:0;;35789:4;35758:37;;;;;;35675:28;;35725:6;;;;35706:51;;35764:5;;;;;35758:22;;:37;;;;;;;;;;;35764:5;35758:37;;;5:2:-1;;;;30:1;27;20:12;5:2;35758:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35758:37:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35758:37:0;35706:129;;-1:-1:-1;;;;;;35706:129:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35706:129:0;;;;;;;;;;;;;;;;;;;;;;;;;;;35797:17;;35816:4;;35822:2;;35826:8;;35706:129;;;;;;;;;35758:37;35706:129;;;;;;;;-1:-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;35706:129:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35706:129:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35706:129:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;35706:129:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;13:2;5:11;;2:2;;;29:1;26;19:12;2:2;35706:129:0;;;;;;;;;;;;;-1:-1:-1;;;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1;;;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;373:25;;-1:-1;35706:129:0;;421:4:-1;412:14;;;;35706:129:0;;;;;412:14:-1;35706:129:0;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;-1:-1;;35870:1:0;35706:129;;;;35856:16;;;;;;35706:129;35856:16;35675:160;;-1:-1:-1;35870:1:0;;-1:-1:-1;;;;;;35856:16:0;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;35856:16:0;35846:26;;35904:9;35891:7;35899:1;35891:10;;;;;;;;;;;;;:22;;;;;35937:11;35949:1;35937:14;;;;;;;;;;;;;;35924:7;35932:1;35924:10;;;;;;;;;;;;;:27;;;;;35295:664;;;;;;;:::o;39919:166::-;1125:9;:7;:9::i;:::-;1117:54;;;;;-1:-1:-1;;;1117:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1117:54:0;;;;;;;;;;;;;;;40016:45;40044:5;40051:2;40055:5;40016:27;:45::i;:::-;39919:166;;;:::o;40287:150::-;1125:9;:7;:9::i;:::-;1117:54;;;;;-1:-1:-1;;;1117:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1117:54:0;;;;;;;;;;;;;;;40372:41;40403:2;40407:5;40372:30;:41::i;:::-;40287:150;;:::o;33999:1137::-;34262:7;;34180:19;;34230:78;;-1:-1:-1;;;;;34262:7:0;34271:10;34291:4;34298:9;34230:31;:78::i;:::-;34405:6;;34443:5;;34463;;34386:200;;;-1:-1:-1;;;34386:200:0;;-1:-1:-1;;;;;34443:5:0;;;34386:200;;;;34463:5;;;34386:200;;;;;;;;;;34330:25;34386:200;;;;;;;;;;;;34547:4;34386:200;;;;;;;;;;;;34330:25;;;;34405:6;;34386:42;;:200;;;;;;;;;;;;34330:25;34405:6;34386:200;;;5:2:-1;;;;30:1;27;20:12;5:2;34386:200:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34386:200:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;34386:200:0;;;;;;;;34629:16;;34643:1;34629:16;;;34605:21;34629:16;;;;;34386:200;;-1:-1:-1;34386:200:0;;-1:-1:-1;34605:21:0;;34629:16;;;34386:200;105:10:-1;34629:16:0;88:34:-1;-1:-1;;34666:5:0;;34656:7;;;;-1:-1:-1;;;;;;34666:5:0;;34656:7;;-1:-1:-1;34666:5:0;;34656:7;;;;-1:-1:-1;;;;;34656:15:0;;;:7;;;;;;;;;:15;34692:5;;34682:7;;34692:5;;;34682:4;;34692:5;;34682:7;;;;;;;;;;;:15;-1:-1:-1;;;;;34682:15:0;;;-1:-1:-1;;;;;34682:15:0;;;;;34708:24;34754:6;;;;;;;;;-1:-1:-1;;;;;34754:6:0;-1:-1:-1;;;;;34735:51:0;;34787:17;34806:1;34809:4;34815:2;34819:8;34735:93;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34735:93:0;-1:-1:-1;;;;;34735:93:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;34735:93:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34735:93:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34735:93:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;34735:93:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;13:2;5:11;;2:2;;;29:1;26;19:12;2:2;34735:93:0;;;;;;;;;;;;;-1:-1:-1;;;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1;;;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;373:25;;-1:-1;34735:93:0;;421:4:-1;412:14;;;;34735:93:0;;;;;412:14:-1;34735:93:0;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;-1:-1;;;;34735:93:0;;;;;;-1:-1:-1;;34882:5:0;;34708:120;;-1:-1:-1;34854:57:0;;-1:-1:-1;;;;;34882:5:0;;-1:-1:-1;34889:2:0;;-1:-1:-1;34893:17:0;34854:27;:57::i;:::-;34960:33;34982:7;34990:1;34982:10;;;;;;;;;;;;;;34960:17;:21;;:33;;;;:::i;:::-;34946:47;;35027:14;35012:11;:29;;35004:93;;;;-1:-1:-1;;;35004:93:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33999:1137;;;;;;;;;;:::o;23392:22::-;;;-1:-1:-1;;;;;23392:22:0;;:::o;37326:945::-;37573:5;;37504:24;;37541:80;;-1:-1:-1;;;;;37573:5:0;37580:10;37600:4;37607:13;37541:31;:80::i;:::-;37657:16;;;37671:1;37657:16;;;37633:21;37657:16;;;;;37633:21;37657:16;;;;;105:10:-1;37657:16:0;88:34:-1;-1:-1;;37694:5:0;;37684:7;;;;-1:-1:-1;;;;;;37694:5:0;;37684:7;;-1:-1:-1;37694:5:0;;37684:7;;;;-1:-1:-1;;;;;37684:15:0;;;:7;;;;;;;;;:15;37720:5;;37710:7;;37720:5;;;37710:4;;37720:5;;37710:7;;;;;;-1:-1:-1;;;;;37710:15:0;;;:7;;;;;;;;;;:15;;;;37786:6;;37767:100;;-1:-1:-1;;;37767:100:0;;;;;;;;37786:6;37767:100;;;;;;37851:4;37767:100;;;;;;;;;;;;;;;;;;;;;;;;;;;37736:28;;37786:6;;;;;37767:51;;37819:13;;37786:6;;37837:4;;37858:8;;37767:100;;;;;;;;;;;;;;;;;37786:6;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;37767:100:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37767:100:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37767:100:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;37767:100:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;13:2;5:11;;2:2;;;29:1;26;19:12;2:2;37767:100:0;;;;;;;;;;;;;-1:-1:-1;;;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1;;;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;373:25;;-1:-1;37767:100:0;;421:4:-1;412:14;;;;37767:100:0;;;;;412:14:-1;37767:100:0;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;-1:-1;;;;37767:100:0;;;;;;-1:-1:-1;;37908:5:0;;37924:14;;37736:131;;-1:-1:-1;;;;;;37908:5:0;;37902:21;;-1:-1:-1;37736:131:0;;-1:-1:-1;37908:5:0;;37924:14;;;;;;;;;;;;37902:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37902:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;37968:16:0;;;37982:1;37968:16;;;;;;;;;;-1:-1:-1;37982:1:0;-1:-1:-1;37968:16:0;;;;;105:10:-1;37968:16:0;88:34:-1;136:17;;-1:-1;37968:16:0;37958:26;;38008:11;38020:1;38008:14;;;;;;;;;;;;;;37995:7;38003:1;37995:10;;;;;;;;;;;;;:27;;;;;38046:21;38033:7;38041:1;38033:10;;;;;;;;;;;;;:34;;;;;38078:46;38109:2;38113:7;38121:1;38113:10;;;;;;;;;;;;;;38078:30;:46::i;:::-;38157:15;38143:7;38151:1;38143:10;;;;;;;;;;;;;;:29;;38135:89;;;;-1:-1:-1;;;38135:89:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37326:945;;;;;;;;:::o;1724:140::-;1125:9;:7;:9::i;:::-;1117:54;;;;;-1:-1:-1;;;1117:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1117:54:0;;;;;;;;;;;;;;;1823:1;1807:6;;1786:40;;-1:-1:-1;;;;;1807:6:0;;;;1786:40;;1823:1;;1786:40;1854:1;1837:19;;-1:-1:-1;;;;;;1837:19:0;;;1724:140::o;30416:2107::-;30689:17;30749:22;;30745:144;;30820:5;;30788:85;;-1:-1:-1;;;;;30820:5:0;30827:10;30847:4;30854:18;30788:31;:85::i;:::-;30912:5;;;;;;;;;-1:-1:-1;;;;;30912:5:0;-1:-1:-1;;;;;30906:20:0;;30933:9;30906:39;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30906:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;30994:5:0;;30988:37;;;-1:-1:-1;;;30988:37:0;;31019:4;30988:37;;;;;;30959:26;;-1:-1:-1;;;;;;30994:5:0;;;;-1:-1:-1;30988:22:0;;-1:-1:-1;30988:37:0;;;;;;;;;;;;;;;30994:5;30988:37;;;5:2:-1;;;;30:1;27;20:12;5:2;30988:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30988:37:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30988:37:0;31165:7;;;31150:37;;;-1:-1:-1;;;31150:37:0;;;;30988;;-1:-1:-1;31054:15:0;;;;;;;;-1:-1:-1;;;;;31165:7:0;;;;31150:35;;:37;;;;;;;;;;;;;31165:7;31150:37;;;5:2:-1;;;;30:1;27;20:12;5:2;31150:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31150:37:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31150:37:0;;;;;;;31285:5;;31264:7;;;31150:37;31249:32;;-1:-1:-1;;;31249:32:0;;;;-1:-1:-1;;;;;31121:66:0;;;;-1:-1:-1;31121:66:0;;;;;-1:-1:-1;31203:20:0;;;;-1:-1:-1;;;;;31285:5:0;;;;31264:7;;;;;31249:30;;:32;;;;;;;;;31264:7;31249:32;;;5:2:-1;;;;30:1;27;20:12;5:2;31249:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31249:32:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31249:32:0;-1:-1:-1;;;;;31249:41:0;;:63;;31305:2;31309;31249:63;;;31294:2;31298;31249:63;31202:110;;;;31351:82;31366:18;31386;31406:12;31420;31351:14;:82::i;:::-;31487:16;;;31501:1;31487:16;;;31463:21;31487:16;;;;;31327:106;;-1:-1:-1;31327:106:0;;-1:-1:-1;31463:21:0;;-1:-1:-1;31487:16:0;;-1:-1:-1;31501:1:0;-1:-1:-1;31487:16:0;;;;-1:-1:-1;31487:16:0;105:10:-1;31487:16:0;88:34:-1;136:17;;-1:-1;31487:16:0;31463:40;;31535:10;:44;;31566:5;;31573;;-1:-1:-1;;;;;31566:5:0;;;;31573;31535:44;;;31549:5;;31556;;-1:-1:-1;;;;;31549:5:0;;;;31556;31535:44;31515:4;31520:1;31515:7;;;;;;;;;;;;;31524:4;31529:1;31524:7;;;;;;;;-1:-1:-1;;;;;31514:65:0;;;31524:7;;;;;;;;;;31514:65;;;;;;;;;31617:6;;31598:89;;-1:-1:-1;;;31598:89:0;;;;;;;;31617:6;31598:89;;;;;;31676:4;31598:89;;;;;;31683:3;31598:89;;;;;;;;;;;;;;;;;;;;;31617:6;;;;;31598:51;;31650:7;;31617:6;;31662:4;;31676;;31683:3;;31598:89;;;;;;;;;;;;;;;;31617:6;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;31598:89:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31598:89:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31598:89:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;31598:89:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;13:2;5:11;;2:2;;;29:1;26;19:12;2:2;31598:89:0;;;;;;;;;;;;;-1:-1:-1;;;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1;;;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;373:25;;-1:-1;31598:89:0;;421:4:-1;412:14;;;;31598:89:0;;;;;412:14:-1;31598:89:0;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;-1:-1;;;;31598:89:0;;;;;;;;31750:6;;31785:5;;31805;;-1:-1:-1;;;31825:38:0;;31857:4;31825:38;;;;;;-1:-1:-1;;;;;31750:6:0;;;;-1:-1:-1;31731:39:0;;-1:-1:-1;31785:5:0;;;;-1:-1:-1;31805:5:0;;;-1:-1:-1;31785:5:0;;-1:-1:-1;31825:23:0;;:38;;;;;;;;;;;;;;;31785:5;31825:38;;;5:2:-1;;;;30:1;27;20:12;5:2;31825:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31825:38:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31825:38:0;31896:5;;31890:37;;;-1:-1:-1;;;31890:37:0;;31921:4;31890:37;;;;;;-1:-1:-1;;;;;31896:5:0;;;;31890:22;;:37;;;;;31825:38;;31890:37;;;;;;;;31896:5;31890:37;;;5:2:-1;;;;30:1;27;20:12;5:2;31890:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31890:37:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31890:37:0;31731:291;;;-1:-1:-1;;;;;;31731:291:0;;;;;;;-1:-1:-1;;;;;31731:291:0;;;;;;;;;;;;;;;;;;;;;;;;;31942:1;31731:291;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:2:-1;;;;30:1;27;20:12;5:2;31731:291:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31731:291:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31731:291:0;;;;;32068:5;;32061:38;;-1:-1:-1;;;32061:38:0;;32093:4;32061:38;;;;;;31731:291;;-1:-1:-1;32041:17:0;;-1:-1:-1;;;;;32068:5:0;;;;32061:23;;:38;;;;;31731:291;;32061:38;;;;;;;;32068:5;32061:38;;;5:2:-1;;;;30:1;27;20:12;5:2;32061:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32061:38:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32061:38:0;32136:5;;32130:37;;;-1:-1:-1;;;32130:37:0;;32161:4;32130:37;;;;;;32061:38;;-1:-1:-1;32110:17:0;;-1:-1:-1;;;;;32136:5:0;;;;32130:22;;:37;;;;;32061:38;;32130:37;;;;;;;;32136:5;32130:37;;;5:2:-1;;;;30:1;27;20:12;5:2;32130:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32130:37:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32130:37:0;;-1:-1:-1;32182:13:0;;32178:103;;32240:5;;32212:57;;-1:-1:-1;;;;;32240:5:0;32247:10;32259:9;32212:27;:57::i;:::-;32299:13;;32295:103;;32357:5;;32329:57;;-1:-1:-1;;;;;32357:5:0;32364:10;32376:9;32329:27;:57::i;:::-;32449:11;32436:9;:24;;32428:87;;;;-1:-1:-1;;;32428:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30416:2107;;;;;;;;;;;;:::o;28162:2115::-;28452:17;28504:22;;28500:144;;28575:5;;28543:85;;-1:-1:-1;;;;;28575:5:0;28582:10;28602:4;28609:18;28543:31;:85::i;:::-;28658:22;;28654:144;;28729:5;;28697:85;;-1:-1:-1;;;;;28729:5:0;28736:10;28756:4;28763:18;28697:31;:85::i;:::-;28816:15;28842;28884:10;28896;28927:7;;;;;;;;;-1:-1:-1;;;;;28927:7:0;-1:-1:-1;;;;;28912:35:0;;:37;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28912:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28912:37:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28912:37:0;;;;;;;29047:5;;29026:7;;;28912:37;29011:32;;-1:-1:-1;;;29011:32:0;;;;-1:-1:-1;;;;;28883:66:0;;;;-1:-1:-1;28883:66:0;;;;;-1:-1:-1;28965:20:0;;;;-1:-1:-1;;;;;29047:5:0;;;;29026:7;;;;;29011:30;;:32;;;;;;;;;29026:7;29011:32;;;5:2:-1;;;;30:1;27;20:12;5:2;29011:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29011:32:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29011:32:0;-1:-1:-1;;;;;29011:41:0;;:63;;29067:2;29071;29011:63;;;29056:2;29060;29011:63;28964:110;;;;29113:82;29128:18;29148;29168:12;29182;29113:14;:82::i;:::-;29241:16;;;29255:1;29241:16;;;29217:21;29241:16;;;;;29089:106;;-1:-1:-1;29089:106:0;;-1:-1:-1;29217:21:0;;-1:-1:-1;29241:16:0;;-1:-1:-1;29255:1:0;-1:-1:-1;29241:16:0;;;;-1:-1:-1;29241:16:0;105:10:-1;29241:16:0;88:34:-1;136:17;;-1:-1;29241:16:0;29217:40;;29289:10;:44;;29320:5;;29327;;-1:-1:-1;;;;;29320:5:0;;;;29327;29289:44;;;29303:5;;29310;;-1:-1:-1;;;;;29303:5:0;;;;29310;29289:44;29269:4;29274:1;29269:7;;;;;;;;;;;;;29278:4;29283:1;29278:7;;;;;;;;-1:-1:-1;;;;;29268:65:0;;;29278:7;;;;;;;;;;29268:65;;;;;;;;;29371:6;;29352:89;;-1:-1:-1;;;29352:89:0;;;;;;;;29371:6;29352:89;;;;;;29430:4;29352:89;;;;;;29437:3;29352:89;;;;;;;;;;;;;;;;;;;;;29371:6;;;;;29352:51;;29404:7;;29371:6;;29416:4;;29430;;29437:3;;29352:89;;;;;;;;;;;;;;;;29371:6;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;29352:89:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29352:89:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29352:89:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;29352:89:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;13:2;5:11;;2:2;;;29:1;26;19:12;2:2;29352:89:0;;;;;;;;;;;;;-1:-1:-1;;;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1;;;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;373:25;;-1:-1;29352:89:0;;421:4:-1;412:14;;;;29352:89:0;;;;;412:14:-1;29352:89:0;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;-1:-1;;;;29352:89:0;;;;;;;;29504:6;;29539:5;;29559;;-1:-1:-1;;;29579:38:0;;29611:4;29579:38;;;;;;-1:-1:-1;;;;;29504:6:0;;;;-1:-1:-1;29485:39:0;;-1:-1:-1;29539:5:0;;;;-1:-1:-1;29559:5:0;;;-1:-1:-1;29539:5:0;;-1:-1:-1;29579:23:0;;:38;;;;;;;;;;;;;;;29539:5;29579:38;;;5:2:-1;;;;30:1;27;20:12;5:2;29579:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29579:38:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29579:38:0;29650:5;;29644:37;;;-1:-1:-1;;;29644:37:0;;29675:4;29644:37;;;;;;-1:-1:-1;;;;;29650:5:0;;;;29644:22;;:37;;;;;29579:38;;29644:37;;;;;;;;29650:5;29644:37;;;5:2:-1;;;;30:1;27;20:12;5:2;29644:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29644:37:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29644:37:0;29485:291;;;-1:-1:-1;;;;;;29485:291:0;;;;;;;-1:-1:-1;;;;;29485:291:0;;;;;;;;;;;;;;;;;;;;;;;;;29696:1;29485:291;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:2:-1;;;;30:1;27;20:12;5:2;29485:291:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29485:291:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29485:291:0;;;;;29822:5;;29815:38;;-1:-1:-1;;;29815:38:0;;29847:4;29815:38;;;;;;29485:291;;-1:-1:-1;29795:17:0;;-1:-1:-1;;;;;29822:5:0;;;;29815:23;;:38;;;;;29485:291;;29815:38;;;;;;;;29822:5;29815:38;;;5:2:-1;;;;30:1;27;20:12;5:2;29815:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29815:38:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29815:38:0;29890:5;;29884:37;;;-1:-1:-1;;;29884:37:0;;29915:4;29884:37;;;;;;29815:38;;-1:-1:-1;29864:17:0;;-1:-1:-1;;;;;29890:5:0;;;;29884:22;;:37;;;;;29815:38;;29884:37;;;;;;;;29890:5;29884:37;;;5:2:-1;;;;30:1;27;20:12;5:2;29884:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29884:37:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29884:37:0;;-1:-1:-1;29936:13:0;;29932:103;;29994:5;;29966:57;;-1:-1:-1;;;;;29994:5:0;30001:10;30013:9;29966:27;:57::i;:::-;30053:13;;30049:103;;30111:5;;30083:57;;-1:-1:-1;;;;;30111:5:0;30118:10;30130:9;30083:27;:57::i;:::-;30203:11;30190:9;:24;;30182:87;;;;-1:-1:-1;;;30182:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28162:2115;;;;;;;;;;;;:::o;913:79::-;951:7;978:6;-1:-1:-1;;;;;978:6:0;913:79;:::o;1279:92::-;1319:4;1357:6;-1:-1:-1;;;;;1357:6:0;1343:10;:20;;1279:92::o;38423:1177::-;38577:24;38633:5;;;;;;;;;-1:-1:-1;;;;;38633:5:0;-1:-1:-1;;;;;38627:20:0;;38654:9;38627:39;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38627:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;38724:5:0;;38718:37;;;-1:-1:-1;;;38718:37:0;;38749:4;38718:37;;;;;;38691:24;;-1:-1:-1;;;;;;38724:5:0;;;;-1:-1:-1;38718:22:0;;-1:-1:-1;38718:37:0;;;;;;;;;;;;;;;38724:5;38718:37;;;5:2:-1;;;;30:1;27;20:12;5:2;38718:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38718:37:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38718:37:0;38798:16;;;38812:1;38798:16;;;38774:21;38798:16;;;;;38718:37;;-1:-1:-1;38798:16:0;;;;;;;105:10:-1;38798:16:0;88:34:-1;-1:-1;;38835:5:0;;38825:7;;;;-1:-1:-1;;;;;;38835:5:0;;38825:7;;-1:-1:-1;38835:5:0;;38825:7;;;;-1:-1:-1;;;;;38825:15:0;;;:7;;;;;;;;;:15;38861:5;;38851:7;;38861:5;;;38851:4;;38861:5;;38851:7;;;;;;;;;;;:15;-1:-1:-1;;;;;38851:15:0;;;-1:-1:-1;;;;;38851:15:0;;;;;38893:28;38943:6;;;;;;;;;-1:-1:-1;;;;;38943:6:0;-1:-1:-1;;;;;38924:51:0;;38976:14;38992:16;39010:4;39016:2;39020:8;38924:105;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38924:105:0;-1:-1:-1;;;;;38924:105:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;38924:105:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38924:105:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38924:105:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;38924:105:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;13:2;5:11;;2:2;;;29:1;26;19:12;2:2;38924:105:0;;;;;;;;;;;;;-1:-1:-1;;;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1;;;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;373:25;;-1:-1;38924:105:0;;421:4:-1;412:14;;;;38924:105:0;;;;;412:14:-1;38924:105:0;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;-1:-1;;39112:1:0;38924:105;;;;39098:16;;;;;;38924:105;39098:16;38893:136;;-1:-1:-1;39112:1:0;;-1:-1:-1;;;;;;39098:16:0;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;39098:16:0;39088:26;;39153:9;39140:7;39148:1;39140:10;;;;;;;;;;;;;:22;;;;;39186:11;39198:1;39186:14;;;;;;;;;;;;;;39173:7;39181:1;39173:10;;;;;;;;;;;;;:27;;;;;39274:11;39286:1;39274:14;;;;;;;;;;;;;;39255:16;:33;39251:303;;;39336:5;;39373:14;;-1:-1:-1;;;;;39336:5:0;;;;39330:21;;39352:36;;39373:11;;39336:5;;39373:14;;;;;;;;;;39352:16;:20;;:36;;;;:::i;:::-;39330:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39330:59:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;39330:59:0;;;;39449:21;39437:9;:33;39424:7;39432:1;39424:10;;;;;;;;;;;;;:46;;;;;39485:57;39516:2;39520:21;39485:30;:57::i;:::-;38423:1177;;;;;;;;:::o;23332:20::-;;;-1:-1:-1;;;;;23332:20:0;;:::o;24760:1496::-;25178:5;;25024:19;;;;;;25146:85;;-1:-1:-1;;;;;25178:5:0;25185:10;25205:4;25212:18;25146:31;:85::i;:::-;25248:5;;;;;;;;;-1:-1:-1;;;;;25248:5:0;-1:-1:-1;;;;;25242:20:0;;25269:9;25242:39;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25242:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;25330:5:0;;25324:37;;;-1:-1:-1;;;25324:37:0;;25355:4;25324:37;;;;;;25295:26;;-1:-1:-1;;;;;;25330:5:0;;;;-1:-1:-1;25324:22:0;;-1:-1:-1;25324:37:0;;;;;;;;;;;;;;;25330:5;25324:37;;;5:2:-1;;;;30:1;27;20:12;5:2;25324:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25324:37:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25324:37:0;25462:6;;25497:5;;25517;;25443:265;;;-1:-1:-1;;;25443:265:0;;-1:-1:-1;;;;;25497:5:0;;;25443:265;;;;25517:5;;;25443:265;;;;;;;;;;;;;;;;;;;;;;25373:19;25443:265;;;;;;;;;;;;;;;;;;;;;25324:37;;-1:-1:-1;25373:19:0;25462:6;;;;;25443:39;;:265;;;;;;;;;;;;;;25373:19;25462:6;25443:265;;;5:2:-1;;;;30:1;27;20:12;5:2;25443:265:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25443:265:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25443:265:0;;;;;;;;;;;;;-1:-1:-1;25443:265:0;-1:-1:-1;25443:265:0;-1:-1:-1;25732:32:0;;;25728:148;;;25809:5;;25781:83;;-1:-1:-1;;;;;25809:5:0;25816:10;25828:35;:18;25851:11;25828:35;:22;:35;:::i;:::-;25781:27;:83::i;:::-;25915:5;;-1:-1:-1;;;;;25915:5:0;25909:21;25931:35;:18;25954:11;25931:35;:22;:35;:::i;:::-;25909:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25909:58:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;26010:21:0;25998:9;:33;;-1:-1:-1;;26046:13:0;;;-1:-1:-1;26042:111:0;;26076:65;26107:10;26119:21;26076:30;:65::i;:::-;26184:12;26171:9;:25;;26163:85;;;;-1:-1:-1;;;26163:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24760:1496;;;;;;;;;;;:::o;23360:20::-;;;-1:-1:-1;;;;;23360:20:0;;:::o;32713:1079::-;33013:7;;32912:19;;;;32981:78;;-1:-1:-1;;;;;33013:7:0;33022:10;33042:4;33049:9;32981:31;:78::i;:::-;33158:6;;33196:5;;33216;;33139:213;;;-1:-1:-1;;;33139:213:0;;-1:-1:-1;;;;;33196:5:0;;;33139:213;;;;33216:5;;;33139:213;;;;;;;;;;;;;;;;33080:19;33139:213;;;;;;33313:4;33139:213;;;;;;;;;;;;33080:19;;33158:6;;;;;33139:42;;:213;;;;;;;;;;;;33080:19;33158:6;33139:213;;;5:2:-1;;;;30:1;27;20:12;5:2;33139:213:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33139:213:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;33139:213:0;;;;;;;33415:5;;33139:213;;-1:-1:-1;33139:213:0;-1:-1:-1;33387:51:0;;-1:-1:-1;;;;;33415:5:0;33422:2;33139:213;33387:27;:51::i;:::-;33456:5;;33450:34;;;-1:-1:-1;;;33450:34:0;;;;;;;;;;-1:-1:-1;;;;;33456:5:0;;;;33450:21;;:34;;;;;33456:5;;33450:34;;;;;;;;33456:5;;33450:34;;;5:2:-1;;;;30:1;27;20:12;5:2;33450:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33450:34:0;;;;33515:21;33503:33;;33563:1;33551:9;:13;33547:111;;;33581:65;33612:10;33624:21;33581:30;:65::i;:::-;33689:12;33676:9;:25;;33668:85;;;;-1:-1:-1;;;33668:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32713:1079;;;;;;;;;:::o;2019:109::-;1125:9;:7;:9::i;:::-;1117:54;;;;;-1:-1:-1;;;1117:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1117:54:0;;;;;;;;;;;;;;;2092:28;2111:8;2092:18;:28::i;:::-;2019:109;:::o;24311:267::-;24377:7;24397:16;24422:5;;;;;;;;;-1:-1:-1;;;;;24422:5:0;-1:-1:-1;;;;;24416:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24416:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24416:23:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24416:23:0;;-1:-1:-1;24465:13:0;;:104;;24493:76;24560:8;24493:62;24553:1;24493:55;24539:8;24493:41;24513:5;;;;;;;;;-1:-1:-1;;;;;24513:5:0;-1:-1:-1;;;;;24507:24:0;;:26;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24507:26:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24507:26:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24507:26:0;24493:9;;:41;:13;:41;:::i;:::-;:45;:55;:45;:55;:::i;:::-;:59;:62;:59;:62;:::i;:::-;:66;:76;:66;:76;:::i;:::-;24465:104;;;24481:9;24465:104;24458:111;;;24311:267;;;;:::o;23304:21::-;;;-1:-1:-1;;;;;23304:21:0;;:::o;36112:1061::-;36359:5;;36290:24;;36327:83;;-1:-1:-1;;;;;36359:5:0;36366:10;36386:4;36393:16;36327:31;:83::i;:::-;36445:16;;;36459:1;36445:16;;;36421:21;36445:16;;;;;36421:21;36445:16;;;;;105:10:-1;36445:16:0;88:34:-1;-1:-1;;36482:5:0;;36472:7;;;;-1:-1:-1;;;;;;36482:5:0;;36472:7;;-1:-1:-1;36482:5:0;;36472:7;;;;-1:-1:-1;;;;;36472:15:0;;;:7;;;;;;;;;:15;36508:5;;36498:7;;36508:5;;;36498:4;;36508:5;;36498:7;;;;;;-1:-1:-1;;;;;36498:15:0;;;:7;;;;;;;;;:15;36530:5;;36524:24;;;-1:-1:-1;;;36524:24:0;;36530:5;36524:24;;;;;;;;36530:5;;;;;36524:21;;:24;;;;;36530:5;36524:24;;;;;36530:5;;36524:24;;;5:2:-1;;;;30:1;27;20:12;5:2;36524:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;36609:6:0;;36559:28;;-1:-1:-1;;;;;;36609:6:0;;-1:-1:-1;36590:51:0;36642:30;36659:12;36642:16;:30::i;:::-;36674:16;36692:4;36706;36713:8;36590:132;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36590:132:0;-1:-1:-1;;;;;36590:132:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;36590:132:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36590:132:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36590:132:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;36590:132:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;13:2;5:11;;2:2;;;29:1;26;19:12;2:2;36590:132:0;;;;;;;;;;;;;-1:-1:-1;;;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1;;;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;373:25;;-1:-1;36590:132:0;;421:4:-1;412:14;;;;36590:132:0;;;;;412:14:-1;36590:132:0;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;-1:-1;;;;36590:132:0;;;;;;-1:-1:-1;;36766:5:0;;36782:14;;36559:163;;-1:-1:-1;;;;;;36766:5:0;;36760:21;;-1:-1:-1;36559:163:0;;-1:-1:-1;36766:5:0;;36782:14;;;;;;;;;;;;36760:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36760:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;36818:16:0;;;36832:1;36818:16;;;;;;;;;;-1:-1:-1;36832:1:0;-1:-1:-1;36818:16:0;;;;;105:10:-1;36818:16:0;88:34:-1;136:17;;-1:-1;36818:16:0;36808:26;;36858:11;36870:1;36858:14;;;;;;;;;;;;;;36845:7;36853:1;36845:10;;;;;;;;;;;;;:27;;;;;36896:21;36883:7;36891:1;36883:10;;;;;;;;;;;;;:34;;;;;36928:57;36959:2;36963:21;36928:30;:57::i;:::-;37027:7;37035:1;37027:10;;;;;;;;;;;;;;37008:16;:29;37004:142;;;37082:5;;37122:10;;37054:80;;-1:-1:-1;;;;;37082:5:0;;37089:10;;37101:32;;37122:7;;37082:5;;37122:10;;;;;;;;;;37101:16;:20;;:32;;;;:::i;22040:459::-;22286:45;;;-1:-1:-1;;;;;22286:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;22286:45:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;22261:81:0;;;;22226:12;;22240:17;;22261:10;;;;22286:45;22261:81;;;25:18:-1;22261:81:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;22261:81:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;22225:117:0;;;;22375:7;:57;;;;-1:-1:-1;22387:11:0;;:16;;:44;;;22418:4;22407:24;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22407:24:0;22387:44;22353:138;;;;;-1:-1:-1;;;22353:138:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;22040:459;;;;;:::o;23024:199::-;23136:12;;;23097;23136;;;;;;;;;-1:-1:-1;;;;;23115:7:0;;;23129:5;;23115:34;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;23115:34:0;;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;23096:53:0;;;23168:7;23160:55;;;;-1:-1:-1;;;23160:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22507:509;22792:51;;;-1:-1:-1;;;;;22792:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;22792:51:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;22767:87:0;;;;22732:12;;22746:17;;22767:10;;;;22792:51;22767:87;;;25:18:-1;22767:87:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;22767:87:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;22731:123:0;;;;22887:7;:57;;;;-1:-1:-1;22899:11:0;;:16;;:44;;;22930:4;22919:24;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22919:24:0;22899:44;22865:143;;;;-1:-1:-1;;;22865:143:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22507:509;;;;;;:::o;10266:181::-;10324:7;10356:5;;;10380:6;;;;10372:46;;;;;-1:-1:-1;;;10372:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10438:1;-1:-1:-1;10266:181:0;;;;;:::o;26581:461::-;26727:15;;26794:14;:4;26803;26794:14;:8;:14;:::i;:::-;26776;:4;26785;26776:14;:8;:14;:::i;:::-;:32;26772:263;;26835:40;26852:4;26858;26864;26870;26835:16;:40::i;:::-;26825:50;;26903:5;26890:18;;26772:263;;;26951:40;26968:4;26974;26980;26986;26951:16;:40::i;:::-;26941:50;;27019:4;27006:17;;26772:263;26581:461;;;;;;;:::o;10722:184::-;10780:7;10813:1;10808;:6;;10800:49;;;;;-1:-1:-1;;;10800:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10872:5:0;;;10722:184::o;2234:229::-;-1:-1:-1;;;;;2308:22:0;;2300:73;;;;-1:-1:-1;;;2300:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2410:6;;;2389:38;;-1:-1:-1;;;;;2389:38:0;;;;2410:6;;;2389:38;;;2438:6;:17;;-1:-1:-1;;;;;;2438:17:0;-1:-1:-1;;;;;2438:17:0;;;;;;;;;;2234:229::o;11157:470::-;11215:7;11459:6;11455:47;;-1:-1:-1;11489:1:0;11482:8;;11455:47;11526:5;;;11530:1;11526;:5;:1;11550:5;;;;;:10;11542:56;;;;-1:-1:-1;;;11542:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12095:333;12153:7;12252:1;12248;:5;12240:44;;;;;-1:-1:-1;;;12240:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;12295:9;12311:1;12307;:5;;;;;;;12095:333;-1:-1:-1;;;;12095:333:0:o;27374:645::-;27522:7;27568:14;:4;27577;27568:14;:8;:14;:::i;:::-;27550;:4;27559;27550:14;:8;:14;:::i;:::-;:32;;27542:53;;;;;-1:-1:-1;;;27542:53:0;;;;;;;;;;;;-1:-1:-1;;;27542:53:0;;;;;;;;;;;;;;;27620:3;27608:9;27646:23;27654:4;27664;27646:23;:17;:23;:::i;:::-;27634:35;-1:-1:-1;27680:10:0;27693:36;27714:14;:4;27723;27714:14;:8;:14;:::i;:::-;27694;:4;27703;27694:14;:8;:14;:::i;27693:36::-;27680:49;-1:-1:-1;27740:9:0;27752:42;27789:4;27752:32;27769:14;:4;27778;27769:14;:8;:14;:::i;:::-;27752:12;:2;27759:4;27752:12;:6;:12;:::i;:32::-;:36;:42;:36;:42;:::i;:::-;27740:54;-1:-1:-1;27807:9:0;27819:15;27832:1;27819:8;:1;27740:54;27819:8;:5;:8;:::i;:15::-;27807:27;-1:-1:-1;27845:9:0;27857:26;27867:15;27807:27;27867:8;27873:1;;27867:8;:5;:8;:::i;:15::-;27857:9;:26::i;:::-;27845:38;-1:-1:-1;27896:17:0;27916:8;27845:38;27922:1;27916:8;:5;:8;:::i;:::-;27896:28;-1:-1:-1;27935:19:0;27957:8;:1;27963;27957:8;:5;:8;:::i;:::-;27935:30;-1:-1:-1;27985:26:0;:9;27935:30;27985:26;:13;:26;:::i;:::-;27978:33;27374:645;-1:-1:-1;;;;;;;;;;;;;27374:645:0:o;5730:303::-;5775:6;5802:1;5798;:5;5794:232;;;-1:-1:-1;5824:1:0;5857;5853;5849:5;;:9;5873:92;5884:1;5880;:5;5873:92;;;5910:1;5906:5;;5948:1;5943;5939;5935;:5;;;;;;:9;5934:15;;;;;;5930:19;;5873:92;;;5794:232;;;;5986:6;;5982:44;;-1:-1:-1;6013:1:0;5730:303;;;:::o
Swarm Source
bzzr://f77379384557f8f54d21d798975b1723e099e8efaf9a1525450fd0f7109975b6
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.