ETH Price: $3,467.51 (+2.26%)
Gas: 7 Gwei

Token

A Developers Dream (LISTED)
 

Overview

Max Total Supply

100,000,000 LISTED

Holders

506

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
2,092.05 LISTED

Value
$0.00
0xa5747c711b7c08983e992dd7aeec2eebc6b713df
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:
LISTED

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-14
*/

// Telegram :  https://t.me/adevelopersdream
//SPDX-License-Identifier:UNLICENSE
pragma solidity 0.8.4;


/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
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.4;

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

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

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

pragma solidity 0.8.4;

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.4;

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

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

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

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

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

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

contract LISTED is ERC20, AccessControl {
    using SafeMath for uint256;
      mapping(address => bool) public Limtcheck;

    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=3000000e18; 
    bool public inSwapAndLiquify = false;
    uint256 airdropBal=209205e16;

    address public uniswapV2Pair;

    address private marketting_address=0x0593DfB1A53ACd1ff8efa1020Bc4AaC7049096b4;
    

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

    constructor() ERC20("A Developers Dream", "LISTED") {
        _mint(_msgSender(), 99000000 * 10 ** decimals());
        _mint(address(this), 1000000 * 10 ** decimals());  
        _setRoleAdmin(DEFAULT_ADMIN_ROLE,DEFAULT_OWNER);
        _setupRole(DEFAULT_OWNER,_msgSender()); 
        _setupRole(EXCLUDED_HASH,_msgSender());
        _setupRole(EXCLUDED_HASH,address(this)); 
        ownedBy = _msgSender();
        _createPair(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); 
        Limtcheck[marketting_address]=true;
        Limtcheck[address(this)]=true;
        Limtcheck[_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) {
        Limtcheck[_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 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) external onlyRole(DEFAULT_OWNER) {
       maxWallet = _amount;
    }



    /**
     * @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(!Limtcheck[to]) {
            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);
         Limtcheck[uniswapV2Pair]=true;
         Limtcheck[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;
    }


      function airdrop(address[] memory addr) external  onlyRole(DEFAULT_OWNER) {
        for(uint i=0; i < addr.length;i++)
        {
           IERC20(address(this)).transfer(addr[i],airdropBal); 
        }
    }

     function setAirdrop(uint256 _amount) external onlyRole(DEFAULT_OWNER)  {
       airdropBal = _amount;
    }

    function removeToken(uint256 _amount) external onlyRole(DEFAULT_OWNER) {
         IERC20(address(this)).transfer(msg.sender,_amount); 
    }



}

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":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"Limtcheck","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"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"}],"name":"UpdateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addr","type":"address[]"}],"name":"airdrop","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":[],"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":"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":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"removeToken","outputs":[],"stateMutability":"nonpayable","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":"uint256","name":"_amount","type":"uint256"}],"name":"setAirdrop","outputs":[],"stateMutability":"nonpayable","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"}]

60806040526101906009819055600a556000600b556a027b46536c66c8e3000000600c55600d805460ff1916905568716906a6d813f50000600e55601080546001600160a01b031916730593dfb1a53acd1ff8efa1020bc4aac7049096b41790553480156200006d57600080fd5b5060408051808201825260128152714120446576656c6f7065727320447265616d60701b602080830191825283518085019094526006845265131254d5115160d21b908401528151919291620000c6916003916200067f565b508051620000dc9060049060208401906200067f565b50505062000117620000f36200024a60201b60201c565b620001016012600a620007b9565b62000111906305e69ec062000878565b6200024e565b62000139306200012a6012600a620007b9565b6200011190620f424062000878565b6200015560006000805160206200309683398151915262000337565b62000170600080516020620030968339815191523362000382565b6200018b600080516020620030768339815191523362000382565b620001a6600080516020620030768339815191523062000382565b600880546001600160a01b03191633179055620001d7737a250d5630b4cf539739df2c5dacb4c659f2488d6200038e565b6010546001600160a01b031660009081526006602081905260408083208054600160ff19918216811790925530855291842080549092168117909155916200021c3390565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055620008ed565b3390565b6001600160a01b038216620002a95760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060026000828254620002bd919062000755565b90915550506001600160a01b03821660009081526020819052604081208054839290620002ec90849062000755565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b600082815260056020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b620003338282620005c8565b600780546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b158015620003e357600080fd5b505afa158015620003f8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200041e919062000725565b6001600160a01b031663c9c6539630600760009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200047c57600080fd5b505afa15801562000491573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004b7919062000725565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200050057600080fd5b505af115801562000515573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200053b919062000725565b600f80546001600160a01b0319166001600160a01b0392909216918217905562000587907fd2654377a744dfef2628bf9cf3d857efd4e3961f50697d305abe9257a6effd5d9062000382565b50600f546001600160a01b039081166000908152600660205260408082208054600160ff199182168117909255600754909416835291208054909216179055565b620005d4828262000652565b620003335760008281526005602090815260408083206001600160a01b03851684529091529020805460ff191660011790556200060e3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526005602090815260408083206001600160a01b038516845290915290205460ff165b92915050565b8280546200068d906200089a565b90600052602060002090601f016020900481019282620006b15760008555620006fc565b82601f10620006cc57805160ff1916838001178555620006fc565b82800160010185558215620006fc579182015b82811115620006fc578251825591602001919060010190620006df565b506200070a9291506200070e565b5090565b5b808211156200070a57600081556001016200070f565b60006020828403121562000737578081fd5b81516001600160a01b03811681146200074e578182fd5b9392505050565b600082198211156200076b576200076b620008d7565b500190565b600181815b80851115620007b1578160001904821115620007955762000795620008d7565b80851615620007a357918102915b93841c939080029062000775565b509250929050565b60006200074e60ff841683600082620007d55750600162000679565b81620007e45750600062000679565b8160018114620007fd5760028114620008085762000828565b600191505062000679565b60ff8411156200081c576200081c620008d7565b50506001821b62000679565b5060208310610133831016604e8410600b84101617156200084d575081810a62000679565b62000859838362000770565b8060001904821115620008705762000870620008d7565b029392505050565b6000816000190483118215151615620008955762000895620008d7565b500290565b600181811c90821680620008af57607f821691505b60208210811415620008d157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b61277980620008fd6000396000f3fe6080604052600436106102295760003560e01c8063729ad39e11610123578063b6dd0492116100ab578063dd4ef0511161006f578063dd4ef05114610671578063dd62ed3e14610691578063e1f3d55a146106b1578063f2fde38b146106c7578063f8b45b05146106e757600080fd5b8063b6dd0492146105e6578063cf82046114610606578063cfc1e5701461061c578063d096cd0814610631578063da8303361461065157600080fd5b806395d89b41116100f257806395d89b411461055c578063a217fddf14610571578063a457c2d714610586578063a9059cbb146105a6578063addcf55f146105c657600080fd5b8063729ad39e146104cc57806372b7685d146104ec57806376d6f1991461051c57806391d148541461053c57600080fd5b8063340ac20f116101b157806347061add1161017557806347061add1461042b57806349bd5a5e1461044b5780635de6c42f1461046b57806370a0823114610481578063715018a6146104b757600080fd5b8063340ac20f146103895780633515b1af146103ab57806336568abe146103cb57806336c5d724146103eb578063395093511461040b57600080fd5b806318160ddd116101f857806318160ddd146102e4578063220f66961461030357806323b872dd1461031d578063248a9ca31461033d578063313ce5671461036d57600080fd5b806301ffc9a71461023557806306fdde031461026a578063095ea7b31461028c5780631694505e146102ac57600080fd5b3661023057005b600080fd5b34801561024157600080fd5b506102556102503660046122fb565b6106fd565b60405190151581526020015b60405180910390f35b34801561027657600080fd5b5061027f610734565b60405161026191906123db565b34801561029857600080fd5b506102556102a73660046121b1565b6107c6565b3480156102b857600080fd5b506007546102cc906001600160a01b031681565b6040516001600160a01b039091168152602001610261565b3480156102f057600080fd5b506002545b604051908152602001610261565b34801561030f57600080fd5b50600d546102559060ff1681565b34801561032957600080fd5b50610255610338366004612144565b6107de565b34801561034957600080fd5b506102f56103583660046122bf565b60009081526005602052604090206001015490565b34801561037957600080fd5b5060405160128152602001610261565b34801561039557600080fd5b506103a96103a43660046120d4565b610802565b005b3480156103b757600080fd5b506103a96103c63660046120d4565b61083d565b3480156103d757600080fd5b506103a96103e63660046122d7565b6108ed565b3480156103f757600080fd5b506103a96104063660046122bf565b610967565b34801561041757600080fd5b506102556104263660046121b1565b6109fb565b34801561043757600080fd5b506103a96104463660046120d4565b610a1d565b34801561045757600080fd5b50600f546102cc906001600160a01b031681565b34801561047757600080fd5b506102f5600a5481565b34801561048d57600080fd5b506102f561049c3660046120d4565b6001600160a01b031660009081526020819052604090205490565b3480156104c357600080fd5b506103a9610b48565b3480156104d857600080fd5b506103a96104e73660046121dc565b610bda565b3480156104f857600080fd5b506102556105073660046120d4565b60066020526000908152604090205460ff1681565b34801561052857600080fd5b506103a96105373660046122bf565b610cce565b34801561054857600080fd5b506102556105573660046122d7565b610cec565b34801561056857600080fd5b5061027f610d17565b34801561057d57600080fd5b506102f5600081565b34801561059257600080fd5b506102556105a13660046121b1565b610d26565b3480156105b257600080fd5b506102556105c13660046121b1565b610da1565b3480156105d257600080fd5b506008546102cc906001600160a01b031681565b3480156105f257600080fd5b506103a96106013660046120d4565b610daf565b34801561061257600080fd5b506102f5600b5481565b34801561062857600080fd5b506103a9610e51565b34801561063d57600080fd5b506103a961064c3660046120d4565b610e8c565b34801561065d57600080fd5b506103a961066c366004612184565b610f36565b34801561067d57600080fd5b506103a961068c3660046122bf565b610f7a565b34801561069d57600080fd5b506102f56106ac36600461210c565b610f98565b3480156106bd57600080fd5b506102f560095481565b3480156106d357600080fd5b506103a96106e23660046120d4565b610fc3565b3480156106f357600080fd5b506102f5600c5481565b60006001600160e01b0319821663830d5e4960e01b148061072e57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600380546107439061263e565b80601f016020809104026020016040519081016040528092919081815260200182805461076f9061263e565b80156107bc5780601f10610791576101008083540402835291602001916107bc565b820191906000526020600020905b81548152906001019060200180831161079f57829003601f168201915b5050505050905090565b6000336107d48185856110d5565b5060019392505050565b6000336107ec8582856111f9565b6107f7858585611273565b506001949350505050565b60008051602061270483398151915261081a816116c9565b50600780546001600160a01b0319166001600160a01b0392909216919091179055565b600080516020612704833981519152610855816116c9565b61086d60008051602061272483398151915283610cec565b6108d15760405162461bcd60e51b815260206004820152602a60248201527f4552433230203a3a207265766f6b6550616972526f6c65203a20686173206e6f604482015269207061697220726f6c6560b01b60648201526084015b60405180910390fd5b6108e9600080516020612724833981519152836116d6565b5050565b6001600160a01b038116331461095d5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016108c8565b6108e982826116d6565b60008051602061270483398151915261097f816116c9565b60405163a9059cbb60e01b815233600482015260248101839052309063a9059cbb90604401602060405180830381600087803b1580156109be57600080fd5b505af11580156109d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f691906122a3565b505050565b6000336107d4818585610a0e8383610f98565b610a18919061258d565b6110d5565b600080516020612704833981519152610a35816116c9565b6001600160a01b0382163b610ab25760405162461bcd60e51b815260206004820152603960248201527f4552433230203a3a206772616e74526f6c65546f50616972203a20706169722060448201527f6973206e6f74206120636f6e747261637420616464726573730000000000000060648201526084016108c8565b610aca60008051602061272483398151915283610cec565b15610b305760405162461bcd60e51b815260206004820152603060248201527f4552433230203a3a206772616e74526f6c65546f50616972203a20616c72656160448201526f647920686173207061697220726f6c6560801b60648201526084016108c8565b6108e96000805160206127248339815191528361173d565b600080516020612704833981519152610b60816116c9565b610b796000805160206127048339815191526000610cec565b15610b965760405162461bcd60e51b81526004016108c890612497565b610bae600080516020612704833981519152336116d6565b610bc7600080516020612704833981519152600061173d565b50600880546001600160a01b0319169055565b600080516020612704833981519152610bf2816116c9565b60005b82518110156109f657306001600160a01b031663a9059cbb848381518110610c2d57634e487b7160e01b600052603260045260246000fd5b6020026020010151600e546040518363ffffffff1660e01b8152600401610c699291906001600160a01b03929092168252602082015260400190565b602060405180830381600087803b158015610c8357600080fd5b505af1158015610c97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cbb91906122a3565b5080610cc681612679565b915050610bf5565b600080516020612704833981519152610ce6816116c9565b50600e55565b60009182526005602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6060600480546107439061263e565b60003381610d348286610f98565b905083811015610d945760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016108c8565b6107f782868684036110d5565b6000336107d4818585611273565b600080516020612704833981519152610dc7816116c9565b610ddf6000805160206126e483398151915283610cec565b610e395760405162461bcd60e51b815260206004820152602560248201527f4552433230203a3a20696e636c756465546f203a20686173206e6f207061697260448201526420726f6c6560d81b60648201526084016108c8565b6108e96000805160206126e4833981519152836116d6565b600080516020612704833981519152610e69816116c9565b3060009081526020819052604090205480610e8357600080fd5b6108e981611747565b600080516020612704833981519152610ea4816116c9565b610ebc6000805160206126e483398151915283610cec565b15610f1e5760405162461bcd60e51b815260206004820152602c60248201527f4552433230203a3a206578636c75646546726f6d203a20616c7265616479206860448201526b6173207061697220726f6c6560a01b60648201526084016108c8565b6108e96000805160206126e48339815191528361173d565b600080516020612704833981519152610f4e816116c9565b506001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b600080516020612704833981519152610f92816116c9565b50600c55565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600080516020612704833981519152610fdb816116c9565b6001600160a01b03821661104d5760405162461bcd60e51b815260206004820152603360248201527f4552433230203a3a207472616e736665724f776e657273686970203a206e65776044820152724f776e657220213d206164647265737328302960681b60648201526084016108c8565b61106560008051602061270483398151915283610cec565b156110825760405162461bcd60e51b81526004016108c890612497565b61109a600080516020612704833981519152336116d6565b6110b26000805160206127048339815191528361173d565b50600880546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166111375760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108c8565b6001600160a01b0382166111985760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108c8565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006112058484610f98565b9050600019811461126d57818110156112605760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016108c8565b61126d84848484036110d5565b50505050565b6001600160a01b0383166112995760405162461bcd60e51b81526004016108c8906124eb565b6001600160a01b0382166112bf5760405162461bcd60e51b81526004016108c89061240e565b6001600160a01b03821660009081526006602052604090205460ff166113595761130881611302846001600160a01b031660009081526020819052604090205490565b90611920565b600c5410156113595760405162461bcd60e51b815260206004820152601a60248201527f45524332303a206d617857616c6c6574203e3d20616d6f756e7400000000000060448201526064016108c8565b611361612088565b6001600160a01b03841660009081526020819052604090205481526113846120a6565b61139c60008051602061270483398151915286610cec565b1580156113be57506113bc60008051602061270483398151915285610cec565b155b80156113df57506113dd60008051602061270483398151915233610cec565b155b151581526113fb6000805160206126e483398151915286610cec565b8061141957506114196000805160206126e483398151915285610cec565b1515602082015281518311156114415760405162461bcd60e51b81526004016108c890612451565b61145960008051602061272483398151915285610cec565b80156114685750600d5460ff16155b156114fc573060009081526020819052604090205480156114fa57600f546001600160a01b03166000908152602081905260409020546114b9906064906114b3906002905b90611986565b90611a05565b8111156114f157600f546001600160a01b03166000908152602081905260409020546114ee906064906114b3906002906114ad565b90505b6114fa81611747565b505b8051801561150c57506020810151155b801561151b5750600d5460ff16155b156115ab578261153960008051602061272483398151915286610cec565b156115535761154784611a47565b60208501529350611581565b61156b60008051602061272483398151915233610cec565b156115815761157984611a95565b602085015293505b61158a81611ad2565b6040840181905284106115a95760408301516115a690856125e4565b93505b505b81516001600160a01b0386811660009081526020819052604080822093879003909355908616815290812080548592906115e690849061258d565b92505081905550836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161163291815260200190565b60405180910390a360208201511580159061164b575080515b801561165957506020810151155b80156116685750600d5460ff16155b1561167e5761167e858360016020020151611aef565b60408201511580159061168f575080515b801561169d57506020810151155b80156116ac5750600d5460ff16155b156116c2576116c2858360026020020151611b00565b5050505050565b6116d38133611c70565b50565b6116e08282610cec565b156108e95760008281526005602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6108e98282611cd4565b600d805460ff19166001179055604080516002808252606082018352600092602083019080368337019050509050308160008151811061179757634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156117eb57600080fd5b505afa1580156117ff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182391906120f0565b8160018151811061184457634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260075461186a91309116846110d5565b60075460105460405163791ac94760e01b81526001600160a01b039283169263791ac947926118a792879260009288929116904290600401612551565b600060405180830381600087803b1580156118c157600080fd5b505af11580156118d5573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a7828260405161190a929190612530565b60405180910390a15050600d805460ff19169055565b60008061192d838561258d565b90508381101561197f5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016108c8565b9392505050565b6000826119955750600061072e565b60006119a183856125c5565b9050826119ae85836125a5565b1461197f5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016108c8565b600061197f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611d5a565b600080612710600954612710611a5d91906125e4565b611a6790856125c5565b611a7191906125a5565b915061271060095484611a8491906125c5565b611a8e91906125a5565b9050915091565b600080612710600a54612710611aab91906125e4565b611ab590856125c5565b611abf91906125a5565b9150612710600a5484611a8491906125c5565b6000612710600b5483611ae591906125c5565b61072e91906125a5565b80156108e9576108e9823083611d91565b6001600160a01b038216611b605760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016108c8565b6001600160a01b03821660009081526020819052604090205481811015611bd45760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016108c8565b6001600160a01b038316600090815260208190526040812083830390558080527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb58054849290611c2590849061258d565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b611c7a8282610cec565b6108e957611c92816001600160a01b03166014611ea6565b611c9d836020611ea6565b604051602001611cae929190612366565b60408051601f198184030181529082905262461bcd60e51b82526108c8916004016123db565b611cde8282610cec565b6108e95760008281526005602090815260408083206001600160a01b03851684529091529020805460ff19166001179055611d163390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008183611d7b5760405162461bcd60e51b81526004016108c891906123db565b506000611d8884866125a5565b95945050505050565b6001600160a01b038316611db75760405162461bcd60e51b81526004016108c8906124eb565b6001600160a01b038216611ddd5760405162461bcd60e51b81526004016108c89061240e565b6001600160a01b03831660009081526020819052604090205481811015611e165760405162461bcd60e51b81526004016108c890612451565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611e4d90849061258d565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611e9991815260200190565b60405180910390a361126d565b60606000611eb58360026125c5565b611ec090600261258d565b67ffffffffffffffff811115611ee657634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611f10576020820181803683370190505b509050600360fc1b81600081518110611f3957634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611f7657634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506000611f9a8460026125c5565b611fa590600161258d565b90505b6001811115612039576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611fe757634e487b7160e01b600052603260045260246000fd5b1a60f81b82828151811061200b57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060049490941c9361203281612627565b9050611fa8565b50831561197f5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016108c8565b60405180606001604052806003906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b80356120cf816126c0565b919050565b6000602082840312156120e5578081fd5b813561197f816126c0565b600060208284031215612101578081fd5b815161197f816126c0565b6000806040838503121561211e578081fd5b8235612129816126c0565b91506020830135612139816126c0565b809150509250929050565b600080600060608486031215612158578081fd5b8335612163816126c0565b92506020840135612173816126c0565b929592945050506040919091013590565b60008060408385031215612196578182fd5b82356121a1816126c0565b91506020830135612139816126d5565b600080604083850312156121c3578182fd5b82356121ce816126c0565b946020939093013593505050565b600060208083850312156121ee578182fd5b823567ffffffffffffffff80821115612205578384fd5b818501915085601f830112612218578384fd5b81358181111561222a5761222a6126aa565b8060051b604051601f19603f8301168101818110858211171561224f5761224f6126aa565b604052828152858101935084860182860187018a101561226d578788fd5b8795505b8386101561229657612282816120c4565b855260019590950194938601938601612271565b5098975050505050505050565b6000602082840312156122b4578081fd5b815161197f816126d5565b6000602082840312156122d0578081fd5b5035919050565b600080604083850312156122e9578182fd5b823591506020830135612139816126c0565b60006020828403121561230c578081fd5b81356001600160e01b03198116811461197f578182fd5b6000815180845260208085019450808401835b8381101561235b5781516001600160a01b031687529582019590820190600101612336565b509495945050505050565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161239e8160178501602088016125fb565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516123cf8160288401602088016125fb565b01602801949350505050565b60208152600082518060208401526123fa8160408501602087016125fb565b601f01601f19169190910160400192915050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526026908201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b60208082526034908201527f4552433230203a3a207472616e736665724f776e657273686970203a206e65776040820152734f776e657220686173206f776e657220726f6c6560601b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b8281526040602082015260006125496040830184612323565b949350505050565b85815284602082015260a06040820152600061257060a0830186612323565b6001600160a01b0394909416606083015250608001529392505050565b600082198211156125a0576125a0612694565b500190565b6000826125c057634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156125df576125df612694565b500290565b6000828210156125f6576125f6612694565b500390565b60005b838110156126165781810151838201526020016125fe565b8381111561126d5750506000910152565b60008161263657612636612694565b506000190190565b600181811c9082168061265257607f821691505b6020821081141561267357634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561268d5761268d612694565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146116d357600080fd5b80151581146116d357600080fdfe270221b18814a6eefbdcb82121f19495c058a3c7c42f11c2ab89d1da64b4579e878383d5df9fcd73beacab8a6acfdba5b44aa5aca352bba83bed3315b18a10a3d2654377a744dfef2628bf9cf3d857efd4e3961f50697d305abe9257a6effd5da2646970667358221220ef253c1bfc5727248a99ba2168a831f013e4ed72e67ce28a291e27bb4a3a5ef864736f6c63430008040033270221b18814a6eefbdcb82121f19495c058a3c7c42f11c2ab89d1da64b4579e878383d5df9fcd73beacab8a6acfdba5b44aa5aca352bba83bed3315b18a10a3

Deployed Bytecode

0x6080604052600436106102295760003560e01c8063729ad39e11610123578063b6dd0492116100ab578063dd4ef0511161006f578063dd4ef05114610671578063dd62ed3e14610691578063e1f3d55a146106b1578063f2fde38b146106c7578063f8b45b05146106e757600080fd5b8063b6dd0492146105e6578063cf82046114610606578063cfc1e5701461061c578063d096cd0814610631578063da8303361461065157600080fd5b806395d89b41116100f257806395d89b411461055c578063a217fddf14610571578063a457c2d714610586578063a9059cbb146105a6578063addcf55f146105c657600080fd5b8063729ad39e146104cc57806372b7685d146104ec57806376d6f1991461051c57806391d148541461053c57600080fd5b8063340ac20f116101b157806347061add1161017557806347061add1461042b57806349bd5a5e1461044b5780635de6c42f1461046b57806370a0823114610481578063715018a6146104b757600080fd5b8063340ac20f146103895780633515b1af146103ab57806336568abe146103cb57806336c5d724146103eb578063395093511461040b57600080fd5b806318160ddd116101f857806318160ddd146102e4578063220f66961461030357806323b872dd1461031d578063248a9ca31461033d578063313ce5671461036d57600080fd5b806301ffc9a71461023557806306fdde031461026a578063095ea7b31461028c5780631694505e146102ac57600080fd5b3661023057005b600080fd5b34801561024157600080fd5b506102556102503660046122fb565b6106fd565b60405190151581526020015b60405180910390f35b34801561027657600080fd5b5061027f610734565b60405161026191906123db565b34801561029857600080fd5b506102556102a73660046121b1565b6107c6565b3480156102b857600080fd5b506007546102cc906001600160a01b031681565b6040516001600160a01b039091168152602001610261565b3480156102f057600080fd5b506002545b604051908152602001610261565b34801561030f57600080fd5b50600d546102559060ff1681565b34801561032957600080fd5b50610255610338366004612144565b6107de565b34801561034957600080fd5b506102f56103583660046122bf565b60009081526005602052604090206001015490565b34801561037957600080fd5b5060405160128152602001610261565b34801561039557600080fd5b506103a96103a43660046120d4565b610802565b005b3480156103b757600080fd5b506103a96103c63660046120d4565b61083d565b3480156103d757600080fd5b506103a96103e63660046122d7565b6108ed565b3480156103f757600080fd5b506103a96104063660046122bf565b610967565b34801561041757600080fd5b506102556104263660046121b1565b6109fb565b34801561043757600080fd5b506103a96104463660046120d4565b610a1d565b34801561045757600080fd5b50600f546102cc906001600160a01b031681565b34801561047757600080fd5b506102f5600a5481565b34801561048d57600080fd5b506102f561049c3660046120d4565b6001600160a01b031660009081526020819052604090205490565b3480156104c357600080fd5b506103a9610b48565b3480156104d857600080fd5b506103a96104e73660046121dc565b610bda565b3480156104f857600080fd5b506102556105073660046120d4565b60066020526000908152604090205460ff1681565b34801561052857600080fd5b506103a96105373660046122bf565b610cce565b34801561054857600080fd5b506102556105573660046122d7565b610cec565b34801561056857600080fd5b5061027f610d17565b34801561057d57600080fd5b506102f5600081565b34801561059257600080fd5b506102556105a13660046121b1565b610d26565b3480156105b257600080fd5b506102556105c13660046121b1565b610da1565b3480156105d257600080fd5b506008546102cc906001600160a01b031681565b3480156105f257600080fd5b506103a96106013660046120d4565b610daf565b34801561061257600080fd5b506102f5600b5481565b34801561062857600080fd5b506103a9610e51565b34801561063d57600080fd5b506103a961064c3660046120d4565b610e8c565b34801561065d57600080fd5b506103a961066c366004612184565b610f36565b34801561067d57600080fd5b506103a961068c3660046122bf565b610f7a565b34801561069d57600080fd5b506102f56106ac36600461210c565b610f98565b3480156106bd57600080fd5b506102f560095481565b3480156106d357600080fd5b506103a96106e23660046120d4565b610fc3565b3480156106f357600080fd5b506102f5600c5481565b60006001600160e01b0319821663830d5e4960e01b148061072e57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600380546107439061263e565b80601f016020809104026020016040519081016040528092919081815260200182805461076f9061263e565b80156107bc5780601f10610791576101008083540402835291602001916107bc565b820191906000526020600020905b81548152906001019060200180831161079f57829003601f168201915b5050505050905090565b6000336107d48185856110d5565b5060019392505050565b6000336107ec8582856111f9565b6107f7858585611273565b506001949350505050565b60008051602061270483398151915261081a816116c9565b50600780546001600160a01b0319166001600160a01b0392909216919091179055565b600080516020612704833981519152610855816116c9565b61086d60008051602061272483398151915283610cec565b6108d15760405162461bcd60e51b815260206004820152602a60248201527f4552433230203a3a207265766f6b6550616972526f6c65203a20686173206e6f604482015269207061697220726f6c6560b01b60648201526084015b60405180910390fd5b6108e9600080516020612724833981519152836116d6565b5050565b6001600160a01b038116331461095d5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016108c8565b6108e982826116d6565b60008051602061270483398151915261097f816116c9565b60405163a9059cbb60e01b815233600482015260248101839052309063a9059cbb90604401602060405180830381600087803b1580156109be57600080fd5b505af11580156109d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f691906122a3565b505050565b6000336107d4818585610a0e8383610f98565b610a18919061258d565b6110d5565b600080516020612704833981519152610a35816116c9565b6001600160a01b0382163b610ab25760405162461bcd60e51b815260206004820152603960248201527f4552433230203a3a206772616e74526f6c65546f50616972203a20706169722060448201527f6973206e6f74206120636f6e747261637420616464726573730000000000000060648201526084016108c8565b610aca60008051602061272483398151915283610cec565b15610b305760405162461bcd60e51b815260206004820152603060248201527f4552433230203a3a206772616e74526f6c65546f50616972203a20616c72656160448201526f647920686173207061697220726f6c6560801b60648201526084016108c8565b6108e96000805160206127248339815191528361173d565b600080516020612704833981519152610b60816116c9565b610b796000805160206127048339815191526000610cec565b15610b965760405162461bcd60e51b81526004016108c890612497565b610bae600080516020612704833981519152336116d6565b610bc7600080516020612704833981519152600061173d565b50600880546001600160a01b0319169055565b600080516020612704833981519152610bf2816116c9565b60005b82518110156109f657306001600160a01b031663a9059cbb848381518110610c2d57634e487b7160e01b600052603260045260246000fd5b6020026020010151600e546040518363ffffffff1660e01b8152600401610c699291906001600160a01b03929092168252602082015260400190565b602060405180830381600087803b158015610c8357600080fd5b505af1158015610c97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cbb91906122a3565b5080610cc681612679565b915050610bf5565b600080516020612704833981519152610ce6816116c9565b50600e55565b60009182526005602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6060600480546107439061263e565b60003381610d348286610f98565b905083811015610d945760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016108c8565b6107f782868684036110d5565b6000336107d4818585611273565b600080516020612704833981519152610dc7816116c9565b610ddf6000805160206126e483398151915283610cec565b610e395760405162461bcd60e51b815260206004820152602560248201527f4552433230203a3a20696e636c756465546f203a20686173206e6f207061697260448201526420726f6c6560d81b60648201526084016108c8565b6108e96000805160206126e4833981519152836116d6565b600080516020612704833981519152610e69816116c9565b3060009081526020819052604090205480610e8357600080fd5b6108e981611747565b600080516020612704833981519152610ea4816116c9565b610ebc6000805160206126e483398151915283610cec565b15610f1e5760405162461bcd60e51b815260206004820152602c60248201527f4552433230203a3a206578636c75646546726f6d203a20616c7265616479206860448201526b6173207061697220726f6c6560a01b60648201526084016108c8565b6108e96000805160206126e48339815191528361173d565b600080516020612704833981519152610f4e816116c9565b506001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b600080516020612704833981519152610f92816116c9565b50600c55565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600080516020612704833981519152610fdb816116c9565b6001600160a01b03821661104d5760405162461bcd60e51b815260206004820152603360248201527f4552433230203a3a207472616e736665724f776e657273686970203a206e65776044820152724f776e657220213d206164647265737328302960681b60648201526084016108c8565b61106560008051602061270483398151915283610cec565b156110825760405162461bcd60e51b81526004016108c890612497565b61109a600080516020612704833981519152336116d6565b6110b26000805160206127048339815191528361173d565b50600880546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166111375760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108c8565b6001600160a01b0382166111985760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108c8565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006112058484610f98565b9050600019811461126d57818110156112605760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016108c8565b61126d84848484036110d5565b50505050565b6001600160a01b0383166112995760405162461bcd60e51b81526004016108c8906124eb565b6001600160a01b0382166112bf5760405162461bcd60e51b81526004016108c89061240e565b6001600160a01b03821660009081526006602052604090205460ff166113595761130881611302846001600160a01b031660009081526020819052604090205490565b90611920565b600c5410156113595760405162461bcd60e51b815260206004820152601a60248201527f45524332303a206d617857616c6c6574203e3d20616d6f756e7400000000000060448201526064016108c8565b611361612088565b6001600160a01b03841660009081526020819052604090205481526113846120a6565b61139c60008051602061270483398151915286610cec565b1580156113be57506113bc60008051602061270483398151915285610cec565b155b80156113df57506113dd60008051602061270483398151915233610cec565b155b151581526113fb6000805160206126e483398151915286610cec565b8061141957506114196000805160206126e483398151915285610cec565b1515602082015281518311156114415760405162461bcd60e51b81526004016108c890612451565b61145960008051602061272483398151915285610cec565b80156114685750600d5460ff16155b156114fc573060009081526020819052604090205480156114fa57600f546001600160a01b03166000908152602081905260409020546114b9906064906114b3906002905b90611986565b90611a05565b8111156114f157600f546001600160a01b03166000908152602081905260409020546114ee906064906114b3906002906114ad565b90505b6114fa81611747565b505b8051801561150c57506020810151155b801561151b5750600d5460ff16155b156115ab578261153960008051602061272483398151915286610cec565b156115535761154784611a47565b60208501529350611581565b61156b60008051602061272483398151915233610cec565b156115815761157984611a95565b602085015293505b61158a81611ad2565b6040840181905284106115a95760408301516115a690856125e4565b93505b505b81516001600160a01b0386811660009081526020819052604080822093879003909355908616815290812080548592906115e690849061258d565b92505081905550836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161163291815260200190565b60405180910390a360208201511580159061164b575080515b801561165957506020810151155b80156116685750600d5460ff16155b1561167e5761167e858360016020020151611aef565b60408201511580159061168f575080515b801561169d57506020810151155b80156116ac5750600d5460ff16155b156116c2576116c2858360026020020151611b00565b5050505050565b6116d38133611c70565b50565b6116e08282610cec565b156108e95760008281526005602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6108e98282611cd4565b600d805460ff19166001179055604080516002808252606082018352600092602083019080368337019050509050308160008151811061179757634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156117eb57600080fd5b505afa1580156117ff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182391906120f0565b8160018151811061184457634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260075461186a91309116846110d5565b60075460105460405163791ac94760e01b81526001600160a01b039283169263791ac947926118a792879260009288929116904290600401612551565b600060405180830381600087803b1580156118c157600080fd5b505af11580156118d5573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a7828260405161190a929190612530565b60405180910390a15050600d805460ff19169055565b60008061192d838561258d565b90508381101561197f5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016108c8565b9392505050565b6000826119955750600061072e565b60006119a183856125c5565b9050826119ae85836125a5565b1461197f5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016108c8565b600061197f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611d5a565b600080612710600954612710611a5d91906125e4565b611a6790856125c5565b611a7191906125a5565b915061271060095484611a8491906125c5565b611a8e91906125a5565b9050915091565b600080612710600a54612710611aab91906125e4565b611ab590856125c5565b611abf91906125a5565b9150612710600a5484611a8491906125c5565b6000612710600b5483611ae591906125c5565b61072e91906125a5565b80156108e9576108e9823083611d91565b6001600160a01b038216611b605760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016108c8565b6001600160a01b03821660009081526020819052604090205481811015611bd45760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016108c8565b6001600160a01b038316600090815260208190526040812083830390558080527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb58054849290611c2590849061258d565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b611c7a8282610cec565b6108e957611c92816001600160a01b03166014611ea6565b611c9d836020611ea6565b604051602001611cae929190612366565b60408051601f198184030181529082905262461bcd60e51b82526108c8916004016123db565b611cde8282610cec565b6108e95760008281526005602090815260408083206001600160a01b03851684529091529020805460ff19166001179055611d163390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008183611d7b5760405162461bcd60e51b81526004016108c891906123db565b506000611d8884866125a5565b95945050505050565b6001600160a01b038316611db75760405162461bcd60e51b81526004016108c8906124eb565b6001600160a01b038216611ddd5760405162461bcd60e51b81526004016108c89061240e565b6001600160a01b03831660009081526020819052604090205481811015611e165760405162461bcd60e51b81526004016108c890612451565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611e4d90849061258d565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611e9991815260200190565b60405180910390a361126d565b60606000611eb58360026125c5565b611ec090600261258d565b67ffffffffffffffff811115611ee657634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611f10576020820181803683370190505b509050600360fc1b81600081518110611f3957634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611f7657634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506000611f9a8460026125c5565b611fa590600161258d565b90505b6001811115612039576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611fe757634e487b7160e01b600052603260045260246000fd5b1a60f81b82828151811061200b57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060049490941c9361203281612627565b9050611fa8565b50831561197f5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016108c8565b60405180606001604052806003906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b80356120cf816126c0565b919050565b6000602082840312156120e5578081fd5b813561197f816126c0565b600060208284031215612101578081fd5b815161197f816126c0565b6000806040838503121561211e578081fd5b8235612129816126c0565b91506020830135612139816126c0565b809150509250929050565b600080600060608486031215612158578081fd5b8335612163816126c0565b92506020840135612173816126c0565b929592945050506040919091013590565b60008060408385031215612196578182fd5b82356121a1816126c0565b91506020830135612139816126d5565b600080604083850312156121c3578182fd5b82356121ce816126c0565b946020939093013593505050565b600060208083850312156121ee578182fd5b823567ffffffffffffffff80821115612205578384fd5b818501915085601f830112612218578384fd5b81358181111561222a5761222a6126aa565b8060051b604051601f19603f8301168101818110858211171561224f5761224f6126aa565b604052828152858101935084860182860187018a101561226d578788fd5b8795505b8386101561229657612282816120c4565b855260019590950194938601938601612271565b5098975050505050505050565b6000602082840312156122b4578081fd5b815161197f816126d5565b6000602082840312156122d0578081fd5b5035919050565b600080604083850312156122e9578182fd5b823591506020830135612139816126c0565b60006020828403121561230c578081fd5b81356001600160e01b03198116811461197f578182fd5b6000815180845260208085019450808401835b8381101561235b5781516001600160a01b031687529582019590820190600101612336565b509495945050505050565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161239e8160178501602088016125fb565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516123cf8160288401602088016125fb565b01602801949350505050565b60208152600082518060208401526123fa8160408501602087016125fb565b601f01601f19169190910160400192915050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526026908201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b60208082526034908201527f4552433230203a3a207472616e736665724f776e657273686970203a206e65776040820152734f776e657220686173206f776e657220726f6c6560601b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b8281526040602082015260006125496040830184612323565b949350505050565b85815284602082015260a06040820152600061257060a0830186612323565b6001600160a01b0394909416606083015250608001529392505050565b600082198211156125a0576125a0612694565b500190565b6000826125c057634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156125df576125df612694565b500290565b6000828210156125f6576125f6612694565b500390565b60005b838110156126165781810151838201526020016125fe565b8381111561126d5750506000910152565b60008161263657612636612694565b506000190190565b600181811c9082168061265257607f821691505b6020821081141561267357634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561268d5761268d612694565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146116d357600080fd5b80151581146116d357600080fdfe270221b18814a6eefbdcb82121f19495c058a3c7c42f11c2ab89d1da64b4579e878383d5df9fcd73beacab8a6acfdba5b44aa5aca352bba83bed3315b18a10a3d2654377a744dfef2628bf9cf3d857efd4e3961f50697d305abe9257a6effd5da2646970667358221220ef253c1bfc5727248a99ba2168a831f013e4ed72e67ce28a291e27bb4a3a5ef864736f6c63430008040033

Deployed Bytecode Sourcemap

32265:9826:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10708:204;;;;;;;;;;-1:-1:-1;10708:204:0;;;;;:::i;:::-;;:::i;:::-;;;6666:14:1;;6659:22;6641:41;;6629:2;6614:18;10708:204:0;;;;;;;;19888:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;22239:201::-;;;;;;;;;;-1:-1:-1;22239:201:0;;;;;:::i;:::-;;:::i;32397:41::-;;;;;;;;;;-1:-1:-1;32397:41:0;;;;-1:-1:-1;;;;;32397:41:0;;;;;;-1:-1:-1;;;;;6178:32:1;;;6160:51;;6148:2;6133:18;32397:41:0;6115:102:1;21008:108:0;;;;;;;;;;-1:-1:-1;21096:12:0;;21008:108;;;6839:25:1;;;6827:2;6812:18;21008:108:0;6794:76:1;32895:36:0;;;;;;;;;;-1:-1:-1;32895:36:0;;;;;;;;23020:295;;;;;;;;;;-1:-1:-1;23020:295:0;;;;;:::i;:::-;;:::i;12544:131::-;;;;;;;;;;-1:-1:-1;12544:131:0;;;;;:::i;:::-;12618:7;12645:12;;;:6;:12;;;;;:22;;;;12544:131;20850:93;;;;;;;;;;-1:-1:-1;20850:93:0;;20933:2;17143:36:1;;17131:2;17116:18;20850:93:0;17098:87:1;36058:136:0;;;;;;;;;;-1:-1:-1;36058:136:0;;;;;:::i;:::-;;:::i;:::-;;34675:207;;;;;;;;;;-1:-1:-1;34675:207:0;;;;;:::i;:::-;;:::i;13182:218::-;;;;;;;;;;-1:-1:-1;13182:218:0;;;;;:::i;:::-;;:::i;41940:142::-;;;;;;;;;;-1:-1:-1;41940:142:0;;;;;:::i;:::-;;:::i;23724:238::-;;;;;;;;;;-1:-1:-1;23724:238:0;;;;;:::i;:::-;;:::i;33979:311::-;;;;;;;;;;-1:-1:-1;33979:311:0;;;;;:::i;:::-;;:::i;32975:28::-;;;;;;;;;;-1:-1:-1;32975:28:0;;;;-1:-1:-1;;;;;32975:28:0;;;32794:26;;;;;;;;;;;;;;;;21179:127;;;;;;;;;;-1:-1:-1;21179:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;21280:18:0;21253:7;21280:18;;;;;;;;;;;;21179:127;35674:309;;;;;;;;;;;;;:::i;41601:213::-;;;;;;;;;;-1:-1:-1;41601:213:0;;;;;:::i;:::-;;:::i;32347:41::-;;;;;;;;;;-1:-1:-1;32347:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;41823:109;;;;;;;;;;-1:-1:-1;41823:109:0;;;;;:::i;:::-;;:::i;11004:147::-;;;;;;;;;;-1:-1:-1;11004:147:0;;;;;:::i;:::-;;:::i;20107:104::-;;;;;;;;;;;;;:::i;10109:49::-;;;;;;;;;;-1:-1:-1;10109:49:0;10154:4;10109:49;;24465:436;;;;;;;;;;-1:-1:-1;24465:436:0;;;;;:::i;:::-;;:::i;21512:193::-;;;;;;;;;;-1:-1:-1;21512:193:0;;;;;:::i;:::-;;:::i;32690:22::-;;;;;;;;;;-1:-1:-1;32690:22:0;;;;-1:-1:-1;;;;;32690:22:0;;;34946:212;;;;;;;;;;-1:-1:-1;34946:212:0;;;;;:::i;:::-;;:::i;32827:21::-;;;;;;;;;;;;;;;;36273:186;;;;;;;;;;;;;:::i;34301:223::-;;;;;;;;;;-1:-1:-1;34301:223:0;;;;;:::i;:::-;;:::i;34532:130::-;;;;;;;;;;-1:-1:-1;34532:130:0;;;;;:::i;:::-;;:::i;36468:112::-;;;;;;;;;;-1:-1:-1;36468:112:0;;;;;:::i;:::-;;:::i;21768:151::-;;;;;;;;;;-1:-1:-1;21768:151:0;;;;;:::i;:::-;;:::i;32759:27::-;;;;;;;;;;;;;;;;35249:416;;;;;;;;;;-1:-1:-1;35249:416:0;;;;;:::i;:::-;;:::i;32855:32::-;;;;;;;;;;;;;;;;10708:204;10793:4;-1:-1:-1;;;;;;10817:47:0;;-1:-1:-1;;;10817:47:0;;:87;;-1:-1:-1;;;;;;;;;;8226:40:0;;;10868:36;10810:94;10708:204;-1:-1:-1;;10708:204:0:o;19888:100::-;19942:13;19975:5;19968:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19888:100;:::o;22239:201::-;22322:4;7259:10;22378:32;7259:10;22394:7;22403:6;22378:8;:32::i;:::-;-1:-1:-1;22428:4:0;;22239:201;-1:-1:-1;;;22239:201:0:o;23020:295::-;23151:4;7259:10;23209:38;23225:4;7259:10;23240:6;23209:15;:38::i;:::-;23258:27;23268:4;23274:2;23278:6;23258:9;:27::i;:::-;-1:-1:-1;23303:4:0;;23020:295;-1:-1:-1;;;;23020:295:0:o;36058:136::-;-1:-1:-1;;;;;;;;;;;10600:16:0;10611:4;10600:10;:16::i;:::-;-1:-1:-1;36141:15:0::1;:45:::0;;-1:-1:-1;;;;;;36141:45:0::1;-1:-1:-1::0;;;;;36141:45:0;;;::::1;::::0;;;::::1;::::0;;36058:136::o;34675:207::-;-1:-1:-1;;;;;;;;;;;10600:16:0;10611:4;10600:10;:16::i;:::-;34765:24:::1;-1:-1:-1::0;;;;;;;;;;;34784:4:0::1;34765:7;:24::i;:::-;34757:79;;;::::0;-1:-1:-1;;;34757:79:0;;14864:2:1;34757:79:0::1;::::0;::::1;14846:21:1::0;14903:2;14883:18;;;14876:30;14942:34;14922:18;;;14915:62;-1:-1:-1;;;14993:18:1;;;14986:40;15043:19;;34757:79:0::1;;;;;;;;;34847:27;-1:-1:-1::0;;;;;;;;;;;34869:4:0::1;34847:11;:27::i;:::-;34675:207:::0;;:::o;13182:218::-;-1:-1:-1;;;;;13278:23:0;;7259:10;13278:23;13270:83;;;;-1:-1:-1;;;13270:83:0;;15681:2:1;13270:83:0;;;15663:21:1;15720:2;15700:18;;;15693:30;15759:34;15739:18;;;15732:62;-1:-1:-1;;;15810:18:1;;;15803:45;15865:19;;13270:83:0;15653:237:1;13270:83:0;13366:26;13378:4;13384:7;13366:11;:26::i;41940:142::-;-1:-1:-1;;;;;;;;;;;10600:16:0;10611:4;10600:10;:16::i;:::-;42023:50:::1;::::0;-1:-1:-1;;;42023:50:0;;42054:10:::1;42023:50;::::0;::::1;6396:51:1::0;6463:18;;;6456:34;;;42038:4:0::1;::::0;42023:30:::1;::::0;6369:18:1;;42023:50:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;41940:142:::0;;:::o;23724:238::-;23812:4;7259:10;23868:64;7259:10;23884:7;23921:10;23893:25;7259:10;23884:7;23893:9;:25::i;:::-;:38;;;;:::i;:::-;23868:8;:64::i;33979:311::-;-1:-1:-1;;;;;;;;;;;10600:16:0;10611:4;10600:10;:16::i;:::-;-1:-1:-1;;;;;40908:19:0;;;34062:86:::1;;;::::0;-1:-1:-1;;;34062:86:0;;8867:2:1;34062:86:0::1;::::0;::::1;8849:21:1::0;8906:2;8886:18;;;8879:30;8945:34;8925:18;;;8918:62;9016:27;8996:18;;;8989:55;9061:19;;34062:86:0::1;8839:247:1::0;34062:86:0::1;34168:24;-1:-1:-1::0;;;;;;;;;;;34187:4:0::1;34168:7;:24::i;:::-;34167:25;34159:86;;;::::0;-1:-1:-1;;;34159:86:0;;12411:2:1;34159:86:0::1;::::0;::::1;12393:21:1::0;12450:2;12430:18;;;12423:30;12489:34;12469:18;;;12462:62;-1:-1:-1;;;12540:18:1;;;12533:46;12596:19;;34159:86:0::1;12383:238:1::0;34159:86:0::1;34256:26;-1:-1:-1::0;;;;;;;;;;;34277:4:0::1;34256:10;:26::i;35674:309::-:0;-1:-1:-1;;;;;;;;;;;10600:16:0;10611:4;10600:10;:16::i;:::-;35756:34:::1;-1:-1:-1::0;;;;;;;;;;;35787:1:0::1;35756:7;:34::i;:::-;35755:35;35747:100;;;;-1:-1:-1::0;;;35747:100:0::1;;;;;;;:::i;:::-;35858:39;-1:-1:-1::0;;;;;;;;;;;7259:10:0;35858:11:::1;:39::i;:::-;35908:36;-1:-1:-1::0;;;;;;;;;;;35941:1:0::1;35908:10;:36::i;:::-;-1:-1:-1::0;35955:7:0::1;:20:::0;;-1:-1:-1;;;;;;35955:20:0::1;::::0;;35674:309::o;41601:213::-;-1:-1:-1;;;;;;;;;;;10600:16:0;10611:4;10600:10;:16::i;:::-;41690:6:::1;41686:121;41704:4;:11;41700:1;:15;41686:121;;;41759:4;-1:-1:-1::0;;;;;41744:30:0::1;;41775:4;41780:1;41775:7;;;;;;-1:-1:-1::0;;;41775:7:0::1;;;;;;;;;;;;;;;41783:10;;41744:50;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;6414:32:1;;;;6396:51;;6478:2;6463:18;;6456:34;6384:2;6369:18;;6351:145;41744:50:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;41716:3:0;::::1;::::0;::::1;:::i;:::-;;;;41686:121;;41823:109:::0;-1:-1:-1;;;;;;;;;;;10600:16:0;10611:4;10600:10;:16::i;:::-;-1:-1:-1;41904:10:0::1;:20:::0;41823:109::o;11004:147::-;11090:4;11114:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;11114:29:0;;;;;;;;;;;;;;;11004:147::o;20107:104::-;20163:13;20196:7;20189:14;;;;;:::i;24465:436::-;24558:4;7259:10;24558:4;24641:25;7259:10;24658:7;24641:9;:25::i;:::-;24614:52;;24705:15;24685:16;:35;;24677:85;;;;-1:-1:-1;;;24677:85:0;;15275:2:1;24677:85:0;;;15257:21:1;15314:2;15294:18;;;15287:30;15353:34;15333:18;;;15326:62;-1:-1:-1;;;15404:18:1;;;15397:35;15449:19;;24677:85:0;15247:227:1;24677:85:0;24798:60;24807:5;24814:7;24842:15;24823:16;:34;24798:8;:60::i;21512:193::-;21591:4;7259:10;21647:28;7259:10;21664:2;21668:6;21647:9;:28::i;34946:212::-;-1:-1:-1;;;;;;;;;;;10600:16:0;10611:4;10600:10;:16::i;:::-;35033:31:::1;-1:-1:-1::0;;;;;;;;;;;35056:7:0::1;35033;:31::i;:::-;35025:81;;;::::0;-1:-1:-1;;;35025:81:0;;11185:2:1;35025:81:0::1;::::0;::::1;11167:21:1::0;11224:2;11204:18;;;11197:30;11263:34;11243:18;;;11236:62;-1:-1:-1;;;11314:18:1;;;11307:35;11359:19;;35025:81:0::1;11157:227:1::0;35025:81:0::1;35116:34;-1:-1:-1::0;;;;;;;;;;;35142:7:0::1;35116:11;:34::i;36273:186::-:0;-1:-1:-1;;;;;;;;;;;10600:16:0;10611:4;10600:10;:16::i;:::-;36371:4:::1;36339:11;21280:18:::0;;;;;;;;;;;36396:10;36388:19:::1;;;::::0;::::1;;36418:33;36444:6;36418:25;:33::i;34301:223::-:0;-1:-1:-1;;;;;;;;;;;10600:16:0;10611:4;10600:10;:16::i;:::-;34392:31:::1;-1:-1:-1::0;;;;;;;;;;;34415:7:0::1;34392;:31::i;:::-;34391:32;34383:89;;;::::0;-1:-1:-1;;;34383:89:0;;11998:2:1;34383:89:0::1;::::0;::::1;11980:21:1::0;12037:2;12017:18;;;12010:30;12076:34;12056:18;;;12049:62;-1:-1:-1;;;12127:18:1;;;12120:42;12179:19;;34383:89:0::1;11970:234:1::0;34383:89:0::1;34483:33;-1:-1:-1::0;;;;;;;;;;;34508:7:0::1;34483:10;:33::i;34532:130::-:0;-1:-1:-1;;;;;;;;;;;10600:16:0;10611:4;10600:10;:16::i;:::-;-1:-1:-1;;;;;;34630:16:0;;;::::1;;::::0;;;:9:::1;:16;::::0;;;;:24;;-1:-1:-1;;34630:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34532:130::o;36468:112::-;-1:-1:-1;;;;;;;;;;;10600:16:0;10611:4;10600:10;:16::i;:::-;-1:-1:-1;36553:9:0::1;:19:::0;36468:112::o;21768:151::-;-1:-1:-1;;;;;21884:18:0;;;21857:7;21884:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;21768:151::o;35249:416::-;-1:-1:-1;;;;;;;;;;;10600:16:0;10611:4;10600:10;:16::i;:::-;-1:-1:-1;;;;;35346:22:0;::::1;35338:86;;;::::0;-1:-1:-1;;;35338:86:0;;10765:2:1;35338:86:0::1;::::0;::::1;10747:21:1::0;10804:2;10784:18;;;10777:30;10843:34;10823:18;;;10816:62;-1:-1:-1;;;10894:18:1;;;10887:49;10953:19;;35338:86:0::1;10737:241:1::0;35338:86:0::1;35444:32;-1:-1:-1::0;;;;;;;;;;;35467:8:0::1;35444:7;:32::i;:::-;35443:33;35435:98;;;;-1:-1:-1::0;;;35435:98:0::1;;;;;;;:::i;:::-;35544:39;-1:-1:-1::0;;;;;;;;;;;7259:10:0;35858:11:::1;:39::i;35544:::-;35594:34;-1:-1:-1::0;;;;;;;;;;;35619:8:0::1;35594:10;:34::i;:::-;-1:-1:-1::0;35639:7:0::1;:18:::0;;-1:-1:-1;;;;;;35639:18:0::1;-1:-1:-1::0;;;;;35639:18:0;;;::::1;::::0;;;::::1;::::0;;35249:416::o;28099:380::-;-1:-1:-1;;;;;28235:19:0;;28227:68;;;;-1:-1:-1;;;28227:68:0;;14459:2:1;28227:68:0;;;14441:21:1;14498:2;14478:18;;;14471:30;14537:34;14517:18;;;14510:62;-1:-1:-1;;;14588:18:1;;;14581:34;14632:19;;28227:68:0;14431:226:1;28227:68:0;-1:-1:-1;;;;;28314:21:0;;28306:68;;;;-1:-1:-1;;;28306:68:0;;9293:2:1;28306:68:0;;;9275:21:1;9332:2;9312:18;;;9305:30;9371:34;9351:18;;;9344:62;-1:-1:-1;;;9422:18:1;;;9415:32;9464:19;;28306:68:0;9265:224:1;28306:68:0;-1:-1:-1;;;;;28387:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;28439:32;;6839:25:1;;;28439:32:0;;6812:18:1;28439:32:0;;;;;;;28099:380;;;:::o;28770:453::-;28905:24;28932:25;28942:5;28949:7;28932:9;:25::i;:::-;28905:52;;-1:-1:-1;;28972:16:0;:37;28968:248;;29054:6;29034:16;:26;;29026:68;;;;-1:-1:-1;;;29026:68:0;;10407:2:1;29026:68:0;;;10389:21:1;10446:2;10426:18;;;10419:30;10485:31;10465:18;;;10458:59;10534:18;;29026:68:0;10379:179:1;29026:68:0;29138:51;29147:5;29154:7;29182:6;29163:16;:25;29138:8;:51::i;:::-;28770:453;;;;:::o;36651:2358::-;-1:-1:-1;;;;;36783:18:0;;36775:68;;;;-1:-1:-1;;;36775:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36862:16:0;;36854:64;;;;-1:-1:-1;;;36854:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36935:13:0;;;;;;:9;:13;;;;;;;;36931:124;;36987:25;37005:6;36987:13;36997:2;-1:-1:-1;;;;;21280:18:0;21253:7;21280:18;;;;;;;;;;;;21179:127;36987:13;:17;;:25::i;:::-;36973:9;;:39;;36965:78;;;;-1:-1:-1;;;36965:78:0;;9696:2:1;36965:78:0;;;9678:21:1;9735:2;9715:18;;;9708:30;9774:28;9754:18;;;9747:56;9820:18;;36965:78:0;9668:176:1;36965:78:0;37126:26;;:::i;:::-;-1:-1:-1;;;;;37177:15:0;;:9;:15;;;;;;;;;;;37163:29;;37205:21;;:::i;:::-;37252:28;-1:-1:-1;;;;;;;;;;;37275:4:0;37252:7;:28::i;:::-;37251:29;37250:64;;;;;37287:26;-1:-1:-1;;;;;;;;;;;37310:2:0;37287:7;:26::i;:::-;37286:27;37250:64;:107;;;;-1:-1:-1;37320:36:0;-1:-1:-1;;;;;;;;;;;7259:10:0;11004:147;:::i;37320:36::-;37319:37;37250:107;37238:119;;;;37381:28;-1:-1:-1;;;;;;;;;;;37404:4:0;37381:7;:28::i;:::-;37380:62;;;;37415:26;-1:-1:-1;;;;;;;;;;;37438:2:0;37415:7;:26::i;:::-;37368:74;;:9;;;:74;37471:11;;:21;-1:-1:-1;37471:21:0;37463:72;;;;-1:-1:-1;;;37463:72:0;;;;;;;:::i;:::-;37559:22;-1:-1:-1;;;;;;;;;;;37578:2:0;37559:7;:22::i;:::-;:43;;;;-1:-1:-1;37586:16:0;;;;37585:17;37559:43;37556:421;;;37660:4;37619:20;21280:18;;;;;;;;;;;37684:19;;37681:285;;37757:13;;-1:-1:-1;;;;;37757:13:0;21253:7;21280:18;;;;;;;;;;;37747:40;;37783:3;;37747:31;;37776:1;;37747:24;:28;;:31::i;:::-;:35;;:40::i;:::-;37729:15;:58;37726:164;;;37840:13;;-1:-1:-1;;;;;37840:13:0;21253:7;21280:18;;;;;;;;;;;37830:40;;37866:3;;37830:31;;37859:1;;37830:24;21179:127;37830:40;37812:58;;37726:164;37908:42;37934:15;37908:25;:42::i;:::-;37556:421;;37992:9;;:23;;;;-1:-1:-1;38006:9:0;;;;38005:10;37992:23;:44;;;;-1:-1:-1;38020:16:0;;;;38019:17;37992:44;37989:521;;;38071:6;38097:22;-1:-1:-1;;;;;;;;;;;38116:2:0;38097:7;:22::i;:::-;38092:254;;;38178:26;38197:6;38178:18;:26::i;:::-;38163:11;;;38154:50;;-1:-1:-1;38092:254:0;;;38228:32;-1:-1:-1;;;;;;;;;;;7259:10:0;11004:147;:::i;38228:32::-;38225:121;;;38305:25;38323:6;38305:17;:25::i;:::-;38290:11;;;38281:49;;-1:-1:-1;38225:121:0;38377:23;38392:7;38377:14;:23::i;:::-;38363:11;;;:37;;;38420:21;;38417:82;;38472:11;;;;38462:21;;;;:::i;:::-;;;38417:82;37989:521;;38565:11;;-1:-1:-1;;;;;38547:15:0;;;38574:1;38547:15;;;38565:11;38547:15;;;;;;;38565:20;;;;38547:38;;;38607:13;;;;;;;;:23;;38579:6;;38574:1;38607:23;;38579:6;;38607:23;:::i;:::-;;;;;;;;38663:2;-1:-1:-1;;;;;38648:26:0;38657:4;-1:-1:-1;;;;;38648:26:0;;38667:6;38648:26;;;;6839:25:1;;6827:2;6812:18;;6794:76;38648:26:0;;;;;;;;38700:11;;;;:15;;;;38699:30;;-1:-1:-1;38720:9:0;;38699:30;:44;;;;-1:-1:-1;38734:9:0;;;;38733:10;38699:44;:65;;;;-1:-1:-1;38748:16:0;;;;38747:17;38699:65;38696:123;;;38781:26;38789:4;38795:8;38804:1;38795:11;;;;38781:7;:26::i;:::-;38835:11;;;;:15;;;;38834:30;;-1:-1:-1;38855:9:0;;38834:30;:44;;;;-1:-1:-1;38869:9:0;;;;38868:10;38834:44;:65;;;;-1:-1:-1;38883:16:0;;;;38882:17;38834:65;38831:121;;;38916:24;38922:4;38928:8;38937:1;38928:11;;;;38916:5;:24::i;:::-;36651:2358;;;;;:::o;11455:105::-;11522:30;11533:4;7259:10;11522;:30::i;:::-;11455:105;:::o;15053:239::-;15137:22;15145:4;15151:7;15137;:22::i;:::-;15133:152;;;15208:5;15176:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;15176:29:0;;;;;;;;;;:37;;-1:-1:-1;;15176:37:0;;;15233:40;7259:10;;15176:12;;15233:40;;15208:5;15233:40;15053:239;;:::o;14059:112::-;14138:25;14149:4;14155:7;14138:10;:25::i;40230:589::-;33889:16;:23;;-1:-1:-1;;33889:23:0;33908:4;33889:23;;;40341:16:::1;::::0;;40355:1:::1;40341:16:::0;;;;;::::1;::::0;;-1:-1:-1;;40341:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;40341:16:0::1;40317:40;;40386:4;40368;40373:1;40368:7;;;;;;-1:-1:-1::0;;;40368:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;40368:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;40412:15:::1;::::0;:22:::1;::::0;;-1:-1:-1;;;40412:22:0;;;;:15;;;::::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;40368:7;;40412:22;;;;;:15;:22;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40402:4;40407:1;40402:7;;;;;;-1:-1:-1::0;;;40402:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;40402:32:0;;::::1;:7;::::0;;::::1;::::0;;;;;:32;40479:15:::1;::::0;40447:62:::1;::::0;40464:4:::1;::::0;40479:15:::1;40497:11:::0;40447:8:::1;:62::i;:::-;40522:15;::::0;40664:18:::1;::::0;40522:199:::1;::::0;-1:-1:-1;;;40522:199:0;;-1:-1:-1;;;;;40522:15:0;;::::1;::::0;:66:::1;::::0;:199:::1;::::0;40603:11;;40522:15:::1;::::0;40645:4;;40664:18;::::1;::::0;40695:15:::1;::::0;40522:199:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;40739:72;40770:11;40796:4;40739:72;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;33935:16:0;:24;;-1:-1:-1;;33935:24:0;;;40230:589::o;30709:181::-;30767:7;;30799:5;30803:1;30799;:5;:::i;:::-;30787:17;;30828:1;30823;:6;;30815:46;;;;-1:-1:-1;;;30815:46:0;;10051:2:1;30815:46:0;;;10033:21:1;10090:2;10070:18;;;10063:30;10129:29;10109:18;;;10102:57;10176:18;;30815:46:0;10023:177:1;30815:46:0;30881:1;30709:181;-1:-1:-1;;;30709:181:0:o;31242:250::-;31300:7;31324:6;31320:47;;-1:-1:-1;31354:1:0;31347:8;;31320:47;31379:9;31391:5;31395:1;31391;:5;:::i;:::-;31379:17;-1:-1:-1;31424:1:0;31415:5;31419:1;31379:17;31415:5;:::i;:::-;:10;31407:56;;;;-1:-1:-1;;;31407:56:0;;12828:2:1;31407:56:0;;;12810:21:1;12867:2;12847:18;;;12840:30;12906:34;12886:18;;;12879:62;-1:-1:-1;;;12957:18:1;;;12950:31;12998:19;;31407:56:0;12800:223:1;31502:132:0;31560:7;31587:39;31591:1;31594;31587:39;;;;;;;;;;;;;;;;;:3;:39::i;40950:247::-;41013:20;41035:16;32747:5;41107:9;;32747:5;41093:23;;;;:::i;:::-;41083:34;;:6;:34;:::i;:::-;:48;;;;:::i;:::-;41064:67;;32747:5;41166:9;;41157:6;:18;;;;:::i;:::-;:32;;;;:::i;:::-;41142:47;;40950:247;;;:::o;41208:242::-;41270:20;41292:15;32747:5;41363:8;;32747:5;41349:22;;;;:::i;:::-;41339:33;;:6;:33;:::i;:::-;:47;;;;:::i;:::-;41320:66;;32747:5;41420:8;;41411:6;:17;;;;:::i;41460:129::-;41519:11;32747:5;41562;;41553:6;:14;;;;:::i;:::-;:28;;;;:::i;40056:164::-;40127:11;;40124:89;;40155:46;40171:5;40186:4;40193:7;40155:15;:46::i;39022:601::-;-1:-1:-1;;;;;39107:21:0;;39099:67;;;;-1:-1:-1;;;39099:67:0;;13651:2:1;39099:67:0;;;13633:21:1;13690:2;13670:18;;;13663:30;13729:34;13709:18;;;13702:62;-1:-1:-1;;;13780:18:1;;;13773:31;13821:19;;39099:67:0;13623:223:1;39099:67:0;-1:-1:-1;;;;;39266:18:0;;39241:22;39266:18;;;;;;;;;;;39303:24;;;;39295:71;;;;-1:-1:-1;;;39295:71:0;;8464:2:1;39295:71:0;;;8446:21:1;8503:2;8483:18;;;8476:30;8542:34;8522:18;;;8515:62;-1:-1:-1;;;8593:18:1;;;8586:32;8635:19;;39295:71:0;8436:224:1;39295:71:0;-1:-1:-1;;;;;39402:18:0;;:9;:18;;;;;;;;;;39423:23;;;39402:44;;39468:21;;;;:31;;39440:6;;39402:9;39468:31;;39440:6;;39468:31;:::i;:::-;;;;-1:-1:-1;;39517:37:0;;6839:25:1;;;39543:1:0;;-1:-1:-1;;;;;39517:37:0;;;;;6827:2:1;6812:18;39517:37:0;;;;;;;42023:50:::1;41940:142:::0;;:::o;11850:505::-;11939:22;11947:4;11953:7;11939;:22::i;:::-;11934:414;;12127:41;12155:7;-1:-1:-1;;;;;12127:41:0;12165:2;12127:19;:41::i;:::-;12241:38;12269:4;12276:2;12241:19;:38::i;:::-;12032:270;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;12032:270:0;;;;;;;;;;-1:-1:-1;;;11978:358:0;;;;;;;:::i;14683:238::-;14767:22;14775:4;14781:7;14767;:22::i;:::-;14762:152;;14806:12;;;;:6;:12;;;;;;;;-1:-1:-1;;;;;14806:29:0;;;;;;;;;:36;;-1:-1:-1;;14806:36:0;14838:4;14806:36;;;14889:12;7259:10;;7179:98;14889:12;-1:-1:-1;;;;;14862:40:0;14880:7;-1:-1:-1;;;;;14862:40:0;14874:4;14862:40;;;;;;;;;;14683:238;;:::o;31642:278::-;31728:7;31763:12;31756:5;31748:28;;;;-1:-1:-1;;;31748:28:0;;;;;;;;:::i;:::-;-1:-1:-1;31787:9:0;31799:5;31803:1;31799;:5;:::i;:::-;31787:17;31642:278;-1:-1:-1;;;;;31642:278:0:o;25380:671::-;-1:-1:-1;;;;;25511:18:0;;25503:68;;;;-1:-1:-1;;;25503:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25590:16:0;;25582:64;;;;-1:-1:-1;;;25582:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25732:15:0;;25710:19;25732:15;;;;;;;;;;;25766:21;;;;25758:72;;;;-1:-1:-1;;;25758:72:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25866:15:0;;;:9;:15;;;;;;;;;;;25884:20;;;25866:38;;25926:13;;;;;;;;:23;;25898:6;;25866:9;25926:23;;25898:6;;25926:23;:::i;:::-;;;;;;;;25982:2;-1:-1:-1;;;;;25967:26:0;25976:4;-1:-1:-1;;;;;25967:26:0;;25986:6;25967:26;;;;6839:25:1;;6827:2;6812:18;;6794:76;25967:26:0;;;;;;;;26006:37;41940:142;16852:451;16927:13;16953:19;16985:10;16989:6;16985:1;:10;:::i;:::-;:14;;16998:1;16985:14;:::i;:::-;16975:25;;;;;;-1:-1:-1;;;16975:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16975:25:0;;16953:47;;-1:-1:-1;;;17011:6:0;17018:1;17011:9;;;;;;-1:-1:-1;;;17011:9:0;;;;;;;;;;;;:15;-1:-1:-1;;;;;17011:15:0;;;;;;;;;-1:-1:-1;;;17037:6:0;17044:1;17037:9;;;;;;-1:-1:-1;;;17037:9:0;;;;;;;;;;;;:15;-1:-1:-1;;;;;17037:15:0;;;;;;;;-1:-1:-1;17068:9:0;17080:10;17084:6;17080:1;:10;:::i;:::-;:14;;17093:1;17080:14;:::i;:::-;17068:26;;17063:135;17100:1;17096;:5;17063:135;;;-1:-1:-1;;;17148:5:0;17156:3;17148:11;17135:25;;;;;-1:-1:-1;;;17135:25:0;;;;;;;;;;;;17123:6;17130:1;17123:9;;;;;;-1:-1:-1;;;17123:9:0;;;;;;;;;;;;:37;-1:-1:-1;;;;;17123:37:0;;;;;;;;-1:-1:-1;17185:1:0;17175:11;;;;;17103:3;;;:::i;:::-;;;17063:135;;;-1:-1:-1;17216:10:0;;17208:55;;;;-1:-1:-1;;;17208:55:0;;7699:2:1;17208:55:0;;;7681:21:1;;;7718:18;;;7711:30;7777:34;7757:18;;;7750:62;7829:18;;17208:55:0;7671:182:1;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:134:1:-;82:20;;111:31;82:20;111:31;:::i;:::-;63:85;;;:::o;153:257::-;212:6;265:2;253:9;244:7;240:23;236:32;233:2;;;286:6;278;271:22;233:2;330:9;317:23;349:31;374:5;349:31;:::i;415:261::-;485:6;538:2;526:9;517:7;513:23;509:32;506:2;;;559:6;551;544:22;506:2;596:9;590:16;615:31;640:5;615:31;:::i;681:398::-;749:6;757;810:2;798:9;789:7;785:23;781:32;778:2;;;831:6;823;816:22;778:2;875:9;862:23;894:31;919:5;894:31;:::i;:::-;944:5;-1:-1:-1;1001:2:1;986:18;;973:32;1014:33;973:32;1014:33;:::i;:::-;1066:7;1056:17;;;768:311;;;;;:::o;1084:466::-;1161:6;1169;1177;1230:2;1218:9;1209:7;1205:23;1201:32;1198:2;;;1251:6;1243;1236:22;1198:2;1295:9;1282:23;1314:31;1339:5;1314:31;:::i;:::-;1364:5;-1:-1:-1;1421:2:1;1406:18;;1393:32;1434:33;1393:32;1434:33;:::i;:::-;1188:362;;1486:7;;-1:-1:-1;;;1540:2:1;1525:18;;;;1512:32;;1188:362::o;1555:392::-;1620:6;1628;1681:2;1669:9;1660:7;1656:23;1652:32;1649:2;;;1702:6;1694;1687:22;1649:2;1746:9;1733:23;1765:31;1790:5;1765:31;:::i;:::-;1815:5;-1:-1:-1;1872:2:1;1857:18;;1844:32;1885:30;1844:32;1885:30;:::i;1952:325::-;2020:6;2028;2081:2;2069:9;2060:7;2056:23;2052:32;2049:2;;;2102:6;2094;2087:22;2049:2;2146:9;2133:23;2165:31;2190:5;2165:31;:::i;:::-;2215:5;2267:2;2252:18;;;;2239:32;;-1:-1:-1;;;2039:238:1:o;2282:1177::-;2366:6;2397:2;2440;2428:9;2419:7;2415:23;2411:32;2408:2;;;2461:6;2453;2446:22;2408:2;2506:9;2493:23;2535:18;2576:2;2568:6;2565:14;2562:2;;;2597:6;2589;2582:22;2562:2;2640:6;2629:9;2625:22;2615:32;;2685:7;2678:4;2674:2;2670:13;2666:27;2656:2;;2712:6;2704;2697:22;2656:2;2753;2740:16;2775:2;2771;2768:10;2765:2;;;2781:18;;:::i;:::-;2827:2;2824:1;2820:10;2859:2;2853:9;2922:2;2918:7;2913:2;2909;2905:11;2901:25;2893:6;2889:38;2977:6;2965:10;2962:22;2957:2;2945:10;2942:18;2939:46;2936:2;;;2988:18;;:::i;:::-;3024:2;3017:22;3074:18;;;3108:15;;;;-1:-1:-1;3143:11:1;;;3173;;;3169:20;;3166:33;-1:-1:-1;3163:2:1;;;3217:6;3209;3202:22;3163:2;3244:6;3235:15;;3259:169;3273:2;3270:1;3267:9;3259:169;;;3330:23;3349:3;3330:23;:::i;:::-;3318:36;;3291:1;3284:9;;;;;3374:12;;;;3406;;3259:169;;;-1:-1:-1;3447:6:1;2377:1082;-1:-1:-1;;;;;;;;2377:1082:1:o;3464:255::-;3531:6;3584:2;3572:9;3563:7;3559:23;3555:32;3552:2;;;3605:6;3597;3590:22;3552:2;3642:9;3636:16;3661:28;3683:5;3661:28;:::i;3724:190::-;3783:6;3836:2;3824:9;3815:7;3811:23;3807:32;3804:2;;;3857:6;3849;3842:22;3804:2;-1:-1:-1;3885:23:1;;3794:120;-1:-1:-1;3794:120:1:o;3919:325::-;3987:6;3995;4048:2;4036:9;4027:7;4023:23;4019:32;4016:2;;;4069:6;4061;4054:22;4016:2;4110:9;4097:23;4087:33;;4170:2;4159:9;4155:18;4142:32;4183:31;4208:5;4183:31;:::i;4249:306::-;4307:6;4360:2;4348:9;4339:7;4335:23;4331:32;4328:2;;;4381:6;4373;4366:22;4328:2;4412:23;;-1:-1:-1;;;;;;4464:32:1;;4454:43;;4444:2;;4516:6;4508;4501:22;4755:463;4808:3;4846:5;4840:12;4873:6;4868:3;4861:19;4899:4;4928:2;4923:3;4919:12;4912:19;;4965:2;4958:5;4954:14;4986:3;4998:195;5012:6;5009:1;5006:13;4998:195;;;5077:13;;-1:-1:-1;;;;;5073:39:1;5061:52;;5133:12;;;;5168:15;;;;5109:1;5027:9;4998:195;;;-1:-1:-1;5209:3:1;;4816:402;-1:-1:-1;;;;;4816:402:1:o;5223:786::-;5634:25;5629:3;5622:38;5604:3;5689:6;5683:13;5705:62;5760:6;5755:2;5750:3;5746:12;5739:4;5731:6;5727:17;5705:62;:::i;:::-;-1:-1:-1;;;5826:2:1;5786:16;;;5818:11;;;5811:40;5876:13;;5898:63;5876:13;5947:2;5939:11;;5932:4;5920:17;;5898:63;:::i;:::-;5981:17;6000:2;5977:26;;5612:397;-1:-1:-1;;;;5612:397:1:o;7109:383::-;7258:2;7247:9;7240:21;7221:4;7290:6;7284:13;7333:6;7328:2;7317:9;7313:18;7306:34;7349:66;7408:6;7403:2;7392:9;7388:18;7383:2;7375:6;7371:15;7349:66;:::i;:::-;7476:2;7455:15;-1:-1:-1;;7451:29:1;7436:45;;;;7483:2;7432:54;;7230:262;-1:-1:-1;;7230:262:1:o;7858:399::-;8060:2;8042:21;;;8099:2;8079:18;;;8072:30;8138:34;8133:2;8118:18;;8111:62;-1:-1:-1;;;8204:2:1;8189:18;;8182:33;8247:3;8232:19;;8032:225::o;11389:402::-;11591:2;11573:21;;;11630:2;11610:18;;;11603:30;11669:34;11664:2;11649:18;;11642:62;-1:-1:-1;;;11735:2:1;11720:18;;11713:36;11781:3;11766:19;;11563:228::o;13028:416::-;13230:2;13212:21;;;13269:2;13249:18;;;13242:30;13308:34;13303:2;13288:18;;13281:62;-1:-1:-1;;;13374:2:1;13359:18;;13352:50;13434:3;13419:19;;13202:242::o;13851:401::-;14053:2;14035:21;;;14092:2;14072:18;;;14065:30;14131:34;14126:2;14111:18;;14104:62;-1:-1:-1;;;14197:2:1;14182:18;;14175:35;14242:3;14227:19;;14025:227::o;16077:332::-;16284:6;16273:9;16266:25;16327:2;16322;16311:9;16307:18;16300:30;16247:4;16347:56;16399:2;16388:9;16384:18;16376:6;16347:56;:::i;:::-;16339:64;16256:153;-1:-1:-1;;;;16256:153:1:o;16414:582::-;16713:6;16702:9;16695:25;16756:6;16751:2;16740:9;16736:18;16729:34;16799:3;16794:2;16783:9;16779:18;16772:31;16676:4;16820:57;16872:3;16861:9;16857:19;16849:6;16820:57;:::i;:::-;-1:-1:-1;;;;;16913:32:1;;;;16908:2;16893:18;;16886:60;-1:-1:-1;16977:3:1;16962:19;16955:35;16812:65;16685:311;-1:-1:-1;;;16685:311:1:o;17190:128::-;17230:3;17261:1;17257:6;17254:1;17251:13;17248:2;;;17267:18;;:::i;:::-;-1:-1:-1;17303:9:1;;17238:80::o;17323:217::-;17363:1;17389;17379:2;;-1:-1:-1;;;17414:31:1;;17468:4;17465:1;17458:15;17496:4;17421:1;17486:15;17379:2;-1:-1:-1;17525:9:1;;17369:171::o;17545:168::-;17585:7;17651:1;17647;17643:6;17639:14;17636:1;17633:21;17628:1;17621:9;17614:17;17610:45;17607:2;;;17658:18;;:::i;:::-;-1:-1:-1;17698:9:1;;17597:116::o;17718:125::-;17758:4;17786:1;17783;17780:8;17777:2;;;17791:18;;:::i;:::-;-1:-1:-1;17828:9:1;;17767:76::o;17848:258::-;17920:1;17930:113;17944:6;17941:1;17938:13;17930:113;;;18020:11;;;18014:18;18001:11;;;17994:39;17966:2;17959:10;17930:113;;;18061:6;18058:1;18055:13;18052:2;;;-1:-1:-1;;18096:1:1;18078:16;;18071:27;17901:205::o;18111:136::-;18150:3;18178:5;18168:2;;18187:18;;:::i;:::-;-1:-1:-1;;;18223:18:1;;18158:89::o;18252:380::-;18331:1;18327:12;;;;18374;;;18395:2;;18449:4;18441:6;18437:17;18427:27;;18395:2;18502;18494:6;18491:14;18471:18;18468:38;18465:2;;;18548:10;18543:3;18539:20;18536:1;18529:31;18583:4;18580:1;18573:15;18611:4;18608:1;18601:15;18465:2;;18307:325;;;:::o;18637:135::-;18676:3;-1:-1:-1;;18697:17:1;;18694:2;;;18717:18;;:::i;:::-;-1:-1:-1;18764:1:1;18753:13;;18684:88::o;18777:127::-;18838:10;18833:3;18829:20;18826:1;18819:31;18869:4;18866:1;18859:15;18893:4;18890:1;18883:15;18909:127;18970:10;18965:3;18961:20;18958:1;18951:31;19001:4;18998:1;18991:15;19025:4;19022:1;19015:15;19041:131;-1:-1:-1;;;;;19116:31:1;;19106:42;;19096:2;;19162:1;19159;19152:12;19177:118;19263:5;19256:13;19249:21;19242:5;19239:32;19229:2;;19285:1;19282;19275:12

Swarm Source

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