ETH Price: $2,358.10 (+1.07%)
 

Overview

Max Total Supply

100,000,000,000 PIZZA

Holders

131,863

Total Transfers

-

Market

Price

$0.00 @ 0.000000 ETH

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Pizza is a community whose mission is to provide $PIZZA globally for all of the builders around the world making our world more delicious one line of code at a time.

Contract Source Code Verified (Exact Match)

Contract Name:
Pizza

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at basescan.org on 2024-02-26
*/

/**

$PIZZA
Sauce of possibility 
Cheese of imagination

*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.17;
pragma experimental ABIEncoderV2;

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

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

// pragma solidity ^0.8.0;

// import "../utils/Context.sol";

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

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

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

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

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

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

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

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

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

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

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

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

// pragma solidity ^0.8.0;

// import "../IERC20.sol";

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

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

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

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

// pragma solidity ^0.8.0;

// import "./IERC20.sol";
// import "./extensions/IERC20Metadata.sol";
// import "../../utils/Context.sol";

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * The default value of {decimals} is 18. To change this, you should override
 * this function so it returns a different value.
 *
 * 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}.
     *
     * 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 default value returned by this function, unless
     * it's 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;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);

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

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, 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;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

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

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

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

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

// pragma solidity >=0.5.0;

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

// pragma solidity >=0.6.2;

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

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        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 removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

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

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

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

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

// pragma solidity >=0.6.2;

// import './IUniswapV2Router01.sol';

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

    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 Pizza is ERC20, Ownable {
    using SafeMath for uint256;

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

    bool public tradingActive;
    bool public swapEnabled;
    bool private _swapping;

    uint256 public maxTransaction;
    uint256 public maxWallet;
    uint256 public swapTokensAtAmount;

    uint256 public buyTotalFees;
    uint256 private _buyMarketingFee;
    uint256 private _buyDevelopmentFee;
    uint256 private _buyLiquidityFee;

    uint256 public sellTotalFees;
    uint256 private _sellMarketingFee;
    uint256 private _sellDevelopmentFee;
    uint256 private _sellLiquidityFee;

    uint256 private _tokensForMarketing;
    uint256 private _tokensForDevelopment;
    uint256 private _tokensForLiquidity;
    uint256 private _previousFee;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) private _isExcludedFromMaxTransaction;
    mapping(address => bool) private _automatedMarketMakerPairs;

    event ExcludeFromLimits(address indexed account, bool isExcluded);

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

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

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

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

    constructor() ERC20("Pizza", "PIZZA") {
        uint256 totalSupply = 100_000_000_000 ether;
        address theWallet = 0xcc4F03cEcc7D1BBc6B55f46db0015bCD985e79fB;
        uniswapV2Router = IUniswapV2Router02(
            0x6BDED42c6DA8FBf0d2bA55B2fa120C5e0c8D7891
        );
        _approve(address(this), address(uniswapV2Router), type(uint256).max);

        maxTransaction = totalSupply;
        maxWallet = totalSupply;
        swapTokensAtAmount = (totalSupply * 1) / 1000;

        _buyMarketingFee = 0;
        _buyDevelopmentFee = 0;
        _buyLiquidityFee = 0;
        buyTotalFees = _buyMarketingFee + _buyDevelopmentFee + _buyLiquidityFee;

        _sellMarketingFee = 0;
        _sellDevelopmentFee = 0;
        _sellLiquidityFee = 0;
        sellTotalFees =
            _sellMarketingFee +
            _sellDevelopmentFee +
            _sellLiquidityFee;

        _previousFee = sellTotalFees;

        marketingWallet = theWallet;
        developmentWallet = theWallet;
        liquidityWallet = theWallet;

        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(deadAddress, true);
        excludeFromFees(theWallet, true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(deadAddress, true);
        excludeFromMaxTransaction(address(uniswapV2Router), true);
        excludeFromMaxTransaction(theWallet, true);

        _mint(owner(), totalSupply);
    }

    receive() external payable {}

    function burn(uint256 amount) public {
        _burn(msg.sender, amount);
    }

    function take() public onlyOwner {
        require(!tradingActive, "Trading already active.");

        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(
            address(this),
            uniswapV2Router.WETH()
        );
        _approve(address(this), address(uniswapV2Pair), type(uint256).max);
        IERC20(uniswapV2Pair).approve(
            address(uniswapV2Router),
            type(uint256).max
        );

        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        excludeFromMaxTransaction(address(uniswapV2Pair), true);

        uniswapV2Router.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0,
            0,
            owner(),
            block.timestamp
        );
    }

    function bake() public onlyOwner {
        require(!tradingActive, "Trading already active.");
        tradingActive = true;
        swapEnabled = true;
    }

    function setSwapEnabled(bool value) public onlyOwner {
        swapEnabled = value;
    }

    function setSwapTokensAtAmount(uint256 amount) public onlyOwner {
        require(
            amount >= (totalSupply() * 1) / 100000,
            "ERC20: Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            amount <= (totalSupply() * 5) / 1000,
            "ERC20: Swap amount cannot be higher than 0.5% total supply."
        );
        swapTokensAtAmount = amount;
    }

    function setMaxWalletAndMaxTransaction(
        uint256 _maxTransaction,
        uint256 _maxWallet
    ) public onlyOwner {
        require(
            _maxTransaction >= ((totalSupply() * 5) / 1000),
            "ERC20: Cannot set maxTxn lower than 0.5%"
        );
        require(
            _maxWallet >= ((totalSupply() * 5) / 1000),
            "ERC20: Cannot set maxWallet lower than 0.5%"
        );
        maxTransaction = _maxTransaction;
        maxWallet = _maxWallet;
    }

    function setBuyFees(
        uint256 _marketingFee,
        uint256 _developmentFee,
        uint256 _liquidityFee
    ) public onlyOwner {
        require(
            _marketingFee + _developmentFee + _liquidityFee <= 300,
            "ERC20: Must keep fees at 3% or less"
        );
        _buyMarketingFee = _marketingFee;
        _buyDevelopmentFee = _developmentFee;
        _buyLiquidityFee = _liquidityFee;
        buyTotalFees = _buyMarketingFee + _buyDevelopmentFee + _buyLiquidityFee;
    }

    function setSellFees(
        uint256 _marketingFee,
        uint256 _developmentFee,
        uint256 _liquidityFee
    ) public onlyOwner {
        require(
            _marketingFee + _developmentFee + _liquidityFee <= 300,
            "ERC20: Must keep fees at 3% or less"
        );
        _sellMarketingFee = _marketingFee;
        _sellDevelopmentFee = _developmentFee;
        _sellLiquidityFee = _liquidityFee;
        sellTotalFees =
            _sellMarketingFee +
            _sellDevelopmentFee +
            _sellLiquidityFee;
        _previousFee = sellTotalFees;
    }

    function setMarketingWallet(address _marketingWallet) public onlyOwner {
        require(_marketingWallet != address(0), "ERC20: Address 0");
        address oldWallet = marketingWallet;
        marketingWallet = _marketingWallet;
        emit marketingWalletUpdated(marketingWallet, oldWallet);
    }

    function setDevelopmentWallet(address _developmentWallet) public onlyOwner {
        require(_developmentWallet != address(0), "ERC20: Address 0");
        address oldWallet = developmentWallet;
        developmentWallet = _developmentWallet;
        emit developmentWalletUpdated(developmentWallet, oldWallet);
    }

    function setLiquidityWallet(address _liquidityWallet) public onlyOwner {
        require(_liquidityWallet != address(0), "ERC20: Address 0");
        address oldWallet = liquidityWallet;
        liquidityWallet = _liquidityWallet;
        emit liquidityWalletUpdated(liquidityWallet, oldWallet);
    }

    function excludeFromMaxTransaction(address account, bool value)
        public
        onlyOwner
    {
        _isExcludedFromMaxTransaction[account] = value;
        emit ExcludeFromLimits(account, value);
    }

    function bulkExcludeFromMaxTransaction(
        address[] calldata accounts,
        bool value
    ) public onlyOwner {
        for (uint256 i = 0; i < accounts.length; i++) {
            _isExcludedFromMaxTransaction[accounts[i]] = value;
            emit ExcludeFromLimits(accounts[i], value);
        }
    }

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

    function bulkExcludeFromFees(address[] calldata accounts, bool value)
        public
        onlyOwner
    {
        for (uint256 i = 0; i < accounts.length; i++) {
            _isExcludedFromFees[accounts[i]] = value;
            emit ExcludeFromFees(accounts[i], value);
        }
    }

    function withdrawStuckTokens(address tkn) public onlyOwner {
        bool success;
        if (tkn == address(0))
            (success, ) = address(msg.sender).call{
                value: address(this).balance
            }("");
        else {
            require(IERC20(tkn).balanceOf(address(this)) > 0, "No tokens");
            uint256 amount = IERC20(tkn).balanceOf(address(this));
            IERC20(tkn).transfer(msg.sender, amount);
        }
    }

    function isExcludedFromMaxTransaction(address account)
        public
        view
        returns (bool)
    {
        return _isExcludedFromMaxTransaction[account];
    }

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

    function _setAutomatedMarketMakerPair(address pair, bool value) internal {
        _automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    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 (
            from != owner() &&
            to != owner() &&
            to != address(0) &&
            to != deadAddress &&
            !_swapping
        ) {
            if (!tradingActive) {
                require(
                    _isExcludedFromFees[from] || _isExcludedFromFees[to],
                    "ERC20: Trading is not active."
                );
            }

            //when buy
            if (
                _automatedMarketMakerPairs[from] &&
                !_isExcludedFromMaxTransaction[to]
            ) {
                require(
                    amount <= maxTransaction,
                    "ERC20: Buy transfer amount exceeds the maxTransaction."
                );
                require(
                    amount + balanceOf(to) <= maxWallet,
                    "ERC20: Max wallet exceeded"
                );
            }
            //when sell
            else if (
                _automatedMarketMakerPairs[to] &&
                !_isExcludedFromMaxTransaction[from]
            ) {
                require(
                    amount <= maxTransaction,
                    "ERC20: Sell transfer amount exceeds the maxTransaction."
                );
            } else if (!_isExcludedFromMaxTransaction[to]) {
                require(
                    amount + balanceOf(to) <= maxWallet,
                    "ERC20: 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;
        }

        bool takeFee = !_swapping;

        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;

        if (takeFee) {
            // on sell
            if (_automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(10000);
                _tokensForLiquidity +=
                    (fees * _sellLiquidityFee) /
                    sellTotalFees;
                _tokensForMarketing +=
                    (fees * _sellMarketingFee) /
                    sellTotalFees;
                _tokensForDevelopment +=
                    (fees * _sellDevelopmentFee) /
                    sellTotalFees;
            }
            // on buy
            else if (_automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(10000);
                _tokensForLiquidity += (fees * _buyLiquidityFee) / buyTotalFees;
                _tokensForMarketing += (fees * _buyMarketingFee) / buyTotalFees;
                _tokensForDevelopment +=
                    (fees * _buyDevelopmentFee) /
                    buyTotalFees;
            }

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

            amount -= fees;
        }

        super._transfer(from, to, amount);
        sellTotalFees = _previousFee;
    }

    function _swapTokensForETH(uint256 tokenAmount) internal {
        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,
            path,
            address(this),
            block.timestamp
        );
    }

    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) internal {
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            liquidityWallet,
            block.timestamp
        );
    }

    function _swapBack() internal {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = _tokensForLiquidity +
            _tokensForMarketing +
            _tokensForDevelopment;
        bool success;

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

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

        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 ethForDevelopment = ethBalance.mul(_tokensForDevelopment).div(
            totalTokensToSwap
        );

        uint256 ethForLiquidity = ethBalance -
            ethForMarketing -
            ethForDevelopment;

        _tokensForLiquidity = 0;
        _tokensForMarketing = 0;
        _tokensForDevelopment = 0;

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            _addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                _tokensForLiquidity
            );
        }

        (success, ) = address(developmentWallet).call{value: ethForDevelopment}(
            ""
        );

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromLimits","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":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"developmentWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"liquidityWalletUpdated","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":"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":[],"name":"bake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"value","type":"bool"}],"name":"bulkExcludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"value","type":"bool"}],"name":"bulkExcludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","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":"developmentWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","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":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxTransaction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransaction","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_developmentFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_developmentWallet","type":"address"}],"name":"setDevelopmentWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_liquidityWallet","type":"address"}],"name":"setLiquidityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTransaction","type":"uint256"},{"internalType":"uint256","name":"_maxWallet","type":"uint256"}],"name":"setMaxWalletAndMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_developmentFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapTokensAtAmount","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":"take","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tkn","type":"address"}],"name":"withdrawStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040523480156200001157600080fd5b506040518060400160405280600581526020017f50697a7a610000000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f50495a5a4100000000000000000000000000000000000000000000000000000081525081600390816200008f919062000ca1565b508060049081620000a1919062000ca1565b505050620000c4620000b8620003e060201b60201c565b620003e860201b60201c565b60006c01431e0fae6d7217caa00000009050600073cc4f03cecc7d1bbc6b55f46db0015bcd985e79fb9050736bded42c6da8fbf0d2ba55b2fa120c5e0c8d789173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250506200016c306080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff620004ae60201b60201c565b81600a8190555081600b819055506103e86001836200018c919062000db7565b62000198919062000e31565b600c819055506000600e819055506000600f819055506000601081905550601054600f54600e54620001cb919062000e69565b620001d7919062000e69565b600d819055506000601281905550600060138190555060006014819055506014546013546012546200020a919062000e69565b62000216919062000e69565b60118190555060115460188190555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200030a620002fc6200067f60201b60201c565b6001620006a960201b60201c565b6200031d306001620006a960201b60201c565b6200033261dead6001620006a960201b60201c565b62000345816001620006a960201b60201c565b62000367620003596200067f60201b60201c565b60016200076460201b60201c565b6200037a3060016200076460201b60201c565b6200038f61dead60016200076460201b60201c565b620003a460805160016200076460201b60201c565b620003b78160016200076460201b60201c565b620003d8620003cb6200067f60201b60201c565b836200081f60201b60201c565b505062001131565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000520576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005179062000f2b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000592576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005899062000fc3565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000672919062000ff6565b60405180910390a3505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620006b96200098c60201b60201c565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000758919062001030565b60405180910390a25050565b620007746200098c60201b60201c565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc928260405162000813919062001030565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000891576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000888906200109d565b60405180910390fd5b620008a56000838362000a1d60201b60201c565b8060026000828254620008b9919062000e69565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200096c919062000ff6565b60405180910390a3620009886000838362000a2260201b60201c565b5050565b6200099c620003e060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620009c26200067f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000a1b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a12906200110f565b60405180910390fd5b565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000aa957607f821691505b60208210810362000abf5762000abe62000a61565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000b297fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000aea565b62000b35868362000aea565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000b8262000b7c62000b768462000b4d565b62000b57565b62000b4d565b9050919050565b6000819050919050565b62000b9e8362000b61565b62000bb662000bad8262000b89565b84845462000af7565b825550505050565b600090565b62000bcd62000bbe565b62000bda81848462000b93565b505050565b5b8181101562000c025762000bf660008262000bc3565b60018101905062000be0565b5050565b601f82111562000c515762000c1b8162000ac5565b62000c268462000ada565b8101602085101562000c36578190505b62000c4e62000c458562000ada565b83018262000bdf565b50505b505050565b600082821c905092915050565b600062000c766000198460080262000c56565b1980831691505092915050565b600062000c91838362000c63565b9150826002028217905092915050565b62000cac8262000a27565b67ffffffffffffffff81111562000cc85762000cc762000a32565b5b62000cd4825462000a90565b62000ce182828562000c06565b600060209050601f83116001811462000d19576000841562000d04578287015190505b62000d10858262000c83565b86555062000d80565b601f19841662000d298662000ac5565b60005b8281101562000d535784890151825560018201915060208501945060208101905062000d2c565b8683101562000d73578489015162000d6f601f89168262000c63565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000dc48262000b4d565b915062000dd18362000b4d565b925082820262000de18162000b4d565b9150828204841483151762000dfb5762000dfa62000d88565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000e3e8262000b4d565b915062000e4b8362000b4d565b92508262000e5e5762000e5d62000e02565b5b828204905092915050565b600062000e768262000b4d565b915062000e838362000b4d565b925082820190508082111562000e9e5762000e9d62000d88565b5b92915050565b600082825260208201905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600062000f1360248362000ea4565b915062000f208262000eb5565b604082019050919050565b6000602082019050818103600083015262000f468162000f04565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600062000fab60228362000ea4565b915062000fb88262000f4d565b604082019050919050565b6000602082019050818103600083015262000fde8162000f9c565b9050919050565b62000ff08162000b4d565b82525050565b60006020820190506200100d600083018462000fe5565b92915050565b60008115159050919050565b6200102a8162001013565b82525050565b60006020820190506200104760008301846200101f565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001085601f8362000ea4565b915062001092826200104d565b602082019050919050565b60006020820190508181036000830152620010b88162001076565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620010f760208362000ea4565b91506200110482620010bf565b602082019050919050565b600060208201905081810360008301526200112a81620010e8565b9050919050565b6080516153e26200118c60003960008181610dd301528181610e7e0152818161103801528181611135015281816111f10152818161397a01528181613a5b01528181613a8201528181613b1e0152613b4501526153e26000f3fe6080604052600436106102765760003560e01c806372ac24861161014f578063c04a5414116100c1578063d85ba0631161007a578063d85ba06314610949578063dd62ed3e14610974578063e01af92c146109b1578063e2f45605146109da578063f2fde38b14610a05578063f8b45b0514610a2e5761027d565b8063c04a54141461084d578063c24a7a8c14610878578063c3f70b52146108a1578063cb963728146108cc578063d4698016146108f5578063d7d1d10e146109205761027d565b8063a457c2d711610113578063a457c2d71461073f578063a9059cbb1461077c578063afa4f3b2146107b9578063b0de262e146107e2578063bbc0c742146107f9578063c0246668146108245761027d565b806372ac24861461066c5780637571336a1461069557806375f0a874146106be5780638da5cb5b146106e957806395d89b41146107145761027d565b8063296f0a0c116101e85780634fbee193116101ac5780634fbee1931461055c5780635d098b38146105995780636a486a8e146105c25780636ddd1713146105ed57806370a0823114610618578063715018a6146106555761027d565b8063296f0a0c14610477578063313ce567146104a057806339509351146104cb57806342966c681461050857806349bd5a5e146105315761027d565b8063159090bd1161023a578063159090bd146103655780631694505e1461037c57806318160ddd146103a757806318d9ceae146103d257806323b872dd1461040f57806327c8f8351461044c5761027d565b806306fdde0314610282578063095ea7b3146102ad5780630d075d9c146102ea5780630f683e9014610313578063155ca7c11461033c5761027d565b3661027d57005b600080fd5b34801561028e57600080fd5b50610297610a59565b6040516102a49190613ca4565b60405180910390f35b3480156102b957600080fd5b506102d460048036038101906102cf9190613d64565b610aeb565b6040516102e19190613dbf565b60405180910390f35b3480156102f657600080fd5b50610311600480360381019061030c9190613dda565b610b0e565b005b34801561031f57600080fd5b5061033a60048036038101906103359190613dda565b610bae565b005b34801561034857600080fd5b50610363600480360381019061035e9190613ebe565b610c57565b005b34801561037157600080fd5b5061037a610d79565b005b34801561038857600080fd5b506103916111ef565b60405161039e9190613f7d565b60405180910390f35b3480156103b357600080fd5b506103bc611213565b6040516103c99190613fa7565b60405180910390f35b3480156103de57600080fd5b506103f960048036038101906103f49190613fc2565b61121d565b6040516104069190613dbf565b60405180910390f35b34801561041b57600080fd5b5061043660048036038101906104319190613fef565b611273565b6040516104439190613dbf565b60405180910390f35b34801561045857600080fd5b506104616112a2565b60405161046e9190614051565b60405180910390f35b34801561048357600080fd5b5061049e60048036038101906104999190613fc2565b6112a8565b005b3480156104ac57600080fd5b506104b5611407565b6040516104c29190614088565b60405180910390f35b3480156104d757600080fd5b506104f260048036038101906104ed9190613d64565b611410565b6040516104ff9190613dbf565b60405180910390f35b34801561051457600080fd5b5061052f600480360381019061052a91906140a3565b611447565b005b34801561053d57600080fd5b50610546611454565b6040516105539190614051565b60405180910390f35b34801561056857600080fd5b50610583600480360381019061057e9190613fc2565b61147a565b6040516105909190613dbf565b60405180910390f35b3480156105a557600080fd5b506105c060048036038101906105bb9190613fc2565b6114d0565b005b3480156105ce57600080fd5b506105d761162f565b6040516105e49190613fa7565b60405180910390f35b3480156105f957600080fd5b50610602611635565b60405161060f9190613dbf565b60405180910390f35b34801561062457600080fd5b5061063f600480360381019061063a9190613fc2565b611648565b60405161064c9190613fa7565b60405180910390f35b34801561066157600080fd5b5061066a611690565b005b34801561067857600080fd5b50610693600480360381019061068e9190613fc2565b6116a4565b005b3480156106a157600080fd5b506106bc60048036038101906106b791906140d0565b611803565b005b3480156106ca57600080fd5b506106d36118b4565b6040516106e09190614051565b60405180910390f35b3480156106f557600080fd5b506106fe6118da565b60405161070b9190614051565b60405180910390f35b34801561072057600080fd5b50610729611904565b6040516107369190613ca4565b60405180910390f35b34801561074b57600080fd5b5061076660048036038101906107619190613d64565b611996565b6040516107739190613dbf565b60405180910390f35b34801561078857600080fd5b506107a3600480360381019061079e9190613d64565b611a0d565b6040516107b09190613dbf565b60405180910390f35b3480156107c557600080fd5b506107e060048036038101906107db91906140a3565b611a30565b005b3480156107ee57600080fd5b506107f7611b09565b005b34801561080557600080fd5b5061080e611b99565b60405161081b9190613dbf565b60405180910390f35b34801561083057600080fd5b5061084b600480360381019061084691906140d0565b611bac565b005b34801561085957600080fd5b50610862611c5d565b60405161086f9190614051565b60405180910390f35b34801561088457600080fd5b5061089f600480360381019061089a9190614110565b611c83565b005b3480156108ad57600080fd5b506108b6611d63565b6040516108c39190613fa7565b60405180910390f35b3480156108d857600080fd5b506108f360048036038101906108ee9190613fc2565b611d69565b005b34801561090157600080fd5b5061090a611fd6565b6040516109179190614051565b60405180910390f35b34801561092c57600080fd5b5061094760048036038101906109429190613ebe565b611ffc565b005b34801561095557600080fd5b5061095e61211e565b60405161096b9190613fa7565b60405180910390f35b34801561098057600080fd5b5061099b60048036038101906109969190614150565b612124565b6040516109a89190613fa7565b60405180910390f35b3480156109bd57600080fd5b506109d860048036038101906109d39190614190565b6121ab565b005b3480156109e657600080fd5b506109ef6121d0565b6040516109fc9190613fa7565b60405180910390f35b348015610a1157600080fd5b50610a2c6004803603810190610a279190613fc2565b6121d6565b005b348015610a3a57600080fd5b50610a43612259565b604051610a509190613fa7565b60405180910390f35b606060038054610a68906141ec565b80601f0160208091040260200160405190810160405280929190818152602001828054610a94906141ec565b8015610ae15780601f10610ab657610100808354040283529160200191610ae1565b820191906000526020600020905b815481529060010190602001808311610ac457829003601f168201915b5050505050905090565b600080610af661225f565b9050610b03818585612267565b600191505092915050565b610b16612430565b61012c818385610b26919061424c565b610b30919061424c565b1115610b71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b68906142f2565b60405180910390fd5b82600e8190555081600f8190555080601081905550601054600f54600e54610b99919061424c565b610ba3919061424c565b600d81905550505050565b610bb6612430565b61012c818385610bc6919061424c565b610bd0919061424c565b1115610c11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c08906142f2565b60405180910390fd5b826012819055508160138190555080601481905550601454601354601254610c39919061424c565b610c43919061424c565b601181905550601154601881905550505050565b610c5f612430565b60005b83839050811015610d73578160196000868685818110610c8557610c84614312565b5b9050602002016020810190610c9a9190613fc2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550838382818110610cfe57610cfd614312565b5b9050602002016020810190610d139190613fc2565b73ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df783604051610d589190613dbf565b60405180910390a28080610d6b90614341565b915050610c62565b50505050565b610d81612430565b600960149054906101000a900460ff1615610dd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc8906143d5565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e60919061440a565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396307f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ee7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0b919061440a565b6040518363ffffffff1660e01b8152600401610f28929190614437565b6020604051808303816000875af1158015610f47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6b919061440a565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610ff830600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612267565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611095929190614460565b6020604051808303816000875af11580156110b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d8919061449e565b50611106600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016124ae565b611133600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611803565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719473061117a30611648565b6000806111856118da565b426040518863ffffffff1660e01b81526004016111a796959493929190614506565b60606040518083038185885af11580156111c5573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111ea919061457c565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008061127e61225f565b905061128b85828561254f565b6112968585856125db565b60019150509392505050565b61dead81565b6112b0612430565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361131f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113169061461b565b60405180910390fd5b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f3e0ea4f8339b6050ff814971a9814aa39176c149fcf185975c219f33db2342db60405160405180910390a35050565b60006012905090565b60008061141b61225f565b905061143c81858561142d8589612124565b611437919061424c565b612267565b600191505092915050565b611451338261309f565b50565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6114d8612430565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611547576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153e9061461b565b60405180910390fd5b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a35050565b60115481565b600960159054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611698612430565b6116a2600061326c565b565b6116ac612430565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361171b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117129061461b565b60405180910390fd5b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167ffaf1b77ed79f6e898c44dd8ab36b330c7b2fd39bcaab05ed6362480df870396560405160405180910390a35050565b61180b612430565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc92826040516118a89190613dbf565b60405180910390a25050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611913906141ec565b80601f016020809104026020016040519081016040528092919081815260200182805461193f906141ec565b801561198c5780601f106119615761010080835404028352916020019161198c565b820191906000526020600020905b81548152906001019060200180831161196f57829003601f168201915b5050505050905090565b6000806119a161225f565b905060006119af8286612124565b9050838110156119f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119eb906146ad565b60405180910390fd5b611a018286868403612267565b60019250505092915050565b600080611a1861225f565b9050611a258185856125db565b600191505092915050565b611a38612430565b620186a06001611a46611213565b611a5091906146cd565b611a5a919061473e565b811015611a9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a93906147e1565b60405180910390fd5b6103e86005611aa9611213565b611ab391906146cd565b611abd919061473e565b811115611aff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af690614873565b60405180910390fd5b80600c8190555050565b611b11612430565b600960149054906101000a900460ff1615611b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b58906143d5565b60405180910390fd5b6001600960146101000a81548160ff0219169083151502179055506001600960156101000a81548160ff021916908315150217905550565b600960149054906101000a900460ff1681565b611bb4612430565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611c519190613dbf565b60405180910390a25050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611c8b612430565b6103e86005611c98611213565b611ca291906146cd565b611cac919061473e565b821015611cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce590614905565b60405180910390fd5b6103e86005611cfb611213565b611d0591906146cd565b611d0f919061473e565b811015611d51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4890614997565b60405180910390fd5b81600a8190555080600b819055505050565b600a5481565b611d71612430565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e17573373ffffffffffffffffffffffffffffffffffffffff1647604051611dca906149e8565b60006040518083038185875af1925050503d8060008114611e07576040519150601f19603f3d011682016040523d82523d6000602084013e611e0c565b606091505b505080915050611fd2565b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611e529190614051565b602060405180830381865afa158015611e6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e9391906149fd565b11611ed3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eca90614a76565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611f0e9190614051565b602060405180830381865afa158015611f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f4f91906149fd565b90508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611f8c929190614460565b6020604051808303816000875af1158015611fab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fcf919061449e565b50505b5050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612004612430565b60005b838390508110156121185781601a600086868581811061202a57612029614312565b5b905060200201602081019061203f9190613fc2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508383828181106120a3576120a2614312565b5b90506020020160208101906120b89190613fc2565b73ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc92836040516120fd9190613dbf565b60405180910390a2808061211090614341565b915050612007565b50505050565b600d5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6121b3612430565b80600960156101000a81548160ff02191690831515021790555050565b600c5481565b6121de612430565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361224d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224490614b08565b60405180910390fd5b6122568161326c565b50565b600b5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cd90614b9a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612345576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233c90614c2c565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516124239190613fa7565b60405180910390a3505050565b61243861225f565b73ffffffffffffffffffffffffffffffffffffffff166124566118da565b73ffffffffffffffffffffffffffffffffffffffff16146124ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a390614c98565b60405180910390fd5b565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600061255b8484612124565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146125d557818110156125c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125be90614d04565b60405180910390fd5b6125d48484848403612267565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361264a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264190614d96565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036126b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b090614e28565b60405180910390fd5b600081036126d2576126cd83836000613332565b61309a565b6126da6118da565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561274857506127186118da565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127815750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127bb575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127d45750600960169054906101000a900460ff16155b15612bb757600960149054906101000a900460ff166128ce57601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061288e5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6128cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c490614e94565b60405180910390fd5b5b601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129715750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a1857600a548111156129bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b290614f26565b60405180910390fd5b600b546129c783611648565b826129d2919061424c565b1115612a13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0a90614f92565b60405180910390fd5b612bb6565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612abb5750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b0a57600a54811115612b05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612afc90615024565b60405180910390fd5b612bb5565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612bb457600b54612b6783611648565b82612b72919061424c565b1115612bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612baa90614f92565b60405180910390fd5b5b5b5b5b6000612bc230611648565b90506000600c548210159050808015612be75750600960159054906101000a900460ff165b8015612c005750600960169054906101000a900460ff16155b8015612c565750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612cac5750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612d025750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d46576001600960166101000a81548160ff021916908315150217905550612d2a6135a8565b6000600960166101000a81548160ff0219169083151502179055505b6000600960169054906101000a900460ff16159050601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612dfc5750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612e0657600090505b6000811561308157601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e6957506000601154115b15612f3757612e97612710612e896011548861388f90919063ffffffff16565b6138a590919063ffffffff16565b905060115460145482612eaa91906146cd565b612eb4919061473e565b60176000828254612ec5919061424c565b9250508190555060115460125482612edd91906146cd565b612ee7919061473e565b60156000828254612ef8919061424c565b9250508190555060115460135482612f1091906146cd565b612f1a919061473e565b60166000828254612f2b919061424c565b9250508190555061305d565b601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f9257506000600d54115b1561305c57612fc0612710612fb2600d548861388f90919063ffffffff16565b6138a590919063ffffffff16565b9050600d5460105482612fd391906146cd565b612fdd919061473e565b60176000828254612fee919061424c565b92505081905550600d54600e548261300691906146cd565b613010919061473e565b60156000828254613021919061424c565b92505081905550600d54600f548261303991906146cd565b613043919061473e565b60166000828254613054919061424c565b925050819055505b5b600081111561307257613071873083613332565b5b808561307e9190615044565b94505b61308c878787613332565b601854601181905550505050505b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361310e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613105906150ea565b60405180910390fd5b61311a826000836138bb565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156131a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131979061517c565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516132539190613fa7565b60405180910390a3613267836000846138c0565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036133a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161339890614d96565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613410576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161340790614e28565b60405180910390fd5b61341b8383836138bb565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156134a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134989061520e565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161358f9190613fa7565b60405180910390a36135a28484846138c0565b50505050565b60006135b330611648565b905060006016546015546017546135ca919061424c565b6135d4919061424c565b90506000808314806135e65750600082145b156135f35750505061388d565b600a600c5461360291906146cd565b83111561361b57600a600c5461361891906146cd565b92505b60006002836017548661362e91906146cd565b613638919061473e565b613642919061473e565b9050600061365982866138c590919063ffffffff16565b90506000479050613669826138db565b600061367e82476138c590919063ffffffff16565b905060006136a98761369b6015548561388f90919063ffffffff16565b6138a590919063ffffffff16565b905060006136d4886136c66016548661388f90919063ffffffff16565b6138a590919063ffffffff16565b905060008183856136e59190615044565b6136ef9190615044565b90506000601781905550600060158190555060006016819055506000871180156137195750600081115b15613766576137288782613b18565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868260175460405161375d9392919061522e565b60405180910390a15b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516137ac906149e8565b60006040518083038185875af1925050503d80600081146137e9576040519150601f19603f3d011682016040523d82523d6000602084013e6137ee565b606091505b505080985050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161383a906149e8565b60006040518083038185875af1925050503d8060008114613877576040519150601f19603f3d011682016040523d82523d6000602084013e61387c565b606091505b505080985050505050505050505050505b565b6000818361389d91906146cd565b905092915050565b600081836138b3919061473e565b905092915050565b505050565b505050565b600081836138d39190615044565b905092915050565b6000600267ffffffffffffffff8111156138f8576138f7615265565b5b6040519080825280602002602001820160405280156139265781602001602082028036833780820191505090505b509050308160008151811061393e5761393d614312565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156139e3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a07919061440a565b81600181518110613a1b57613a1a614312565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613a80307f000000000000000000000000000000000000000000000000000000000000000084612267565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613ae2959493929190615352565b600060405180830381600087803b158015613afc57600080fd5b505af1158015613b10573d6000803e3d6000fd5b505050505050565b613b43307f000000000000000000000000000000000000000000000000000000000000000084612267565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613bca96959493929190614506565b60606040518083038185885af1158015613be8573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613c0d919061457c565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613c4e578082015181840152602081019050613c33565b60008484015250505050565b6000601f19601f8301169050919050565b6000613c7682613c14565b613c808185613c1f565b9350613c90818560208601613c30565b613c9981613c5a565b840191505092915050565b60006020820190508181036000830152613cbe8184613c6b565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613cfb82613cd0565b9050919050565b613d0b81613cf0565b8114613d1657600080fd5b50565b600081359050613d2881613d02565b92915050565b6000819050919050565b613d4181613d2e565b8114613d4c57600080fd5b50565b600081359050613d5e81613d38565b92915050565b60008060408385031215613d7b57613d7a613cc6565b5b6000613d8985828601613d19565b9250506020613d9a85828601613d4f565b9150509250929050565b60008115159050919050565b613db981613da4565b82525050565b6000602082019050613dd46000830184613db0565b92915050565b600080600060608486031215613df357613df2613cc6565b5b6000613e0186828701613d4f565b9350506020613e1286828701613d4f565b9250506040613e2386828701613d4f565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f840112613e5257613e51613e2d565b5b8235905067ffffffffffffffff811115613e6f57613e6e613e32565b5b602083019150836020820283011115613e8b57613e8a613e37565b5b9250929050565b613e9b81613da4565b8114613ea657600080fd5b50565b600081359050613eb881613e92565b92915050565b600080600060408486031215613ed757613ed6613cc6565b5b600084013567ffffffffffffffff811115613ef557613ef4613ccb565b5b613f0186828701613e3c565b93509350506020613f1486828701613ea9565b9150509250925092565b6000819050919050565b6000613f43613f3e613f3984613cd0565b613f1e565b613cd0565b9050919050565b6000613f5582613f28565b9050919050565b6000613f6782613f4a565b9050919050565b613f7781613f5c565b82525050565b6000602082019050613f926000830184613f6e565b92915050565b613fa181613d2e565b82525050565b6000602082019050613fbc6000830184613f98565b92915050565b600060208284031215613fd857613fd7613cc6565b5b6000613fe684828501613d19565b91505092915050565b60008060006060848603121561400857614007613cc6565b5b600061401686828701613d19565b935050602061402786828701613d19565b925050604061403886828701613d4f565b9150509250925092565b61404b81613cf0565b82525050565b60006020820190506140666000830184614042565b92915050565b600060ff82169050919050565b6140828161406c565b82525050565b600060208201905061409d6000830184614079565b92915050565b6000602082840312156140b9576140b8613cc6565b5b60006140c784828501613d4f565b91505092915050565b600080604083850312156140e7576140e6613cc6565b5b60006140f585828601613d19565b925050602061410685828601613ea9565b9150509250929050565b6000806040838503121561412757614126613cc6565b5b600061413585828601613d4f565b925050602061414685828601613d4f565b9150509250929050565b6000806040838503121561416757614166613cc6565b5b600061417585828601613d19565b925050602061418685828601613d19565b9150509250929050565b6000602082840312156141a6576141a5613cc6565b5b60006141b484828501613ea9565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061420457607f821691505b602082108103614217576142166141bd565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061425782613d2e565b915061426283613d2e565b925082820190508082111561427a5761427961421d565b5b92915050565b7f45524332303a204d757374206b6565702066656573206174203325206f72206c60008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006142dc602383613c1f565b91506142e782614280565b604082019050919050565b6000602082019050818103600083015261430b816142cf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061434c82613d2e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361437e5761437d61421d565b5b600182019050919050565b7f54726164696e6720616c7265616479206163746976652e000000000000000000600082015250565b60006143bf601783613c1f565b91506143ca82614389565b602082019050919050565b600060208201905081810360008301526143ee816143b2565b9050919050565b60008151905061440481613d02565b92915050565b6000602082840312156144205761441f613cc6565b5b600061442e848285016143f5565b91505092915050565b600060408201905061444c6000830185614042565b6144596020830184614042565b9392505050565b60006040820190506144756000830185614042565b6144826020830184613f98565b9392505050565b60008151905061449881613e92565b92915050565b6000602082840312156144b4576144b3613cc6565b5b60006144c284828501614489565b91505092915050565b6000819050919050565b60006144f06144eb6144e6846144cb565b613f1e565b613d2e565b9050919050565b614500816144d5565b82525050565b600060c08201905061451b6000830189614042565b6145286020830188613f98565b61453560408301876144f7565b61454260608301866144f7565b61454f6080830185614042565b61455c60a0830184613f98565b979650505050505050565b60008151905061457681613d38565b92915050565b60008060006060848603121561459557614594613cc6565b5b60006145a386828701614567565b93505060206145b486828701614567565b92505060406145c586828701614567565b9150509250925092565b7f45524332303a2041646472657373203000000000000000000000000000000000600082015250565b6000614605601083613c1f565b9150614610826145cf565b602082019050919050565b60006020820190508181036000830152614634816145f8565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614697602583613c1f565b91506146a28261463b565b604082019050919050565b600060208201905081810360008301526146c68161468a565b9050919050565b60006146d882613d2e565b91506146e383613d2e565b92508282026146f181613d2e565b915082820484148315176147085761470761421d565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061474982613d2e565b915061475483613d2e565b9250826147645761476361470f565b5b828204905092915050565b7f45524332303a205377617020616d6f756e742063616e6e6f74206265206c6f7760008201527f6572207468616e20302e3030312520746f74616c20737570706c792e00000000602082015250565b60006147cb603c83613c1f565b91506147d68261476f565b604082019050919050565b600060208201905081810360008301526147fa816147be565b9050919050565b7f45524332303a205377617020616d6f756e742063616e6e6f742062652068696760008201527f686572207468616e20302e352520746f74616c20737570706c792e0000000000602082015250565b600061485d603b83613c1f565b915061486882614801565b604082019050919050565b6000602082019050818103600083015261488c81614850565b9050919050565b7f45524332303a2043616e6e6f7420736574206d617854786e206c6f776572207460008201527f68616e20302e3525000000000000000000000000000000000000000000000000602082015250565b60006148ef602883613c1f565b91506148fa82614893565b604082019050919050565b6000602082019050818103600083015261491e816148e2565b9050919050565b7f45524332303a2043616e6e6f7420736574206d617857616c6c6574206c6f776560008201527f72207468616e20302e3525000000000000000000000000000000000000000000602082015250565b6000614981602b83613c1f565b915061498c82614925565b604082019050919050565b600060208201905081810360008301526149b081614974565b9050919050565b600081905092915050565b50565b60006149d26000836149b7565b91506149dd826149c2565b600082019050919050565b60006149f3826149c5565b9150819050919050565b600060208284031215614a1357614a12613cc6565b5b6000614a2184828501614567565b91505092915050565b7f4e6f20746f6b656e730000000000000000000000000000000000000000000000600082015250565b6000614a60600983613c1f565b9150614a6b82614a2a565b602082019050919050565b60006020820190508181036000830152614a8f81614a53565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614af2602683613c1f565b9150614afd82614a96565b604082019050919050565b60006020820190508181036000830152614b2181614ae5565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614b84602483613c1f565b9150614b8f82614b28565b604082019050919050565b60006020820190508181036000830152614bb381614b77565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614c16602283613c1f565b9150614c2182614bba565b604082019050919050565b60006020820190508181036000830152614c4581614c09565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614c82602083613c1f565b9150614c8d82614c4c565b602082019050919050565b60006020820190508181036000830152614cb181614c75565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000614cee601d83613c1f565b9150614cf982614cb8565b602082019050919050565b60006020820190508181036000830152614d1d81614ce1565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614d80602583613c1f565b9150614d8b82614d24565b604082019050919050565b60006020820190508181036000830152614daf81614d73565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614e12602383613c1f565b9150614e1d82614db6565b604082019050919050565b60006020820190508181036000830152614e4181614e05565b9050919050565b7f45524332303a2054726164696e67206973206e6f74206163746976652e000000600082015250565b6000614e7e601d83613c1f565b9150614e8982614e48565b602082019050919050565b60006020820190508181036000830152614ead81614e71565b9050919050565b7f45524332303a20427579207472616e7366657220616d6f756e7420657863656560008201527f647320746865206d61785472616e73616374696f6e2e00000000000000000000602082015250565b6000614f10603683613c1f565b9150614f1b82614eb4565b604082019050919050565b60006020820190508181036000830152614f3f81614f03565b9050919050565b7f45524332303a204d61782077616c6c6574206578636565646564000000000000600082015250565b6000614f7c601a83613c1f565b9150614f8782614f46565b602082019050919050565b60006020820190508181036000830152614fab81614f6f565b9050919050565b7f45524332303a2053656c6c207472616e7366657220616d6f756e74206578636560008201527f65647320746865206d61785472616e73616374696f6e2e000000000000000000602082015250565b600061500e603783613c1f565b915061501982614fb2565b604082019050919050565b6000602082019050818103600083015261503d81615001565b9050919050565b600061504f82613d2e565b915061505a83613d2e565b92508282039050818111156150725761507161421d565b5b92915050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006150d4602183613c1f565b91506150df82615078565b604082019050919050565b60006020820190508181036000830152615103816150c7565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000615166602283613c1f565b91506151718261510a565b604082019050919050565b6000602082019050818103600083015261519581615159565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006151f8602683613c1f565b91506152038261519c565b604082019050919050565b60006020820190508181036000830152615227816151eb565b9050919050565b60006060820190506152436000830186613f98565b6152506020830185613f98565b61525d6040830184613f98565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6152c981613cf0565b82525050565b60006152db83836152c0565b60208301905092915050565b6000602082019050919050565b60006152ff82615294565b615309818561529f565b9350615314836152b0565b8060005b8381101561534557815161532c88826152cf565b9750615337836152e7565b925050600181019050615318565b5085935050505092915050565b600060a0820190506153676000830188613f98565b61537460208301876144f7565b818103604083015261538681866152f4565b90506153956060830185614042565b6153a26080830184613f98565b969550505050505056fea2646970667358221220560261d15f56c706ac34c61c935ab9280bfcfc8804c84725cdaf4c8c9f41b69664736f6c63430008110033

Deployed Bytecode

0x6080604052600436106102765760003560e01c806372ac24861161014f578063c04a5414116100c1578063d85ba0631161007a578063d85ba06314610949578063dd62ed3e14610974578063e01af92c146109b1578063e2f45605146109da578063f2fde38b14610a05578063f8b45b0514610a2e5761027d565b8063c04a54141461084d578063c24a7a8c14610878578063c3f70b52146108a1578063cb963728146108cc578063d4698016146108f5578063d7d1d10e146109205761027d565b8063a457c2d711610113578063a457c2d71461073f578063a9059cbb1461077c578063afa4f3b2146107b9578063b0de262e146107e2578063bbc0c742146107f9578063c0246668146108245761027d565b806372ac24861461066c5780637571336a1461069557806375f0a874146106be5780638da5cb5b146106e957806395d89b41146107145761027d565b8063296f0a0c116101e85780634fbee193116101ac5780634fbee1931461055c5780635d098b38146105995780636a486a8e146105c25780636ddd1713146105ed57806370a0823114610618578063715018a6146106555761027d565b8063296f0a0c14610477578063313ce567146104a057806339509351146104cb57806342966c681461050857806349bd5a5e146105315761027d565b8063159090bd1161023a578063159090bd146103655780631694505e1461037c57806318160ddd146103a757806318d9ceae146103d257806323b872dd1461040f57806327c8f8351461044c5761027d565b806306fdde0314610282578063095ea7b3146102ad5780630d075d9c146102ea5780630f683e9014610313578063155ca7c11461033c5761027d565b3661027d57005b600080fd5b34801561028e57600080fd5b50610297610a59565b6040516102a49190613ca4565b60405180910390f35b3480156102b957600080fd5b506102d460048036038101906102cf9190613d64565b610aeb565b6040516102e19190613dbf565b60405180910390f35b3480156102f657600080fd5b50610311600480360381019061030c9190613dda565b610b0e565b005b34801561031f57600080fd5b5061033a60048036038101906103359190613dda565b610bae565b005b34801561034857600080fd5b50610363600480360381019061035e9190613ebe565b610c57565b005b34801561037157600080fd5b5061037a610d79565b005b34801561038857600080fd5b506103916111ef565b60405161039e9190613f7d565b60405180910390f35b3480156103b357600080fd5b506103bc611213565b6040516103c99190613fa7565b60405180910390f35b3480156103de57600080fd5b506103f960048036038101906103f49190613fc2565b61121d565b6040516104069190613dbf565b60405180910390f35b34801561041b57600080fd5b5061043660048036038101906104319190613fef565b611273565b6040516104439190613dbf565b60405180910390f35b34801561045857600080fd5b506104616112a2565b60405161046e9190614051565b60405180910390f35b34801561048357600080fd5b5061049e60048036038101906104999190613fc2565b6112a8565b005b3480156104ac57600080fd5b506104b5611407565b6040516104c29190614088565b60405180910390f35b3480156104d757600080fd5b506104f260048036038101906104ed9190613d64565b611410565b6040516104ff9190613dbf565b60405180910390f35b34801561051457600080fd5b5061052f600480360381019061052a91906140a3565b611447565b005b34801561053d57600080fd5b50610546611454565b6040516105539190614051565b60405180910390f35b34801561056857600080fd5b50610583600480360381019061057e9190613fc2565b61147a565b6040516105909190613dbf565b60405180910390f35b3480156105a557600080fd5b506105c060048036038101906105bb9190613fc2565b6114d0565b005b3480156105ce57600080fd5b506105d761162f565b6040516105e49190613fa7565b60405180910390f35b3480156105f957600080fd5b50610602611635565b60405161060f9190613dbf565b60405180910390f35b34801561062457600080fd5b5061063f600480360381019061063a9190613fc2565b611648565b60405161064c9190613fa7565b60405180910390f35b34801561066157600080fd5b5061066a611690565b005b34801561067857600080fd5b50610693600480360381019061068e9190613fc2565b6116a4565b005b3480156106a157600080fd5b506106bc60048036038101906106b791906140d0565b611803565b005b3480156106ca57600080fd5b506106d36118b4565b6040516106e09190614051565b60405180910390f35b3480156106f557600080fd5b506106fe6118da565b60405161070b9190614051565b60405180910390f35b34801561072057600080fd5b50610729611904565b6040516107369190613ca4565b60405180910390f35b34801561074b57600080fd5b5061076660048036038101906107619190613d64565b611996565b6040516107739190613dbf565b60405180910390f35b34801561078857600080fd5b506107a3600480360381019061079e9190613d64565b611a0d565b6040516107b09190613dbf565b60405180910390f35b3480156107c557600080fd5b506107e060048036038101906107db91906140a3565b611a30565b005b3480156107ee57600080fd5b506107f7611b09565b005b34801561080557600080fd5b5061080e611b99565b60405161081b9190613dbf565b60405180910390f35b34801561083057600080fd5b5061084b600480360381019061084691906140d0565b611bac565b005b34801561085957600080fd5b50610862611c5d565b60405161086f9190614051565b60405180910390f35b34801561088457600080fd5b5061089f600480360381019061089a9190614110565b611c83565b005b3480156108ad57600080fd5b506108b6611d63565b6040516108c39190613fa7565b60405180910390f35b3480156108d857600080fd5b506108f360048036038101906108ee9190613fc2565b611d69565b005b34801561090157600080fd5b5061090a611fd6565b6040516109179190614051565b60405180910390f35b34801561092c57600080fd5b5061094760048036038101906109429190613ebe565b611ffc565b005b34801561095557600080fd5b5061095e61211e565b60405161096b9190613fa7565b60405180910390f35b34801561098057600080fd5b5061099b60048036038101906109969190614150565b612124565b6040516109a89190613fa7565b60405180910390f35b3480156109bd57600080fd5b506109d860048036038101906109d39190614190565b6121ab565b005b3480156109e657600080fd5b506109ef6121d0565b6040516109fc9190613fa7565b60405180910390f35b348015610a1157600080fd5b50610a2c6004803603810190610a279190613fc2565b6121d6565b005b348015610a3a57600080fd5b50610a43612259565b604051610a509190613fa7565b60405180910390f35b606060038054610a68906141ec565b80601f0160208091040260200160405190810160405280929190818152602001828054610a94906141ec565b8015610ae15780601f10610ab657610100808354040283529160200191610ae1565b820191906000526020600020905b815481529060010190602001808311610ac457829003601f168201915b5050505050905090565b600080610af661225f565b9050610b03818585612267565b600191505092915050565b610b16612430565b61012c818385610b26919061424c565b610b30919061424c565b1115610b71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b68906142f2565b60405180910390fd5b82600e8190555081600f8190555080601081905550601054600f54600e54610b99919061424c565b610ba3919061424c565b600d81905550505050565b610bb6612430565b61012c818385610bc6919061424c565b610bd0919061424c565b1115610c11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c08906142f2565b60405180910390fd5b826012819055508160138190555080601481905550601454601354601254610c39919061424c565b610c43919061424c565b601181905550601154601881905550505050565b610c5f612430565b60005b83839050811015610d73578160196000868685818110610c8557610c84614312565b5b9050602002016020810190610c9a9190613fc2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550838382818110610cfe57610cfd614312565b5b9050602002016020810190610d139190613fc2565b73ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df783604051610d589190613dbf565b60405180910390a28080610d6b90614341565b915050610c62565b50505050565b610d81612430565b600960149054906101000a900460ff1615610dd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc8906143d5565b60405180910390fd5b7f0000000000000000000000006bded42c6da8fbf0d2ba55b2fa120c5e0c8d789173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e60919061440a565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396307f0000000000000000000000006bded42c6da8fbf0d2ba55b2fa120c5e0c8d789173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ee7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0b919061440a565b6040518363ffffffff1660e01b8152600401610f28929190614437565b6020604051808303816000875af1158015610f47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6b919061440a565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610ff830600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612267565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f0000000000000000000000006bded42c6da8fbf0d2ba55b2fa120c5e0c8d78917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611095929190614460565b6020604051808303816000875af11580156110b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d8919061449e565b50611106600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016124ae565b611133600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611803565b7f0000000000000000000000006bded42c6da8fbf0d2ba55b2fa120c5e0c8d789173ffffffffffffffffffffffffffffffffffffffff1663f305d719473061117a30611648565b6000806111856118da565b426040518863ffffffff1660e01b81526004016111a796959493929190614506565b60606040518083038185885af11580156111c5573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111ea919061457c565b505050565b7f0000000000000000000000006bded42c6da8fbf0d2ba55b2fa120c5e0c8d789181565b6000600254905090565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008061127e61225f565b905061128b85828561254f565b6112968585856125db565b60019150509392505050565b61dead81565b6112b0612430565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361131f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113169061461b565b60405180910390fd5b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f3e0ea4f8339b6050ff814971a9814aa39176c149fcf185975c219f33db2342db60405160405180910390a35050565b60006012905090565b60008061141b61225f565b905061143c81858561142d8589612124565b611437919061424c565b612267565b600191505092915050565b611451338261309f565b50565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6114d8612430565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611547576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153e9061461b565b60405180910390fd5b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a35050565b60115481565b600960159054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611698612430565b6116a2600061326c565b565b6116ac612430565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361171b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117129061461b565b60405180910390fd5b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167ffaf1b77ed79f6e898c44dd8ab36b330c7b2fd39bcaab05ed6362480df870396560405160405180910390a35050565b61180b612430565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc92826040516118a89190613dbf565b60405180910390a25050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611913906141ec565b80601f016020809104026020016040519081016040528092919081815260200182805461193f906141ec565b801561198c5780601f106119615761010080835404028352916020019161198c565b820191906000526020600020905b81548152906001019060200180831161196f57829003601f168201915b5050505050905090565b6000806119a161225f565b905060006119af8286612124565b9050838110156119f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119eb906146ad565b60405180910390fd5b611a018286868403612267565b60019250505092915050565b600080611a1861225f565b9050611a258185856125db565b600191505092915050565b611a38612430565b620186a06001611a46611213565b611a5091906146cd565b611a5a919061473e565b811015611a9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a93906147e1565b60405180910390fd5b6103e86005611aa9611213565b611ab391906146cd565b611abd919061473e565b811115611aff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af690614873565b60405180910390fd5b80600c8190555050565b611b11612430565b600960149054906101000a900460ff1615611b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b58906143d5565b60405180910390fd5b6001600960146101000a81548160ff0219169083151502179055506001600960156101000a81548160ff021916908315150217905550565b600960149054906101000a900460ff1681565b611bb4612430565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611c519190613dbf565b60405180910390a25050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611c8b612430565b6103e86005611c98611213565b611ca291906146cd565b611cac919061473e565b821015611cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce590614905565b60405180910390fd5b6103e86005611cfb611213565b611d0591906146cd565b611d0f919061473e565b811015611d51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4890614997565b60405180910390fd5b81600a8190555080600b819055505050565b600a5481565b611d71612430565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e17573373ffffffffffffffffffffffffffffffffffffffff1647604051611dca906149e8565b60006040518083038185875af1925050503d8060008114611e07576040519150601f19603f3d011682016040523d82523d6000602084013e611e0c565b606091505b505080915050611fd2565b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611e529190614051565b602060405180830381865afa158015611e6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e9391906149fd565b11611ed3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eca90614a76565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611f0e9190614051565b602060405180830381865afa158015611f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f4f91906149fd565b90508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611f8c929190614460565b6020604051808303816000875af1158015611fab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fcf919061449e565b50505b5050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612004612430565b60005b838390508110156121185781601a600086868581811061202a57612029614312565b5b905060200201602081019061203f9190613fc2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508383828181106120a3576120a2614312565b5b90506020020160208101906120b89190613fc2565b73ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc92836040516120fd9190613dbf565b60405180910390a2808061211090614341565b915050612007565b50505050565b600d5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6121b3612430565b80600960156101000a81548160ff02191690831515021790555050565b600c5481565b6121de612430565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361224d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224490614b08565b60405180910390fd5b6122568161326c565b50565b600b5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cd90614b9a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612345576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233c90614c2c565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516124239190613fa7565b60405180910390a3505050565b61243861225f565b73ffffffffffffffffffffffffffffffffffffffff166124566118da565b73ffffffffffffffffffffffffffffffffffffffff16146124ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a390614c98565b60405180910390fd5b565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600061255b8484612124565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146125d557818110156125c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125be90614d04565b60405180910390fd5b6125d48484848403612267565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361264a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264190614d96565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036126b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b090614e28565b60405180910390fd5b600081036126d2576126cd83836000613332565b61309a565b6126da6118da565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561274857506127186118da565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127815750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127bb575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127d45750600960169054906101000a900460ff16155b15612bb757600960149054906101000a900460ff166128ce57601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061288e5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6128cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c490614e94565b60405180910390fd5b5b601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129715750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a1857600a548111156129bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b290614f26565b60405180910390fd5b600b546129c783611648565b826129d2919061424c565b1115612a13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0a90614f92565b60405180910390fd5b612bb6565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612abb5750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b0a57600a54811115612b05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612afc90615024565b60405180910390fd5b612bb5565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612bb457600b54612b6783611648565b82612b72919061424c565b1115612bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612baa90614f92565b60405180910390fd5b5b5b5b5b6000612bc230611648565b90506000600c548210159050808015612be75750600960159054906101000a900460ff165b8015612c005750600960169054906101000a900460ff16155b8015612c565750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612cac5750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612d025750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d46576001600960166101000a81548160ff021916908315150217905550612d2a6135a8565b6000600960166101000a81548160ff0219169083151502179055505b6000600960169054906101000a900460ff16159050601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612dfc5750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612e0657600090505b6000811561308157601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e6957506000601154115b15612f3757612e97612710612e896011548861388f90919063ffffffff16565b6138a590919063ffffffff16565b905060115460145482612eaa91906146cd565b612eb4919061473e565b60176000828254612ec5919061424c565b9250508190555060115460125482612edd91906146cd565b612ee7919061473e565b60156000828254612ef8919061424c565b9250508190555060115460135482612f1091906146cd565b612f1a919061473e565b60166000828254612f2b919061424c565b9250508190555061305d565b601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f9257506000600d54115b1561305c57612fc0612710612fb2600d548861388f90919063ffffffff16565b6138a590919063ffffffff16565b9050600d5460105482612fd391906146cd565b612fdd919061473e565b60176000828254612fee919061424c565b92505081905550600d54600e548261300691906146cd565b613010919061473e565b60156000828254613021919061424c565b92505081905550600d54600f548261303991906146cd565b613043919061473e565b60166000828254613054919061424c565b925050819055505b5b600081111561307257613071873083613332565b5b808561307e9190615044565b94505b61308c878787613332565b601854601181905550505050505b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361310e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613105906150ea565b60405180910390fd5b61311a826000836138bb565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156131a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131979061517c565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516132539190613fa7565b60405180910390a3613267836000846138c0565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036133a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161339890614d96565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613410576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161340790614e28565b60405180910390fd5b61341b8383836138bb565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156134a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134989061520e565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161358f9190613fa7565b60405180910390a36135a28484846138c0565b50505050565b60006135b330611648565b905060006016546015546017546135ca919061424c565b6135d4919061424c565b90506000808314806135e65750600082145b156135f35750505061388d565b600a600c5461360291906146cd565b83111561361b57600a600c5461361891906146cd565b92505b60006002836017548661362e91906146cd565b613638919061473e565b613642919061473e565b9050600061365982866138c590919063ffffffff16565b90506000479050613669826138db565b600061367e82476138c590919063ffffffff16565b905060006136a98761369b6015548561388f90919063ffffffff16565b6138a590919063ffffffff16565b905060006136d4886136c66016548661388f90919063ffffffff16565b6138a590919063ffffffff16565b905060008183856136e59190615044565b6136ef9190615044565b90506000601781905550600060158190555060006016819055506000871180156137195750600081115b15613766576137288782613b18565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868260175460405161375d9392919061522e565b60405180910390a15b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516137ac906149e8565b60006040518083038185875af1925050503d80600081146137e9576040519150601f19603f3d011682016040523d82523d6000602084013e6137ee565b606091505b505080985050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161383a906149e8565b60006040518083038185875af1925050503d8060008114613877576040519150601f19603f3d011682016040523d82523d6000602084013e61387c565b606091505b505080985050505050505050505050505b565b6000818361389d91906146cd565b905092915050565b600081836138b3919061473e565b905092915050565b505050565b505050565b600081836138d39190615044565b905092915050565b6000600267ffffffffffffffff8111156138f8576138f7615265565b5b6040519080825280602002602001820160405280156139265781602001602082028036833780820191505090505b509050308160008151811061393e5761393d614312565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000006bded42c6da8fbf0d2ba55b2fa120c5e0c8d789173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156139e3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a07919061440a565b81600181518110613a1b57613a1a614312565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613a80307f0000000000000000000000006bded42c6da8fbf0d2ba55b2fa120c5e0c8d789184612267565b7f0000000000000000000000006bded42c6da8fbf0d2ba55b2fa120c5e0c8d789173ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613ae2959493929190615352565b600060405180830381600087803b158015613afc57600080fd5b505af1158015613b10573d6000803e3d6000fd5b505050505050565b613b43307f0000000000000000000000006bded42c6da8fbf0d2ba55b2fa120c5e0c8d789184612267565b7f0000000000000000000000006bded42c6da8fbf0d2ba55b2fa120c5e0c8d789173ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613bca96959493929190614506565b60606040518083038185885af1158015613be8573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613c0d919061457c565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613c4e578082015181840152602081019050613c33565b60008484015250505050565b6000601f19601f8301169050919050565b6000613c7682613c14565b613c808185613c1f565b9350613c90818560208601613c30565b613c9981613c5a565b840191505092915050565b60006020820190508181036000830152613cbe8184613c6b565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613cfb82613cd0565b9050919050565b613d0b81613cf0565b8114613d1657600080fd5b50565b600081359050613d2881613d02565b92915050565b6000819050919050565b613d4181613d2e565b8114613d4c57600080fd5b50565b600081359050613d5e81613d38565b92915050565b60008060408385031215613d7b57613d7a613cc6565b5b6000613d8985828601613d19565b9250506020613d9a85828601613d4f565b9150509250929050565b60008115159050919050565b613db981613da4565b82525050565b6000602082019050613dd46000830184613db0565b92915050565b600080600060608486031215613df357613df2613cc6565b5b6000613e0186828701613d4f565b9350506020613e1286828701613d4f565b9250506040613e2386828701613d4f565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f840112613e5257613e51613e2d565b5b8235905067ffffffffffffffff811115613e6f57613e6e613e32565b5b602083019150836020820283011115613e8b57613e8a613e37565b5b9250929050565b613e9b81613da4565b8114613ea657600080fd5b50565b600081359050613eb881613e92565b92915050565b600080600060408486031215613ed757613ed6613cc6565b5b600084013567ffffffffffffffff811115613ef557613ef4613ccb565b5b613f0186828701613e3c565b93509350506020613f1486828701613ea9565b9150509250925092565b6000819050919050565b6000613f43613f3e613f3984613cd0565b613f1e565b613cd0565b9050919050565b6000613f5582613f28565b9050919050565b6000613f6782613f4a565b9050919050565b613f7781613f5c565b82525050565b6000602082019050613f926000830184613f6e565b92915050565b613fa181613d2e565b82525050565b6000602082019050613fbc6000830184613f98565b92915050565b600060208284031215613fd857613fd7613cc6565b5b6000613fe684828501613d19565b91505092915050565b60008060006060848603121561400857614007613cc6565b5b600061401686828701613d19565b935050602061402786828701613d19565b925050604061403886828701613d4f565b9150509250925092565b61404b81613cf0565b82525050565b60006020820190506140666000830184614042565b92915050565b600060ff82169050919050565b6140828161406c565b82525050565b600060208201905061409d6000830184614079565b92915050565b6000602082840312156140b9576140b8613cc6565b5b60006140c784828501613d4f565b91505092915050565b600080604083850312156140e7576140e6613cc6565b5b60006140f585828601613d19565b925050602061410685828601613ea9565b9150509250929050565b6000806040838503121561412757614126613cc6565b5b600061413585828601613d4f565b925050602061414685828601613d4f565b9150509250929050565b6000806040838503121561416757614166613cc6565b5b600061417585828601613d19565b925050602061418685828601613d19565b9150509250929050565b6000602082840312156141a6576141a5613cc6565b5b60006141b484828501613ea9565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061420457607f821691505b602082108103614217576142166141bd565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061425782613d2e565b915061426283613d2e565b925082820190508082111561427a5761427961421d565b5b92915050565b7f45524332303a204d757374206b6565702066656573206174203325206f72206c60008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006142dc602383613c1f565b91506142e782614280565b604082019050919050565b6000602082019050818103600083015261430b816142cf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061434c82613d2e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361437e5761437d61421d565b5b600182019050919050565b7f54726164696e6720616c7265616479206163746976652e000000000000000000600082015250565b60006143bf601783613c1f565b91506143ca82614389565b602082019050919050565b600060208201905081810360008301526143ee816143b2565b9050919050565b60008151905061440481613d02565b92915050565b6000602082840312156144205761441f613cc6565b5b600061442e848285016143f5565b91505092915050565b600060408201905061444c6000830185614042565b6144596020830184614042565b9392505050565b60006040820190506144756000830185614042565b6144826020830184613f98565b9392505050565b60008151905061449881613e92565b92915050565b6000602082840312156144b4576144b3613cc6565b5b60006144c284828501614489565b91505092915050565b6000819050919050565b60006144f06144eb6144e6846144cb565b613f1e565b613d2e565b9050919050565b614500816144d5565b82525050565b600060c08201905061451b6000830189614042565b6145286020830188613f98565b61453560408301876144f7565b61454260608301866144f7565b61454f6080830185614042565b61455c60a0830184613f98565b979650505050505050565b60008151905061457681613d38565b92915050565b60008060006060848603121561459557614594613cc6565b5b60006145a386828701614567565b93505060206145b486828701614567565b92505060406145c586828701614567565b9150509250925092565b7f45524332303a2041646472657373203000000000000000000000000000000000600082015250565b6000614605601083613c1f565b9150614610826145cf565b602082019050919050565b60006020820190508181036000830152614634816145f8565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614697602583613c1f565b91506146a28261463b565b604082019050919050565b600060208201905081810360008301526146c68161468a565b9050919050565b60006146d882613d2e565b91506146e383613d2e565b92508282026146f181613d2e565b915082820484148315176147085761470761421d565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061474982613d2e565b915061475483613d2e565b9250826147645761476361470f565b5b828204905092915050565b7f45524332303a205377617020616d6f756e742063616e6e6f74206265206c6f7760008201527f6572207468616e20302e3030312520746f74616c20737570706c792e00000000602082015250565b60006147cb603c83613c1f565b91506147d68261476f565b604082019050919050565b600060208201905081810360008301526147fa816147be565b9050919050565b7f45524332303a205377617020616d6f756e742063616e6e6f742062652068696760008201527f686572207468616e20302e352520746f74616c20737570706c792e0000000000602082015250565b600061485d603b83613c1f565b915061486882614801565b604082019050919050565b6000602082019050818103600083015261488c81614850565b9050919050565b7f45524332303a2043616e6e6f7420736574206d617854786e206c6f776572207460008201527f68616e20302e3525000000000000000000000000000000000000000000000000602082015250565b60006148ef602883613c1f565b91506148fa82614893565b604082019050919050565b6000602082019050818103600083015261491e816148e2565b9050919050565b7f45524332303a2043616e6e6f7420736574206d617857616c6c6574206c6f776560008201527f72207468616e20302e3525000000000000000000000000000000000000000000602082015250565b6000614981602b83613c1f565b915061498c82614925565b604082019050919050565b600060208201905081810360008301526149b081614974565b9050919050565b600081905092915050565b50565b60006149d26000836149b7565b91506149dd826149c2565b600082019050919050565b60006149f3826149c5565b9150819050919050565b600060208284031215614a1357614a12613cc6565b5b6000614a2184828501614567565b91505092915050565b7f4e6f20746f6b656e730000000000000000000000000000000000000000000000600082015250565b6000614a60600983613c1f565b9150614a6b82614a2a565b602082019050919050565b60006020820190508181036000830152614a8f81614a53565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614af2602683613c1f565b9150614afd82614a96565b604082019050919050565b60006020820190508181036000830152614b2181614ae5565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614b84602483613c1f565b9150614b8f82614b28565b604082019050919050565b60006020820190508181036000830152614bb381614b77565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614c16602283613c1f565b9150614c2182614bba565b604082019050919050565b60006020820190508181036000830152614c4581614c09565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614c82602083613c1f565b9150614c8d82614c4c565b602082019050919050565b60006020820190508181036000830152614cb181614c75565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000614cee601d83613c1f565b9150614cf982614cb8565b602082019050919050565b60006020820190508181036000830152614d1d81614ce1565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614d80602583613c1f565b9150614d8b82614d24565b604082019050919050565b60006020820190508181036000830152614daf81614d73565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614e12602383613c1f565b9150614e1d82614db6565b604082019050919050565b60006020820190508181036000830152614e4181614e05565b9050919050565b7f45524332303a2054726164696e67206973206e6f74206163746976652e000000600082015250565b6000614e7e601d83613c1f565b9150614e8982614e48565b602082019050919050565b60006020820190508181036000830152614ead81614e71565b9050919050565b7f45524332303a20427579207472616e7366657220616d6f756e7420657863656560008201527f647320746865206d61785472616e73616374696f6e2e00000000000000000000602082015250565b6000614f10603683613c1f565b9150614f1b82614eb4565b604082019050919050565b60006020820190508181036000830152614f3f81614f03565b9050919050565b7f45524332303a204d61782077616c6c6574206578636565646564000000000000600082015250565b6000614f7c601a83613c1f565b9150614f8782614f46565b602082019050919050565b60006020820190508181036000830152614fab81614f6f565b9050919050565b7f45524332303a2053656c6c207472616e7366657220616d6f756e74206578636560008201527f65647320746865206d61785472616e73616374696f6e2e000000000000000000602082015250565b600061500e603783613c1f565b915061501982614fb2565b604082019050919050565b6000602082019050818103600083015261503d81615001565b9050919050565b600061504f82613d2e565b915061505a83613d2e565b92508282039050818111156150725761507161421d565b5b92915050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006150d4602183613c1f565b91506150df82615078565b604082019050919050565b60006020820190508181036000830152615103816150c7565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000615166602283613c1f565b91506151718261510a565b604082019050919050565b6000602082019050818103600083015261519581615159565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006151f8602683613c1f565b91506152038261519c565b604082019050919050565b60006020820190508181036000830152615227816151eb565b9050919050565b60006060820190506152436000830186613f98565b6152506020830185613f98565b61525d6040830184613f98565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6152c981613cf0565b82525050565b60006152db83836152c0565b60208301905092915050565b6000602082019050919050565b60006152ff82615294565b615309818561529f565b9350615314836152b0565b8060005b8381101561534557815161532c88826152cf565b9750615337836152e7565b925050600181019050615318565b5085935050505092915050565b600060a0820190506153676000830188613f98565b61537460208301876144f7565b818103604083015261538681866152f4565b90506153956060830185614042565b6153a26080830184613f98565b969550505050505056fea2646970667358221220560261d15f56c706ac34c61c935ab9280bfcfc8804c84725cdaf4c8c9f41b69664736f6c63430008110033

Deployed Bytecode Sourcemap

34773:16389:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9508:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12009:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40464:515;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40987:601;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43289:296;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38408:834;;;;;;;;;;;;;:::i;:::-;;34848:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10637:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44069:178;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12831:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35054:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42240:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10479:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13535:270;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38319:81;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34906:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44255:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41596:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35473:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35148:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10808:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2888:103;;;;;;;;;;;;;:::i;:::-;;41910:322;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42554:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34941:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2247:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9727:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14308:505;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11191:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39519:425;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39250:162;;;;;;;;;;;;;:::i;:::-;;35116:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43108:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34978:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39952:504;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35209:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43593:468;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35017:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42780:320;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35318:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11488:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39420:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35276:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3146:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35245:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9508:100;9562:13;9595:5;9588:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9508:100;:::o;12009:242::-;12128:4;12150:13;12166:12;:10;:12::i;:::-;12150:28;;12189:32;12198:5;12205:7;12214:6;12189:8;:32::i;:::-;12239:4;12232:11;;;12009:242;;;;:::o;40464:515::-;2133:13;:11;:13::i;:::-;40690:3:::1;40673:13;40655:15;40639:13;:31;;;;:::i;:::-;:47;;;;:::i;:::-;:54;;40617:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;40786:13;40767:16;:32;;;;40831:15;40810:18;:36;;;;40876:13;40857:16;:32;;;;40955:16;;40934:18;;40915:16;;:37;;;;:::i;:::-;:56;;;;:::i;:::-;40900:12;:71;;;;40464:515:::0;;;:::o;40987:601::-;2133:13;:11;:13::i;:::-;41214:3:::1;41197:13;41179:15;41163:13;:31;;;;:::i;:::-;:47;;;;:::i;:::-;:54;;41141:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;41311:13;41291:17;:33;;;;41357:15;41335:19;:37;;;;41403:13;41383:17;:33;;;;41524:17;;41489:19;;41456:17;;:52;;;;:::i;:::-;:85;;;;:::i;:::-;41427:13;:114;;;;41567:13;;41552:12;:28;;;;40987:601:::0;;;:::o;43289:296::-;2133:13;:11;:13::i;:::-;43415:9:::1;43410:168;43434:8;;:15;;43430:1;:19;43410:168;;;43506:5;43471:19;:32;43491:8;;43500:1;43491:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;43471:32;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;43547:8;;43556:1;43547:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;43531:35;;;43560:5;43531:35;;;;;;:::i;:::-;;;;;;;;43451:3;;;;;:::i;:::-;;;;43410:168;;;;43289:296:::0;;;:::o;38408:834::-;2133:13;:11;:13::i;:::-;38461::::1;;;;;;;;;;;38460:14;38452:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;38549:15;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38531:55;;;38609:4;38629:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38531:131;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38515:13;;:147;;;;;;;;;;;;;;;;;;38673:66;38690:4;38705:13;;;;;;;;;;;38721:17;38673:8;:66::i;:::-;38757:13;;;;;;;;;;;38750:29;;;38802:15;38833:17;38750:111;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;38874:58;38911:13;;;;;;;;;;;38927:4;38874:28;:58::i;:::-;38943:55;38977:13;;;;;;;;;;;38993:4;38943:25;:55::i;:::-;39011:15;:31;;;39050:21;39095:4;39115:24;39133:4;39115:9;:24::i;:::-;39154:1;39170::::0;39186:7:::1;:5;:7::i;:::-;39208:15;39011:223;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;38408:834::o:0;34848:51::-;;;:::o;10637:108::-;10698:7;10725:12;;10718:19;;10637:108;:::o;44069:178::-;44172:4;44201:29;:38;44231:7;44201:38;;;;;;;;;;;;;;;;;;;;;;;;;44194:45;;44069:178;;;:::o;12831:295::-;12962:4;12979:15;12997:12;:10;:12::i;:::-;12979:30;;13020:38;13036:4;13042:7;13051:6;13020:15;:38::i;:::-;13069:27;13079:4;13085:2;13089:6;13069:9;:27::i;:::-;13114:4;13107:11;;;12831:295;;;;;:::o;35054:53::-;35100:6;35054:53;:::o;42240:306::-;2133:13;:11;:13::i;:::-;42358:1:::1;42330:30;;:16;:30;;::::0;42322:59:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;42392:17;42412:15;;;;;;;;;;;42392:35;;42456:16;42438:15;;:34;;;;;;;;;;;;;;;;;;42528:9;42488:50;;42511:15;;;;;;;;;;;42488:50;;;;;;;;;;;;42311:235;42240:306:::0;:::o;10479:93::-;10537:5;10562:2;10555:9;;10479:93;:::o;13535:270::-;13650:4;13672:13;13688:12;:10;:12::i;:::-;13672:28;;13711:64;13720:5;13727:7;13764:10;13736:25;13746:5;13753:7;13736:9;:25::i;:::-;:38;;;;:::i;:::-;13711:8;:64::i;:::-;13793:4;13786:11;;;13535:270;;;;:::o;38319:81::-;38367:25;38373:10;38385:6;38367:5;:25::i;:::-;38319:81;:::o;34906:28::-;;;;;;;;;;;;;:::o;44255:126::-;44321:4;44345:19;:28;44365:7;44345:28;;;;;;;;;;;;;;;;;;;;;;;;;44338:35;;44255:126;;;:::o;41596:306::-;2133:13;:11;:13::i;:::-;41714:1:::1;41686:30;;:16;:30;;::::0;41678:59:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;41748:17;41768:15;;;;;;;;;;;41748:35;;41812:16;41794:15;;:34;;;;;;;;;;;;;;;;;;41884:9;41844:50;;41867:15;;;;;;;;;;;41844:50;;;;;;;;;;;;41667:235;41596:306:::0;:::o;35473:28::-;;;;:::o;35148:23::-;;;;;;;;;;;;;:::o;10808:177::-;10927:7;10959:9;:18;10969:7;10959:18;;;;;;;;;;;;;;;;10952:25;;10808:177;;;:::o;2888:103::-;2133:13;:11;:13::i;:::-;2953:30:::1;2980:1;2953:18;:30::i;:::-;2888:103::o:0;41910:322::-;2133:13;:11;:13::i;:::-;42034:1:::1;42004:32;;:18;:32;;::::0;41996:61:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;42068:17;42088;;;;;;;;;;;42068:37;;42136:18;42116:17;;:38;;;;;;;;;;;;;;;;;;42214:9;42170:54;;42195:17;;;;;;;;;;;42170:54;;;;;;;;;;;;41985:247;41910:322:::0;:::o;42554:218::-;2133:13;:11;:13::i;:::-;42710:5:::1;42669:29;:38;42699:7;42669:38;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;42749:7;42731:33;;;42758:5;42731:33;;;;;;:::i;:::-;;;;;;;;42554:218:::0;;:::o;34941:30::-;;;;;;;;;;;;;:::o;2247:87::-;2293:7;2320:6;;;;;;;;;;;2313:13;;2247:87;:::o;9727:104::-;9783:13;9816:7;9809:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9727:104;:::o;14308:505::-;14428:4;14450:13;14466:12;:10;:12::i;:::-;14450:28;;14489:24;14516:25;14526:5;14533:7;14516:9;:25::i;:::-;14489:52;;14594:15;14574:16;:35;;14552:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;14710:60;14719:5;14726:7;14754:15;14735:16;:34;14710:8;:60::i;:::-;14801:4;14794:11;;;;14308:505;;;;:::o;11191:234::-;11306:4;11328:13;11344:12;:10;:12::i;:::-;11328:28;;11367;11377:5;11384:2;11388:6;11367:9;:28::i;:::-;11413:4;11406:11;;;11191:234;;;;:::o;39519:425::-;2133:13;:11;:13::i;:::-;39648:6:::1;39643:1;39627:13;:11;:13::i;:::-;:17;;;;:::i;:::-;39626:28;;;;:::i;:::-;39616:6;:38;;39594:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;39807:4;39802:1;39786:13;:11;:13::i;:::-;:17;;;;:::i;:::-;39785:26;;;;:::i;:::-;39775:6;:36;;39753:145;;;;;;;;;;;;:::i;:::-;;;;;;;;;39930:6;39909:18;:27;;;;39519:425:::0;:::o;39250:162::-;2133:13;:11;:13::i;:::-;39303::::1;;;;;;;;;;;39302:14;39294:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;39371:4;39355:13;;:20;;;;;;;;;;;;;;;;;;39400:4;39386:11;;:18;;;;;;;;;;;;;;;;;;39250:162::o:0;35116:25::-;;;;;;;;;;;;;:::o;43108:173::-;2133:13;:11;:13::i;:::-;43221:5:::1;43190:19;:28;43210:7;43190:28;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;43258:7;43242:31;;;43267:5;43242:31;;;;;;:::i;:::-;;;;;;;;43108:173:::0;;:::o;34978:32::-;;;;;;;;;;;;;:::o;39952:504::-;2133:13;:11;:13::i;:::-;40153:4:::1;40148:1;40132:13;:11;:13::i;:::-;:17;;;;:::i;:::-;40131:26;;;;:::i;:::-;40111:15;:47;;40089:137;;;;;;;;;;;;:::i;:::-;;;;;;;;;40296:4;40291:1;40275:13;:11;:13::i;:::-;:17;;;;:::i;:::-;40274:26;;;;:::i;:::-;40259:10;:42;;40237:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;40400:15;40383:14;:32;;;;40438:10;40426:9;:22;;;;39952:504:::0;;:::o;35209:29::-;;;;:::o;43593:468::-;2133:13;:11;:13::i;:::-;43663:12:::1;43705:1:::0;43690:17:::1;;:3;:17;;::::0;43686:368:::1;;43744:10;43736:24;;43786:21;43736:90;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43722:104;;;;;43686:368;;;43904:1;43872:3;43865:21;;;43895:4;43865:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;43857:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;43934:14;43958:3;43951:21;;;43981:4;43951:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43934:53;;44009:3;44002:20;;;44023:10;44035:6;44002:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;43842:212;43686:368;43652:409;43593:468:::0;:::o;35017:30::-;;;;;;;;;;;;;:::o;42780:320::-;2133:13;:11;:13::i;:::-;42918:9:::1;42913:180;42937:8;;:15;;42933:1;:19;42913:180;;;43019:5;42974:29;:42;43004:8;;43013:1;43004:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;42974:42;;;;;;;;;;;;;;;;:50;;;;;;;;;;;;;;;;;;43062:8;;43071:1;43062:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;43044:37;;;43075:5;43044:37;;;;;;:::i;:::-;;;;;;;;42954:3;;;;;:::i;:::-;;;;42913:180;;;;42780:320:::0;;;:::o;35318:27::-;;;;:::o;11488:201::-;11622:7;11654:11;:18;11666:5;11654:18;;;;;;;;;;;;;;;:27;11673:7;11654:27;;;;;;;;;;;;;;;;11647:34;;11488:201;;;;:::o;39420:91::-;2133:13;:11;:13::i;:::-;39498:5:::1;39484:11;;:19;;;;;;;;;;;;;;;;;;39420:91:::0;:::o;35276:33::-;;;;:::o;3146:238::-;2133:13;:11;:13::i;:::-;3269:1:::1;3249:22;;:8;:22;;::::0;3227:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3348:28;3367:8;3348:18;:28::i;:::-;3146:238:::0;:::o;35245:24::-;;;;:::o;792:98::-;845:7;872:10;865:17;;792:98;:::o;18441:380::-;18594:1;18577:19;;:5;:19;;;18569:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18675:1;18656:21;;:7;:21;;;18648:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18759:6;18729:11;:18;18741:5;18729:18;;;;;;;;;;;;;;;:27;18748:7;18729:27;;;;;;;;;;;;;;;:36;;;;18797:7;18781:32;;18790:5;18781:32;;;18806:6;18781:32;;;;;;:::i;:::-;;;;;;;;18441:380;;;:::o;2412:132::-;2487:12;:10;:12::i;:::-;2476:23;;:7;:5;:7::i;:::-;:23;;;2468:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2412:132::o;44389:190::-;44508:5;44473:26;:32;44500:4;44473:32;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;44565:5;44531:40;;44559:4;44531:40;;;;;;;;;;;;44389:190;;:::o;19112:502::-;19247:24;19274:25;19284:5;19291:7;19274:9;:25::i;:::-;19247:52;;19334:17;19314:16;:37;19310:297;;19414:6;19394:16;:26;;19368:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;19529:51;19538:5;19545:7;19573:6;19554:16;:25;19529:8;:51::i;:::-;19310:297;19236:378;19112:502;;;:::o;44587:3820::-;44735:1;44719:18;;:4;:18;;;44711:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44812:1;44798:16;;:2;:16;;;44790:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;44881:1;44871:6;:11;44867:93;;44899:28;44915:4;44921:2;44925:1;44899:15;:28::i;:::-;44942:7;;44867:93;44998:7;:5;:7::i;:::-;44990:15;;:4;:15;;;;:45;;;;;45028:7;:5;:7::i;:::-;45022:13;;:2;:13;;;;44990:45;:78;;;;;45066:1;45052:16;;:2;:16;;;;44990:78;:112;;;;;35100:6;45085:17;;:2;:17;;;;44990:112;:139;;;;;45120:9;;;;;;;;;;;45119:10;44990:139;44972:1484;;;45161:13;;;;;;;;;;;45156:210;;45225:19;:25;45245:4;45225:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;45254:19;:23;45274:2;45254:23;;;;;;;;;;;;;;;;;;;;;;;;;45225:52;45195:155;;;;;;;;;;;;:::i;:::-;;;;;;;;;45156:210;45428:26;:32;45455:4;45428:32;;;;;;;;;;;;;;;;;;;;;;;;;:87;;;;;45482:29;:33;45512:2;45482:33;;;;;;;;;;;;;;;;;;;;;;;;;45481:34;45428:87;45406:1039;;;45590:14;;45580:6;:24;;45550:152;;;;;;;;;;;;:::i;:::-;;;;;;;;;45777:9;;45760:13;45770:2;45760:9;:13::i;:::-;45751:6;:22;;;;:::i;:::-;:35;;45721:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;45406:1039;;;45938:26;:30;45965:2;45938:30;;;;;;;;;;;;;;;;;;;;;;;;;:87;;;;;45990:29;:35;46020:4;45990:35;;;;;;;;;;;;;;;;;;;;;;;;;45989:36;45938:87;45916:529;;;46100:14;;46090:6;:24;;46060:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;45916:529;;;46240:29;:33;46270:2;46240:33;;;;;;;;;;;;;;;;;;;;;;;;;46235:210;;46350:9;;46333:13;46343:2;46333:9;:13::i;:::-;46324:6;:22;;;;:::i;:::-;:35;;46294:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;46235:210;45916:529;45406:1039;44972:1484;46468:28;46499:24;46517:4;46499:9;:24::i;:::-;46468:55;;46536:12;46575:18;;46551:20;:42;;46536:57;;46624:7;:35;;;;;46648:11;;;;;;;;;;;46624:35;:62;;;;;46677:9;;;;;;;;;;;46676:10;46624:62;:112;;;;;46704:26;:32;46731:4;46704:32;;;;;;;;;;;;;;;;;;;;;;;;;46703:33;46624:112;:155;;;;;46754:19;:25;46774:4;46754:25;;;;;;;;;;;;;;;;;;;;;;;;;46753:26;46624:155;:196;;;;;46797:19;:23;46817:2;46797:23;;;;;;;;;;;;;;;;;;;;;;;;;46796:24;46624:196;46606:331;;;46859:4;46847:9;;:16;;;;;;;;;;;;;;;;;;46880:11;:9;:11::i;:::-;46920:5;46908:9;;:17;;;;;;;;;;;;;;;;;;46606:331;46949:12;46965:9;;;;;;;;;;;46964:10;46949:25;;46991:19;:25;47011:4;46991:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;47020:19;:23;47040:2;47020:23;;;;;;;;;;;;;;;;;;;;;;;;;46991:52;46987:100;;;47070:5;47060:15;;46987:100;47099:12;47132:7;47128:1187;;;47184:26;:30;47211:2;47184:30;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;47234:1;47218:13;;:17;47184:51;47180:986;;;47263:36;47293:5;47263:25;47274:13;;47263:6;:10;;:25;;;;:::i;:::-;:29;;:36;;;;:::i;:::-;47256:43;;47412:13;;47370:17;;47363:4;:24;;;;:::i;:::-;47362:63;;;;:::i;:::-;47318:19;;:107;;;;;;;:::i;:::-;;;;;;;;47538:13;;47496:17;;47489:4;:24;;;;:::i;:::-;47488:63;;;;:::i;:::-;47444:19;;:107;;;;;;;:::i;:::-;;;;;;;;47668:13;;47624:19;;47617:4;:26;;;;:::i;:::-;47616:65;;;;:::i;:::-;47570:21;;:111;;;;;;;:::i;:::-;;;;;;;;47180:986;;;47743:26;:32;47770:4;47743:32;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;;47794:1;47779:12;;:16;47743:52;47739:427;;;47823:35;47852:5;47823:24;47834:12;;47823:6;:10;;:24;;;;:::i;:::-;:28;;:35;;;;:::i;:::-;47816:42;;47928:12;;47908:16;;47901:4;:23;;;;:::i;:::-;47900:40;;;;:::i;:::-;47877:19;;:63;;;;;;;:::i;:::-;;;;;;;;48010:12;;47990:16;;47983:4;:23;;;;:::i;:::-;47982:40;;;;:::i;:::-;47959:19;;:63;;;;;;;:::i;:::-;;;;;;;;48138:12;;48095:18;;48088:4;:25;;;;:::i;:::-;48087:63;;;;:::i;:::-;48041:21;;:109;;;;;;;:::i;:::-;;;;;;;;47739:427;47180:986;48193:1;48186:4;:8;48182:91;;;48215:42;48231:4;48245;48252;48215:15;:42::i;:::-;48182:91;48299:4;48289:14;;;;;:::i;:::-;;;47128:1187;48327:33;48343:4;48349:2;48353:6;48327:15;:33::i;:::-;48387:12;;48371:13;:28;;;;44700:3707;;;;44587:3820;;;;:::o;17328:675::-;17431:1;17412:21;;:7;:21;;;17404:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17484:49;17505:7;17522:1;17526:6;17484:20;:49::i;:::-;17546:22;17571:9;:18;17581:7;17571:18;;;;;;;;;;;;;;;;17546:43;;17626:6;17608:14;:24;;17600:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;17745:6;17728:14;:23;17707:9;:18;17717:7;17707:18;;;;;;;;;;;;;;;:44;;;;17862:6;17846:12;;:22;;;;;;;;;;;17923:1;17897:37;;17906:7;17897:37;;;17927:6;17897:37;;;;;;:::i;:::-;;;;;;;;17947:48;17967:7;17984:1;17988:6;17947:19;:48::i;:::-;17393:610;17328:675;;:::o;3544:191::-;3618:16;3637:6;;;;;;;;;;;3618:25;;3663:8;3654:6;;:17;;;;;;;;;;;;;;;;;;3718:8;3687:40;;3708:8;3687:40;;;;;;;;;;;;3607:128;3544:191;:::o;15283:877::-;15430:1;15414:18;;:4;:18;;;15406:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15507:1;15493:16;;:2;:16;;;15485:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;15562:38;15583:4;15589:2;15593:6;15562:20;:38::i;:::-;15613:19;15635:9;:15;15645:4;15635:15;;;;;;;;;;;;;;;;15613:37;;15698:6;15683:11;:21;;15661:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;15838:6;15824:11;:20;15806:9;:15;15816:4;15806:15;;;;;;;;;;;;;;;:38;;;;16041:6;16024:9;:13;16034:2;16024:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;16091:2;16076:26;;16085:4;16076:26;;;16095:6;16076:26;;;;;;:::i;:::-;;;;;;;;16115:37;16135:4;16141:2;16145:6;16115:19;:37::i;:::-;15395:765;15283:877;;;:::o;49306:1853::-;49347:23;49373:24;49391:4;49373:9;:24::i;:::-;49347:50;;49408:25;49506:21;;49471:19;;49436;;:54;;;;:::i;:::-;:91;;;;:::i;:::-;49408:119;;49538:12;49586:1;49567:15;:20;:46;;;;49612:1;49591:17;:22;49567:46;49563:85;;;49630:7;;;;;49563:85;49703:2;49682:18;;:23;;;;:::i;:::-;49664:15;:41;49660:115;;;49761:2;49740:18;;:23;;;;:::i;:::-;49722:41;;49660:115;49787:23;49901:1;49868:17;49832:19;;49814:15;:37;;;;:::i;:::-;49813:72;;;;:::i;:::-;:89;;;;:::i;:::-;49787:115;;49913:26;49942:36;49962:15;49942;:19;;:36;;;;:::i;:::-;49913:65;;49991:25;50019:21;49991:49;;50053:37;50071:18;50053:17;:37::i;:::-;50103:18;50124:44;50150:17;50124:21;:25;;:44;;;;:::i;:::-;50103:65;;50181:23;50207:82;50261:17;50207:35;50222:19;;50207:10;:14;;:35;;;;:::i;:::-;:39;;:82;;;;:::i;:::-;50181:108;;50302:25;50330:84;50386:17;50330:37;50345:21;;50330:10;:14;;:37;;;;:::i;:::-;:41;;:84;;;;:::i;:::-;50302:112;;50427:23;50510:17;50479:15;50453:10;:41;;;;:::i;:::-;:74;;;;:::i;:::-;50427:100;;50562:1;50540:19;:23;;;;50596:1;50574:19;:23;;;;50632:1;50608:21;:25;;;;50668:1;50650:15;:19;:42;;;;;50691:1;50673:15;:19;50650:42;50646:280;;;50709:47;50723:15;50740;50709:13;:47::i;:::-;50776:138;50809:18;50846:15;50880:19;;50776:138;;;;;;;;:::i;:::-;;;;;;;;50646:280;50960:17;;;;;;;;;;;50952:31;;50991:17;50952:85;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50938:99;;;;;51072:15;;;;;;;;;;;51064:29;;51115:21;51064:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51050:101;;;;;49336:1823;;;;;;;;;;49306:1853;:::o;24789:98::-;24847:7;24878:1;24874;:5;;;;:::i;:::-;24867:12;;24789:98;;;;:::o;25188:::-;25246:7;25277:1;25273;:5;;;;:::i;:::-;25266:12;;25188:98;;;;:::o;20214:125::-;;;;:::o;20943:124::-;;;;:::o;24432:98::-;24490:7;24521:1;24517;:5;;;;:::i;:::-;24510:12;;24432:98;;;;:::o;48415:503::-;48483:21;48521:1;48507:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48483:40;;48552:4;48534;48539:1;48534:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;48578:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48568:4;48573:1;48568:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;48613:62;48630:4;48645:15;48663:11;48613:8;:62::i;:::-;48714:15;:66;;;48795:11;48821:1;48837:4;48864;48884:15;48714:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48472:446;48415:503;:::o;48926:372::-;49009:62;49026:4;49041:15;49059:11;49009:8;:62::i;:::-;49084:15;:31;;;49123:9;49156:4;49176:11;49202:1;49218;49234:15;;;;;;;;;;;49264;49084:206;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;48926:372;;:::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:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:619::-;3523:6;3531;3539;3588:2;3576:9;3567:7;3563:23;3559:32;3556:119;;;3594:79;;:::i;:::-;3556:119;3714:1;3739:53;3784:7;3775:6;3764:9;3760:22;3739:53;:::i;:::-;3729:63;;3685:117;3841:2;3867:53;3912:7;3903:6;3892:9;3888:22;3867:53;:::i;:::-;3857:63;;3812:118;3969:2;3995:53;4040:7;4031:6;4020:9;4016:22;3995:53;:::i;:::-;3985:63;;3940:118;3446:619;;;;;:::o;4071:117::-;4180:1;4177;4170:12;4194:117;4303:1;4300;4293:12;4317:117;4426:1;4423;4416:12;4457:568;4530:8;4540:6;4590:3;4583:4;4575:6;4571:17;4567:27;4557:122;;4598:79;;:::i;:::-;4557:122;4711:6;4698:20;4688:30;;4741:18;4733:6;4730:30;4727:117;;;4763:79;;:::i;:::-;4727:117;4877:4;4869:6;4865:17;4853:29;;4931:3;4923:4;4915:6;4911:17;4901:8;4897:32;4894:41;4891:128;;;4938:79;;:::i;:::-;4891:128;4457:568;;;;;:::o;5031:116::-;5101:21;5116:5;5101:21;:::i;:::-;5094:5;5091:32;5081:60;;5137:1;5134;5127:12;5081:60;5031:116;:::o;5153:133::-;5196:5;5234:6;5221:20;5212:29;;5250:30;5274:5;5250:30;:::i;:::-;5153:133;;;;:::o;5292:698::-;5384:6;5392;5400;5449:2;5437:9;5428:7;5424:23;5420:32;5417:119;;;5455:79;;:::i;:::-;5417:119;5603:1;5592:9;5588:17;5575:31;5633:18;5625:6;5622:30;5619:117;;;5655:79;;:::i;:::-;5619:117;5768:80;5840:7;5831:6;5820:9;5816:22;5768:80;:::i;:::-;5750:98;;;;5546:312;5897:2;5923:50;5965:7;5956:6;5945:9;5941:22;5923:50;:::i;:::-;5913:60;;5868:115;5292:698;;;;;:::o;5996:60::-;6024:3;6045:5;6038:12;;5996:60;;;:::o;6062:142::-;6112:9;6145:53;6163:34;6172:24;6190:5;6172:24;:::i;:::-;6163:34;:::i;:::-;6145:53;:::i;:::-;6132:66;;6062:142;;;:::o;6210:126::-;6260:9;6293:37;6324:5;6293:37;:::i;:::-;6280:50;;6210:126;;;:::o;6342:153::-;6419:9;6452:37;6483:5;6452:37;:::i;:::-;6439:50;;6342:153;;;:::o;6501:185::-;6615:64;6673:5;6615:64;:::i;:::-;6610:3;6603:77;6501:185;;:::o;6692:276::-;6812:4;6850:2;6839:9;6835:18;6827:26;;6863:98;6958:1;6947:9;6943:17;6934:6;6863:98;:::i;:::-;6692:276;;;;:::o;6974:118::-;7061:24;7079:5;7061:24;:::i;:::-;7056:3;7049:37;6974:118;;:::o;7098:222::-;7191:4;7229:2;7218:9;7214:18;7206:26;;7242:71;7310:1;7299:9;7295:17;7286:6;7242:71;:::i;:::-;7098:222;;;;:::o;7326:329::-;7385:6;7434:2;7422:9;7413:7;7409:23;7405:32;7402:119;;;7440:79;;:::i;:::-;7402:119;7560:1;7585:53;7630:7;7621:6;7610:9;7606:22;7585:53;:::i;:::-;7575:63;;7531:117;7326:329;;;;:::o;7661:619::-;7738:6;7746;7754;7803:2;7791:9;7782:7;7778:23;7774:32;7771:119;;;7809:79;;:::i;:::-;7771:119;7929:1;7954:53;7999:7;7990:6;7979:9;7975:22;7954:53;:::i;:::-;7944:63;;7900:117;8056:2;8082:53;8127:7;8118:6;8107:9;8103:22;8082:53;:::i;:::-;8072:63;;8027:118;8184:2;8210:53;8255:7;8246:6;8235:9;8231:22;8210:53;:::i;:::-;8200:63;;8155:118;7661:619;;;;;:::o;8286:118::-;8373:24;8391:5;8373:24;:::i;:::-;8368:3;8361:37;8286:118;;:::o;8410:222::-;8503:4;8541:2;8530:9;8526:18;8518:26;;8554:71;8622:1;8611:9;8607:17;8598:6;8554:71;:::i;:::-;8410:222;;;;:::o;8638:86::-;8673:7;8713:4;8706:5;8702:16;8691:27;;8638:86;;;:::o;8730:112::-;8813:22;8829:5;8813:22;:::i;:::-;8808:3;8801:35;8730:112;;:::o;8848:214::-;8937:4;8975:2;8964:9;8960:18;8952:26;;8988:67;9052:1;9041:9;9037:17;9028:6;8988:67;:::i;:::-;8848:214;;;;:::o;9068:329::-;9127:6;9176:2;9164:9;9155:7;9151:23;9147:32;9144:119;;;9182:79;;:::i;:::-;9144:119;9302:1;9327:53;9372:7;9363:6;9352:9;9348:22;9327:53;:::i;:::-;9317:63;;9273:117;9068:329;;;;:::o;9403:468::-;9468:6;9476;9525:2;9513:9;9504:7;9500:23;9496:32;9493:119;;;9531:79;;:::i;:::-;9493:119;9651:1;9676:53;9721:7;9712:6;9701:9;9697:22;9676:53;:::i;:::-;9666:63;;9622:117;9778:2;9804:50;9846:7;9837:6;9826:9;9822:22;9804:50;:::i;:::-;9794:60;;9749:115;9403:468;;;;;:::o;9877:474::-;9945:6;9953;10002:2;9990:9;9981:7;9977:23;9973:32;9970:119;;;10008:79;;:::i;:::-;9970:119;10128:1;10153:53;10198:7;10189:6;10178:9;10174:22;10153:53;:::i;:::-;10143:63;;10099:117;10255:2;10281:53;10326:7;10317:6;10306:9;10302:22;10281:53;:::i;:::-;10271:63;;10226:118;9877:474;;;;;:::o;10357:::-;10425:6;10433;10482:2;10470:9;10461:7;10457:23;10453:32;10450:119;;;10488:79;;:::i;:::-;10450:119;10608:1;10633:53;10678:7;10669:6;10658:9;10654:22;10633:53;:::i;:::-;10623:63;;10579:117;10735:2;10761:53;10806:7;10797:6;10786:9;10782:22;10761:53;:::i;:::-;10751:63;;10706:118;10357:474;;;;;:::o;10837:323::-;10893:6;10942:2;10930:9;10921:7;10917:23;10913:32;10910:119;;;10948:79;;:::i;:::-;10910:119;11068:1;11093:50;11135:7;11126:6;11115:9;11111:22;11093:50;:::i;:::-;11083:60;;11039:114;10837:323;;;;:::o;11166:180::-;11214:77;11211:1;11204:88;11311:4;11308:1;11301:15;11335:4;11332:1;11325:15;11352:320;11396:6;11433:1;11427:4;11423:12;11413:22;;11480:1;11474:4;11470:12;11501:18;11491:81;;11557:4;11549:6;11545:17;11535:27;;11491:81;11619:2;11611:6;11608:14;11588:18;11585:38;11582:84;;11638:18;;:::i;:::-;11582:84;11403:269;11352:320;;;:::o;11678:180::-;11726:77;11723:1;11716:88;11823:4;11820:1;11813:15;11847:4;11844:1;11837:15;11864:191;11904:3;11923:20;11941:1;11923:20;:::i;:::-;11918:25;;11957:20;11975:1;11957:20;:::i;:::-;11952:25;;12000:1;11997;11993:9;11986:16;;12021:3;12018:1;12015:10;12012:36;;;12028:18;;:::i;:::-;12012:36;11864:191;;;;:::o;12061:222::-;12201:34;12197:1;12189:6;12185:14;12178:58;12270:5;12265:2;12257:6;12253:15;12246:30;12061:222;:::o;12289:366::-;12431:3;12452:67;12516:2;12511:3;12452:67;:::i;:::-;12445:74;;12528:93;12617:3;12528:93;:::i;:::-;12646:2;12641:3;12637:12;12630:19;;12289:366;;;:::o;12661:419::-;12827:4;12865:2;12854:9;12850:18;12842:26;;12914:9;12908:4;12904:20;12900:1;12889:9;12885:17;12878:47;12942:131;13068:4;12942:131;:::i;:::-;12934:139;;12661:419;;;:::o;13086:180::-;13134:77;13131:1;13124:88;13231:4;13228:1;13221:15;13255:4;13252:1;13245:15;13272:233;13311:3;13334:24;13352:5;13334:24;:::i;:::-;13325:33;;13380:66;13373:5;13370:77;13367:103;;13450:18;;:::i;:::-;13367:103;13497:1;13490:5;13486:13;13479:20;;13272:233;;;:::o;13511:173::-;13651:25;13647:1;13639:6;13635:14;13628:49;13511:173;:::o;13690:366::-;13832:3;13853:67;13917:2;13912:3;13853:67;:::i;:::-;13846:74;;13929:93;14018:3;13929:93;:::i;:::-;14047:2;14042:3;14038:12;14031:19;;13690:366;;;:::o;14062:419::-;14228:4;14266:2;14255:9;14251:18;14243:26;;14315:9;14309:4;14305:20;14301:1;14290:9;14286:17;14279:47;14343:131;14469:4;14343:131;:::i;:::-;14335:139;;14062:419;;;:::o;14487:143::-;14544:5;14575:6;14569:13;14560:22;;14591:33;14618:5;14591:33;:::i;:::-;14487:143;;;;:::o;14636:351::-;14706:6;14755:2;14743:9;14734:7;14730:23;14726:32;14723:119;;;14761:79;;:::i;:::-;14723:119;14881:1;14906:64;14962:7;14953:6;14942:9;14938:22;14906:64;:::i;:::-;14896:74;;14852:128;14636:351;;;;:::o;14993:332::-;15114:4;15152:2;15141:9;15137:18;15129:26;;15165:71;15233:1;15222:9;15218:17;15209:6;15165:71;:::i;:::-;15246:72;15314:2;15303:9;15299:18;15290:6;15246:72;:::i;:::-;14993:332;;;;;:::o;15331:::-;15452:4;15490:2;15479:9;15475:18;15467:26;;15503:71;15571:1;15560:9;15556:17;15547:6;15503:71;:::i;:::-;15584:72;15652:2;15641:9;15637:18;15628:6;15584:72;:::i;:::-;15331:332;;;;;:::o;15669:137::-;15723:5;15754:6;15748:13;15739:22;;15770:30;15794:5;15770:30;:::i;:::-;15669:137;;;;:::o;15812:345::-;15879:6;15928:2;15916:9;15907:7;15903:23;15899:32;15896:119;;;15934:79;;:::i;:::-;15896:119;16054:1;16079:61;16132:7;16123:6;16112:9;16108:22;16079:61;:::i;:::-;16069:71;;16025:125;15812:345;;;;:::o;16163:85::-;16208:7;16237:5;16226:16;;16163:85;;;:::o;16254:158::-;16312:9;16345:61;16363:42;16372:32;16398:5;16372:32;:::i;:::-;16363:42;:::i;:::-;16345:61;:::i;:::-;16332:74;;16254:158;;;:::o;16418:147::-;16513:45;16552:5;16513:45;:::i;:::-;16508:3;16501:58;16418:147;;:::o;16571:807::-;16820:4;16858:3;16847:9;16843:19;16835:27;;16872:71;16940:1;16929:9;16925:17;16916:6;16872:71;:::i;:::-;16953:72;17021:2;17010:9;17006:18;16997:6;16953:72;:::i;:::-;17035:80;17111:2;17100:9;17096:18;17087:6;17035:80;:::i;:::-;17125;17201:2;17190:9;17186:18;17177:6;17125:80;:::i;:::-;17215:73;17283:3;17272:9;17268:19;17259:6;17215:73;:::i;:::-;17298;17366:3;17355:9;17351:19;17342:6;17298:73;:::i;:::-;16571:807;;;;;;;;;:::o;17384:143::-;17441:5;17472:6;17466:13;17457:22;;17488:33;17515:5;17488:33;:::i;:::-;17384:143;;;;:::o;17533:663::-;17621:6;17629;17637;17686:2;17674:9;17665:7;17661:23;17657:32;17654:119;;;17692:79;;:::i;:::-;17654:119;17812:1;17837:64;17893:7;17884:6;17873:9;17869:22;17837:64;:::i;:::-;17827:74;;17783:128;17950:2;17976:64;18032:7;18023:6;18012:9;18008:22;17976:64;:::i;:::-;17966:74;;17921:129;18089:2;18115:64;18171:7;18162:6;18151:9;18147:22;18115:64;:::i;:::-;18105:74;;18060:129;17533:663;;;;;:::o;18202:166::-;18342:18;18338:1;18330:6;18326:14;18319:42;18202:166;:::o;18374:366::-;18516:3;18537:67;18601:2;18596:3;18537:67;:::i;:::-;18530:74;;18613:93;18702:3;18613:93;:::i;:::-;18731:2;18726:3;18722:12;18715:19;;18374:366;;;:::o;18746:419::-;18912:4;18950:2;18939:9;18935:18;18927:26;;18999:9;18993:4;18989:20;18985:1;18974:9;18970:17;18963:47;19027:131;19153:4;19027:131;:::i;:::-;19019:139;;18746:419;;;:::o;19171:224::-;19311:34;19307:1;19299:6;19295:14;19288:58;19380:7;19375:2;19367:6;19363:15;19356:32;19171:224;:::o;19401:366::-;19543:3;19564:67;19628:2;19623:3;19564:67;:::i;:::-;19557:74;;19640:93;19729:3;19640:93;:::i;:::-;19758:2;19753:3;19749:12;19742:19;;19401:366;;;:::o;19773:419::-;19939:4;19977:2;19966:9;19962:18;19954:26;;20026:9;20020:4;20016:20;20012:1;20001:9;19997:17;19990:47;20054:131;20180:4;20054:131;:::i;:::-;20046:139;;19773:419;;;:::o;20198:410::-;20238:7;20261:20;20279:1;20261:20;:::i;:::-;20256:25;;20295:20;20313:1;20295:20;:::i;:::-;20290:25;;20350:1;20347;20343:9;20372:30;20390:11;20372:30;:::i;:::-;20361:41;;20551:1;20542:7;20538:15;20535:1;20532:22;20512:1;20505:9;20485:83;20462:139;;20581:18;;:::i;:::-;20462:139;20246:362;20198:410;;;;:::o;20614:180::-;20662:77;20659:1;20652:88;20759:4;20756:1;20749:15;20783:4;20780:1;20773:15;20800:185;20840:1;20857:20;20875:1;20857:20;:::i;:::-;20852:25;;20891:20;20909:1;20891:20;:::i;:::-;20886:25;;20930:1;20920:35;;20935:18;;:::i;:::-;20920:35;20977:1;20974;20970:9;20965:14;;20800:185;;;;:::o;20991:247::-;21131:34;21127:1;21119:6;21115:14;21108:58;21200:30;21195:2;21187:6;21183:15;21176:55;20991:247;:::o;21244:366::-;21386:3;21407:67;21471:2;21466:3;21407:67;:::i;:::-;21400:74;;21483:93;21572:3;21483:93;:::i;:::-;21601:2;21596:3;21592:12;21585:19;;21244:366;;;:::o;21616:419::-;21782:4;21820:2;21809:9;21805:18;21797:26;;21869:9;21863:4;21859:20;21855:1;21844:9;21840:17;21833:47;21897:131;22023:4;21897:131;:::i;:::-;21889:139;;21616:419;;;:::o;22041:246::-;22181:34;22177:1;22169:6;22165:14;22158:58;22250:29;22245:2;22237:6;22233:15;22226:54;22041:246;:::o;22293:366::-;22435:3;22456:67;22520:2;22515:3;22456:67;:::i;:::-;22449:74;;22532:93;22621:3;22532:93;:::i;:::-;22650:2;22645:3;22641:12;22634:19;;22293:366;;;:::o;22665:419::-;22831:4;22869:2;22858:9;22854:18;22846:26;;22918:9;22912:4;22908:20;22904:1;22893:9;22889:17;22882:47;22946:131;23072:4;22946:131;:::i;:::-;22938:139;;22665:419;;;:::o;23090:227::-;23230:34;23226:1;23218:6;23214:14;23207:58;23299:10;23294:2;23286:6;23282:15;23275:35;23090:227;:::o;23323:366::-;23465:3;23486:67;23550:2;23545:3;23486:67;:::i;:::-;23479:74;;23562:93;23651:3;23562:93;:::i;:::-;23680:2;23675:3;23671:12;23664:19;;23323:366;;;:::o;23695:419::-;23861:4;23899:2;23888:9;23884:18;23876:26;;23948:9;23942:4;23938:20;23934:1;23923:9;23919:17;23912:47;23976:131;24102:4;23976:131;:::i;:::-;23968:139;;23695:419;;;:::o;24120:230::-;24260:34;24256:1;24248:6;24244:14;24237:58;24329:13;24324:2;24316:6;24312:15;24305:38;24120:230;:::o;24356:366::-;24498:3;24519:67;24583:2;24578:3;24519:67;:::i;:::-;24512:74;;24595:93;24684:3;24595:93;:::i;:::-;24713:2;24708:3;24704:12;24697:19;;24356:366;;;:::o;24728:419::-;24894:4;24932:2;24921:9;24917:18;24909:26;;24981:9;24975:4;24971:20;24967:1;24956:9;24952:17;24945:47;25009:131;25135:4;25009:131;:::i;:::-;25001:139;;24728:419;;;:::o;25153:147::-;25254:11;25291:3;25276:18;;25153:147;;;;:::o;25306:114::-;;:::o;25426:398::-;25585:3;25606:83;25687:1;25682:3;25606:83;:::i;:::-;25599:90;;25698:93;25787:3;25698:93;:::i;:::-;25816:1;25811:3;25807:11;25800:18;;25426:398;;;:::o;25830:379::-;26014:3;26036:147;26179:3;26036:147;:::i;:::-;26029:154;;26200:3;26193:10;;25830:379;;;:::o;26215:351::-;26285:6;26334:2;26322:9;26313:7;26309:23;26305:32;26302:119;;;26340:79;;:::i;:::-;26302:119;26460:1;26485:64;26541:7;26532:6;26521:9;26517:22;26485:64;:::i;:::-;26475:74;;26431:128;26215:351;;;;:::o;26572:159::-;26712:11;26708:1;26700:6;26696:14;26689:35;26572:159;:::o;26737:365::-;26879:3;26900:66;26964:1;26959:3;26900:66;:::i;:::-;26893:73;;26975:93;27064:3;26975:93;:::i;:::-;27093:2;27088:3;27084:12;27077:19;;26737:365;;;:::o;27108:419::-;27274:4;27312:2;27301:9;27297:18;27289:26;;27361:9;27355:4;27351:20;27347:1;27336:9;27332:17;27325:47;27389:131;27515:4;27389:131;:::i;:::-;27381:139;;27108:419;;;:::o;27533:225::-;27673:34;27669:1;27661:6;27657:14;27650:58;27742:8;27737:2;27729:6;27725:15;27718:33;27533:225;:::o;27764:366::-;27906:3;27927:67;27991:2;27986:3;27927:67;:::i;:::-;27920:74;;28003:93;28092:3;28003:93;:::i;:::-;28121:2;28116:3;28112:12;28105:19;;27764:366;;;:::o;28136:419::-;28302:4;28340:2;28329:9;28325:18;28317:26;;28389:9;28383:4;28379:20;28375:1;28364:9;28360:17;28353:47;28417:131;28543:4;28417:131;:::i;:::-;28409:139;;28136:419;;;:::o;28561:223::-;28701:34;28697:1;28689:6;28685:14;28678:58;28770:6;28765:2;28757:6;28753:15;28746:31;28561:223;:::o;28790:366::-;28932:3;28953:67;29017:2;29012:3;28953:67;:::i;:::-;28946:74;;29029:93;29118:3;29029:93;:::i;:::-;29147:2;29142:3;29138:12;29131:19;;28790:366;;;:::o;29162:419::-;29328:4;29366:2;29355:9;29351:18;29343:26;;29415:9;29409:4;29405:20;29401:1;29390:9;29386:17;29379:47;29443:131;29569:4;29443:131;:::i;:::-;29435:139;;29162:419;;;:::o;29587:221::-;29727:34;29723:1;29715:6;29711:14;29704:58;29796:4;29791:2;29783:6;29779:15;29772:29;29587:221;:::o;29814:366::-;29956:3;29977:67;30041:2;30036:3;29977:67;:::i;:::-;29970:74;;30053:93;30142:3;30053:93;:::i;:::-;30171:2;30166:3;30162:12;30155:19;;29814:366;;;:::o;30186:419::-;30352:4;30390:2;30379:9;30375:18;30367:26;;30439:9;30433:4;30429:20;30425:1;30414:9;30410:17;30403:47;30467:131;30593:4;30467:131;:::i;:::-;30459:139;;30186:419;;;:::o;30611:182::-;30751:34;30747:1;30739:6;30735:14;30728:58;30611:182;:::o;30799:366::-;30941:3;30962:67;31026:2;31021:3;30962:67;:::i;:::-;30955:74;;31038:93;31127:3;31038:93;:::i;:::-;31156:2;31151:3;31147:12;31140:19;;30799:366;;;:::o;31171:419::-;31337:4;31375:2;31364:9;31360:18;31352:26;;31424:9;31418:4;31414:20;31410:1;31399:9;31395:17;31388:47;31452:131;31578:4;31452:131;:::i;:::-;31444:139;;31171:419;;;:::o;31596:179::-;31736:31;31732:1;31724:6;31720:14;31713:55;31596:179;:::o;31781:366::-;31923:3;31944:67;32008:2;32003:3;31944:67;:::i;:::-;31937:74;;32020:93;32109:3;32020:93;:::i;:::-;32138:2;32133:3;32129:12;32122:19;;31781:366;;;:::o;32153:419::-;32319:4;32357:2;32346:9;32342:18;32334:26;;32406:9;32400:4;32396:20;32392:1;32381:9;32377:17;32370:47;32434:131;32560:4;32434:131;:::i;:::-;32426:139;;32153:419;;;:::o;32578:224::-;32718:34;32714:1;32706:6;32702:14;32695:58;32787:7;32782:2;32774:6;32770:15;32763:32;32578:224;:::o;32808:366::-;32950:3;32971:67;33035:2;33030:3;32971:67;:::i;:::-;32964:74;;33047:93;33136:3;33047:93;:::i;:::-;33165:2;33160:3;33156:12;33149:19;;32808:366;;;:::o;33180:419::-;33346:4;33384:2;33373:9;33369:18;33361:26;;33433:9;33427:4;33423:20;33419:1;33408:9;33404:17;33397:47;33461:131;33587:4;33461:131;:::i;:::-;33453:139;;33180:419;;;:::o;33605:222::-;33745:34;33741:1;33733:6;33729:14;33722:58;33814:5;33809:2;33801:6;33797:15;33790:30;33605:222;:::o;33833:366::-;33975:3;33996:67;34060:2;34055:3;33996:67;:::i;:::-;33989:74;;34072:93;34161:3;34072:93;:::i;:::-;34190:2;34185:3;34181:12;34174:19;;33833:366;;;:::o;34205:419::-;34371:4;34409:2;34398:9;34394:18;34386:26;;34458:9;34452:4;34448:20;34444:1;34433:9;34429:17;34422:47;34486:131;34612:4;34486:131;:::i;:::-;34478:139;;34205:419;;;:::o;34630:179::-;34770:31;34766:1;34758:6;34754:14;34747:55;34630:179;:::o;34815:366::-;34957:3;34978:67;35042:2;35037:3;34978:67;:::i;:::-;34971:74;;35054:93;35143:3;35054:93;:::i;:::-;35172:2;35167:3;35163:12;35156:19;;34815:366;;;:::o;35187:419::-;35353:4;35391:2;35380:9;35376:18;35368:26;;35440:9;35434:4;35430:20;35426:1;35415:9;35411:17;35404:47;35468:131;35594:4;35468:131;:::i;:::-;35460:139;;35187:419;;;:::o;35612:241::-;35752:34;35748:1;35740:6;35736:14;35729:58;35821:24;35816:2;35808:6;35804:15;35797:49;35612:241;:::o;35859:366::-;36001:3;36022:67;36086:2;36081:3;36022:67;:::i;:::-;36015:74;;36098:93;36187:3;36098:93;:::i;:::-;36216:2;36211:3;36207:12;36200:19;;35859:366;;;:::o;36231:419::-;36397:4;36435:2;36424:9;36420:18;36412:26;;36484:9;36478:4;36474:20;36470:1;36459:9;36455:17;36448:47;36512:131;36638:4;36512:131;:::i;:::-;36504:139;;36231:419;;;:::o;36656:176::-;36796:28;36792:1;36784:6;36780:14;36773:52;36656:176;:::o;36838:366::-;36980:3;37001:67;37065:2;37060:3;37001:67;:::i;:::-;36994:74;;37077:93;37166:3;37077:93;:::i;:::-;37195:2;37190:3;37186:12;37179:19;;36838:366;;;:::o;37210:419::-;37376:4;37414:2;37403:9;37399:18;37391:26;;37463:9;37457:4;37453:20;37449:1;37438:9;37434:17;37427:47;37491:131;37617:4;37491:131;:::i;:::-;37483:139;;37210:419;;;:::o;37635:242::-;37775:34;37771:1;37763:6;37759:14;37752:58;37844:25;37839:2;37831:6;37827:15;37820:50;37635:242;:::o;37883:366::-;38025:3;38046:67;38110:2;38105:3;38046:67;:::i;:::-;38039:74;;38122:93;38211:3;38122:93;:::i;:::-;38240:2;38235:3;38231:12;38224:19;;37883:366;;;:::o;38255:419::-;38421:4;38459:2;38448:9;38444:18;38436:26;;38508:9;38502:4;38498:20;38494:1;38483:9;38479:17;38472:47;38536:131;38662:4;38536:131;:::i;:::-;38528:139;;38255:419;;;:::o;38680:194::-;38720:4;38740:20;38758:1;38740:20;:::i;:::-;38735:25;;38774:20;38792:1;38774:20;:::i;:::-;38769:25;;38818:1;38815;38811:9;38803:17;;38842:1;38836:4;38833:11;38830:37;;;38847:18;;:::i;:::-;38830:37;38680:194;;;;:::o;38880:220::-;39020:34;39016:1;39008:6;39004:14;38997:58;39089:3;39084:2;39076:6;39072:15;39065:28;38880:220;:::o;39106:366::-;39248:3;39269:67;39333:2;39328:3;39269:67;:::i;:::-;39262:74;;39345:93;39434:3;39345:93;:::i;:::-;39463:2;39458:3;39454:12;39447:19;;39106:366;;;:::o;39478:419::-;39644:4;39682:2;39671:9;39667:18;39659:26;;39731:9;39725:4;39721:20;39717:1;39706:9;39702:17;39695:47;39759:131;39885:4;39759:131;:::i;:::-;39751:139;;39478:419;;;:::o;39903:221::-;40043:34;40039:1;40031:6;40027:14;40020:58;40112:4;40107:2;40099:6;40095:15;40088:29;39903:221;:::o;40130:366::-;40272:3;40293:67;40357:2;40352:3;40293:67;:::i;:::-;40286:74;;40369:93;40458:3;40369:93;:::i;:::-;40487:2;40482:3;40478:12;40471:19;;40130:366;;;:::o;40502:419::-;40668:4;40706:2;40695:9;40691:18;40683:26;;40755:9;40749:4;40745:20;40741:1;40730:9;40726:17;40719:47;40783:131;40909:4;40783:131;:::i;:::-;40775:139;;40502:419;;;:::o;40927:225::-;41067:34;41063:1;41055:6;41051:14;41044:58;41136:8;41131:2;41123:6;41119:15;41112:33;40927:225;:::o;41158:366::-;41300:3;41321:67;41385:2;41380:3;41321:67;:::i;:::-;41314:74;;41397:93;41486:3;41397:93;:::i;:::-;41515:2;41510:3;41506:12;41499:19;;41158:366;;;:::o;41530:419::-;41696:4;41734:2;41723:9;41719:18;41711:26;;41783:9;41777:4;41773:20;41769:1;41758:9;41754:17;41747:47;41811:131;41937:4;41811:131;:::i;:::-;41803:139;;41530:419;;;:::o;41955:442::-;42104:4;42142:2;42131:9;42127:18;42119:26;;42155:71;42223:1;42212:9;42208:17;42199:6;42155:71;:::i;:::-;42236:72;42304:2;42293:9;42289:18;42280:6;42236:72;:::i;:::-;42318;42386:2;42375:9;42371:18;42362:6;42318:72;:::i;:::-;41955:442;;;;;;:::o;42403:180::-;42451:77;42448:1;42441:88;42548:4;42545:1;42538:15;42572:4;42569:1;42562:15;42589:114;42656:6;42690:5;42684:12;42674:22;;42589:114;;;:::o;42709:184::-;42808:11;42842:6;42837:3;42830:19;42882:4;42877:3;42873:14;42858:29;;42709:184;;;;:::o;42899:132::-;42966:4;42989:3;42981:11;;43019:4;43014:3;43010:14;43002:22;;42899:132;;;:::o;43037:108::-;43114:24;43132:5;43114:24;:::i;:::-;43109:3;43102:37;43037:108;;:::o;43151:179::-;43220:10;43241:46;43283:3;43275:6;43241:46;:::i;:::-;43319:4;43314:3;43310:14;43296:28;;43151:179;;;;:::o;43336:113::-;43406:4;43438;43433:3;43429:14;43421:22;;43336:113;;;:::o;43485:732::-;43604:3;43633:54;43681:5;43633:54;:::i;:::-;43703:86;43782:6;43777:3;43703:86;:::i;:::-;43696:93;;43813:56;43863:5;43813:56;:::i;:::-;43892:7;43923:1;43908:284;43933:6;43930:1;43927:13;43908:284;;;44009:6;44003:13;44036:63;44095:3;44080:13;44036:63;:::i;:::-;44029:70;;44122:60;44175:6;44122:60;:::i;:::-;44112:70;;43968:224;43955:1;43952;43948:9;43943:14;;43908:284;;;43912:14;44208:3;44201:10;;43609:608;;;43485:732;;;;:::o;44223:831::-;44486:4;44524:3;44513:9;44509:19;44501:27;;44538:71;44606:1;44595:9;44591:17;44582:6;44538:71;:::i;:::-;44619:80;44695:2;44684:9;44680:18;44671:6;44619:80;:::i;:::-;44746:9;44740:4;44736:20;44731:2;44720:9;44716:18;44709:48;44774:108;44877:4;44868:6;44774:108;:::i;:::-;44766:116;;44892:72;44960:2;44949:9;44945:18;44936:6;44892:72;:::i;:::-;44974:73;45042:3;45031:9;45027:19;45018:6;44974:73;:::i;:::-;44223:831;;;;;;;;:::o

Swarm Source

ipfs://560261d15f56c706ac34c61c935ab9280bfcfc8804c84725cdaf4c8c9f41b696
[ 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.