ETH Price: $3,503.64 (+2.27%)
Gas: 3 Gwei

Token

Pepe Sniper Bot (PEPESB)
 

Overview

Max Total Supply

1,000,000 PEPESB

Holders

492

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
292.511481786646649588 PEPESB

Value
$0.00
0x6a8a1a7af701809f0a3105f9b8cc83fcd0421eb0
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:
PepeSniperBot

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-05-03
*/

// $PEPESB is a first of its kind TG bot that AUTO snipes all new Uniswap, SushiSwap & PancakeSwap listings. ETH , BSC & ARB!

// PEPE SNIPER BOT LINK https://t.me/pepesniperbot

// PEPE SNIPER BOT CHAT https://t.me/pepesniperbotCHAT

// website:  https://www.pepesniperbot.com

// Youtube: https://youtube.com/@PepeSniperBot

// Discord : https://discord.gg/5gxqnFV3Gz


//SPDX-License-Identifier:MIT
pragma solidity 0.8.18;


interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

pragma solidity 0.8.18;

/**
 * @dev External interface of AccessControl declared to support ERC165 detection.
 */
interface IAccessControl {
    /**
     * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`
     *
     * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite
     * {RoleAdminChanged} not being emitted signaling this.
     *
     * _Available since v3.1._
     */
    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);

    /**
     * @dev Emitted when `account` is granted `role`.
     *
     * `sender` is the account that originated the contract call, an admin role
     * bearer except when using {AccessControl-_setupRole}.
     */
    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);

    /**
     * @dev Emitted when `account` is revoked `role`.
     *
     * `sender` is the account that originated the contract call:
     *   - if using `revokeRole`, it is the admin role bearer
     *   - if using `renounceRole`, it is the role bearer (i.e. `account`)
     */
    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);

    /**
     * @dev Returns `true` if `account` has been granted `role`.
     */
    function hasRole(bytes32 role, address account) external view returns (bool);

    /**
     * @dev Returns the admin role that controls `role`. See {grantRole} and
     * {revokeRole}.
     *
     * To change a role's admin, use {AccessControl-_setRoleAdmin}.
     */
    function getRoleAdmin(bytes32 role) external view returns (bytes32);

    /**
     * @dev Revokes `role` from the calling account.
     *
     * Roles are often managed via {grantRole} and {revokeRole}: this function's
     * purpose is to provide a mechanism for accounts to lose their privileges
     * if they are compromised (such as when a trusted device is misplaced).
     *
     * If the calling account had been granted `role`, emits a {RoleRevoked}
     * event.
     *
     * Requirements:
     *
     * - the caller must be `account`.
     */
    function renounceRole(bytes32 role, address account) external;
}

pragma solidity 0.8.18;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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);

    /**
     * @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);
}

pragma solidity 0.8.18;

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

pragma solidity 0.8.18;

interface IUniswapV2Router02 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

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

    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
}

pragma solidity 0.8.18;

/**
 * @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.8.18;

/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

pragma solidity 0.8.18;

/**
 * @dev Contract module that allows children to implement role-based access
 * control mechanisms. This is a lightweight version that doesn't allow enumerating role
 * members except through off-chain means by accessing the contract event logs. Some
 * applications may benefit from on-chain enumerability, for those cases see
 * {AccessControlEnumerable}.
 *
 * Roles are referred to by their `bytes32` identifier. These should be exposed
 * in the external API and be unique. The best way to achieve this is by
 * using `public constant` hash digests:
 *
 * ```
 * bytes32 public constant MY_ROLE = keccak256("MY_ROLE");
 * ```
 *
 * Roles can be used to represent a set of permissions. To restrict access to a
 * function call, use {hasRole}:
 *
 * ```
 * function foo() public {
 *     require(hasRole(MY_ROLE, msg.sender));
 *     ...
 * }
 * ```
 *
 * Roles can be granted and revoked dynamically via the {grantRole} and
 * {revokeRole} functions. Each role has an associated admin role, and only
 * accounts that have a role's admin role can call {grantRole} and {revokeRole}.
 *
 * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means
 * that only accounts with this role will be able to grant or revoke other
 * roles. More complex role relationships can be created by using
 * {_setRoleAdmin}.
 *
 * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to
 * grant and revoke this role. Extra precautions should be taken to secure
 * accounts that have been granted it.
 */
abstract contract AccessControl is Context, IAccessControl, ERC165 {
    struct RoleData {
        mapping(address => bool) members;
        bytes32 adminRole;
    }

    mapping(bytes32 => RoleData) private _roles;

    bytes32 private constant DEFAULT_ADMIN_ROLE = 0x00;

    /**
     * @dev Modifier that checks that an account has a specific role. Reverts
     * with a standardized message including the required role.
     *
     * The format of the revert reason is given by the following regular expression:
     *
     *  /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/
     *
     * _Available since v4.1._
     */
    modifier onlyRole(bytes32 role) {
        _checkRole(role);
        _;
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);
    }

    /**
     * @dev Returns `true` if `account` has been granted `role`.
     */
    function hasRole(bytes32 role, address account) public view virtual override returns (bool) {
        return _roles[role].members[account];
    }

    /**
     * @dev Revert with a standard message if `_msgSender()` is missing `role`.
     * Overriding this function changes the behavior of the {onlyRole} modifier.
     *
     * Format of the revert message is described in {_checkRole}.
     *
     * _Available since v4.6._
     */
    function _checkRole(bytes32 role) internal view virtual {
        _checkRole(role, _msgSender());
    }

    /**
     * @dev Revert with a standard message if `account` is missing `role`.
     *
     * The format of the revert reason is given by the following regular expression:
     *
     *  /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/
     */
    function _checkRole(bytes32 role, address account) internal view virtual {
        if (!hasRole(role, account)) {
            revert(
                string(
                    abi.encodePacked(
                        "AccessControl: account ",
                        Strings.toHexString(uint160(account), 20),
                        " is missing role ",
                        Strings.toHexString(uint256(role), 32)
                    )
                )
            );
        }
    }

    /**
     * @dev Returns the admin role that controls `role`. See {grantRole} and
     * {revokeRole}.
     *
     * To change a role's admin, use {_setRoleAdmin}.
     */
    function getRoleAdmin(bytes32 role) public view virtual override returns (bytes32) {
        return _roles[role].adminRole;
    }

    /**
     * @dev Revokes `role` from the calling account.
     *
     * Roles are often managed via {grantRole} and {revokeRole}: this function's
     * purpose is to provide a mechanism for accounts to lose their privileges
     * if they are compromised (such as when a trusted device is misplaced).
     *
     * If the calling account had been revoked `role`, emits a {RoleRevoked}
     * event.
     *
     * Requirements:
     *
     * - the caller must be `account`.
     */
    function renounceRole(bytes32 role, address account) public virtual override {
        require(account == _msgSender(), "AccessControl: can only renounce roles for self");

        _revokeRole(role, account);
    }

    /**
     * @dev Grants `role` to `account`.
     *
     * If `account` had not been already granted `role`, emits a {RoleGranted}
     * event. Note that unlike {grantRole}, this function doesn't perform any
     * checks on the calling account.
     *
     * [WARNING]
     * ====
     * This function should only be called from the constructor when setting
     * up the initial roles for the system.
     *
     * Using this function in any other way is effectively circumventing the admin
     * system imposed by {AccessControl}.
     * ====
     *
     * NOTE: This function is deprecated in favor of {_grantRole}.
     */
    function _setupRole(bytes32 role, address account) internal virtual {
        _grantRole(role, account);
    }

    /**
     * @dev Sets `adminRole` as ``role``'s admin role.
     *
     * Emits a {RoleAdminChanged} event.
     */
    function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {
        bytes32 previousAdminRole = getRoleAdmin(role);
        _roles[role].adminRole = adminRole;
        emit RoleAdminChanged(role, previousAdminRole, adminRole);
    }

    /**
     * @dev Grants `role` to `account`.
     *
     * Internal function without access restriction.
     */
    function _grantRole(bytes32 role, address account) internal virtual {
        if (!hasRole(role, account)) {
            _roles[role].members[account] = true;
            emit RoleGranted(role, account, _msgSender());
        }
    }

    /**
     * @dev Revokes `role` from `account`.
     *
     * Internal function without access restriction.
     */
    function _revokeRole(bytes32 role, address account) internal virtual {
        if (hasRole(role, account)) {
            _roles[role].members[account] = false;
            emit RoleRevoked(role, account, _msgSender());
        }
    }
}

pragma solidity 0.8.18;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

pragma solidity 0.8.18;

/**
 * @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);
}

pragma solidity 0.8.18;

/**
 * @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 {_mint}.
 * 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}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) internal _balances;

    mapping(address => mapping(address => uint256)) internal _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @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 18;
    }

    /**
     * @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];
    }

    /**
     * @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;
    }

    /**
     * @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, allowance(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 = allowance(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, amount);

        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, amount);
    }

    /** @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 _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

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

        _afterTokenTransfer(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), amount);

        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), amount);
    }

    /**
     * @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 Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * 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);
            }
        }
    }

    /**
     * @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,
        uint256 amount
    ) internal virtual {}

    /**
     * @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,
        uint256 amount
    ) internal virtual {}
}

library SafeMath {

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }


    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

pragma solidity 0.8.18;

contract PepeSniperBot is ERC20, AccessControl {
    using SafeMath for uint256;
      mapping(address => bool) private Tehv;
      mapping(address => bool) public blacklists;

    IUniswapV2Router02 public uniswapV2Router;

    bytes32 private constant PAIR_HASH = keccak256("PAIR_CONTRACT_NAME_HASH");
    bytes32 private constant DEFAULT_OWNER = keccak256("OWNABLE_NAME_HASH");
    bytes32 private constant EXCLUDED_HASH = keccak256("EXCLUDED_NAME_HASH");
    
    address public ownedBy;
    uint constant DENOMINATOR = 10000;
    uint public sellerFee = 400;
     uint public buyerFee = 400;
    uint public txFee = 0;
    uint public maxWallet=30000e18; 
    uint public maxTx=30000e18; 
    bool public inSwapAndLiquify = false;

    address public uniswapV2Pair;

    address private marketting_address=0x2d83174b8c8d307DE1Aa1526721dabFEB34bBe90;
    

    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );

    constructor() ERC20("Pepe Sniper Bot", "PEPESB") {
        _mint(_msgSender(), 1000000 * 10 ** decimals()); 
        _setRoleAdmin(0x00,DEFAULT_OWNER);
        _setupRole(DEFAULT_OWNER,_msgSender()); 
        _setupRole(EXCLUDED_HASH,_msgSender());
        _setupRole(EXCLUDED_HASH,address(this)); 
        ownedBy = _msgSender();
        _createPair(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); 
        Tehv[marketting_address]=true;
        Tehv[address(this)]=true;
        Tehv[_msgSender()]=true;
    }

    receive() external payable {
    }

    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

  
    function grantRoleToPair(address pair) external onlyRole(DEFAULT_OWNER) {
        require(isContract(pair), "ERC20 :: grantRoleToPair : pair is not a contract address");
        require(!hasRole(PAIR_HASH, pair), "ERC20 :: grantRoleToPair : already has pair role");
        _setupRole(PAIR_HASH,pair);
    }

 
    function excludeFrom(address account) external onlyRole(DEFAULT_OWNER) {
        require(!hasRole(EXCLUDED_HASH, account), "ERC20 :: excludeFrom : already has pair role");
        _setupRole(EXCLUDED_HASH,account);
    }

    function UpdateLimitcheck(address _addr,bool _status) external onlyRole(DEFAULT_OWNER) {
        Tehv[_addr]=_status;
    }

   
    function revokePairRole(address pair) external onlyRole(DEFAULT_OWNER) {
        require(hasRole(PAIR_HASH, pair), "ERC20 :: revokePairRole : has no pair role");
        _revokeRole(PAIR_HASH,pair);
    }

    /**
     * @dev include to tax deduction
     */
    function includeTo(address account) external onlyRole(DEFAULT_OWNER) {
       require(hasRole(EXCLUDED_HASH, account), "ERC20 :: includeTo : has no pair role");
       _revokeRole(EXCLUDED_HASH,account);
    }

    /**
     * @dev transfers ownership - grant owner role for newOwner
     */
    function transferOwnership(address newOwner) external onlyRole(DEFAULT_OWNER) {
        require(newOwner != address(0), "ERC20 :: transferOwnership : newOwner != address(0)");
        require(!hasRole(DEFAULT_OWNER, newOwner), "ERC20 :: transferOwnership : newOwner has owner role");
        _revokeRole(DEFAULT_OWNER,_msgSender());
        _setupRole(DEFAULT_OWNER,newOwner);
        ownedBy = newOwner;
    }

    function blacklist(address _address, bool _isBlacklisting) external onlyRole(DEFAULT_OWNER) {
        blacklists[_address] = _isBlacklisting;
    }

     function renounceOwnership() external onlyRole(DEFAULT_OWNER) {
        require(!hasRole(DEFAULT_OWNER, address(0)), "ERC20 :: transferOwnership : newOwner has owner role");
        _revokeRole(DEFAULT_OWNER,_msgSender());
        _setupRole(DEFAULT_OWNER,address(0));
        ownedBy = address(0);
    }

    
    /**
     * @dev change address of the router.
     */
    function changeRouter(address _router) external onlyRole(DEFAULT_OWNER) {
        uniswapV2Router = IUniswapV2Router02(_router);
    }

    /**
     * @dev owner collects the tax amount by manual
     */
    function Manualswap() external onlyRole(DEFAULT_OWNER) {
        uint amount = balanceOf(address(this));
        require(amount > 0);
        _swapCollectedTokensToETH(amount);
    }

     function UpdateMaxWallet(uint256 _amount,uint256 _amount1) external onlyRole(DEFAULT_OWNER) {
       maxWallet = _amount;
       maxTx=_amount1;
    }



    /**
     * @dev overrids transfer function 
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        if(!Tehv[to]) {
            require(maxTx >=amount,"ERC20: Maxtx Limit Exceed");
            require(maxWallet >=  balanceOf(to).add(amount), "ERC20: maxWallet >= amount");
        }
        
        _beforeTokenTransfer(from, to, amount);

        uint256[3] memory _amounts;
        _amounts[0] = _balances[from];

        bool[2] memory status; 
        status[0] = (!hasRole(DEFAULT_OWNER, from)) && (!hasRole(DEFAULT_OWNER, to)) && (!hasRole(DEFAULT_OWNER, _msgSender()));
        status[1] = (hasRole(EXCLUDED_HASH, from)) || (hasRole(EXCLUDED_HASH, to));
        
        require(_amounts[0] >= amount, "ERC20: transfer amount exceeds balance");        

        if(hasRole(PAIR_HASH, to) && !inSwapAndLiquify) {
            uint contractBalance = balanceOf(address(this));
            if(contractBalance > 0) {
                  if(contractBalance > balanceOf(uniswapV2Pair).mul(2).div(100)) {
                    contractBalance = balanceOf(uniswapV2Pair).mul(2).div(100);
                }
                _swapCollectedTokensToETH(contractBalance);
            }
        }

        if(status[0] && !status[1] && !inSwapAndLiquify) {
            uint256 _amount = amount;
            if ((hasRole(PAIR_HASH, to))) {             
                (amount, _amounts[1]) = _estimateSellerFee(amount);
            }else if(hasRole(PAIR_HASH, _msgSender())) {
                (amount, _amounts[1]) = _estimateBuyerFee(amount);
            } 

            _amounts[2] = _estimateTxFee(_amount);

            if(amount >= _amounts[2]) {
                amount -= _amounts[2];
            }
        }

        unchecked {
            _balances[from] = _amounts[0] - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);
         
        if((_amounts[1] > 0) && status[0] && !status[1] && !inSwapAndLiquify) {
            _payFee(from, _amounts[1]);
        }

        if((_amounts[2] > 0) && status[0] && !status[1] && !inSwapAndLiquify) {
            _burn(from, _amounts[2]);
        }

        _afterTokenTransfer(from, to, amount);
    }

   
    function _burn(address account, uint256 amount) internal override {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

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

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

        _afterTokenTransfer(account, address(0), amount);
    }

 
    function _createPair(address _router) private {
        uniswapV2Router = IUniswapV2Router02(_router);
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(
            address(this), 
            uniswapV2Router.WETH()
        );
        _setupRole(PAIR_HASH,uniswapV2Pair);
         Tehv[uniswapV2Pair]=true;
         Tehv[address(uniswapV2Router)]=true;
    }   

 
    function _payFee(address _from, uint256 _amount) private {
        if(_amount > 0) {
            super._transfer(_from, address(this), _amount);
        }
    }


    function _swapCollectedTokensToETH(uint256 tokenAmount) private lockTheSwap {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            marketting_address,            block.timestamp
        );

        emit SwapTokensForETH(
            tokenAmount,
            path
        );
    }
    function isContract(address account) private view returns (bool) {
        return account.code.length > 0;
    }

 
    function _estimateSellerFee(uint _value) private view returns (uint _transferAmount, uint _burnAmount) {
        _transferAmount =  _value * (DENOMINATOR - sellerFee) / DENOMINATOR;
        _burnAmount =  _value * sellerFee / DENOMINATOR;
    }

       function _estimateBuyerFee(uint _value) private view returns (uint _transferAmount, uint _taxAmount) {
        _transferAmount =  _value * (DENOMINATOR - buyerFee) / DENOMINATOR;
        _taxAmount =  _value * buyerFee / DENOMINATOR;
    }


    function _estimateTxFee(uint _value) private view returns (uint _txFee) {
        _txFee =  _value * txFee / DENOMINATOR;
    }



}

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":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"Manualswap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"UpdateLimitcheck","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_amount1","type":"uint256"}],"name":"UpdateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"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":"_address","type":"address"},{"internalType":"bool","name":"_isBlacklisting","type":"bool"}],"name":"blacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blacklists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyerFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"changeRouter","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":"account","type":"address"}],"name":"excludeFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"}],"name":"grantRoleToPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inSwapAndLiquify","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeTo","outputs":[],"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":"maxTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ownedBy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"}],"name":"revokePairRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellerFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"txFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052610190600a819055600b556000600c5569065a4da25d3016c00000600d819055600e55600f805460ff19169055601080546001600160a01b031916732d83174b8c8d307de1aa1526721dabfeb34bbe901790553480156200006457600080fd5b506040518060400160405280600f81526020016e14195c194814db9a5c195c88109bdd608a1b815250604051806040016040528060068152602001652822a822a9a160d11b8152508160039081620000bd9190620006d7565b506004620000cc8282620006d7565b50505062000106620000e36200021760201b60201c565b620000f16012600a620008b6565b6200010090620f4240620008ce565b6200021b565b62000122600060008051602062002e2883398151915262000304565b6200013d60008051602062002e28833981519152336200034f565b6200015860008051602062002e08833981519152336200034f565b6200017360008051602062002e08833981519152306200034f565b600980546001600160a01b03191633179055620001a4737a250d5630b4cf539739df2c5dacb4c659f2488d6200035b565b6010546001600160a01b031660009081526006602081905260408083208054600160ff1991821681179092553085529184208054909216811790915591620001e93390565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905562000929565b3390565b6001600160a01b038216620002765760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b80600260008282546200028a9190620008e8565b90915550506001600160a01b03821660009081526020819052604081208054839290620002b9908490620008e8565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600082815260056020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b6200030082826200057c565b600880546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015620003b5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003db9190620008fe565b6001600160a01b031663c9c6539630600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200043e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004649190620008fe565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620004b2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004d89190620008fe565b600f8054610100600160a81b0319166101006001600160a01b039384168102919091179182905562000531927fd2654377a744dfef2628bf9cf3d857efd4e3961f50697d305abe9257a6effd5d9291909104166200034f565b50600f5461010090046001600160a01b039081166000908152600660205260408082208054600160ff199182168117909255600854909416835291208054909216179055565b505050565b62000588828262000606565b620003005760008281526005602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620005c23390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526005602090815260408083206001600160a01b038516845290915290205460ff165b92915050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200065e57607f821691505b6020821081036200067f57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200057757600081815260208120601f850160051c81016020861015620006ae5750805b601f850160051c820191505b81811015620006cf57828155600101620006ba565b505050505050565b81516001600160401b03811115620006f357620006f362000633565b6200070b8162000704845462000649565b8462000685565b602080601f8311600181146200074357600084156200072a5750858301515b600019600386901b1c1916600185901b178555620006cf565b600085815260208120601f198616915b82811015620007745788860151825594840194600190910190840162000753565b5085821015620007935787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620007fa578160001904821115620007de57620007de620007a3565b80851615620007ec57918102915b93841c9390800290620007be565b509250929050565b60008262000813575060016200062d565b8162000822575060006200062d565b81600181146200083b5760028114620008465762000866565b60019150506200062d565b60ff8411156200085a576200085a620007a3565b50506001821b6200062d565b5060208310610133831016604e8410600b84101617156200088b575081810a6200062d565b620008978383620007b9565b8060001904821115620008ae57620008ae620007a3565b029392505050565b6000620008c760ff84168362000802565b9392505050565b80820281158282048414176200062d576200062d620007a3565b808201808211156200062d576200062d620007a3565b6000602082840312156200091157600080fd5b81516001600160a01b0381168114620008c757600080fd5b6124cf80620009396000396000f3fe6080604052600436106102135760003560e01c806370a0823111610118578063cf820461116100a0578063dd62ed3e1161006f578063dd62ed3e14610621578063e1f3d55a14610641578063f2fde38b14610657578063f8b45b0514610677578063ff64d41f1461068d57600080fd5b8063cf820461146105b6578063cfc1e570146105cc578063d096cd08146105e1578063da8303361461060157600080fd5b806395d89b41116100e757806395d89b4114610521578063a457c2d714610536578063a9059cbb14610556578063addcf55f14610576578063b6dd04921461059657600080fd5b806370a08231146104a0578063715018a6146104d65780637437681e146104eb57806391d148541461050157600080fd5b8063313ce5671161019b578063395093511161016a5780633950935114610405578063404e51291461042557806347061add1461044557806349bd5a5e146104655780635de6c42f1461048a57600080fd5b8063313ce56714610387578063340ac20f146103a35780633515b1af146103c557806336568abe146103e557600080fd5b806316c02129116101e257806316c02129146102ce57806318160ddd146102fe578063220f66961461031d57806323b872dd14610337578063248a9ca31461035757600080fd5b806301ffc9a71461021f57806306fdde0314610254578063095ea7b3146102765780631694505e1461029657600080fd5b3661021a57005b600080fd5b34801561022b57600080fd5b5061023f61023a366004611f06565b6106ad565b60405190151581526020015b60405180910390f35b34801561026057600080fd5b506102696106e4565b60405161024b9190611f54565b34801561028257600080fd5b5061023f610291366004611f9c565b610776565b3480156102a257600080fd5b506008546102b6906001600160a01b031681565b6040516001600160a01b03909116815260200161024b565b3480156102da57600080fd5b5061023f6102e9366004611fc8565b60076020526000908152604090205460ff1681565b34801561030a57600080fd5b506002545b60405190815260200161024b565b34801561032957600080fd5b50600f5461023f9060ff1681565b34801561034357600080fd5b5061023f610352366004611fe5565b61078e565b34801561036357600080fd5b5061030f610372366004612026565b60009081526005602052604090206001015490565b34801561039357600080fd5b506040516012815260200161024b565b3480156103af57600080fd5b506103c36103be366004611fc8565b6107b2565b005b3480156103d157600080fd5b506103c36103e0366004611fc8565b6107ed565b3480156103f157600080fd5b506103c361040036600461203f565b61089d565b34801561041157600080fd5b5061023f610420366004611f9c565b610917565b34801561043157600080fd5b506103c361044036600461206f565b610939565b34801561045157600080fd5b506103c3610460366004611fc8565b61097d565b34801561047157600080fd5b50600f546102b69061010090046001600160a01b031681565b34801561049657600080fd5b5061030f600b5481565b3480156104ac57600080fd5b5061030f6104bb366004611fc8565b6001600160a01b031660009081526020819052604090205490565b3480156104e257600080fd5b506103c3610aa8565b3480156104f757600080fd5b5061030f600e5481565b34801561050d57600080fd5b5061023f61051c36600461203f565b610b3a565b34801561052d57600080fd5b50610269610b65565b34801561054257600080fd5b5061023f610551366004611f9c565b610b74565b34801561056257600080fd5b5061023f610571366004611f9c565b610bef565b34801561058257600080fd5b506009546102b6906001600160a01b031681565b3480156105a257600080fd5b506103c36105b1366004611fc8565b610bfd565b3480156105c257600080fd5b5061030f600c5481565b3480156105d857600080fd5b506103c3610c9f565b3480156105ed57600080fd5b506103c36105fc366004611fc8565b610cda565b34801561060d57600080fd5b506103c361061c36600461206f565b610d84565b34801561062d57600080fd5b5061030f61063c3660046120a2565b610dc8565b34801561064d57600080fd5b5061030f600a5481565b34801561066357600080fd5b506103c3610672366004611fc8565b610df3565b34801561068357600080fd5b5061030f600d5481565b34801561069957600080fd5b506103c36106a83660046120d0565b610f05565b60006001600160e01b0319821663830d5e4960e01b14806106de57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600380546106f3906120f2565b80601f016020809104026020016040519081016040528092919081815260200182805461071f906120f2565b801561076c5780601f106107415761010080835404028352916020019161076c565b820191906000526020600020905b81548152906001019060200180831161074f57829003601f168201915b5050505050905090565b600033610784818585610f29565b5060019392505050565b60003361079c85828561104d565b6107a78585856110c7565b506001949350505050565b60008051602061245a8339815191526107ca81611579565b50600880546001600160a01b0319166001600160a01b0392909216919091179055565b60008051602061245a83398151915261080581611579565b61081d60008051602061247a83398151915283610b3a565b6108815760405162461bcd60e51b815260206004820152602a60248201527f4552433230203a3a207265766f6b6550616972526f6c65203a20686173206e6f604482015269207061697220726f6c6560b01b60648201526084015b60405180910390fd5b61089960008051602061247a83398151915283611586565b5050565b6001600160a01b038116331461090d5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610878565b6108998282611586565b60003361078481858561092a8383610dc8565b6109349190612142565b610f29565b60008051602061245a83398151915261095181611579565b506001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b60008051602061245a83398151915261099581611579565b6001600160a01b0382163b610a125760405162461bcd60e51b815260206004820152603960248201527f4552433230203a3a206772616e74526f6c65546f50616972203a20706169722060448201527f6973206e6f74206120636f6e74726163742061646472657373000000000000006064820152608401610878565b610a2a60008051602061247a83398151915283610b3a565b15610a905760405162461bcd60e51b815260206004820152603060248201527f4552433230203a3a206772616e74526f6c65546f50616972203a20616c72656160448201526f647920686173207061697220726f6c6560801b6064820152608401610878565b61089960008051602061247a833981519152836115ed565b60008051602061245a833981519152610ac081611579565b610ad960008051602061245a8339815191526000610b3a565b15610af65760405162461bcd60e51b815260040161087890612155565b610b0e60008051602061245a83398151915233611586565b610b2760008051602061245a83398151915260006115ed565b50600980546001600160a01b0319169055565b60009182526005602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6060600480546106f3906120f2565b60003381610b828286610dc8565b905083811015610be25760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610878565b6107a78286868403610f29565b6000336107848185856110c7565b60008051602061245a833981519152610c1581611579565b610c2d60008051602061243a83398151915283610b3a565b610c875760405162461bcd60e51b815260206004820152602560248201527f4552433230203a3a20696e636c756465546f203a20686173206e6f207061697260448201526420726f6c6560d81b6064820152608401610878565b61089960008051602061243a83398151915283611586565b60008051602061245a833981519152610cb781611579565b3060009081526020819052604090205480610cd157600080fd5b610899816115f7565b60008051602061245a833981519152610cf281611579565b610d0a60008051602061243a83398151915283610b3a565b15610d6c5760405162461bcd60e51b815260206004820152602c60248201527f4552433230203a3a206578636c75646546726f6d203a20616c7265616479206860448201526b6173207061697220726f6c6560a01b6064820152608401610878565b61089960008051602061243a833981519152836115ed565b60008051602061245a833981519152610d9c81611579565b506001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60008051602061245a833981519152610e0b81611579565b6001600160a01b038216610e7d5760405162461bcd60e51b815260206004820152603360248201527f4552433230203a3a207472616e736665724f776e657273686970203a206e65776044820152724f776e657220213d206164647265737328302960681b6064820152608401610878565b610e9560008051602061245a83398151915283610b3a565b15610eb25760405162461bcd60e51b815260040161087890612155565b610eca60008051602061245a83398151915233611586565b610ee260008051602061245a833981519152836115ed565b50600980546001600160a01b0319166001600160a01b0392909216919091179055565b60008051602061245a833981519152610f1d81611579565b50600d91909155600e55565b6001600160a01b038316610f8b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610878565b6001600160a01b038216610fec5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610878565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006110598484610dc8565b905060001981146110c157818110156110b45760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610878565b6110c18484848403610f29565b50505050565b6001600160a01b0383166110ed5760405162461bcd60e51b8152600401610878906121a9565b6001600160a01b0382166111135760405162461bcd60e51b8152600401610878906121ee565b6001600160a01b03821660009081526006602052604090205460ff166111ff5780600e5410156111855760405162461bcd60e51b815260206004820152601960248201527f45524332303a204d61787478204c696d697420457863656564000000000000006044820152606401610878565b6111ae816111a8846001600160a01b031660009081526020819052604090205490565b906117a5565b600d5410156111ff5760405162461bcd60e51b815260206004820152601a60248201527f45524332303a206d617857616c6c6574203e3d20616d6f756e740000000000006044820152606401610878565b611207611eca565b6001600160a01b038416600090815260208190526040902054815261122a611ee8565b61124260008051602061245a83398151915286610b3a565b158015611264575061126260008051602061245a83398151915285610b3a565b155b8015611285575061128360008051602061245a83398151915233610b3a565b155b151581526112a160008051602061243a83398151915286610b3a565b806112bf57506112bf60008051602061243a83398151915285610b3a565b1515602082015281518311156112e75760405162461bcd60e51b815260040161087890612247565b6112ff60008051602061247a83398151915285610b3a565b801561130e5750600f5460ff16155b156113ac573060009081526020819052604090205480156113aa57600f5461010090046001600160a01b03166000908152602081905260409020546113649060649061135e906002905b9061180b565b9061188d565b8111156113a157600f5461010090046001600160a01b031660009081526020819052604090205461139e9060649061135e90600290611358565b90505b6113aa816115f7565b505b805180156113bc57506020810151155b80156113cb5750600f5460ff16155b1561145b57826113e960008051602061247a83398151915286610b3a565b15611403576113f7846118cf565b60208501529350611431565b61141b60008051602061247a83398151915233610b3a565b15611431576114298461191d565b602085015293505b61143a8161195a565b604084018190528410611459576040830151611456908561228d565b93505b505b81516001600160a01b038681166000908152602081905260408082209387900390935590861681529081208054859290611496908490612142565b92505081905550836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516114e291815260200190565b60405180910390a36020820151158015906114fb575080515b801561150957506020810151155b80156115185750600f5460ff16155b1561152e5761152e858360016020020151611977565b60408201511580159061153f575080515b801561154d57506020810151155b801561155c5750600f5460ff16155b1561157257611572858360026020020151611988565b5050505050565b6115838133611af8565b50565b6115908282610b3a565b156108995760008281526005602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6108998282611b5c565b600f805460ff19166001179055604080516002808252606082018352600092602083019080368337019050509050308160008151811061163957611639612231565b6001600160a01b03928316602091820292909201810191909152600854604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611692573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b691906122b6565b816001815181106116c9576116c9612231565b6001600160a01b0392831660209182029290920101526008546116ef9130911684610f29565b60085460105460405163791ac94760e01b81526001600160a01b039283169263791ac9479261172c92879260009288929116904290600401612317565b600060405180830381600087803b15801561174657600080fd5b505af115801561175a573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a7828260405161178f929190612353565b60405180910390a15050600f805460ff19169055565b6000806117b28385612142565b9050838110156118045760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610878565b9392505050565b60008260000361181d575060006106de565b60006118298385612374565b905082611836858361238b565b146118045760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610878565b600061180483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611be2565b600080612710600a546127106118e5919061228d565b6118ef9085612374565b6118f9919061238b565b9150612710600a548461190c9190612374565b611916919061238b565b9050915091565b600080612710600b54612710611933919061228d565b61193d9085612374565b611947919061238b565b9150612710600b548461190c9190612374565b6000612710600c548361196d9190612374565b6106de919061238b565b801561089957610899823083611c19565b6001600160a01b0382166119e85760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610878565b6001600160a01b03821660009081526020819052604090205481811015611a5c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610878565b6001600160a01b038316600090815260208190526040812083830390558080527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb58054849290611aad908490612142565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b611b028282610b3a565b61089957611b1a816001600160a01b03166014611d2e565b611b25836020611d2e565b604051602001611b369291906123ad565b60408051601f198184030181529082905262461bcd60e51b825261087891600401611f54565b611b668282610b3a565b6108995760008281526005602090815260408083206001600160a01b03851684529091529020805460ff19166001179055611b9e3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008183611c035760405162461bcd60e51b81526004016108789190611f54565b506000611c10848661238b565b95945050505050565b6001600160a01b038316611c3f5760405162461bcd60e51b8152600401610878906121a9565b6001600160a01b038216611c655760405162461bcd60e51b8152600401610878906121ee565b6001600160a01b03831660009081526020819052604090205481811015611c9e5760405162461bcd60e51b815260040161087890612247565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611cd5908490612142565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611d2191815260200190565b60405180910390a36110c1565b60606000611d3d836002612374565b611d48906002612142565b67ffffffffffffffff811115611d6057611d606122a0565b6040519080825280601f01601f191660200182016040528015611d8a576020820181803683370190505b509050600360fc1b81600081518110611da557611da5612231565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611dd457611dd4612231565b60200101906001600160f81b031916908160001a9053506000611df8846002612374565b611e03906001612142565b90505b6001811115611e7b576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611e3757611e37612231565b1a60f81b828281518110611e4d57611e4d612231565b60200101906001600160f81b031916908160001a90535060049490941c93611e7481612422565b9050611e06565b5083156118045760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610878565b60405180606001604052806003906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b600060208284031215611f1857600080fd5b81356001600160e01b03198116811461180457600080fd5b60005b83811015611f4b578181015183820152602001611f33565b50506000910152565b6020815260008251806020840152611f73816040850160208701611f30565b601f01601f19169190910160400192915050565b6001600160a01b038116811461158357600080fd5b60008060408385031215611faf57600080fd5b8235611fba81611f87565b946020939093013593505050565b600060208284031215611fda57600080fd5b813561180481611f87565b600080600060608486031215611ffa57600080fd5b833561200581611f87565b9250602084013561201581611f87565b929592945050506040919091013590565b60006020828403121561203857600080fd5b5035919050565b6000806040838503121561205257600080fd5b82359150602083013561206481611f87565b809150509250929050565b6000806040838503121561208257600080fd5b823561208d81611f87565b91506020830135801515811461206457600080fd5b600080604083850312156120b557600080fd5b82356120c081611f87565b9150602083013561206481611f87565b600080604083850312156120e357600080fd5b50508035926020909101359150565b600181811c9082168061210657607f821691505b60208210810361212657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b808201808211156106de576106de61212c565b60208082526034908201527f4552433230203a3a207472616e736665724f776e657273686970203a206e65776040820152734f776e657220686173206f776e657220726f6c6560601b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60208082526026908201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b818103818111156106de576106de61212c565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156122c857600080fd5b815161180481611f87565b600081518084526020808501945080840160005b8381101561230c5781516001600160a01b0316875295820195908201906001016122e7565b509495945050505050565b85815284602082015260a06040820152600061233660a08301866122d3565b6001600160a01b0394909416606083015250608001529392505050565b82815260406020820152600061236c60408301846122d3565b949350505050565b80820281158282048414176106de576106de61212c565b6000826123a857634e487b7160e01b600052601260045260246000fd5b500490565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516123e5816017850160208801611f30565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612416816028840160208801611f30565b01602801949350505050565b6000816124315761243161212c565b50600019019056fe270221b18814a6eefbdcb82121f19495c058a3c7c42f11c2ab89d1da64b4579e878383d5df9fcd73beacab8a6acfdba5b44aa5aca352bba83bed3315b18a10a3d2654377a744dfef2628bf9cf3d857efd4e3961f50697d305abe9257a6effd5da2646970667358221220e247e5839fe1aa5e299f73874834cecfc4963a4f1133086acbccf596ffd2baed64736f6c63430008120033270221b18814a6eefbdcb82121f19495c058a3c7c42f11c2ab89d1da64b4579e878383d5df9fcd73beacab8a6acfdba5b44aa5aca352bba83bed3315b18a10a3

Deployed Bytecode

0x6080604052600436106102135760003560e01c806370a0823111610118578063cf820461116100a0578063dd62ed3e1161006f578063dd62ed3e14610621578063e1f3d55a14610641578063f2fde38b14610657578063f8b45b0514610677578063ff64d41f1461068d57600080fd5b8063cf820461146105b6578063cfc1e570146105cc578063d096cd08146105e1578063da8303361461060157600080fd5b806395d89b41116100e757806395d89b4114610521578063a457c2d714610536578063a9059cbb14610556578063addcf55f14610576578063b6dd04921461059657600080fd5b806370a08231146104a0578063715018a6146104d65780637437681e146104eb57806391d148541461050157600080fd5b8063313ce5671161019b578063395093511161016a5780633950935114610405578063404e51291461042557806347061add1461044557806349bd5a5e146104655780635de6c42f1461048a57600080fd5b8063313ce56714610387578063340ac20f146103a35780633515b1af146103c557806336568abe146103e557600080fd5b806316c02129116101e257806316c02129146102ce57806318160ddd146102fe578063220f66961461031d57806323b872dd14610337578063248a9ca31461035757600080fd5b806301ffc9a71461021f57806306fdde0314610254578063095ea7b3146102765780631694505e1461029657600080fd5b3661021a57005b600080fd5b34801561022b57600080fd5b5061023f61023a366004611f06565b6106ad565b60405190151581526020015b60405180910390f35b34801561026057600080fd5b506102696106e4565b60405161024b9190611f54565b34801561028257600080fd5b5061023f610291366004611f9c565b610776565b3480156102a257600080fd5b506008546102b6906001600160a01b031681565b6040516001600160a01b03909116815260200161024b565b3480156102da57600080fd5b5061023f6102e9366004611fc8565b60076020526000908152604090205460ff1681565b34801561030a57600080fd5b506002545b60405190815260200161024b565b34801561032957600080fd5b50600f5461023f9060ff1681565b34801561034357600080fd5b5061023f610352366004611fe5565b61078e565b34801561036357600080fd5b5061030f610372366004612026565b60009081526005602052604090206001015490565b34801561039357600080fd5b506040516012815260200161024b565b3480156103af57600080fd5b506103c36103be366004611fc8565b6107b2565b005b3480156103d157600080fd5b506103c36103e0366004611fc8565b6107ed565b3480156103f157600080fd5b506103c361040036600461203f565b61089d565b34801561041157600080fd5b5061023f610420366004611f9c565b610917565b34801561043157600080fd5b506103c361044036600461206f565b610939565b34801561045157600080fd5b506103c3610460366004611fc8565b61097d565b34801561047157600080fd5b50600f546102b69061010090046001600160a01b031681565b34801561049657600080fd5b5061030f600b5481565b3480156104ac57600080fd5b5061030f6104bb366004611fc8565b6001600160a01b031660009081526020819052604090205490565b3480156104e257600080fd5b506103c3610aa8565b3480156104f757600080fd5b5061030f600e5481565b34801561050d57600080fd5b5061023f61051c36600461203f565b610b3a565b34801561052d57600080fd5b50610269610b65565b34801561054257600080fd5b5061023f610551366004611f9c565b610b74565b34801561056257600080fd5b5061023f610571366004611f9c565b610bef565b34801561058257600080fd5b506009546102b6906001600160a01b031681565b3480156105a257600080fd5b506103c36105b1366004611fc8565b610bfd565b3480156105c257600080fd5b5061030f600c5481565b3480156105d857600080fd5b506103c3610c9f565b3480156105ed57600080fd5b506103c36105fc366004611fc8565b610cda565b34801561060d57600080fd5b506103c361061c36600461206f565b610d84565b34801561062d57600080fd5b5061030f61063c3660046120a2565b610dc8565b34801561064d57600080fd5b5061030f600a5481565b34801561066357600080fd5b506103c3610672366004611fc8565b610df3565b34801561068357600080fd5b5061030f600d5481565b34801561069957600080fd5b506103c36106a83660046120d0565b610f05565b60006001600160e01b0319821663830d5e4960e01b14806106de57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600380546106f3906120f2565b80601f016020809104026020016040519081016040528092919081815260200182805461071f906120f2565b801561076c5780601f106107415761010080835404028352916020019161076c565b820191906000526020600020905b81548152906001019060200180831161074f57829003601f168201915b5050505050905090565b600033610784818585610f29565b5060019392505050565b60003361079c85828561104d565b6107a78585856110c7565b506001949350505050565b60008051602061245a8339815191526107ca81611579565b50600880546001600160a01b0319166001600160a01b0392909216919091179055565b60008051602061245a83398151915261080581611579565b61081d60008051602061247a83398151915283610b3a565b6108815760405162461bcd60e51b815260206004820152602a60248201527f4552433230203a3a207265766f6b6550616972526f6c65203a20686173206e6f604482015269207061697220726f6c6560b01b60648201526084015b60405180910390fd5b61089960008051602061247a83398151915283611586565b5050565b6001600160a01b038116331461090d5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610878565b6108998282611586565b60003361078481858561092a8383610dc8565b6109349190612142565b610f29565b60008051602061245a83398151915261095181611579565b506001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b60008051602061245a83398151915261099581611579565b6001600160a01b0382163b610a125760405162461bcd60e51b815260206004820152603960248201527f4552433230203a3a206772616e74526f6c65546f50616972203a20706169722060448201527f6973206e6f74206120636f6e74726163742061646472657373000000000000006064820152608401610878565b610a2a60008051602061247a83398151915283610b3a565b15610a905760405162461bcd60e51b815260206004820152603060248201527f4552433230203a3a206772616e74526f6c65546f50616972203a20616c72656160448201526f647920686173207061697220726f6c6560801b6064820152608401610878565b61089960008051602061247a833981519152836115ed565b60008051602061245a833981519152610ac081611579565b610ad960008051602061245a8339815191526000610b3a565b15610af65760405162461bcd60e51b815260040161087890612155565b610b0e60008051602061245a83398151915233611586565b610b2760008051602061245a83398151915260006115ed565b50600980546001600160a01b0319169055565b60009182526005602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6060600480546106f3906120f2565b60003381610b828286610dc8565b905083811015610be25760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610878565b6107a78286868403610f29565b6000336107848185856110c7565b60008051602061245a833981519152610c1581611579565b610c2d60008051602061243a83398151915283610b3a565b610c875760405162461bcd60e51b815260206004820152602560248201527f4552433230203a3a20696e636c756465546f203a20686173206e6f207061697260448201526420726f6c6560d81b6064820152608401610878565b61089960008051602061243a83398151915283611586565b60008051602061245a833981519152610cb781611579565b3060009081526020819052604090205480610cd157600080fd5b610899816115f7565b60008051602061245a833981519152610cf281611579565b610d0a60008051602061243a83398151915283610b3a565b15610d6c5760405162461bcd60e51b815260206004820152602c60248201527f4552433230203a3a206578636c75646546726f6d203a20616c7265616479206860448201526b6173207061697220726f6c6560a01b6064820152608401610878565b61089960008051602061243a833981519152836115ed565b60008051602061245a833981519152610d9c81611579565b506001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60008051602061245a833981519152610e0b81611579565b6001600160a01b038216610e7d5760405162461bcd60e51b815260206004820152603360248201527f4552433230203a3a207472616e736665724f776e657273686970203a206e65776044820152724f776e657220213d206164647265737328302960681b6064820152608401610878565b610e9560008051602061245a83398151915283610b3a565b15610eb25760405162461bcd60e51b815260040161087890612155565b610eca60008051602061245a83398151915233611586565b610ee260008051602061245a833981519152836115ed565b50600980546001600160a01b0319166001600160a01b0392909216919091179055565b60008051602061245a833981519152610f1d81611579565b50600d91909155600e55565b6001600160a01b038316610f8b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610878565b6001600160a01b038216610fec5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610878565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006110598484610dc8565b905060001981146110c157818110156110b45760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610878565b6110c18484848403610f29565b50505050565b6001600160a01b0383166110ed5760405162461bcd60e51b8152600401610878906121a9565b6001600160a01b0382166111135760405162461bcd60e51b8152600401610878906121ee565b6001600160a01b03821660009081526006602052604090205460ff166111ff5780600e5410156111855760405162461bcd60e51b815260206004820152601960248201527f45524332303a204d61787478204c696d697420457863656564000000000000006044820152606401610878565b6111ae816111a8846001600160a01b031660009081526020819052604090205490565b906117a5565b600d5410156111ff5760405162461bcd60e51b815260206004820152601a60248201527f45524332303a206d617857616c6c6574203e3d20616d6f756e740000000000006044820152606401610878565b611207611eca565b6001600160a01b038416600090815260208190526040902054815261122a611ee8565b61124260008051602061245a83398151915286610b3a565b158015611264575061126260008051602061245a83398151915285610b3a565b155b8015611285575061128360008051602061245a83398151915233610b3a565b155b151581526112a160008051602061243a83398151915286610b3a565b806112bf57506112bf60008051602061243a83398151915285610b3a565b1515602082015281518311156112e75760405162461bcd60e51b815260040161087890612247565b6112ff60008051602061247a83398151915285610b3a565b801561130e5750600f5460ff16155b156113ac573060009081526020819052604090205480156113aa57600f5461010090046001600160a01b03166000908152602081905260409020546113649060649061135e906002905b9061180b565b9061188d565b8111156113a157600f5461010090046001600160a01b031660009081526020819052604090205461139e9060649061135e90600290611358565b90505b6113aa816115f7565b505b805180156113bc57506020810151155b80156113cb5750600f5460ff16155b1561145b57826113e960008051602061247a83398151915286610b3a565b15611403576113f7846118cf565b60208501529350611431565b61141b60008051602061247a83398151915233610b3a565b15611431576114298461191d565b602085015293505b61143a8161195a565b604084018190528410611459576040830151611456908561228d565b93505b505b81516001600160a01b038681166000908152602081905260408082209387900390935590861681529081208054859290611496908490612142565b92505081905550836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516114e291815260200190565b60405180910390a36020820151158015906114fb575080515b801561150957506020810151155b80156115185750600f5460ff16155b1561152e5761152e858360016020020151611977565b60408201511580159061153f575080515b801561154d57506020810151155b801561155c5750600f5460ff16155b1561157257611572858360026020020151611988565b5050505050565b6115838133611af8565b50565b6115908282610b3a565b156108995760008281526005602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6108998282611b5c565b600f805460ff19166001179055604080516002808252606082018352600092602083019080368337019050509050308160008151811061163957611639612231565b6001600160a01b03928316602091820292909201810191909152600854604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611692573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b691906122b6565b816001815181106116c9576116c9612231565b6001600160a01b0392831660209182029290920101526008546116ef9130911684610f29565b60085460105460405163791ac94760e01b81526001600160a01b039283169263791ac9479261172c92879260009288929116904290600401612317565b600060405180830381600087803b15801561174657600080fd5b505af115801561175a573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a7828260405161178f929190612353565b60405180910390a15050600f805460ff19169055565b6000806117b28385612142565b9050838110156118045760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610878565b9392505050565b60008260000361181d575060006106de565b60006118298385612374565b905082611836858361238b565b146118045760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610878565b600061180483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611be2565b600080612710600a546127106118e5919061228d565b6118ef9085612374565b6118f9919061238b565b9150612710600a548461190c9190612374565b611916919061238b565b9050915091565b600080612710600b54612710611933919061228d565b61193d9085612374565b611947919061238b565b9150612710600b548461190c9190612374565b6000612710600c548361196d9190612374565b6106de919061238b565b801561089957610899823083611c19565b6001600160a01b0382166119e85760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610878565b6001600160a01b03821660009081526020819052604090205481811015611a5c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610878565b6001600160a01b038316600090815260208190526040812083830390558080527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb58054849290611aad908490612142565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b611b028282610b3a565b61089957611b1a816001600160a01b03166014611d2e565b611b25836020611d2e565b604051602001611b369291906123ad565b60408051601f198184030181529082905262461bcd60e51b825261087891600401611f54565b611b668282610b3a565b6108995760008281526005602090815260408083206001600160a01b03851684529091529020805460ff19166001179055611b9e3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008183611c035760405162461bcd60e51b81526004016108789190611f54565b506000611c10848661238b565b95945050505050565b6001600160a01b038316611c3f5760405162461bcd60e51b8152600401610878906121a9565b6001600160a01b038216611c655760405162461bcd60e51b8152600401610878906121ee565b6001600160a01b03831660009081526020819052604090205481811015611c9e5760405162461bcd60e51b815260040161087890612247565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611cd5908490612142565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611d2191815260200190565b60405180910390a36110c1565b60606000611d3d836002612374565b611d48906002612142565b67ffffffffffffffff811115611d6057611d606122a0565b6040519080825280601f01601f191660200182016040528015611d8a576020820181803683370190505b509050600360fc1b81600081518110611da557611da5612231565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611dd457611dd4612231565b60200101906001600160f81b031916908160001a9053506000611df8846002612374565b611e03906001612142565b90505b6001811115611e7b576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611e3757611e37612231565b1a60f81b828281518110611e4d57611e4d612231565b60200101906001600160f81b031916908160001a90535060049490941c93611e7481612422565b9050611e06565b5083156118045760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610878565b60405180606001604052806003906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b600060208284031215611f1857600080fd5b81356001600160e01b03198116811461180457600080fd5b60005b83811015611f4b578181015183820152602001611f33565b50506000910152565b6020815260008251806020840152611f73816040850160208701611f30565b601f01601f19169190910160400192915050565b6001600160a01b038116811461158357600080fd5b60008060408385031215611faf57600080fd5b8235611fba81611f87565b946020939093013593505050565b600060208284031215611fda57600080fd5b813561180481611f87565b600080600060608486031215611ffa57600080fd5b833561200581611f87565b9250602084013561201581611f87565b929592945050506040919091013590565b60006020828403121561203857600080fd5b5035919050565b6000806040838503121561205257600080fd5b82359150602083013561206481611f87565b809150509250929050565b6000806040838503121561208257600080fd5b823561208d81611f87565b91506020830135801515811461206457600080fd5b600080604083850312156120b557600080fd5b82356120c081611f87565b9150602083013561206481611f87565b600080604083850312156120e357600080fd5b50508035926020909101359150565b600181811c9082168061210657607f821691505b60208210810361212657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b808201808211156106de576106de61212c565b60208082526034908201527f4552433230203a3a207472616e736665724f776e657273686970203a206e65776040820152734f776e657220686173206f776e657220726f6c6560601b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60208082526026908201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b818103818111156106de576106de61212c565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156122c857600080fd5b815161180481611f87565b600081518084526020808501945080840160005b8381101561230c5781516001600160a01b0316875295820195908201906001016122e7565b509495945050505050565b85815284602082015260a06040820152600061233660a08301866122d3565b6001600160a01b0394909416606083015250608001529392505050565b82815260406020820152600061236c60408301846122d3565b949350505050565b80820281158282048414176106de576106de61212c565b6000826123a857634e487b7160e01b600052601260045260246000fd5b500490565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516123e5816017850160208801611f30565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612416816028840160208801611f30565b01602801949350505050565b6000816124315761243161212c565b50600019019056fe270221b18814a6eefbdcb82121f19495c058a3c7c42f11c2ab89d1da64b4579e878383d5df9fcd73beacab8a6acfdba5b44aa5aca352bba83bed3315b18a10a3d2654377a744dfef2628bf9cf3d857efd4e3961f50697d305abe9257a6effd5da2646970667358221220e247e5839fe1aa5e299f73874834cecfc4963a4f1133086acbccf596ffd2baed64736f6c63430008120033

Deployed Bytecode Sourcemap

32322:9535:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10761:204;;;;;;;;;;-1:-1:-1;10761:204:0;;;;;:::i;:::-;;:::i;:::-;;;470:14:1;;463:22;445:41;;433:2;418:18;10761:204:0;;;;;;;;19944:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;22295:201::-;;;;;;;;;;-1:-1:-1;22295:201:0;;;;;:::i;:::-;;:::i;32508:41::-;;;;;;;;;;-1:-1:-1;32508:41:0;;;;-1:-1:-1;;;;;32508:41:0;;;;;;-1:-1:-1;;;;;1799:32:1;;;1781:51;;1769:2;1754:18;32508:41:0;1609:229:1;32457:42:0;;;;;;;;;;-1:-1:-1;32457:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21064:108;;;;;;;;;;-1:-1:-1;21152:12:0;;21064:108;;;2241:25:1;;;2229:2;2214:18;21064:108:0;2095:177:1;33038:36:0;;;;;;;;;;-1:-1:-1;33038:36:0;;;;;;;;23076:295;;;;;;;;;;-1:-1:-1;23076:295:0;;;;;:::i;:::-;;:::i;12597:131::-;;;;;;;;;;-1:-1:-1;12597:131:0;;;;;:::i;:::-;12671:7;12698:12;;;:6;:12;;;;;:22;;;;12597:131;20906:93;;;;;;;;;;-1:-1:-1;20906:93:0;;20989:2;3247:36:1;;3235:2;3220:18;20906:93:0;3105:184:1;36225:136:0;;;;;;;;;;-1:-1:-1;36225:136:0;;;;;:::i;:::-;;:::i;:::-;;34685:207;;;;;;;;;;-1:-1:-1;34685:207:0;;;;;:::i;:::-;;:::i;13235:218::-;;;;;;;;;;-1:-1:-1;13235:218:0;;;;;:::i;:::-;;:::i;23780:238::-;;;;;;;;;;-1:-1:-1;23780:238:0;;;;;:::i;:::-;;:::i;35683:149::-;;;;;;;;;;-1:-1:-1;35683:149:0;;;;;:::i;:::-;;:::i;33994:311::-;;;;;;;;;;-1:-1:-1;33994:311:0;;;;;:::i;:::-;;:::i;33083:28::-;;;;;;;;;;-1:-1:-1;33083:28:0;;;;;;;-1:-1:-1;;;;;33083:28:0;;;32905:26;;;;;;;;;;;;;;;;21235:127;;;;;;;;;;-1:-1:-1;21235:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;21336:18:0;21309:7;21336:18;;;;;;;;;;;;21235:127;35841:309;;;;;;;;;;;;;:::i;33004:26::-;;;;;;;;;;;;;;;;11057:147;;;;;;;;;;-1:-1:-1;11057:147:0;;;;;:::i;:::-;;:::i;20163:104::-;;;;;;;;;;;;;:::i;24521:436::-;;;;;;;;;;-1:-1:-1;24521:436:0;;;;;:::i;:::-;;:::i;21568:193::-;;;;;;;;;;-1:-1:-1;21568:193:0;;;;;:::i;:::-;;:::i;32801:22::-;;;;;;;;;;-1:-1:-1;32801:22:0;;;;-1:-1:-1;;;;;32801:22:0;;;34956:212;;;;;;;;;;-1:-1:-1;34956:212:0;;;;;:::i;:::-;;:::i;32938:21::-;;;;;;;;;;;;;;;;36440:186;;;;;;;;;;;;;:::i;34316:223::-;;;;;;;;;;-1:-1:-1;34316:223:0;;;;;:::i;:::-;;:::i;34547:125::-;;;;;;;;;;-1:-1:-1;34547:125:0;;;;;:::i;:::-;;:::i;21824:151::-;;;;;;;;;;-1:-1:-1;21824:151:0;;;;;:::i;:::-;;:::i;32870:27::-;;;;;;;;;;;;;;;;35259:416;;;;;;;;;;-1:-1:-1;35259:416:0;;;;;:::i;:::-;;:::i;32966:30::-;;;;;;;;;;;;;;;;36635:153;;;;;;;;;;-1:-1:-1;36635:153:0;;;;;:::i;:::-;;:::i;10761:204::-;10846:4;-1:-1:-1;;;;;;10870:47:0;;-1:-1:-1;;;10870:47:0;;:87;;-1:-1:-1;;;;;;;;;;8277:40:0;;;10921:36;10863:94;10761:204;-1:-1:-1;;10761:204:0:o;19944:100::-;19998:13;20031:5;20024:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19944:100;:::o;22295:201::-;22378:4;7309:10;22434:32;7309:10;22450:7;22459:6;22434:8;:32::i;:::-;-1:-1:-1;22484:4:0;;22295:201;-1:-1:-1;;;22295:201:0:o;23076:295::-;23207:4;7309:10;23265:38;23281:4;7309:10;23296:6;23265:15;:38::i;:::-;23314:27;23324:4;23330:2;23334:6;23314:9;:27::i;:::-;-1:-1:-1;23359:4:0;;23076:295;-1:-1:-1;;;;23076:295:0:o;36225:136::-;-1:-1:-1;;;;;;;;;;;10653:16:0;10664:4;10653:10;:16::i;:::-;-1:-1:-1;36308:15:0::1;:45:::0;;-1:-1:-1;;;;;;36308:45:0::1;-1:-1:-1::0;;;;;36308:45:0;;;::::1;::::0;;;::::1;::::0;;36225:136::o;34685:207::-;-1:-1:-1;;;;;;;;;;;10653:16:0;10664:4;10653:10;:16::i;:::-;34775:24:::1;-1:-1:-1::0;;;;;;;;;;;34794:4:0::1;34775:7;:24::i;:::-;34767:79;;;::::0;-1:-1:-1;;;34767:79:0;;5476:2:1;34767:79:0::1;::::0;::::1;5458:21:1::0;5515:2;5495:18;;;5488:30;5554:34;5534:18;;;5527:62;-1:-1:-1;;;5605:18:1;;;5598:40;5655:19;;34767:79:0::1;;;;;;;;;34857:27;-1:-1:-1::0;;;;;;;;;;;34879:4:0::1;34857:11;:27::i;:::-;34685:207:::0;;:::o;13235:218::-;-1:-1:-1;;;;;13331:23:0;;7309:10;13331:23;13323:83;;;;-1:-1:-1;;;13323:83:0;;5887:2:1;13323:83:0;;;5869:21:1;5926:2;5906:18;;;5899:30;5965:34;5945:18;;;5938:62;-1:-1:-1;;;6016:18:1;;;6009:45;6071:19;;13323:83:0;5685:411:1;13323:83:0;13419:26;13431:4;13437:7;13419:11;:26::i;23780:238::-;23868:4;7309:10;23924:64;7309:10;23940:7;23977:10;23949:25;7309:10;23940:7;23949:9;:25::i;:::-;:38;;;;:::i;:::-;23924:8;:64::i;35683:149::-;-1:-1:-1;;;;;;;;;;;10653:16:0;10664:4;10653:10;:16::i;:::-;-1:-1:-1;;;;;;35786:20:0;;;::::1;;::::0;;;:10:::1;:20;::::0;;;;:38;;-1:-1:-1;;35786:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35683:149::o;33994:311::-;-1:-1:-1;;;;;;;;;;;10653:16:0;10664:4;10653:10;:16::i;:::-;-1:-1:-1;;;;;41167:19:0;;;34077:86:::1;;;::::0;-1:-1:-1;;;34077:86:0;;6565:2:1;34077:86:0::1;::::0;::::1;6547:21:1::0;6604:2;6584:18;;;6577:30;6643:34;6623:18;;;6616:62;6714:27;6694:18;;;6687:55;6759:19;;34077:86:0::1;6363:421:1::0;34077:86:0::1;34183:24;-1:-1:-1::0;;;;;;;;;;;34202:4:0::1;34183:7;:24::i;:::-;34182:25;34174:86;;;::::0;-1:-1:-1;;;34174:86:0;;6991:2:1;34174:86:0::1;::::0;::::1;6973:21:1::0;7030:2;7010:18;;;7003:30;7069:34;7049:18;;;7042:62;-1:-1:-1;;;7120:18:1;;;7113:46;7176:19;;34174:86:0::1;6789:412:1::0;34174:86:0::1;34271:26;-1:-1:-1::0;;;;;;;;;;;34292:4:0::1;34271:10;:26::i;35841:309::-:0;-1:-1:-1;;;;;;;;;;;10653:16:0;10664:4;10653:10;:16::i;:::-;35923:34:::1;-1:-1:-1::0;;;;;;;;;;;35954:1:0::1;35923:7;:34::i;:::-;35922:35;35914:100;;;;-1:-1:-1::0;;;35914:100:0::1;;;;;;;:::i;:::-;36025:39;-1:-1:-1::0;;;;;;;;;;;7309:10:0;36025:11:::1;:39::i;:::-;36075:36;-1:-1:-1::0;;;;;;;;;;;36108:1:0::1;36075:10;:36::i;:::-;-1:-1:-1::0;36122:7:0::1;:20:::0;;-1:-1:-1;;;;;;36122:20:0::1;::::0;;35841:309::o;11057:147::-;11143:4;11167:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;11167:29:0;;;;;;;;;;;;;;;11057:147::o;20163:104::-;20219:13;20252:7;20245:14;;;;;:::i;24521:436::-;24614:4;7309:10;24614:4;24697:25;7309:10;24714:7;24697:9;:25::i;:::-;24670:52;;24761:15;24741:16;:35;;24733:85;;;;-1:-1:-1;;;24733:85:0;;7829:2:1;24733:85:0;;;7811:21:1;7868:2;7848:18;;;7841:30;7907:34;7887:18;;;7880:62;-1:-1:-1;;;7958:18:1;;;7951:35;8003:19;;24733:85:0;7627:401:1;24733:85:0;24854:60;24863:5;24870:7;24898:15;24879:16;:34;24854:8;:60::i;21568:193::-;21647:4;7309:10;21703:28;7309:10;21720:2;21724:6;21703:9;:28::i;34956:212::-;-1:-1:-1;;;;;;;;;;;10653:16:0;10664:4;10653:10;:16::i;:::-;35043:31:::1;-1:-1:-1::0;;;;;;;;;;;35066:7:0::1;35043;:31::i;:::-;35035:81;;;::::0;-1:-1:-1;;;35035:81:0;;8235:2:1;35035:81:0::1;::::0;::::1;8217:21:1::0;8274:2;8254:18;;;8247:30;8313:34;8293:18;;;8286:62;-1:-1:-1;;;8364:18:1;;;8357:35;8409:19;;35035:81:0::1;8033:401:1::0;35035:81:0::1;35126:34;-1:-1:-1::0;;;;;;;;;;;35152:7:0::1;35126:11;:34::i;36440:186::-:0;-1:-1:-1;;;;;;;;;;;10653:16:0;10664:4;10653:10;:16::i;:::-;36538:4:::1;36506:11;21336:18:::0;;;;;;;;;;;36563:10;36555:19:::1;;;::::0;::::1;;36585:33;36611:6;36585:25;:33::i;34316:223::-:0;-1:-1:-1;;;;;;;;;;;10653:16:0;10664:4;10653:10;:16::i;:::-;34407:31:::1;-1:-1:-1::0;;;;;;;;;;;34430:7:0::1;34407;:31::i;:::-;34406:32;34398:89;;;::::0;-1:-1:-1;;;34398:89:0;;8641:2:1;34398:89:0::1;::::0;::::1;8623:21:1::0;8680:2;8660:18;;;8653:30;8719:34;8699:18;;;8692:62;-1:-1:-1;;;8770:18:1;;;8763:42;8822:19;;34398:89:0::1;8439:408:1::0;34398:89:0::1;34498:33;-1:-1:-1::0;;;;;;;;;;;34523:7:0::1;34498:10;:33::i;34547:125::-:0;-1:-1:-1;;;;;;;;;;;10653:16:0;10664:4;10653:10;:16::i;:::-;-1:-1:-1;;;;;;34645:11:0;;;::::1;;::::0;;;:4:::1;:11;::::0;;;;:19;;-1:-1:-1;;34645:19:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34547:125::o;21824:151::-;-1:-1:-1;;;;;21940:18:0;;;21913:7;21940:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;21824:151::o;35259:416::-;-1:-1:-1;;;;;;;;;;;10653:16:0;10664:4;10653:10;:16::i;:::-;-1:-1:-1;;;;;35356:22:0;::::1;35348:86;;;::::0;-1:-1:-1;;;35348:86:0;;9054:2:1;35348:86:0::1;::::0;::::1;9036:21:1::0;9093:2;9073:18;;;9066:30;9132:34;9112:18;;;9105:62;-1:-1:-1;;;9183:18:1;;;9176:49;9242:19;;35348:86:0::1;8852:415:1::0;35348:86:0::1;35454:32;-1:-1:-1::0;;;;;;;;;;;35477:8:0::1;35454:7;:32::i;:::-;35453:33;35445:98;;;;-1:-1:-1::0;;;35445:98:0::1;;;;;;;:::i;:::-;35554:39;-1:-1:-1::0;;;;;;;;;;;7309:10:0;36025:11:::1;:39::i;35554:::-;35604:34;-1:-1:-1::0;;;;;;;;;;;35629:8:0::1;35604:10;:34::i;:::-;-1:-1:-1::0;35649:7:0::1;:18:::0;;-1:-1:-1;;;;;;35649:18:0::1;-1:-1:-1::0;;;;;35649:18:0;;;::::1;::::0;;;::::1;::::0;;35259:416::o;36635:153::-;-1:-1:-1;;;;;;;;;;;10653:16:0;10664:4;10653:10;:16::i;:::-;-1:-1:-1;36737:9:0::1;:19:::0;;;;36766:5:::1;:14:::0;36635:153::o;28155:380::-;-1:-1:-1;;;;;28291:19:0;;28283:68;;;;-1:-1:-1;;;28283:68:0;;9474:2:1;28283:68:0;;;9456:21:1;9513:2;9493:18;;;9486:30;9552:34;9532:18;;;9525:62;-1:-1:-1;;;9603:18:1;;;9596:34;9647:19;;28283:68:0;9272:400:1;28283:68:0;-1:-1:-1;;;;;28370:21:0;;28362:68;;;;-1:-1:-1;;;28362:68:0;;9879:2:1;28362:68:0;;;9861:21:1;9918:2;9898:18;;;9891:30;9957:34;9937:18;;;9930:62;-1:-1:-1;;;10008:18:1;;;10001:32;10050:19;;28362:68:0;9677:398:1;28362:68:0;-1:-1:-1;;;;;28443:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;28495:32;;2241:25:1;;;28495:32:0;;2214:18:1;28495:32:0;;;;;;;28155:380;;;:::o;28826:453::-;28961:24;28988:25;28998:5;29005:7;28988:9;:25::i;:::-;28961:52;;-1:-1:-1;;29028:16:0;:37;29024:248;;29110:6;29090:16;:26;;29082:68;;;;-1:-1:-1;;;29082:68:0;;10282:2:1;29082:68:0;;;10264:21:1;10321:2;10301:18;;;10294:30;10360:31;10340:18;;;10333:59;10409:18;;29082:68:0;10080:353:1;29082:68:0;29194:51;29203:5;29210:7;29238:6;29219:16;:25;29194:8;:51::i;:::-;28950:329;28826:453;;;:::o;36859:2419::-;-1:-1:-1;;;;;36991:18:0;;36983:68;;;;-1:-1:-1;;;36983:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37070:16:0;;37062:64;;;;-1:-1:-1;;;37062:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37143:8:0;;;;;;:4;:8;;;;;;;;37139:185;;37184:6;37176:5;;:14;;37168:51;;;;-1:-1:-1;;;37168:51:0;;11450:2:1;37168:51:0;;;11432:21:1;11489:2;11469:18;;;11462:30;11528:27;11508:18;;;11501:55;11573:18;;37168:51:0;11248:349:1;37168:51:0;37256:25;37274:6;37256:13;37266:2;-1:-1:-1;;;;;21336:18:0;21309:7;21336:18;;;;;;;;;;;;21235:127;37256:13;:17;;:25::i;:::-;37242:9;;:39;;37234:78;;;;-1:-1:-1;;;37234:78:0;;11804:2:1;37234:78:0;;;11786:21:1;11843:2;11823:18;;;11816:30;11882:28;11862:18;;;11855:56;11928:18;;37234:78:0;11602:350:1;37234:78:0;37395:26;;:::i;:::-;-1:-1:-1;;;;;37446:15:0;;:9;:15;;;;;;;;;;;37432:29;;37474:21;;:::i;:::-;37521:28;-1:-1:-1;;;;;;;;;;;37544:4:0;37521:7;:28::i;:::-;37520:29;37519:64;;;;;37556:26;-1:-1:-1;;;;;;;;;;;37579:2:0;37556:7;:26::i;:::-;37555:27;37519:64;:107;;;;-1:-1:-1;37589:36:0;-1:-1:-1;;;;;;;;;;;7309:10:0;11057:147;:::i;37589:36::-;37588:37;37519:107;37507:119;;;;37650:28;-1:-1:-1;;;;;;;;;;;37673:4:0;37650:7;:28::i;:::-;37649:62;;;;37684:26;-1:-1:-1;;;;;;;;;;;37707:2:0;37684:7;:26::i;:::-;37637:74;;:9;;;:74;37740:11;;:21;-1:-1:-1;37740:21:0;37732:72;;;;-1:-1:-1;;;37732:72:0;;;;;;;:::i;:::-;37828:22;-1:-1:-1;;;;;;;;;;;37847:2:0;37828:7;:22::i;:::-;:43;;;;-1:-1:-1;37855:16:0;;;;37854:17;37828:43;37825:421;;;37929:4;37888:20;21336:18;;;;;;;;;;;37953:19;;37950:285;;38026:13;;;;;-1:-1:-1;;;;;38026:13:0;21309:7;21336:18;;;;;;;;;;;38016:40;;38052:3;;38016:31;;38045:1;;38016:24;:28;;:31::i;:::-;:35;;:40::i;:::-;37998:15;:58;37995:164;;;38109:13;;;;;-1:-1:-1;;;;;38109:13:0;21309:7;21336:18;;;;;;;;;;;38099:40;;38135:3;;38099:31;;38128:1;;38099:24;21235:127;38099:40;38081:58;;37995:164;38177:42;38203:15;38177:25;:42::i;:::-;37873:373;37825:421;38261:9;;:23;;;;-1:-1:-1;38275:9:0;;;;38274:10;38261:23;:44;;;;-1:-1:-1;38289:16:0;;;;38288:17;38261:44;38258:521;;;38340:6;38366:22;-1:-1:-1;;;;;;;;;;;38385:2:0;38366:7;:22::i;:::-;38361:254;;;38447:26;38466:6;38447:18;:26::i;:::-;38432:11;;;38423:50;;-1:-1:-1;38361:254:0;;;38497:32;-1:-1:-1;;;;;;;;;;;7309:10:0;11057:147;:::i;38497:32::-;38494:121;;;38574:25;38592:6;38574:17;:25::i;:::-;38559:11;;;38550:49;;-1:-1:-1;38494:121:0;38646:23;38661:7;38646:14;:23::i;:::-;38632:11;;;:37;;;38689:21;;38686:82;;38741:11;;;;38731:21;;;;:::i;:::-;;;38686:82;38307:472;38258:521;38834:11;;-1:-1:-1;;;;;38816:15:0;;;38843:1;38816:15;;;38834:11;38816:15;;;;;;;38834:20;;;;38816:38;;;38876:13;;;;;;;;:23;;38848:6;;38843:1;38876:23;;38848:6;;38876:23;:::i;:::-;;;;;;;;38932:2;-1:-1:-1;;;;;38917:26:0;38926:4;-1:-1:-1;;;;;38917:26:0;;38936:6;38917:26;;;;2241:25:1;;2229:2;2214:18;;2095:177;38917:26:0;;;;;;;;38969:11;;;;:15;;;;38968:30;;-1:-1:-1;38989:9:0;;38968:30;:44;;;;-1:-1:-1;39003:9:0;;;;39002:10;38968:44;:65;;;;-1:-1:-1;39017:16:0;;;;39016:17;38968:65;38965:123;;;39050:26;39058:4;39064:8;39073:1;39064:11;;;;39050:7;:26::i;:::-;39104:11;;;;:15;;;;39103:30;;-1:-1:-1;39124:9:0;;39103:30;:44;;;;-1:-1:-1;39138:9:0;;;;39137:10;39103:44;:65;;;;-1:-1:-1;39152:16:0;;;;39151:17;39103:65;39100:121;;;39185:24;39191:4;39197:8;39206:1;39197:11;;;;39185:5;:24::i;:::-;36972:2306;;36859:2419;;;:::o;11508:105::-;11575:30;11586:4;7309:10;11575;:30::i;:::-;11508:105;:::o;15106:239::-;15190:22;15198:4;15204:7;15190;:22::i;:::-;15186:152;;;15261:5;15229:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;15229:29:0;;;;;;;;;;:37;;-1:-1:-1;;15229:37:0;;;15286:40;7309:10;;15229:12;;15286:40;;15261:5;15286:40;15106:239;;:::o;14112:112::-;14191:25;14202:4;14208:7;14191:10;:25::i;40489:589::-;33904:16;:23;;-1:-1:-1;;33904:23:0;33923:4;33904:23;;;40600:16:::1;::::0;;40614:1:::1;40600:16:::0;;;;;::::1;::::0;;-1:-1:-1;;40600:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;40600:16:0::1;40576:40;;40645:4;40627;40632:1;40627:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;40627:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;40671:15:::1;::::0;:22:::1;::::0;;-1:-1:-1;;;40671:22:0;;;;:15;;;::::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;40627:7;;40671:22;;;;;:15;:22:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40661:4;40666:1;40661:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;40661:32:0;;::::1;:7;::::0;;::::1;::::0;;;;;:32;40738:15:::1;::::0;40706:62:::1;::::0;40723:4:::1;::::0;40738:15:::1;40756:11:::0;40706:8:::1;:62::i;:::-;40781:15;::::0;40923:18:::1;::::0;40781:199:::1;::::0;-1:-1:-1;;;40781:199:0;;-1:-1:-1;;;;;40781:15:0;;::::1;::::0;:66:::1;::::0;:199:::1;::::0;40862:11;;40781:15:::1;::::0;40904:4;;40923:18;::::1;::::0;40954:15:::1;::::0;40781:199:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;40998:72;41029:11;41055:4;40998:72;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;33950:16:0;:24;;-1:-1:-1;;33950:24:0;;;40489:589::o;30765:181::-;30823:7;;30855:5;30859:1;30855;:5;:::i;:::-;30843:17;;30884:1;30879;:6;;30871:46;;;;-1:-1:-1;;;30871:46:0;;14609:2:1;30871:46:0;;;14591:21:1;14648:2;14628:18;;;14621:30;14687:29;14667:18;;;14660:57;14734:18;;30871:46:0;14407:351:1;30871:46:0;30937:1;30765:181;-1:-1:-1;;;30765:181:0:o;31298:250::-;31356:7;31380:1;31385;31380:6;31376:47;;-1:-1:-1;31410:1:0;31403:8;;31376:47;31435:9;31447:5;31451:1;31447;:5;:::i;:::-;31435:17;-1:-1:-1;31480:1:0;31471:5;31475:1;31435:17;31471:5;:::i;:::-;:10;31463:56;;;;-1:-1:-1;;;31463:56:0;;15360:2:1;31463:56:0;;;15342:21:1;15399:2;15379:18;;;15372:30;15438:34;15418:18;;;15411:62;-1:-1:-1;;;15489:18:1;;;15482:31;15530:19;;31463:56:0;15158:397:1;31558:132:0;31616:7;31643:39;31647:1;31650;31643:39;;;;;;;;;;;;;;;;;:3;:39::i;41209:247::-;41272:20;41294:16;32858:5;41366:9;;32858:5;41352:23;;;;:::i;:::-;41342:34;;:6;:34;:::i;:::-;:48;;;;:::i;:::-;41323:67;;32858:5;41425:9;;41416:6;:18;;;;:::i;:::-;:32;;;;:::i;:::-;41401:47;;41209:247;;;:::o;41467:242::-;41529:20;41551:15;32858:5;41622:8;;32858:5;41608:22;;;;:::i;:::-;41598:33;;:6;:33;:::i;:::-;:47;;;;:::i;:::-;41579:66;;32858:5;41679:8;;41670:6;:17;;;;:::i;41719:129::-;41778:11;32858:5;41821;;41812:6;:14;;;;:::i;:::-;:28;;;;:::i;40315:164::-;40386:11;;40383:89;;40414:46;40430:5;40445:4;40452:7;40414:15;:46::i;39291:601::-;-1:-1:-1;;;;;39376:21:0;;39368:67;;;;-1:-1:-1;;;39368:67:0;;15762:2:1;39368:67:0;;;15744:21:1;15801:2;15781:18;;;15774:30;15840:34;15820:18;;;15813:62;-1:-1:-1;;;15891:18:1;;;15884:31;15932:19;;39368:67:0;15560:397:1;39368:67:0;-1:-1:-1;;;;;39535:18:0;;39510:22;39535:18;;;;;;;;;;;39572:24;;;;39564:71;;;;-1:-1:-1;;;39564:71:0;;16164:2:1;39564:71:0;;;16146:21:1;16203:2;16183:18;;;16176:30;16242:34;16222:18;;;16215:62;-1:-1:-1;;;16293:18:1;;;16286:32;16335:19;;39564:71:0;15962:398:1;39564:71:0;-1:-1:-1;;;;;39671:18:0;;:9;:18;;;;;;;;;;39692:23;;;39671:44;;39737:21;;;;:31;;39709:6;;39671:9;39737:31;;39709:6;;39737:31;:::i;:::-;;;;-1:-1:-1;;39786:37:0;;2241:25:1;;;39812:1:0;;-1:-1:-1;;;;;39786:37:0;;;;;2229:2:1;2214:18;39786:37:0;;;;;;;29879:125;;;:::o;11903:505::-;11992:22;12000:4;12006:7;11992;:22::i;:::-;11987:414;;12180:41;12208:7;-1:-1:-1;;;;;12180:41:0;12218:2;12180:19;:41::i;:::-;12294:38;12322:4;12329:2;12294:19;:38::i;:::-;12085:270;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;12085:270:0;;;;;;;;;;-1:-1:-1;;;12031:358:0;;;;;;;:::i;14736:238::-;14820:22;14828:4;14834:7;14820;:22::i;:::-;14815:152;;14859:12;;;;:6;:12;;;;;;;;-1:-1:-1;;;;;14859:29:0;;;;;;;;;:36;;-1:-1:-1;;14859:36:0;14891:4;14859:36;;;14942:12;7309:10;;7229:98;14942:12;-1:-1:-1;;;;;14915:40:0;14933:7;-1:-1:-1;;;;;14915:40:0;14927:4;14915:40;;;;;;;;;;14736:238;;:::o;31698:278::-;31784:7;31819:12;31812:5;31804:28;;;;-1:-1:-1;;;31804:28:0;;;;;;;;:::i;:::-;-1:-1:-1;31843:9:0;31855:5;31859:1;31855;:5;:::i;:::-;31843:17;31698:278;-1:-1:-1;;;;;31698:278:0:o;25436:671::-;-1:-1:-1;;;;;25567:18:0;;25559:68;;;;-1:-1:-1;;;25559:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25646:16:0;;25638:64;;;;-1:-1:-1;;;25638:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25788:15:0;;25766:19;25788:15;;;;;;;;;;;25822:21;;;;25814:72;;;;-1:-1:-1;;;25814:72:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25922:15:0;;;:9;:15;;;;;;;;;;;25940:20;;;25922:38;;25982:13;;;;;;;;:23;;25954:6;;25922:9;25982:23;;25954:6;;25982:23;:::i;:::-;;;;;;;;26038:2;-1:-1:-1;;;;;26023:26:0;26032:4;-1:-1:-1;;;;;26023:26:0;;26042:6;26023:26;;;;2241:25:1;;2229:2;2214:18;;2095:177;26023:26:0;;;;;;;;26062:37;29879:125;16906:451;16981:13;17007:19;17039:10;17043:6;17039:1;:10;:::i;:::-;:14;;17052:1;17039:14;:::i;:::-;17029:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17029:25:0;;17007:47;;-1:-1:-1;;;17065:6:0;17072:1;17065:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;17065:15:0;;;;;;;;;-1:-1:-1;;;17091:6:0;17098:1;17091:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;17091:15:0;;;;;;;;-1:-1:-1;17122:9:0;17134:10;17138:6;17134:1;:10;:::i;:::-;:14;;17147:1;17134:14;:::i;:::-;17122:26;;17117:135;17154:1;17150;:5;17117:135;;;-1:-1:-1;;;17202:5:0;17210:3;17202:11;17189:25;;;;;;;:::i;:::-;;;;17177:6;17184:1;17177:9;;;;;;;;:::i;:::-;;;;:37;-1:-1:-1;;;;;17177:37:0;;;;;;;;-1:-1:-1;17239:1:0;17229:11;;;;;17157:3;;;:::i;:::-;;;17117:135;;;-1:-1:-1;17270:10:0;;17262:55;;;;-1:-1:-1;;;17262:55:0;;17525:2:1;17262:55:0;;;17507:21:1;;;17544:18;;;17537:30;17603:34;17583:18;;;17576:62;17655:18;;17262:55:0;17323:356:1;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:286:1:-;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;167:23;;-1:-1:-1;;;;;;219:32:1;;209:43;;199:71;;266:1;263;256:12;497:250;582:1;592:113;606:6;603:1;600:13;592:113;;;682:11;;;676:18;663:11;;;656:39;628:2;621:10;592:113;;;-1:-1:-1;;739:1:1;721:16;;714:27;497:250::o;752:396::-;901:2;890:9;883:21;864:4;933:6;927:13;976:6;971:2;960:9;956:18;949:34;992:79;1064:6;1059:2;1048:9;1044:18;1039:2;1031:6;1027:15;992:79;:::i;:::-;1132:2;1111:15;-1:-1:-1;;1107:29:1;1092:45;;;;1139:2;1088:54;;752:396;-1:-1:-1;;752:396:1:o;1153:131::-;-1:-1:-1;;;;;1228:31:1;;1218:42;;1208:70;;1274:1;1271;1264:12;1289:315;1357:6;1365;1418:2;1406:9;1397:7;1393:23;1389:32;1386:52;;;1434:1;1431;1424:12;1386:52;1473:9;1460:23;1492:31;1517:5;1492:31;:::i;:::-;1542:5;1594:2;1579:18;;;;1566:32;;-1:-1:-1;;;1289:315:1:o;1843:247::-;1902:6;1955:2;1943:9;1934:7;1930:23;1926:32;1923:52;;;1971:1;1968;1961:12;1923:52;2010:9;1997:23;2029:31;2054:5;2029:31;:::i;2277:456::-;2354:6;2362;2370;2423:2;2411:9;2402:7;2398:23;2394:32;2391:52;;;2439:1;2436;2429:12;2391:52;2478:9;2465:23;2497:31;2522:5;2497:31;:::i;:::-;2547:5;-1:-1:-1;2604:2:1;2589:18;;2576:32;2617:33;2576:32;2617:33;:::i;:::-;2277:456;;2669:7;;-1:-1:-1;;;2723:2:1;2708:18;;;;2695:32;;2277:456::o;2738:180::-;2797:6;2850:2;2838:9;2829:7;2825:23;2821:32;2818:52;;;2866:1;2863;2856:12;2818:52;-1:-1:-1;2889:23:1;;2738:180;-1:-1:-1;2738:180:1:o;3294:315::-;3362:6;3370;3423:2;3411:9;3402:7;3398:23;3394:32;3391:52;;;3439:1;3436;3429:12;3391:52;3475:9;3462:23;3452:33;;3535:2;3524:9;3520:18;3507:32;3548:31;3573:5;3548:31;:::i;:::-;3598:5;3588:15;;;3294:315;;;;;:::o;3614:416::-;3679:6;3687;3740:2;3728:9;3719:7;3715:23;3711:32;3708:52;;;3756:1;3753;3746:12;3708:52;3795:9;3782:23;3814:31;3839:5;3814:31;:::i;:::-;3864:5;-1:-1:-1;3921:2:1;3906:18;;3893:32;3963:15;;3956:23;3944:36;;3934:64;;3994:1;3991;3984:12;4243:388;4311:6;4319;4372:2;4360:9;4351:7;4347:23;4343:32;4340:52;;;4388:1;4385;4378:12;4340:52;4427:9;4414:23;4446:31;4471:5;4446:31;:::i;:::-;4496:5;-1:-1:-1;4553:2:1;4538:18;;4525:32;4566:33;4525:32;4566:33;:::i;4636:248::-;4704:6;4712;4765:2;4753:9;4744:7;4740:23;4736:32;4733:52;;;4781:1;4778;4771:12;4733:52;-1:-1:-1;;4804:23:1;;;4874:2;4859:18;;;4846:32;;-1:-1:-1;4636:248:1:o;4889:380::-;4968:1;4964:12;;;;5011;;;5032:61;;5086:4;5078:6;5074:17;5064:27;;5032:61;5139:2;5131:6;5128:14;5108:18;5105:38;5102:161;;5185:10;5180:3;5176:20;5173:1;5166:31;5220:4;5217:1;5210:15;5248:4;5245:1;5238:15;5102:161;;4889:380;;;:::o;6101:127::-;6162:10;6157:3;6153:20;6150:1;6143:31;6193:4;6190:1;6183:15;6217:4;6214:1;6207:15;6233:125;6298:9;;;6319:10;;;6316:36;;;6332:18;;:::i;7206:416::-;7408:2;7390:21;;;7447:2;7427:18;;;7420:30;7486:34;7481:2;7466:18;;7459:62;-1:-1:-1;;;7552:2:1;7537:18;;7530:50;7612:3;7597:19;;7206:416::o;10438:401::-;10640:2;10622:21;;;10679:2;10659:18;;;10652:30;10718:34;10713:2;10698:18;;10691:62;-1:-1:-1;;;10784:2:1;10769:18;;10762:35;10829:3;10814:19;;10438:401::o;10844:399::-;11046:2;11028:21;;;11085:2;11065:18;;;11058:30;11124:34;11119:2;11104:18;;11097:62;-1:-1:-1;;;11190:2:1;11175:18;;11168:33;11233:3;11218:19;;10844:399::o;11957:127::-;12018:10;12013:3;12009:20;12006:1;11999:31;12049:4;12046:1;12039:15;12073:4;12070:1;12063:15;12089:402;12291:2;12273:21;;;12330:2;12310:18;;;12303:30;12369:34;12364:2;12349:18;;12342:62;-1:-1:-1;;;12435:2:1;12420:18;;12413:36;12481:3;12466:19;;12089:402::o;12496:128::-;12563:9;;;12584:11;;;12581:37;;;12598:18;;:::i;12629:127::-;12690:10;12685:3;12681:20;12678:1;12671:31;12721:4;12718:1;12711:15;12745:4;12742:1;12735:15;12761:251;12831:6;12884:2;12872:9;12863:7;12859:23;12855:32;12852:52;;;12900:1;12897;12890:12;12852:52;12932:9;12926:16;12951:31;12976:5;12951:31;:::i;13017:461::-;13070:3;13108:5;13102:12;13135:6;13130:3;13123:19;13161:4;13190:2;13185:3;13181:12;13174:19;;13227:2;13220:5;13216:14;13248:1;13258:195;13272:6;13269:1;13266:13;13258:195;;;13337:13;;-1:-1:-1;;;;;13333:39:1;13321:52;;13393:12;;;;13428:15;;;;13369:1;13287:9;13258:195;;;-1:-1:-1;13469:3:1;;13017:461;-1:-1:-1;;;;;13017:461:1:o;13483:582::-;13782:6;13771:9;13764:25;13825:6;13820:2;13809:9;13805:18;13798:34;13868:3;13863:2;13852:9;13848:18;13841:31;13745:4;13889:57;13941:3;13930:9;13926:19;13918:6;13889:57;:::i;:::-;-1:-1:-1;;;;;13982:32:1;;;;13977:2;13962:18;;13955:60;-1:-1:-1;14046:3:1;14031:19;14024:35;13881:65;13483:582;-1:-1:-1;;;13483:582:1:o;14070:332::-;14277:6;14266:9;14259:25;14320:2;14315;14304:9;14300:18;14293:30;14240:4;14340:56;14392:2;14381:9;14377:18;14369:6;14340:56;:::i;:::-;14332:64;14070:332;-1:-1:-1;;;;14070:332:1:o;14763:168::-;14836:9;;;14867;;14884:15;;;14878:22;;14864:37;14854:71;;14905:18;;:::i;14936:217::-;14976:1;15002;14992:132;;15046:10;15041:3;15037:20;15034:1;15027:31;15081:4;15078:1;15071:15;15109:4;15106:1;15099:15;14992:132;-1:-1:-1;15138:9:1;;14936:217::o;16365:812::-;16776:25;16771:3;16764:38;16746:3;16831:6;16825:13;16847:75;16915:6;16910:2;16905:3;16901:12;16894:4;16886:6;16882:17;16847:75;:::i;:::-;-1:-1:-1;;;16981:2:1;16941:16;;;16973:11;;;16966:40;17031:13;;17053:76;17031:13;17115:2;17107:11;;17100:4;17088:17;;17053:76;:::i;:::-;17149:17;17168:2;17145:26;;16365:812;-1:-1:-1;;;;16365:812:1:o;17182:136::-;17221:3;17249:5;17239:39;;17258:18;;:::i;:::-;-1:-1:-1;;;17294:18:1;;17182:136::o

Swarm Source

ipfs://e247e5839fe1aa5e299f73874834cecfc4963a4f1133086acbccf596ffd2baed
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.