Source Code
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 657 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Approve | 7393859 | 557 days ago | IN | 0 MOVR | 0.00065854 | ||||
| Approve | 3813961 | 1050 days ago | IN | 0 MOVR | 0.00002675 | ||||
| Approve | 2639569 | 1220 days ago | IN | 0 MOVR | 0.00002105 | ||||
| Approve | 2508286 | 1240 days ago | IN | 0 MOVR | 0.00004211 | ||||
| Approve | 2201441 | 1292 days ago | IN | 0 MOVR | 0.00002105 | ||||
| Approve | 1653847 | 1399 days ago | IN | 0 MOVR | 0.0001165 | ||||
| Approve | 1653298 | 1400 days ago | IN | 0 MOVR | 0.00016218 | ||||
| Approve | 1595984 | 1414 days ago | IN | 0 MOVR | 0.00016218 | ||||
| Approve | 1594489 | 1415 days ago | IN | 0 MOVR | 0.00004211 | ||||
| Approve | 1528750 | 1431 days ago | IN | 0 MOVR | 0.0000466 | ||||
| Approve | 1528733 | 1431 days ago | IN | 0 MOVR | 0.00004633 | ||||
| Approve | 1504418 | 1438 days ago | IN | 0 MOVR | 0.0000466 | ||||
| Approve | 1500087 | 1439 days ago | IN | 0 MOVR | 0.0000466 | ||||
| Approve | 1495643 | 1440 days ago | IN | 0 MOVR | 0.0000699 | ||||
| Transfer | 1494075 | 1440 days ago | IN | 0 MOVR | 0.00021937 | ||||
| Approve | 1493822 | 1440 days ago | IN | 0 MOVR | 0.0000699 | ||||
| Approve | 1488378 | 1442 days ago | IN | 0 MOVR | 0.0000699 | ||||
| Approve | 1474611 | 1445 days ago | IN | 0 MOVR | 0.00004633 | ||||
| Approve | 1474594 | 1445 days ago | IN | 0 MOVR | 0.00004633 | ||||
| Approve | 1470699 | 1446 days ago | IN | 0 MOVR | 0.0000445 | ||||
| Approve | 1467481 | 1447 days ago | IN | 0 MOVR | 0.00002294 | ||||
| Approve | 1466981 | 1447 days ago | IN | 0 MOVR | 0.00004423 | ||||
| Approve | 1451072 | 1450 days ago | IN | 0 MOVR | 0.00006675 | ||||
| Approve | 1444835 | 1451 days ago | IN | 0 MOVR | 0.00004423 | ||||
| Approve | 1439569 | 1452 days ago | IN | 0 MOVR | 0.00006675 |
Latest 25 internal transactions (View All)
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 12865178 | 157 days ago | 0 MOVR | ||||
| 12865178 | 157 days ago | 0 MOVR | ||||
| 12865178 | 157 days ago | 0 MOVR | ||||
| 12865178 | 157 days ago | 0 MOVR | ||||
| 12865178 | 157 days ago | 0 MOVR | ||||
| 12865178 | 157 days ago | 0 MOVR | ||||
| 12865178 | 157 days ago | 0 MOVR | ||||
| 12865178 | 157 days ago | 0 MOVR | ||||
| 12865178 | 157 days ago | 0 MOVR | ||||
| 12865178 | 157 days ago | 0 MOVR | ||||
| 12865090 | 157 days ago | 0 MOVR | ||||
| 12865090 | 157 days ago | 0 MOVR | ||||
| 12865090 | 157 days ago | 0 MOVR | ||||
| 12865090 | 157 days ago | 0 MOVR | ||||
| 12865090 | 157 days ago | 0 MOVR | ||||
| 12865090 | 157 days ago | 0 MOVR | ||||
| 12865090 | 157 days ago | 0 MOVR | ||||
| 12865090 | 157 days ago | 0 MOVR | ||||
| 12865090 | 157 days ago | 0 MOVR | ||||
| 12865090 | 157 days ago | 0 MOVR | ||||
| 12865030 | 157 days ago | 0 MOVR | ||||
| 12865030 | 157 days ago | 0 MOVR | ||||
| 12865030 | 157 days ago | 0 MOVR | ||||
| 12865030 | 157 days ago | 0 MOVR | ||||
| 12865030 | 157 days ago | 0 MOVR |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
H2O
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at moonriver.moonscan.io on 2021-12-10 */ // Sources flattened with hardhat v2.7.0 https://hardhat.org // File @openzeppelin/contracts/utils/[email protected] // SPDX-License-Identifier: Unlicensed pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File @openzeppelin/contracts/access/[email protected] pragma solidity ^0.8.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. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the 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 virtual onlyOwner { _setOwner(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 virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File @openzeppelin/contracts/token/ERC20/[email protected] pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File @openzeppelin/contracts/utils/[email protected] pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File @openzeppelin/contracts/token/ERC20/utils/[email protected] pragma solidity ^0.8.0; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File @openzeppelin/contracts/utils/math/[email protected] pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File contracts/interfaces/IUniswapV2Router01.sol pragma solidity >=0.6.2; interface IUniswapV2Router01 { 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); } // File contracts/interfaces/IUniswapV2Router02.sol pragma solidity >=0.6.2; interface IUniswapV2Router02 is IUniswapV2Router01 { 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/interfaces/IUniswapV2Factory.sol pragma solidity >=0.6.2; interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } // File contracts/interfaces/IDividendDistributor.sol pragma solidity ^0.8.0; interface IDividendDistributor { function changeToken( address token, address[] memory toNativeRoute, address[] memory fromNativeRoute, address router, bool forceChange ) external; function setDistributionCriteria( uint256 _minPeriod, uint256 _minDistribution ) external; function setShare(address shareholder, uint256 amount) external; function deposit() external payable; function process(uint256 gas) external; function claimDividend(address shareholder) external; function checkUnpaidDividends(address shareholder) external view returns (uint256); function checkTokenChangeProgress() external view returns (uint256 count, uint256 progress); } // File contracts/interfaces/IWETH.sol pragma solidity >=0.5.0; interface IWETH { function deposit() external payable; function transfer(address to, uint256 value) external returns (bool); function withdraw(uint256) external; } // File contracts/DividendDistributor.sol pragma solidity ^0.8.0; // import "hardhat/console.sol"; contract DividendDistributor is IDividendDistributor { address _hydro; struct Share { uint256 amount; uint256 totalExcluded; uint256 totalRealised; uint256 lastConversionNumerator; uint256 lastConversionDivisor; } IERC20 TOKEN; address native; IUniswapV2Router02 router; address[] public toNativeRoute; address[] public fromNativeRoute; address[] shareholders; mapping(address => uint256) shareholderIndexes; mapping(address => uint256) shareholderClaims; mapping(address => Share) public shares; uint256 public totalShares; uint256 public totalDividends; uint256 public totalDistributed; uint256 public dividendsPerShare; uint256 public dividendsPerShareAccuracyFactor = 10**36; uint256 public tokenConversionNumerator; uint256 public tokenConversionDivisor; uint256 public tokenConversionCount; uint256 public tokenConversionProgress; uint256 public minPeriod = 1 hours; uint256 public minDistribution = 1 * (10**18); uint256 currentIndex; bool initialized; modifier initialization() { require(!initialized); _; initialized = true; } modifier onlyToken() { require(msg.sender == _hydro); _; } constructor( address _router, address _token, address[] memory _toNativeRoute, address[] memory _fromNativeRoute ) { router = IUniswapV2Router02(_router); TOKEN = IERC20(_token); toNativeRoute = _toNativeRoute; fromNativeRoute = _fromNativeRoute; native = _toNativeRoute[_toNativeRoute.length - 1]; _hydro = msg.sender; } function changeToken( address _token, address[] memory _toNativeRoute, address[] memory _fromNativeRoute, address _router, bool forceChange ) external override onlyToken { require( tokenConversionCount <= tokenConversionProgress || forceChange, "Previous conversion not complete." ); tokenConversionDivisor = TOKEN.balanceOf(address(this)); require( totalDividends == 0 || tokenConversionDivisor > 0, "Requires at least some of initial token to calculate convertion rate." ); if (tokenConversionDivisor > 0) { TOKEN.approve(address(router), tokenConversionDivisor); if (address(TOKEN) != native) { // first move to native token with old router router.swapExactTokensForTokensSupportingFeeOnTransferTokens( tokenConversionDivisor, 0, toNativeRoute, address(this), block.timestamp ); } tokenConversionCount = shareholders.length; tokenConversionProgress = 0; } router = IUniswapV2Router02(_router); toNativeRoute = _toNativeRoute; fromNativeRoute = _fromNativeRoute; uint256 nativeBal = IERC20(native).balanceOf(address(this)); if (nativeBal > 0 && _token != native) { IERC20(native).approve(address(router), nativeBal); // than, with new router, move to new token router.swapExactTokensForTokensSupportingFeeOnTransferTokens( nativeBal, 0, _fromNativeRoute, address(this), block.timestamp ); } TOKEN = IERC20(_token); if (totalDividends > 0) { tokenConversionNumerator = TOKEN.balanceOf(address(this)); totalDividends = (totalDividends * tokenConversionNumerator) / tokenConversionDivisor; dividendsPerShare = (dividendsPerShare * tokenConversionNumerator) / tokenConversionDivisor; totalDistributed = (totalDistributed * tokenConversionNumerator) / tokenConversionDivisor; } } function checkTokenChangeProgress() external view override returns (uint256 count, uint256 progress) { return (tokenConversionCount, tokenConversionProgress); } function processTokenChange(address shareholder) internal { if ( shares[shareholder].lastConversionNumerator != tokenConversionNumerator || shares[shareholder].lastConversionDivisor != tokenConversionDivisor ) { shares[shareholder] .lastConversionNumerator = tokenConversionNumerator; shares[shareholder].lastConversionDivisor = tokenConversionDivisor; shares[shareholder].totalRealised = (shares[shareholder].totalRealised * tokenConversionNumerator) / tokenConversionDivisor; shares[shareholder].totalExcluded = (shares[shareholder].totalExcluded * tokenConversionNumerator) / tokenConversionDivisor; } tokenConversionProgress++; } function setDistributionCriteria( uint256 _minPeriod, uint256 _minDistribution ) external override onlyToken { minPeriod = _minPeriod; minDistribution = _minDistribution; } function setShare(address shareholder, uint256 amount) external override onlyToken { if (shares[shareholder].amount > 0) { if ( shares[shareholder].lastConversionNumerator != tokenConversionNumerator || shares[shareholder].lastConversionDivisor != tokenConversionDivisor ) { processTokenChange(shareholder); } distributeDividend(shareholder, getUnpaidEarnings(shareholder)); } if (amount > 0 && shares[shareholder].amount == 0) { addShareholder(shareholder); } else if (amount == 0 && shares[shareholder].amount > 0) { removeShareholder(shareholder); } totalShares = (totalShares - shares[shareholder].amount) + amount; shares[shareholder].amount = amount; shares[shareholder].totalExcluded = getCumulativeDividends( shares[shareholder].amount ); } function deposit() external payable override onlyToken { uint256 balanceBefore = TOKEN.balanceOf(address(this)); if (native == fromNativeRoute[fromNativeRoute.length - 1]) { IWETH(native).deposit{value: msg.value}(); } else { router.swapExactETHForTokensSupportingFeeOnTransferTokens{ value: msg.value }(0, fromNativeRoute, address(this), block.timestamp); } uint256 amount = TOKEN.balanceOf(address(this)) - balanceBefore; totalDividends = totalDividends + amount; dividendsPerShare = dividendsPerShare + ((dividendsPerShareAccuracyFactor * amount) / totalShares); } function process(uint256 gas) external override onlyToken { uint256 shareholderCount = shareholders.length; if (shareholderCount == 0) { return; } uint256 gasUsed = 0; uint256 gasLeft = gasleft(); uint256 iterations = 0; while (gasUsed < gas && iterations < shareholderCount) { if (currentIndex >= shareholderCount) { currentIndex = 0; } if ( shares[shareholders[currentIndex]].lastConversionNumerator != tokenConversionNumerator || shares[shareholders[currentIndex]].lastConversionDivisor != tokenConversionDivisor ) processTokenChange(shareholders[currentIndex]); uint256 unpaidEarnings = getUnpaidEarnings( shareholders[currentIndex] ); if (shouldDistribute(shareholders[currentIndex], unpaidEarnings)) { distributeDividend(shareholders[currentIndex], unpaidEarnings); } gasUsed = gasUsed + (gasLeft - gasleft()); gasLeft = gasleft(); currentIndex++; iterations++; } } function shouldDistribute(address shareholder, uint256 unpaidEarnings) internal view returns (bool) { return shareholderClaims[shareholder] + minPeriod < block.timestamp && unpaidEarnings > minDistribution; } function distributeDividend(address shareholder, uint256 unpaidEarnings) internal { if (shares[shareholder].amount == 0) { return; } if (unpaidEarnings > 0) { totalDistributed = totalDistributed + unpaidEarnings; TOKEN.transfer(shareholder, unpaidEarnings); shareholderClaims[shareholder] = block.timestamp; shares[shareholder].totalRealised = shares[shareholder].totalRealised + unpaidEarnings; shares[shareholder].totalExcluded = getCumulativeDividends( shares[shareholder].amount ); } } function claimDividend(address shareholder) external override { if ( shares[shareholder].lastConversionNumerator != tokenConversionNumerator || shares[shareholder].lastConversionDivisor != tokenConversionDivisor ) { processTokenChange(shareholder); } distributeDividend(shareholder, getUnpaidEarnings(shareholder)); } function getUnpaidEarnings(address shareholder) public view returns (uint256) { if (shares[shareholder].amount == 0) { return 0; } uint256 shareholderTotalDividends = getCumulativeDividends( shares[shareholder].amount ); // return (share * dividendsPerShare) / dividendsPerShareAccuracyFactor; uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded; if ( shares[shareholder].lastConversionNumerator != tokenConversionNumerator || shares[shareholder].lastConversionDivisor != tokenConversionDivisor ) { shareholderTotalDividends = (shareholderTotalDividends * tokenConversionNumerator) / tokenConversionDivisor; shareholderTotalExcluded = (shareholderTotalExcluded * tokenConversionNumerator) / tokenConversionDivisor; } if (shareholderTotalDividends <= shareholderTotalExcluded) { return 0; } return shareholderTotalDividends - shareholderTotalExcluded; } function checkUnpaidDividends(address shareholder) external view override returns (uint256) { return getUnpaidEarnings(shareholder); } function getCumulativeDividends(uint256 share) internal view returns (uint256) { return (share * dividendsPerShare) / dividendsPerShareAccuracyFactor; } function addShareholder(address shareholder) internal { shareholderIndexes[shareholder] = shareholders.length; shareholders.push(shareholder); } function removeShareholder(address shareholder) internal { if ( shares[shareholder].lastConversionNumerator != tokenConversionNumerator || shares[shareholder].lastConversionDivisor != tokenConversionDivisor ) tokenConversionProgress++; shareholders[shareholderIndexes[shareholder]] = shareholders[ shareholders.length - 1 ]; shareholderIndexes[ shareholders[shareholders.length - 1] ] = shareholderIndexes[shareholder]; shareholders.pop(); } function token() public view returns (address _token) { return address(TOKEN); } } // File contracts/TransferHelper.sol pragma solidity ^0.8.0; // import "hardhat/console.sol"; abstract contract TransferHelper is Ownable { using SafeERC20 for IERC20; using SafeMath for uint256; event AutoLiquify(uint256 tokenAAmount, uint256 tokenBAmount); IUniswapV2Router02 public router; address routerAddress; address native; bool isTokenBNative; address[] public toNativeRoute; address[] public fromNativeRoute; address[] public toTokenBRoute; address public pair; address public tokenB; address public autoLiquidityReceiver; constructor(address _routerAddress, address _tokenB) { routerAddress = _routerAddress; tokenB = _tokenB; router = IUniswapV2Router02(_routerAddress); native = router.WETH(); autoLiquidityReceiver = msg.sender; address factory = router.factory(); pair = IUniswapV2Factory(factory).createPair(address(this), tokenB); if (tokenB == native) { toNativeRoute = [address(this), tokenB]; fromNativeRoute = [tokenB, address(this)]; } else { toNativeRoute = [address(this), tokenB, native]; fromNativeRoute = [native, tokenB, address(this)]; } toTokenBRoute = [native, tokenB]; isTokenBNative = tokenB == native; onNewRouter(routerAddress, pair); checkRoutesValid(); } function onBeforeNewRouter(address) internal virtual { IERC20(tokenB).safeApprove(routerAddress, 0); } function onNewRouter(address, address) internal virtual { IERC20(tokenB).safeApprove(routerAddress, 0); IERC20(tokenB).safeApprove(routerAddress, type(uint128).max); } function changeLiquiditiyPair( address _routerAddress, address _pair, address[] memory _toNativeRoute, address[] memory _fromNativeRoute, address[] memory _toTokenBRoute ) public onlyOwner { onBeforeNewRouter(routerAddress); routerAddress = _routerAddress; router = IUniswapV2Router02(routerAddress); pair = _pair; toNativeRoute = _toNativeRoute; fromNativeRoute = _fromNativeRoute; toTokenBRoute = _toTokenBRoute; tokenB = _toTokenBRoute[_toTokenBRoute.length - 1]; if (tokenB == native) { isTokenBNative = true; } else { isTokenBNative = false; } onNewRouter(routerAddress, pair); checkRoutesValid(); } function swapToMOVR(uint256 amountToSwap) internal returns (uint256 swapedMovrAmount) { uint256 balanceBefore = address(this).balance; IERC20(address(this)).safeApprove(routerAddress, 0); IERC20(address(this)).safeApprove(routerAddress, type(uint128).max); router.swapExactTokensForETHSupportingFeeOnTransferTokens( amountToSwap, 1, toNativeRoute, address(this), block.timestamp ); return address(this).balance - balanceBefore; } function addLiquidity(uint256 _movrAmount, uint256 _tokenAmount) internal { if (isTokenBNative) { router.addLiquidityETH{value: _movrAmount}( address(this), _tokenAmount, 0, 0, autoLiquidityReceiver, block.timestamp ); emit AutoLiquify(_tokenAmount, _movrAmount); } else { uint256 beforeBal = IERC20(tokenB).balanceOf(address(this)); router.swapExactETHForTokensSupportingFeeOnTransferTokens{ value: _movrAmount }(0, toTokenBRoute, address(this), block.timestamp); uint256 afterBal = IERC20(tokenB).balanceOf(address(this)); uint256 tokenBAmount = afterBal.sub(beforeBal); router.addLiquidity( address(this), tokenB, _tokenAmount, tokenBAmount, 0, 0, autoLiquidityReceiver, block.timestamp ); emit AutoLiquify(_tokenAmount, tokenBAmount); } } function setFeeReceivers(address _autoLiquidityReceiver) external onlyOwner { autoLiquidityReceiver = _autoLiquidityReceiver; } function buyTokens(uint256 amount, address to) internal { router.swapExactETHForTokensSupportingFeeOnTransferTokens{ value: amount }(0, fromNativeRoute, to, block.timestamp); } function buyTokensFromToken( uint256 amount, address to, address token, address[] memory route ) internal { require(route.length > 1, "Route need to have at least 2 addresses!"); require( route[route.length - 1] == address(this), "Last route address neeed to be hydro!" ); if (token != tokenB) { IERC20(token).safeApprove(routerAddress, 0); IERC20(token).safeApprove(routerAddress, type(uint128).max); } router.swapExactTokensForTokensSupportingFeeOnTransferTokens( amount, 0, route, to, block.timestamp ); } function checkRoutesValid() private view { require(toNativeRoute[0] == address(this), "toNativeRoute[0] != hydro"); require( toNativeRoute[toNativeRoute.length - 1] == native, "toNativeRoute[last] != native" ); require(fromNativeRoute[0] == native, "fromNativeRoute[0] != native"); require( fromNativeRoute[fromNativeRoute.length - 1] == address(this), "fromNativeRoute[last] != hydro" ); } } // File contracts/H2O.sol pragma solidity ^0.8.0; // import "hardhat/console.sol"; contract H2O is IERC20, Ownable, TransferHelper { using Address for address; using SafeMath for uint256; using SafeERC20 for IERC20; address DEAD = 0x000000000000000000000000000000000000dEaD; address ZERO = 0x0000000000000000000000000000000000000000; string _name = "H2O"; string _symbol = "H2O"; uint8 constant _decimals = 18; uint256 _totalSupply = 1e9 * (10**_decimals); uint256 public _maxWalletSize = (_totalSupply * 1) / 100; mapping(address => uint256) _balances; mapping(address => mapping(address => uint256)) _allowances; mapping(address => bool) isFeeExempt; mapping(address => bool) isWalletLimitExempt; mapping(address => bool) isDividendExempt; // Buy Tax 5% (1%Liquidity, 4%Rewards) // Sell Tax 10% (2% Liquidity, 8% Rewards) uint256 liquidityFeeOfTotal = 200; uint256 reflectionFeeOfTotal = 800; uint256 feeOfTotalDenominator = 1000; uint256 buyTotalFee = 500; uint256 sellTotalFee = 1000; uint256 feeDenominator = 10000; uint256 targetLiquidity = 35; uint256 targetLiquidityDenominator = 100; DividendDistributor distributor; uint256 distributorGas = 500000; bool public swapEnabled = true; uint256 public swapThreshold = _totalSupply / 2000; bool inSwap; modifier swapping() { inSwap = true; _; inSwap = false; } constructor(address _routerAddress, address _tokenB) TransferHelper(_routerAddress, _tokenB) { isFeeExempt[msg.sender] = true; isWalletLimitExempt[address(this)] = true; isWalletLimitExempt[msg.sender] = true; isWalletLimitExempt[routerAddress] = true; isWalletLimitExempt[pair] = true; isDividendExempt[pair] = true; isDividendExempt[address(this)] = true; isDividendExempt[DEAD] = true; isDividendExempt[ZERO] = true; _balances[msg.sender] = _totalSupply; emit Transfer(address(0), msg.sender, _totalSupply); } receive() external payable {} function totalSupply() external view override returns (uint256) { return _totalSupply; } function decimals() external pure returns (uint8) { return _decimals; } function symbol() external view returns (string memory) { return _symbol; } function name() external view returns (string memory) { return _name; } function getOwner() external view returns (address) { return owner(); } function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve( msg.sender, spender, _allowances[msg.sender][spender] + addedValue ); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[msg.sender][spender]; require( currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero" ); unchecked { _approve(msg.sender, spender, currentAllowance - subtractedValue); } return true; } function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; } function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(msg.sender, spender, amount); return true; } function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function transfer(address recipient, uint256 amount) external override returns (bool) { return _transferFrom(msg.sender, recipient, amount); } function transferFrom( address sender, address recipient, uint256 amount ) external override returns (bool) { _transferFrom(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][msg.sender]; require( currentAllowance >= amount, "ERC20: transfer amount exceeds allowance" ); unchecked { _approve(sender, msg.sender, currentAllowance - amount); } return true; } function _transferFrom( address sender, address recipient, uint256 amount ) internal returns (bool) { require(_balances[sender] >= amount, "Insufficient balance"); if (inSwap) { return _basicTransfer(sender, recipient, amount); } bool selling = recipient == pair; if (recipient != pair && recipient != DEAD) { if (!isWalletLimitExempt[recipient]) checkWalletLimit(recipient, amount); } unchecked { _balances[sender] = _balances[sender] - amount; } uint256 amountReceived = shouldTakeFee(sender) ? takeFee(selling, sender, amount) : amount; if (shouldSwapBack(recipient)) { swapBack(amount); } _balances[recipient] = _balances[recipient] + amountReceived; if (!isDividendExempt[sender]) { try distributor.setShare(sender, _balances[sender]) {} catch {} } if (!isDividendExempt[recipient]) { try distributor.setShare(recipient, _balances[recipient]) {} catch {} } try distributor.process(distributorGas) {} catch {} emit Transfer(sender, recipient, amountReceived); return true; } function _basicTransfer( address sender, address recipient, uint256 amount ) internal returns (bool) { unchecked { _balances[sender] = _balances[sender] - amount; } _balances[recipient] = _balances[recipient] + amount; emit Transfer(sender, recipient, amount); return true; } function checkWalletLimit(address recipient, uint256 amount) internal view { require( _balances[recipient] + amount <= _maxWalletSize, "Transfer amount exceeds the bag size." ); } function setup( address reflectToken, address[] memory _toNativeRoute, address[] memory _fromNativeRoute ) external onlyOwner { distributor = new DividendDistributor( routerAddress, reflectToken, _toNativeRoute, _fromNativeRoute ); } function shouldTakeFee(address sender) internal view returns (bool) { return !isFeeExempt[sender]; } function getTotalFee(bool selling) public view returns (uint256) { if (selling) { return sellTotalFee; } return buyTotalFee; } function takeFee( bool selling, address sender, uint256 amount ) internal returns (uint256) { uint256 feeAmount = (amount * getTotalFee(selling)) / feeDenominator; _balances[address(this)] = _balances[address(this)] + feeAmount; emit Transfer(sender, address(this), feeAmount); return amount - feeAmount; } function shouldSwapBack(address recipient) internal view returns (bool) { return msg.sender != pair && !inSwap && swapEnabled && recipient == pair && _balances[address(this)] >= swapThreshold; } function swapBack(uint256 amount) internal swapping { uint256 swapHolderProtection = amount; if (_balances[address(this)] < swapHolderProtection) swapHolderProtection = _balances[address(this)]; uint256 dynamicLiquidityFeeOfTotal = isOverLiquified( targetLiquidity, targetLiquidityDenominator ) ? 0 : liquidityFeeOfTotal; uint256 amountToLiquify = swapHolderProtection .mul(dynamicLiquidityFeeOfTotal) .div(feeOfTotalDenominator) .div(2); uint256 amountToSwap = swapHolderProtection - amountToLiquify; uint256 amountMOVR = swapToMOVR(amountToSwap); uint256 amountMOVRLiquidity = amountMOVR .mul(dynamicLiquidityFeeOfTotal) .div(feeOfTotalDenominator) .div(2); uint256 amountMOVRReflection = amountMOVR.mul(reflectionFeeOfTotal).div( feeOfTotalDenominator ); try distributor.deposit{value: amountMOVRReflection}() {} catch {} if (amountToLiquify > 0) { addLiquidity(amountMOVRLiquidity, amountToLiquify); } } function triggerManualBuyback(uint256 amount) external onlyOwner { _buyTokens(amount, DEAD); } function triggerManualBuybackFromToken( uint256 amount, address token, address[] memory route ) external onlyOwner { _buyTokensFromToken(amount, DEAD, token, route); } function _buyTokens(uint256 amount, address to) internal swapping { buyTokens(amount, to); } function _buyTokensFromToken( uint256 amount, address to, address token, address[] memory route ) internal swapping { buyTokensFromToken(amount, to, token, route); } function manualTokenPurchase(uint256 amount) external onlyOwner { try distributor.deposit{value: amount}() {} catch {} } function setReflectToken( address newToken, address[] memory toNativeRoute, address[] memory fromNativeRoute, address router, bool forceChange ) external onlyOwner { require(newToken.isContract(), "Enter valid contract address"); distributor.changeToken( newToken, toNativeRoute, fromNativeRoute, router, forceChange ); } function checkReflectTokenUpdate() external view onlyOwner returns (uint256 count, uint256 progress) { return distributor.checkTokenChangeProgress(); } function setMaxWallet(uint256 numerator, uint256 divisor) external onlyOwner { require(numerator > 0 && divisor > 0 && divisor <= 10000); _maxWalletSize = (_totalSupply * numerator) / divisor; } function setIsDividendExempt(address holder, bool exempt) external onlyOwner { require(holder != address(this) && holder != pair); isDividendExempt[holder] = exempt; if (exempt) { distributor.setShare(holder, 0); } else { distributor.setShare(holder, _balances[holder]); } } function setIsFeeExempt(address holder, bool exempt) external onlyOwner { isFeeExempt[holder] = exempt; } function setIsWalletLimitExempt(address holder, bool exempt) external onlyOwner { isWalletLimitExempt[holder] = exempt; } function setFees( uint256 _liquidityFeeOfTotal, uint256 _reflectionFeeOfTotal, uint256 _buyTotalFee, uint256 _sellTotalFee ) external onlyOwner { liquidityFeeOfTotal = _liquidityFeeOfTotal; reflectionFeeOfTotal = _reflectionFeeOfTotal; buyTotalFee = _buyTotalFee; sellTotalFee = _sellTotalFee; require(buyTotalFee < feeDenominator.div(5)); require(sellTotalFee < feeDenominator.div(5)); } function setSwapBackSettings(bool _enabled, uint256 _denominator) external onlyOwner { require(_denominator > 0); swapEnabled = _enabled; swapThreshold = _totalSupply / _denominator; } function setTargetLiquidity(uint256 _target, uint256 _denominator) external onlyOwner { targetLiquidity = _target; targetLiquidityDenominator = _denominator; } function setDistributionCriteria( uint256 _minPeriod, uint256 _minDistribution ) external onlyOwner { distributor.setDistributionCriteria(_minPeriod, _minDistribution); } function setDistributorSettings(uint256 gas) external onlyOwner { require(gas < 750000); distributorGas = gas; } function getCirculatingSupply() public view returns (uint256) { return _totalSupply - (balanceOf(DEAD) + balanceOf(ZERO)); } function getLiquidityBacking(uint256 accuracy) public view returns (uint256) { return (accuracy * balanceOf(pair) * 2) / getCirculatingSupply(); } function isOverLiquified(uint256 target, uint256 accuracy) public view returns (bool) { return getLiquidityBacking(accuracy) > target; } function availableDividends(address account) external view returns (uint256) { return distributor.checkUnpaidDividends(account); } function claimDividends() external { distributor.claimDividend(msg.sender); try distributor.process(distributorGas) {} catch {} } function processDividends() external { try distributor.process(distributorGas) {} catch {} } function onNewRouter(address _routerAddress, address _pair) internal override { super.onNewRouter(_routerAddress, _pair); _approve(msg.sender, _routerAddress, 0); _approve(msg.sender, _routerAddress, type(uint256).max); _approve(address(this), _routerAddress, 0); _approve(address(this), _routerAddress, type(uint256).max); isWalletLimitExempt[_routerAddress] = true; isWalletLimitExempt[_pair] = true; isDividendExempt[_pair] = true; } function onBeforeNewRouter(address _routerAddress) internal override { super.onBeforeNewRouter(_routerAddress); _approve(msg.sender, _routerAddress, 0); _approve(address(this), _routerAddress, 0); } function currentlyServing() public view returns (address token) { return distributor.token(); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_routerAddress","type":"address"},{"internalType":"address","name":"_tokenB","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenBAmount","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"availableDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_routerAddress","type":"address"},{"internalType":"address","name":"_pair","type":"address"},{"internalType":"address[]","name":"_toNativeRoute","type":"address[]"},{"internalType":"address[]","name":"_fromNativeRoute","type":"address[]"},{"internalType":"address[]","name":"_toTokenBRoute","type":"address[]"}],"name":"changeLiquiditiyPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"checkReflectTokenUpdate","outputs":[{"internalType":"uint256","name":"count","type":"uint256"},{"internalType":"uint256","name":"progress","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentlyServing","outputs":[{"internalType":"address","name":"token","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"fromNativeRoute","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"getLiquidityBacking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"selling","type":"bool"}],"name":"getTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"target","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"isOverLiquified","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manualTokenPurchase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"processDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setDistributorSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFeeOfTotal","type":"uint256"},{"internalType":"uint256","name":"_reflectionFeeOfTotal","type":"uint256"},{"internalType":"uint256","name":"_buyTotalFee","type":"uint256"},{"internalType":"uint256","name":"_sellTotalFee","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsWalletLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newToken","type":"address"},{"internalType":"address[]","name":"toNativeRoute","type":"address[]"},{"internalType":"address[]","name":"fromNativeRoute","type":"address[]"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bool","name":"forceChange","type":"bool"}],"name":"setReflectToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_denominator","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_target","type":"uint256"},{"internalType":"uint256","name":"_denominator","type":"uint256"}],"name":"setTargetLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"reflectToken","type":"address"},{"internalType":"address[]","name":"_toNativeRoute","type":"address[]"},{"internalType":"address[]","name":"_fromNativeRoute","type":"address[]"}],"name":"setup","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"toNativeRoute","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"toTokenBRoute","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenB","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"triggerManualBuyback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address[]","name":"route","type":"address[]"}],"name":"triggerManualBuybackFromToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
600a80546001600160a01b031990811661dead17909155600b8054909116905560c0604052600360808190526248324f60e81b60a09081526200004691600c919062000e35565b506040805180820190915260038082526248324f60e81b60209092019182526200007391600d9162000e35565b50620000826012600a620010a3565b6200009290633b9aca0062001164565b600e556064600e546001620000a8919062001164565b620000b4919062001037565b600f5560c86015556103206016556103e860178190556101f4601855601955612710601a556023601b556064601c556207a120601e55601f805460ff19166001179055600e5462000109906107d09062001037565b6020553480156200011957600080fd5b5060405162007095380380620070958339810160408190526200013c9162000f6e565b81816200014933620005ba565b600280546001600160a01b038085166001600160a01b03199283168117909355600880549185169183169190911790556001805490911682179055604080516315ab88c960e31b8152905163ad5c464891600480820192602092909190829003018186803b158015620001bb57600080fd5b505afa158015620001d0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f6919062000f50565b600380546001600160a01b039283166001600160a01b03199182161790915560098054909116331790556001546040805163c45a015560e01b81529051600093929092169163c45a015591600480820192602092909190829003018186803b1580156200026257600080fd5b505afa15801562000277573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029d919062000f50565b6008546040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291925082169063c9c6539690604401602060405180830381600087803b158015620002ed57600080fd5b505af115801562000302573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000328919062000f50565b600780546001600160a01b0319166001600160a01b0392831617905560035460085490821691161415620003ba57604080518082019091523081526008546001600160a01b031660208201526200038490600490600262000ec4565b50604080518082019091526008546001600160a01b03168152306020820152620003b390600590600262000ec4565b5062000435565b604080516060810182523081526008546001600160a01b0390811660208301526003805490911692820192909252620003f7916004919062000ec4565b5060408051606081018252600380546001600160a01b039081168352600854166020830152309282019290925262000433916005919062000ec4565b505b604080518082019091526003546001600160a01b0390811682526008541660208201526200046890600690600262000ec4565b506003805460085460ff60a01b1982166001600160a01b0392831691831691909114600160a01b0217909155600254600754620004aa9291821691166200060a565b620004b4620006aa565b50503360008181526012602090815260408083208054600160ff1991821681179092553080865260138552838620805483168417905586865283862080548316841790556002546001600160a01b03908116875284872080548416851790556007805482168852858820805485168617905554811687526014865284872080548416851790559086528386208054831684179055600a54811686528386208054831684179055600b5416855282852080549091169091179055600e5484845260108352818420819055905190815292935090917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a350506200123c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b620006218282620008e260201b62001d851760201c565b6200062f3383600062000944565b6200063e338360001962000944565b6200064c3083600062000944565b6200065b308360001962000944565b6001600160a01b0391821660009081526013602090815260408083208054600160ff19918216811790925594909516835280832080548516861790556014909152902080549091169091179055565b306001600160a01b03166004600081548110620006cb57620006cb62001226565b6000918252602090912001546001600160a01b031614620007335760405162461bcd60e51b815260206004820152601960248201527f746f4e6174697665526f7574655b305d20213d20687964726f0000000000000060448201526064015b60405180910390fd5b600354600480546001600160a01b0390921691620007549060019062001186565b8154811062000767576200076762001226565b6000918252602090912001546001600160a01b031614620007cb5760405162461bcd60e51b815260206004820152601d60248201527f746f4e6174697665526f7574655b6c6173745d20213d206e617469766500000060448201526064016200072a565b600354600580546001600160a01b0390921691600090620007f057620007f062001226565b6000918252602090912001546001600160a01b031614620008545760405162461bcd60e51b815260206004820152601c60248201527f66726f6d4e6174697665526f7574655b305d20213d206e61746976650000000060448201526064016200072a565b60058054309190620008699060019062001186565b815481106200087c576200087c62001226565b6000918252602090912001546001600160a01b031614620008e05760405162461bcd60e51b815260206004820152601e60248201527f66726f6d4e6174697665526f7574655b6c6173745d20213d20687964726f000060448201526064016200072a565b565b6002546008546200090e916001600160a01b039182169116600062000a6c602090811b62001dcf17901c565b60025460085462000940916001600160a01b0391821691166001600160801b0362000a6c602090811b62001dcf17901c565b5050565b6001600160a01b038316620009a85760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016200072a565b6001600160a01b03821662000a0b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016200072a565b6001600160a01b0383811660008181526011602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b80158062000afa5750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e9060440160206040518083038186803b15801562000abd57600080fd5b505afa15801562000ad2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000af8919062000fca565b155b62000b6e5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e63650000000000000000000060648201526084016200072a565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0390811663095ea7b360e01b1790915262000bc691859162000bcb16565b505050565b600062000c27826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031662000ca960201b62001f6c179092919060201c565b80519091501562000bc6578080602001905181019062000c48919062000fa6565b62000bc65760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016200072a565b606062000cba848460008562000cc4565b90505b9392505050565b60608247101562000d275760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016200072a565b843b62000d775760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200072a565b600080866001600160a01b0316858760405162000d95919062000fe4565b60006040518083038185875af1925050503d806000811462000dd4576040519150601f19603f3d011682016040523d82523d6000602084013e62000dd9565b606091505b50909250905062000dec82828662000df7565b979650505050505050565b6060831562000e0857508162000cbd565b82511562000e195782518084602001fd5b8160405162461bcd60e51b81526004016200072a919062001002565b82805462000e4390620011d3565b90600052602060002090601f01602090048101928262000e67576000855562000eb2565b82601f1062000e8257805160ff191683800117855562000eb2565b8280016001018555821562000eb2579182015b8281111562000eb257825182559160200191906001019062000e95565b5062000ec092915062000f1c565b5090565b82805482825590600052602060002090810192821562000eb2579160200282015b8281111562000eb257825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000ee5565b5b8082111562000ec0576000815560010162000f1d565b80516001600160a01b038116811462000f4b57600080fd5b919050565b60006020828403121562000f6357600080fd5b62000cbd8262000f33565b6000806040838503121562000f8257600080fd5b62000f8d8362000f33565b915062000f9d6020840162000f33565b90509250929050565b60006020828403121562000fb957600080fd5b8151801515811462000cbd57600080fd5b60006020828403121562000fdd57600080fd5b5051919050565b6000825162000ff8818460208701620011a0565b9190910192915050565b602081526000825180602084015262001023816040850160208701620011a0565b601f01601f19169190910160400192915050565b6000826200105557634e487b7160e01b600052601260045260246000fd5b500490565b600181815b808511156200109b5781600019048211156200107f576200107f62001210565b808516156200108d57918102915b93841c93908002906200105f565b509250929050565b600062000cbd60ff841683600082620010bf575060016200115e565b81620010ce575060006200115e565b8160018114620010e75760028114620010f25762001112565b60019150506200115e565b60ff84111562001106576200110662001210565b50506001821b6200115e565b5060208310610133831016604e8410600b841016171562001137575081810a6200115e565b6200114383836200105a565b80600019048211156200115a576200115a62001210565b0290505b92915050565b600081600019048311821515161562001181576200118162001210565b500290565b6000828210156200119b576200119b62001210565b500390565b60005b83811015620011bd578181015183820152602001620011a3565b83811115620011cd576000848401525b50505050565b600181811c90821680620011e857607f821691505b602082108114156200120a57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b615e49806200124c6000396000f3fe6080604052600436106200036f5760003560e01c80637af2939711620001c7578063abe57e7011620000ff578063df20fd4911620000a1578063f1f3bca31162000078578063f1f3bca314620009ed578063f2fde38b1462000a12578063f708a64f1462000a37578063f887ea401462000a5c57600080fd5b8063df20fd49146200097e578063e01bb68814620009a3578063ea497b7914620009c857600080fd5b8063ca33e64c11620000d6578063ca33e64c14620008ed578063d51ed1c8146200090f578063dd62ed3e146200093457600080fd5b8063abe57e701462000875578063c5ebebc2146200089a578063c7e0f87614620008c857600080fd5b80639d1944f51162000169578063a8aa1b311162000140578063a8aa1b311462000809578063a9059cbb146200082b578063abc728d3146200085057600080fd5b80639d1944f5146200079a578063a457c2d714620007bf578063a4878a3b14620007e457600080fd5b80638da5cb5b116200019e5780638da5cb5b146200074a5780638f9a55c0146200076a57806395d89b41146200078257600080fd5b80637af29397146200070d5780637bf5b04b1462000732578063893d20e8146200074a57600080fd5b8063313826f911620002a757806362d0d26e11620002495780636ddd171311620002205780636ddd1713146200067a5780636fcba377146200069657806370a0823114620006bb578063715018a614620006f557600080fd5b806362d0d26e1462000625578063658d4b7f146200063d578063668038e0146200066257600080fd5b80634df4501f116200027e5780634df4501f14620005a057806352e3de9c14620005de5780635f64b55b146200060357600080fd5b8063313826f91462000538578063313ce567146200055d57806339509351146200057b57600080fd5b806318160ddd116200031157806323b872dd11620002e857806323b872dd14620004d65780632b112e4914620004fb5780632d48e896146200051357600080fd5b806318160ddd1462000475578063201e7991146200048c5780632198cf6c14620004b157600080fd5b8063095ea7b31162000346578063095ea7b314620003f55780631161ae39146200042b578063124aa356146200045057600080fd5b80630445b667146200037c5780630518419814620003a757806306fdde0314620003ce57600080fd5b366200037757005b600080fd5b3480156200038957600080fd5b506200039460205481565b6040519081526020015b60405180910390f35b348015620003b457600080fd5b50620003cc620003c636600462003887565b62000a7e565b005b348015620003db57600080fd5b50620003e662000b42565b6040516200039e919062003d18565b3480156200040257600080fd5b506200041a62000414366004620039e4565b62000bdc565b60405190151581526020016200039e565b3480156200043857600080fd5b506200041a6200044a36600462003afd565b62000bf4565b3480156200045d57600080fd5b50620003cc6200046f36600462003a74565b62000c0a565b3480156200048257600080fd5b50600e5462000394565b3480156200049957600080fd5b50620003cc620004ab36600462003afd565b62000cbe565b348015620004be57600080fd5b50620003cc620004d0366004620039b1565b62000d14565b348015620004e357600080fd5b506200041a620004f536600462003841565b62000d8a565b3480156200050857600080fd5b506200039462000e52565b3480156200052057600080fd5b50620003cc6200053236600462003afd565b62000e9c565b3480156200054557600080fd5b50620003cc6200055736600462003aa8565b62000f6c565b3480156200056a57600080fd5b50604051601281526020016200039e565b3480156200058857600080fd5b506200041a6200059a366004620039e4565b62000fd7565b348015620005ad57600080fd5b50620005c5620005bf36600462003a74565b62001017565b6040516001600160a01b0390911681526020016200039e565b348015620005eb57600080fd5b50620003cc620005fd36600462003906565b62001042565b3480156200061057600080fd5b50600854620005c5906001600160a01b031681565b3480156200063257600080fd5b50620005c562001174565b3480156200064a57600080fd5b50620003cc6200065c366004620039b1565b6200120e565b3480156200066f57600080fd5b50620003cc62001284565b3480156200068757600080fd5b50601f546200041a9060ff1681565b348015620006a357600080fd5b50620003cc620006b536600462003b74565b62001378565b348015620006c857600080fd5b5062000394620006da36600462003707565b6001600160a01b031660009081526010602052604090205490565b3480156200070257600080fd5b50620003cc62001419565b3480156200071a57600080fd5b50620005c56200072c36600462003a74565b62001470565b3480156200073f57600080fd5b50620003cc62001481565b3480156200075757600080fd5b506000546001600160a01b0316620005c5565b3480156200077757600080fd5b5062000394600f5481565b3480156200078f57600080fd5b50620003e6620014d0565b348015620007a757600080fd5b50620003cc620007b936600462003a74565b620014e1565b348015620007cc57600080fd5b506200041a620007de366004620039e4565b62001541565b348015620007f157600080fd5b50620003946200080336600462003707565b620015f6565b3480156200081657600080fd5b50600754620005c5906001600160a01b031681565b3480156200083857600080fd5b506200041a6200084a366004620039e4565b62001697565b3480156200085d57600080fd5b50620005c56200086f36600462003a74565b620016a6565b3480156200088257600080fd5b50620003cc6200089436600462003afd565b620016b7565b348015620008a757600080fd5b50620008b262001750565b604080519283526020830191909152016200039e565b348015620008d557600080fd5b50620003cc620008e736600462003785565b6200183d565b348015620008fa57600080fd5b50600954620005c5906001600160a01b031681565b3480156200091c57600080fd5b50620003946200092e36600462003a74565b620019ce565b3480156200094157600080fd5b50620003946200095336600462003747565b6001600160a01b03918216600090815260116020908152604080832093909416825291909152205490565b3480156200098b57600080fd5b50620003cc6200099d36600462003a53565b62001a1a565b348015620009b057600080fd5b50620003cc620009c236600462003707565b62001a98565b348015620009d557600080fd5b50620003cc620009e736600462003a74565b62001b05565b348015620009fa57600080fd5b506200039462000a0c36600462003a13565b62001b69565b34801562000a1f57600080fd5b50620003cc62000a3136600462003707565b62001b82565b34801562000a4457600080fd5b50620003cc62000a56366004620039b1565b62001c56565b34801562000a6957600080fd5b50600154620005c5906001600160a01b031681565b6000546001600160a01b0316331462000acd5760405162461bcd60e51b8152602060048201819052602482015260008051602062005df483398151915260448201526064015b60405180910390fd5b6002546040516001600160a01b039091169084908490849062000af090620035b2565b62000aff949392919062003c4b565b604051809103906000f08015801562000b1c573d6000803e3d6000fd5b50601d80546001600160a01b0319166001600160a01b0392909216919091179055505050565b6060600c805462000b539062003e55565b80601f016020809104026020016040519081016040528092919081815260200182805462000b819062003e55565b801562000bd25780601f1062000ba65761010080835404028352916020019162000bd2565b820191906000526020600020905b81548152906001019060200180831162000bb457829003601f168201915b5050505050905090565b600062000beb33848462001f85565b50600192915050565b60008262000c0283620019ce565b119392505050565b6000546001600160a01b0316331462000c555760405162461bcd60e51b8152602060048201819052602482015260008051602062005df4833981519152604482015260640162000ac4565b601d60009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801562000ca657600080fd5b505af19350505050801562000cb9575060015b505b50565b6000546001600160a01b0316331462000d095760405162461bcd60e51b8152602060048201819052602482015260008051602062005df4833981519152604482015260640162000ac4565b601b91909155601c55565b6000546001600160a01b0316331462000d5f5760405162461bcd60e51b8152602060048201819052602482015260008051602062005df4833981519152604482015260640162000ac4565b6001600160a01b03919091166000908152601360205260409020805460ff1916911515919091179055565b600062000d99848484620020e1565b506001600160a01b03841660009081526011602090815260408083203384529091529020548281101562000e365760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000606482015260840162000ac4565b62000e45853385840362001f85565b60019150505b9392505050565b600b546001600160a01b0390811660009081526010602052604080822054600a549093168252812054909162000e889162003dac565b600e5462000e97919062003e0c565b905090565b6000546001600160a01b0316331462000ee75760405162461bcd60e51b8152602060048201819052602482015260008051602062005df4833981519152604482015260640162000ac4565b601d546040517f2d48e89600000000000000000000000000000000000000000000000000000000815260048101849052602481018390526001600160a01b0390911690632d48e896906044015b600060405180830381600087803b15801562000f4f57600080fd5b505af115801562000f64573d6000803e3d6000fd5b505050505050565b6000546001600160a01b0316331462000fb75760405162461bcd60e51b8152602060048201819052602482015260008051602062005df4833981519152604482015260640162000ac4565b600a5462000fd29084906001600160a01b0316848462002469565b505050565b3360008181526011602090815260408083206001600160a01b0387168452909152812054909162000beb9185906200101190869062003dac565b62001f85565b600681815481106200102857600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b031633146200108d5760405162461bcd60e51b8152602060048201819052602482015260008051602062005df4833981519152604482015260640162000ac4565b6001600160a01b0385163b620010e65760405162461bcd60e51b815260206004820152601c60248201527f456e7465722076616c696420636f6e7472616374206164647265737300000000604482015260640162000ac4565b601d546040517f90a276310000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906390a276319062001139908890889088908890889060040162003c8d565b600060405180830381600087803b1580156200115457600080fd5b505af115801562001169573d6000803e3d6000fd5b505050505050505050565b601d54604080517ffc0c546a00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163fc0c546a916004808301926020929190829003018186803b158015620011d357600080fd5b505afa158015620011e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e97919062003727565b6000546001600160a01b03163314620012595760405162461bcd60e51b8152602060048201819052602482015260008051602062005df4833981519152604482015260640162000ac4565b6001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055565b601d546040517f15f7e05e0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b03909116906315f7e05e90602401600060405180830381600087803b158015620012e357600080fd5b505af1158015620012f8573d6000803e3d6000fd5b5050601d54601e546040517fffb2c4790000000000000000000000000000000000000000000000000000000081526001600160a01b03909216935063ffb2c47992506200134b9160040190815260200190565b600060405180830381600087803b1580156200136657600080fd5b505af192505050801562000cbb57505b565b6000546001600160a01b03163314620013c35760405162461bcd60e51b8152602060048201819052602482015260008051602062005df4833981519152604482015260640162000ac4565b6015849055601683905560188290556019819055601a54620013e790600562002494565b60185410620013f557600080fd5b601a546200140590600562002494565b601954106200141357600080fd5b50505050565b6000546001600160a01b03163314620014645760405162461bcd60e51b8152602060048201819052602482015260008051602062005df4833981519152604482015260640162000ac4565b620013766000620024a2565b600581815481106200102857600080fd5b601d54601e546040517fffb2c4790000000000000000000000000000000000000000000000000000000081526001600160a01b039092169163ffb2c479916200134b9160040190815260200190565b6060600d805462000b539062003e55565b6000546001600160a01b031633146200152c5760405162461bcd60e51b8152602060048201819052602482015260008051602062005df4833981519152604482015260640162000ac4565b620b71b081106200153c57600080fd5b601e55565b3360009081526011602090815260408083206001600160a01b038616845290915281205482811015620015dd5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840162000ac4565b620015ec338585840362001f85565b5060019392505050565b601d546040517f13adba0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015260009216906313adba0b9060240160206040518083038186803b1580156200165657600080fd5b505afa1580156200166b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001691919062003a8e565b92915050565b600062000e4b338484620020e1565b600481815481106200102857600080fd5b6000546001600160a01b03163314620017025760405162461bcd60e51b8152602060048201819052602482015260008051602062005df4833981519152604482015260640162000ac4565b600082118015620017135750600081115b80156200172257506127108111155b6200172c57600080fd5b8082600e546200173d919062003dea565b62001749919062003dc7565b600f555050565b6000805481906001600160a01b031633146200179e5760405162461bcd60e51b8152602060048201819052602482015260008051602062005df4833981519152604482015260640162000ac4565b601d54604080517f7a79015800000000000000000000000000000000000000000000000000000000815281516001600160a01b0390931692637a79015892600480840193919291829003018186803b158015620017fa57600080fd5b505afa1580156200180f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001835919062003b20565b915091509091565b6000546001600160a01b03163314620018885760405162461bcd60e51b8152602060048201819052602482015260008051602062005df4833981519152604482015260640162000ac4565b6002546200189f906001600160a01b0316620024f2565b600280546001600160a01b03199081166001600160a01b038881169182179093556001805483169091179055600780549091169186169190911790558251620018f0906004906020860190620035c0565b50815162001906906005906020850190620035c0565b5080516200191c906006906020840190620035c0565b5080600182516200192e919062003e0c565b8151811062001941576200194162003ea8565b6020908102919091010151600880546001600160a01b0319166001600160a01b03928316908117909155600354909116141562001991576003805460ff60a01b1916600160a01b1790556200199f565b6003805460ff60a01b191690555b600254600754620019bd916001600160a01b03908116911662002519565b620019c7620025ae565b5050505050565b6000620019da62000e52565b6007546001600160a01b031660009081526010602052604090205462001a01908462003dea565b62001a0e90600262003dea565b62001691919062003dc7565b6000546001600160a01b0316331462001a655760405162461bcd60e51b8152602060048201819052602482015260008051602062005df4833981519152604482015260640162000ac4565b6000811162001a7357600080fd5b601f805460ff1916831515179055600e5462001a9190829062003dc7565b6020555050565b6000546001600160a01b0316331462001ae35760405162461bcd60e51b8152602060048201819052602482015260008051602062005df4833981519152604482015260640162000ac4565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331462001b505760405162461bcd60e51b8152602060048201819052602482015260008051602062005df4833981519152604482015260640162000ac4565b600a5462000cbb9082906001600160a01b0316620027e0565b6000811562001b7a57505060195490565b505060185490565b6000546001600160a01b0316331462001bcd5760405162461bcd60e51b8152602060048201819052602482015260008051602062005df4833981519152604482015260640162000ac4565b6001600160a01b03811662001c4b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840162000ac4565b62000cbb81620024a2565b6000546001600160a01b0316331462001ca15760405162461bcd60e51b8152602060048201819052602482015260008051602062005df4833981519152604482015260640162000ac4565b6001600160a01b038216301480159062001cc957506007546001600160a01b03838116911614155b62001cd357600080fd5b6001600160a01b0382166000908152601460205260409020805460ff1916821580159190911790915562001d3b57601d54604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152909116906314b6ca969060440162000f34565b601d546001600160a01b0383811660008181526010602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca969060440162000f34565b60025460085462001da5916001600160a01b039182169116600062001dcf565b60025460085462000cb9916001600160a01b0391821691166fffffffffffffffffffffffffffffffff5b80158062001e7657506040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03838116602483015284169063dd62ed3e9060440160206040518083038186803b15801562001e3957600080fd5b505afa15801562001e4e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001e74919062003a8e565b155b62001eea5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e636500000000000000000000606482015260840162000ac4565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b30000000000000000000000000000000000000000000000000000000017905262000fd290849062002807565b606062001f7d8484600085620028f3565b949350505050565b6001600160a01b038316620020025760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840162000ac4565b6001600160a01b038216620020805760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840162000ac4565b6001600160a01b0383811660008181526011602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166000908152601060205260408120548211156200214b5760405162461bcd60e51b815260206004820152601460248201527f496e73756666696369656e742062616c616e6365000000000000000000000000604482015260640162000ac4565b60215460ff16156200216c576200216484848462002a3c565b905062000e4b565b6007546001600160a01b03848116911614801581620021995750600a546001600160a01b03858116911614155b15620021cc576001600160a01b03841660009081526013602052604090205460ff16620021cc57620021cc848462002ada565b6001600160a01b038516600090815260106020908152604080832080548790039055601290915281205460ff161562002206578362002213565b6200221382878662002b79565b9050620022208562002c31565b156200223157620022318462002ca1565b6001600160a01b0385166000908152601060205260409020546200225790829062003dac565b6001600160a01b0380871660009081526010602090815260408083209490945591891681526014909152205460ff16620022fe57601d546001600160a01b0387811660008181526010602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015620022ea57600080fd5b505af1925050508015620022fc575060015b505b6001600160a01b03851660009081526014602052604090205460ff166200239257601d546001600160a01b0386811660008181526010602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b1580156200237e57600080fd5b505af192505050801562002390575060015b505b601d54601e546040517fffb2c4790000000000000000000000000000000000000000000000000000000081526001600160a01b039092169163ffb2c47991620023e19160040190815260200190565b600060405180830381600087803b158015620023fc57600080fd5b505af19250505080156200240e575060015b50846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200245591815260200190565b60405180910390a350600195945050505050565b6021805460ff19166001179055620024848484848462002e1f565b50506021805460ff191690555050565b600062000e4b828462003dc7565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b620024fd8162003039565b6200250b3382600062001f85565b62000cbb3082600062001f85565b62002525828262001d85565b620025333383600062001f85565b62002542338360001962001f85565b620025503083600062001f85565b6200255f308360001962001f85565b6001600160a01b0391821660009081526013602090815260408083208054600160ff19918216811790925594909516835280832080548516861790556014909152902080549091169091179055565b306001600160a01b03166004600081548110620025cf57620025cf62003ea8565b6000918252602090912001546001600160a01b031614620026335760405162461bcd60e51b815260206004820152601960248201527f746f4e6174697665526f7574655b305d20213d20687964726f00000000000000604482015260640162000ac4565b600354600480546001600160a01b0390921691620026549060019062003e0c565b8154811062002667576200266762003ea8565b6000918252602090912001546001600160a01b031614620026cb5760405162461bcd60e51b815260206004820152601d60248201527f746f4e6174697665526f7574655b6c6173745d20213d206e6174697665000000604482015260640162000ac4565b600354600580546001600160a01b0390921691600090620026f057620026f062003ea8565b6000918252602090912001546001600160a01b031614620027545760405162461bcd60e51b815260206004820152601c60248201527f66726f6d4e6174697665526f7574655b305d20213d206e617469766500000000604482015260640162000ac4565b60058054309190620027699060019062003e0c565b815481106200277c576200277c62003ea8565b6000918252602090912001546001600160a01b031614620013765760405162461bcd60e51b815260206004820152601e60248201527f66726f6d4e6174697665526f7574655b6c6173745d20213d20687964726f0000604482015260640162000ac4565b6021805460ff19166001179055620027f9828262003059565b50506021805460ff19169055565b60006200285e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031662001f6c9092919063ffffffff16565b80519091501562000fd257808060200190518101906200287f919062003a33565b62000fd25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840162000ac4565b6060824710156200296d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840162000ac4565b843b620029bd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000ac4565b600080866001600160a01b03168587604051620029db919062003c2d565b60006040518083038185875af1925050503d806000811462002a1a576040519150601f19603f3d011682016040523d82523d6000602084013e62002a1f565b606091505b509150915062002a31828286620030cd565b979650505050505050565b6001600160a01b038084166000908152601060205260408082208054859003905591841681529081205462002a7390839062003dac565b6001600160a01b0380851660008181526010602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9062002ac89086815260200190565b60405180910390a35060019392505050565b600f546001600160a01b03831660009081526010602052604090205462002b0390839062003dac565b111562000cb95760405162461bcd60e51b815260206004820152602560248201527f5472616e7366657220616d6f756e74206578636565647320746865206261672060448201527f73697a652e000000000000000000000000000000000000000000000000000000606482015260840162000ac4565b600080601a5462002b8a8662001b69565b62002b96908562003dea565b62002ba2919062003dc7565b3060009081526010602052604090205490915062002bc290829062003dac565b30600081815260106020526040908190209290925590516001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9062002c149085815260200190565b60405180910390a362002c28818462003e0c565b95945050505050565b6007546000906001600160a01b0316331480159062002c53575060215460ff16155b801562002c625750601f5460ff165b801562002c7c57506007546001600160a01b038381169116145b8015620016915750602080543060009081526010909252604090912054101592915050565b6021805460ff1916600117905530600090815260106020526040902054819081111562002cda5750306000908152601060205260409020545b600062002cec601b54601c5462000bf4565b62002cfa5760155462002cfd565b60005b9050600062002d2a600262002d2360175462002d2386886200310b90919063ffffffff16565b9062002494565b9050600062002d3a828562003e0c565b9050600062002d498262003119565b9050600062002d6f600262002d2360175462002d2389876200310b90919063ffffffff16565b9050600062002d9160175462002d23601654866200310b90919063ffffffff16565b9050601d60009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801562002de457600080fd5b505af19350505050801562002df7575060015b50841562002e0b5762002e0b8286620031f6565b50506021805460ff19169055505050505050565b600181511162002e985760405162461bcd60e51b815260206004820152602860248201527f526f757465206e65656420746f2068617665206174206c65617374203220616460448201527f6472657373657321000000000000000000000000000000000000000000000000606482015260840162000ac4565b306001600160a01b0316816001835162002eb3919062003e0c565b8151811062002ec65762002ec662003ea8565b60200260200101516001600160a01b03161462002f4c5760405162461bcd60e51b815260206004820152602560248201527f4c61737420726f7574652061646472657373206e6565656420746f206265206860448201527f7964726f21000000000000000000000000000000000000000000000000000000606482015260840162000ac4565b6008546001600160a01b0383811691161462002fab5760025462002f7f906001600160a01b038481169116600062001dcf565b60025462002fab906001600160a01b0384811691166fffffffffffffffffffffffffffffffff62001dcf565b6001546040517f5c11d7950000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690635c11d7959062002fff90879060009086908990429060040162003d4d565b600060405180830381600087803b1580156200301a57600080fd5b505af11580156200302f573d6000803e3d6000fd5b5050505050505050565b60025460085462000cbb916001600160a01b039182169116600062001dcf565b60015460405163b6f9de9560e01b81526001600160a01b039091169063b6f9de9590849062003095906000906005908790429060040162003ce1565b6000604051808303818588803b158015620030af57600080fd5b505af1158015620030c4573d6000803e3d6000fd5b50505050505050565b60608315620030de57508162000e4b565b825115620030ef5782518084602001fd5b8160405162461bcd60e51b815260040162000ac4919062003d18565b600062000e4b828462003dea565b6002546000904790620031389030906001600160a01b03168462001dcf565b600254620031629030906001600160a01b03166fffffffffffffffffffffffffffffffff62001dcf565b600180546040517f791ac9470000000000000000000000000000000000000000000000000000000081526001600160a01b039091169163791ac94791620031b491879160049030904290830162003d8b565b600060405180830381600087803b158015620031cf57600080fd5b505af1158015620031e4573d6000803e3d6000fd5b50505050804762000e4b919062003e0c565b600354600160a01b900460ff16156200330a576001546009546040517ff305d7190000000000000000000000000000000000000000000000000000000081523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990849060c4016060604051808303818588803b1580156200328e57600080fd5b505af1158015620032a3573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190620032ca919062003b45565b505060408051838152602081018590527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15050565b6008546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b1580156200334f57600080fd5b505afa15801562003364573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200338a919062003a8e565b60015460405163b6f9de9560e01b81529192506001600160a01b03169063b6f9de95908590620033c7906000906006903090429060040162003ce1565b6000604051808303818588803b158015620033e157600080fd5b505af1158015620033f6573d6000803e3d6000fd5b50506008546040516370a0823160e01b8152306004820152600094506001600160a01b0390911692506370a08231915060240160206040518083038186803b1580156200344257600080fd5b505afa15801562003457573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200347d919062003a8e565b905060006200348d8284620035a4565b6001546008546009546040517fe8e337000000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b039283166024820152604481018990526064810185905260006084820181905260a482015290821660c48201524260e4820152929350169063e8e337009061010401606060405180830381600087803b1580156200352657600080fd5b505af11580156200353b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003561919062003b45565b505060408051868152602081018490527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15050505050565b600062000e4b828462003e0c565b611efa8062003efa83390190565b82805482825590600052602060002090810192821562003618579160200282015b828111156200361857825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190620035e1565b50620036269291506200362a565b5090565b5b808211156200362657600081556001016200362b565b80356200364e8162003ed4565b919050565b600082601f8301126200366557600080fd5b8135602067ffffffffffffffff8083111562003685576200368562003ebe565b8260051b604051601f19603f83011681018181108482111715620036ad57620036ad62003ebe565b60405284815283810192508684018288018501891015620036cd57600080fd5b600092505b85831015620036fb57620036e68162003641565b845292840192600192909201918401620036d2565b50979650505050505050565b6000602082840312156200371a57600080fd5b813562000e4b8162003ed4565b6000602082840312156200373a57600080fd5b815162000e4b8162003ed4565b600080604083850312156200375b57600080fd5b8235620037688162003ed4565b915060208301356200377a8162003ed4565b809150509250929050565b600080600080600060a086880312156200379e57600080fd5b8535620037ab8162003ed4565b94506020860135620037bd8162003ed4565b9350604086013567ffffffffffffffff80821115620037db57600080fd5b620037e989838a0162003653565b945060608801359150808211156200380057600080fd5b6200380e89838a0162003653565b935060808801359150808211156200382557600080fd5b50620038348882890162003653565b9150509295509295909350565b6000806000606084860312156200385757600080fd5b8335620038648162003ed4565b92506020840135620038768162003ed4565b929592945050506040919091013590565b6000806000606084860312156200389d57600080fd5b8335620038aa8162003ed4565b9250602084013567ffffffffffffffff80821115620038c857600080fd5b620038d68783880162003653565b93506040860135915080821115620038ed57600080fd5b50620038fc8682870162003653565b9150509250925092565b600080600080600060a086880312156200391f57600080fd5b85356200392c8162003ed4565b9450602086013567ffffffffffffffff808211156200394a57600080fd5b6200395889838a0162003653565b955060408801359150808211156200396f57600080fd5b506200397e8882890162003653565b9350506060860135620039918162003ed4565b91506080860135620039a38162003eea565b809150509295509295909350565b60008060408385031215620039c557600080fd5b8235620039d28162003ed4565b915060208301356200377a8162003eea565b60008060408385031215620039f857600080fd5b823562003a058162003ed4565b946020939093013593505050565b60006020828403121562003a2657600080fd5b813562000e4b8162003eea565b60006020828403121562003a4657600080fd5b815162000e4b8162003eea565b6000806040838503121562003a6757600080fd5b823562003a058162003eea565b60006020828403121562003a8757600080fd5b5035919050565b60006020828403121562003aa157600080fd5b5051919050565b60008060006060848603121562003abe57600080fd5b83359250602084013562003ad28162003ed4565b9150604084013567ffffffffffffffff81111562003aef57600080fd5b620038fc8682870162003653565b6000806040838503121562003b1157600080fd5b50508035926020909101359150565b6000806040838503121562003b3457600080fd5b505080516020909101519092909150565b60008060006060848603121562003b5b57600080fd5b8351925060208401519150604084015190509250925092565b6000806000806080858703121562003b8b57600080fd5b5050823594602084013594506040840135936060013592509050565b600081518084526020808501945080840160005b8381101562003be25781516001600160a01b03168752958201959082019060010162003bbb565b509495945050505050565b6000815480845260208085019450836000528060002060005b8381101562003be25781546001600160a01b03168752958201956001918201910162003c06565b6000825162003c4181846020870162003e26565b9190910192915050565b60006001600160a01b0380871683528086166020840152506080604083015262003c79608083018562003ba7565b828103606084015262002a31818562003ba7565b60006001600160a01b03808816835260a0602084015262003cb260a084018862003ba7565b838103604085015262003cc6818862003ba7565b95909116606084015250509015156080909101529392505050565b84815260806020820152600062003cfc608083018662003bed565b6001600160a01b03949094166040830152506060015292915050565b602081526000825180602084015262003d3981604085016020870162003e26565b601f01601f19169190910160400192915050565b85815284602082015260a06040820152600062003d6e60a083018662003ba7565b6001600160a01b0394909416606083015250608001529392505050565b85815284602082015260a06040820152600062003d6e60a083018662003bed565b6000821982111562003dc25762003dc262003e92565b500190565b60008262003de557634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161562003e075762003e0762003e92565b500290565b60008282101562003e215762003e2162003e92565b500390565b60005b8381101562003e4357818101518382015260200162003e29565b83811115620014135750506000910152565b600181811c9082168062003e6a57607f821691505b6020821081141562003e8c57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811462000cbb57600080fd5b801515811462000cbb57600080fdfe60806040526ec097ce7bc90715b34b9f1000000000600e55610e10601355670de0b6b3a76400006014553480156200003657600080fd5b5060405162001efa38038062001efa833981016040819052620000599162000269565b600380546001600160a01b038087166001600160a01b031992831617909255600180549286169290911691909117905581516200009e90600490602085019062000118565b508051620000b490600590602084019062000118565b508160018351620000c69190620002f9565b81518110620000d957620000d96200031f565b6020908102919091010151600280546001600160a01b039092166001600160a01b03199283161790556000805490911633179055506200034b92505050565b82805482825590600052602060002090810192821562000170579160200282015b828111156200017057825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000139565b506200017e92915062000182565b5090565b5b808211156200017e576000815560010162000183565b80516001600160a01b0381168114620001b157600080fd5b919050565b600082601f830112620001c857600080fd5b815160206001600160401b0380831115620001e757620001e762000335565b8260051b604051601f19603f830116810181811084821117156200020f576200020f62000335565b604052848152838101925086840182880185018910156200022f57600080fd5b600092505b858310156200025d57620002488162000199565b84529284019260019290920191840162000234565b50979650505050505050565b600080600080608085870312156200028057600080fd5b6200028b8562000199565b93506200029b6020860162000199565b60408601519093506001600160401b0380821115620002b957600080fd5b620002c788838901620001b6565b93506060870151915080821115620002de57600080fd5b50620002ed87828801620001b6565b91505092959194509250565b6000828210156200031a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b611b9f806200035b6000396000f3fe60806040526004361061018b5760003560e01c806390a27631116100d6578063d37f32341161007f578063fc0c546a11610059578063fc0c546a1461043b578063ffb2c47914610459578063ffd49c841461047957600080fd5b8063d37f3234146103f9578063e2d2e2191461040f578063efca2eed1461042557600080fd5b8063abc728d3116100b0578063abc728d31461035f578063ce7c2ac21461037f578063d0e30db0146103f157600080fd5b806390a2763114610313578063953851cb14610333578063997664d71461034957600080fd5b806333c75d9b11610138578063596d822d11610112578063596d822d1461029d5780637a790158146102b35780637af29397146102db57600080fd5b806333c75d9b1461025b5780633a98ef39146102715780634fab0ae81461028757600080fd5b806315f7e05e1161016957806315f7e05e146101fb57806328fd31981461021b5780632d48e8961461023b57600080fd5b806311ce023d1461019057806313adba0b146101b957806314b6ca96146101d9575b600080fd5b34801561019c57600080fd5b506101a6600e5481565b6040519081526020015b60405180910390f35b3480156101c557600080fd5b506101a66101d43660046117fd565b61048f565b3480156101e557600080fd5b506101f96101f43660046118b2565b6104a0565b005b34801561020757600080fd5b506101f96102163660046117fd565b610678565b34801561022757600080fd5b506101a66102363660046117fd565b6106df565b34801561024757600080fd5b506101f961025636600461192b565b6107dc565b34801561026757600080fd5b506101a660125481565b34801561027d57600080fd5b506101a6600a5481565b34801561029357600080fd5b506101a660145481565b3480156102a957600080fd5b506101a660105481565b3480156102bf57600080fd5b50601154601254604080519283526020830191909152016101b0565b3480156102e757600080fd5b506102fb6102f63660046118f9565b6107fe565b6040516001600160a01b0390911681526020016101b0565b34801561031f57600080fd5b506101f961032e366004611818565b610828565b34801561033f57600080fd5b506101a660115481565b34801561035557600080fd5b506101a6600b5481565b34801561036b57600080fd5b506102fb61037a3660046118f9565b610df6565b34801561038b57600080fd5b506103c961039a3660046117fd565b600960205260009081526040902080546001820154600283015460038401546004909401549293919290919085565b604080519586526020860194909452928401919091526060830152608082015260a0016101b0565b6101f9610e06565b34801561040557600080fd5b506101a6600f5481565b34801561041b57600080fd5b506101a6600d5481565b34801561043157600080fd5b506101a6600c5481565b34801561044757600080fd5b506001546001600160a01b03166102fb565b34801561046557600080fd5b506101f96104743660046118f9565b61109f565b34801561048557600080fd5b506101a660135481565b600061049a826106df565b92915050565b6000546001600160a01b031633146104b757600080fd5b6001600160a01b0382166000908152600960205260409020541561053e57600f546001600160a01b03831660009081526009602052604090206003015414158061051e57506010546001600160a01b03831660009081526009602052604090206004015414155b1561052c5761052c826112a2565b61053e82610539846106df565b6113b0565b60008111801561056457506001600160a01b038216600090815260096020526040902054155b156105ca57600680546001600160a01b0384166000818152600760205260408120839055600183018455929092527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b03191690911790556105fd565b801580156105ef57506001600160a01b03821660009081526009602052604090205415155b156105fd576105fd826114ea565b6001600160a01b038216600090815260096020526040902054600a54829161062491611ad1565b61062e9190611a78565b600a556001600160a01b038216600090815260096020526040902081905561065581611663565b6001600160a01b0390921660009081526009602052604090206001019190915550565b600f546001600160a01b0382166000908152600960205260409020600301541415806106c157506010546001600160a01b03821660009081526009602052604090206004015414155b156106cf576106cf816112a2565b6106dc81610539836106df565b50565b6001600160a01b03811660009081526009602052604081205461070457506000919050565b6001600160a01b03821660009081526009602052604081205461072690611663565b6001600160a01b03841660009081526009602052604090206001810154600f546003909201549293509114158061077a57506010546001600160a01b03851660009081526009602052604090206004015414155b156107b957601054600f5461078f9084611ab2565b6107999190611a90565b9150601054600f54826107ac9190611ab2565b6107b69190611a90565b90505b8082116107ca575060009392505050565b6107d48183611ad1565b949350505050565b6000546001600160a01b031633146107f357600080fd5b601391909155601455565b6005818154811061080e57600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b0316331461083f57600080fd5b60125460115411158061084f5750805b6108c65760405162461bcd60e51b815260206004820152602160248201527f50726576696f757320636f6e76657273696f6e206e6f7420636f6d706c65746560448201527f2e0000000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6001546040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b15801561090957600080fd5b505afa15801561091d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109419190611912565b601055600b54158061095557506000601054115b6109ed5760405162461bcd60e51b815260206004820152604560248201527f5265717569726573206174206c6561737420736f6d65206f6620696e6974696160448201527f6c20746f6b656e20746f2063616c63756c61746520636f6e76657274696f6e2060648201527f726174652e000000000000000000000000000000000000000000000000000000608482015260a4016108bd565b60105415610b135760015460035460105460405163095ea7b360e01b81526001600160a01b039283166004820152602481019190915291169063095ea7b390604401602060405180830381600087803b158015610a4957600080fd5b505af1158015610a5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8191906118dc565b506002546001546001600160a01b03908116911614610b0757600354601054604051635c11d79560e01b81526001600160a01b0390921691635c11d79591610ad491600090600490309042908301611a3c565b600060405180830381600087803b158015610aee57600080fd5b505af1158015610b02573d6000803e3d6000fd5b505050505b60065460115560006012555b600380546001600160a01b0319166001600160a01b0384161790558351610b419060049060208701906116bf565b508251610b559060059060208601906116bf565b506002546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b158015610b9a57600080fd5b505afa158015610bae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd29190611912565b9050600081118015610bf257506002546001600160a01b03878116911614155b15610cec5760025460035460405163095ea7b360e01b81526001600160a01b0391821660048201526024810184905291169063095ea7b390604401602060405180830381600087803b158015610c4757600080fd5b505af1158015610c5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7f91906118dc565b50600354604051635c11d79560e01b81526001600160a01b0390911690635c11d79590610cb99084906000908990309042906004016119cb565b600060405180830381600087803b158015610cd357600080fd5b505af1158015610ce7573d6000803e3d6000fd5b505050505b600180546001600160a01b0319166001600160a01b038816179055600b5415610dee576001546040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b158015610d5257600080fd5b505afa158015610d66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8a9190611912565b600f819055601054600b549091610da091611ab2565b610daa9190611a90565b600b55601054600f54600d54610dc09190611ab2565b610dca9190611a90565b600d55601054600f54600c54610de09190611ab2565b610dea9190611a90565b600c555b505050505050565b6004818154811061080e57600080fd5b6000546001600160a01b03163314610e1d57600080fd5b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b158015610e6157600080fd5b505afa158015610e75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e999190611912565b6005805491925090610ead90600190611ad1565b81548110610ebd57610ebd611b2f565b6000918252602090912001546002546001600160a01b0390811691161415610f4d57600260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610f2f57600080fd5b505af1158015610f43573d6000803e3d6000fd5b5050505050610fd3565b6003546040517fb6f9de950000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063b6f9de95903490610fa09060009060059030904290600401611996565b6000604051808303818588803b158015610fb957600080fd5b505af1158015610fcd573d6000803e3d6000fd5b50505050505b6001546040516370a0823160e01b815230600482015260009183916001600160a01b03909116906370a082319060240160206040518083038186803b15801561101b57600080fd5b505afa15801561102f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110539190611912565b61105d9190611ad1565b905080600b5461106d9190611a78565b600b55600a54600e54611081908390611ab2565b61108b9190611a90565b600d546110989190611a78565b600d555050565b6000546001600160a01b031633146110b657600080fd5b600654806110c2575050565b6000805a905060005b84831080156110d957508381105b1561129b5783601554106110ed5760006015555b600f546009600060066015548154811061110957611109611b2f565b60009182526020808320909101546001600160a01b0316835282019290925260400190206003015414158061118057506010546009600060066015548154811061115557611155611b2f565b60009182526020808320909101546001600160a01b0316835282019290925260400190206004015414155b156111b7576111b760066015548154811061119d5761119d611b2f565b6000918252602090912001546001600160a01b03166112a2565b60006111eb6006601554815481106111d1576111d1611b2f565b6000918252602090912001546001600160a01b03166106df565b905061122060066015548154811061120557611205611b2f565b6000918252602090912001546001600160a01b031682611680565b156112585761125860066015548154811061123d5761123d611b2f565b6000918252602090912001546001600160a01b0316826113b0565b5a6112639084611ad1565b61126d9085611a78565b93505a60158054919450600061128283611ae8565b9190505550818061129290611ae8565b925050506110cb565b5050505050565b600f546001600160a01b0382166000908152600960205260409020600301541415806112eb57506010546001600160a01b03821660009081526009602052604090206004015414155b1561139857600f80546001600160a01b038316600090815260096020526040902060038101919091556010546004820181905591546002909101546113309190611ab2565b61133a9190611a90565b6001600160a01b03821660009081526009602052604090206002810191909155601054600f54600190920154909161137191611ab2565b61137b9190611a90565b6001600160a01b0382166000908152600960205260409020600101555b601280549060006113a883611ae8565b919050555050565b6001600160a01b0382166000908152600960205260409020546113d1575050565b80156114e65780600c546113e59190611a78565b600c556001546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018490529091169063a9059cbb90604401602060405180830381600087803b15801561144f57600080fd5b505af1158015611463573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148791906118dc565b506001600160a01b038216600090815260086020908152604080832042905560099091529020600201546114bc908290611a78565b6001600160a01b038316600090815260096020526040902060028101919091555461065590611663565b5050565b600f546001600160a01b03821660009081526009602052604090206003015414158061153357506010546001600160a01b03821660009081526009602052604090206004015414155b1561154e576012805490600061154883611ae8565b91905055505b6006805461155e90600190611ad1565b8154811061156e5761156e611b2f565b60009182526020808320909101546001600160a01b03848116845260079092526040909220546006805492909316929181106115ac576115ac611b2f565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559183168152600791829052604081205460068054919392916115f890600190611ad1565b8154811061160857611608611b2f565b60009182526020808320909101546001600160a01b03168352820192909252604001902055600680548061163e5761163e611b19565b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000600e54600d54836116769190611ab2565b61049a9190611a90565b6013546001600160a01b038316600090815260086020526040812054909142916116aa9190611a78565b1080156116b8575060145482115b9392505050565b828054828255906000526020600020908101928215611714579160200282015b8281111561171457825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906116df565b50611720929150611724565b5090565b5b808211156117205760008155600101611725565b80356001600160a01b038116811461175057600080fd5b919050565b600082601f83011261176657600080fd5b8135602067ffffffffffffffff8083111561178357611783611b45565b8260051b604051601f19603f830116810181811084821117156117a8576117a8611b45565b604052848152838101925086840182880185018910156117c757600080fd5b600092505b858310156117f1576117dd81611739565b8452928401926001929092019184016117cc565b50979650505050505050565b60006020828403121561180f57600080fd5b6116b882611739565b600080600080600060a0868803121561183057600080fd5b61183986611739565b9450602086013567ffffffffffffffff8082111561185657600080fd5b61186289838a01611755565b9550604088013591508082111561187857600080fd5b5061188588828901611755565b93505061189460608701611739565b915060808601356118a481611b5b565b809150509295509295909350565b600080604083850312156118c557600080fd5b6118ce83611739565b946020939093013593505050565b6000602082840312156118ee57600080fd5b81516116b881611b5b565b60006020828403121561190b57600080fd5b5035919050565b60006020828403121561192457600080fd5b5051919050565b6000806040838503121561193e57600080fd5b50508035926020909101359150565b6000815480845260208085019450836000528060002060005b8381101561198b5781546001600160a01b031687529582019560019182019101611966565b509495945050505050565b8481526080602082015260006119af608083018661194d565b6001600160a01b03949094166040830152506060015292915050565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611a1b5784516001600160a01b0316835293830193918301916001016119f6565b50506001600160a01b03969096166060850152505050608001529392505050565b85815284602082015260a060408201526000611a5b60a083018661194d565b6001600160a01b0394909416606083015250608001529392505050565b60008219821115611a8b57611a8b611b03565b500190565b600082611aad57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615611acc57611acc611b03565b500290565b600082821015611ae357611ae3611b03565b500390565b6000600019821415611afc57611afc611b03565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b80151581146106dc57600080fdfea264697066735822122069cfbf22f537755df08314432d354b0b2e3357cbb7929d2aed12dd5c49f11f2e64736f6c634300080700334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220017b51eddf90cec1de955ca4e8a64bf8683fe34297d71d7ef11477dc54a9efe664736f6c634300080700330000000000000000000000002d4e873f9ab279da9f1bb2c532d4f06f67755b770000000000000000000000009a92b5ebf1f6f6f7d93696fcd44e5cf75035a756
Deployed Bytecode
0x6080604052600436106200036f5760003560e01c80637af2939711620001c7578063abe57e7011620000ff578063df20fd4911620000a1578063f1f3bca31162000078578063f1f3bca314620009ed578063f2fde38b1462000a12578063f708a64f1462000a37578063f887ea401462000a5c57600080fd5b8063df20fd49146200097e578063e01bb68814620009a3578063ea497b7914620009c857600080fd5b8063ca33e64c11620000d6578063ca33e64c14620008ed578063d51ed1c8146200090f578063dd62ed3e146200093457600080fd5b8063abe57e701462000875578063c5ebebc2146200089a578063c7e0f87614620008c857600080fd5b80639d1944f51162000169578063a8aa1b311162000140578063a8aa1b311462000809578063a9059cbb146200082b578063abc728d3146200085057600080fd5b80639d1944f5146200079a578063a457c2d714620007bf578063a4878a3b14620007e457600080fd5b80638da5cb5b116200019e5780638da5cb5b146200074a5780638f9a55c0146200076a57806395d89b41146200078257600080fd5b80637af29397146200070d5780637bf5b04b1462000732578063893d20e8146200074a57600080fd5b8063313826f911620002a757806362d0d26e11620002495780636ddd171311620002205780636ddd1713146200067a5780636fcba377146200069657806370a0823114620006bb578063715018a614620006f557600080fd5b806362d0d26e1462000625578063658d4b7f146200063d578063668038e0146200066257600080fd5b80634df4501f116200027e5780634df4501f14620005a057806352e3de9c14620005de5780635f64b55b146200060357600080fd5b8063313826f91462000538578063313ce567146200055d57806339509351146200057b57600080fd5b806318160ddd116200031157806323b872dd11620002e857806323b872dd14620004d65780632b112e4914620004fb5780632d48e896146200051357600080fd5b806318160ddd1462000475578063201e7991146200048c5780632198cf6c14620004b157600080fd5b8063095ea7b31162000346578063095ea7b314620003f55780631161ae39146200042b578063124aa356146200045057600080fd5b80630445b667146200037c5780630518419814620003a757806306fdde0314620003ce57600080fd5b366200037757005b600080fd5b3480156200038957600080fd5b506200039460205481565b6040519081526020015b60405180910390f35b348015620003b457600080fd5b50620003cc620003c636600462003887565b62000a7e565b005b348015620003db57600080fd5b50620003e662000b42565b6040516200039e919062003d18565b3480156200040257600080fd5b506200041a62000414366004620039e4565b62000bdc565b60405190151581526020016200039e565b3480156200043857600080fd5b506200041a6200044a36600462003afd565b62000bf4565b3480156200045d57600080fd5b50620003cc6200046f36600462003a74565b62000c0a565b3480156200048257600080fd5b50600e5462000394565b3480156200049957600080fd5b50620003cc620004ab36600462003afd565b62000cbe565b348015620004be57600080fd5b50620003cc620004d0366004620039b1565b62000d14565b348015620004e357600080fd5b506200041a620004f536600462003841565b62000d8a565b3480156200050857600080fd5b506200039462000e52565b3480156200052057600080fd5b50620003cc6200053236600462003afd565b62000e9c565b3480156200054557600080fd5b50620003cc6200055736600462003aa8565b62000f6c565b3480156200056a57600080fd5b50604051601281526020016200039e565b3480156200058857600080fd5b506200041a6200059a366004620039e4565b62000fd7565b348015620005ad57600080fd5b50620005c5620005bf36600462003a74565b62001017565b6040516001600160a01b0390911681526020016200039e565b348015620005eb57600080fd5b50620003cc620005fd36600462003906565b62001042565b3480156200061057600080fd5b50600854620005c5906001600160a01b031681565b3480156200063257600080fd5b50620005c562001174565b3480156200064a57600080fd5b50620003cc6200065c366004620039b1565b6200120e565b3480156200066f57600080fd5b50620003cc62001284565b3480156200068757600080fd5b50601f546200041a9060ff1681565b348015620006a357600080fd5b50620003cc620006b536600462003b74565b62001378565b348015620006c857600080fd5b5062000394620006da36600462003707565b6001600160a01b031660009081526010602052604090205490565b3480156200070257600080fd5b50620003cc62001419565b3480156200071a57600080fd5b50620005c56200072c36600462003a74565b62001470565b3480156200073f57600080fd5b50620003cc62001481565b3480156200075757600080fd5b506000546001600160a01b0316620005c5565b3480156200077757600080fd5b5062000394600f5481565b3480156200078f57600080fd5b50620003e6620014d0565b348015620007a757600080fd5b50620003cc620007b936600462003a74565b620014e1565b348015620007cc57600080fd5b506200041a620007de366004620039e4565b62001541565b348015620007f157600080fd5b50620003946200080336600462003707565b620015f6565b3480156200081657600080fd5b50600754620005c5906001600160a01b031681565b3480156200083857600080fd5b506200041a6200084a366004620039e4565b62001697565b3480156200085d57600080fd5b50620005c56200086f36600462003a74565b620016a6565b3480156200088257600080fd5b50620003cc6200089436600462003afd565b620016b7565b348015620008a757600080fd5b50620008b262001750565b604080519283526020830191909152016200039e565b348015620008d557600080fd5b50620003cc620008e736600462003785565b6200183d565b348015620008fa57600080fd5b50600954620005c5906001600160a01b031681565b3480156200091c57600080fd5b50620003946200092e36600462003a74565b620019ce565b3480156200094157600080fd5b50620003946200095336600462003747565b6001600160a01b03918216600090815260116020908152604080832093909416825291909152205490565b3480156200098b57600080fd5b50620003cc6200099d36600462003a53565b62001a1a565b348015620009b057600080fd5b50620003cc620009c236600462003707565b62001a98565b348015620009d557600080fd5b50620003cc620009e736600462003a74565b62001b05565b348015620009fa57600080fd5b506200039462000a0c36600462003a13565b62001b69565b34801562000a1f57600080fd5b50620003cc62000a3136600462003707565b62001b82565b34801562000a4457600080fd5b50620003cc62000a56366004620039b1565b62001c56565b34801562000a6957600080fd5b50600154620005c5906001600160a01b031681565b6000546001600160a01b0316331462000acd5760405162461bcd60e51b8152602060048201819052602482015260008051602062005df483398151915260448201526064015b60405180910390fd5b6002546040516001600160a01b039091169084908490849062000af090620035b2565b62000aff949392919062003c4b565b604051809103906000f08015801562000b1c573d6000803e3d6000fd5b50601d80546001600160a01b0319166001600160a01b0392909216919091179055505050565b6060600c805462000b539062003e55565b80601f016020809104026020016040519081016040528092919081815260200182805462000b819062003e55565b801562000bd25780601f1062000ba65761010080835404028352916020019162000bd2565b820191906000526020600020905b81548152906001019060200180831162000bb457829003601f168201915b5050505050905090565b600062000beb33848462001f85565b50600192915050565b60008262000c0283620019ce565b119392505050565b6000546001600160a01b0316331462000c555760405162461bcd60e51b8152602060048201819052602482015260008051602062005df4833981519152604482015260640162000ac4565b601d60009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801562000ca657600080fd5b505af19350505050801562000cb9575060015b505b50565b6000546001600160a01b0316331462000d095760405162461bcd60e51b8152602060048201819052602482015260008051602062005df4833981519152604482015260640162000ac4565b601b91909155601c55565b6000546001600160a01b0316331462000d5f5760405162461bcd60e51b8152602060048201819052602482015260008051602062005df4833981519152604482015260640162000ac4565b6001600160a01b03919091166000908152601360205260409020805460ff1916911515919091179055565b600062000d99848484620020e1565b506001600160a01b03841660009081526011602090815260408083203384529091529020548281101562000e365760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000606482015260840162000ac4565b62000e45853385840362001f85565b60019150505b9392505050565b600b546001600160a01b0390811660009081526010602052604080822054600a549093168252812054909162000e889162003dac565b600e5462000e97919062003e0c565b905090565b6000546001600160a01b0316331462000ee75760405162461bcd60e51b8152602060048201819052602482015260008051602062005df4833981519152604482015260640162000ac4565b601d546040517f2d48e89600000000000000000000000000000000000000000000000000000000815260048101849052602481018390526001600160a01b0390911690632d48e896906044015b600060405180830381600087803b15801562000f4f57600080fd5b505af115801562000f64573d6000803e3d6000fd5b505050505050565b6000546001600160a01b0316331462000fb75760405162461bcd60e51b8152602060048201819052602482015260008051602062005df4833981519152604482015260640162000ac4565b600a5462000fd29084906001600160a01b0316848462002469565b505050565b3360008181526011602090815260408083206001600160a01b0387168452909152812054909162000beb9185906200101190869062003dac565b62001f85565b600681815481106200102857600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b031633146200108d5760405162461bcd60e51b8152602060048201819052602482015260008051602062005df4833981519152604482015260640162000ac4565b6001600160a01b0385163b620010e65760405162461bcd60e51b815260206004820152601c60248201527f456e7465722076616c696420636f6e7472616374206164647265737300000000604482015260640162000ac4565b601d546040517f90a276310000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906390a276319062001139908890889088908890889060040162003c8d565b600060405180830381600087803b1580156200115457600080fd5b505af115801562001169573d6000803e3d6000fd5b505050505050505050565b601d54604080517ffc0c546a00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163fc0c546a916004808301926020929190829003018186803b158015620011d357600080fd5b505afa158015620011e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e97919062003727565b6000546001600160a01b03163314620012595760405162461bcd60e51b8152602060048201819052602482015260008051602062005df4833981519152604482015260640162000ac4565b6001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055565b601d546040517f15f7e05e0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b03909116906315f7e05e90602401600060405180830381600087803b158015620012e357600080fd5b505af1158015620012f8573d6000803e3d6000fd5b5050601d54601e546040517fffb2c4790000000000000000000000000000000000000000000000000000000081526001600160a01b03909216935063ffb2c47992506200134b9160040190815260200190565b600060405180830381600087803b1580156200136657600080fd5b505af192505050801562000cbb57505b565b6000546001600160a01b03163314620013c35760405162461bcd60e51b8152602060048201819052602482015260008051602062005df4833981519152604482015260640162000ac4565b6015849055601683905560188290556019819055601a54620013e790600562002494565b60185410620013f557600080fd5b601a546200140590600562002494565b601954106200141357600080fd5b50505050565b6000546001600160a01b03163314620014645760405162461bcd60e51b8152602060048201819052602482015260008051602062005df4833981519152604482015260640162000ac4565b620013766000620024a2565b600581815481106200102857600080fd5b601d54601e546040517fffb2c4790000000000000000000000000000000000000000000000000000000081526001600160a01b039092169163ffb2c479916200134b9160040190815260200190565b6060600d805462000b539062003e55565b6000546001600160a01b031633146200152c5760405162461bcd60e51b8152602060048201819052602482015260008051602062005df4833981519152604482015260640162000ac4565b620b71b081106200153c57600080fd5b601e55565b3360009081526011602090815260408083206001600160a01b038616845290915281205482811015620015dd5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840162000ac4565b620015ec338585840362001f85565b5060019392505050565b601d546040517f13adba0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015260009216906313adba0b9060240160206040518083038186803b1580156200165657600080fd5b505afa1580156200166b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001691919062003a8e565b92915050565b600062000e4b338484620020e1565b600481815481106200102857600080fd5b6000546001600160a01b03163314620017025760405162461bcd60e51b8152602060048201819052602482015260008051602062005df4833981519152604482015260640162000ac4565b600082118015620017135750600081115b80156200172257506127108111155b6200172c57600080fd5b8082600e546200173d919062003dea565b62001749919062003dc7565b600f555050565b6000805481906001600160a01b031633146200179e5760405162461bcd60e51b8152602060048201819052602482015260008051602062005df4833981519152604482015260640162000ac4565b601d54604080517f7a79015800000000000000000000000000000000000000000000000000000000815281516001600160a01b0390931692637a79015892600480840193919291829003018186803b158015620017fa57600080fd5b505afa1580156200180f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001835919062003b20565b915091509091565b6000546001600160a01b03163314620018885760405162461bcd60e51b8152602060048201819052602482015260008051602062005df4833981519152604482015260640162000ac4565b6002546200189f906001600160a01b0316620024f2565b600280546001600160a01b03199081166001600160a01b038881169182179093556001805483169091179055600780549091169186169190911790558251620018f0906004906020860190620035c0565b50815162001906906005906020850190620035c0565b5080516200191c906006906020840190620035c0565b5080600182516200192e919062003e0c565b8151811062001941576200194162003ea8565b6020908102919091010151600880546001600160a01b0319166001600160a01b03928316908117909155600354909116141562001991576003805460ff60a01b1916600160a01b1790556200199f565b6003805460ff60a01b191690555b600254600754620019bd916001600160a01b03908116911662002519565b620019c7620025ae565b5050505050565b6000620019da62000e52565b6007546001600160a01b031660009081526010602052604090205462001a01908462003dea565b62001a0e90600262003dea565b62001691919062003dc7565b6000546001600160a01b0316331462001a655760405162461bcd60e51b8152602060048201819052602482015260008051602062005df4833981519152604482015260640162000ac4565b6000811162001a7357600080fd5b601f805460ff1916831515179055600e5462001a9190829062003dc7565b6020555050565b6000546001600160a01b0316331462001ae35760405162461bcd60e51b8152602060048201819052602482015260008051602062005df4833981519152604482015260640162000ac4565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331462001b505760405162461bcd60e51b8152602060048201819052602482015260008051602062005df4833981519152604482015260640162000ac4565b600a5462000cbb9082906001600160a01b0316620027e0565b6000811562001b7a57505060195490565b505060185490565b6000546001600160a01b0316331462001bcd5760405162461bcd60e51b8152602060048201819052602482015260008051602062005df4833981519152604482015260640162000ac4565b6001600160a01b03811662001c4b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840162000ac4565b62000cbb81620024a2565b6000546001600160a01b0316331462001ca15760405162461bcd60e51b8152602060048201819052602482015260008051602062005df4833981519152604482015260640162000ac4565b6001600160a01b038216301480159062001cc957506007546001600160a01b03838116911614155b62001cd357600080fd5b6001600160a01b0382166000908152601460205260409020805460ff1916821580159190911790915562001d3b57601d54604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152909116906314b6ca969060440162000f34565b601d546001600160a01b0383811660008181526010602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca969060440162000f34565b60025460085462001da5916001600160a01b039182169116600062001dcf565b60025460085462000cb9916001600160a01b0391821691166fffffffffffffffffffffffffffffffff5b80158062001e7657506040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03838116602483015284169063dd62ed3e9060440160206040518083038186803b15801562001e3957600080fd5b505afa15801562001e4e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001e74919062003a8e565b155b62001eea5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e636500000000000000000000606482015260840162000ac4565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b30000000000000000000000000000000000000000000000000000000017905262000fd290849062002807565b606062001f7d8484600085620028f3565b949350505050565b6001600160a01b038316620020025760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840162000ac4565b6001600160a01b038216620020805760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840162000ac4565b6001600160a01b0383811660008181526011602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166000908152601060205260408120548211156200214b5760405162461bcd60e51b815260206004820152601460248201527f496e73756666696369656e742062616c616e6365000000000000000000000000604482015260640162000ac4565b60215460ff16156200216c576200216484848462002a3c565b905062000e4b565b6007546001600160a01b03848116911614801581620021995750600a546001600160a01b03858116911614155b15620021cc576001600160a01b03841660009081526013602052604090205460ff16620021cc57620021cc848462002ada565b6001600160a01b038516600090815260106020908152604080832080548790039055601290915281205460ff161562002206578362002213565b6200221382878662002b79565b9050620022208562002c31565b156200223157620022318462002ca1565b6001600160a01b0385166000908152601060205260409020546200225790829062003dac565b6001600160a01b0380871660009081526010602090815260408083209490945591891681526014909152205460ff16620022fe57601d546001600160a01b0387811660008181526010602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015620022ea57600080fd5b505af1925050508015620022fc575060015b505b6001600160a01b03851660009081526014602052604090205460ff166200239257601d546001600160a01b0386811660008181526010602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b1580156200237e57600080fd5b505af192505050801562002390575060015b505b601d54601e546040517fffb2c4790000000000000000000000000000000000000000000000000000000081526001600160a01b039092169163ffb2c47991620023e19160040190815260200190565b600060405180830381600087803b158015620023fc57600080fd5b505af19250505080156200240e575060015b50846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200245591815260200190565b60405180910390a350600195945050505050565b6021805460ff19166001179055620024848484848462002e1f565b50506021805460ff191690555050565b600062000e4b828462003dc7565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b620024fd8162003039565b6200250b3382600062001f85565b62000cbb3082600062001f85565b62002525828262001d85565b620025333383600062001f85565b62002542338360001962001f85565b620025503083600062001f85565b6200255f308360001962001f85565b6001600160a01b0391821660009081526013602090815260408083208054600160ff19918216811790925594909516835280832080548516861790556014909152902080549091169091179055565b306001600160a01b03166004600081548110620025cf57620025cf62003ea8565b6000918252602090912001546001600160a01b031614620026335760405162461bcd60e51b815260206004820152601960248201527f746f4e6174697665526f7574655b305d20213d20687964726f00000000000000604482015260640162000ac4565b600354600480546001600160a01b0390921691620026549060019062003e0c565b8154811062002667576200266762003ea8565b6000918252602090912001546001600160a01b031614620026cb5760405162461bcd60e51b815260206004820152601d60248201527f746f4e6174697665526f7574655b6c6173745d20213d206e6174697665000000604482015260640162000ac4565b600354600580546001600160a01b0390921691600090620026f057620026f062003ea8565b6000918252602090912001546001600160a01b031614620027545760405162461bcd60e51b815260206004820152601c60248201527f66726f6d4e6174697665526f7574655b305d20213d206e617469766500000000604482015260640162000ac4565b60058054309190620027699060019062003e0c565b815481106200277c576200277c62003ea8565b6000918252602090912001546001600160a01b031614620013765760405162461bcd60e51b815260206004820152601e60248201527f66726f6d4e6174697665526f7574655b6c6173745d20213d20687964726f0000604482015260640162000ac4565b6021805460ff19166001179055620027f9828262003059565b50506021805460ff19169055565b60006200285e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031662001f6c9092919063ffffffff16565b80519091501562000fd257808060200190518101906200287f919062003a33565b62000fd25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840162000ac4565b6060824710156200296d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840162000ac4565b843b620029bd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000ac4565b600080866001600160a01b03168587604051620029db919062003c2d565b60006040518083038185875af1925050503d806000811462002a1a576040519150601f19603f3d011682016040523d82523d6000602084013e62002a1f565b606091505b509150915062002a31828286620030cd565b979650505050505050565b6001600160a01b038084166000908152601060205260408082208054859003905591841681529081205462002a7390839062003dac565b6001600160a01b0380851660008181526010602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9062002ac89086815260200190565b60405180910390a35060019392505050565b600f546001600160a01b03831660009081526010602052604090205462002b0390839062003dac565b111562000cb95760405162461bcd60e51b815260206004820152602560248201527f5472616e7366657220616d6f756e74206578636565647320746865206261672060448201527f73697a652e000000000000000000000000000000000000000000000000000000606482015260840162000ac4565b600080601a5462002b8a8662001b69565b62002b96908562003dea565b62002ba2919062003dc7565b3060009081526010602052604090205490915062002bc290829062003dac565b30600081815260106020526040908190209290925590516001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9062002c149085815260200190565b60405180910390a362002c28818462003e0c565b95945050505050565b6007546000906001600160a01b0316331480159062002c53575060215460ff16155b801562002c625750601f5460ff165b801562002c7c57506007546001600160a01b038381169116145b8015620016915750602080543060009081526010909252604090912054101592915050565b6021805460ff1916600117905530600090815260106020526040902054819081111562002cda5750306000908152601060205260409020545b600062002cec601b54601c5462000bf4565b62002cfa5760155462002cfd565b60005b9050600062002d2a600262002d2360175462002d2386886200310b90919063ffffffff16565b9062002494565b9050600062002d3a828562003e0c565b9050600062002d498262003119565b9050600062002d6f600262002d2360175462002d2389876200310b90919063ffffffff16565b9050600062002d9160175462002d23601654866200310b90919063ffffffff16565b9050601d60009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801562002de457600080fd5b505af19350505050801562002df7575060015b50841562002e0b5762002e0b8286620031f6565b50506021805460ff19169055505050505050565b600181511162002e985760405162461bcd60e51b815260206004820152602860248201527f526f757465206e65656420746f2068617665206174206c65617374203220616460448201527f6472657373657321000000000000000000000000000000000000000000000000606482015260840162000ac4565b306001600160a01b0316816001835162002eb3919062003e0c565b8151811062002ec65762002ec662003ea8565b60200260200101516001600160a01b03161462002f4c5760405162461bcd60e51b815260206004820152602560248201527f4c61737420726f7574652061646472657373206e6565656420746f206265206860448201527f7964726f21000000000000000000000000000000000000000000000000000000606482015260840162000ac4565b6008546001600160a01b0383811691161462002fab5760025462002f7f906001600160a01b038481169116600062001dcf565b60025462002fab906001600160a01b0384811691166fffffffffffffffffffffffffffffffff62001dcf565b6001546040517f5c11d7950000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690635c11d7959062002fff90879060009086908990429060040162003d4d565b600060405180830381600087803b1580156200301a57600080fd5b505af11580156200302f573d6000803e3d6000fd5b5050505050505050565b60025460085462000cbb916001600160a01b039182169116600062001dcf565b60015460405163b6f9de9560e01b81526001600160a01b039091169063b6f9de9590849062003095906000906005908790429060040162003ce1565b6000604051808303818588803b158015620030af57600080fd5b505af1158015620030c4573d6000803e3d6000fd5b50505050505050565b60608315620030de57508162000e4b565b825115620030ef5782518084602001fd5b8160405162461bcd60e51b815260040162000ac4919062003d18565b600062000e4b828462003dea565b6002546000904790620031389030906001600160a01b03168462001dcf565b600254620031629030906001600160a01b03166fffffffffffffffffffffffffffffffff62001dcf565b600180546040517f791ac9470000000000000000000000000000000000000000000000000000000081526001600160a01b039091169163791ac94791620031b491879160049030904290830162003d8b565b600060405180830381600087803b158015620031cf57600080fd5b505af1158015620031e4573d6000803e3d6000fd5b50505050804762000e4b919062003e0c565b600354600160a01b900460ff16156200330a576001546009546040517ff305d7190000000000000000000000000000000000000000000000000000000081523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990849060c4016060604051808303818588803b1580156200328e57600080fd5b505af1158015620032a3573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190620032ca919062003b45565b505060408051838152602081018590527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15050565b6008546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b1580156200334f57600080fd5b505afa15801562003364573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200338a919062003a8e565b60015460405163b6f9de9560e01b81529192506001600160a01b03169063b6f9de95908590620033c7906000906006903090429060040162003ce1565b6000604051808303818588803b158015620033e157600080fd5b505af1158015620033f6573d6000803e3d6000fd5b50506008546040516370a0823160e01b8152306004820152600094506001600160a01b0390911692506370a08231915060240160206040518083038186803b1580156200344257600080fd5b505afa15801562003457573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200347d919062003a8e565b905060006200348d8284620035a4565b6001546008546009546040517fe8e337000000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b039283166024820152604481018990526064810185905260006084820181905260a482015290821660c48201524260e4820152929350169063e8e337009061010401606060405180830381600087803b1580156200352657600080fd5b505af11580156200353b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003561919062003b45565b505060408051868152602081018490527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15050505050565b600062000e4b828462003e0c565b611efa8062003efa83390190565b82805482825590600052602060002090810192821562003618579160200282015b828111156200361857825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190620035e1565b50620036269291506200362a565b5090565b5b808211156200362657600081556001016200362b565b80356200364e8162003ed4565b919050565b600082601f8301126200366557600080fd5b8135602067ffffffffffffffff8083111562003685576200368562003ebe565b8260051b604051601f19603f83011681018181108482111715620036ad57620036ad62003ebe565b60405284815283810192508684018288018501891015620036cd57600080fd5b600092505b85831015620036fb57620036e68162003641565b845292840192600192909201918401620036d2565b50979650505050505050565b6000602082840312156200371a57600080fd5b813562000e4b8162003ed4565b6000602082840312156200373a57600080fd5b815162000e4b8162003ed4565b600080604083850312156200375b57600080fd5b8235620037688162003ed4565b915060208301356200377a8162003ed4565b809150509250929050565b600080600080600060a086880312156200379e57600080fd5b8535620037ab8162003ed4565b94506020860135620037bd8162003ed4565b9350604086013567ffffffffffffffff80821115620037db57600080fd5b620037e989838a0162003653565b945060608801359150808211156200380057600080fd5b6200380e89838a0162003653565b935060808801359150808211156200382557600080fd5b50620038348882890162003653565b9150509295509295909350565b6000806000606084860312156200385757600080fd5b8335620038648162003ed4565b92506020840135620038768162003ed4565b929592945050506040919091013590565b6000806000606084860312156200389d57600080fd5b8335620038aa8162003ed4565b9250602084013567ffffffffffffffff80821115620038c857600080fd5b620038d68783880162003653565b93506040860135915080821115620038ed57600080fd5b50620038fc8682870162003653565b9150509250925092565b600080600080600060a086880312156200391f57600080fd5b85356200392c8162003ed4565b9450602086013567ffffffffffffffff808211156200394a57600080fd5b6200395889838a0162003653565b955060408801359150808211156200396f57600080fd5b506200397e8882890162003653565b9350506060860135620039918162003ed4565b91506080860135620039a38162003eea565b809150509295509295909350565b60008060408385031215620039c557600080fd5b8235620039d28162003ed4565b915060208301356200377a8162003eea565b60008060408385031215620039f857600080fd5b823562003a058162003ed4565b946020939093013593505050565b60006020828403121562003a2657600080fd5b813562000e4b8162003eea565b60006020828403121562003a4657600080fd5b815162000e4b8162003eea565b6000806040838503121562003a6757600080fd5b823562003a058162003eea565b60006020828403121562003a8757600080fd5b5035919050565b60006020828403121562003aa157600080fd5b5051919050565b60008060006060848603121562003abe57600080fd5b83359250602084013562003ad28162003ed4565b9150604084013567ffffffffffffffff81111562003aef57600080fd5b620038fc8682870162003653565b6000806040838503121562003b1157600080fd5b50508035926020909101359150565b6000806040838503121562003b3457600080fd5b505080516020909101519092909150565b60008060006060848603121562003b5b57600080fd5b8351925060208401519150604084015190509250925092565b6000806000806080858703121562003b8b57600080fd5b5050823594602084013594506040840135936060013592509050565b600081518084526020808501945080840160005b8381101562003be25781516001600160a01b03168752958201959082019060010162003bbb565b509495945050505050565b6000815480845260208085019450836000528060002060005b8381101562003be25781546001600160a01b03168752958201956001918201910162003c06565b6000825162003c4181846020870162003e26565b9190910192915050565b60006001600160a01b0380871683528086166020840152506080604083015262003c79608083018562003ba7565b828103606084015262002a31818562003ba7565b60006001600160a01b03808816835260a0602084015262003cb260a084018862003ba7565b838103604085015262003cc6818862003ba7565b95909116606084015250509015156080909101529392505050565b84815260806020820152600062003cfc608083018662003bed565b6001600160a01b03949094166040830152506060015292915050565b602081526000825180602084015262003d3981604085016020870162003e26565b601f01601f19169190910160400192915050565b85815284602082015260a06040820152600062003d6e60a083018662003ba7565b6001600160a01b0394909416606083015250608001529392505050565b85815284602082015260a06040820152600062003d6e60a083018662003bed565b6000821982111562003dc25762003dc262003e92565b500190565b60008262003de557634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161562003e075762003e0762003e92565b500290565b60008282101562003e215762003e2162003e92565b500390565b60005b8381101562003e4357818101518382015260200162003e29565b83811115620014135750506000910152565b600181811c9082168062003e6a57607f821691505b6020821081141562003e8c57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811462000cbb57600080fd5b801515811462000cbb57600080fdfe60806040526ec097ce7bc90715b34b9f1000000000600e55610e10601355670de0b6b3a76400006014553480156200003657600080fd5b5060405162001efa38038062001efa833981016040819052620000599162000269565b600380546001600160a01b038087166001600160a01b031992831617909255600180549286169290911691909117905581516200009e90600490602085019062000118565b508051620000b490600590602084019062000118565b508160018351620000c69190620002f9565b81518110620000d957620000d96200031f565b6020908102919091010151600280546001600160a01b039092166001600160a01b03199283161790556000805490911633179055506200034b92505050565b82805482825590600052602060002090810192821562000170579160200282015b828111156200017057825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000139565b506200017e92915062000182565b5090565b5b808211156200017e576000815560010162000183565b80516001600160a01b0381168114620001b157600080fd5b919050565b600082601f830112620001c857600080fd5b815160206001600160401b0380831115620001e757620001e762000335565b8260051b604051601f19603f830116810181811084821117156200020f576200020f62000335565b604052848152838101925086840182880185018910156200022f57600080fd5b600092505b858310156200025d57620002488162000199565b84529284019260019290920191840162000234565b50979650505050505050565b600080600080608085870312156200028057600080fd5b6200028b8562000199565b93506200029b6020860162000199565b60408601519093506001600160401b0380821115620002b957600080fd5b620002c788838901620001b6565b93506060870151915080821115620002de57600080fd5b50620002ed87828801620001b6565b91505092959194509250565b6000828210156200031a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b611b9f806200035b6000396000f3fe60806040526004361061018b5760003560e01c806390a27631116100d6578063d37f32341161007f578063fc0c546a11610059578063fc0c546a1461043b578063ffb2c47914610459578063ffd49c841461047957600080fd5b8063d37f3234146103f9578063e2d2e2191461040f578063efca2eed1461042557600080fd5b8063abc728d3116100b0578063abc728d31461035f578063ce7c2ac21461037f578063d0e30db0146103f157600080fd5b806390a2763114610313578063953851cb14610333578063997664d71461034957600080fd5b806333c75d9b11610138578063596d822d11610112578063596d822d1461029d5780637a790158146102b35780637af29397146102db57600080fd5b806333c75d9b1461025b5780633a98ef39146102715780634fab0ae81461028757600080fd5b806315f7e05e1161016957806315f7e05e146101fb57806328fd31981461021b5780632d48e8961461023b57600080fd5b806311ce023d1461019057806313adba0b146101b957806314b6ca96146101d9575b600080fd5b34801561019c57600080fd5b506101a6600e5481565b6040519081526020015b60405180910390f35b3480156101c557600080fd5b506101a66101d43660046117fd565b61048f565b3480156101e557600080fd5b506101f96101f43660046118b2565b6104a0565b005b34801561020757600080fd5b506101f96102163660046117fd565b610678565b34801561022757600080fd5b506101a66102363660046117fd565b6106df565b34801561024757600080fd5b506101f961025636600461192b565b6107dc565b34801561026757600080fd5b506101a660125481565b34801561027d57600080fd5b506101a6600a5481565b34801561029357600080fd5b506101a660145481565b3480156102a957600080fd5b506101a660105481565b3480156102bf57600080fd5b50601154601254604080519283526020830191909152016101b0565b3480156102e757600080fd5b506102fb6102f63660046118f9565b6107fe565b6040516001600160a01b0390911681526020016101b0565b34801561031f57600080fd5b506101f961032e366004611818565b610828565b34801561033f57600080fd5b506101a660115481565b34801561035557600080fd5b506101a6600b5481565b34801561036b57600080fd5b506102fb61037a3660046118f9565b610df6565b34801561038b57600080fd5b506103c961039a3660046117fd565b600960205260009081526040902080546001820154600283015460038401546004909401549293919290919085565b604080519586526020860194909452928401919091526060830152608082015260a0016101b0565b6101f9610e06565b34801561040557600080fd5b506101a6600f5481565b34801561041b57600080fd5b506101a6600d5481565b34801561043157600080fd5b506101a6600c5481565b34801561044757600080fd5b506001546001600160a01b03166102fb565b34801561046557600080fd5b506101f96104743660046118f9565b61109f565b34801561048557600080fd5b506101a660135481565b600061049a826106df565b92915050565b6000546001600160a01b031633146104b757600080fd5b6001600160a01b0382166000908152600960205260409020541561053e57600f546001600160a01b03831660009081526009602052604090206003015414158061051e57506010546001600160a01b03831660009081526009602052604090206004015414155b1561052c5761052c826112a2565b61053e82610539846106df565b6113b0565b60008111801561056457506001600160a01b038216600090815260096020526040902054155b156105ca57600680546001600160a01b0384166000818152600760205260408120839055600183018455929092527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b03191690911790556105fd565b801580156105ef57506001600160a01b03821660009081526009602052604090205415155b156105fd576105fd826114ea565b6001600160a01b038216600090815260096020526040902054600a54829161062491611ad1565b61062e9190611a78565b600a556001600160a01b038216600090815260096020526040902081905561065581611663565b6001600160a01b0390921660009081526009602052604090206001019190915550565b600f546001600160a01b0382166000908152600960205260409020600301541415806106c157506010546001600160a01b03821660009081526009602052604090206004015414155b156106cf576106cf816112a2565b6106dc81610539836106df565b50565b6001600160a01b03811660009081526009602052604081205461070457506000919050565b6001600160a01b03821660009081526009602052604081205461072690611663565b6001600160a01b03841660009081526009602052604090206001810154600f546003909201549293509114158061077a57506010546001600160a01b03851660009081526009602052604090206004015414155b156107b957601054600f5461078f9084611ab2565b6107999190611a90565b9150601054600f54826107ac9190611ab2565b6107b69190611a90565b90505b8082116107ca575060009392505050565b6107d48183611ad1565b949350505050565b6000546001600160a01b031633146107f357600080fd5b601391909155601455565b6005818154811061080e57600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b0316331461083f57600080fd5b60125460115411158061084f5750805b6108c65760405162461bcd60e51b815260206004820152602160248201527f50726576696f757320636f6e76657273696f6e206e6f7420636f6d706c65746560448201527f2e0000000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6001546040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b15801561090957600080fd5b505afa15801561091d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109419190611912565b601055600b54158061095557506000601054115b6109ed5760405162461bcd60e51b815260206004820152604560248201527f5265717569726573206174206c6561737420736f6d65206f6620696e6974696160448201527f6c20746f6b656e20746f2063616c63756c61746520636f6e76657274696f6e2060648201527f726174652e000000000000000000000000000000000000000000000000000000608482015260a4016108bd565b60105415610b135760015460035460105460405163095ea7b360e01b81526001600160a01b039283166004820152602481019190915291169063095ea7b390604401602060405180830381600087803b158015610a4957600080fd5b505af1158015610a5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8191906118dc565b506002546001546001600160a01b03908116911614610b0757600354601054604051635c11d79560e01b81526001600160a01b0390921691635c11d79591610ad491600090600490309042908301611a3c565b600060405180830381600087803b158015610aee57600080fd5b505af1158015610b02573d6000803e3d6000fd5b505050505b60065460115560006012555b600380546001600160a01b0319166001600160a01b0384161790558351610b419060049060208701906116bf565b508251610b559060059060208601906116bf565b506002546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b158015610b9a57600080fd5b505afa158015610bae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd29190611912565b9050600081118015610bf257506002546001600160a01b03878116911614155b15610cec5760025460035460405163095ea7b360e01b81526001600160a01b0391821660048201526024810184905291169063095ea7b390604401602060405180830381600087803b158015610c4757600080fd5b505af1158015610c5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7f91906118dc565b50600354604051635c11d79560e01b81526001600160a01b0390911690635c11d79590610cb99084906000908990309042906004016119cb565b600060405180830381600087803b158015610cd357600080fd5b505af1158015610ce7573d6000803e3d6000fd5b505050505b600180546001600160a01b0319166001600160a01b038816179055600b5415610dee576001546040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b158015610d5257600080fd5b505afa158015610d66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8a9190611912565b600f819055601054600b549091610da091611ab2565b610daa9190611a90565b600b55601054600f54600d54610dc09190611ab2565b610dca9190611a90565b600d55601054600f54600c54610de09190611ab2565b610dea9190611a90565b600c555b505050505050565b6004818154811061080e57600080fd5b6000546001600160a01b03163314610e1d57600080fd5b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b158015610e6157600080fd5b505afa158015610e75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e999190611912565b6005805491925090610ead90600190611ad1565b81548110610ebd57610ebd611b2f565b6000918252602090912001546002546001600160a01b0390811691161415610f4d57600260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610f2f57600080fd5b505af1158015610f43573d6000803e3d6000fd5b5050505050610fd3565b6003546040517fb6f9de950000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063b6f9de95903490610fa09060009060059030904290600401611996565b6000604051808303818588803b158015610fb957600080fd5b505af1158015610fcd573d6000803e3d6000fd5b50505050505b6001546040516370a0823160e01b815230600482015260009183916001600160a01b03909116906370a082319060240160206040518083038186803b15801561101b57600080fd5b505afa15801561102f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110539190611912565b61105d9190611ad1565b905080600b5461106d9190611a78565b600b55600a54600e54611081908390611ab2565b61108b9190611a90565b600d546110989190611a78565b600d555050565b6000546001600160a01b031633146110b657600080fd5b600654806110c2575050565b6000805a905060005b84831080156110d957508381105b1561129b5783601554106110ed5760006015555b600f546009600060066015548154811061110957611109611b2f565b60009182526020808320909101546001600160a01b0316835282019290925260400190206003015414158061118057506010546009600060066015548154811061115557611155611b2f565b60009182526020808320909101546001600160a01b0316835282019290925260400190206004015414155b156111b7576111b760066015548154811061119d5761119d611b2f565b6000918252602090912001546001600160a01b03166112a2565b60006111eb6006601554815481106111d1576111d1611b2f565b6000918252602090912001546001600160a01b03166106df565b905061122060066015548154811061120557611205611b2f565b6000918252602090912001546001600160a01b031682611680565b156112585761125860066015548154811061123d5761123d611b2f565b6000918252602090912001546001600160a01b0316826113b0565b5a6112639084611ad1565b61126d9085611a78565b93505a60158054919450600061128283611ae8565b9190505550818061129290611ae8565b925050506110cb565b5050505050565b600f546001600160a01b0382166000908152600960205260409020600301541415806112eb57506010546001600160a01b03821660009081526009602052604090206004015414155b1561139857600f80546001600160a01b038316600090815260096020526040902060038101919091556010546004820181905591546002909101546113309190611ab2565b61133a9190611a90565b6001600160a01b03821660009081526009602052604090206002810191909155601054600f54600190920154909161137191611ab2565b61137b9190611a90565b6001600160a01b0382166000908152600960205260409020600101555b601280549060006113a883611ae8565b919050555050565b6001600160a01b0382166000908152600960205260409020546113d1575050565b80156114e65780600c546113e59190611a78565b600c556001546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018490529091169063a9059cbb90604401602060405180830381600087803b15801561144f57600080fd5b505af1158015611463573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148791906118dc565b506001600160a01b038216600090815260086020908152604080832042905560099091529020600201546114bc908290611a78565b6001600160a01b038316600090815260096020526040902060028101919091555461065590611663565b5050565b600f546001600160a01b03821660009081526009602052604090206003015414158061153357506010546001600160a01b03821660009081526009602052604090206004015414155b1561154e576012805490600061154883611ae8565b91905055505b6006805461155e90600190611ad1565b8154811061156e5761156e611b2f565b60009182526020808320909101546001600160a01b03848116845260079092526040909220546006805492909316929181106115ac576115ac611b2f565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559183168152600791829052604081205460068054919392916115f890600190611ad1565b8154811061160857611608611b2f565b60009182526020808320909101546001600160a01b03168352820192909252604001902055600680548061163e5761163e611b19565b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000600e54600d54836116769190611ab2565b61049a9190611a90565b6013546001600160a01b038316600090815260086020526040812054909142916116aa9190611a78565b1080156116b8575060145482115b9392505050565b828054828255906000526020600020908101928215611714579160200282015b8281111561171457825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906116df565b50611720929150611724565b5090565b5b808211156117205760008155600101611725565b80356001600160a01b038116811461175057600080fd5b919050565b600082601f83011261176657600080fd5b8135602067ffffffffffffffff8083111561178357611783611b45565b8260051b604051601f19603f830116810181811084821117156117a8576117a8611b45565b604052848152838101925086840182880185018910156117c757600080fd5b600092505b858310156117f1576117dd81611739565b8452928401926001929092019184016117cc565b50979650505050505050565b60006020828403121561180f57600080fd5b6116b882611739565b600080600080600060a0868803121561183057600080fd5b61183986611739565b9450602086013567ffffffffffffffff8082111561185657600080fd5b61186289838a01611755565b9550604088013591508082111561187857600080fd5b5061188588828901611755565b93505061189460608701611739565b915060808601356118a481611b5b565b809150509295509295909350565b600080604083850312156118c557600080fd5b6118ce83611739565b946020939093013593505050565b6000602082840312156118ee57600080fd5b81516116b881611b5b565b60006020828403121561190b57600080fd5b5035919050565b60006020828403121561192457600080fd5b5051919050565b6000806040838503121561193e57600080fd5b50508035926020909101359150565b6000815480845260208085019450836000528060002060005b8381101561198b5781546001600160a01b031687529582019560019182019101611966565b509495945050505050565b8481526080602082015260006119af608083018661194d565b6001600160a01b03949094166040830152506060015292915050565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611a1b5784516001600160a01b0316835293830193918301916001016119f6565b50506001600160a01b03969096166060850152505050608001529392505050565b85815284602082015260a060408201526000611a5b60a083018661194d565b6001600160a01b0394909416606083015250608001529392505050565b60008219821115611a8b57611a8b611b03565b500190565b600082611aad57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615611acc57611acc611b03565b500290565b600082821015611ae357611ae3611b03565b500390565b6000600019821415611afc57611afc611b03565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b80151581146106dc57600080fdfea264697066735822122069cfbf22f537755df08314432d354b0b2e3357cbb7929d2aed12dd5c49f11f2e64736f6c634300080700334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220017b51eddf90cec1de955ca4e8a64bf8683fe34297d71d7ef11477dc54a9efe664736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000002d4e873f9ab279da9f1bb2c532d4f06f67755b770000000000000000000000009a92b5ebf1f6f6f7d93696fcd44e5cf75035a756
-----Decoded View---------------
Arg [0] : _routerAddress (address): 0x2d4e873f9Ab279da9f1bb2c532d4F06f67755b77
Arg [1] : _tokenB (address): 0x9A92B5EBf1F6F6f7d93696FCD44e5Cf75035A756
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000002d4e873f9ab279da9f1bb2c532d4f06f67755b77
Arg [1] : 0000000000000000000000009a92b5ebf1f6f6f7d93696fcd44e5cf75035a756
Deployed Bytecode Sourcemap
51698:15181:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52971:50;;;;;;;;;;;;;;;;;;;23171:25:1;;;23159:2;23144:18;52971:50:0;;;;;;;;58724:340;;;;;;;;;;-1:-1:-1;58724:340:0;;;;;:::i;:::-;;:::i;:::-;;54120:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;55416:208::-;;;;;;;;;;-1:-1:-1;55416:208:0;;;;;:::i;:::-;;:::i;:::-;;;14464:14:1;;14457:22;14439:41;;14427:2;14412:18;55416:208:0;14299:187:1;65358:182:0;;;;;;;;;;-1:-1:-1;65358:182:0;;;;;:::i;:::-;;:::i;61944:134::-;;;;;;;;;;-1:-1:-1;61944:134:0;;;;;:::i;:::-;;:::i;53820:102::-;;;;;;;;;;-1:-1:-1;53902:12:0;;53820:102;;64441:205;;;;;;;;;;-1:-1:-1;64441:205:0;;;;;:::i;:::-;;:::i;63532:158::-;;;;;;;;;;-1:-1:-1;63532:158:0;;;;;:::i;:::-;;:::i;56216:523::-;;;;;;;;;;-1:-1:-1;56216:523:0;;;;;:::i;:::-;;:::i;65012:138::-;;;;;;;;;;;;;:::i;64654:207::-;;;;;;;;;;-1:-1:-1;64654:207:0;;;;;:::i;:::-;;:::i;61381:213::-;;;;;;;;;;-1:-1:-1;61381:213:0;;;;;:::i;:::-;;:::i;53930:85::-;;;;;;;;;;-1:-1:-1;53930:85:0;;52066:2;24827:36:1;;24815:2;24800:18;53930:85:0;24685:184:1;54433:293:0;;;;;;;;;;-1:-1:-1;54433:293:0;;;;;:::i;:::-;;:::i;46035:30::-;;;;;;;;;;-1:-1:-1;46035:30:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;10397:55:1;;;10379:74;;10367:2;10352:18;46035:30:0;10233:226:1;62086:468:0;;;;;;;;;;-1:-1:-1;62086:468:0;;;;;:::i;:::-;;:::i;46098:21::-;;;;;;;;;;-1:-1:-1;46098:21:0;;;;-1:-1:-1;;;;;46098:21:0;;;66767:109;;;;;;;;;;;;;:::i;63405:119::-;;;;;;;;;;-1:-1:-1;63405:119:0;;;;;:::i;:::-;;:::i;65732:152::-;;;;;;;;;;;;;:::i;52934:30::-;;;;;;;;;;-1:-1:-1;52934:30:0;;;;;;;;63698:488;;;;;;;;;;-1:-1:-1;63698:488:0;;;;;:::i;:::-;;:::i;54306:119::-;;;;;;;;;;-1:-1:-1;54306:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;54399:18:0;54372:7;54399:18;;;:9;:18;;;;;;;54306:119;2602:94;;;;;;;;;;;;;:::i;45996:32::-;;;;;;;;;;-1:-1:-1;45996:32:0;;;;;:::i;:::-;;:::i;65892:106::-;;;;;;;;;;;;;:::i;54213:85::-;;;;;;;;;;-1:-1:-1;54256:7:0;2024:6;-1:-1:-1;;;;;2024:6:0;54213:85;65012:138;52128:56;;;;;;;;;;;;;;;;54023:89;;;;;;;;;;;;;:::i;64869:135::-;;;;;;;;;;-1:-1:-1;64869:135:0;;;;;:::i;:::-;;:::i;54734:478::-;;;;;;;;;;-1:-1:-1;54734:478:0;;;;;:::i;:::-;;:::i;65548:176::-;;;;;;;;;;-1:-1:-1;65548:176:0;;;;;:::i;:::-;;:::i;46072:19::-;;;;;;;;;;-1:-1:-1;46072:19:0;;;;-1:-1:-1;;;;;46072:19:0;;;56020:188;;;;;;;;;;-1:-1:-1;56020:188:0;;;;;:::i;:::-;;:::i;45959:30::-;;;;;;;;;;-1:-1:-1;45959:30:0;;;;;:::i;:::-;;:::i;62776:240::-;;;;;;;;;;-1:-1:-1;62776:240:0;;;;;:::i;:::-;;:::i;62562:206::-;;;;;;;;;;;;;:::i;:::-;;;;24606:25:1;;;24662:2;24647:18;;24640:34;;;;24579:18;62562:206:0;24432:248:1;47352:806:0;;;;;;;;;;-1:-1:-1;47352:806:0;;;;;:::i;:::-;;:::i;46128:36::-;;;;;;;;;;-1:-1:-1;46128:36:0;;;;-1:-1:-1;;;;;46128:36:0;;;65158:192;;;;;;;;;;-1:-1:-1;65158:192:0;;;;;:::i;:::-;;:::i;55220:188::-;;;;;;;;;;-1:-1:-1;55220:188:0;;;;;:::i;:::-;-1:-1:-1;;;;;55372:19:0;;;55340:7;55372:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;55220:188;64194:239;;;;;;;;;;-1:-1:-1;64194:239:0;;;;;:::i;:::-;;:::i;49940:164::-;;;;;;;;;;-1:-1:-1;49940:164:0;;;;;:::i;:::-;;:::i;61265:108::-;;;;;;;;;;-1:-1:-1;61265:108:0;;;;;:::i;:::-;;:::i;59194:171::-;;;;;;;;;;-1:-1:-1;59194:171:0;;;;;:::i;:::-;;:::i;2851:192::-;;;;;;;;;;-1:-1:-1;2851:192:0;;;;;:::i;:::-;;:::i;63024:373::-;;;;;;;;;;-1:-1:-1;63024:373:0;;;;;:::i;:::-;;:::i;45843:32::-;;;;;;;;;;-1:-1:-1;45843:32:0;;;;-1:-1:-1;;;;;45843:32:0;;;58724:340;1997:7;2024:6;-1:-1:-1;;;;;2024:6:0;813:10;2171:23;2163:68;;;;-1:-1:-1;;;2163:68:0;;19793:2:1;2163:68:0;;;19775:21:1;;;19812:18;;;19805:30;-1:-1:-1;;;;;;;;;;;19851:18:1;;;19844:62;19923:18;;2163:68:0;;;;;;;;;58945:13:::1;::::0;58907:149:::1;::::0;-1:-1:-1;;;;;58945:13:0;;::::1;::::0;58973:12;;59000:14;;59029:16;;58907:149:::1;::::0;::::1;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;58893:11:0::1;:163:::0;;-1:-1:-1;;;;;;58893:163:0::1;-1:-1:-1::0;;;;;58893:163:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;58724:340:0:o;54120:85::-;54159:13;54192:5;54185:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54120:85;:::o;55416:208::-;55535:4;55557:37;55566:10;55578:7;55587:6;55557:8;:37::i;:::-;-1:-1:-1;55612:4:0;55416:208;;;;:::o;65358:182::-;65465:4;65526:6;65494:29;65514:8;65494:19;:29::i;:::-;:38;;65358:182;-1:-1:-1;;;65358:182:0:o;61944:134::-;1997:7;2024:6;-1:-1:-1;;;;;2024:6:0;813:10;2171:23;2163:68;;;;-1:-1:-1;;;2163:68:0;;19793:2:1;2163:68:0;;;19775:21:1;;;19812:18;;;19805:30;-1:-1:-1;;;;;;;;;;;19851:18:1;;;19844:62;19923:18;;2163:68:0;19591:356:1;2163:68:0;62023:11:::1;;;;;;;;;-1:-1:-1::0;;;;;62023:11:0::1;-1:-1:-1::0;;;;;62023:19:0::1;;62050:6;62023:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;62019:52:::0;::::1;61944:134:::0;:::o;64441:205::-;1997:7;2024:6;-1:-1:-1;;;;;2024:6:0;813:10;2171:23;2163:68;;;;-1:-1:-1;;;2163:68:0;;19793:2:1;2163:68:0;;;19775:21:1;;;19812:18;;;19805:30;-1:-1:-1;;;;;;;;;;;19851:18:1;;;19844:62;19923:18;;2163:68:0;19591:356:1;2163:68:0;64561:15:::1;:25:::0;;;;64597:26:::1;:41:::0;64441:205::o;63532:158::-;1997:7;2024:6;-1:-1:-1;;;;;2024:6:0;813:10;2171:23;2163:68;;;;-1:-1:-1;;;2163:68:0;;19793:2:1;2163:68:0;;;19775:21:1;;;19812:18;;;19805:30;-1:-1:-1;;;;;;;;;;;19851:18:1;;;19844:62;19923:18;;2163:68:0;19591:356:1;2163:68:0;-1:-1:-1;;;;;63646:27:0;;;::::1;;::::0;;;:19:::1;:27;::::0;;;;:36;;-1:-1:-1;;63646:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;63532:158::o;56216:523::-;56350:4;56367:40;56381:6;56389:9;56400:6;56367:13;:40::i;:::-;-1:-1:-1;;;;;;56447:19:0;;56420:24;56447:19;;;:11;:19;;;;;;;;56467:10;56447:31;;;;;;;;56511:26;;;;56489:116;;;;-1:-1:-1;;;56489:116:0;;19384:2:1;56489:116:0;;;19366:21:1;19423:2;19403:18;;;19396:30;19462:34;19442:18;;;19435:62;19533:10;19513:18;;;19506:38;19561:19;;56489:116:0;19182:404:1;56489:116:0;56641:55;56650:6;56658:10;56689:6;56670:16;:25;56641:8;:55::i;:::-;56727:4;56720:11;;;56216:523;;;;;;:::o;65012:138::-;65136:4;;-1:-1:-1;;;;;65136:4:0;;;65065:7;54399:18;;;:9;:18;;;;;;;65118:4;;;;;54399:18;;;;;65065:7;;65108:33;;;:::i;:::-;65092:12;;:50;;;;:::i;:::-;65085:57;;65012:138;:::o;64654:207::-;1997:7;2024:6;-1:-1:-1;;;;;2024:6:0;813:10;2171:23;2163:68;;;;-1:-1:-1;;;2163:68:0;;19793:2:1;2163:68:0;;;19775:21:1;;;19812:18;;;19805:30;-1:-1:-1;;;;;;;;;;;19851:18:1;;;19844:62;19923:18;;2163:68:0;19591:356:1;2163:68:0;64788:11:::1;::::0;:65:::1;::::0;;;;::::1;::::0;::::1;24606:25:1::0;;;24647:18;;;24640:34;;;-1:-1:-1;;;;;64788:11:0;;::::1;::::0;:35:::1;::::0;24579:18:1;;64788:65:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;64654:207:::0;;:::o;61381:213::-;1997:7;2024:6;-1:-1:-1;;;;;2024:6:0;813:10;2171:23;2163:68;;;;-1:-1:-1;;;2163:68:0;;19793:2:1;2163:68:0;;;19775:21:1;;;19812:18;;;19805:30;-1:-1:-1;;;;;;;;;;;19851:18:1;;;19844:62;19923:18;;2163:68:0;19591:356:1;2163:68:0;61567:4:::1;::::0;61539:47:::1;::::0;61559:6;;-1:-1:-1;;;;;61567:4:0::1;61573:5:::0;61580;61539:19:::1;:47::i;:::-;61381:213:::0;;;:::o;54433:293::-;54593:10;54548:4;54640:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;54640:32:0;;;;;;;;;;54548:4;;54570:126;;54618:7;;54640:45;;54675:10;;54640:45;:::i;:::-;54570:8;:126::i;46035:30::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;46035:30:0;;-1:-1:-1;46035:30:0;:::o;62086:468::-;1997:7;2024:6;-1:-1:-1;;;;;2024:6:0;813:10;2171:23;2163:68;;;;-1:-1:-1;;;2163:68:0;;19793:2:1;2163:68:0;;;19775:21:1;;;19812:18;;;19805:30;-1:-1:-1;;;;;;;;;;;19851:18:1;;;19844:62;19923:18;;2163:68:0;19591:356:1;2163:68:0;-1:-1:-1;;;;;62319:19:0;::::1;7173:20:::0;62311:62:::1;;;::::0;-1:-1:-1;;;62311:62:0;;21271:2:1;62311:62:0::1;::::0;::::1;21253:21:1::0;21310:2;21290:18;;;21283:30;21349;21329:18;;;21322:58;21397:18;;62311:62:0::1;21069:352:1::0;62311:62:0::1;62384:11;::::0;:162:::1;::::0;;;;-1:-1:-1;;;;;62384:11:0;;::::1;::::0;:23:::1;::::0;:162:::1;::::0;62422:8;;62445:13;;62473:15;;62503:6;;62524:11;;62384:162:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;62086:468:::0;;;;;:::o;66767:109::-;66849:11;;:19;;;;;;;;66816:13;;-1:-1:-1;;;;;66849:11:0;;:17;;:19;;;;;;;;;;;;;;:11;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;63405:119::-;1997:7;2024:6;-1:-1:-1;;;;;2024:6:0;813:10;2171:23;2163:68;;;;-1:-1:-1;;;2163:68:0;;19793:2:1;2163:68:0;;;19775:21:1;;;19812:18;;;19805:30;-1:-1:-1;;;;;;;;;;;19851:18:1;;;19844:62;19923:18;;2163:68:0;19591:356:1;2163:68:0;-1:-1:-1;;;;;63488:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;63488:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;63405:119::o;65732:152::-;65778:11;;:37;;;;;65804:10;65778:37;;;10379:74:1;-1:-1:-1;;;;;65778:11:0;;;;:25;;10352:18:1;;65778:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;65830:11:0;;65850:14;;65830:35;;;;;-1:-1:-1;;;;;65830:11:0;;;;-1:-1:-1;65830:19:0;;-1:-1:-1;65830:35:0;;;;23171:25:1;;;23159:2;23144:18;;23025:177;65830:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;65826:51;65732:152::o;63698:488::-;1997:7;2024:6;-1:-1:-1;;;;;2024:6:0;813:10;2171:23;2163:68;;;;-1:-1:-1;;;2163:68:0;;19793:2:1;2163:68:0;;;19775:21:1;;;19812:18;;;19805:30;-1:-1:-1;;;;;;;;;;;19851:18:1;;;19844:62;19923:18;;2163:68:0;19591:356:1;2163:68:0;63894:19:::1;:42:::0;;;63947:20:::1;:44:::0;;;64002:11:::1;:26:::0;;;64039:12:::1;:28:::0;;;64100:14:::1;::::0;:21:::1;::::0;64119:1:::1;64100:18;:21::i;:::-;64086:11;;:35;64078:44;;;::::0;::::1;;64156:14;::::0;:21:::1;::::0;64175:1:::1;64156:18;:21::i;:::-;64141:12;;:36;64133:45;;;::::0;::::1;;63698:488:::0;;;;:::o;2602:94::-;1997:7;2024:6;-1:-1:-1;;;;;2024:6:0;813:10;2171:23;2163:68;;;;-1:-1:-1;;;2163:68:0;;19793:2:1;2163:68:0;;;19775:21:1;;;19812:18;;;19805:30;-1:-1:-1;;;;;;;;;;;19851:18:1;;;19844:62;19923:18;;2163:68:0;19591:356:1;2163:68:0;2667:21:::1;2685:1;2667:9;:21::i;45996:32::-:0;;;;;;;;;;;;65892:106;65944:11;;65964:14;;65944:35;;;;;-1:-1:-1;;;;;65944:11:0;;;;:19;;:35;;;;23171:25:1;;;23159:2;23144:18;;23025:177;54023:89:0;54064:13;54097:7;54090:14;;;;;:::i;64869:135::-;1997:7;2024:6;-1:-1:-1;;;;;2024:6:0;813:10;2171:23;2163:68;;;;-1:-1:-1;;;2163:68:0;;19793:2:1;2163:68:0;;;19775:21:1;;;19812:18;;;19805:30;-1:-1:-1;;;;;;;;;;;19851:18:1;;;19844:62;19923:18;;2163:68:0;19591:356:1;2163:68:0;64958:6:::1;64952:3;:12;64944:21;;;::::0;::::1;;64976:14;:20:::0;64869:135::o;54734:478::-;54915:10;54854:4;54903:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;54903:32:0;;;;;;;;;;54968:35;;;;54946:122;;;;-1:-1:-1;;;54946:122:0;;22821:2:1;54946:122:0;;;22803:21:1;22860:2;22840:18;;;22833:30;22899:34;22879:18;;;22872:62;22970:7;22950:18;;;22943:35;22995:19;;54946:122:0;22619:401:1;54946:122:0;55104:65;55113:10;55125:7;55153:15;55134:16;:34;55104:8;:65::i;:::-;-1:-1:-1;55200:4:0;;54734:478;-1:-1:-1;;;54734:478:0:o;65548:176::-;65675:11;;:41;;;;;-1:-1:-1;;;;;10397:55:1;;;65675:41:0;;;10379:74:1;65643:7:0;;65675:11;;:32;;10352:18:1;;65675:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;65668:48;65548:176;-1:-1:-1;;65548:176:0:o;56020:188::-;56127:4;56156:44;56170:10;56182:9;56193:6;56156:13;:44::i;45959:30::-;;;;;;;;;;;;62776:240;1997:7;2024:6;-1:-1:-1;;;;;2024:6:0;813:10;2171:23;2163:68;;;;-1:-1:-1;;;2163:68:0;;19793:2:1;2163:68:0;;;19775:21:1;;;19812:18;;;19805:30;-1:-1:-1;;;;;;;;;;;19851:18:1;;;19844:62;19923:18;;2163:68:0;19591:356:1;2163:68:0;62907:1:::1;62895:9;:13;:28;;;;;62922:1;62912:7;:11;62895:28;:48;;;;;62938:5;62927:7;:16;;62895:48;62887:57;;;::::0;::::1;;63001:7;62988:9;62973:12;;:24;;;;:::i;:::-;62972:36;;;;:::i;:::-;62955:14;:53:::0;-1:-1:-1;;62776:240:0:o;62562:206::-;62666:13;2024:6;;62666:13;;-1:-1:-1;;;;;2024:6:0;813:10;2171:23;2163:68;;;;-1:-1:-1;;;2163:68:0;;19793:2:1;2163:68:0;;;19775:21:1;;;19812:18;;;19805:30;-1:-1:-1;;;;;;;;;;;19851:18:1;;;19844:62;19923:18;;2163:68:0;19591:356:1;2163:68:0;62722:11:::1;::::0;:38:::1;::::0;;;;;;;-1:-1:-1;;;;;62722:11:0;;::::1;::::0;:36:::1;::::0;:38:::1;::::0;;::::1;::::0;;;;;;;;;:11;:38;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;62715:45;;;;62562:206:::0;;:::o;47352:806::-;1997:7;2024:6;-1:-1:-1;;;;;2024:6:0;813:10;2171:23;2163:68;;;;-1:-1:-1;;;2163:68:0;;19793:2:1;2163:68:0;;;19775:21:1;;;19812:18;;;19805:30;-1:-1:-1;;;;;;;;;;;19851:18:1;;;19844:62;19923:18;;2163:68:0;19591:356:1;2163:68:0;47620:13:::1;::::0;47602:32:::1;::::0;-1:-1:-1;;;;;47620:13:0::1;47602:17;:32::i;:::-;47647:13;:30:::0;;-1:-1:-1;;;;;;47647:30:0;;::::1;-1:-1:-1::0;;;;;47647:30:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;47688:42:0;;;::::1;::::0;;::::1;::::0;;47741:4:::1;:12:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;47764:30;;::::1;::::0;:13:::1;::::0;:30:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;47805:34:0;;::::1;::::0;:15:::1;::::0;:34:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;47850:30:0;;::::1;::::0;:13:::1;::::0;:30:::1;::::0;::::1;::::0;::::1;:::i;:::-;;47900:14;47939:1;47915:14;:21;:25;;;;:::i;:::-;47900:41;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;47891:6:::1;:50:::0;;-1:-1:-1;;;;;;47891:50:0::1;-1:-1:-1::0;;;;;47891:50:0;;::::1;::::0;;::::1;::::0;;;47966:6:::1;::::0;;;::::1;47956:16;47952:125;;;47989:14;:21:::0;;-1:-1:-1;;;;47989:21:0::1;-1:-1:-1::0;;;47989:21:0::1;::::0;;47952:125:::1;;;48043:14;:22:::0;;-1:-1:-1;;;;48043:22:0::1;::::0;;47952:125:::1;48101:13;::::0;48116:4:::1;::::0;48089:32:::1;::::0;-1:-1:-1;;;;;48101:13:0;;::::1;::::0;48116:4:::1;48089:11;:32::i;:::-;48132:18;:16;:18::i;:::-;47352:806:::0;;;;;:::o;65158:192::-;65253:7;65320:22;:20;:22::i;:::-;65307:4;;-1:-1:-1;;;;;65307:4:0;54372:7;54399:18;;;:9;:18;;;;;;65286:26;;:8;:26;:::i;:::-;:30;;65315:1;65286:30;:::i;:::-;65285:57;;;;:::i;64194:239::-;1997:7;2024:6;-1:-1:-1;;;;;2024:6:0;813:10;2171:23;2163:68;;;;-1:-1:-1;;;2163:68:0;;19793:2:1;2163:68:0;;;19775:21:1;;;19812:18;;;19805:30;-1:-1:-1;;;;;;;;;;;19851:18:1;;;19844:62;19923:18;;2163:68:0;19591:356:1;2163:68:0;64336:1:::1;64321:12;:16;64313:25;;;::::0;::::1;;64349:11;:22:::0;;-1:-1:-1;;64349:22:0::1;::::0;::::1;;;::::0;;64398:12:::1;::::0;:27:::1;::::0;64413:12;;64398:27:::1;:::i;:::-;64382:13;:43:::0;-1:-1:-1;;64194:239:0:o;49940:164::-;1997:7;2024:6;-1:-1:-1;;;;;2024:6:0;813:10;2171:23;2163:68;;;;-1:-1:-1;;;2163:68:0;;19793:2:1;2163:68:0;;;19775:21:1;;;19812:18;;;19805:30;-1:-1:-1;;;;;;;;;;;19851:18:1;;;19844:62;19923:18;;2163:68:0;19591:356:1;2163:68:0;50050:21:::1;:46:::0;;-1:-1:-1;;;;;;50050:46:0::1;-1:-1:-1::0;;;;;50050:46:0;;;::::1;::::0;;;::::1;::::0;;49940:164::o;61265:108::-;1997:7;2024:6;-1:-1:-1;;;;;2024:6:0;813:10;2171:23;2163:68;;;;-1:-1:-1;;;2163:68:0;;19793:2:1;2163:68:0;;;19775:21:1;;;19812:18;;;19805:30;-1:-1:-1;;;;;;;;;;;19851:18:1;;;19844:62;19923:18;;2163:68:0;19591:356:1;2163:68:0;61360:4:::1;::::0;61341:24:::1;::::0;61352:6;;-1:-1:-1;;;;;61360:4:0::1;61341:10;:24::i;59194:171::-:0;59250:7;59274;59270:59;;;-1:-1:-1;;59305:12:0;;;59194:171::o;59270:59::-;-1:-1:-1;;59346:11:0;;;59194:171::o;2851:192::-;1997:7;2024:6;-1:-1:-1;;;;;2024:6:0;813:10;2171:23;2163:68;;;;-1:-1:-1;;;2163:68:0;;19793:2:1;2163:68:0;;;19775:21:1;;;19812:18;;;19805:30;-1:-1:-1;;;;;;;;;;;19851:18:1;;;19844:62;19923:18;;2163:68:0;19591:356:1;2163:68:0;-1:-1:-1;;;;;2940:22:0;::::1;2932:73;;;::::0;-1:-1:-1;;;2932:73:0;;16646:2:1;2932:73:0::1;::::0;::::1;16628:21:1::0;16685:2;16665:18;;;16658:30;16724:34;16704:18;;;16697:62;16795:8;16775:18;;;16768:36;16821:19;;2932:73:0::1;16444:402:1::0;2932:73:0::1;3016:19;3026:8;3016:9;:19::i;63024:373::-:0;1997:7;2024:6;-1:-1:-1;;;;;2024:6:0;813:10;2171:23;2163:68;;;;-1:-1:-1;;;2163:68:0;;19793:2:1;2163:68:0;;;19775:21:1;;;19812:18;;;19805:30;-1:-1:-1;;;;;;;;;;;19851:18:1;;;19844:62;19923:18;;2163:68:0;19591:356:1;2163:68:0;-1:-1:-1;;;;;63143:23:0;::::1;63161:4;63143:23;::::0;::::1;::::0;:41:::1;;-1:-1:-1::0;63180:4:0::1;::::0;-1:-1:-1;;;;;63170:14:0;;::::1;63180:4:::0;::::1;63170:14;;63143:41;63135:50;;;::::0;::::1;;-1:-1:-1::0;;;;;63196:24:0;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;63196:33:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;63240:150:::1;;63267:11;::::0;:31:::1;::::0;-1:-1:-1;;;63267:31:0;;-1:-1:-1;;;;;13252:55:1;;;63267:31:0::1;::::0;::::1;13234:74:1::0;63267:11:0::1;13324:18:1::0;;;13317:34;63267:11:0;;::::1;::::0;:20:::1;::::0;13207:18:1;;63267:31:0::1;13052:305:1::0;63240:150:0::1;63331:11;::::0;-1:-1:-1;;;;;63360:17:0;;::::1;63331:11;63360:17:::0;;;:9:::1;:17;::::0;;;;;;;63331:47;;-1:-1:-1;;;63331:47:0;;::::1;::::0;::::1;13234:74:1::0;;;;13324:18;;;13317:34;63331:11:0;::::1;::::0;:20:::1;::::0;13207:18:1;;63331:47:0::1;13052:305:1::0;47154:190:0;47248:13;;47228:6;;47221:44;;-1:-1:-1;;;;;47228:6:0;;;;47248:13;;47221:26;:44::i;:::-;47303:13;;47283:6;;47276:60;;-1:-1:-1;;;;;47283:6:0;;;;47303:13;47318:17;15552:616;15916:10;;;15915:62;;-1:-1:-1;15932:39:0;;;;;15956:4;15932:39;;;10699:34:1;-1:-1:-1;;;;;10769:15:1;;;10749:18;;;10742:43;15932:15:0;;;;;10611:18:1;;15932:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;15915:62;15893:166;;;;-1:-1:-1;;;15893:166:0;;22398:2:1;15893:166:0;;;22380:21:1;22437:2;22417:18;;;22410:30;22476:34;22456:18;;;22449:62;22547:24;22527:18;;;22520:52;22589:19;;15893:166:0;22196:418:1;15893:166:0;16097:62;;;-1:-1:-1;;;;;13252:55:1;;16097:62:0;;;13234:74:1;13324:18;;;;13317:34;;;16097:62:0;;;;;;;;;;13207:18:1;;;;16097:62:0;;;;;;;;;;16120:22;16097:62;;;16070:90;;16090:5;;16070:19;:90::i;9656:229::-;9793:12;9825:52;9847:6;9855:4;9861:1;9864:12;9825:21;:52::i;:::-;9818:59;9656:229;-1:-1:-1;;;;9656:229:0:o;55632:380::-;-1:-1:-1;;;;;55768:19:0;;55760:68;;;;-1:-1:-1;;;55760:68:0;;20508:2:1;55760:68:0;;;20490:21:1;20547:2;20527:18;;;20520:30;20586:34;20566:18;;;20559:62;20657:6;20637:18;;;20630:34;20681:19;;55760:68:0;20306:400:1;55760:68:0;-1:-1:-1;;;;;55847:21:0;;55839:68;;;;-1:-1:-1;;;55839:68:0;;17053:2:1;55839:68:0;;;17035:21:1;17092:2;17072:18;;;17065:30;17131:34;17111:18;;;17104:62;17202:4;17182:18;;;17175:32;17224:19;;55839:68:0;16851:398:1;55839:68:0;-1:-1:-1;;;;;55920:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;55972:32;;23171:25:1;;;55972:32:0;;23144:18:1;55972:32:0;;;;;;;55632:380;;;:::o;56747:1355::-;-1:-1:-1;;;;;56898:17:0;;56873:4;56898:17;;;:9;:17;;;;;;:27;-1:-1:-1;56898:27:0;56890:60;;;;-1:-1:-1;;;56890:60:0;;17456:2:1;56890:60:0;;;17438:21:1;17495:2;17475:18;;;17468:30;17534:22;17514:18;;;17507:50;17574:18;;56890:60:0;17254:344:1;56890:60:0;56965:6;;;;56961:87;;;56995:41;57010:6;57018:9;57029:6;56995:14;:41::i;:::-;56988:48;;;;56961:87;57088:4;;-1:-1:-1;;;;;57075:17:0;;;57088:4;;57075:17;57109;;57075;57109:38;;-1:-1:-1;57143:4:0;;-1:-1:-1;;;;;57130:17:0;;;57143:4;;57130:17;;57109:38;57105:160;;;-1:-1:-1;;;;;57169:30:0;;;;;;:19;:30;;;;;;;;57164:89;;57218:35;57235:9;57246:6;57218:16;:35::i;:::-;-1:-1:-1;;;;;57322:17:0;;;;;;:9;:17;;;;;;;;;;:26;;;57302:46;;59159:11;:19;;;;;;;;59158:20;57397:91;;57482:6;57397:91;;;57434:32;57442:7;57451:6;57459;57434:7;:32::i;:::-;57372:116;;57505:25;57520:9;57505:14;:25::i;:::-;57501:74;;;57547:16;57556:6;57547:8;:16::i;:::-;-1:-1:-1;;;;;57610:20:0;;;;;;:9;:20;;;;;;:37;;57633:14;;57610:37;:::i;:::-;-1:-1:-1;;;;;57587:20:0;;;;;;;:9;:20;;;;;;;;:60;;;;57665:24;;;;;:16;:24;;;;;;;57660:120;;57710:11;;-1:-1:-1;;;;;57739:17:0;;;57710:11;57739:17;;;:9;:17;;;;;;;;57710:47;;-1:-1:-1;;;57710:47:0;;;;;13234:74:1;;;;13324:18;;;13317:34;57710:11:0;;;:20;;13207:18:1;;57710:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57706:63;;-1:-1:-1;;;;;57795:27:0;;;;;;:16;:27;;;;;;;;57790:159;;57860:11;;-1:-1:-1;;;;;57892:20:0;;;57860:11;57892:20;;;:9;:20;;;;;;;;57860:53;;-1:-1:-1;;;57860:53:0;;;;;13234:74:1;;;;13324:18;;;13317:34;57860:11:0;;;:20;;13207:18:1;;57860:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57839:99;;57965:11;;57985:14;;57965:35;;;;;-1:-1:-1;;;;;57965:11:0;;;;:19;;:35;;;;23171:25:1;;;23159:2;23144:18;;23025:177;57965:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57961:51;58046:9;-1:-1:-1;;;;;58029:43:0;58038:6;-1:-1:-1;;;;;58029:43:0;;58057:14;58029:43;;;;23171:25:1;;23159:2;23144:18;;23025:177;58029:43:0;;;;;;;;-1:-1:-1;58090:4:0;;56747:1355;-1:-1:-1;;;;;56747:1355:0:o;61716:220::-;53077:6;:13;;-1:-1:-1;;53077:13:0;53086:4;53077:13;;;61884:44:::1;61903:6:::0;61911:2;61915:5;61922;61884:18:::1;:44::i;:::-;-1:-1:-1::0;;53113:6:0;:14;;-1:-1:-1;;53113:14:0;;;-1:-1:-1;;61716:220:0:o;22049:98::-;22107:7;22134:5;22138:1;22134;:5;:::i;3051:173::-;3107:16;3126:6;;-1:-1:-1;;;;;3143:17:0;;;-1:-1:-1;;;;;;3143:17:0;;;;;;3176:40;;3126:6;;;;;;;3176:40;;3107:16;3176:40;3096:128;3051:173;:::o;66529:230::-;66609:39;66633:14;66609:23;:39::i;:::-;66659;66668:10;66680:14;66696:1;66659:8;:39::i;:::-;66709:42;66726:4;66733:14;66749:1;66709:8;:42::i;66006:515::-;66095:40;66113:14;66129:5;66095:17;:40::i;:::-;66146:39;66155:10;66167:14;66183:1;66146:8;:39::i;:::-;66196:55;66205:10;66217:14;-1:-1:-1;;66196:8:0;:55::i;:::-;66262:42;66279:4;66286:14;66302:1;66262:8;:42::i;:::-;66315:58;66332:4;66339:14;-1:-1:-1;;66315:8:0;:58::i;:::-;-1:-1:-1;;;;;66386:35:0;;;;;;;:19;:35;;;;;;;;:42;;66424:4;-1:-1:-1;;66386:42:0;;;;;;;;66439:26;;;;;;;;;:33;;;;;;;;66483:16;:23;;;;;:30;;;;;;;;;;66006:515::o;51076:501::-;51164:4;-1:-1:-1;;;;;51136:33:0;:13;51150:1;51136:16;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;51136:16:0;:33;51128:71;;;;-1:-1:-1;;;51128:71:0;;20154:2:1;51128:71:0;;;20136:21:1;20193:2;20173:18;;;20166:30;20232:27;20212:18;;;20205:55;20277:18;;51128:71:0;19952:349:1;51128:71:0;51275:6;;51232:13;51246:20;;-1:-1:-1;;;;;51275:6:0;;;;51246:24;;51275:6;;51246:24;:::i;:::-;51232:39;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;51232:39:0;:49;51210:128;;;;-1:-1:-1;;;51210:128:0;;16288:2:1;51210:128:0;;;16270:21:1;16327:2;16307:18;;;16300:30;16366:31;16346:18;;;16339:59;16415:18;;51210:128:0;16086:353:1;51210:128:0;51379:6;;51357:15;:18;;-1:-1:-1;;;;;51379:6:0;;;;;;51357:18;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;51357:18:0;:28;51349:69;;;;-1:-1:-1;;;51349:69:0;;18212:2:1;51349:69:0;;;18194:21:1;18251:2;18231:18;;;18224:30;18290;18270:18;;;18263:58;18338:18;;51349:69:0;18010:352:1;51349:69:0;51451:15;51467:22;;51506:4;;51451:15;51467:26;;51492:1;;51467:26;:::i;:::-;51451:43;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;51451:43:0;:60;51429:140;;;;-1:-1:-1;;;51429:140:0;;22039:2:1;51429:140:0;;;22021:21:1;22078:2;22058:18;;;22051:30;22117:32;22097:18;;;22090:60;22167:18;;51429:140:0;21837:354:1;61602:106:0;53077:6;:13;;-1:-1:-1;;53077:13:0;53086:4;53077:13;;;61679:21:::1;61689:6:::0;61697:2;61679:9:::1;:21::i;:::-;-1:-1:-1::0;;53113:6:0;:14;;-1:-1:-1;;53113:14:0;;;61602:106::o;17389:716::-;17813:23;17839:69;17867:4;17839:69;;;;;;;;;;;;;;;;;17847:5;-1:-1:-1;;;;;17839:27:0;;;:69;;;;;:::i;:::-;17923:17;;17813:95;;-1:-1:-1;17923:21:0;17919:179;;18020:10;18009:30;;;;;;;;;;;;:::i;:::-;18001:85;;;;-1:-1:-1;;;18001:85:0;;21628:2:1;18001:85:0;;;21610:21:1;21667:2;21647:18;;;21640:30;21706:34;21686:18;;;21679:62;21777:12;21757:18;;;21750:40;21807:19;;18001:85:0;21426:406:1;10776:510:0;10946:12;11004:5;10979:21;:30;;10971:81;;;;-1:-1:-1;;;10971:81:0;;17805:2:1;10971:81:0;;;17787:21:1;17844:2;17824:18;;;17817:30;17883:34;17863:18;;;17856:62;17954:8;17934:18;;;17927:36;17980:19;;10971:81:0;17603:402:1;10971:81:0;7173:20;;11063:60;;;;-1:-1:-1;;;11063:60:0;;20913:2:1;11063:60:0;;;20895:21:1;20952:2;20932:18;;;20925:30;20991:31;20971:18;;;20964:59;21040:18;;11063:60:0;20711:353:1;11063:60:0;11137:12;11151:23;11178:6;-1:-1:-1;;;;;11178:11:0;11197:5;11204:4;11178:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11136:73;;;;11227:51;11244:7;11253:10;11265:12;11227:16;:51::i;:::-;11220:58;10776:510;-1:-1:-1;;;;;;;10776:510:0:o;58110:370::-;-1:-1:-1;;;;;58299:17:0;;;58237:4;58299:17;;;:9;:17;;;;;;;;:26;;;58279:46;;58370:20;;;;;;;;;:29;;58319:6;;58370:29;:::i;:::-;-1:-1:-1;;;;;58347:20:0;;;;;;;:9;:20;;;;;;;:52;;;;58415:35;;;;;;;;;;58443:6;23171:25:1;;23159:2;23144:18;;23025:177;58415:35:0;;;;;;;;-1:-1:-1;58468:4:0;58110:370;;;;;:::o;58488:228::-;58629:14;;-1:-1:-1;;;;;58596:20:0;;;;;;:9;:20;;;;;;:29;;58619:6;;58596:29;:::i;:::-;:47;;58574:134;;;;-1:-1:-1;;;58574:134:0;;15882:2:1;58574:134:0;;;15864:21:1;15921:2;15901:18;;;15894:30;15960:34;15940:18;;;15933:62;16031:7;16011:18;;;16004:35;16056:19;;58574:134:0;15680:401:1;59373:381:0;59488:7;59508:17;59562:14;;59538:20;59550:7;59538:11;:20::i;:::-;59529:29;;:6;:29;:::i;:::-;59528:48;;;;:::i;:::-;59632:4;59614:24;;;;:9;:24;;;;;;59508:68;;-1:-1:-1;59614:36:0;;59508:68;;59614:36;:::i;:::-;59605:4;59587:24;;;;:9;:24;;;;;;;:63;;;;59666:42;;-1:-1:-1;;;;;59666:42:0;;;;;;;59698:9;23171:25:1;;23159:2;23144:18;;23025:177;59666:42:0;;;;;;;;59728:18;59737:9;59728:6;:18;:::i;:::-;59721:25;59373:381;-1:-1:-1;;;;;59373:381:0:o;59762:273::-;59879:4;;59828;;-1:-1:-1;;;;;59879:4:0;59865:10;:18;;;;:42;;-1:-1:-1;59901:6:0;;;;59900:7;59865:42;:70;;;;-1:-1:-1;59924:11:0;;;;59865:70;:104;;;;-1:-1:-1;59965:4:0;;-1:-1:-1;;;;;59952:17:0;;;59965:4;;59952:17;59865:104;:162;;;;-1:-1:-1;60014:13:0;;;60004:4;59986:24;;;;:9;:24;;;;;;;;:41;;59845:182;59762:273;-1:-1:-1;;59762:273:0:o;60043:1214::-;53077:6;:13;;-1:-1:-1;;53077:13:0;53086:4;53077:13;;;60178:4:::1;53077:6:::0;60160:24;;;:9:::1;:24;::::0;;;;;60137:6;;60160:47;-1:-1:-1;60156:113:0::1;;;-1:-1:-1::0;60263:4:0::1;60245:24;::::0;;;:9:::1;:24;::::0;;;;;60156:113:::1;60282:34;60319:97;60349:15;;60379:26;;60319:15;:97::i;:::-;:149;;60449:19;;60319:149;;;60432:1;60319:149;60282:186;;60481:23;60507:128;60633:1;60507:107;60592:21;;60507:66;60546:26;60507:20;:38;;:66;;;;:::i;:::-;:84:::0;::::1;:107::i;:128::-;60481:154:::0;-1:-1:-1;60648:20:0::1;60671:38;60481:154:::0;60671:20;:38:::1;:::i;:::-;60648:61;;60722:18;60743:24;60754:12;60743:10;:24::i;:::-;60722:45;;60780:27;60810:118;60926:1;60810:97;60885:21;;60810:56;60839:26;60810:10;:28;;:56;;;;:::i;:118::-;60780:148;;60939:28;60970:87;61025:21;;60970:36;60985:20;;60970:10;:14;;:36;;;;:::i;:87::-;60939:118;;61074:11;;;;;;;;;-1:-1:-1::0;;;;;61074:11:0::1;-1:-1:-1::0;;;;;61074:19:0::1;;61101:20;61074:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;61070:66:::0;61152:19;;61148:102:::1;;61188:50;61201:19;61222:15;61188:12;:50::i;:::-;-1:-1:-1::0;;53113:6:0;:14;;-1:-1:-1;;53113:14:0;;;-1:-1:-1;;;;;;60043:1214:0:o;50332:736::-;50513:1;50498:5;:12;:16;50490:69;;;;-1:-1:-1;;;50490:69:0;;18975:2:1;50490:69:0;;;18957:21:1;19014:2;18994:18;;;18987:30;19053:34;19033:18;;;19026:62;19124:10;19104:18;;;19097:38;19152:19;;50490:69:0;18773:404:1;50490:69:0;50627:4;-1:-1:-1;;;;;50592:40:0;:5;50613:1;50598:5;:12;:16;;;;:::i;:::-;50592:23;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;50592:40:0;;50570:127;;;;-1:-1:-1;;;50570:127:0;;18569:2:1;50570:127:0;;;18551:21:1;18608:2;18588:18;;;18581:30;18647:34;18627:18;;;18620:62;18718:7;18698:18;;;18691:35;18743:19;;50570:127:0;18367:401:1;50570:127:0;50723:6;;-1:-1:-1;;;;;50714:15:0;;;50723:6;;50714:15;50710:165;;50772:13;;50746:43;;-1:-1:-1;;;;;50746:25:0;;;;50772:13;;50746:25;:43::i;:::-;50830:13;;50804:59;;-1:-1:-1;;;;;50804:25:0;;;;50830:13;50845:17;50804:25;:59::i;:::-;50885:6;;:175;;;;;-1:-1:-1;;;;;50885:6:0;;;;:60;;:175;;50960:6;;50885;;50997:5;;51017:2;;51034:15;;50885:175;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50332:736;;;;:::o;47030:116::-;47121:13;;47101:6;;47094:44;;-1:-1:-1;;;;;47101:6:0;;;;47121:13;;47094:26;:44::i;50112:212::-;50179:6;;:137;;-1:-1:-1;;;50179:137:0;;-1:-1:-1;;;;;50179:6:0;;;;:57;;50258:6;;50179:137;;:6;;50279:15;;50296:2;;50300:15;;50179:137;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50112:212;;:::o;13462:712::-;13612:12;13641:7;13637:530;;;-1:-1:-1;13672:10:0;13665:17;;13637:530;13786:17;;:21;13782:374;;13984:10;13978:17;14045:15;14032:10;14028:2;14024:19;14017:44;13782:374;14127:12;14120:20;;-1:-1:-1;;;14120:20:0;;;;;;;;:::i;21650:98::-;21708:7;21735:5;21739:1;21735;:5;:::i;48166:582::-;48378:13;;48244:24;;48310:21;;48344:51;;48359:4;;-1:-1:-1;;;;;48378:13:0;48244:24;48344:33;:51::i;:::-;48440:13;;48406:67;;48421:4;;-1:-1:-1;;;;;48440:13:0;48455:17;48406:33;:67::i;:::-;48486:6;;;:197;;;;;-1:-1:-1;;;;;48486:6:0;;;;:57;;:197;;48558:12;;48601:13;;48637:4;;48657:15;;48486:197;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48727:13;48703:21;:37;;;;:::i;48756:1176::-;48845:14;;-1:-1:-1;;;48845:14:0;;;;48841:1084;;;48876:6;;49040:21;;48876:234;;;;;48945:4;48876:234;;;14028:34:1;14078:18;;;14071:34;;;48876:6:0;14121:18:1;;;14114:34;;;14164:18;;;14157:34;-1:-1:-1;;;;;49040:21:0;;;14207:19:1;;;14200:44;49080:15:0;14260:19:1;;;14253:35;48876:6:0;;;:22;;48906:11;;13939:19:1;;48876:234:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;49130:38:0;;;24606:25:1;;;24662:2;24647:18;;24640:34;;;49130:38:0;;-1:-1:-1;24579:18:1;49130:38:0;;;;;;;63024:373;;:::o;48841:1084::-;49228:6;;49221:39;;-1:-1:-1;;;49221:39:0;;49254:4;49221:39;;;10379:74:1;49201:17:0;;-1:-1:-1;;;;;49228:6:0;;49221:24;;10352:18:1;;49221:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49275:6;;:159;;-1:-1:-1;;;49275:159:0;;49201:59;;-1:-1:-1;;;;;;49275:6:0;;:57;;49358:11;;49275:159;;:6;;49388:13;;49411:4;;49418:15;;49275:159;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;49475:6:0;;49468:39;;-1:-1:-1;;;49468:39:0;;49501:4;49468:39;;;10379:74:1;49449:16:0;;-1:-1:-1;;;;;;49475:6:0;;;;-1:-1:-1;49468:24:0;;-1:-1:-1;10352:18:1;;49468:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49449:58;-1:-1:-1;49522:20:0;49545:23;49449:58;49558:9;49545:12;:23::i;:::-;49585:6;;49655;;49782:21;;49585:267;;;;;49631:4;49585:267;;;11909:34:1;-1:-1:-1;;;;;49655:6:0;;;11959:18:1;;;11952:43;12011:18;;;12004:34;;;12054:18;;;12047:34;;;49585:6:0;12097:19:1;;;12090:35;;;12141:19;;;12134:35;49782:21:0;;;12185:19:1;;;12178:44;49822:15:0;12238:19:1;;;12231:35;49522:46:0;;-1:-1:-1;49585:6:0;;:19;;11820::1;;49585:267:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;49874:39:0;;;24606:25:1;;;24662:2;24647:18;;24640:34;;;49874:39:0;;-1:-1:-1;24579:18:1;49874:39:0;;;;;;;49186:739;;;48756:1176;;:::o;21293:98::-;21351:7;21378:5;21382:1;21378;:5;:::i;-1:-1:-1:-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:134:1;82:20;;111:31;82:20;111:31;:::i;:::-;14:134;;;:::o;153:919::-;207:5;260:3;253:4;245:6;241:17;237:27;227:55;;278:1;275;268:12;227:55;314:6;301:20;340:4;363:18;400:2;396;393:10;390:36;;;406:18;;:::i;:::-;452:2;449:1;445:10;484:2;478:9;547:2;543:7;538:2;534;530:11;526:25;518:6;514:38;602:6;590:10;587:22;582:2;570:10;567:18;564:46;561:72;;;613:18;;:::i;:::-;649:2;642:22;699:18;;;733:15;;;;-1:-1:-1;768:15:1;;;802;;;798:24;;795:33;-1:-1:-1;792:53:1;;;841:1;838;831:12;792:53;863:1;854:10;;873:169;887:2;884:1;881:9;873:169;;;944:23;963:3;944:23;:::i;:::-;932:36;;988:12;;;;905:1;898:9;;;;;1020:12;;873:169;;;-1:-1:-1;1060:6:1;153:919;-1:-1:-1;;;;;;;153:919:1:o;1077:247::-;1136:6;1189:2;1177:9;1168:7;1164:23;1160:32;1157:52;;;1205:1;1202;1195:12;1157:52;1244:9;1231:23;1263:31;1288:5;1263:31;:::i;1329:251::-;1399:6;1452:2;1440:9;1431:7;1427:23;1423:32;1420:52;;;1468:1;1465;1458:12;1420:52;1500:9;1494:16;1519:31;1544:5;1519:31;:::i;1585:388::-;1653:6;1661;1714:2;1702:9;1693:7;1689:23;1685:32;1682:52;;;1730:1;1727;1720:12;1682:52;1769:9;1756:23;1788:31;1813:5;1788:31;:::i;:::-;1838:5;-1:-1:-1;1895:2:1;1880:18;;1867:32;1908:33;1867:32;1908:33;:::i;:::-;1960:7;1950:17;;;1585:388;;;;;:::o;1978:1099::-;2148:6;2156;2164;2172;2180;2233:3;2221:9;2212:7;2208:23;2204:33;2201:53;;;2250:1;2247;2240:12;2201:53;2289:9;2276:23;2308:31;2333:5;2308:31;:::i;:::-;2358:5;-1:-1:-1;2415:2:1;2400:18;;2387:32;2428:33;2387:32;2428:33;:::i;:::-;2480:7;-1:-1:-1;2538:2:1;2523:18;;2510:32;2561:18;2591:14;;;2588:34;;;2618:1;2615;2608:12;2588:34;2641:61;2694:7;2685:6;2674:9;2670:22;2641:61;:::i;:::-;2631:71;;2755:2;2744:9;2740:18;2727:32;2711:48;;2784:2;2774:8;2771:16;2768:36;;;2800:1;2797;2790:12;2768:36;2823:63;2878:7;2867:8;2856:9;2852:24;2823:63;:::i;:::-;2813:73;;2939:3;2928:9;2924:19;2911:33;2895:49;;2969:2;2959:8;2956:16;2953:36;;;2985:1;2982;2975:12;2953:36;;3008:63;3063:7;3052:8;3041:9;3037:24;3008:63;:::i;:::-;2998:73;;;1978:1099;;;;;;;;:::o;3082:456::-;3159:6;3167;3175;3228:2;3216:9;3207:7;3203:23;3199:32;3196:52;;;3244:1;3241;3234:12;3196:52;3283:9;3270:23;3302:31;3327:5;3302:31;:::i;:::-;3352:5;-1:-1:-1;3409:2:1;3394:18;;3381:32;3422:33;3381:32;3422:33;:::i;:::-;3082:456;;3474:7;;-1:-1:-1;;;3528:2:1;3513:18;;;;3500:32;;3082:456::o;3543:730::-;3670:6;3678;3686;3739:2;3727:9;3718:7;3714:23;3710:32;3707:52;;;3755:1;3752;3745:12;3707:52;3794:9;3781:23;3813:31;3838:5;3813:31;:::i;:::-;3863:5;-1:-1:-1;3919:2:1;3904:18;;3891:32;3942:18;3972:14;;;3969:34;;;3999:1;3996;3989:12;3969:34;4022:61;4075:7;4066:6;4055:9;4051:22;4022:61;:::i;:::-;4012:71;;4136:2;4125:9;4121:18;4108:32;4092:48;;4165:2;4155:8;4152:16;4149:36;;;4181:1;4178;4171:12;4149:36;;4204:63;4259:7;4248:8;4237:9;4233:24;4204:63;:::i;:::-;4194:73;;;3543:730;;;;;:::o;4278:1008::-;4420:6;4428;4436;4444;4452;4505:3;4493:9;4484:7;4480:23;4476:33;4473:53;;;4522:1;4519;4512:12;4473:53;4561:9;4548:23;4580:31;4605:5;4580:31;:::i;:::-;4630:5;-1:-1:-1;4686:2:1;4671:18;;4658:32;4709:18;4739:14;;;4736:34;;;4766:1;4763;4756:12;4736:34;4789:61;4842:7;4833:6;4822:9;4818:22;4789:61;:::i;:::-;4779:71;;4903:2;4892:9;4888:18;4875:32;4859:48;;4932:2;4922:8;4919:16;4916:36;;;4948:1;4945;4938:12;4916:36;;4971:63;5026:7;5015:8;5004:9;5000:24;4971:63;:::i;:::-;4961:73;;;5086:2;5075:9;5071:18;5058:32;5099:33;5124:7;5099:33;:::i;:::-;5151:7;-1:-1:-1;5210:3:1;5195:19;;5182:33;5224:30;5182:33;5224:30;:::i;:::-;5273:7;5263:17;;;4278:1008;;;;;;;;:::o;5291:382::-;5356:6;5364;5417:2;5405:9;5396:7;5392:23;5388:32;5385:52;;;5433:1;5430;5423:12;5385:52;5472:9;5459:23;5491:31;5516:5;5491:31;:::i;:::-;5541:5;-1:-1:-1;5598:2:1;5583:18;;5570:32;5611:30;5570:32;5611:30;:::i;5678:315::-;5746:6;5754;5807:2;5795:9;5786:7;5782:23;5778:32;5775:52;;;5823:1;5820;5813:12;5775:52;5862:9;5849:23;5881:31;5906:5;5881:31;:::i;:::-;5931:5;5983:2;5968:18;;;;5955:32;;-1:-1:-1;;;5678:315:1:o;5998:241::-;6054:6;6107:2;6095:9;6086:7;6082:23;6078:32;6075:52;;;6123:1;6120;6113:12;6075:52;6162:9;6149:23;6181:28;6203:5;6181:28;:::i;6244:245::-;6311:6;6364:2;6352:9;6343:7;6339:23;6335:32;6332:52;;;6380:1;6377;6370:12;6332:52;6412:9;6406:16;6431:28;6453:5;6431:28;:::i;6494:309::-;6559:6;6567;6620:2;6608:9;6599:7;6595:23;6591:32;6588:52;;;6636:1;6633;6626:12;6588:52;6675:9;6662:23;6694:28;6716:5;6694:28;:::i;6808:180::-;6867:6;6920:2;6908:9;6899:7;6895:23;6891:32;6888:52;;;6936:1;6933;6926:12;6888:52;-1:-1:-1;6959:23:1;;6808:180;-1:-1:-1;6808:180:1:o;6993:184::-;7063:6;7116:2;7104:9;7095:7;7091:23;7087:32;7084:52;;;7132:1;7129;7122:12;7084:52;-1:-1:-1;7155:16:1;;6993:184;-1:-1:-1;6993:184:1:o;7182:551::-;7284:6;7292;7300;7353:2;7341:9;7332:7;7328:23;7324:32;7321:52;;;7369:1;7366;7359:12;7321:52;7405:9;7392:23;7382:33;;7465:2;7454:9;7450:18;7437:32;7478:31;7503:5;7478:31;:::i;:::-;7528:5;-1:-1:-1;7584:2:1;7569:18;;7556:32;7611:18;7600:30;;7597:50;;;7643:1;7640;7633:12;7597:50;7666:61;7719:7;7710:6;7699:9;7695:22;7666:61;:::i;7738:248::-;7806:6;7814;7867:2;7855:9;7846:7;7842:23;7838:32;7835:52;;;7883:1;7880;7873:12;7835:52;-1:-1:-1;;7906:23:1;;;7976:2;7961:18;;;7948:32;;-1:-1:-1;7738:248:1:o;7991:245::-;8070:6;8078;8131:2;8119:9;8110:7;8106:23;8102:32;8099:52;;;8147:1;8144;8137:12;8099:52;-1:-1:-1;;8170:16:1;;8226:2;8211:18;;;8205:25;8170:16;;8205:25;;-1:-1:-1;7991:245:1:o;8241:306::-;8329:6;8337;8345;8398:2;8386:9;8377:7;8373:23;8369:32;8366:52;;;8414:1;8411;8404:12;8366:52;8443:9;8437:16;8427:26;;8493:2;8482:9;8478:18;8472:25;8462:35;;8537:2;8526:9;8522:18;8516:25;8506:35;;8241:306;;;;;:::o;8552:385::-;8638:6;8646;8654;8662;8715:3;8703:9;8694:7;8690:23;8686:33;8683:53;;;8732:1;8729;8722:12;8683:53;-1:-1:-1;;8755:23:1;;;8825:2;8810:18;;8797:32;;-1:-1:-1;8876:2:1;8861:18;;8848:32;;8927:2;8912:18;8899:32;;-1:-1:-1;8552:385:1;-1:-1:-1;8552:385:1:o;8942:484::-;8995:3;9033:5;9027:12;9060:6;9055:3;9048:19;9086:4;9115:2;9110:3;9106:12;9099:19;;9152:2;9145:5;9141:14;9173:1;9183:218;9197:6;9194:1;9191:13;9183:218;;;9262:13;;-1:-1:-1;;;;;9258:62:1;9246:75;;9341:12;;;;9376:15;;;;9219:1;9212:9;9183:218;;;-1:-1:-1;9417:3:1;;8942:484;-1:-1:-1;;;;;8942:484:1:o;9431:518::-;9492:3;9530:5;9524:12;9557:6;9552:3;9545:19;9583:4;9612:2;9607:3;9603:12;9596:19;;9634:5;9631:1;9624:16;9676:2;9673:1;9663:16;9697:1;9707:217;9721:6;9718:1;9715:13;9707:217;;;9786:13;;-1:-1:-1;;;;;9782:62:1;9770:75;;9865:12;;;;9912:1;9900:14;;;;9736:9;9707:217;;9954:274;10083:3;10121:6;10115:13;10137:53;10183:6;10178:3;10171:4;10163:6;10159:17;10137:53;:::i;:::-;10206:16;;;;;9954:274;-1:-1:-1;;9954:274:1:o;10796:688::-;11072:4;-1:-1:-1;;;;;11182:2:1;11174:6;11170:15;11159:9;11152:34;11234:2;11226:6;11222:15;11217:2;11206:9;11202:18;11195:43;;11274:3;11269:2;11258:9;11254:18;11247:31;11301:57;11353:3;11342:9;11338:19;11330:6;11301:57;:::i;:::-;11406:9;11398:6;11394:22;11389:2;11378:9;11374:18;11367:50;11434:44;11471:6;11463;11434:44;:::i;12277:770::-;12575:4;-1:-1:-1;;;;;12685:2:1;12677:6;12673:15;12662:9;12655:34;12725:3;12720:2;12709:9;12705:18;12698:31;12752:57;12804:3;12793:9;12789:19;12781:6;12752:57;:::i;:::-;12857:9;12849:6;12845:22;12840:2;12829:9;12825:18;12818:50;12885:44;12922:6;12914;12885:44;:::i;:::-;12965:15;;;;12960:2;12945:18;;12938:43;-1:-1:-1;;13025:14:1;;13018:22;13012:3;12997:19;;;12990:51;12877:52;12277:770;-1:-1:-1;;;12277:770:1:o;14749:538::-;15017:6;15006:9;14999:25;15060:3;15055:2;15044:9;15040:18;15033:31;14980:4;15081:65;15141:3;15130:9;15126:19;15118:6;15081:65;:::i;:::-;-1:-1:-1;;;;;15182:55:1;;;;15177:2;15162:18;;15155:83;-1:-1:-1;15269:2:1;15254:18;15247:34;15073:73;14749:538;-1:-1:-1;;14749:538:1:o;15292:383::-;15441:2;15430:9;15423:21;15404:4;15473:6;15467:13;15516:6;15511:2;15500:9;15496:18;15489:34;15532:66;15591:6;15586:2;15575:9;15571:18;15566:2;15558:6;15554:15;15532:66;:::i;:::-;15659:2;15638:15;-1:-1:-1;;15634:29:1;15619:45;;;;15666:2;15615:54;;15292:383;-1:-1:-1;;15292:383:1:o;23207:605::-;23506:6;23495:9;23488:25;23549:6;23544:2;23533:9;23529:18;23522:34;23592:3;23587:2;23576:9;23572:18;23565:31;23469:4;23613:57;23665:3;23654:9;23650:19;23642:6;23613:57;:::i;:::-;-1:-1:-1;;;;;23706:55:1;;;;23701:2;23686:18;;23679:83;-1:-1:-1;23793:3:1;23778:19;23771:35;23605:65;23207:605;-1:-1:-1;;;23207:605:1:o;23817:610::-;24113:6;24102:9;24095:25;24156:6;24151:2;24140:9;24136:18;24129:34;24199:3;24194:2;24183:9;24179:18;24172:31;24076:4;24220:65;24280:3;24269:9;24265:19;24257:6;24220:65;:::i;24874:128::-;24914:3;24945:1;24941:6;24938:1;24935:13;24932:39;;;24951:18;;:::i;:::-;-1:-1:-1;24987:9:1;;24874:128::o;25007:274::-;25047:1;25073;25063:189;;-1:-1:-1;;;25105:1:1;25098:88;25209:4;25206:1;25199:15;25237:4;25234:1;25227:15;25063:189;-1:-1:-1;25266:9:1;;25007:274::o;25286:168::-;25326:7;25392:1;25388;25384:6;25380:14;25377:1;25374:21;25369:1;25362:9;25355:17;25351:45;25348:71;;;25399:18;;:::i;:::-;-1:-1:-1;25439:9:1;;25286:168::o;25459:125::-;25499:4;25527:1;25524;25521:8;25518:34;;;25532:18;;:::i;:::-;-1:-1:-1;25569:9:1;;25459:125::o;25589:258::-;25661:1;25671:113;25685:6;25682:1;25679:13;25671:113;;;25761:11;;;25755:18;25742:11;;;25735:39;25707:2;25700:10;25671:113;;;25802:6;25799:1;25796:13;25793:48;;;-1:-1:-1;;25837:1:1;25819:16;;25812:27;25589:258::o;25852:437::-;25931:1;25927:12;;;;25974;;;25995:61;;26049:4;26041:6;26037:17;26027:27;;25995:61;26102:2;26094:6;26091:14;26071:18;26068:38;26065:218;;;-1:-1:-1;;;26136:1:1;26129:88;26240:4;26237:1;26230:15;26268:4;26265:1;26258:15;26065:218;;25852:437;;;:::o;26294:184::-;-1:-1:-1;;;26343:1:1;26336:88;26443:4;26440:1;26433:15;26467:4;26464:1;26457:15;26483:184;-1:-1:-1;;;26532:1:1;26525:88;26632:4;26629:1;26622:15;26656:4;26653:1;26646:15;26672:184;-1:-1:-1;;;26721:1:1;26714:88;26821:4;26818:1;26811:15;26845:4;26842:1;26835:15;26861:154;-1:-1:-1;;;;;26940:5:1;26936:54;26929:5;26926:65;26916:93;;27005:1;27002;26995:12;27020:118;27106:5;27099:13;27092:21;27085:5;27082:32;27072:60;;27128:1;27125;27118:12
Swarm Source
ipfs://017b51eddf90cec1de955ca4e8a64bf8683fe34297d71d7ef11477dc54a9efe6
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$3.06
Net Worth in MOVR
Token Allocations
MOVR
100.00%
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| MOVR | 100.00% | $2.32 | 1.3196 | $3.06 |
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ 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.