ETH Price: $2,457.79 (+0.80%)

Token

Warp Coin (WARPCOIN)
 

Overview

Max Total Supply

1,000,000,000 WARPCOIN

Holders

43

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.767864164408856714 WARPCOIN

Value
$0.00
0xc0fbc08dfae399736b2a9ceb20a7c7cd29b3d59d
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
WARPCOIN

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

//SPDX-License-Identifier: MIT
// File: @openzeppelin/contracts/utils/math/SafeMath.sol


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

pragma solidity ^0.8.0;

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

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is 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(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

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

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

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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/utils/Context.sol


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

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

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


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

pragma solidity ^0.8.0;


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

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


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

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

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

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

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);
}

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


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

pragma solidity ^0.8.0;


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

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

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

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


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

pragma solidity ^0.8.0;




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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `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,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

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

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

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

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

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

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

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

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

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

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

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

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

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

// File: default_workspace/Warpcoin.sol


pragma solidity >=0.8.10 < 0.9;

/**
    Website: https://www.warpcoin.io /
*/





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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 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 (uint256);

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

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

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

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

    function transferFrom(
        address from,
        address to,
        uint256 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 (uint256);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    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 (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

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

    function swap(
        uint256 amount0Out,
        uint256 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,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

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

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

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

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

contract WARPCOIN is ERC20, Ownable {
    using SafeMath for uint256;

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

    bool private swapping;

    address public marketingWallet;
    address public devWallet;

    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    uint256 public percentForLPBurn = 25; // 25 = .25%
    bool public lpBurnEnabled = true;
    uint256 public lpBurnFrequency = 3600 seconds;
    uint256 public lastLpBurnTime;

    uint256 public manualBurnFrequency = 30 minutes;
    uint256 public lastManualLpBurnTime;

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

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

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;

    /******************/

    // 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 marketingWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

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

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    event AutoNukeLP();

    event ManualNukeLP();

    constructor() ERC20("Warp Coin", "WARPCOIN") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

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

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

        uint256 _buyMarketingFee = 3;
        uint256 _buyLiquidityFee = 1;
        uint256 _buyDevFee = 1;

        uint256 _sellMarketingFee = 3;
        uint256 _sellLiquidityFee = 1;
        uint256 _sellDevFee = 1;

        uint256 totalSupply = 1000000000 * 1e18;

        maxTransactionAmount = 10000000 * 1e18; // 1% from total supply maxTransactionAmountTxn
        maxWallet = 20000000 * 1e18; // 2% from total supply maxWallet
        swapTokensAtAmount = totalSupply / 10000; // 0.01% swap wallet

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;

        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;

        marketingWallet = address(0x5bcF95B18a7d877693108822ff4fb6EB8b22C388); // set as marketing wallet
        devWallet = address(0x4865C2163d2E2a92EfDfa398fc71dAece039Ca46); // set as dev wallet

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

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

    receive() external payable {}

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        lastLpBurnTime = block.timestamp;
    }

    // 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(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= (totalSupply() * 1) / 10000000,
            "Swap amount cannot be lower than 0.00001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 1000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        swapTokensAtAmount = newAmount;
        return true;
    }

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

    function updateMaxWalletAmount(uint256 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;
    }

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

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 12, "Must keep fees at 12% or less");
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 12, "Must keep fees at 12% or less");
    }

    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 updateDevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;
    }

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

    event BoughtEarly(address indexed sniper);

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

        if (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)
                    ) {
                        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"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapBack();

            swapping = false;
        }

        if (
            !swapping &&
            automatedMarketMakerPairs[to] &&
            lpBurnEnabled &&
            block.timestamp >= lastLpBurnTime + lpBurnFrequency &&
            !_isExcludedFromFees[from]
        ) {
            autoBurnLiquidityPairTokens();
        }

        bool takeFee = !swapping;

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

        uint256 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);
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
            }

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

            amount -= fees;
        }

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

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            deadAddress,
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity +
            tokensForMarketing +
            tokensForDev;
        bool success;

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

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

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
            totalTokensToSwap /
            2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(
            totalTokensToSwap
        );
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);

        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;

tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;

        (success, ) = address(devWallet).call{value: ethForDev}("");

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                tokensForLiquidity
            );
        }

        (success, ) = address(marketingWallet).call{
            value: address(this).balance
        }("");
    }

    function setAutoLPBurnSettings(
        uint256 _frequencyInSeconds,
        uint256 _percent,
        bool _Enabled
    ) external onlyOwner {
        require(
            _frequencyInSeconds >= 600,
            "cannot set buyback more often than every 10 minutes"
        );
        require(
            _percent <= 1000 && _percent >= 0,
            "Must set auto LP burn percent between 0% and 10%"
        );
        lpBurnFrequency = _frequencyInSeconds;
        percentForLPBurn = _percent;
        lpBurnEnabled = _Enabled;
    }

    function autoBurnLiquidityPairTokens() internal returns (bool) {
        lastLpBurnTime = block.timestamp;

        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);

        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance.mul(percentForLPBurn).div(
            10000
        );

        // pull tokens from pancakePair liquidity and move to dead address permanently
        if (amountToBurn > 0) {
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }

        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        emit AutoNukeLP();
        return true;
    }

    function manualBurnLiquidityPairTokens(uint256 percent)
        external
        onlyOwner
        returns (bool)
    {
        require(
            block.timestamp > lastManualLpBurnTime + manualBurnFrequency,
            "Must wait for cooldown to finish"
        );
        require(percent <= 1000, "May not nuke more than 10% of tokens in LP");
        lastManualLpBurnTime = block.timestamp;

        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);

        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance.mul(percent).div(10000);

        // pull tokens from pancakePair liquidity and move to dead address permanently
        if (amountToBurn > 0) {
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }

        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        emit ManualNukeLP();
        return true;
    }
}

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":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","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":[],"name":"ManualNukeLP","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":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","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"},{"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":"buyDevFee","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":"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":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLiquidityPairTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","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":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"sellDevFee","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":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","outputs":[],"stateMutability":"nonpayable","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":"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":"tokensForDev","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":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","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":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526019600b556001600c60006101000a81548160ff021916908315150217905550610e10600d55610708600f556001601160006101000a81548160ff0219169083151502179055506000601160016101000a81548160ff0219169083151502179055506000601160026101000a81548160ff0219169083151502179055506001601360006101000a81548160ff021916908315150217905550348015620000a957600080fd5b506040518060400160405280600981526020017f5761727020436f696e00000000000000000000000000000000000000000000008152506040518060400160405280600881526020017f57415250434f494e00000000000000000000000000000000000000000000000081525081600390805190602001906200012e92919062000aa3565b5080600490805190602001906200014792919062000aa3565b5050506200016a6200015e620005d160201b60201c565b620005d960201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001968160016200069f60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000216573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023c919062000bbd565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002a4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ca919062000bbd565b6040518363ffffffff1660e01b8152600401620002e992919062000c00565b6020604051808303816000875af115801562000309573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200032f919062000bbd565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200037760a05160016200069f60201b60201c565b6200038c60a05160016200070a60201b60201c565b60006003905060006001905060006001905060006003905060006001905060006001905060006b033b2e3c9fd0803ce800000090506a084595161401484a0000006008819055506a108b2a2c28029094000000600a8190555061271081620003f5919062000c95565b60098190555086601581905550856016819055508460178190555060175460165460155462000425919062000ccd565b62000431919062000ccd565b6014819055508360198190555082601a8190555081601b81905550601b54601a5460195462000461919062000ccd565b6200046d919062000ccd565b601881905550735bcf95b18a7d877693108822ff4fb6eb8b22c388600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550734865c2163d2e2a92efdfa398fc71daece039ca46600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200053f62000531620007ab60201b60201c565b6001620007d560201b60201c565b62000552306001620007d560201b60201c565b6200056761dead6001620007d560201b60201c565b620005896200057b620007ab60201b60201c565b60016200069f60201b60201c565b6200059c3060016200069f60201b60201c565b620005b161dead60016200069f60201b60201c565b620005c333826200089060201b60201c565b505050505050505062000eeb565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620006af62000a0860201b60201c565b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620007e562000a0860201b60201c565b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000884919062000d47565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000902576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008f99062000dc5565b60405180910390fd5b620009166000838362000a9960201b60201c565b80600260008282546200092a919062000ccd565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000981919062000ccd565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620009e8919062000df8565b60405180910390a362000a046000838362000a9e60201b60201c565b5050565b62000a18620005d160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000a3e620007ab60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000a97576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a8e9062000e65565b60405180910390fd5b565b505050565b505050565b82805462000ab19062000eb6565b90600052602060002090601f01602090048101928262000ad5576000855562000b21565b82601f1062000af057805160ff191683800117855562000b21565b8280016001018555821562000b21579182015b8281111562000b2057825182559160200191906001019062000b03565b5b50905062000b30919062000b34565b5090565b5b8082111562000b4f57600081600090555060010162000b35565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000b858262000b58565b9050919050565b62000b978162000b78565b811462000ba357600080fd5b50565b60008151905062000bb78162000b8c565b92915050565b60006020828403121562000bd65762000bd562000b53565b5b600062000be68482850162000ba6565b91505092915050565b62000bfa8162000b78565b82525050565b600060408201905062000c17600083018562000bef565b62000c26602083018462000bef565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000ca28262000c2d565b915062000caf8362000c2d565b92508262000cc25762000cc162000c37565b5b828204905092915050565b600062000cda8262000c2d565b915062000ce78362000c2d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000d1f5762000d1e62000c66565b5b828201905092915050565b60008115159050919050565b62000d418162000d2a565b82525050565b600060208201905062000d5e600083018462000d36565b92915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000dad601f8362000d64565b915062000dba8262000d75565b602082019050919050565b6000602082019050818103600083015262000de08162000d9e565b9050919050565b62000df28162000c2d565b82525050565b600060208201905062000e0f600083018462000de7565b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000e4d60208362000d64565b915062000e5a8262000e15565b602082019050919050565b6000602082019050818103600083015262000e808162000e3e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000ecf57607f821691505b60208210810362000ee55762000ee462000e87565b5b50919050565b60805160a0516152d662000f73600039600081816111cc0152818161163c01528181611d7501528181611e2c01528181611e59015281816125a2015281816136a40152818161375d015261378a015260008181610f950152818161254a01528181613900015281816139e101528181613a0801528181613aa40152613acb01526152d66000f3fe6080604052600436106103b15760003560e01c80638da5cb5b116101e7578063bbc0c7421161010d578063dd62ed3e116100a0578063f2fde38b1161006f578063f2fde38b14610e03578063f637434214610e2c578063f8b45b0514610e57578063fe72b27a14610e82576103b8565b8063dd62ed3e14610d45578063e2f4560514610d82578063e884f26014610dad578063f11a24d314610dd8576103b8565b8063c876d0b9116100dc578063c876d0b914610c87578063c8c8ebe414610cb2578063d257b34f14610cdd578063d85ba06314610d1a576103b8565b8063bbc0c74214610be1578063c024666814610c0c578063c17b5b8c14610c35578063c18bc19514610c5e576103b8565b80639ec22c0e11610185578063a4c82a0011610154578063a4c82a0014610b13578063a9059cbb14610b3e578063aacebbe314610b7b578063b62496f514610ba4576103b8565b80639ec22c0e14610a555780639fccce3214610a80578063a0d82dc514610aab578063a457c2d714610ad6576103b8565b8063924de9b7116101c1578063924de9b7146109ad57806395d89b41146109d65780639a7a23d614610a015780639c3b4fdc14610a2a576103b8565b80638da5cb5b1461092c5780638ea5220f146109575780639213691314610982576103b8565b8063313ce567116102d7578063715018a61161026a57806375f0a8741161023957806375f0a874146108965780637bce5a04146108c15780638095d564146108ec5780638a8c523c14610915576103b8565b8063715018a614610802578063730c188814610819578063751039fc146108425780637571336a1461086d576103b8565b80634fbee193116102a65780634fbee193146107325780636a486a8e1461076f5780636ddd17131461079a57806370a08231146107c5576103b8565b8063313ce56714610674578063395093511461069f57806349bd5a5e146106dc5780634a62bb6514610707576103b8565b8063199ffc721161034f57806323b872dd1161031e57806323b872dd146105b657806327c8f835146105f35780632c3e486c1461061e5780632e82f1a014610649576103b8565b8063199ffc721461050c5780631a8145bb146105375780631f3fed8f14610562578063203e727e1461058d576103b8565b80631694505e1161038b5780631694505e1461046257806318160ddd1461048d5780631816467f146104b8578063184c16c5146104e1576103b8565b806306fdde03146103bd578063095ea7b3146103e857806310d5de5314610425576103b8565b366103b857005b600080fd5b3480156103c957600080fd5b506103d2610ebf565b6040516103df9190613c13565b60405180910390f35b3480156103f457600080fd5b5061040f600480360381019061040a9190613cce565b610f51565b60405161041c9190613d29565b60405180910390f35b34801561043157600080fd5b5061044c60048036038101906104479190613d44565b610f74565b6040516104599190613d29565b60405180910390f35b34801561046e57600080fd5b50610477610f93565b6040516104849190613dd0565b60405180910390f35b34801561049957600080fd5b506104a2610fb7565b6040516104af9190613dfa565b60405180910390f35b3480156104c457600080fd5b506104df60048036038101906104da9190613d44565b610fc1565b005b3480156104ed57600080fd5b506104f6611089565b6040516105039190613dfa565b60405180910390f35b34801561051857600080fd5b5061052161108f565b60405161052e9190613dfa565b60405180910390f35b34801561054357600080fd5b5061054c611095565b6040516105599190613dfa565b60405180910390f35b34801561056e57600080fd5b5061057761109b565b6040516105849190613dfa565b60405180910390f35b34801561059957600080fd5b506105b460048036038101906105af9190613e15565b6110a1565b005b3480156105c257600080fd5b506105dd60048036038101906105d89190613e42565b61113c565b6040516105ea9190613d29565b60405180910390f35b3480156105ff57600080fd5b5061060861116b565b6040516106159190613ea4565b60405180910390f35b34801561062a57600080fd5b50610633611171565b6040516106409190613dfa565b60405180910390f35b34801561065557600080fd5b5061065e611177565b60405161066b9190613d29565b60405180910390f35b34801561068057600080fd5b5061068961118a565b6040516106969190613edb565b60405180910390f35b3480156106ab57600080fd5b506106c660048036038101906106c19190613cce565b611193565b6040516106d39190613d29565b60405180910390f35b3480156106e857600080fd5b506106f16111ca565b6040516106fe9190613ea4565b60405180910390f35b34801561071357600080fd5b5061071c6111ee565b6040516107299190613d29565b60405180910390f35b34801561073e57600080fd5b5061075960048036038101906107549190613d44565b611201565b6040516107669190613d29565b60405180910390f35b34801561077b57600080fd5b50610784611257565b6040516107919190613dfa565b60405180910390f35b3480156107a657600080fd5b506107af61125d565b6040516107bc9190613d29565b60405180910390f35b3480156107d157600080fd5b506107ec60048036038101906107e79190613d44565b611270565b6040516107f99190613dfa565b60405180910390f35b34801561080e57600080fd5b506108176112b8565b005b34801561082557600080fd5b50610840600480360381019061083b9190613f22565b6112cc565b005b34801561084e57600080fd5b50610857611398565b6040516108649190613d29565b60405180910390f35b34801561087957600080fd5b50610894600480360381019061088f9190613f75565b6113c4565b005b3480156108a257600080fd5b506108ab611427565b6040516108b89190613ea4565b60405180910390f35b3480156108cd57600080fd5b506108d661144d565b6040516108e39190613dfa565b60405180910390f35b3480156108f857600080fd5b50610913600480360381019061090e9190613fb5565b611453565b005b34801561092157600080fd5b5061092a6114de565b005b34801561093857600080fd5b50610941611525565b60405161094e9190613ea4565b60405180910390f35b34801561096357600080fd5b5061096c61154f565b6040516109799190613ea4565b60405180910390f35b34801561098e57600080fd5b50610997611575565b6040516109a49190613dfa565b60405180910390f35b3480156109b957600080fd5b506109d460048036038101906109cf9190614008565b61157b565b005b3480156109e257600080fd5b506109eb6115a0565b6040516109f89190613c13565b60405180910390f35b348015610a0d57600080fd5b50610a286004803603810190610a239190613f75565b611632565b005b348015610a3657600080fd5b50610a3f6116d6565b604051610a4c9190613dfa565b60405180910390f35b348015610a6157600080fd5b50610a6a6116dc565b604051610a779190613dfa565b60405180910390f35b348015610a8c57600080fd5b50610a956116e2565b604051610aa29190613dfa565b60405180910390f35b348015610ab757600080fd5b50610ac06116e8565b604051610acd9190613dfa565b60405180910390f35b348015610ae257600080fd5b50610afd6004803603810190610af89190613cce565b6116ee565b604051610b0a9190613d29565b60405180910390f35b348015610b1f57600080fd5b50610b28611765565b604051610b359190613dfa565b60405180910390f35b348015610b4a57600080fd5b50610b656004803603810190610b609190613cce565b61176b565b604051610b729190613d29565b60405180910390f35b348015610b8757600080fd5b50610ba26004803603810190610b9d9190613d44565b61178e565b005b348015610bb057600080fd5b50610bcb6004803603810190610bc69190613d44565b611856565b604051610bd89190613d29565b60405180910390f35b348015610bed57600080fd5b50610bf6611876565b604051610c039190613d29565b60405180910390f35b348015610c1857600080fd5b50610c336004803603810190610c2e9190613f75565b611889565b005b348015610c4157600080fd5b50610c5c6004803603810190610c579190613fb5565b61193a565b005b348015610c6a57600080fd5b50610c856004803603810190610c809190613e15565b6119c5565b005b348015610c9357600080fd5b50610c9c611a60565b604051610ca99190613d29565b60405180910390f35b348015610cbe57600080fd5b50610cc7611a73565b604051610cd49190613dfa565b60405180910390f35b348015610ce957600080fd5b50610d046004803603810190610cff9190613e15565b611a79565b604051610d119190613d29565b60405180910390f35b348015610d2657600080fd5b50610d2f611b5a565b604051610d3c9190613dfa565b60405180910390f35b348015610d5157600080fd5b50610d6c6004803603810190610d679190614035565b611b60565b604051610d799190613dfa565b60405180910390f35b348015610d8e57600080fd5b50610d97611be7565b604051610da49190613dfa565b60405180910390f35b348015610db957600080fd5b50610dc2611bed565b604051610dcf9190613d29565b60405180910390f35b348015610de457600080fd5b50610ded611c19565b604051610dfa9190613dfa565b60405180910390f35b348015610e0f57600080fd5b50610e2a6004803603810190610e259190613d44565b611c1f565b005b348015610e3857600080fd5b50610e41611ca2565b604051610e4e9190613dfa565b60405180910390f35b348015610e6357600080fd5b50610e6c611ca8565b604051610e799190613dfa565b60405180910390f35b348015610e8e57600080fd5b50610ea96004803603810190610ea49190613e15565b611cae565b604051610eb69190613d29565b60405180910390f35b606060038054610ece906140a4565b80601f0160208091040260200160405190810160405280929190818152602001828054610efa906140a4565b8015610f475780601f10610f1c57610100808354040283529160200191610f47565b820191906000526020600020905b815481529060010190602001808311610f2a57829003601f168201915b5050505050905090565b600080610f5c611f12565b9050610f69818585611f1a565b600191505092915050565b602080528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610fc96120e3565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b600b5481565b601d5481565b601c5481565b6110a96120e3565b670de0b6b3a76400006103e860016110bf610fb7565b6110c99190614104565b6110d3919061418d565b6110dd919061418d565b81101561111f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111690614230565b60405180910390fd5b670de0b6b3a7640000816111339190614104565b60088190555050565b600080611147611f12565b9050611154858285612161565b61115f8585856121ed565b60019150509392505050565b61dead81565b600d5481565b600c60009054906101000a900460ff1681565b60006012905090565b60008061119e611f12565b90506111bf8185856111b08589611b60565b6111ba9190614250565b611f1a565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601160009054906101000a900460ff1681565b6000601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60185481565b601160029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112c06120e3565b6112ca6000612f82565b565b6112d46120e3565b610258831015611319576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131090614318565b60405180910390fd5b6103e8821115801561132c575060008210155b61136b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611362906143aa565b60405180910390fd5b82600d8190555081600b8190555080600c60006101000a81548160ff021916908315150217905550505050565b60006113a26120e3565b6000601160006101000a81548160ff0219169083151502179055506001905090565b6113cc6120e3565b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b61145b6120e3565b8260158190555081601681905550806017819055506017546016546015546114839190614250565b61148d9190614250565b601481905550600c60145411156114d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d090614416565b60405180910390fd5b505050565b6114e66120e3565b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60195481565b6115836120e3565b80601160026101000a81548160ff02191690831515021790555050565b6060600480546115af906140a4565b80601f01602080910402602001604051908101604052809291908181526020018280546115db906140a4565b80156116285780601f106115fd57610100808354040283529160200191611628565b820191906000526020600020905b81548152906001019060200180831161160b57829003601f168201915b5050505050905090565b61163a6120e3565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bf906144a8565b60405180910390fd5b6116d28282613048565b5050565b60175481565b60105481565b601e5481565b601b5481565b6000806116f9611f12565b905060006117078286611b60565b90508381101561174c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117439061453a565b60405180910390fd5b6117598286868403611f1a565b60019250505092915050565b600e5481565b600080611776611f12565b90506117838185856121ed565b600191505092915050565b6117966120e3565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60216020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b6118916120e3565b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161192e9190613d29565b60405180910390a25050565b6119426120e3565b8260198190555081601a8190555080601b81905550601b54601a5460195461196a9190614250565b6119749190614250565b601881905550600c60185411156119c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b790614416565b60405180910390fd5b505050565b6119cd6120e3565b670de0b6b3a76400006103e860056119e3610fb7565b6119ed9190614104565b6119f7919061418d565b611a01919061418d565b811015611a43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3a906145cc565b60405180910390fd5b670de0b6b3a764000081611a579190614104565b600a8190555050565b601360009054906101000a900460ff1681565b60085481565b6000611a836120e3565b629896806001611a91610fb7565b611a9b9190614104565b611aa5919061418d565b821015611ae7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ade9061465e565b60405180910390fd5b6103e86005611af4610fb7565b611afe9190614104565b611b08919061418d565b821115611b4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b41906146f0565b60405180910390fd5b8160098190555060019050919050565b60145481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b6000611bf76120e3565b6000601360006101000a81548160ff0219169083151502179055506001905090565b60165481565b611c276120e3565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8d90614782565b60405180910390fd5b611c9f81612f82565b50565b601a5481565b600a5481565b6000611cb86120e3565b600f54601054611cc89190614250565b4211611d09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d00906147ee565b60405180910390fd5b6103e8821115611d4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4590614880565b60405180910390fd5b4260108190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b8152600401611db09190613ea4565b602060405180830381865afa158015611dcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611df191906148b5565b90506000611e1c612710611e0e86856130e990919063ffffffff16565b6130ff90919063ffffffff16565b90506000811115611e5557611e547f000000000000000000000000000000000000000000000000000000000000000061dead83613115565b5b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611ec257600080fd5b505af1158015611ed6573d6000803e3d6000fd5b505050507f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb60405160405180910390a160019350505050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8090614954565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ff8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fef906149e6565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120d69190613dfa565b60405180910390a3505050565b6120eb611f12565b73ffffffffffffffffffffffffffffffffffffffff16612109611525565b73ffffffffffffffffffffffffffffffffffffffff161461215f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215690614a52565b60405180910390fd5b565b600061216d8484611b60565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146121e757818110156121d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d090614abe565b60405180910390fd5b6121e68484848403611f1a565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361225c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225390614b50565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c290614be2565b60405180910390fd5b600081036122e4576122df83836000613115565b612f7d565b601160009054906101000a900460ff16156129a757612301611525565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561236f575061233f611525565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123a85750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123e2575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123fb5750600560149054906101000a900460ff16155b156129a657601160019054906101000a900460ff166124f557601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124b55750601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6124f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124eb90614c4e565b60405180910390fd5b5b601360009054906101000a900460ff16156126bd57612512611525565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561259957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125f157507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156126bc5743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612677576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266e90614d06565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127605750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612807576008548111156127aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a190614d98565b60405180910390fd5b600a546127b683611270565b826127c19190614250565b1115612802576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f990614e04565b60405180910390fd5b6129a5565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128aa5750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156128f9576008548111156128f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128eb90614e96565b60405180910390fd5b6129a4565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166129a357600a5461295683611270565b826129619190614250565b11156129a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299990614e04565b60405180910390fd5b5b5b5b5b5b60006129b230611270565b9050600060095482101590508080156129d75750601160029054906101000a900460ff165b80156129f05750600560149054906101000a900460ff16155b8015612a465750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612a9c5750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612af25750601f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b36576001600560146101000a81548160ff021916908315150217905550612b1a613394565b6000600560146101000a81548160ff0219169083151502179055505b600560149054906101000a900460ff16158015612b9c5750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015612bb45750600c60009054906101000a900460ff165b8015612bcf5750600d54600e54612bcb9190614250565b4210155b8015612c255750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c3457612c3261367b565b505b6000600560149054906101000a900460ff16159050601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612cea5750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612cf457600090505b60008115612f6d57602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d5757506000601854115b15612e2457612d846064612d76601854886130e990919063ffffffff16565b6130ff90919063ffffffff16565b9050601854601a5482612d979190614104565b612da1919061418d565b601d6000828254612db29190614250565b92505081905550601854601b5482612dca9190614104565b612dd4919061418d565b601e6000828254612de59190614250565b9250508190555060185460195482612dfd9190614104565b612e07919061418d565b601c6000828254612e189190614250565b92505081905550612f49565b602160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e7f57506000601454115b15612f4857612eac6064612e9e601454886130e990919063ffffffff16565b6130ff90919063ffffffff16565b905060145460165482612ebf9190614104565b612ec9919061418d565b601d6000828254612eda9190614250565b9250508190555060145460175482612ef29190614104565b612efc919061418d565b601e6000828254612f0d9190614250565b9250508190555060145460155482612f259190614104565b612f2f919061418d565b601c6000828254612f409190614250565b925050819055505b5b6000811115612f5e57612f5d873083613115565b5b8085612f6a9190614eb6565b94505b612f78878787613115565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600081836130f79190614104565b905092915050565b6000818361310d919061418d565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613184576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161317b90614b50565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036131f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ea90614be2565b60405180910390fd5b6131fe838383613841565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613284576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161327b90614f5c565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133179190614250565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161337b9190613dfa565b60405180910390a361338e848484613846565b50505050565b600061339f30611270565b90506000601e54601c54601d546133b69190614250565b6133c09190614250565b90506000808314806133d25750600082145b156133df57505050613679565b60146009546133ee9190614104565b8311156134075760146009546134049190614104565b92505b6000600283601d548661341a9190614104565b613424919061418d565b61342e919061418d565b90506000613445828661384b90919063ffffffff16565b9050600047905061345582613861565b600061346a824761384b90919063ffffffff16565b9050600061349587613487601c54856130e990919063ffffffff16565b6130ff90919063ffffffff16565b905060006134c0886134b2601e54866130e990919063ffffffff16565b6130ff90919063ffffffff16565b905060008183856134d19190614eb6565b6134db9190614eb6565b90506000601d819055506000601c819055506000601e81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161353b90614fad565b60006040518083038185875af1925050503d8060008114613578576040519150601f19603f3d011682016040523d82523d6000602084013e61357d565b606091505b5050809850506000871180156135935750600081115b156135e0576135a28782613a9e565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601d546040516135d793929190614fc2565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161362690614fad565b60006040518083038185875af1925050503d8060008114613663576040519150601f19603f3d011682016040523d82523d6000602084013e613668565b606091505b505080985050505050505050505050505b565b600042600e8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b81526004016136df9190613ea4565b602060405180830381865afa1580156136fc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061372091906148b5565b9050600061374d61271061373f600b54856130e990919063ffffffff16565b6130ff90919063ffffffff16565b90506000811115613786576137857f000000000000000000000000000000000000000000000000000000000000000061dead83613115565b5b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156137f357600080fd5b505af1158015613807573d6000803e3d6000fd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b505050565b505050565b600081836138599190614eb6565b905092915050565b6000600267ffffffffffffffff81111561387e5761387d614ff9565b5b6040519080825280602002602001820160405280156138ac5781602001602082028036833780820191505090505b50905030816000815181106138c4576138c3615028565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613969573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061398d919061506c565b816001815181106139a1576139a0615028565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613a06307f000000000000000000000000000000000000000000000000000000000000000084611f1a565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613a68959493929190615192565b600060405180830381600087803b158015613a8257600080fd5b505af1158015613a96573d6000803e3d6000fd5b505050505050565b613ac9307f000000000000000000000000000000000000000000000000000000000000000084611f1a565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401613b30969594939291906151ec565b60606040518083038185885af1158015613b4e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613b73919061524d565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613bb4578082015181840152602081019050613b99565b83811115613bc3576000848401525b50505050565b6000601f19601f8301169050919050565b6000613be582613b7a565b613bef8185613b85565b9350613bff818560208601613b96565b613c0881613bc9565b840191505092915050565b60006020820190508181036000830152613c2d8184613bda565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613c6582613c3a565b9050919050565b613c7581613c5a565b8114613c8057600080fd5b50565b600081359050613c9281613c6c565b92915050565b6000819050919050565b613cab81613c98565b8114613cb657600080fd5b50565b600081359050613cc881613ca2565b92915050565b60008060408385031215613ce557613ce4613c35565b5b6000613cf385828601613c83565b9250506020613d0485828601613cb9565b9150509250929050565b60008115159050919050565b613d2381613d0e565b82525050565b6000602082019050613d3e6000830184613d1a565b92915050565b600060208284031215613d5a57613d59613c35565b5b6000613d6884828501613c83565b91505092915050565b6000819050919050565b6000613d96613d91613d8c84613c3a565b613d71565b613c3a565b9050919050565b6000613da882613d7b565b9050919050565b6000613dba82613d9d565b9050919050565b613dca81613daf565b82525050565b6000602082019050613de56000830184613dc1565b92915050565b613df481613c98565b82525050565b6000602082019050613e0f6000830184613deb565b92915050565b600060208284031215613e2b57613e2a613c35565b5b6000613e3984828501613cb9565b91505092915050565b600080600060608486031215613e5b57613e5a613c35565b5b6000613e6986828701613c83565b9350506020613e7a86828701613c83565b9250506040613e8b86828701613cb9565b9150509250925092565b613e9e81613c5a565b82525050565b6000602082019050613eb96000830184613e95565b92915050565b600060ff82169050919050565b613ed581613ebf565b82525050565b6000602082019050613ef06000830184613ecc565b92915050565b613eff81613d0e565b8114613f0a57600080fd5b50565b600081359050613f1c81613ef6565b92915050565b600080600060608486031215613f3b57613f3a613c35565b5b6000613f4986828701613cb9565b9350506020613f5a86828701613cb9565b9250506040613f6b86828701613f0d565b9150509250925092565b60008060408385031215613f8c57613f8b613c35565b5b6000613f9a85828601613c83565b9250506020613fab85828601613f0d565b9150509250929050565b600080600060608486031215613fce57613fcd613c35565b5b6000613fdc86828701613cb9565b9350506020613fed86828701613cb9565b9250506040613ffe86828701613cb9565b9150509250925092565b60006020828403121561401e5761401d613c35565b5b600061402c84828501613f0d565b91505092915050565b6000806040838503121561404c5761404b613c35565b5b600061405a85828601613c83565b925050602061406b85828601613c83565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806140bc57607f821691505b6020821081036140cf576140ce614075565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061410f82613c98565b915061411a83613c98565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614153576141526140d5565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061419882613c98565b91506141a383613c98565b9250826141b3576141b261415e565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b600061421a602f83613b85565b9150614225826141be565b604082019050919050565b600060208201905081810360008301526142498161420d565b9050919050565b600061425b82613c98565b915061426683613c98565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561429b5761429a6140d5565b5b828201905092915050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b6000614302603383613b85565b915061430d826142a6565b604082019050919050565b60006020820190508181036000830152614331816142f5565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b6000614394603083613b85565b915061439f82614338565b604082019050919050565b600060208201905081810360008301526143c381614387565b9050919050565b7f4d757374206b656570206665657320617420313225206f72206c657373000000600082015250565b6000614400601d83613b85565b915061440b826143ca565b602082019050919050565b6000602082019050818103600083015261442f816143f3565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614492603983613b85565b915061449d82614436565b604082019050919050565b600060208201905081810360008301526144c181614485565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614524602583613b85565b915061452f826144c8565b604082019050919050565b6000602082019050818103600083015261455381614517565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006145b6602483613b85565b91506145c18261455a565b604082019050919050565b600060208201905081810360008301526145e5816145a9565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e30303030312520746f74616c20737570706c792e000000000000000000602082015250565b6000614648603783613b85565b9150614653826145ec565b604082019050919050565b600060208201905081810360008301526146778161463b565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006146da603483613b85565b91506146e58261467e565b604082019050919050565b60006020820190508181036000830152614709816146cd565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061476c602683613b85565b915061477782614710565b604082019050919050565b6000602082019050818103600083015261479b8161475f565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b60006147d8602083613b85565b91506147e3826147a2565b602082019050919050565b60006020820190508181036000830152614807816147cb565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b600061486a602a83613b85565b91506148758261480e565b604082019050919050565b600060208201905081810360008301526148998161485d565b9050919050565b6000815190506148af81613ca2565b92915050565b6000602082840312156148cb576148ca613c35565b5b60006148d9848285016148a0565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061493e602483613b85565b9150614949826148e2565b604082019050919050565b6000602082019050818103600083015261496d81614931565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006149d0602283613b85565b91506149db82614974565b604082019050919050565b600060208201905081810360008301526149ff816149c3565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614a3c602083613b85565b9150614a4782614a06565b602082019050919050565b60006020820190508181036000830152614a6b81614a2f565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000614aa8601d83613b85565b9150614ab382614a72565b602082019050919050565b60006020820190508181036000830152614ad781614a9b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614b3a602583613b85565b9150614b4582614ade565b604082019050919050565b60006020820190508181036000830152614b6981614b2d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614bcc602383613b85565b9150614bd782614b70565b604082019050919050565b60006020820190508181036000830152614bfb81614bbf565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614c38601683613b85565b9150614c4382614c02565b602082019050919050565b60006020820190508181036000830152614c6781614c2b565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614cf0604983613b85565b9150614cfb82614c6e565b606082019050919050565b60006020820190508181036000830152614d1f81614ce3565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614d82603583613b85565b9150614d8d82614d26565b604082019050919050565b60006020820190508181036000830152614db181614d75565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614dee601383613b85565b9150614df982614db8565b602082019050919050565b60006020820190508181036000830152614e1d81614de1565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614e80603683613b85565b9150614e8b82614e24565b604082019050919050565b60006020820190508181036000830152614eaf81614e73565b9050919050565b6000614ec182613c98565b9150614ecc83613c98565b925082821015614edf57614ede6140d5565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614f46602683613b85565b9150614f5182614eea565b604082019050919050565b60006020820190508181036000830152614f7581614f39565b9050919050565b600081905092915050565b50565b6000614f97600083614f7c565b9150614fa282614f87565b600082019050919050565b6000614fb882614f8a565b9150819050919050565b6000606082019050614fd76000830186613deb565b614fe46020830185613deb565b614ff16040830184613deb565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061506681613c6c565b92915050565b60006020828403121561508257615081613c35565b5b600061509084828501615057565b91505092915050565b6000819050919050565b60006150be6150b96150b484615099565b613d71565b613c98565b9050919050565b6150ce816150a3565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61510981613c5a565b82525050565b600061511b8383615100565b60208301905092915050565b6000602082019050919050565b600061513f826150d4565b61514981856150df565b9350615154836150f0565b8060005b8381101561518557815161516c888261510f565b975061517783615127565b925050600181019050615158565b5085935050505092915050565b600060a0820190506151a76000830188613deb565b6151b460208301876150c5565b81810360408301526151c68186615134565b90506151d56060830185613e95565b6151e26080830184613deb565b9695505050505050565b600060c0820190506152016000830189613e95565b61520e6020830188613deb565b61521b60408301876150c5565b61522860608301866150c5565b6152356080830185613e95565b61524260a0830184613deb565b979650505050505050565b60008060006060848603121561526657615265613c35565b5b6000615274868287016148a0565b9350506020615285868287016148a0565b9250506040615296868287016148a0565b915050925092509256fea2646970667358221220bd25f9fa1dbe77c3c06682835e15ee8b906fb73f1fb413d8a42621b2ae5dffb564736f6c634300080d0033

Deployed Bytecode

0x6080604052600436106103b15760003560e01c80638da5cb5b116101e7578063bbc0c7421161010d578063dd62ed3e116100a0578063f2fde38b1161006f578063f2fde38b14610e03578063f637434214610e2c578063f8b45b0514610e57578063fe72b27a14610e82576103b8565b8063dd62ed3e14610d45578063e2f4560514610d82578063e884f26014610dad578063f11a24d314610dd8576103b8565b8063c876d0b9116100dc578063c876d0b914610c87578063c8c8ebe414610cb2578063d257b34f14610cdd578063d85ba06314610d1a576103b8565b8063bbc0c74214610be1578063c024666814610c0c578063c17b5b8c14610c35578063c18bc19514610c5e576103b8565b80639ec22c0e11610185578063a4c82a0011610154578063a4c82a0014610b13578063a9059cbb14610b3e578063aacebbe314610b7b578063b62496f514610ba4576103b8565b80639ec22c0e14610a555780639fccce3214610a80578063a0d82dc514610aab578063a457c2d714610ad6576103b8565b8063924de9b7116101c1578063924de9b7146109ad57806395d89b41146109d65780639a7a23d614610a015780639c3b4fdc14610a2a576103b8565b80638da5cb5b1461092c5780638ea5220f146109575780639213691314610982576103b8565b8063313ce567116102d7578063715018a61161026a57806375f0a8741161023957806375f0a874146108965780637bce5a04146108c15780638095d564146108ec5780638a8c523c14610915576103b8565b8063715018a614610802578063730c188814610819578063751039fc146108425780637571336a1461086d576103b8565b80634fbee193116102a65780634fbee193146107325780636a486a8e1461076f5780636ddd17131461079a57806370a08231146107c5576103b8565b8063313ce56714610674578063395093511461069f57806349bd5a5e146106dc5780634a62bb6514610707576103b8565b8063199ffc721161034f57806323b872dd1161031e57806323b872dd146105b657806327c8f835146105f35780632c3e486c1461061e5780632e82f1a014610649576103b8565b8063199ffc721461050c5780631a8145bb146105375780631f3fed8f14610562578063203e727e1461058d576103b8565b80631694505e1161038b5780631694505e1461046257806318160ddd1461048d5780631816467f146104b8578063184c16c5146104e1576103b8565b806306fdde03146103bd578063095ea7b3146103e857806310d5de5314610425576103b8565b366103b857005b600080fd5b3480156103c957600080fd5b506103d2610ebf565b6040516103df9190613c13565b60405180910390f35b3480156103f457600080fd5b5061040f600480360381019061040a9190613cce565b610f51565b60405161041c9190613d29565b60405180910390f35b34801561043157600080fd5b5061044c60048036038101906104479190613d44565b610f74565b6040516104599190613d29565b60405180910390f35b34801561046e57600080fd5b50610477610f93565b6040516104849190613dd0565b60405180910390f35b34801561049957600080fd5b506104a2610fb7565b6040516104af9190613dfa565b60405180910390f35b3480156104c457600080fd5b506104df60048036038101906104da9190613d44565b610fc1565b005b3480156104ed57600080fd5b506104f6611089565b6040516105039190613dfa565b60405180910390f35b34801561051857600080fd5b5061052161108f565b60405161052e9190613dfa565b60405180910390f35b34801561054357600080fd5b5061054c611095565b6040516105599190613dfa565b60405180910390f35b34801561056e57600080fd5b5061057761109b565b6040516105849190613dfa565b60405180910390f35b34801561059957600080fd5b506105b460048036038101906105af9190613e15565b6110a1565b005b3480156105c257600080fd5b506105dd60048036038101906105d89190613e42565b61113c565b6040516105ea9190613d29565b60405180910390f35b3480156105ff57600080fd5b5061060861116b565b6040516106159190613ea4565b60405180910390f35b34801561062a57600080fd5b50610633611171565b6040516106409190613dfa565b60405180910390f35b34801561065557600080fd5b5061065e611177565b60405161066b9190613d29565b60405180910390f35b34801561068057600080fd5b5061068961118a565b6040516106969190613edb565b60405180910390f35b3480156106ab57600080fd5b506106c660048036038101906106c19190613cce565b611193565b6040516106d39190613d29565b60405180910390f35b3480156106e857600080fd5b506106f16111ca565b6040516106fe9190613ea4565b60405180910390f35b34801561071357600080fd5b5061071c6111ee565b6040516107299190613d29565b60405180910390f35b34801561073e57600080fd5b5061075960048036038101906107549190613d44565b611201565b6040516107669190613d29565b60405180910390f35b34801561077b57600080fd5b50610784611257565b6040516107919190613dfa565b60405180910390f35b3480156107a657600080fd5b506107af61125d565b6040516107bc9190613d29565b60405180910390f35b3480156107d157600080fd5b506107ec60048036038101906107e79190613d44565b611270565b6040516107f99190613dfa565b60405180910390f35b34801561080e57600080fd5b506108176112b8565b005b34801561082557600080fd5b50610840600480360381019061083b9190613f22565b6112cc565b005b34801561084e57600080fd5b50610857611398565b6040516108649190613d29565b60405180910390f35b34801561087957600080fd5b50610894600480360381019061088f9190613f75565b6113c4565b005b3480156108a257600080fd5b506108ab611427565b6040516108b89190613ea4565b60405180910390f35b3480156108cd57600080fd5b506108d661144d565b6040516108e39190613dfa565b60405180910390f35b3480156108f857600080fd5b50610913600480360381019061090e9190613fb5565b611453565b005b34801561092157600080fd5b5061092a6114de565b005b34801561093857600080fd5b50610941611525565b60405161094e9190613ea4565b60405180910390f35b34801561096357600080fd5b5061096c61154f565b6040516109799190613ea4565b60405180910390f35b34801561098e57600080fd5b50610997611575565b6040516109a49190613dfa565b60405180910390f35b3480156109b957600080fd5b506109d460048036038101906109cf9190614008565b61157b565b005b3480156109e257600080fd5b506109eb6115a0565b6040516109f89190613c13565b60405180910390f35b348015610a0d57600080fd5b50610a286004803603810190610a239190613f75565b611632565b005b348015610a3657600080fd5b50610a3f6116d6565b604051610a4c9190613dfa565b60405180910390f35b348015610a6157600080fd5b50610a6a6116dc565b604051610a779190613dfa565b60405180910390f35b348015610a8c57600080fd5b50610a956116e2565b604051610aa29190613dfa565b60405180910390f35b348015610ab757600080fd5b50610ac06116e8565b604051610acd9190613dfa565b60405180910390f35b348015610ae257600080fd5b50610afd6004803603810190610af89190613cce565b6116ee565b604051610b0a9190613d29565b60405180910390f35b348015610b1f57600080fd5b50610b28611765565b604051610b359190613dfa565b60405180910390f35b348015610b4a57600080fd5b50610b656004803603810190610b609190613cce565b61176b565b604051610b729190613d29565b60405180910390f35b348015610b8757600080fd5b50610ba26004803603810190610b9d9190613d44565b61178e565b005b348015610bb057600080fd5b50610bcb6004803603810190610bc69190613d44565b611856565b604051610bd89190613d29565b60405180910390f35b348015610bed57600080fd5b50610bf6611876565b604051610c039190613d29565b60405180910390f35b348015610c1857600080fd5b50610c336004803603810190610c2e9190613f75565b611889565b005b348015610c4157600080fd5b50610c5c6004803603810190610c579190613fb5565b61193a565b005b348015610c6a57600080fd5b50610c856004803603810190610c809190613e15565b6119c5565b005b348015610c9357600080fd5b50610c9c611a60565b604051610ca99190613d29565b60405180910390f35b348015610cbe57600080fd5b50610cc7611a73565b604051610cd49190613dfa565b60405180910390f35b348015610ce957600080fd5b50610d046004803603810190610cff9190613e15565b611a79565b604051610d119190613d29565b60405180910390f35b348015610d2657600080fd5b50610d2f611b5a565b604051610d3c9190613dfa565b60405180910390f35b348015610d5157600080fd5b50610d6c6004803603810190610d679190614035565b611b60565b604051610d799190613dfa565b60405180910390f35b348015610d8e57600080fd5b50610d97611be7565b604051610da49190613dfa565b60405180910390f35b348015610db957600080fd5b50610dc2611bed565b604051610dcf9190613d29565b60405180910390f35b348015610de457600080fd5b50610ded611c19565b604051610dfa9190613dfa565b60405180910390f35b348015610e0f57600080fd5b50610e2a6004803603810190610e259190613d44565b611c1f565b005b348015610e3857600080fd5b50610e41611ca2565b604051610e4e9190613dfa565b60405180910390f35b348015610e6357600080fd5b50610e6c611ca8565b604051610e799190613dfa565b60405180910390f35b348015610e8e57600080fd5b50610ea96004803603810190610ea49190613e15565b611cae565b604051610eb69190613d29565b60405180910390f35b606060038054610ece906140a4565b80601f0160208091040260200160405190810160405280929190818152602001828054610efa906140a4565b8015610f475780601f10610f1c57610100808354040283529160200191610f47565b820191906000526020600020905b815481529060010190602001808311610f2a57829003601f168201915b5050505050905090565b600080610f5c611f12565b9050610f69818585611f1a565b600191505092915050565b602080528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610fc96120e3565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b600b5481565b601d5481565b601c5481565b6110a96120e3565b670de0b6b3a76400006103e860016110bf610fb7565b6110c99190614104565b6110d3919061418d565b6110dd919061418d565b81101561111f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111690614230565b60405180910390fd5b670de0b6b3a7640000816111339190614104565b60088190555050565b600080611147611f12565b9050611154858285612161565b61115f8585856121ed565b60019150509392505050565b61dead81565b600d5481565b600c60009054906101000a900460ff1681565b60006012905090565b60008061119e611f12565b90506111bf8185856111b08589611b60565b6111ba9190614250565b611f1a565b600191505092915050565b7f000000000000000000000000eef1ebd7bbebf980cf26c9b6a30f5c87886ddc5b81565b601160009054906101000a900460ff1681565b6000601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60185481565b601160029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112c06120e3565b6112ca6000612f82565b565b6112d46120e3565b610258831015611319576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131090614318565b60405180910390fd5b6103e8821115801561132c575060008210155b61136b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611362906143aa565b60405180910390fd5b82600d8190555081600b8190555080600c60006101000a81548160ff021916908315150217905550505050565b60006113a26120e3565b6000601160006101000a81548160ff0219169083151502179055506001905090565b6113cc6120e3565b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b61145b6120e3565b8260158190555081601681905550806017819055506017546016546015546114839190614250565b61148d9190614250565b601481905550600c60145411156114d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d090614416565b60405180910390fd5b505050565b6114e66120e3565b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60195481565b6115836120e3565b80601160026101000a81548160ff02191690831515021790555050565b6060600480546115af906140a4565b80601f01602080910402602001604051908101604052809291908181526020018280546115db906140a4565b80156116285780601f106115fd57610100808354040283529160200191611628565b820191906000526020600020905b81548152906001019060200180831161160b57829003601f168201915b5050505050905090565b61163a6120e3565b7f000000000000000000000000eef1ebd7bbebf980cf26c9b6a30f5c87886ddc5b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bf906144a8565b60405180910390fd5b6116d28282613048565b5050565b60175481565b60105481565b601e5481565b601b5481565b6000806116f9611f12565b905060006117078286611b60565b90508381101561174c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117439061453a565b60405180910390fd5b6117598286868403611f1a565b60019250505092915050565b600e5481565b600080611776611f12565b90506117838185856121ed565b600191505092915050565b6117966120e3565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60216020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b6118916120e3565b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161192e9190613d29565b60405180910390a25050565b6119426120e3565b8260198190555081601a8190555080601b81905550601b54601a5460195461196a9190614250565b6119749190614250565b601881905550600c60185411156119c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b790614416565b60405180910390fd5b505050565b6119cd6120e3565b670de0b6b3a76400006103e860056119e3610fb7565b6119ed9190614104565b6119f7919061418d565b611a01919061418d565b811015611a43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3a906145cc565b60405180910390fd5b670de0b6b3a764000081611a579190614104565b600a8190555050565b601360009054906101000a900460ff1681565b60085481565b6000611a836120e3565b629896806001611a91610fb7565b611a9b9190614104565b611aa5919061418d565b821015611ae7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ade9061465e565b60405180910390fd5b6103e86005611af4610fb7565b611afe9190614104565b611b08919061418d565b821115611b4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b41906146f0565b60405180910390fd5b8160098190555060019050919050565b60145481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b6000611bf76120e3565b6000601360006101000a81548160ff0219169083151502179055506001905090565b60165481565b611c276120e3565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8d90614782565b60405180910390fd5b611c9f81612f82565b50565b601a5481565b600a5481565b6000611cb86120e3565b600f54601054611cc89190614250565b4211611d09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d00906147ee565b60405180910390fd5b6103e8821115611d4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4590614880565b60405180910390fd5b4260108190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f000000000000000000000000eef1ebd7bbebf980cf26c9b6a30f5c87886ddc5b6040518263ffffffff1660e01b8152600401611db09190613ea4565b602060405180830381865afa158015611dcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611df191906148b5565b90506000611e1c612710611e0e86856130e990919063ffffffff16565b6130ff90919063ffffffff16565b90506000811115611e5557611e547f000000000000000000000000eef1ebd7bbebf980cf26c9b6a30f5c87886ddc5b61dead83613115565b5b60007f000000000000000000000000eef1ebd7bbebf980cf26c9b6a30f5c87886ddc5b90508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611ec257600080fd5b505af1158015611ed6573d6000803e3d6000fd5b505050507f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb60405160405180910390a160019350505050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8090614954565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ff8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fef906149e6565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120d69190613dfa565b60405180910390a3505050565b6120eb611f12565b73ffffffffffffffffffffffffffffffffffffffff16612109611525565b73ffffffffffffffffffffffffffffffffffffffff161461215f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215690614a52565b60405180910390fd5b565b600061216d8484611b60565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146121e757818110156121d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d090614abe565b60405180910390fd5b6121e68484848403611f1a565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361225c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225390614b50565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c290614be2565b60405180910390fd5b600081036122e4576122df83836000613115565b612f7d565b601160009054906101000a900460ff16156129a757612301611525565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561236f575061233f611525565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123a85750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123e2575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123fb5750600560149054906101000a900460ff16155b156129a657601160019054906101000a900460ff166124f557601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124b55750601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6124f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124eb90614c4e565b60405180910390fd5b5b601360009054906101000a900460ff16156126bd57612512611525565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561259957507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125f157507f000000000000000000000000eef1ebd7bbebf980cf26c9b6a30f5c87886ddc5b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156126bc5743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612677576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266e90614d06565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127605750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612807576008548111156127aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a190614d98565b60405180910390fd5b600a546127b683611270565b826127c19190614250565b1115612802576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f990614e04565b60405180910390fd5b6129a5565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128aa5750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156128f9576008548111156128f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128eb90614e96565b60405180910390fd5b6129a4565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166129a357600a5461295683611270565b826129619190614250565b11156129a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299990614e04565b60405180910390fd5b5b5b5b5b5b60006129b230611270565b9050600060095482101590508080156129d75750601160029054906101000a900460ff165b80156129f05750600560149054906101000a900460ff16155b8015612a465750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612a9c5750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612af25750601f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b36576001600560146101000a81548160ff021916908315150217905550612b1a613394565b6000600560146101000a81548160ff0219169083151502179055505b600560149054906101000a900460ff16158015612b9c5750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015612bb45750600c60009054906101000a900460ff165b8015612bcf5750600d54600e54612bcb9190614250565b4210155b8015612c255750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c3457612c3261367b565b505b6000600560149054906101000a900460ff16159050601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612cea5750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612cf457600090505b60008115612f6d57602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d5757506000601854115b15612e2457612d846064612d76601854886130e990919063ffffffff16565b6130ff90919063ffffffff16565b9050601854601a5482612d979190614104565b612da1919061418d565b601d6000828254612db29190614250565b92505081905550601854601b5482612dca9190614104565b612dd4919061418d565b601e6000828254612de59190614250565b9250508190555060185460195482612dfd9190614104565b612e07919061418d565b601c6000828254612e189190614250565b92505081905550612f49565b602160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e7f57506000601454115b15612f4857612eac6064612e9e601454886130e990919063ffffffff16565b6130ff90919063ffffffff16565b905060145460165482612ebf9190614104565b612ec9919061418d565b601d6000828254612eda9190614250565b9250508190555060145460175482612ef29190614104565b612efc919061418d565b601e6000828254612f0d9190614250565b9250508190555060145460155482612f259190614104565b612f2f919061418d565b601c6000828254612f409190614250565b925050819055505b5b6000811115612f5e57612f5d873083613115565b5b8085612f6a9190614eb6565b94505b612f78878787613115565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600081836130f79190614104565b905092915050565b6000818361310d919061418d565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613184576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161317b90614b50565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036131f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ea90614be2565b60405180910390fd5b6131fe838383613841565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613284576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161327b90614f5c565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133179190614250565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161337b9190613dfa565b60405180910390a361338e848484613846565b50505050565b600061339f30611270565b90506000601e54601c54601d546133b69190614250565b6133c09190614250565b90506000808314806133d25750600082145b156133df57505050613679565b60146009546133ee9190614104565b8311156134075760146009546134049190614104565b92505b6000600283601d548661341a9190614104565b613424919061418d565b61342e919061418d565b90506000613445828661384b90919063ffffffff16565b9050600047905061345582613861565b600061346a824761384b90919063ffffffff16565b9050600061349587613487601c54856130e990919063ffffffff16565b6130ff90919063ffffffff16565b905060006134c0886134b2601e54866130e990919063ffffffff16565b6130ff90919063ffffffff16565b905060008183856134d19190614eb6565b6134db9190614eb6565b90506000601d819055506000601c819055506000601e81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161353b90614fad565b60006040518083038185875af1925050503d8060008114613578576040519150601f19603f3d011682016040523d82523d6000602084013e61357d565b606091505b5050809850506000871180156135935750600081115b156135e0576135a28782613a9e565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601d546040516135d793929190614fc2565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161362690614fad565b60006040518083038185875af1925050503d8060008114613663576040519150601f19603f3d011682016040523d82523d6000602084013e613668565b606091505b505080985050505050505050505050505b565b600042600e8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f000000000000000000000000eef1ebd7bbebf980cf26c9b6a30f5c87886ddc5b6040518263ffffffff1660e01b81526004016136df9190613ea4565b602060405180830381865afa1580156136fc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061372091906148b5565b9050600061374d61271061373f600b54856130e990919063ffffffff16565b6130ff90919063ffffffff16565b90506000811115613786576137857f000000000000000000000000eef1ebd7bbebf980cf26c9b6a30f5c87886ddc5b61dead83613115565b5b60007f000000000000000000000000eef1ebd7bbebf980cf26c9b6a30f5c87886ddc5b90508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156137f357600080fd5b505af1158015613807573d6000803e3d6000fd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b505050565b505050565b600081836138599190614eb6565b905092915050565b6000600267ffffffffffffffff81111561387e5761387d614ff9565b5b6040519080825280602002602001820160405280156138ac5781602001602082028036833780820191505090505b50905030816000815181106138c4576138c3615028565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613969573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061398d919061506c565b816001815181106139a1576139a0615028565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613a06307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611f1a565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613a68959493929190615192565b600060405180830381600087803b158015613a8257600080fd5b505af1158015613a96573d6000803e3d6000fd5b505050505050565b613ac9307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611f1a565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401613b30969594939291906151ec565b60606040518083038185885af1158015613b4e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613b73919061524d565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613bb4578082015181840152602081019050613b99565b83811115613bc3576000848401525b50505050565b6000601f19601f8301169050919050565b6000613be582613b7a565b613bef8185613b85565b9350613bff818560208601613b96565b613c0881613bc9565b840191505092915050565b60006020820190508181036000830152613c2d8184613bda565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613c6582613c3a565b9050919050565b613c7581613c5a565b8114613c8057600080fd5b50565b600081359050613c9281613c6c565b92915050565b6000819050919050565b613cab81613c98565b8114613cb657600080fd5b50565b600081359050613cc881613ca2565b92915050565b60008060408385031215613ce557613ce4613c35565b5b6000613cf385828601613c83565b9250506020613d0485828601613cb9565b9150509250929050565b60008115159050919050565b613d2381613d0e565b82525050565b6000602082019050613d3e6000830184613d1a565b92915050565b600060208284031215613d5a57613d59613c35565b5b6000613d6884828501613c83565b91505092915050565b6000819050919050565b6000613d96613d91613d8c84613c3a565b613d71565b613c3a565b9050919050565b6000613da882613d7b565b9050919050565b6000613dba82613d9d565b9050919050565b613dca81613daf565b82525050565b6000602082019050613de56000830184613dc1565b92915050565b613df481613c98565b82525050565b6000602082019050613e0f6000830184613deb565b92915050565b600060208284031215613e2b57613e2a613c35565b5b6000613e3984828501613cb9565b91505092915050565b600080600060608486031215613e5b57613e5a613c35565b5b6000613e6986828701613c83565b9350506020613e7a86828701613c83565b9250506040613e8b86828701613cb9565b9150509250925092565b613e9e81613c5a565b82525050565b6000602082019050613eb96000830184613e95565b92915050565b600060ff82169050919050565b613ed581613ebf565b82525050565b6000602082019050613ef06000830184613ecc565b92915050565b613eff81613d0e565b8114613f0a57600080fd5b50565b600081359050613f1c81613ef6565b92915050565b600080600060608486031215613f3b57613f3a613c35565b5b6000613f4986828701613cb9565b9350506020613f5a86828701613cb9565b9250506040613f6b86828701613f0d565b9150509250925092565b60008060408385031215613f8c57613f8b613c35565b5b6000613f9a85828601613c83565b9250506020613fab85828601613f0d565b9150509250929050565b600080600060608486031215613fce57613fcd613c35565b5b6000613fdc86828701613cb9565b9350506020613fed86828701613cb9565b9250506040613ffe86828701613cb9565b9150509250925092565b60006020828403121561401e5761401d613c35565b5b600061402c84828501613f0d565b91505092915050565b6000806040838503121561404c5761404b613c35565b5b600061405a85828601613c83565b925050602061406b85828601613c83565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806140bc57607f821691505b6020821081036140cf576140ce614075565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061410f82613c98565b915061411a83613c98565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614153576141526140d5565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061419882613c98565b91506141a383613c98565b9250826141b3576141b261415e565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b600061421a602f83613b85565b9150614225826141be565b604082019050919050565b600060208201905081810360008301526142498161420d565b9050919050565b600061425b82613c98565b915061426683613c98565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561429b5761429a6140d5565b5b828201905092915050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b6000614302603383613b85565b915061430d826142a6565b604082019050919050565b60006020820190508181036000830152614331816142f5565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b6000614394603083613b85565b915061439f82614338565b604082019050919050565b600060208201905081810360008301526143c381614387565b9050919050565b7f4d757374206b656570206665657320617420313225206f72206c657373000000600082015250565b6000614400601d83613b85565b915061440b826143ca565b602082019050919050565b6000602082019050818103600083015261442f816143f3565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614492603983613b85565b915061449d82614436565b604082019050919050565b600060208201905081810360008301526144c181614485565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614524602583613b85565b915061452f826144c8565b604082019050919050565b6000602082019050818103600083015261455381614517565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006145b6602483613b85565b91506145c18261455a565b604082019050919050565b600060208201905081810360008301526145e5816145a9565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e30303030312520746f74616c20737570706c792e000000000000000000602082015250565b6000614648603783613b85565b9150614653826145ec565b604082019050919050565b600060208201905081810360008301526146778161463b565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006146da603483613b85565b91506146e58261467e565b604082019050919050565b60006020820190508181036000830152614709816146cd565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061476c602683613b85565b915061477782614710565b604082019050919050565b6000602082019050818103600083015261479b8161475f565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b60006147d8602083613b85565b91506147e3826147a2565b602082019050919050565b60006020820190508181036000830152614807816147cb565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b600061486a602a83613b85565b91506148758261480e565b604082019050919050565b600060208201905081810360008301526148998161485d565b9050919050565b6000815190506148af81613ca2565b92915050565b6000602082840312156148cb576148ca613c35565b5b60006148d9848285016148a0565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061493e602483613b85565b9150614949826148e2565b604082019050919050565b6000602082019050818103600083015261496d81614931565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006149d0602283613b85565b91506149db82614974565b604082019050919050565b600060208201905081810360008301526149ff816149c3565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614a3c602083613b85565b9150614a4782614a06565b602082019050919050565b60006020820190508181036000830152614a6b81614a2f565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000614aa8601d83613b85565b9150614ab382614a72565b602082019050919050565b60006020820190508181036000830152614ad781614a9b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614b3a602583613b85565b9150614b4582614ade565b604082019050919050565b60006020820190508181036000830152614b6981614b2d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614bcc602383613b85565b9150614bd782614b70565b604082019050919050565b60006020820190508181036000830152614bfb81614bbf565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614c38601683613b85565b9150614c4382614c02565b602082019050919050565b60006020820190508181036000830152614c6781614c2b565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614cf0604983613b85565b9150614cfb82614c6e565b606082019050919050565b60006020820190508181036000830152614d1f81614ce3565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614d82603583613b85565b9150614d8d82614d26565b604082019050919050565b60006020820190508181036000830152614db181614d75565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614dee601383613b85565b9150614df982614db8565b602082019050919050565b60006020820190508181036000830152614e1d81614de1565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614e80603683613b85565b9150614e8b82614e24565b604082019050919050565b60006020820190508181036000830152614eaf81614e73565b9050919050565b6000614ec182613c98565b9150614ecc83613c98565b925082821015614edf57614ede6140d5565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614f46602683613b85565b9150614f5182614eea565b604082019050919050565b60006020820190508181036000830152614f7581614f39565b9050919050565b600081905092915050565b50565b6000614f97600083614f7c565b9150614fa282614f87565b600082019050919050565b6000614fb882614f8a565b9150819050919050565b6000606082019050614fd76000830186613deb565b614fe46020830185613deb565b614ff16040830184613deb565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061506681613c6c565b92915050565b60006020828403121561508257615081613c35565b5b600061509084828501615057565b91505092915050565b6000819050919050565b60006150be6150b96150b484615099565b613d71565b613c98565b9050919050565b6150ce816150a3565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61510981613c5a565b82525050565b600061511b8383615100565b60208301905092915050565b6000602082019050919050565b600061513f826150d4565b61514981856150df565b9350615154836150f0565b8060005b8381101561518557815161516c888261510f565b975061517783615127565b925050600181019050615158565b5085935050505092915050565b600060a0820190506151a76000830188613deb565b6151b460208301876150c5565b81810360408301526151c68186615134565b90506151d56060830185613e95565b6151e26080830184613deb565b9695505050505050565b600060c0820190506152016000830189613e95565b61520e6020830188613deb565b61521b60408301876150c5565b61522860608301866150c5565b6152356080830185613e95565b61524260a0830184613deb565b979650505050505050565b60008060006060848603121561526657615265613c35565b5b6000615274868287016148a0565b9350506020615285868287016148a0565b9250506040615296868287016148a0565b915050925092509256fea2646970667358221220bd25f9fa1dbe77c3c06682835e15ee8b906fb73f1fb413d8a42621b2ae5dffb564736f6c634300080d0033

Deployed Bytecode Sourcemap

32608:19431:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16426:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18777:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34237:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32686:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17546:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41375:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33251:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33066:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34021:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33981;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38689:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19558:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32789:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33161:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33122:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17388:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20262:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32744:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33349:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41540:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33836:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33429:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17717:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9849:103;;;;;;;;;;;;;:::i;:::-;;49621:555;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37793:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39236:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32881:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33729;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39607:403;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37586:155;;;;;;;;;;;;;:::i;:::-;;9201:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32918:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33871:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39499:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16645:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40628:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33803:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33305:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34061:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33947:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21003:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33213:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18050:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41136:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34458:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33389:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40438:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40018:412;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38972:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33647:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32951:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38180:501;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33695:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18306:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32993:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37975:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33766:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10107:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33909:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33033:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50980:1056;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16426:100;16480:13;16513:5;16506:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16426:100;:::o;18777:201::-;18860:4;18877:13;18893:12;:10;:12::i;:::-;18877:28;;18916:32;18925:5;18932:7;18941:6;18916:8;:32::i;:::-;18966:4;18959:11;;;18777:201;;;;:::o;34237:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;32686:51::-;;;:::o;17546:108::-;17607:7;17634:12;;17627:19;;17546:108;:::o;41375:157::-;9087:13;:11;:13::i;:::-;41482:9:::1;;;;;;;;;;;41454:38;;41471:9;41454:38;;;;;;;;;;;;41515:9;41503;;:21;;;;;;;;;;;;;;;;;;41375:157:::0;:::o;33251:47::-;;;;:::o;33066:36::-;;;;:::o;34021:33::-;;;;:::o;33981:::-;;;;:::o;38689:275::-;9087:13;:11;:13::i;:::-;38826:4:::1;38818;38813:1;38797:13;:11;:13::i;:::-;:17;;;;:::i;:::-;38796:26;;;;:::i;:::-;38795:35;;;;:::i;:::-;38785:6;:45;;38763:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;38949:6;38939;:17;;;;:::i;:::-;38916:20;:40;;;;38689:275:::0;:::o;19558:295::-;19689:4;19706:15;19724:12;:10;:12::i;:::-;19706:30;;19747:38;19763:4;19769:7;19778:6;19747:15;:38::i;:::-;19796:27;19806:4;19812:2;19816:6;19796:9;:27::i;:::-;19841:4;19834:11;;;19558:295;;;;;:::o;32789:53::-;32835:6;32789:53;:::o;33161:45::-;;;;:::o;33122:32::-;;;;;;;;;;;;;:::o;17388:93::-;17446:5;17471:2;17464:9;;17388:93;:::o;20262:238::-;20350:4;20367:13;20383:12;:10;:12::i;:::-;20367:28;;20406:64;20415:5;20422:7;20459:10;20431:25;20441:5;20448:7;20431:9;:25::i;:::-;:38;;;;:::i;:::-;20406:8;:64::i;:::-;20488:4;20481:11;;;20262:238;;;;:::o;32744:38::-;;;:::o;33349:33::-;;;;;;;;;;;;;:::o;41540:126::-;41606:4;41630:19;:28;41650:7;41630:28;;;;;;;;;;;;;;;;;;;;;;;;;41623:35;;41540:126;;;:::o;33836:28::-;;;;:::o;33429:31::-;;;;;;;;;;;;;:::o;17717:127::-;17791:7;17818:9;:18;17828:7;17818:18;;;;;;;;;;;;;;;;17811:25;;17717:127;;;:::o;9849:103::-;9087:13;:11;:13::i;:::-;9914:30:::1;9941:1;9914:18;:30::i;:::-;9849:103::o:0;49621:555::-;9087:13;:11;:13::i;:::-;49823:3:::1;49800:19;:26;;49778:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;49950:4;49938:8;:16;;:33;;;;;49970:1;49958:8;:13;;49938:33;49916:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;50076:19;50058:15;:37;;;;50125:8;50106:16;:27;;;;50160:8;50144:13;;:24;;;;;;;;;;;;;;;;;;49621:555:::0;;;:::o;37793:121::-;37845:4;9087:13;:11;:13::i;:::-;37879:5:::1;37862:14;;:22;;;;;;;;;;;;;;;;;;37902:4;37895:11;;37793:121:::0;:::o;39236:167::-;9087:13;:11;:13::i;:::-;39391:4:::1;39349:31;:39;39381:6;39349:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;39236:167:::0;;:::o;32881:30::-;;;;;;;;;;;;;:::o;33729:::-;;;;:::o;39607:403::-;9087:13;:11;:13::i;:::-;39775::::1;39757:15;:31;;;;39817:13;39799:15;:31;;;;39853:7;39841:9;:19;;;;39922:9;;39904:15;;39886;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;39871:12;:60;;;;39966:2;39950:12;;:18;;39942:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;39607:403:::0;;;:::o;37586:155::-;9087:13;:11;:13::i;:::-;37657:4:::1;37641:13;;:20;;;;;;;;;;;;;;;;;;37686:4;37672:11;;:18;;;;;;;;;;;;;;;;;;37718:15;37701:14;:32;;;;37586:155::o:0;9201:87::-;9247:7;9274:6;;;;;;;;;;;9267:13;;9201:87;:::o;32918:24::-;;;;;;;;;;;;;:::o;33871:31::-;;;;:::o;39499:100::-;9087:13;:11;:13::i;:::-;39584:7:::1;39570:11;;:21;;;;;;;;;;;;;;;;;;39499:100:::0;:::o;16645:104::-;16701:13;16734:7;16727:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16645:104;:::o;40628:304::-;9087:13;:11;:13::i;:::-;40772::::1;40764:21;;:4;:21;;::::0;40742:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;40883:41;40912:4;40918:5;40883:28;:41::i;:::-;40628:304:::0;;:::o;33803:24::-;;;;:::o;33305:35::-;;;;:::o;34061:27::-;;;;:::o;33947:25::-;;;;:::o;21003:436::-;21096:4;21113:13;21129:12;:10;:12::i;:::-;21113:28;;21152:24;21179:25;21189:5;21196:7;21179:9;:25::i;:::-;21152:52;;21243:15;21223:16;:35;;21215:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;21336:60;21345:5;21352:7;21380:15;21361:16;:34;21336:8;:60::i;:::-;21427:4;21420:11;;;;21003:436;;;;:::o;33213:29::-;;;;:::o;18050:193::-;18129:4;18146:13;18162:12;:10;:12::i;:::-;18146:28;;18185;18195:5;18202:2;18206:6;18185:9;:28::i;:::-;18231:4;18224:11;;;18050:193;;;;:::o;41136:231::-;9087:13;:11;:13::i;:::-;41296:15:::1;;;;;;;;;;;41253:59;;41276:18;41253:59;;;;;;;;;;;;41341:18;41323:15;;:36;;;;;;;;;;;;;;;;;;41136:231:::0;:::o;34458:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;33389:33::-;;;;;;;;;;;;;:::o;40438:182::-;9087:13;:11;:13::i;:::-;40554:8:::1;40523:19;:28;40543:7;40523:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;40594:7;40578:34;;;40603:8;40578:34;;;;;;:::i;:::-;;;;;;;;40438:182:::0;;:::o;40018:412::-;9087:13;:11;:13::i;:::-;40188::::1;40169:16;:32;;;;40231:13;40212:16;:32;;;;40268:7;40255:10;:20;;;;40340:10;;40321:16;;40302;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;40286:13;:64;;;;40386:2;40369:13;;:19;;40361:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;40018:412:::0;;;:::o;38972:256::-;9087:13;:11;:13::i;:::-;39112:4:::1;39104;39099:1;39083:13;:11;:13::i;:::-;:17;;;;:::i;:::-;39082:26;;;;:::i;:::-;39081:35;;;;:::i;:::-;39071:6;:45;;39049:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;39213:6;39203;:17;;;;:::i;:::-;39191:9;:29;;;;38972:256:::0;:::o;33647:39::-;;;;;;;;;;;;;:::o;32951:35::-;;;;:::o;38180:501::-;38288:4;9087:13;:11;:13::i;:::-;38367:8:::1;38362:1;38346:13;:11;:13::i;:::-;:17;;;;:::i;:::-;38345:30;;;;:::i;:::-;38332:9;:43;;38310:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;38526:4;38521:1;38505:13;:11;:13::i;:::-;:17;;;;:::i;:::-;38504:26;;;;:::i;:::-;38491:9;:39;;38469:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;38642:9;38621:18;:30;;;;38669:4;38662:11;;38180:501:::0;;;:::o;33695:27::-;;;;:::o;18306:151::-;18395:7;18422:11;:18;18434:5;18422:18;;;;;;;;;;;;;;;:27;18441:7;18422:27;;;;;;;;;;;;;;;;18415:34;;18306:151;;;;:::o;32993:33::-;;;;:::o;37975:135::-;38035:4;9087:13;:11;:13::i;:::-;38075:5:::1;38052:20;;:28;;;;;;;;;;;;;;;;;;38098:4;38091:11;;37975:135:::0;:::o;33766:30::-;;;;:::o;10107:201::-;9087:13;:11;:13::i;:::-;10216:1:::1;10196:22;;:8;:22;;::::0;10188:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;10272:28;10291:8;10272:18;:28::i;:::-;10107:201:::0;:::o;33909:31::-;;;;:::o;33033:24::-;;;;:::o;50980:1056::-;51091:4;9087:13;:11;:13::i;:::-;51176:19:::1;;51153:20;;:42;;;;:::i;:::-;51135:15;:60;51113:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;51285:4;51274:7;:15;;51266:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;51370:15;51347:20;:38;;;;51440:28;51471:4;:14;;;51486:13;51471:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51440:60;;51550:20;51573:44;51611:5;51573:33;51598:7;51573:20;:24;;:33;;;;:::i;:::-;:37;;:44;;;;:::i;:::-;51550:67;;51737:1;51722:12;:16;51718:110;;;51755:61;51771:13;51794:6;51803:12;51755:15;:61::i;:::-;51718:110;51903:19;51940:13;51903:51;;51965:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;51992:14;;;;;;;;;;52024:4;52017:11;;;;;50980:1056:::0;;;:::o;7752:98::-;7805:7;7832:10;7825:17;;7752:98;:::o;24628:380::-;24781:1;24764:19;;:5;:19;;;24756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24862:1;24843:21;;:7;:21;;;24835:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24946:6;24916:11;:18;24928:5;24916:18;;;;;;;;;;;;;;;:27;24935:7;24916:27;;;;;;;;;;;;;;;:36;;;;24984:7;24968:32;;24977:5;24968:32;;;24993:6;24968:32;;;;;;:::i;:::-;;;;;;;;24628:380;;;:::o;9366:132::-;9441:12;:10;:12::i;:::-;9430:23;;:7;:5;:7::i;:::-;:23;;;9422:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9366:132::o;25299:453::-;25434:24;25461:25;25471:5;25478:7;25461:9;:25::i;:::-;25434:52;;25521:17;25501:16;:37;25497:248;;25583:6;25563:16;:26;;25555:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25667:51;25676:5;25683:7;25711:6;25692:16;:25;25667:8;:51::i;:::-;25497:248;25423:329;25299:453;;;:::o;41724:5011::-;41872:1;41856:18;;:4;:18;;;41848:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41949:1;41935:16;;:2;:16;;;41927:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;42018:1;42008:6;:11;42004:93;;42036:28;42052:4;42058:2;42062:1;42036:15;:28::i;:::-;42079:7;;42004:93;42113:14;;;;;;;;;;;42109:2487;;;42174:7;:5;:7::i;:::-;42166:15;;:4;:15;;;;:49;;;;;42208:7;:5;:7::i;:::-;42202:13;;:2;:13;;;;42166:49;:86;;;;;42250:1;42236:16;;:2;:16;;;;42166:86;:128;;;;;42287:6;42273:21;;:2;:21;;;;42166:128;:158;;;;;42316:8;;;;;;;;;;;42315:9;42166:158;42144:2441;;;42364:13;;;;;;;;;;;42359:223;;42436:19;:25;42456:4;42436:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;42465:19;:23;42485:2;42465:23;;;;;;;;;;;;;;;;;;;;;;;;;42436:52;42402:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;42359:223;42738:20;;;;;;;;;;;42734:641;;;42819:7;:5;:7::i;:::-;42813:13;;:2;:13;;;;:72;;;;;42869:15;42855:30;;:2;:30;;;;42813:72;:129;;;;;42928:13;42914:28;;:2;:28;;;;42813:129;42783:573;;;43106:12;43031:28;:39;43060:9;43031:39;;;;;;;;;;;;;;;;:87;42993:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;43320:12;43278:28;:39;43307:9;43278:39;;;;;;;;;;;;;;;:54;;;;42783:573;42734:641;43449:25;:31;43475:4;43449:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;43506:31;:35;43538:2;43506:35;;;;;;;;;;;;;;;;;;;;;;;;;43505:36;43449:92;43423:1147;;;43628:20;;43618:6;:30;;43584:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;43836:9;;43819:13;43829:2;43819:9;:13::i;:::-;43810:6;:22;;;;:::i;:::-;:35;;43776:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;43423:1147;;;44014:25;:29;44040:2;44014:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;44069:31;:37;44101:4;44069:37;;;;;;;;;;;;;;;;;;;;;;;;;44068:38;44014:92;43988:582;;;44193:20;;44183:6;:30;;44149:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;43988:582;;;44350:31;:35;44382:2;44350:35;;;;;;;;;;;;;;;;;;;;;;;;;44345:225;;44470:9;;44453:13;44463:2;44453:9;:13::i;:::-;44444:6;:22;;;;:::i;:::-;:35;;44410:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;44345:225;43988:582;43423:1147;42144:2441;42109:2487;44608:28;44639:24;44657:4;44639:9;:24::i;:::-;44608:55;;44676:12;44715:18;;44691:20;:42;;44676:57;;44764:7;:35;;;;;44788:11;;;;;;;;;;;44764:35;:61;;;;;44817:8;;;;;;;;;;;44816:9;44764:61;:110;;;;;44843:25;:31;44869:4;44843:31;;;;;;;;;;;;;;;;;;;;;;;;;44842:32;44764:110;:153;;;;;44892:19;:25;44912:4;44892:25;;;;;;;;;;;;;;;;;;;;;;;;;44891:26;44764:153;:194;;;;;44935:19;:23;44955:2;44935:23;;;;;;;;;;;;;;;;;;;;;;;;;44934:24;44764:194;44746:326;;;44996:4;44985:8;;:15;;;;;;;;;;;;;;;;;;45017:10;:8;:10::i;:::-;45055:5;45044:8;;:16;;;;;;;;;;;;;;;;;;44746:326;45103:8;;;;;;;;;;;45102:9;:55;;;;;45128:25;:29;45154:2;45128:29;;;;;;;;;;;;;;;;;;;;;;;;;45102:55;:85;;;;;45174:13;;;;;;;;;;;45102:85;:153;;;;;45240:15;;45223:14;;:32;;;;:::i;:::-;45204:15;:51;;45102:153;:196;;;;;45273:19;:25;45293:4;45273:25;;;;;;;;;;;;;;;;;;;;;;;;;45272:26;45102:196;45084:282;;;45325:29;:27;:29::i;:::-;;45084:282;45378:12;45394:8;;;;;;;;;;;45393:9;45378:24;;45504:19;:25;45524:4;45504:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;45533:19;:23;45553:2;45533:23;;;;;;;;;;;;;;;;;;;;;;;;;45504:52;45500:100;;;45583:5;45573:15;;45500:100;45612:12;45717:7;45713:969;;;45769:25;:29;45795:2;45769:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;45818:1;45802:13;;:17;45769:50;45765:768;;;45847:34;45877:3;45847:25;45858:13;;45847:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;45840:41;;45950:13;;45930:16;;45923:4;:23;;;;:::i;:::-;45922:41;;;;:::i;:::-;45900:18;;:63;;;;;;;:::i;:::-;;;;;;;;46020:13;;46006:10;;45999:4;:17;;;;:::i;:::-;45998:35;;;;:::i;:::-;45982:12;;:51;;;;;;;:::i;:::-;;;;;;;;46102:13;;46082:16;;46075:4;:23;;;;:::i;:::-;46074:41;;;;:::i;:::-;46052:18;;:63;;;;;;;:::i;:::-;;;;;;;;45765:768;;;46177:25;:31;46203:4;46177:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;46227:1;46212:12;;:16;46177:51;46173:360;;;46256:33;46285:3;46256:24;46267:12;;46256:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;46249:40;;46357:12;;46338:15;;46331:4;:22;;;;:::i;:::-;46330:39;;;;:::i;:::-;46308:18;;:61;;;;;;;:::i;:::-;;;;;;;;46425:12;;46412:9;;46405:4;:16;;;;:::i;:::-;46404:33;;;;:::i;:::-;46388:12;;:49;;;;;;;:::i;:::-;;;;;;;;46505:12;;46486:15;;46479:4;:22;;;;:::i;:::-;46478:39;;;;:::i;:::-;46456:18;;:61;;;;;;;:::i;:::-;;;;;;;;46173:360;45765:768;46560:1;46553:4;:8;46549:91;;;46582:42;46598:4;46612;46619;46582:15;:42::i;:::-;46549:91;46666:4;46656:14;;;;;:::i;:::-;;;45713:969;46694:33;46710:4;46716:2;46720:6;46694:15;:33::i;:::-;41837:4898;;;;41724:5011;;;;:::o;10468:191::-;10542:16;10561:6;;;;;;;;;;;10542:25;;10587:8;10578:6;;:17;;;;;;;;;;;;;;;;;;10642:8;10611:40;;10632:8;10611:40;;;;;;;;;;;;10531:128;10468:191;:::o;40940:188::-;41057:5;41023:25;:31;41049:4;41023:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;41114:5;41080:40;;41108:4;41080:40;;;;;;;;;;;;40940:188;;:::o;3646:98::-;3704:7;3735:1;3731;:5;;;;:::i;:::-;3724:12;;3646:98;;;;:::o;4045:::-;4103:7;4134:1;4130;:5;;;;:::i;:::-;4123:12;;4045:98;;;;:::o;21909:671::-;22056:1;22040:18;;:4;:18;;;22032:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22133:1;22119:16;;:2;:16;;;22111:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;22188:38;22209:4;22215:2;22219:6;22188:20;:38::i;:::-;22239:19;22261:9;:15;22271:4;22261:15;;;;;;;;;;;;;;;;22239:37;;22310:6;22295:11;:21;;22287:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;22427:6;22413:11;:20;22395:9;:15;22405:4;22395:15;;;;;;;;;;;;;;;:38;;;;22472:6;22455:9;:13;22465:2;22455:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;22511:2;22496:26;;22505:4;22496:26;;;22515:6;22496:26;;;;;;:::i;:::-;;;;;;;;22535:37;22555:4;22561:2;22565:6;22535:19;:37::i;:::-;22021:559;21909:671;;;:::o;47865:1748::-;47904:23;47930:24;47948:4;47930:9;:24::i;:::-;47904:50;;47965:25;48061:12;;48027:18;;47993;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;47965:108;;48084:12;48132:1;48113:15;:20;:46;;;;48158:1;48137:17;:22;48113:46;48109:85;;;48176:7;;;;;48109:85;48249:2;48228:18;;:23;;;;:::i;:::-;48210:15;:41;48206:115;;;48307:2;48286:18;;:23;;;;:::i;:::-;48268:41;;48206:115;48382:23;48495:1;48462:17;48427:18;;48409:15;:36;;;;:::i;:::-;48408:71;;;;:::i;:::-;:88;;;;:::i;:::-;48382:114;;48507:26;48536:36;48556:15;48536;:19;;:36;;;;:::i;:::-;48507:65;;48585:25;48613:21;48585:49;;48647:36;48664:18;48647:16;:36::i;:::-;48696:18;48717:44;48743:17;48717:21;:25;;:44;;;;:::i;:::-;48696:65;;48774:23;48800:81;48853:17;48800:34;48815:18;;48800:10;:14;;:34;;;;:::i;:::-;:38;;:81;;;;:::i;:::-;48774:107;;48892:17;48912:51;48945:17;48912:28;48927:12;;48912:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;48892:71;;48976:23;49033:9;49015:15;49002:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;48976:66;;49068:1;49047:18;:22;;;;49101:1;49080:18;:22;;;;49128:1;49113:12;:16;;;;49164:9;;;;;;;;;;;49156:23;;49187:9;49156:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49142:59;;;;;49236:1;49218:15;:19;:42;;;;;49259:1;49241:15;:19;49218:42;49214:278;;;49277:46;49290:15;49307;49277:12;:46::i;:::-;49343:137;49376:18;49413:15;49447:18;;49343:137;;;;;;;;:::i;:::-;;;;;;;;49214:278;49526:15;;;;;;;;;;;49518:29;;49569:21;49518:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49504:101;;;;;47893:1720;;;;;;;;;;47865:1748;:::o;50184:788::-;50241:4;50275:15;50258:14;:32;;;;50345:28;50376:4;:14;;;50391:13;50376:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50345:60;;50455:20;50478:77;50539:5;50478:42;50503:16;;50478:20;:24;;:42;;;;:::i;:::-;:46;;:77;;;;:::i;:::-;50455:100;;50675:1;50660:12;:16;50656:110;;;50693:61;50709:13;50732:6;50741:12;50693:15;:61::i;:::-;50656:110;50841:19;50878:13;50841:51;;50903:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50930:12;;;;;;;;;;50960:4;50953:11;;;;;50184:788;:::o;26352:125::-;;;;:::o;27081:124::-;;;;:::o;3289:98::-;3347:7;3378:1;3374;:5;;;;:::i;:::-;3367:12;;3289:98;;;;:::o;46743:589::-;46869:21;46907:1;46893:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46869:40;;46938:4;46920;46925:1;46920:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;46964:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46954:4;46959:1;46954:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;46999:62;47016:4;47031:15;47049:11;46999:8;:62::i;:::-;47100:15;:66;;;47181:11;47207:1;47251:4;47278;47298:15;47100:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46798:534;46743:589;:::o;47340:517::-;47488:62;47505:4;47520:15;47538:11;47488:8;:62::i;:::-;47593:15;:31;;;47632:9;47665:4;47685:11;47711:1;47754;32835:6;47823:15;47593:256;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;47340:517;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:329::-;5218:6;5267:2;5255:9;5246:7;5242:23;5238:32;5235:119;;;5273:79;;:::i;:::-;5235:119;5393:1;5418:53;5463:7;5454:6;5443:9;5439:22;5418:53;:::i;:::-;5408:63;;5364:117;5159:329;;;;:::o;5494:619::-;5571:6;5579;5587;5636:2;5624:9;5615:7;5611:23;5607:32;5604:119;;;5642:79;;:::i;:::-;5604:119;5762:1;5787:53;5832:7;5823:6;5812:9;5808:22;5787:53;:::i;:::-;5777:63;;5733:117;5889:2;5915:53;5960:7;5951:6;5940:9;5936:22;5915:53;:::i;:::-;5905:63;;5860:118;6017:2;6043:53;6088:7;6079:6;6068:9;6064:22;6043:53;:::i;:::-;6033:63;;5988:118;5494:619;;;;;:::o;6119:118::-;6206:24;6224:5;6206:24;:::i;:::-;6201:3;6194:37;6119:118;;:::o;6243:222::-;6336:4;6374:2;6363:9;6359:18;6351:26;;6387:71;6455:1;6444:9;6440:17;6431:6;6387:71;:::i;:::-;6243:222;;;;:::o;6471:86::-;6506:7;6546:4;6539:5;6535:16;6524:27;;6471:86;;;:::o;6563:112::-;6646:22;6662:5;6646:22;:::i;:::-;6641:3;6634:35;6563:112;;:::o;6681:214::-;6770:4;6808:2;6797:9;6793:18;6785:26;;6821:67;6885:1;6874:9;6870:17;6861:6;6821:67;:::i;:::-;6681:214;;;;:::o;6901:116::-;6971:21;6986:5;6971:21;:::i;:::-;6964:5;6961:32;6951:60;;7007:1;7004;6997:12;6951:60;6901:116;:::o;7023:133::-;7066:5;7104:6;7091:20;7082:29;;7120:30;7144:5;7120:30;:::i;:::-;7023:133;;;;:::o;7162:613::-;7236:6;7244;7252;7301:2;7289:9;7280:7;7276:23;7272:32;7269:119;;;7307:79;;:::i;:::-;7269:119;7427:1;7452:53;7497:7;7488:6;7477:9;7473:22;7452:53;:::i;:::-;7442:63;;7398:117;7554:2;7580:53;7625:7;7616:6;7605:9;7601:22;7580:53;:::i;:::-;7570:63;;7525:118;7682:2;7708:50;7750:7;7741:6;7730:9;7726:22;7708:50;:::i;:::-;7698:60;;7653:115;7162:613;;;;;:::o;7781:468::-;7846:6;7854;7903:2;7891:9;7882:7;7878:23;7874:32;7871:119;;;7909:79;;:::i;:::-;7871:119;8029:1;8054:53;8099:7;8090:6;8079:9;8075:22;8054:53;:::i;:::-;8044:63;;8000:117;8156:2;8182:50;8224:7;8215:6;8204:9;8200:22;8182:50;:::i;:::-;8172:60;;8127:115;7781:468;;;;;:::o;8255:619::-;8332:6;8340;8348;8397:2;8385:9;8376:7;8372:23;8368:32;8365:119;;;8403:79;;:::i;:::-;8365:119;8523:1;8548:53;8593:7;8584:6;8573:9;8569:22;8548:53;:::i;:::-;8538:63;;8494:117;8650:2;8676:53;8721:7;8712:6;8701:9;8697:22;8676:53;:::i;:::-;8666:63;;8621:118;8778:2;8804:53;8849:7;8840:6;8829:9;8825:22;8804:53;:::i;:::-;8794:63;;8749:118;8255:619;;;;;:::o;8880:323::-;8936:6;8985:2;8973:9;8964:7;8960:23;8956:32;8953:119;;;8991:79;;:::i;:::-;8953:119;9111:1;9136:50;9178:7;9169:6;9158:9;9154:22;9136:50;:::i;:::-;9126:60;;9082:114;8880:323;;;;:::o;9209:474::-;9277:6;9285;9334:2;9322:9;9313:7;9309:23;9305:32;9302:119;;;9340:79;;:::i;:::-;9302:119;9460:1;9485:53;9530:7;9521:6;9510:9;9506:22;9485:53;:::i;:::-;9475:63;;9431:117;9587:2;9613:53;9658:7;9649:6;9638:9;9634:22;9613:53;:::i;:::-;9603:63;;9558:118;9209:474;;;;;:::o;9689:180::-;9737:77;9734:1;9727:88;9834:4;9831:1;9824:15;9858:4;9855:1;9848:15;9875:320;9919:6;9956:1;9950:4;9946:12;9936:22;;10003:1;9997:4;9993:12;10024:18;10014:81;;10080:4;10072:6;10068:17;10058:27;;10014:81;10142:2;10134:6;10131:14;10111:18;10108:38;10105:84;;10161:18;;:::i;:::-;10105:84;9926:269;9875:320;;;:::o;10201:180::-;10249:77;10246:1;10239:88;10346:4;10343:1;10336:15;10370:4;10367:1;10360:15;10387:348;10427:7;10450:20;10468:1;10450:20;:::i;:::-;10445:25;;10484:20;10502:1;10484:20;:::i;:::-;10479:25;;10672:1;10604:66;10600:74;10597:1;10594:81;10589:1;10582:9;10575:17;10571:105;10568:131;;;10679:18;;:::i;:::-;10568:131;10727:1;10724;10720:9;10709:20;;10387:348;;;;:::o;10741:180::-;10789:77;10786:1;10779:88;10886:4;10883:1;10876:15;10910:4;10907:1;10900:15;10927:185;10967:1;10984:20;11002:1;10984:20;:::i;:::-;10979:25;;11018:20;11036:1;11018:20;:::i;:::-;11013:25;;11057:1;11047:35;;11062:18;;:::i;:::-;11047:35;11104:1;11101;11097:9;11092:14;;10927:185;;;;:::o;11118:234::-;11258:34;11254:1;11246:6;11242:14;11235:58;11327:17;11322:2;11314:6;11310:15;11303:42;11118:234;:::o;11358:366::-;11500:3;11521:67;11585:2;11580:3;11521:67;:::i;:::-;11514:74;;11597:93;11686:3;11597:93;:::i;:::-;11715:2;11710:3;11706:12;11699:19;;11358:366;;;:::o;11730:419::-;11896:4;11934:2;11923:9;11919:18;11911:26;;11983:9;11977:4;11973:20;11969:1;11958:9;11954:17;11947:47;12011:131;12137:4;12011:131;:::i;:::-;12003:139;;11730:419;;;:::o;12155:305::-;12195:3;12214:20;12232:1;12214:20;:::i;:::-;12209:25;;12248:20;12266:1;12248:20;:::i;:::-;12243:25;;12402:1;12334:66;12330:74;12327:1;12324:81;12321:107;;;12408:18;;:::i;:::-;12321:107;12452:1;12449;12445:9;12438:16;;12155:305;;;;:::o;12466:238::-;12606:34;12602:1;12594:6;12590:14;12583:58;12675:21;12670:2;12662:6;12658:15;12651:46;12466:238;:::o;12710:366::-;12852:3;12873:67;12937:2;12932:3;12873:67;:::i;:::-;12866:74;;12949:93;13038:3;12949:93;:::i;:::-;13067:2;13062:3;13058:12;13051:19;;12710:366;;;:::o;13082:419::-;13248:4;13286:2;13275:9;13271:18;13263:26;;13335:9;13329:4;13325:20;13321:1;13310:9;13306:17;13299:47;13363:131;13489:4;13363:131;:::i;:::-;13355:139;;13082:419;;;:::o;13507:235::-;13647:34;13643:1;13635:6;13631:14;13624:58;13716:18;13711:2;13703:6;13699:15;13692:43;13507:235;:::o;13748:366::-;13890:3;13911:67;13975:2;13970:3;13911:67;:::i;:::-;13904:74;;13987:93;14076:3;13987:93;:::i;:::-;14105:2;14100:3;14096:12;14089:19;;13748:366;;;:::o;14120:419::-;14286:4;14324:2;14313:9;14309:18;14301:26;;14373:9;14367:4;14363:20;14359:1;14348:9;14344:17;14337:47;14401:131;14527:4;14401:131;:::i;:::-;14393:139;;14120:419;;;:::o;14545:179::-;14685:31;14681:1;14673:6;14669:14;14662:55;14545:179;:::o;14730:366::-;14872:3;14893:67;14957:2;14952:3;14893:67;:::i;:::-;14886:74;;14969:93;15058:3;14969:93;:::i;:::-;15087:2;15082:3;15078:12;15071:19;;14730:366;;;:::o;15102:419::-;15268:4;15306:2;15295:9;15291:18;15283:26;;15355:9;15349:4;15345:20;15341:1;15330:9;15326:17;15319:47;15383:131;15509:4;15383:131;:::i;:::-;15375:139;;15102:419;;;:::o;15527:244::-;15667:34;15663:1;15655:6;15651:14;15644:58;15736:27;15731:2;15723:6;15719:15;15712:52;15527:244;:::o;15777:366::-;15919:3;15940:67;16004:2;15999:3;15940:67;:::i;:::-;15933:74;;16016:93;16105:3;16016:93;:::i;:::-;16134:2;16129:3;16125:12;16118:19;;15777:366;;;:::o;16149:419::-;16315:4;16353:2;16342:9;16338:18;16330:26;;16402:9;16396:4;16392:20;16388:1;16377:9;16373:17;16366:47;16430:131;16556:4;16430:131;:::i;:::-;16422:139;;16149:419;;;:::o;16574:224::-;16714:34;16710:1;16702:6;16698:14;16691:58;16783:7;16778:2;16770:6;16766:15;16759:32;16574:224;:::o;16804:366::-;16946:3;16967:67;17031:2;17026:3;16967:67;:::i;:::-;16960:74;;17043:93;17132:3;17043:93;:::i;:::-;17161:2;17156:3;17152:12;17145:19;;16804:366;;;:::o;17176:419::-;17342:4;17380:2;17369:9;17365:18;17357:26;;17429:9;17423:4;17419:20;17415:1;17404:9;17400:17;17393:47;17457:131;17583:4;17457:131;:::i;:::-;17449:139;;17176:419;;;:::o;17601:223::-;17741:34;17737:1;17729:6;17725:14;17718:58;17810:6;17805:2;17797:6;17793:15;17786:31;17601:223;:::o;17830:366::-;17972:3;17993:67;18057:2;18052:3;17993:67;:::i;:::-;17986:74;;18069:93;18158:3;18069:93;:::i;:::-;18187:2;18182:3;18178:12;18171:19;;17830:366;;;:::o;18202:419::-;18368:4;18406:2;18395:9;18391:18;18383:26;;18455:9;18449:4;18445:20;18441:1;18430:9;18426:17;18419:47;18483:131;18609:4;18483:131;:::i;:::-;18475:139;;18202:419;;;:::o;18627:242::-;18767:34;18763:1;18755:6;18751:14;18744:58;18836:25;18831:2;18823:6;18819:15;18812:50;18627:242;:::o;18875:366::-;19017:3;19038:67;19102:2;19097:3;19038:67;:::i;:::-;19031:74;;19114:93;19203:3;19114:93;:::i;:::-;19232:2;19227:3;19223:12;19216:19;;18875:366;;;:::o;19247:419::-;19413:4;19451:2;19440:9;19436:18;19428:26;;19500:9;19494:4;19490:20;19486:1;19475:9;19471:17;19464:47;19528:131;19654:4;19528:131;:::i;:::-;19520:139;;19247:419;;;:::o;19672:239::-;19812:34;19808:1;19800:6;19796:14;19789:58;19881:22;19876:2;19868:6;19864:15;19857:47;19672:239;:::o;19917:366::-;20059:3;20080:67;20144:2;20139:3;20080:67;:::i;:::-;20073:74;;20156:93;20245:3;20156:93;:::i;:::-;20274:2;20269:3;20265:12;20258:19;;19917:366;;;:::o;20289:419::-;20455:4;20493:2;20482:9;20478:18;20470:26;;20542:9;20536:4;20532:20;20528:1;20517:9;20513:17;20506:47;20570:131;20696:4;20570:131;:::i;:::-;20562:139;;20289:419;;;:::o;20714:225::-;20854:34;20850:1;20842:6;20838:14;20831:58;20923:8;20918:2;20910:6;20906:15;20899:33;20714:225;:::o;20945:366::-;21087:3;21108:67;21172:2;21167:3;21108:67;:::i;:::-;21101:74;;21184:93;21273:3;21184:93;:::i;:::-;21302:2;21297:3;21293:12;21286:19;;20945:366;;;:::o;21317:419::-;21483:4;21521:2;21510:9;21506:18;21498:26;;21570:9;21564:4;21560:20;21556:1;21545:9;21541:17;21534:47;21598:131;21724:4;21598:131;:::i;:::-;21590:139;;21317:419;;;:::o;21742:182::-;21882:34;21878:1;21870:6;21866:14;21859:58;21742:182;:::o;21930:366::-;22072:3;22093:67;22157:2;22152:3;22093:67;:::i;:::-;22086:74;;22169:93;22258:3;22169:93;:::i;:::-;22287:2;22282:3;22278:12;22271:19;;21930:366;;;:::o;22302:419::-;22468:4;22506:2;22495:9;22491:18;22483:26;;22555:9;22549:4;22545:20;22541:1;22530:9;22526:17;22519:47;22583:131;22709:4;22583:131;:::i;:::-;22575:139;;22302:419;;;:::o;22727:229::-;22867:34;22863:1;22855:6;22851:14;22844:58;22936:12;22931:2;22923:6;22919:15;22912:37;22727:229;:::o;22962:366::-;23104:3;23125:67;23189:2;23184:3;23125:67;:::i;:::-;23118:74;;23201:93;23290:3;23201:93;:::i;:::-;23319:2;23314:3;23310:12;23303:19;;22962:366;;;:::o;23334:419::-;23500:4;23538:2;23527:9;23523:18;23515:26;;23587:9;23581:4;23577:20;23573:1;23562:9;23558:17;23551:47;23615:131;23741:4;23615:131;:::i;:::-;23607:139;;23334:419;;;:::o;23759:143::-;23816:5;23847:6;23841:13;23832:22;;23863:33;23890:5;23863:33;:::i;:::-;23759:143;;;;:::o;23908:351::-;23978:6;24027:2;24015:9;24006:7;24002:23;23998:32;23995:119;;;24033:79;;:::i;:::-;23995:119;24153:1;24178:64;24234:7;24225:6;24214:9;24210:22;24178:64;:::i;:::-;24168:74;;24124:128;23908:351;;;;:::o;24265:223::-;24405:34;24401:1;24393:6;24389:14;24382:58;24474:6;24469:2;24461:6;24457:15;24450:31;24265:223;:::o;24494:366::-;24636:3;24657:67;24721:2;24716:3;24657:67;:::i;:::-;24650:74;;24733:93;24822:3;24733:93;:::i;:::-;24851:2;24846:3;24842:12;24835:19;;24494:366;;;:::o;24866:419::-;25032:4;25070:2;25059:9;25055:18;25047:26;;25119:9;25113:4;25109:20;25105:1;25094:9;25090:17;25083:47;25147:131;25273:4;25147:131;:::i;:::-;25139:139;;24866:419;;;:::o;25291:221::-;25431:34;25427:1;25419:6;25415:14;25408:58;25500:4;25495:2;25487:6;25483:15;25476:29;25291:221;:::o;25518:366::-;25660:3;25681:67;25745:2;25740:3;25681:67;:::i;:::-;25674:74;;25757:93;25846:3;25757:93;:::i;:::-;25875:2;25870:3;25866:12;25859:19;;25518:366;;;:::o;25890:419::-;26056:4;26094:2;26083:9;26079:18;26071:26;;26143:9;26137:4;26133:20;26129:1;26118:9;26114:17;26107:47;26171:131;26297:4;26171:131;:::i;:::-;26163:139;;25890:419;;;:::o;26315:182::-;26455:34;26451:1;26443:6;26439:14;26432:58;26315:182;:::o;26503:366::-;26645:3;26666:67;26730:2;26725:3;26666:67;:::i;:::-;26659:74;;26742:93;26831:3;26742:93;:::i;:::-;26860:2;26855:3;26851:12;26844:19;;26503:366;;;:::o;26875:419::-;27041:4;27079:2;27068:9;27064:18;27056:26;;27128:9;27122:4;27118:20;27114:1;27103:9;27099:17;27092:47;27156:131;27282:4;27156:131;:::i;:::-;27148:139;;26875:419;;;:::o;27300:179::-;27440:31;27436:1;27428:6;27424:14;27417:55;27300:179;:::o;27485:366::-;27627:3;27648:67;27712:2;27707:3;27648:67;:::i;:::-;27641:74;;27724:93;27813:3;27724:93;:::i;:::-;27842:2;27837:3;27833:12;27826:19;;27485:366;;;:::o;27857:419::-;28023:4;28061:2;28050:9;28046:18;28038:26;;28110:9;28104:4;28100:20;28096:1;28085:9;28081:17;28074:47;28138:131;28264:4;28138:131;:::i;:::-;28130:139;;27857:419;;;:::o;28282:224::-;28422:34;28418:1;28410:6;28406:14;28399:58;28491:7;28486:2;28478:6;28474:15;28467:32;28282:224;:::o;28512:366::-;28654:3;28675:67;28739:2;28734:3;28675:67;:::i;:::-;28668:74;;28751:93;28840:3;28751:93;:::i;:::-;28869:2;28864:3;28860:12;28853:19;;28512:366;;;:::o;28884:419::-;29050:4;29088:2;29077:9;29073:18;29065:26;;29137:9;29131:4;29127:20;29123:1;29112:9;29108:17;29101:47;29165:131;29291:4;29165:131;:::i;:::-;29157:139;;28884:419;;;:::o;29309:222::-;29449:34;29445:1;29437:6;29433:14;29426:58;29518:5;29513:2;29505:6;29501:15;29494:30;29309:222;:::o;29537:366::-;29679:3;29700:67;29764:2;29759:3;29700:67;:::i;:::-;29693:74;;29776:93;29865:3;29776:93;:::i;:::-;29894:2;29889:3;29885:12;29878:19;;29537:366;;;:::o;29909:419::-;30075:4;30113:2;30102:9;30098:18;30090:26;;30162:9;30156:4;30152:20;30148:1;30137:9;30133:17;30126:47;30190:131;30316:4;30190:131;:::i;:::-;30182:139;;29909:419;;;:::o;30334:172::-;30474:24;30470:1;30462:6;30458:14;30451:48;30334:172;:::o;30512:366::-;30654:3;30675:67;30739:2;30734:3;30675:67;:::i;:::-;30668:74;;30751:93;30840:3;30751:93;:::i;:::-;30869:2;30864:3;30860:12;30853:19;;30512:366;;;:::o;30884:419::-;31050:4;31088:2;31077:9;31073:18;31065:26;;31137:9;31131:4;31127:20;31123:1;31112:9;31108:17;31101:47;31165:131;31291:4;31165:131;:::i;:::-;31157:139;;30884:419;;;:::o;31309:297::-;31449:34;31445:1;31437:6;31433:14;31426:58;31518:34;31513:2;31505:6;31501:15;31494:59;31587:11;31582:2;31574:6;31570:15;31563:36;31309:297;:::o;31612:366::-;31754:3;31775:67;31839:2;31834:3;31775:67;:::i;:::-;31768:74;;31851:93;31940:3;31851:93;:::i;:::-;31969:2;31964:3;31960:12;31953:19;;31612:366;;;:::o;31984:419::-;32150:4;32188:2;32177:9;32173:18;32165:26;;32237:9;32231:4;32227:20;32223:1;32212:9;32208:17;32201:47;32265:131;32391:4;32265:131;:::i;:::-;32257:139;;31984:419;;;:::o;32409:240::-;32549:34;32545:1;32537:6;32533:14;32526:58;32618:23;32613:2;32605:6;32601:15;32594:48;32409:240;:::o;32655:366::-;32797:3;32818:67;32882:2;32877:3;32818:67;:::i;:::-;32811:74;;32894:93;32983:3;32894:93;:::i;:::-;33012:2;33007:3;33003:12;32996:19;;32655:366;;;:::o;33027:419::-;33193:4;33231:2;33220:9;33216:18;33208:26;;33280:9;33274:4;33270:20;33266:1;33255:9;33251:17;33244:47;33308:131;33434:4;33308:131;:::i;:::-;33300:139;;33027:419;;;:::o;33452:169::-;33592:21;33588:1;33580:6;33576:14;33569:45;33452:169;:::o;33627:366::-;33769:3;33790:67;33854:2;33849:3;33790:67;:::i;:::-;33783:74;;33866:93;33955:3;33866:93;:::i;:::-;33984:2;33979:3;33975:12;33968:19;;33627:366;;;:::o;33999:419::-;34165:4;34203:2;34192:9;34188:18;34180:26;;34252:9;34246:4;34242:20;34238:1;34227:9;34223:17;34216:47;34280:131;34406:4;34280:131;:::i;:::-;34272:139;;33999:419;;;:::o;34424:241::-;34564:34;34560:1;34552:6;34548:14;34541:58;34633:24;34628:2;34620:6;34616:15;34609:49;34424:241;:::o;34671:366::-;34813:3;34834:67;34898:2;34893:3;34834:67;:::i;:::-;34827:74;;34910:93;34999:3;34910:93;:::i;:::-;35028:2;35023:3;35019:12;35012:19;;34671:366;;;:::o;35043:419::-;35209:4;35247:2;35236:9;35232:18;35224:26;;35296:9;35290:4;35286:20;35282:1;35271:9;35267:17;35260:47;35324:131;35450:4;35324:131;:::i;:::-;35316:139;;35043:419;;;:::o;35468:191::-;35508:4;35528:20;35546:1;35528:20;:::i;:::-;35523:25;;35562:20;35580:1;35562:20;:::i;:::-;35557:25;;35601:1;35598;35595:8;35592:34;;;35606:18;;:::i;:::-;35592:34;35651:1;35648;35644:9;35636:17;;35468:191;;;;:::o;35665:225::-;35805:34;35801:1;35793:6;35789:14;35782:58;35874:8;35869:2;35861:6;35857:15;35850:33;35665:225;:::o;35896:366::-;36038:3;36059:67;36123:2;36118:3;36059:67;:::i;:::-;36052:74;;36135:93;36224:3;36135:93;:::i;:::-;36253:2;36248:3;36244:12;36237:19;;35896:366;;;:::o;36268:419::-;36434:4;36472:2;36461:9;36457:18;36449:26;;36521:9;36515:4;36511:20;36507:1;36496:9;36492:17;36485:47;36549:131;36675:4;36549:131;:::i;:::-;36541:139;;36268:419;;;:::o;36693:147::-;36794:11;36831:3;36816:18;;36693:147;;;;:::o;36846:114::-;;:::o;36966:398::-;37125:3;37146:83;37227:1;37222:3;37146:83;:::i;:::-;37139:90;;37238:93;37327:3;37238:93;:::i;:::-;37356:1;37351:3;37347:11;37340:18;;36966:398;;;:::o;37370:379::-;37554:3;37576:147;37719:3;37576:147;:::i;:::-;37569:154;;37740:3;37733:10;;37370:379;;;:::o;37755:442::-;37904:4;37942:2;37931:9;37927:18;37919:26;;37955:71;38023:1;38012:9;38008:17;37999:6;37955:71;:::i;:::-;38036:72;38104:2;38093:9;38089:18;38080:6;38036:72;:::i;:::-;38118;38186:2;38175:9;38171:18;38162:6;38118:72;:::i;:::-;37755:442;;;;;;:::o;38203:180::-;38251:77;38248:1;38241:88;38348:4;38345:1;38338:15;38372:4;38369:1;38362:15;38389:180;38437:77;38434:1;38427:88;38534:4;38531:1;38524:15;38558:4;38555:1;38548:15;38575:143;38632:5;38663:6;38657:13;38648:22;;38679:33;38706:5;38679:33;:::i;:::-;38575:143;;;;:::o;38724:351::-;38794:6;38843:2;38831:9;38822:7;38818:23;38814:32;38811:119;;;38849:79;;:::i;:::-;38811:119;38969:1;38994:64;39050:7;39041:6;39030:9;39026:22;38994:64;:::i;:::-;38984:74;;38940:128;38724:351;;;;:::o;39081:85::-;39126:7;39155:5;39144:16;;39081:85;;;:::o;39172:158::-;39230:9;39263:61;39281:42;39290:32;39316:5;39290:32;:::i;:::-;39281:42;:::i;:::-;39263:61;:::i;:::-;39250:74;;39172:158;;;:::o;39336:147::-;39431:45;39470:5;39431:45;:::i;:::-;39426:3;39419:58;39336:147;;:::o;39489:114::-;39556:6;39590:5;39584:12;39574:22;;39489:114;;;:::o;39609:184::-;39708:11;39742:6;39737:3;39730:19;39782:4;39777:3;39773:14;39758:29;;39609:184;;;;:::o;39799:132::-;39866:4;39889:3;39881:11;;39919:4;39914:3;39910:14;39902:22;;39799:132;;;:::o;39937:108::-;40014:24;40032:5;40014:24;:::i;:::-;40009:3;40002:37;39937:108;;:::o;40051:179::-;40120:10;40141:46;40183:3;40175:6;40141:46;:::i;:::-;40219:4;40214:3;40210:14;40196:28;;40051:179;;;;:::o;40236:113::-;40306:4;40338;40333:3;40329:14;40321:22;;40236:113;;;:::o;40385:732::-;40504:3;40533:54;40581:5;40533:54;:::i;:::-;40603:86;40682:6;40677:3;40603:86;:::i;:::-;40596:93;;40713:56;40763:5;40713:56;:::i;:::-;40792:7;40823:1;40808:284;40833:6;40830:1;40827:13;40808:284;;;40909:6;40903:13;40936:63;40995:3;40980:13;40936:63;:::i;:::-;40929:70;;41022:60;41075:6;41022:60;:::i;:::-;41012:70;;40868:224;40855:1;40852;40848:9;40843:14;;40808:284;;;40812:14;41108:3;41101:10;;40509:608;;;40385:732;;;;:::o;41123:831::-;41386:4;41424:3;41413:9;41409:19;41401:27;;41438:71;41506:1;41495:9;41491:17;41482:6;41438:71;:::i;:::-;41519:80;41595:2;41584:9;41580:18;41571:6;41519:80;:::i;:::-;41646:9;41640:4;41636:20;41631:2;41620:9;41616:18;41609:48;41674:108;41777:4;41768:6;41674:108;:::i;:::-;41666:116;;41792:72;41860:2;41849:9;41845:18;41836:6;41792:72;:::i;:::-;41874:73;41942:3;41931:9;41927:19;41918:6;41874:73;:::i;:::-;41123:831;;;;;;;;:::o;41960:807::-;42209:4;42247:3;42236:9;42232:19;42224:27;;42261:71;42329:1;42318:9;42314:17;42305:6;42261:71;:::i;:::-;42342:72;42410:2;42399:9;42395:18;42386:6;42342:72;:::i;:::-;42424:80;42500:2;42489:9;42485:18;42476:6;42424:80;:::i;:::-;42514;42590:2;42579:9;42575:18;42566:6;42514:80;:::i;:::-;42604:73;42672:3;42661:9;42657:19;42648:6;42604:73;:::i;:::-;42687;42755:3;42744:9;42740:19;42731:6;42687:73;:::i;:::-;41960:807;;;;;;;;;:::o;42773:663::-;42861:6;42869;42877;42926:2;42914:9;42905:7;42901:23;42897:32;42894:119;;;42932:79;;:::i;:::-;42894:119;43052:1;43077:64;43133:7;43124:6;43113:9;43109:22;43077:64;:::i;:::-;43067:74;;43023:128;43190:2;43216:64;43272:7;43263:6;43252:9;43248:22;43216:64;:::i;:::-;43206:74;;43161:129;43329:2;43355:64;43411:7;43402:6;43391:9;43387:22;43355:64;:::i;:::-;43345:74;;43300:129;42773:663;;;;;:::o

Swarm Source

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

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