Token ELONTC

 

Overview ERC-20

Price
$0.00 @ 0.000000 MATIC
Fully Diluted Market Cap
Total Supply:
199,000 ELONTC

Holders:
67 addresses

Transfers:
-

Contract:
0xecf7EfC68218d2F9C4Bd1FbC68cb81F794AB3A2A0xecf7EfC68218d2F9C4Bd1FbC68cb81F794AB3A2A

Decimals:
18

Social Profiles:
Not Available, Update ?

 
Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
ELONTC

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-02-08
*/

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

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

/*
 *
 * ELON TWEET COIN (ELONTC)
 *
 * Website: https://elontc.com
 *
 */ 

// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

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

// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

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

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

/**
 * @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, uint 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, uint value);

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint);

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

    /**
     * @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, uint 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 (uint);

    /**
     * @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, uint 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,
        uint amount
    ) external returns (bool);
}

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

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

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

/**
 * @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.openzeppelin.com/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 => uint) private _balances;

    mapping(address => mapping(address => uint)) private _allowances;

    uint 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 (uint) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint) {
        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, uint 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 (uint) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint`, 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, uint 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 `uint`.
     *
     * 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,
        uint 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, uint 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, uint subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint 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 `from` to `to`.
     *
     * 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,
        uint 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);

        uint fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _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, uint amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _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, uint amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

        uint accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _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,
        uint 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,
        uint amount
    ) internal virtual {
        uint currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint).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,
        uint 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,
        uint amount
    ) internal virtual {}
}

// OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol)

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint a, uint b) internal pure returns (bool, uint) {
        unchecked {
            uint c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint a, uint b) internal pure returns (bool, uint) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint a, uint b) internal pure returns (bool, uint) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint a, uint b) internal pure returns (bool, uint) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint a, uint b) internal pure returns (bool, uint) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint a, uint b) internal pure returns (uint) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint a, uint b) internal pure returns (uint) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint a, uint b) internal pure returns (uint) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint a, uint b) internal pure returns (uint) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint a, uint b) internal pure returns (uint) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint a,
        uint b,
        string memory errorMessage
    ) internal pure returns (uint) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint a,
        uint b,
        string memory errorMessage
    ) internal pure returns (uint) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint a,
        uint b,
        string memory errorMessage
    ) internal pure returns (uint) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

    function allPairs(uint) external view returns (address pair);

    function allPairsLength() external view returns (uint);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint);

    function balanceOf(address owner) external view returns (uint);

    function allowance(address owner, address spender)
        external
        view
        returns (uint);

    function approve(address spender, uint value) external returns (bool);

    function transfer(address to, uint value) external returns (bool);

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint);

    function price1CumulativeLast() external view returns (uint);

    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);

    function burn(address to)
        external
        returns (uint amount0, uint amount1);

    function swap(
        uint amount0Out,
        uint amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    )
        external
        returns (
            uint amountA,
            uint amountB,
            uint liquidity
        );

    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    )
        external
        payable
        returns (
            uint amountToken,
            uint amountETH,
            uint liquidity
        );

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

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

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

interface ISwapManager {
    function swapToUsdc(uint tokenAmount) external;
    function addLiquidity(uint tokenAmount, uint usdcAmount) external;
}

contract ELONTC is ERC20, Ownable {
    using SafeMath for uint;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);
    address public constant usdc = address(0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174);

    bool private swapping;

    address public marketingWallet;
    address public buybackWallet;

    ISwapManager public swapManager;
    uint public maxTransactionAmount;
    uint public swapTokensAtAmount;
    uint public maxWallet;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = false;

    uint public buyTotalFees;
    uint public buyMarketingFee;
    uint public buyLiquidityFee;
    uint public buyBuybackFee;

    uint public sellTotalFees;
    uint public sellMarketingFee;
    uint public sellLiquidityFee;
    uint public sellBuybackFee;

    uint public tokensForMarketing;
    uint public tokensForLiquidity;
    uint public tokensForBuyback;

    // exlcude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) public automatedMarketMakerPairs;

    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event SwapManagerUpdated(
        address indexed newManager,
        address indexed oldManager
    );

    event MarketingWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event BuybackWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event SwapAndLiquify(
        uint tokensSwapped,
        uint usdcReceived,
        uint tokensIntoLiquidity
    );

    constructor() ERC20("ELONTC", "ELONTC") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506);

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        address pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), usdc);
            
        uniswapV2Pair = pair;
        excludeFromMaxTransaction(pair, true);
        _setAutomatedMarketMakerPair(pair, true);

        uint totalSupply = 199_000 * 1e18;

        maxTransactionAmount = totalSupply * 5 / 1000;
        maxWallet = totalSupply / 100;
        swapTokensAtAmount = totalSupply / 2000;

        buyMarketingFee = 1;
        buyLiquidityFee = 1;
        buyBuybackFee = 3;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyBuybackFee;

        sellMarketingFee = 1;
        sellLiquidityFee = 1;
        sellBuybackFee = 3;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellBuybackFee;

        marketingWallet = address(0x9d84a7FD53940c7E8d02B1B3ee74f0c37800c2AA);
        buybackWallet = address(0x3139059D0b23e88c5BA7E17cDC21cd6A860CB8bE);

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(deadAddress, true);
        excludeFromFees(marketingWallet, true);
        excludeFromFees(buybackWallet, true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(deadAddress, true);
        excludeFromMaxTransaction(marketingWallet, true);
        excludeFromMaxTransaction(buybackWallet, true);

        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        require (
            address(swapManager) != address(0), 
            "Need to set swap manager"
        );
        tradingActive = true;
        swapEnabled = true;
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 1000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        swapTokensAtAmount = newAmount;
        return true;
    }

    function updateMaxTxnAmount(uint newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / 1e18,
            "Cannot set maxTransactionAmount lower than 0.1%"
        );
        maxTransactionAmount = newNum * (10**18);
    }

    function updateMaxWalletAmount(uint newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set maxWallet lower than 0.5%"
        );
        maxWallet = newNum * (10**18);
    }

    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function updateSwapManager(address newManager) external onlyOwner {
        emit SwapManagerUpdated(newManager, address(swapManager));
        swapManager = ISwapManager(newManager);
        excludeFromFees(newManager, true);
        excludeFromMaxTransaction(newManager, true);
    }

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function setAutomatedMarketMakerPair(address pair, bool value)
        public
        onlyOwner
    {
        require(
            pair != uniswapV2Pair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateMarketingWallet(address newMarketingWallet)
        external
        onlyOwner
    {
        emit MarketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }

    function updateBuybackWallet(address newBuybackWallet) external onlyOwner {
        emit BuybackWalletUpdated(newBuybackWallet, buybackWallet);
        buybackWallet = newBuybackWallet;
    }

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    function _transfer(
        address from,
        address to,
        uint amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active."
                    );
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                if (transferDelayEnabled) {
                    if (
                        to != owner() &&
                        to != address(uniswapV2Router) &&
                        to != address(uniswapV2Pair) &&
                        !_isExcludedFromFees[from]
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number,
                            "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }

                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Sell transfer amount exceeds the maxTransactionAmount."
                    );
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        uint contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForBuyback += (fees * sellBuybackFee) / sellTotalFees;
            }

            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForBuyback += (fees * buyBuybackFee) / buyTotalFees;
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    function swapBack() private {
        uint contractBalance = balanceOf(address(this));
        uint totalTokensToSwap = tokensForMarketing +
            tokensForLiquidity +
            tokensForBuyback;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount * 20) {
            contractBalance = swapTokensAtAmount * 20;
        }

        uint liquidityTokens = (contractBalance * tokensForLiquidity) /
            totalTokensToSwap / 2;
        uint amountToSwapForUsdc = contractBalance.sub(liquidityTokens);

        uint initialUsdcBalance = IERC20(usdc).balanceOf(address(this));

        _approve(address(this), address(swapManager), amountToSwapForUsdc);
        swapManager.swapToUsdc(amountToSwapForUsdc);

        uint usdcBalance = IERC20(usdc).balanceOf(address(this)).sub(initialUsdcBalance);

        uint usdcForMarketing = usdcBalance.mul(tokensForMarketing).div(totalTokensToSwap);
        uint usdcForBuyback = usdcBalance.mul(tokensForBuyback).div(totalTokensToSwap);
        uint usdcForLiquidity = usdcBalance - usdcForMarketing - usdcForBuyback;

        tokensForMarketing = 0;
        tokensForLiquidity = 0;
        tokensForBuyback = 0;

        IERC20(usdc).transfer(marketingWallet, usdcForMarketing);

        if (liquidityTokens > 0 && usdcForLiquidity > 0) {
            _approve(address(this), address(swapManager), liquidityTokens);
            IERC20(usdc).approve(address(swapManager), usdcForLiquidity);

            swapManager.addLiquidity(liquidityTokens, usdcForLiquidity);

            emit SwapAndLiquify(
                amountToSwapForUsdc,
                usdcForLiquidity,
                tokensForLiquidity
            );
        }

        IERC20(usdc).transfer(buybackWallet, IERC20(usdc).balanceOf(address(this)));
    }
}

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":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"BuybackWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"MarketingWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"usdcReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newManager","type":"address"},{"indexed":true,"internalType":"address","name":"oldManager","type":"address"}],"name":"SwapManagerUpdated","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBuybackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","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":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBuybackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapManager","outputs":[{"internalType":"contract ISwapManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForBuyback","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"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"},{"inputs":[{"internalType":"address","name":"newBuybackWallet","type":"address"}],"name":"updateBuybackWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newManager","type":"address"}],"name":"updateSwapManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"usdc","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

60c06040526001600c60006101000a81548160ff0219169083151502179055506000600c60016101000a81548160ff0219169083151502179055506000600c60026101000a81548160ff0219169083151502179055506000600e60006101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600681526020017f454c4f4e544300000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f454c4f4e544300000000000000000000000000000000000000000000000000008152508160039081620000fb919062000d40565b5080600490816200010d919062000d40565b5050506200013062000124620005ff60201b60201c565b6200060760201b60201c565b6000731b02da8cb0d097eb8d57a175b88c7d8b4799750690506200015c816001620006cd60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000204919062000e91565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630732791bca1f2de4661ed88a30c99a7a9449aa841746040518363ffffffff1660e01b81526004016200025492919062000ed4565b6020604051808303816000875af115801562000274573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029a919062000e91565b90508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620002e3816001620006cd60201b60201c565b620002f68160016200073860201b60201c565b6000692a23cfc614d00e60000090506103e860058262000317919062000f30565b62000323919062000faa565b60098190555060648162000338919062000faa565b600b819055506107d0816200034e919062000faa565b600a8190555060016010819055506001601181905550600360128190555060125460115460105462000381919062000fe2565b6200038d919062000fe2565b600f81905550600160148190555060016015819055506003601681905550601654601554601454620003c0919062000fe2565b620003cc919062000fe2565b601381905550739d84a7fd53940c7e8d02b1b3ee74f0c37800c2aa600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550733139059d0b23e88c5ba7e17cdc21cd6a860cb8be600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200049e62000490620007d960201b60201c565b60016200080360201b60201c565b620004b13060016200080360201b60201c565b620004c661dead60016200080360201b60201c565b620004fb600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200080360201b60201c565b62000530600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200080360201b60201c565b6200055262000544620007d960201b60201c565b6001620006cd60201b60201c565b62000565306001620006cd60201b60201c565b6200057a61dead6001620006cd60201b60201c565b620005af600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620006cd60201b60201c565b620005e4600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620006cd60201b60201c565b620005f63382620008be60201b60201c565b5050506200117a565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620006dd62000a2b60201b60201c565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200081362000a2b60201b60201c565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620008b291906200103a565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000930576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200092790620010b8565b60405180910390fd5b620009446000838362000abc60201b60201c565b806002600082825462000958919062000fe2565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a0b9190620010eb565b60405180910390a362000a276000838362000ac160201b60201c565b5050565b62000a3b620005ff60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000a61620007d960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000aba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ab19062001158565b60405180910390fd5b565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000b4857607f821691505b60208210810362000b5e5762000b5d62000b00565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000bc87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000b89565b62000bd4868362000b89565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000c2162000c1b62000c158462000bec565b62000bf6565b62000bec565b9050919050565b6000819050919050565b62000c3d8362000c00565b62000c5562000c4c8262000c28565b84845462000b96565b825550505050565b600090565b62000c6c62000c5d565b62000c7981848462000c32565b505050565b5b8181101562000ca15762000c9560008262000c62565b60018101905062000c7f565b5050565b601f82111562000cf05762000cba8162000b64565b62000cc58462000b79565b8101602085101562000cd5578190505b62000ced62000ce48562000b79565b83018262000c7e565b50505b505050565b600082821c905092915050565b600062000d156000198460080262000cf5565b1980831691505092915050565b600062000d30838362000d02565b9150826002028217905092915050565b62000d4b8262000ac6565b67ffffffffffffffff81111562000d675762000d6662000ad1565b5b62000d73825462000b2f565b62000d8082828562000ca5565b600060209050601f83116001811462000db8576000841562000da3578287015190505b62000daf858262000d22565b86555062000e1f565b601f19841662000dc88662000b64565b60005b8281101562000df25784890151825560018201915060208501945060208101905062000dcb565b8683101562000e12578489015162000e0e601f89168262000d02565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000e598262000e2c565b9050919050565b62000e6b8162000e4c565b811462000e7757600080fd5b50565b60008151905062000e8b8162000e60565b92915050565b60006020828403121562000eaa5762000ea962000e27565b5b600062000eba8482850162000e7a565b91505092915050565b62000ece8162000e4c565b82525050565b600060408201905062000eeb600083018562000ec3565b62000efa602083018462000ec3565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000f3d8262000bec565b915062000f4a8362000bec565b925082820262000f5a8162000bec565b9150828204841483151762000f745762000f7362000f01565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000fb78262000bec565b915062000fc48362000bec565b92508262000fd75762000fd662000f7b565b5b828204905092915050565b600062000fef8262000bec565b915062000ffc8362000bec565b925082820190508082111562001017576200101662000f01565b5b92915050565b60008115159050919050565b62001034816200101d565b82525050565b600060208201905062001051600083018462001029565b92915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620010a0601f8362001057565b9150620010ad8262001068565b602082019050919050565b60006020820190508181036000830152620010d38162001091565b9050919050565b620010e58162000bec565b82525050565b6000602082019050620011026000830184620010da565b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200114060208362001057565b91506200114d8262001108565b602082019050919050565b60006020820190508181036000830152620011738162001131565b9050919050565b60805160a0516144f7620011b560003960008181610d5f015281816111ec0152611e71015260008181610bfd0152611e1901526144f76000f3fe608060405234801561001057600080fd5b506004361061035d5760003560e01c806375f0a874116101d3578063c18bc19511610104578063deab8aea116100a2578063f11a24d31161007c578063f11a24d3146109e8578063f2fde38b14610a06578063f637434214610a22578063f8b45b0514610a405761035d565b8063deab8aea1461098e578063e2f45605146109ac578063e884f260146109ca5761035d565b8063d257b34f116100de578063d257b34f146108f2578063d4090d2a14610922578063d85ba06314610940578063dd62ed3e1461095e5761035d565b8063c18bc1951461089a578063c876d0b9146108b6578063c8c8ebe4146108d45761035d565b80639a7a23d611610171578063aacebbe31161014b578063aacebbe314610814578063b62496f514610830578063bbc0c74214610860578063c02466681461087e5761035d565b80639a7a23d614610798578063a457c2d7146107b4578063a9059cbb146107e45761035d565b80638da5cb5b116101ad5780638da5cb5b146107225780639213691314610740578063924de9b71461075e57806395d89b411461077a5761035d565b806375f0a874146106dc5780637bce5a04146106fa5780638a8c523c146107185761035d565b80633e413bee116102ad5780636ddd17131161024b578063715018a611610225578063715018a61461067a57806371a5152214610684578063751039fc146106a25780637571336a146106c05761035d565b80636ddd17131461060e578063709d039d1461062c57806370a082311461064a5761035d565b80634c36fad7116102875780634c36fad7146105865780634fbee193146105a2578063540ba552146105d25780636a486a8e146105f05761035d565b80633e413bee1461052c57806349bd5a5e1461054a5780634a62bb65146105685761035d565b80631a8145bb1161031a57806323b872dd116102f457806323b872dd1461049057806327c8f835146104c0578063313ce567146104de57806339509351146104fc5761035d565b80631a8145bb146104385780631f3fed8f14610456578063203e727e146104745761035d565b806304dacd501461036257806306fdde031461037e578063095ea7b31461039c57806310d5de53146103cc5780631694505e146103fc57806318160ddd1461041a575b600080fd5b61037c60048036038101906103779190613326565b610a5e565b005b610386610b26565b60405161039391906133e3565b60405180910390f35b6103b660048036038101906103b1919061343b565b610bb8565b6040516103c39190613496565b60405180910390f35b6103e660048036038101906103e19190613326565b610bdb565b6040516103f39190613496565b60405180910390f35b610404610bfb565b6040516104119190613510565b60405180910390f35b610422610c1f565b60405161042f919061353a565b60405180910390f35b610440610c29565b60405161044d919061353a565b60405180910390f35b61045e610c2f565b60405161046b919061353a565b60405180910390f35b61048e60048036038101906104899190613555565b610c35565b005b6104aa60048036038101906104a59190613582565b610cd0565b6040516104b79190613496565b60405180910390f35b6104c8610cff565b6040516104d591906135e4565b60405180910390f35b6104e6610d05565b6040516104f3919061361b565b60405180910390f35b6105166004803603810190610511919061343b565b610d0e565b6040516105239190613496565b60405180910390f35b610534610d45565b60405161054191906135e4565b60405180910390f35b610552610d5d565b60405161055f91906135e4565b60405180910390f35b610570610d81565b60405161057d9190613496565b60405180910390f35b6105a0600480360381019061059b9190613326565b610d94565b005b6105bc60048036038101906105b79190613326565b610e72565b6040516105c99190613496565b60405180910390f35b6105da610ec8565b6040516105e7919061353a565b60405180910390f35b6105f8610ece565b604051610605919061353a565b60405180910390f35b610616610ed4565b6040516106239190613496565b60405180910390f35b610634610ee7565b6040516106419190613657565b60405180910390f35b610664600480360381019061065f9190613326565b610f0d565b604051610671919061353a565b60405180910390f35b610682610f55565b005b61068c610f69565b604051610699919061353a565b60405180910390f35b6106aa610f6f565b6040516106b79190613496565b60405180910390f35b6106da60048036038101906106d5919061369e565b610f9b565b005b6106e4610ffe565b6040516106f191906135e4565b60405180910390f35b610702611024565b60405161070f919061353a565b60405180910390f35b61072061102a565b005b61072a6110fb565b60405161073791906135e4565b60405180910390f35b610748611125565b604051610755919061353a565b60405180910390f35b610778600480360381019061077391906136de565b61112b565b005b610782611150565b60405161078f91906133e3565b60405180910390f35b6107b260048036038101906107ad919061369e565b6111e2565b005b6107ce60048036038101906107c9919061343b565b611286565b6040516107db9190613496565b60405180910390f35b6107fe60048036038101906107f9919061343b565b6112fd565b60405161080b9190613496565b60405180910390f35b61082e60048036038101906108299190613326565b611320565b005b61084a60048036038101906108459190613326565b6113e8565b6040516108579190613496565b60405180910390f35b610868611408565b6040516108759190613496565b60405180910390f35b6108986004803603810190610893919061369e565b61141b565b005b6108b460048036038101906108af9190613555565b6114cc565b005b6108be611567565b6040516108cb9190613496565b60405180910390f35b6108dc61157a565b6040516108e9919061353a565b60405180910390f35b61090c60048036038101906109079190613555565b611580565b6040516109199190613496565b60405180910390f35b61092a611661565b604051610937919061353a565b60405180910390f35b610948611667565b604051610955919061353a565b60405180910390f35b6109786004803603810190610973919061370b565b61166d565b604051610985919061353a565b60405180910390f35b6109966116f4565b6040516109a391906135e4565b60405180910390f35b6109b461171a565b6040516109c1919061353a565b60405180910390f35b6109d2611720565b6040516109df9190613496565b60405180910390f35b6109f061174c565b6040516109fd919061353a565b60405180910390f35b610a206004803603810190610a1b9190613326565b611752565b005b610a2a6117d5565b604051610a37919061353a565b60405180910390f35b610a486117db565b604051610a55919061353a565b60405180910390f35b610a666117e1565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f36da8748d344842083f47c18719136f60f0bcd2b5e969f56da5fca1b8667201760405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060038054610b359061377a565b80601f0160208091040260200160405190810160405280929190818152602001828054610b619061377a565b8015610bae5780601f10610b8357610100808354040283529160200191610bae565b820191906000526020600020905b815481529060010190602001808311610b9157829003601f168201915b5050505050905090565b600080610bc361185f565b9050610bd0818585611867565b600191505092915050565b601b6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60185481565b60175481565b610c3d6117e1565b670de0b6b3a76400006103e86001610c53610c1f565b610c5d91906137da565b610c67919061384b565b610c71919061384b565b811015610cb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610caa906138ee565b60405180910390fd5b670de0b6b3a764000081610cc791906137da565b60098190555050565b600080610cdb61185f565b9050610ce8858285611a30565b610cf3858585611abc565b60019150509392505050565b61dead81565b60006012905090565b600080610d1961185f565b9050610d3a818585610d2b858961166d565b610d35919061390e565b611867565b600191505092915050565b732791bca1f2de4661ed88a30c99a7a9449aa8417481565b7f000000000000000000000000000000000000000000000000000000000000000081565b600c60009054906101000a900460ff1681565b610d9c6117e1565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fb3fd0123f0059326c0d3771de6b52f7cc07866caff01a05b16473ae87d382bf960405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610e6481600161141b565b610e6f816001610f9b565b50565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60125481565b60135481565b600c60029054906101000a900460ff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f5d6117e1565b610f6760006127a9565b565b60165481565b6000610f796117e1565b6000600c60006101000a81548160ff0219169083151502179055506001905090565b610fa36117e1565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b6110326117e1565b600073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036110c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ba9061398e565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60145481565b6111336117e1565b80600c60026101000a81548160ff02191690831515021790555050565b60606004805461115f9061377a565b80601f016020809104026020016040519081016040528092919081815260200182805461118b9061377a565b80156111d85780601f106111ad576101008083540402835291602001916111d8565b820191906000526020600020905b8154815290600101906020018083116111bb57829003601f168201915b5050505050905090565b6111ea6117e1565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126f90613a20565b60405180910390fd5b611282828261286f565b5050565b60008061129161185f565b9050600061129f828661166d565b9050838110156112e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112db90613ab2565b60405180910390fd5b6112f18286868403611867565b60019250505092915050565b60008061130861185f565b9050611315818585611abc565b600191505092915050565b6113286117e1565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6760405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c6020528060005260406000206000915054906101000a900460ff1681565b600c60019054906101000a900460ff1681565b6114236117e1565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516114c09190613496565b60405180910390a25050565b6114d46117e1565b670de0b6b3a76400006103e860056114ea610c1f565b6114f491906137da565b6114fe919061384b565b611508919061384b565b81101561154a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154190613b44565b60405180910390fd5b670de0b6b3a76400008161155e91906137da565b600b8190555050565b600e60009054906101000a900460ff1681565b60095481565b600061158a6117e1565b620186a06001611598610c1f565b6115a291906137da565b6115ac919061384b565b8210156115ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e590613bd6565b60405180910390fd5b6103e860056115fb610c1f565b61160591906137da565b61160f919061384b565b821115611651576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164890613c68565b60405180910390fd5b81600a8190555060019050919050565b60195481565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b600061172a6117e1565b6000600e60006101000a81548160ff0219169083151502179055506001905090565b60115481565b61175a6117e1565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c090613cfa565b60405180910390fd5b6117d2816127a9565b50565b60155481565b600b5481565b6117e961185f565b73ffffffffffffffffffffffffffffffffffffffff166118076110fb565b73ffffffffffffffffffffffffffffffffffffffff161461185d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185490613d66565b60405180910390fd5b565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036118d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cd90613df8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611945576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193c90613e8a565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611a23919061353a565b60405180910390a3505050565b6000611a3c848461166d565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611ab65781811015611aa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9f90613ef6565b60405180910390fd5b611ab58484848403611867565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2290613f88565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b919061401a565b60405180910390fd5b60008103611bb357611bae83836000612910565b6127a4565b600c60009054906101000a900460ff16156122cc57611bd06110fb565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611c3e5750611c0e6110fb565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611c775750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611cb1575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611cca5750600560149054906101000a900460ff16155b156122cb57600c60019054906101000a900460ff16611dc457601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611d845750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611dc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dba90614086565b60405180910390fd5b5b600e60009054906101000a900460ff1615611fe257611de16110fb565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015611e6857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611ec057507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611f165750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611fe15743600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410611f9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f939061413e565b60405180910390fd5b43600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156120855750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561212c576009548111156120cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c6906141d0565b60405180910390fd5b600b546120db83610f0d565b826120e6919061390e565b1115612127576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211e9061423c565b60405180910390fd5b6122ca565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156121cf5750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561221e57600954811115612219576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612210906142ce565b60405180910390fd5b6122c9565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166122c857600b5461227b83610f0d565b82612286919061390e565b11156122c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122be9061423c565b60405180910390fd5b5b5b5b5b5b60006122d730610f0d565b90506000600a5482101590508080156122fc5750600c60029054906101000a900460ff165b80156123155750600560149054906101000a900460ff16155b801561236b5750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156123c15750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156124175750601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561245b576001600560146101000a81548160ff02191690831515021790555061243f612b86565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125115750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561251b57600090505b6000811561279457601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561257e57506000601354115b1561264b576125ab606461259d6013548861327790919063ffffffff16565b61328d90919063ffffffff16565b9050601354601454826125be91906137da565b6125c8919061384b565b601760008282546125d9919061390e565b92505081905550601354601554826125f191906137da565b6125fb919061384b565b6018600082825461260c919061390e565b925050819055506013546016548261262491906137da565b61262e919061384b565b6019600082825461263f919061390e565b92505081905550612770565b601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126a657506000600f54115b1561276f576126d360646126c5600f548861327790919063ffffffff16565b61328d90919063ffffffff16565b9050600f54601054826126e691906137da565b6126f0919061384b565b60176000828254612701919061390e565b92505081905550600f546011548261271991906137da565b612723919061384b565b60186000828254612734919061390e565b92505081905550600f546012548261274c91906137da565b612756919061384b565b60196000828254612767919061390e565b925050819055505b5b600081111561278557612784873083612910565b5b808561279191906142ee565b94505b61279f878787612910565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361297f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297690613f88565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e59061401a565b60405180910390fd5b6129f98383836132a3565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612a7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7690614394565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612b6d919061353a565b60405180910390a3612b808484846132a8565b50505050565b6000612b9130610f0d565b90506000601954601854601754612ba8919061390e565b612bb2919061390e565b90506000821480612bc35750600081145b15612bcf575050613275565b6014600a54612bde91906137da565b821115612bf7576014600a54612bf491906137da565b91505b600060028260185485612c0a91906137da565b612c14919061384b565b612c1e919061384b565b90506000612c3582856132ad90919063ffffffff16565b90506000732791bca1f2de4661ed88a30c99a7a9449aa8417473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612c8691906135e4565b602060405180830381865afa158015612ca3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cc791906143c9565b9050612cf630600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611867565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635a081b67836040518263ffffffff1660e01b8152600401612d51919061353a565b600060405180830381600087803b158015612d6b57600080fd5b505af1158015612d7f573d6000803e3d6000fd5b505050506000612e2582732791bca1f2de4661ed88a30c99a7a9449aa8417473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612dd691906135e4565b602060405180830381865afa158015612df3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e1791906143c9565b6132ad90919063ffffffff16565b90506000612e5086612e426017548561327790919063ffffffff16565b61328d90919063ffffffff16565b90506000612e7b87612e6d6019548661327790919063ffffffff16565b61328d90919063ffffffff16565b90506000818385612e8c91906142ee565b612e9691906142ee565b9050600060178190555060006018819055506000601981905550732791bca1f2de4661ed88a30c99a7a9449aa8417473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856040518363ffffffff1660e01b8152600401612f219291906143f6565b6020604051808303816000875af1158015612f40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f649190614434565b50600087118015612f755750600081115b1561312957612fa730600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1689611867565b732791bca1f2de4661ed88a30c99a7a9449aa8417473ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b81526004016130189291906143f6565b6020604051808303816000875af1158015613037573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061305b9190614434565b50600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639cd441da88836040518363ffffffff1660e01b81526004016130b9929190614461565b600060405180830381600087803b1580156130d357600080fd5b505af11580156130e7573d6000803e3d6000fd5b505050507f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56186826018546040516131209392919061448a565b60405180910390a15b732791bca1f2de4661ed88a30c99a7a9449aa8417473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16732791bca1f2de4661ed88a30c99a7a9449aa8417473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016131c991906135e4565b602060405180830381865afa1580156131e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061320a91906143c9565b6040518363ffffffff1660e01b81526004016132279291906143f6565b6020604051808303816000875af1158015613246573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061326a9190614434565b505050505050505050505b565b6000818361328591906137da565b905092915050565b6000818361329b919061384b565b905092915050565b505050565b505050565b600081836132bb91906142ee565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006132f3826132c8565b9050919050565b613303816132e8565b811461330e57600080fd5b50565b600081359050613320816132fa565b92915050565b60006020828403121561333c5761333b6132c3565b5b600061334a84828501613311565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561338d578082015181840152602081019050613372565b60008484015250505050565b6000601f19601f8301169050919050565b60006133b582613353565b6133bf818561335e565b93506133cf81856020860161336f565b6133d881613399565b840191505092915050565b600060208201905081810360008301526133fd81846133aa565b905092915050565b6000819050919050565b61341881613405565b811461342357600080fd5b50565b6000813590506134358161340f565b92915050565b60008060408385031215613452576134516132c3565b5b600061346085828601613311565b925050602061347185828601613426565b9150509250929050565b60008115159050919050565b6134908161347b565b82525050565b60006020820190506134ab6000830184613487565b92915050565b6000819050919050565b60006134d66134d16134cc846132c8565b6134b1565b6132c8565b9050919050565b60006134e8826134bb565b9050919050565b60006134fa826134dd565b9050919050565b61350a816134ef565b82525050565b60006020820190506135256000830184613501565b92915050565b61353481613405565b82525050565b600060208201905061354f600083018461352b565b92915050565b60006020828403121561356b5761356a6132c3565b5b600061357984828501613426565b91505092915050565b60008060006060848603121561359b5761359a6132c3565b5b60006135a986828701613311565b93505060206135ba86828701613311565b92505060406135cb86828701613426565b9150509250925092565b6135de816132e8565b82525050565b60006020820190506135f960008301846135d5565b92915050565b600060ff82169050919050565b613615816135ff565b82525050565b6000602082019050613630600083018461360c565b92915050565b6000613641826134dd565b9050919050565b61365181613636565b82525050565b600060208201905061366c6000830184613648565b92915050565b61367b8161347b565b811461368657600080fd5b50565b60008135905061369881613672565b92915050565b600080604083850312156136b5576136b46132c3565b5b60006136c385828601613311565b92505060206136d485828601613689565b9150509250929050565b6000602082840312156136f4576136f36132c3565b5b600061370284828501613689565b91505092915050565b60008060408385031215613722576137216132c3565b5b600061373085828601613311565b925050602061374185828601613311565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061379257607f821691505b6020821081036137a5576137a461374b565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006137e582613405565b91506137f083613405565b92508282026137fe81613405565b91508282048414831517613815576138146137ab565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061385682613405565b915061386183613405565b9250826138715761387061381c565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006138d8602f8361335e565b91506138e38261387c565b604082019050919050565b60006020820190508181036000830152613907816138cb565b9050919050565b600061391982613405565b915061392483613405565b925082820190508082111561393c5761393b6137ab565b5b92915050565b7f4e65656420746f207365742073776170206d616e616765720000000000000000600082015250565b600061397860188361335e565b915061398382613942565b602082019050919050565b600060208201905081810360008301526139a78161396b565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613a0a60398361335e565b9150613a15826139ae565b604082019050919050565b60006020820190508181036000830152613a39816139fd565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613a9c60258361335e565b9150613aa782613a40565b604082019050919050565b60006020820190508181036000830152613acb81613a8f565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000613b2e60248361335e565b9150613b3982613ad2565b604082019050919050565b60006020820190508181036000830152613b5d81613b21565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000613bc060358361335e565b9150613bcb82613b64565b604082019050919050565b60006020820190508181036000830152613bef81613bb3565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000613c5260348361335e565b9150613c5d82613bf6565b604082019050919050565b60006020820190508181036000830152613c8181613c45565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613ce460268361335e565b9150613cef82613c88565b604082019050919050565b60006020820190508181036000830152613d1381613cd7565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613d5060208361335e565b9150613d5b82613d1a565b602082019050919050565b60006020820190508181036000830152613d7f81613d43565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613de260248361335e565b9150613ded82613d86565b604082019050919050565b60006020820190508181036000830152613e1181613dd5565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613e7460228361335e565b9150613e7f82613e18565b604082019050919050565b60006020820190508181036000830152613ea381613e67565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613ee0601d8361335e565b9150613eeb82613eaa565b602082019050919050565b60006020820190508181036000830152613f0f81613ed3565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613f7260258361335e565b9150613f7d82613f16565b604082019050919050565b60006020820190508181036000830152613fa181613f65565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061400460238361335e565b915061400f82613fa8565b604082019050919050565b6000602082019050818103600083015261403381613ff7565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061407060168361335e565b915061407b8261403a565b602082019050919050565b6000602082019050818103600083015261409f81614063565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061412860498361335e565b9150614133826140a6565b606082019050919050565b600060208201905081810360008301526141578161411b565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006141ba60358361335e565b91506141c58261415e565b604082019050919050565b600060208201905081810360008301526141e9816141ad565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061422660138361335e565b9150614231826141f0565b602082019050919050565b6000602082019050818103600083015261425581614219565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006142b860368361335e565b91506142c38261425c565b604082019050919050565b600060208201905081810360008301526142e7816142ab565b9050919050565b60006142f982613405565b915061430483613405565b925082820390508181111561431c5761431b6137ab565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061437e60268361335e565b915061438982614322565b604082019050919050565b600060208201905081810360008301526143ad81614371565b9050919050565b6000815190506143c38161340f565b92915050565b6000602082840312156143df576143de6132c3565b5b60006143ed848285016143b4565b91505092915050565b600060408201905061440b60008301856135d5565b614418602083018461352b565b9392505050565b60008151905061442e81613672565b92915050565b60006020828403121561444a576144496132c3565b5b60006144588482850161441f565b91505092915050565b6000604082019050614476600083018561352b565b614483602083018461352b565b9392505050565b600060608201905061449f600083018661352b565b6144ac602083018561352b565b6144b9604083018461352b565b94935050505056fea26469706673582212206f7dc1ffdc7708a642dd3353009ef0b486ca2d3f4069cae2dd0d297d0e084ff364736f6c63430008110033

Deployed ByteCode Sourcemap

32276:14860:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40099:194;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9075:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11411:198;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33688:63;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32349:51;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10195:105;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33502:30;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33465;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37953:272;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12186:292;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32452:53;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10037:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12887:235;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32512:82;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32407:38;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32851:33;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38669:289;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40301:126;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33294:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33328;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32931:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32707;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10363:124;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2823:103;;;:::i;:::-;;33430:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37064:121;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38494:167;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32633:30;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33226:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36779:233;;;:::i;:::-;;2175:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33360:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39054:100;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9294:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39352:304;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13625:430;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10693:190;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39860:231;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33909:57;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32891:33;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39162:182;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38233:253;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33146:40;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32745:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37451:494;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33539:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33195:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10946:148;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32670:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32784:30;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37246:135;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33260:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3081:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33395:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32821:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40099:194;2061:13;:11;:13::i;:::-;40228::::1;;;;;;;;;;;40189:53;;40210:16;40189:53;;;;;;;;;;;;40269:16;40253:13;;:32;;;;;;;;;;;;;;;;;;40099:194:::0;:::o;9075:100::-;9129:13;9162:5;9155:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9075:100;:::o;11411:198::-;11491:4;11508:13;11524:12;:10;:12::i;:::-;11508:28;;11547:32;11556:5;11563:7;11572:6;11547:8;:32::i;:::-;11597:4;11590:11;;;11411:198;;;;:::o;33688:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;32349:51::-;;;:::o;10195:105::-;10256:4;10280:12;;10273:19;;10195:105;:::o;33502:30::-;;;;:::o;33465:::-;;;;:::o;37953:272::-;2061:13;:11;:13::i;:::-;38087:4:::1;38079;38074:1;38058:13;:11;:13::i;:::-;:17;;;;:::i;:::-;38057:26;;;;:::i;:::-;38056:35;;;;:::i;:::-;38046:6;:45;;38024:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;38210:6;38200;:17;;;;:::i;:::-;38177:20;:40;;;;37953:272:::0;:::o;12186:292::-;12314:4;12331:15;12349:12;:10;:12::i;:::-;12331:30;;12372:38;12388:4;12394:7;12403:6;12372:15;:38::i;:::-;12421:27;12431:4;12437:2;12441:6;12421:9;:27::i;:::-;12466:4;12459:11;;;12186:292;;;;;:::o;32452:53::-;32498:6;32452:53;:::o;10037:93::-;10095:5;10120:2;10113:9;;10037:93;:::o;12887:235::-;12972:4;12989:13;13005:12;:10;:12::i;:::-;12989:28;;13028:64;13037:5;13044:7;13081:10;13053:25;13063:5;13070:7;13053:9;:25::i;:::-;:38;;;;:::i;:::-;13028:8;:64::i;:::-;13110:4;13103:11;;;12887:235;;;;:::o;32512:82::-;32551:42;32512:82;:::o;32407:38::-;;;:::o;32851:33::-;;;;;;;;;;;;;:::o;38669:289::-;2061:13;:11;:13::i;:::-;38790:11:::1;;;;;;;;;;;38751:52;;38770:10;38751:52;;;;;;;;;;;;38841:10;38814:11;;:38;;;;;;;;;;;;;;;;;;38863:33;38879:10;38891:4;38863:15;:33::i;:::-;38907:43;38933:10;38945:4;38907:25;:43::i;:::-;38669:289:::0;:::o;40301:126::-;40367:4;40391:19;:28;40411:7;40391:28;;;;;;;;;;;;;;;;;;;;;;;;;40384:35;;40301:126;;;:::o;33294:25::-;;;;:::o;33328:::-;;;;:::o;32931:31::-;;;;;;;;;;;;;:::o;32707:::-;;;;;;;;;;;;;:::o;10363:124::-;10437:4;10461:9;:18;10471:7;10461:18;;;;;;;;;;;;;;;;10454:25;;10363:124;;;:::o;2823:103::-;2061:13;:11;:13::i;:::-;2888:30:::1;2915:1;2888:18;:30::i;:::-;2823:103::o:0;33430:26::-;;;;:::o;37064:121::-;37116:4;2061:13;:11;:13::i;:::-;37150:5:::1;37133:14;;:22;;;;;;;;;;;;;;;;;;37173:4;37166:11;;37064:121:::0;:::o;38494:167::-;2061:13;:11;:13::i;:::-;38649:4:::1;38607:31;:39;38639:6;38607:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;38494:167:::0;;:::o;32633:30::-;;;;;;;;;;;;;:::o;33226:27::-;;;;:::o;36779:233::-;2061:13;:11;:13::i;:::-;36889:1:::1;36857:34;;36865:11;;;;;;;;;;;36857:34;;::::0;36834:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;36971:4;36955:13;;:20;;;;;;;;;;;;;;;;;;37000:4;36986:11;;:18;;;;;;;;;;;;;;;;;;36779:233::o:0;2175:87::-;2221:7;2248:6;;;;;;;;;;;2241:13;;2175:87;:::o;33360:28::-;;;;:::o;39054:100::-;2061:13;:11;:13::i;:::-;39139:7:::1;39125:11;;:21;;;;;;;;;;;;;;;;;;39054:100:::0;:::o;9294:104::-;9350:13;9383:7;9376:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9294:104;:::o;39352:304::-;2061:13;:11;:13::i;:::-;39496::::1;39488:21;;:4;:21;;::::0;39466:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;39607:41;39636:4;39642:5;39607:28;:41::i;:::-;39352:304:::0;;:::o;13625:430::-;13715:4;13732:13;13748:12;:10;:12::i;:::-;13732:28;;13771:21;13795:25;13805:5;13812:7;13795:9;:25::i;:::-;13771:49;;13859:15;13839:16;:35;;13831:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;13952:60;13961:5;13968:7;13996:15;13977:16;:34;13952:8;:60::i;:::-;14043:4;14036:11;;;;13625:430;;;;:::o;10693:190::-;10769:4;10786:13;10802:12;:10;:12::i;:::-;10786:28;;10825;10835:5;10842:2;10846:6;10825:9;:28::i;:::-;10871:4;10864:11;;;10693:190;;;;:::o;39860:231::-;2061:13;:11;:13::i;:::-;40020:15:::1;;;;;;;;;;;39977:59;;40000:18;39977:59;;;;;;;;;;;;40065:18;40047:15;;:36;;;;;;;;;;;;;;;;;;39860:231:::0;:::o;33909:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;32891:33::-;;;;;;;;;;;;;:::o;39162:182::-;2061:13;:11;:13::i;:::-;39278:8:::1;39247:19;:28;39267:7;39247:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;39318:7;39302:34;;;39327:8;39302:34;;;;;;:::i;:::-;;;;;;;;39162:182:::0;;:::o;38233:253::-;2061:13;:11;:13::i;:::-;38370:4:::1;38362;38357:1;38341:13;:11;:13::i;:::-;:17;;;;:::i;:::-;38340:26;;;;:::i;:::-;38339:35;;;;:::i;:::-;38329:6;:45;;38307:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;38471:6;38461;:17;;;;:::i;:::-;38449:9;:29;;;;38233:253:::0;:::o;33146:40::-;;;;;;;;;;;;;:::o;32745:32::-;;;;:::o;37451:494::-;37556:4;2061:13;:11;:13::i;:::-;37635:6:::1;37630:1;37614:13;:11;:13::i;:::-;:17;;;;:::i;:::-;37613:28;;;;:::i;:::-;37600:9;:41;;37578:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;37790:4;37785:1;37769:13;:11;:13::i;:::-;:17;;;;:::i;:::-;37768:26;;;;:::i;:::-;37755:9;:39;;37733:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;37906:9;37885:18;:30;;;;37933:4;37926:11;;37451:494:::0;;;:::o;33539:28::-;;;;:::o;33195:24::-;;;;:::o;10946:148::-;11035:4;11059:11;:18;11071:5;11059:18;;;;;;;;;;;;;;;:27;11078:7;11059:27;;;;;;;;;;;;;;;;11052:34;;10946:148;;;;:::o;32670:28::-;;;;;;;;;;;;;:::o;32784:30::-;;;;:::o;37246:135::-;37306:4;2061:13;:11;:13::i;:::-;37346:5:::1;37323:20;;:28;;;;;;;;;;;;;;;;;;37369:4;37362:11;;37246:135:::0;:::o;33260:27::-;;;;:::o;3081:201::-;2061:13;:11;:13::i;:::-;3190:1:::1;3170:22;;:8;:22;;::::0;3162:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3246:28;3265:8;3246:18;:28::i;:::-;3081:201:::0;:::o;33395:28::-;;;;:::o;32821:21::-;;;;:::o;2340:132::-;2415:12;:10;:12::i;:::-;2404:23;;:7;:5;:7::i;:::-;:23;;;2396:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2340:132::o;812:98::-;865:7;892:10;885:17;;812:98;:::o;17631:377::-;17781:1;17764:19;;:5;:19;;;17756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17862:1;17843:21;;:7;:21;;;17835:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17946:6;17916:11;:18;17928:5;17916:18;;;;;;;;;;;;;;;:27;17935:7;17916:27;;;;;;;;;;;;;;;:36;;;;17984:7;17968:32;;17977:5;17968:32;;;17993:6;17968:32;;;;;;:::i;:::-;;;;;;;;17631:377;;;:::o;18299:444::-;18431:21;18455:25;18465:5;18472:7;18455:9;:25::i;:::-;18431:49;;18515:14;18495:16;:34;18491:245;;18574:6;18554:16;:26;;18546:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18658:51;18667:5;18674:7;18702:6;18683:16;:25;18658:8;:51::i;:::-;18491:245;18420:323;18299:444;;;:::o;40435:4781::-;40580:1;40564:18;;:4;:18;;;40556:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40657:1;40643:16;;:2;:16;;;40635:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;40726:1;40716:6;:11;40712:93;;40744:28;40760:4;40766:2;40770:1;40744:15;:28::i;:::-;40787:7;;40712:93;40821:14;;;;;;;;;;;40817:2542;;;40882:7;:5;:7::i;:::-;40874:15;;:4;:15;;;;:49;;;;;40916:7;:5;:7::i;:::-;40910:13;;:2;:13;;;;40874:49;:86;;;;;40958:1;40944:16;;:2;:16;;;;40874:86;:128;;;;;40995:6;40981:21;;:2;:21;;;;40874:128;:158;;;;;41024:8;;;;;;;;;;;41023:9;40874:158;40852:2496;;;41072:13;;;;;;;;;;;41067:223;;41144:19;:25;41164:4;41144:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;41173:19;:23;41193:2;41173:23;;;;;;;;;;;;;;;;;;;;;;;;;41144:52;41110:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;41067:223;41446:20;;;;;;;;;;;41442:696;;;41527:7;:5;:7::i;:::-;41521:13;;:2;:13;;;;:72;;;;;41577:15;41563:30;;:2;:30;;;;41521:72;:129;;;;;41636:13;41622:28;;:2;:28;;;;41521:129;:184;;;;;41680:19;:25;41700:4;41680:25;;;;;;;;;;;;;;;;;;;;;;;;;41679:26;41521:184;41491:628;;;41869:12;41794:28;:39;41823:9;41794:39;;;;;;;;;;;;;;;;:87;41756:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;42083:12;42041:28;:39;42070:9;42041:39;;;;;;;;;;;;;;;:54;;;;41491:628;41442:696;42212:25;:31;42238:4;42212:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;42269:31;:35;42301:2;42269:35;;;;;;;;;;;;;;;;;;;;;;;;;42268:36;42212:92;42186:1147;;;42391:20;;42381:6;:30;;42347:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;42599:9;;42582:13;42592:2;42582:9;:13::i;:::-;42573:6;:22;;;;:::i;:::-;:35;;42539:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;42186:1147;;;42777:25;:29;42803:2;42777:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;42832:31;:37;42864:4;42832:37;;;;;;;;;;;;;;;;;;;;;;;;;42831:38;42777:92;42751:582;;;42956:20;;42946:6;:30;;42912:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;42751:582;;;43113:31;:35;43145:2;43113:35;;;;;;;;;;;;;;;;;;;;;;;;;43108:225;;43233:9;;43216:13;43226:2;43216:9;:13::i;:::-;43207:6;:22;;;;:::i;:::-;:35;;43173:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;43108:225;42751:582;42186:1147;40852:2496;40817:2542;43371:25;43399:24;43417:4;43399:9;:24::i;:::-;43371:52;;43436:12;43475:18;;43451:20;:42;;43436:57;;43524:7;:35;;;;;43548:11;;;;;;;;;;;43524:35;:61;;;;;43577:8;;;;;;;;;;;43576:9;43524:61;:110;;;;;43603:25;:31;43629:4;43603:31;;;;;;;;;;;;;;;;;;;;;;;;;43602:32;43524:110;:153;;;;;43652:19;:25;43672:4;43652:25;;;;;;;;;;;;;;;;;;;;;;;;;43651:26;43524:153;:194;;;;;43695:19;:23;43715:2;43695:23;;;;;;;;;;;;;;;;;;;;;;;;;43694:24;43524:194;43506:326;;;43756:4;43745:8;;:15;;;;;;;;;;;;;;;;;;43777:10;:8;:10::i;:::-;43815:5;43804:8;;:16;;;;;;;;;;;;;;;;;;43506:326;43844:12;43860:8;;;;;;;;;;;43859:9;43844:24;;43970:19;:25;43990:4;43970:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;43999:19;:23;44019:2;43999:23;;;;;;;;;;;;;;;;;;;;;;;;;43970:52;43966:100;;;44049:5;44039:15;;43966:100;44078:9;44180:7;44176:987;;;44232:25;:29;44258:2;44232:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;44281:1;44265:13;;:17;44232:50;44228:786;;;44310:34;44340:3;44310:25;44321:13;;44310:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;44303:41;;44413:13;;44393:16;;44386:4;:23;;;;:::i;:::-;44385:41;;;;:::i;:::-;44363:18;;:63;;;;;;;:::i;:::-;;;;;;;;44495:13;;44475:16;;44468:4;:23;;;;:::i;:::-;44467:41;;;;:::i;:::-;44445:18;;:63;;;;;;;:::i;:::-;;;;;;;;44573:13;;44555:14;;44548:4;:21;;;;:::i;:::-;44547:39;;;;:::i;:::-;44527:16;;:59;;;;;;;:::i;:::-;;;;;;;;44228:786;;;44650:25;:31;44676:4;44650:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;44700:1;44685:12;;:16;44650:51;44646:368;;;44729:33;44758:3;44729:24;44740:12;;44729:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;44722:40;;44830:12;;44811:15;;44804:4;:22;;;;:::i;:::-;44803:39;;;;:::i;:::-;44781:18;;:61;;;;;;;:::i;:::-;;;;;;;;44910:12;;44891:15;;44884:4;:22;;;;:::i;:::-;44883:39;;;;:::i;:::-;44861:18;;:61;;;;;;;:::i;:::-;;;;;;;;44986:12;;44969:13;;44962:4;:20;;;;:::i;:::-;44961:37;;;;:::i;:::-;44941:16;;:57;;;;;;;:::i;:::-;;;;;;;;44646:368;44228:786;45041:1;45034:4;:8;45030:91;;;45063:42;45079:4;45093;45100;45063:15;:42::i;:::-;45030:91;45147:4;45137:14;;;;;:::i;:::-;;;44176:987;45175:33;45191:4;45197:2;45201:6;45175:15;:33::i;:::-;40545:4671;;;;40435:4781;;;;:::o;3442:191::-;3516:16;3535:6;;;;;;;;;;;3516:25;;3561:8;3552:6;;:17;;;;;;;;;;;;;;;;;;3616:8;3585:40;;3606:8;3585:40;;;;;;;;;;;;3505:128;3442:191;:::o;39664:188::-;39781:5;39747:25;:31;39773:4;39747:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;39838:5;39804:40;;39832:4;39804:40;;;;;;;;;;;;39664:188;;:::o;14525:834::-;14669:1;14653:18;;:4;:18;;;14645:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14746:1;14732:16;;:2;:16;;;14724:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;14801:38;14822:4;14828:2;14832:6;14801:20;:38::i;:::-;14852:16;14871:9;:15;14881:4;14871:15;;;;;;;;;;;;;;;;14852:34;;14920:6;14905:11;:21;;14897:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;15037:6;15023:11;:20;15005:9;:15;15015:4;15005:15;;;;;;;;;;;;;;;:38;;;;15240:6;15223:9;:13;15233:2;15223:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;15290:2;15275:26;;15284:4;15275:26;;;15294:6;15275:26;;;;;;:::i;:::-;;;;;;;;15314:37;15334:4;15340:2;15344:6;15314:19;:37::i;:::-;14634:725;14525:834;;;:::o;45224:1909::-;45263:20;45286:24;45304:4;45286:9;:24::i;:::-;45263:47;;45321:22;45414:16;;45380:18;;45346;;:52;;;;:::i;:::-;:84;;;;:::i;:::-;45321:109;;45466:1;45447:15;:20;:46;;;;45492:1;45471:17;:22;45447:46;45443:85;;;45510:7;;;;45443:85;45583:2;45562:18;;:23;;;;:::i;:::-;45544:15;:41;45540:115;;;45641:2;45620:18;;:23;;;;:::i;:::-;45602:41;;45540:115;45667:20;45764:1;45744:17;45709:18;;45691:15;:36;;;;:::i;:::-;45690:71;;;;:::i;:::-;:75;;;;:::i;:::-;45667:98;;45776:24;45803:36;45823:15;45803;:19;;:36;;;;:::i;:::-;45776:63;;45852:23;32551:42;45878:22;;;45909:4;45878:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45852:63;;45928:66;45945:4;45960:11;;;;;;;;;;;45974:19;45928:8;:66::i;:::-;46005:11;;;;;;;;;;;:22;;;46028:19;46005:43;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46061:16;46080:61;46122:18;32551:42;46080:22;;;46111:4;46080:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:41;;:61;;;;:::i;:::-;46061:80;;46154:21;46178:58;46218:17;46178:35;46194:18;;46178:11;:15;;:35;;;;:::i;:::-;:39;;:58;;;;:::i;:::-;46154:82;;46247:19;46269:56;46307:17;46269:33;46285:16;;46269:11;:15;;:33;;;;:::i;:::-;:37;;:56;;;;:::i;:::-;46247:78;;46336:21;46393:14;46374:16;46360:11;:30;;;;:::i;:::-;:47;;;;:::i;:::-;46336:71;;46441:1;46420:18;:22;;;;46474:1;46453:18;:22;;;;46505:1;46486:16;:20;;;;32551:42;46519:21;;;46541:15;;;;;;;;;;;46558:16;46519:56;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;46610:1;46592:15;:19;:43;;;;;46634:1;46615:16;:20;46592:43;46588:450;;;46652:62;46669:4;46684:11;;;;;;;;;;;46698:15;46652:8;:62::i;:::-;32551:42;46729:20;;;46758:11;;;;;;;;;;;46772:16;46729:60;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;46806:11;;;;;;;;;;;:24;;;46831:15;46848:16;46806:59;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46887:139;46920:19;46958:16;46993:18;;46887:139;;;;;;;;:::i;:::-;;;;;;;;46588:450;32551:42;47050:21;;;47072:13;;;;;;;;;;;32551:42;47087:22;;;47118:4;47087:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47050:75;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;45252:1881;;;;;;;;;45224:1909;:::o;23653:89::-;23705:4;23733:1;23729;:5;;;;:::i;:::-;23722:12;;23653:89;;;;:::o;24043:::-;24095:4;24123:1;24119;:5;;;;:::i;:::-;24112:12;;24043:89;;;;:::o;19343:122::-;;;;:::o;20069:121::-;;;;:::o;23305:89::-;23357:4;23385:1;23381;:5;;;;:::i;:::-;23374:12;;23305:89;;;;:::o;88:117:1:-;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;;:::i;:::-;917:119;1075:1;1100:53;1145:7;1136:6;1125:9;1121:22;1100:53;:::i;:::-;1090:63;;1046:117;841:329;;;;:::o;1176:99::-;1228:6;1262:5;1256:12;1246:22;;1176:99;;;:::o;1281:169::-;1365:11;1399:6;1394:3;1387:19;1439:4;1434:3;1430:14;1415:29;;1281:169;;;;:::o;1456:246::-;1537:1;1547:113;1561:6;1558:1;1555:13;1547:113;;;1646:1;1641:3;1637:11;1631:18;1627:1;1622:3;1618:11;1611:39;1583:2;1580:1;1576:10;1571:15;;1547:113;;;1694:1;1685:6;1680:3;1676:16;1669:27;1518:184;1456:246;;;:::o;1708:102::-;1749:6;1800:2;1796:7;1791:2;1784:5;1780:14;1776:28;1766:38;;1708:102;;;:::o;1816:377::-;1904:3;1932:39;1965:5;1932:39;:::i;:::-;1987:71;2051:6;2046:3;1987:71;:::i;:::-;1980:78;;2067:65;2125:6;2120:3;2113:4;2106:5;2102:16;2067:65;:::i;:::-;2157:29;2179:6;2157:29;:::i;:::-;2152:3;2148:39;2141:46;;1908:285;1816:377;;;;:::o;2199:313::-;2312:4;2350:2;2339:9;2335:18;2327:26;;2399:9;2393:4;2389:20;2385:1;2374:9;2370:17;2363:47;2427:78;2500:4;2491:6;2427:78;:::i;:::-;2419:86;;2199:313;;;;:::o;2518:77::-;2555:7;2584:5;2573:16;;2518:77;;;:::o;2601:122::-;2674:24;2692:5;2674:24;:::i;:::-;2667:5;2664:35;2654:63;;2713:1;2710;2703:12;2654:63;2601:122;:::o;2729:139::-;2775:5;2813:6;2800:20;2791:29;;2829:33;2856:5;2829:33;:::i;:::-;2729:139;;;;:::o;2874:474::-;2942:6;2950;2999:2;2987:9;2978:7;2974:23;2970:32;2967:119;;;3005:79;;:::i;:::-;2967:119;3125:1;3150:53;3195:7;3186:6;3175:9;3171:22;3150:53;:::i;:::-;3140:63;;3096:117;3252:2;3278:53;3323:7;3314:6;3303:9;3299:22;3278:53;:::i;:::-;3268:63;;3223:118;2874:474;;;;;:::o;3354:90::-;3388:7;3431:5;3424:13;3417:21;3406:32;;3354:90;;;:::o;3450:109::-;3531:21;3546:5;3531:21;:::i;:::-;3526:3;3519:34;3450:109;;:::o;3565:210::-;3652:4;3690:2;3679:9;3675:18;3667:26;;3703:65;3765:1;3754:9;3750:17;3741:6;3703:65;:::i;:::-;3565:210;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:153::-;4204:9;4237:37;4268:5;4237:37;:::i;:::-;4224:50;;4127:153;;;:::o;4286:185::-;4400:64;4458:5;4400:64;:::i;:::-;4395:3;4388:77;4286:185;;:::o;4477:276::-;4597:4;4635:2;4624:9;4620:18;4612:26;;4648:98;4743:1;4732:9;4728:17;4719:6;4648:98;:::i;:::-;4477:276;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:329::-;5170:6;5219:2;5207:9;5198:7;5194:23;5190:32;5187:119;;;5225:79;;:::i;:::-;5187:119;5345:1;5370:53;5415:7;5406:6;5395:9;5391:22;5370:53;:::i;:::-;5360:63;;5316:117;5111:329;;;;:::o;5446:619::-;5523:6;5531;5539;5588:2;5576:9;5567:7;5563:23;5559:32;5556:119;;;5594:79;;:::i;:::-;5556:119;5714:1;5739:53;5784:7;5775:6;5764:9;5760:22;5739:53;:::i;:::-;5729:63;;5685:117;5841:2;5867:53;5912:7;5903:6;5892:9;5888:22;5867:53;:::i;:::-;5857:63;;5812:118;5969:2;5995:53;6040:7;6031:6;6020:9;6016:22;5995:53;:::i;:::-;5985:63;;5940:118;5446:619;;;;;:::o;6071:118::-;6158:24;6176:5;6158:24;:::i;:::-;6153:3;6146:37;6071:118;;:::o;6195:222::-;6288:4;6326:2;6315:9;6311:18;6303:26;;6339:71;6407:1;6396:9;6392:17;6383:6;6339:71;:::i;:::-;6195:222;;;;:::o;6423:86::-;6458:7;6498:4;6491:5;6487:16;6476:27;;6423:86;;;:::o;6515:112::-;6598:22;6614:5;6598:22;:::i;:::-;6593:3;6586:35;6515:112;;:::o;6633:214::-;6722:4;6760:2;6749:9;6745:18;6737:26;;6773:67;6837:1;6826:9;6822:17;6813:6;6773:67;:::i;:::-;6633:214;;;;:::o;6853:147::-;6924:9;6957:37;6988:5;6957:37;:::i;:::-;6944:50;;6853:147;;;:::o;7006:173::-;7114:58;7166:5;7114:58;:::i;:::-;7109:3;7102:71;7006:173;;:::o;7185:264::-;7299:4;7337:2;7326:9;7322:18;7314:26;;7350:92;7439:1;7428:9;7424:17;7415:6;7350:92;:::i;:::-;7185:264;;;;:::o;7455:116::-;7525:21;7540:5;7525:21;:::i;:::-;7518:5;7515:32;7505:60;;7561:1;7558;7551:12;7505:60;7455:116;:::o;7577:133::-;7620:5;7658:6;7645:20;7636:29;;7674:30;7698:5;7674:30;:::i;:::-;7577:133;;;;:::o;7716:468::-;7781:6;7789;7838:2;7826:9;7817:7;7813:23;7809:32;7806:119;;;7844:79;;:::i;:::-;7806:119;7964:1;7989:53;8034:7;8025:6;8014:9;8010:22;7989:53;:::i;:::-;7979:63;;7935:117;8091:2;8117:50;8159:7;8150:6;8139:9;8135:22;8117:50;:::i;:::-;8107:60;;8062:115;7716:468;;;;;:::o;8190:323::-;8246:6;8295:2;8283:9;8274:7;8270:23;8266:32;8263:119;;;8301:79;;:::i;:::-;8263:119;8421:1;8446:50;8488:7;8479:6;8468:9;8464:22;8446:50;:::i;:::-;8436:60;;8392:114;8190:323;;;;:::o;8519:474::-;8587:6;8595;8644:2;8632:9;8623:7;8619:23;8615:32;8612:119;;;8650:79;;:::i;:::-;8612:119;8770:1;8795:53;8840:7;8831:6;8820:9;8816:22;8795:53;:::i;:::-;8785:63;;8741:117;8897:2;8923:53;8968:7;8959:6;8948:9;8944:22;8923:53;:::i;:::-;8913:63;;8868:118;8519:474;;;;;:::o;8999:180::-;9047:77;9044:1;9037:88;9144:4;9141:1;9134:15;9168:4;9165:1;9158:15;9185:320;9229:6;9266:1;9260:4;9256:12;9246:22;;9313:1;9307:4;9303:12;9334:18;9324:81;;9390:4;9382:6;9378:17;9368:27;;9324:81;9452:2;9444:6;9441:14;9421:18;9418:38;9415:84;;9471:18;;:::i;:::-;9415:84;9236:269;9185:320;;;:::o;9511:180::-;9559:77;9556:1;9549:88;9656:4;9653:1;9646:15;9680:4;9677:1;9670:15;9697:410;9737:7;9760:20;9778:1;9760:20;:::i;:::-;9755:25;;9794:20;9812:1;9794:20;:::i;:::-;9789:25;;9849:1;9846;9842:9;9871:30;9889:11;9871:30;:::i;:::-;9860:41;;10050:1;10041:7;10037:15;10034:1;10031:22;10011:1;10004:9;9984:83;9961:139;;10080:18;;:::i;:::-;9961:139;9745:362;9697:410;;;;:::o;10113:180::-;10161:77;10158:1;10151:88;10258:4;10255:1;10248:15;10282:4;10279:1;10272:15;10299:185;10339:1;10356:20;10374:1;10356:20;:::i;:::-;10351:25;;10390:20;10408:1;10390:20;:::i;:::-;10385:25;;10429:1;10419:35;;10434:18;;:::i;:::-;10419:35;10476:1;10473;10469:9;10464:14;;10299:185;;;;:::o;10490:234::-;10630:34;10626:1;10618:6;10614:14;10607:58;10699:17;10694:2;10686:6;10682:15;10675:42;10490:234;:::o;10730:366::-;10872:3;10893:67;10957:2;10952:3;10893:67;:::i;:::-;10886:74;;10969:93;11058:3;10969:93;:::i;:::-;11087:2;11082:3;11078:12;11071:19;;10730:366;;;:::o;11102:419::-;11268:4;11306:2;11295:9;11291:18;11283:26;;11355:9;11349:4;11345:20;11341:1;11330:9;11326:17;11319:47;11383:131;11509:4;11383:131;:::i;:::-;11375:139;;11102:419;;;:::o;11527:191::-;11567:3;11586:20;11604:1;11586:20;:::i;:::-;11581:25;;11620:20;11638:1;11620:20;:::i;:::-;11615:25;;11663:1;11660;11656:9;11649:16;;11684:3;11681:1;11678:10;11675:36;;;11691:18;;:::i;:::-;11675:36;11527:191;;;;:::o;11724:174::-;11864:26;11860:1;11852:6;11848:14;11841:50;11724:174;:::o;11904:366::-;12046:3;12067:67;12131:2;12126:3;12067:67;:::i;:::-;12060:74;;12143:93;12232:3;12143:93;:::i;:::-;12261:2;12256:3;12252:12;12245:19;;11904:366;;;:::o;12276:419::-;12442:4;12480:2;12469:9;12465:18;12457:26;;12529:9;12523:4;12519:20;12515:1;12504:9;12500:17;12493:47;12557:131;12683:4;12557:131;:::i;:::-;12549:139;;12276:419;;;:::o;12701:244::-;12841:34;12837:1;12829:6;12825:14;12818:58;12910:27;12905:2;12897:6;12893:15;12886:52;12701:244;:::o;12951:366::-;13093:3;13114:67;13178:2;13173:3;13114:67;:::i;:::-;13107:74;;13190:93;13279:3;13190:93;:::i;:::-;13308:2;13303:3;13299:12;13292:19;;12951:366;;;:::o;13323:419::-;13489:4;13527:2;13516:9;13512:18;13504:26;;13576:9;13570:4;13566:20;13562:1;13551:9;13547:17;13540:47;13604:131;13730:4;13604:131;:::i;:::-;13596:139;;13323:419;;;:::o;13748:224::-;13888:34;13884:1;13876:6;13872:14;13865:58;13957:7;13952:2;13944:6;13940:15;13933:32;13748:224;:::o;13978:366::-;14120:3;14141:67;14205:2;14200:3;14141:67;:::i;:::-;14134:74;;14217:93;14306:3;14217:93;:::i;:::-;14335:2;14330:3;14326:12;14319:19;;13978:366;;;:::o;14350:419::-;14516:4;14554:2;14543:9;14539:18;14531:26;;14603:9;14597:4;14593:20;14589:1;14578:9;14574:17;14567:47;14631:131;14757:4;14631:131;:::i;:::-;14623:139;;14350:419;;;:::o;14775:223::-;14915:34;14911:1;14903:6;14899:14;14892:58;14984:6;14979:2;14971:6;14967:15;14960:31;14775:223;:::o;15004:366::-;15146:3;15167:67;15231:2;15226:3;15167:67;:::i;:::-;15160:74;;15243:93;15332:3;15243:93;:::i;:::-;15361:2;15356:3;15352:12;15345:19;;15004:366;;;:::o;15376:419::-;15542:4;15580:2;15569:9;15565:18;15557:26;;15629:9;15623:4;15619:20;15615:1;15604:9;15600:17;15593:47;15657:131;15783:4;15657:131;:::i;:::-;15649:139;;15376:419;;;:::o;15801:240::-;15941:34;15937:1;15929:6;15925:14;15918:58;16010:23;16005:2;15997:6;15993:15;15986:48;15801:240;:::o;16047:366::-;16189:3;16210:67;16274:2;16269:3;16210:67;:::i;:::-;16203:74;;16286:93;16375:3;16286:93;:::i;:::-;16404:2;16399:3;16395:12;16388:19;;16047:366;;;:::o;16419:419::-;16585:4;16623:2;16612:9;16608:18;16600:26;;16672:9;16666:4;16662:20;16658:1;16647:9;16643:17;16636:47;16700:131;16826:4;16700:131;:::i;:::-;16692:139;;16419:419;;;:::o;16844:239::-;16984:34;16980:1;16972:6;16968:14;16961:58;17053:22;17048:2;17040:6;17036:15;17029:47;16844:239;:::o;17089:366::-;17231:3;17252:67;17316:2;17311:3;17252:67;:::i;:::-;17245:74;;17328:93;17417:3;17328:93;:::i;:::-;17446:2;17441:3;17437:12;17430:19;;17089:366;;;:::o;17461:419::-;17627:4;17665:2;17654:9;17650:18;17642:26;;17714:9;17708:4;17704:20;17700:1;17689:9;17685:17;17678:47;17742:131;17868:4;17742:131;:::i;:::-;17734:139;;17461:419;;;:::o;17886:225::-;18026:34;18022:1;18014:6;18010:14;18003:58;18095:8;18090:2;18082:6;18078:15;18071:33;17886:225;:::o;18117:366::-;18259:3;18280:67;18344:2;18339:3;18280:67;:::i;:::-;18273:74;;18356:93;18445:3;18356:93;:::i;:::-;18474:2;18469:3;18465:12;18458:19;;18117:366;;;:::o;18489:419::-;18655:4;18693:2;18682:9;18678:18;18670:26;;18742:9;18736:4;18732:20;18728:1;18717:9;18713:17;18706:47;18770:131;18896:4;18770:131;:::i;:::-;18762:139;;18489:419;;;:::o;18914:182::-;19054:34;19050:1;19042:6;19038:14;19031:58;18914:182;:::o;19102:366::-;19244:3;19265:67;19329:2;19324:3;19265:67;:::i;:::-;19258:74;;19341:93;19430:3;19341:93;:::i;:::-;19459:2;19454:3;19450:12;19443:19;;19102:366;;;:::o;19474:419::-;19640:4;19678:2;19667:9;19663:18;19655:26;;19727:9;19721:4;19717:20;19713:1;19702:9;19698:17;19691:47;19755:131;19881:4;19755:131;:::i;:::-;19747:139;;19474:419;;;:::o;19899:223::-;20039:34;20035:1;20027:6;20023:14;20016:58;20108:6;20103:2;20095:6;20091:15;20084:31;19899:223;:::o;20128:366::-;20270:3;20291:67;20355:2;20350:3;20291:67;:::i;:::-;20284:74;;20367:93;20456:3;20367:93;:::i;:::-;20485:2;20480:3;20476:12;20469:19;;20128:366;;;:::o;20500:419::-;20666:4;20704:2;20693:9;20689:18;20681:26;;20753:9;20747:4;20743:20;20739:1;20728:9;20724:17;20717:47;20781:131;20907:4;20781:131;:::i;:::-;20773:139;;20500:419;;;:::o;20925:221::-;21065:34;21061:1;21053:6;21049:14;21042:58;21134:4;21129:2;21121:6;21117:15;21110:29;20925:221;:::o;21152:366::-;21294:3;21315:67;21379:2;21374:3;21315:67;:::i;:::-;21308:74;;21391:93;21480:3;21391:93;:::i;:::-;21509:2;21504:3;21500:12;21493:19;;21152:366;;;:::o;21524:419::-;21690:4;21728:2;21717:9;21713:18;21705:26;;21777:9;21771:4;21767:20;21763:1;21752:9;21748:17;21741:47;21805:131;21931:4;21805:131;:::i;:::-;21797:139;;21524:419;;;:::o;21949:179::-;22089:31;22085:1;22077:6;22073:14;22066:55;21949:179;:::o;22134:366::-;22276:3;22297:67;22361:2;22356:3;22297:67;:::i;:::-;22290:74;;22373:93;22462:3;22373:93;:::i;:::-;22491:2;22486:3;22482:12;22475:19;;22134:366;;;:::o;22506:419::-;22672:4;22710:2;22699:9;22695:18;22687:26;;22759:9;22753:4;22749:20;22745:1;22734:9;22730:17;22723:47;22787:131;22913:4;22787:131;:::i;:::-;22779:139;;22506:419;;;:::o;22931:224::-;23071:34;23067:1;23059:6;23055:14;23048:58;23140:7;23135:2;23127:6;23123:15;23116:32;22931:224;:::o;23161:366::-;23303:3;23324:67;23388:2;23383:3;23324:67;:::i;:::-;23317:74;;23400:93;23489:3;23400:93;:::i;:::-;23518:2;23513:3;23509:12;23502:19;;23161:366;;;:::o;23533:419::-;23699:4;23737:2;23726:9;23722:18;23714:26;;23786:9;23780:4;23776:20;23772:1;23761:9;23757:17;23750:47;23814:131;23940:4;23814:131;:::i;:::-;23806:139;;23533:419;;;:::o;23958:222::-;24098:34;24094:1;24086:6;24082:14;24075:58;24167:5;24162:2;24154:6;24150:15;24143:30;23958:222;:::o;24186:366::-;24328:3;24349:67;24413:2;24408:3;24349:67;:::i;:::-;24342:74;;24425:93;24514:3;24425:93;:::i;:::-;24543:2;24538:3;24534:12;24527:19;;24186:366;;;:::o;24558:419::-;24724:4;24762:2;24751:9;24747:18;24739:26;;24811:9;24805:4;24801:20;24797:1;24786:9;24782:17;24775:47;24839:131;24965:4;24839:131;:::i;:::-;24831:139;;24558:419;;;:::o;24983:172::-;25123:24;25119:1;25111:6;25107:14;25100:48;24983:172;:::o;25161:366::-;25303:3;25324:67;25388:2;25383:3;25324:67;:::i;:::-;25317:74;;25400:93;25489:3;25400:93;:::i;:::-;25518:2;25513:3;25509:12;25502:19;;25161:366;;;:::o;25533:419::-;25699:4;25737:2;25726:9;25722:18;25714:26;;25786:9;25780:4;25776:20;25772:1;25761:9;25757:17;25750:47;25814:131;25940:4;25814:131;:::i;:::-;25806:139;;25533:419;;;:::o;25958:297::-;26098:34;26094:1;26086:6;26082:14;26075:58;26167:34;26162:2;26154:6;26150:15;26143:59;26236:11;26231:2;26223:6;26219:15;26212:36;25958:297;:::o;26261:366::-;26403:3;26424:67;26488:2;26483:3;26424:67;:::i;:::-;26417:74;;26500:93;26589:3;26500:93;:::i;:::-;26618:2;26613:3;26609:12;26602:19;;26261:366;;;:::o;26633:419::-;26799:4;26837:2;26826:9;26822:18;26814:26;;26886:9;26880:4;26876:20;26872:1;26861:9;26857:17;26850:47;26914:131;27040:4;26914:131;:::i;:::-;26906:139;;26633:419;;;:::o;27058:240::-;27198:34;27194:1;27186:6;27182:14;27175:58;27267:23;27262:2;27254:6;27250:15;27243:48;27058:240;:::o;27304:366::-;27446:3;27467:67;27531:2;27526:3;27467:67;:::i;:::-;27460:74;;27543:93;27632:3;27543:93;:::i;:::-;27661:2;27656:3;27652:12;27645:19;;27304:366;;;:::o;27676:419::-;27842:4;27880:2;27869:9;27865:18;27857:26;;27929:9;27923:4;27919:20;27915:1;27904:9;27900:17;27893:47;27957:131;28083:4;27957:131;:::i;:::-;27949:139;;27676:419;;;:::o;28101:169::-;28241:21;28237:1;28229:6;28225:14;28218:45;28101:169;:::o;28276:366::-;28418:3;28439:67;28503:2;28498:3;28439:67;:::i;:::-;28432:74;;28515:93;28604:3;28515:93;:::i;:::-;28633:2;28628:3;28624:12;28617:19;;28276:366;;;:::o;28648:419::-;28814:4;28852:2;28841:9;28837:18;28829:26;;28901:9;28895:4;28891:20;28887:1;28876:9;28872:17;28865:47;28929:131;29055:4;28929:131;:::i;:::-;28921:139;;28648:419;;;:::o;29073:241::-;29213:34;29209:1;29201:6;29197:14;29190:58;29282:24;29277:2;29269:6;29265:15;29258:49;29073:241;:::o;29320:366::-;29462:3;29483:67;29547:2;29542:3;29483:67;:::i;:::-;29476:74;;29559:93;29648:3;29559:93;:::i;:::-;29677:2;29672:3;29668:12;29661:19;;29320:366;;;:::o;29692:419::-;29858:4;29896:2;29885:9;29881:18;29873:26;;29945:9;29939:4;29935:20;29931:1;29920:9;29916:17;29909:47;29973:131;30099:4;29973:131;:::i;:::-;29965:139;;29692:419;;;:::o;30117:194::-;30157:4;30177:20;30195:1;30177:20;:::i;:::-;30172:25;;30211:20;30229:1;30211:20;:::i;:::-;30206:25;;30255:1;30252;30248:9;30240:17;;30279:1;30273:4;30270:11;30267:37;;;30284:18;;:::i;:::-;30267:37;30117:194;;;;:::o;30317:225::-;30457:34;30453:1;30445:6;30441:14;30434:58;30526:8;30521:2;30513:6;30509:15;30502:33;30317:225;:::o;30548:366::-;30690:3;30711:67;30775:2;30770:3;30711:67;:::i;:::-;30704:74;;30787:93;30876:3;30787:93;:::i;:::-;30905:2;30900:3;30896:12;30889:19;;30548:366;;;:::o;30920:419::-;31086:4;31124:2;31113:9;31109:18;31101:26;;31173:9;31167:4;31163:20;31159:1;31148:9;31144:17;31137:47;31201:131;31327:4;31201:131;:::i;:::-;31193:139;;30920:419;;;:::o;31345:143::-;31402:5;31433:6;31427:13;31418:22;;31449:33;31476:5;31449:33;:::i;:::-;31345:143;;;;:::o;31494:351::-;31564:6;31613:2;31601:9;31592:7;31588:23;31584:32;31581:119;;;31619:79;;:::i;:::-;31581:119;31739:1;31764:64;31820:7;31811:6;31800:9;31796:22;31764:64;:::i;:::-;31754:74;;31710:128;31494:351;;;;:::o;31851:332::-;31972:4;32010:2;31999:9;31995:18;31987:26;;32023:71;32091:1;32080:9;32076:17;32067:6;32023:71;:::i;:::-;32104:72;32172:2;32161:9;32157:18;32148:6;32104:72;:::i;:::-;31851:332;;;;;:::o;32189:137::-;32243:5;32274:6;32268:13;32259:22;;32290:30;32314:5;32290:30;:::i;:::-;32189:137;;;;:::o;32332:345::-;32399:6;32448:2;32436:9;32427:7;32423:23;32419:32;32416:119;;;32454:79;;:::i;:::-;32416:119;32574:1;32599:61;32652:7;32643:6;32632:9;32628:22;32599:61;:::i;:::-;32589:71;;32545:125;32332:345;;;;:::o;32683:332::-;32804:4;32842:2;32831:9;32827:18;32819:26;;32855:71;32923:1;32912:9;32908:17;32899:6;32855:71;:::i;:::-;32936:72;33004:2;32993:9;32989:18;32980:6;32936:72;:::i;:::-;32683:332;;;;;:::o;33021:442::-;33170:4;33208:2;33197:9;33193:18;33185:26;;33221:71;33289:1;33278:9;33274:17;33265:6;33221:71;:::i;:::-;33302:72;33370:2;33359:9;33355:18;33346:6;33302:72;:::i;:::-;33384;33452:2;33441:9;33437:18;33428:6;33384:72;:::i;:::-;33021:442;;;;;;:::o

Swarm Source

ipfs://6f7dc1ffdc7708a642dd3353009ef0b486ca2d3f4069cae2dd0d297d0e084ff3
Loading