ETH Price: $2,877.34 (-9.11%)
Gas: 16 Gwei

Token

Cureum (CURE)
 

Overview

Max Total Supply

1,000,000,000 CURE

Holders

201

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
iape1000xonly.eth
Balance
0.044588908480106772 CURE

Value
$0.00
0xDDa86438DCA987a42c1ffCcCc8a54F1Cf240Dd11
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:
CURE

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**
 * SPDX-License-Identifier: MIT
 */
pragma solidity >=0.8.19;

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

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

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

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

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

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

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

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

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

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `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 {}
}

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

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

    // Swapback
    bool private swapping;
    bool public swapEnabled = false;
    uint256 public swapTokensAtAmount;
    uint256 public maxTokensForSwapback;

    //Anti-whale
    bool public limitsInEffect = true;
    bool public transferDelayEnabled = true;
    uint256 public maxWallet;
    uint256 public maxTransactionAmount;
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch

    // Fee receivers
    address public lpWallet;
    address public marketingWallet;
    address public productsWallet;


    bool public tradingActive = false;

    uint256 public totalFeesBuy;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyProductsFee;

    uint256 public totalFeesSell;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellProductsFee;

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForProducts;

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

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

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

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

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

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

    constructor() ERC20("Cureum", "CURE") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

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

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

        uint256 _buyMarketingFee = 22;
        uint256 _buyLiquidityFee = 1;
        uint256 _buyProductsFee = 2;

        uint256 _sellMarketingFee = 22;
        uint256 _sellLiquidityFee = 1;
        uint256 _sellProductsFee = 2;

        uint256 totalSupply = 1000000000 * 1e18;

        maxTransactionAmount = (totalSupply * 15) / 1000; // 1.5% of total supply
        maxWallet = (totalSupply * 25) / 1000; // 2.5% of total supply

        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swapback trigger
        maxTokensForSwapback = (totalSupply * 2) / 100; // 2% max swapback

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyProductsFee = _buyProductsFee;
        totalFeesBuy = buyMarketingFee + buyLiquidityFee + buyProductsFee;

        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellProductsFee = _sellProductsFee;
        totalFeesSell = sellMarketingFee + sellLiquidityFee + sellProductsFee;

        marketingWallet = address(msg.sender); 
        productsWallet = address(msg.sender);
        lpWallet = msg.sender;

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

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        excludeFromMaxTransaction(marketingWallet, 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 {}

    /// @dev Launches the token and enables trading. Irriversable.
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }

    /// @dev Removes the max wallet and max transaction limits
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    /// @dev Disables the Same wallet block transfer delay
    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }

    /// @dev Changes the minimum balance of tokens the contract must have before swapping tokens for ETH. Base 100000, so 0.5% = 500.
    function updateSwapTokensAtAmount(uint256 newMin, uint256 newMax)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newMin >= 1,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newMin <= 500,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        require(
            newMin <= newMax,
            "Swap amount cannot be higher than maxTokensForSwapback"
        );
        swapTokensAtAmount = newMin * totalSupply()/ 100000;
        maxTokensForSwapback = newMax * totalSupply()/ 100000;
        return true;
    }

    /// @dev Changes the maximum amount of tokens that can be bought or sold in a single transaction
    /// @param newNum Base 1000, so 1% = 10
    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= 2,
            "Cannot set maxTransactionAmount lower than 0.2%"
        );
        maxTransactionAmount = newNum * (10**18);
    }

    /// @dev Changes the maximum amount of tokens a wallet can hold
    /// @param newNum Base 1000, so 1% = 10
    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= 5,
            "Cannot set maxWallet lower than 0.5%"
        );
        maxWallet = newNum * totalSupply()/1000;
    }


    /// @dev Sets if a wallet is excluded from the max wallet and tx limits
    /// @param updAds The wallet to update
    /// @param isEx If the wallet is excluded or not
    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isTxLimitExempt[updAds] = isEx;
    }

    /// @dev Sets if the contract can sell tokens
    /// @param enabled set to false to disable selling
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }
    
    /// @dev Sets the fees for buys
    /// @param _marketingFee The fee for the marketing wallet
    /// @param _liquidityFee The fee for the liquidity pool
    /// @param _productsFee The fee for the product wallet
    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _productsFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyProductsFee = _productsFee;
        totalFeesBuy = buyMarketingFee + buyLiquidityFee + buyProductsFee;
    }

    /// @dev Sets the fees for sells
    /// @param _marketingFee The fee for the marketing wallet
    /// @param _liquidityFee The fee for the liquidity pool
    /// @param _productsFee The fee for the product wallet
    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _productsFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellProductsFee = _productsFee;
        totalFeesSell = sellMarketingFee + sellLiquidityFee + sellProductsFee;
    }

    /// @dev Sets if a wallet is excluded from fees
    /// @param account The wallet to update
    /// @param excluded If the wallet is excluded or not
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isFeeExempt[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    /// @dev Sets an address as a new liquidity pair. You probably dont want to do this.
    /// @param pair The new pair
    function setAutomatedMarketMakerPair(address pair, bool value)
        public
        onlyOwner
    {
        require(
            pair != uniswapV2Pair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

    function updateLPWallet(address newLPWallet)
        external
        onlyOwner
    {
        lpWallet = newLPWallet;
    }

    function updateProductsWallet(address newWallet) external onlyOwner {
        emit productsWalletUpdated(newWallet, productsWallet);
        productsWallet = newWallet;
    }

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isFeeExempt[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(
                        _isFeeExempt[from] || _isFeeExempt[to],
                        "Trading is not active."
                    );
                }

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

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

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isFeeExempt[from] || _isFeeExempt[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] && totalFeesSell > 0) {
                fees = amount.mul(totalFeesSell).div(100);
                tokensForLiquidity += (fees * sellLiquidityFee) / totalFeesSell;
                tokensForProducts += (fees * sellProductsFee) / totalFeesSell;
                tokensForMarketing += (fees * sellMarketingFee) / totalFeesSell;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && totalFeesBuy > 0) {
                fees = amount.mul(totalFeesBuy).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / totalFeesBuy;
                tokensForProducts += (fees * buyProductsFee) / totalFeesBuy;
                tokensForMarketing += (fees * buyMarketingFee) / totalFeesBuy;
            }

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

            amount -= fees;
        }

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

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

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

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

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

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

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

        if (contractBalance == 0) {
            return;
        }

        if (contractBalance > maxTokensForSwapback) {
            contractBalance = maxTokensForSwapback;
        }

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

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

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

        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(
            totalTokensToSwap
        );
        uint256 ethForProducts = ethBalance.mul(tokensForProducts).div(totalTokensToSwap);

        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForProducts;

        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForProducts = 0;

        (success, ) = address(productsWallet).call{value: ethForProducts}("");

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

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

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"productsWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"buyProductsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTokensForSwapback","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"productsWallet","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":"sellProductsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForProducts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeesBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeesSell","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":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_productsFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLPWallet","type":"address"}],"name":"updateLPWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateProductsWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_productsFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMin","type":"uint256"},{"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526000600560156101000a81548160ff0219169083151502179055506001600860006101000a81548160ff0219169083151502179055506001600860016101000a81548160ff0219169083151502179055506000600e60146101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600681526020017f43757265756d00000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f43555245000000000000000000000000000000000000000000000000000000008152508160039081620000fb919062000e28565b5080600490816200010d919062000e28565b50505062000130620001246200066f60201b60201c565b6200067760201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506200015c8160016200073d60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000202919062000f79565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000290919062000f79565b6040518363ffffffff1660e01b8152600401620002af92919062000fbc565b6020604051808303816000875af1158015620002cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f5919062000f79565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200033d60a05160016200073d60201b60201c565b6200035260a05160016200082760201b60201c565b60006016905060006001905060006002905060006016905060006001905060006002905060006b033b2e3c9fd0803ce800000090506103e8600f8262000399919062001018565b620003a5919062001092565b600a819055506103e8601982620003bd919062001018565b620003c9919062001092565b600981905550612710600582620003e1919062001018565b620003ed919062001092565b600681905550606460028262000404919062001018565b62000410919062001092565b600781905550866010819055508560118190555084601281905550601254601154601054620004409190620010ca565b6200044c9190620010ca565b600f819055508360148190555082601581905550816016819055506016546015546014546200047c9190620010ca565b620004889190620010ca565b60138190555033600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200057362000565620008c860201b60201c565b6001620008f260201b60201c565b62000586306001620008f260201b60201c565b6200059b61dead6001620008f260201b60201c565b620005d0600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620008f260201b60201c565b620005f2620005e4620008c860201b60201c565b60016200073d60201b60201c565b620006053060016200073d60201b60201c565b6200061a61dead60016200073d60201b60201c565b6200064f600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200073d60201b60201c565b62000661338262000a2c60201b60201c565b505050505050505062001262565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200074d6200066f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000773620008c860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620007cc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007c39062001166565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620009026200066f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000928620008c860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000981576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009789062001166565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000a209190620011a5565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a959062001212565b60405180910390fd5b62000ab26000838362000ba460201b60201c565b806002600082825462000ac69190620010ca565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000b1d9190620010ca565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b84919062001245565b60405180910390a362000ba06000838362000ba960201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000c3057607f821691505b60208210810362000c465762000c4562000be8565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000cb07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c71565b62000cbc868362000c71565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000d0962000d0362000cfd8462000cd4565b62000cde565b62000cd4565b9050919050565b6000819050919050565b62000d258362000ce8565b62000d3d62000d348262000d10565b84845462000c7e565b825550505050565b600090565b62000d5462000d45565b62000d6181848462000d1a565b505050565b5b8181101562000d895762000d7d60008262000d4a565b60018101905062000d67565b5050565b601f82111562000dd85762000da28162000c4c565b62000dad8462000c61565b8101602085101562000dbd578190505b62000dd562000dcc8562000c61565b83018262000d66565b50505b505050565b600082821c905092915050565b600062000dfd6000198460080262000ddd565b1980831691505092915050565b600062000e18838362000dea565b9150826002028217905092915050565b62000e338262000bae565b67ffffffffffffffff81111562000e4f5762000e4e62000bb9565b5b62000e5b825462000c17565b62000e6882828562000d8d565b600060209050601f83116001811462000ea0576000841562000e8b578287015190505b62000e97858262000e0a565b86555062000f07565b601f19841662000eb08662000c4c565b60005b8281101562000eda5784890151825560018201915060208501945060208101905062000eb3565b8683101562000efa578489015162000ef6601f89168262000dea565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000f418262000f14565b9050919050565b62000f538162000f34565b811462000f5f57600080fd5b50565b60008151905062000f738162000f48565b92915050565b60006020828403121562000f925762000f9162000f0f565b5b600062000fa28482850162000f62565b91505092915050565b62000fb68162000f34565b82525050565b600060408201905062000fd3600083018562000fab565b62000fe2602083018462000fab565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620010258262000cd4565b9150620010328362000cd4565b9250828202620010428162000cd4565b915082820484148315176200105c576200105b62000fe9565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200109f8262000cd4565b9150620010ac8362000cd4565b925082620010bf57620010be62001063565b5b828204905092915050565b6000620010d78262000cd4565b9150620010e48362000cd4565b9250828201905080821115620010ff57620010fe62000fe9565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200114e60208362001105565b91506200115b8262001116565b602082019050919050565b6000602082019050818103600083015262001181816200113f565b9050919050565b60008115159050919050565b6200119f8162001188565b82525050565b6000602082019050620011bc600083018462001194565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620011fa601f8362001105565b91506200120782620011c2565b602082019050919050565b600060208201905081810360008301526200122d81620011eb565b9050919050565b6200123f8162000cd4565b82525050565b60006020820190506200125c600083018462001234565b92915050565b60805160a051615161620012c0600039600081816112cf01528181611978015261294e015260008181610e57015281816128f6015281816139c401528181613aa501528181613acc01528181613b680152613b8f01526151616000f3fe60806040526004361061037a5760003560e01c80638095d564116101d1578063c024666811610102578063e2f45605116100a0578063f63743421161006f578063f637434214610cf5578063f8b45b0514610d20578063fbc10c5514610d4b578063fd52cdd314610d7457610381565b8063e2f4560514610c4b578063e884f26014610c76578063f11a24d314610ca1578063f2fde38b14610ccc57610381565b8063c876d0b9116100dc578063c876d0b914610b8d578063c8c8ebe414610bb8578063d5433db014610be3578063dd62ed3e14610c0e57610381565b8063c024666814610b12578063c17b5b8c14610b3b578063c18bc19514610b6457610381565b8063a0c973f11161016f578063aacebbe311610149578063aacebbe314610a58578063b62496f514610a81578063b97849c114610abe578063bbc0c74214610ae757610381565b8063a0c973f1146109a1578063a457c2d7146109de578063a9059cbb14610a1b57610381565b806392136913116101ab57806392136913146108f9578063924de9b71461092457806395d89b411461094d5780639a7a23d61461097857610381565b80638095d5641461088e5780638a8c523c146108b75780638da5cb5b146108ce57610381565b806339509351116102ab57806370a08231116102495780637571336a116102235780637571336a146107e457806375f0a8741461080d57806377c18352146108385780637bce5a041461086357610381565b806370a0823114610765578063715018a6146107a2578063751039fc146107b957610381565b80634fbee193116102855780634fbee193146106a757806362cfc88b146106e45780636303516c1461070f5780636ddd17131461073a57610381565b8063395093511461061457806349bd5a5e146106515780634a62bb651461067c57610381565b80631f3fed8f1161031857806327c8f835116102f257806327c8f835146105565780632c0e22cc14610581578063313ce567146105be578063367c8581146105e957610381565b80631f3fed8f146104c5578063203e727e146104f057806323b872dd1461051957610381565b80631694505e116103545780631694505e1461041957806318160ddd1461044457806319c59e2c1461046f5780631a8145bb1461049a57610381565b806306fdde0314610386578063095ea7b3146103b15780630e47e822146103ee57610381565b3661038157005b600080fd5b34801561039257600080fd5b5061039b610d9f565b6040516103a89190613cee565b60405180910390f35b3480156103bd57600080fd5b506103d860048036038101906103d39190613da9565b610e31565b6040516103e59190613e04565b60405180910390f35b3480156103fa57600080fd5b50610403610e4f565b6040516104109190613e2e565b60405180910390f35b34801561042557600080fd5b5061042e610e55565b60405161043b9190613ea8565b60405180910390f35b34801561045057600080fd5b50610459610e79565b6040516104669190613e2e565b60405180910390f35b34801561047b57600080fd5b50610484610e83565b6040516104919190613e2e565b60405180910390f35b3480156104a657600080fd5b506104af610e89565b6040516104bc9190613e2e565b60405180910390f35b3480156104d157600080fd5b506104da610e8f565b6040516104e79190613e2e565b60405180910390f35b3480156104fc57600080fd5b5061051760048036038101906105129190613ec3565b610e95565b005b34801561052557600080fd5b50610540600480360381019061053b9190613ef0565b610f72565b60405161054d9190613e04565b60405180910390f35b34801561056257600080fd5b5061056b61106a565b6040516105789190613f52565b60405180910390f35b34801561058d57600080fd5b506105a860048036038101906105a39190613f6d565b611070565b6040516105b59190613e04565b60405180910390f35b3480156105ca57600080fd5b506105d3611212565b6040516105e09190613fc9565b60405180910390f35b3480156105f557600080fd5b506105fe61121b565b60405161060b9190613e2e565b60405180910390f35b34801561062057600080fd5b5061063b60048036038101906106369190613da9565b611221565b6040516106489190613e04565b60405180910390f35b34801561065d57600080fd5b506106666112cd565b6040516106739190613f52565b60405180910390f35b34801561068857600080fd5b506106916112f1565b60405161069e9190613e04565b60405180910390f35b3480156106b357600080fd5b506106ce60048036038101906106c99190613fe4565b611304565b6040516106db9190613e04565b60405180910390f35b3480156106f057600080fd5b506106f961135a565b6040516107069190613f52565b60405180910390f35b34801561071b57600080fd5b50610724611380565b6040516107319190613f52565b60405180910390f35b34801561074657600080fd5b5061074f6113a6565b60405161075c9190613e04565b60405180910390f35b34801561077157600080fd5b5061078c60048036038101906107879190613fe4565b6113b9565b6040516107999190613e2e565b60405180910390f35b3480156107ae57600080fd5b506107b7611401565b005b3480156107c557600080fd5b506107ce611489565b6040516107db9190613e04565b60405180910390f35b3480156107f057600080fd5b5061080b6004803603810190610806919061403d565b611529565b005b34801561081957600080fd5b50610822611600565b60405161082f9190613f52565b60405180910390f35b34801561084457600080fd5b5061084d611626565b60405161085a9190613e2e565b60405180910390f35b34801561086f57600080fd5b5061087861162c565b6040516108859190613e2e565b60405180910390f35b34801561089a57600080fd5b506108b560048036038101906108b0919061407d565b611632565b005b3480156108c357600080fd5b506108cc6116eb565b005b3480156108da57600080fd5b506108e361179f565b6040516108f09190613f52565b60405180910390f35b34801561090557600080fd5b5061090e6117c9565b60405161091b9190613e2e565b60405180910390f35b34801561093057600080fd5b5061094b600480360381019061094691906140d0565b6117cf565b005b34801561095957600080fd5b50610962611868565b60405161096f9190613cee565b60405180910390f35b34801561098457600080fd5b5061099f600480360381019061099a919061403d565b6118fa565b005b3480156109ad57600080fd5b506109c860048036038101906109c39190613fe4565b611a12565b6040516109d59190613e04565b60405180910390f35b3480156109ea57600080fd5b50610a056004803603810190610a009190613da9565b611a32565b604051610a129190613e04565b60405180910390f35b348015610a2757600080fd5b50610a426004803603810190610a3d9190613da9565b611b1d565b604051610a4f9190613e04565b60405180910390f35b348015610a6457600080fd5b50610a7f6004803603810190610a7a9190613fe4565b611b3b565b005b348015610a8d57600080fd5b50610aa86004803603810190610aa39190613fe4565b611c77565b604051610ab59190613e04565b60405180910390f35b348015610aca57600080fd5b50610ae56004803603810190610ae09190613fe4565b611c97565b005b348015610af357600080fd5b50610afc611dd3565b604051610b099190613e04565b60405180910390f35b348015610b1e57600080fd5b50610b396004803603810190610b34919061403d565b611de6565b005b348015610b4757600080fd5b50610b626004803603810190610b5d919061407d565b611f0b565b005b348015610b7057600080fd5b50610b8b6004803603810190610b869190613ec3565b611fc4565b005b348015610b9957600080fd5b50610ba26120ad565b604051610baf9190613e04565b60405180910390f35b348015610bc457600080fd5b50610bcd6120c0565b604051610bda9190613e2e565b60405180910390f35b348015610bef57600080fd5b50610bf86120c6565b604051610c059190613e2e565b60405180910390f35b348015610c1a57600080fd5b50610c356004803603810190610c3091906140fd565b6120cc565b604051610c429190613e2e565b60405180910390f35b348015610c5757600080fd5b50610c60612153565b604051610c6d9190613e2e565b60405180910390f35b348015610c8257600080fd5b50610c8b612159565b604051610c989190613e04565b60405180910390f35b348015610cad57600080fd5b50610cb66121f9565b604051610cc39190613e2e565b60405180910390f35b348015610cd857600080fd5b50610cf36004803603810190610cee9190613fe4565b6121ff565b005b348015610d0157600080fd5b50610d0a6122f6565b604051610d179190613e2e565b60405180910390f35b348015610d2c57600080fd5b50610d356122fc565b604051610d429190613e2e565b60405180910390f35b348015610d5757600080fd5b50610d726004803603810190610d6d9190613fe4565b612302565b005b348015610d8057600080fd5b50610d896123c2565b604051610d969190613e2e565b60405180910390f35b606060038054610dae9061416c565b80601f0160208091040260200160405190810160405280929190818152602001828054610dda9061416c565b8015610e275780601f10610dfc57610100808354040283529160200191610e27565b820191906000526020600020905b815481529060010190602001808311610e0a57829003601f168201915b5050505050905090565b6000610e45610e3e6123c8565b84846123d0565b6001905092915050565b60135481565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b600f5481565b60185481565b60175481565b610e9d6123c8565b73ffffffffffffffffffffffffffffffffffffffff16610ebb61179f565b73ffffffffffffffffffffffffffffffffffffffff1614610f11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f08906141e9565b60405180910390fd5b6002811015610f55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4c9061427b565b60405180910390fd5b670de0b6b3a764000081610f6991906142ca565b600a8190555050565b6000610f7f848484612599565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610fca6123c8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561104a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110419061437e565b60405180910390fd5b61105e856110566123c8565b8584036123d0565b60019150509392505050565b61dead81565b600061107a6123c8565b73ffffffffffffffffffffffffffffffffffffffff1661109861179f565b73ffffffffffffffffffffffffffffffffffffffff16146110ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e5906141e9565b60405180910390fd5b6001831015611132576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112990614410565b60405180910390fd5b6101f4831115611177576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116e906144a2565b60405180910390fd5b818311156111ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b190614534565b60405180910390fd5b620186a06111c6610e79565b846111d191906142ca565b6111db9190614583565b600681905550620186a06111ed610e79565b836111f891906142ca565b6112029190614583565b6007819055506001905092915050565b60006012905090565b60125481565b60006112c361122e6123c8565b84846001600061123c6123c8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112be91906145b4565b6123d0565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600860009054906101000a900460ff1681565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560159054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114096123c8565b73ffffffffffffffffffffffffffffffffffffffff1661142761179f565b73ffffffffffffffffffffffffffffffffffffffff161461147d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611474906141e9565b60405180910390fd5b6114876000613230565b565b60006114936123c8565b73ffffffffffffffffffffffffffffffffffffffff166114b161179f565b73ffffffffffffffffffffffffffffffffffffffff1614611507576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fe906141e9565b60405180910390fd5b6000600860006101000a81548160ff0219169083151502179055506001905090565b6115316123c8565b73ffffffffffffffffffffffffffffffffffffffff1661154f61179f565b73ffffffffffffffffffffffffffffffffffffffff16146115a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159c906141e9565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b60105481565b61163a6123c8565b73ffffffffffffffffffffffffffffffffffffffff1661165861179f565b73ffffffffffffffffffffffffffffffffffffffff16146116ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a5906141e9565b60405180910390fd5b8260108190555081601181905550806012819055506012546011546010546116d691906145b4565b6116e091906145b4565b600f81905550505050565b6116f36123c8565b73ffffffffffffffffffffffffffffffffffffffff1661171161179f565b73ffffffffffffffffffffffffffffffffffffffff1614611767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175e906141e9565b60405180910390fd5b6001600e60146101000a81548160ff0219169083151502179055506001600560156101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60145481565b6117d76123c8565b73ffffffffffffffffffffffffffffffffffffffff166117f561179f565b73ffffffffffffffffffffffffffffffffffffffff161461184b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611842906141e9565b60405180910390fd5b80600560156101000a81548160ff02191690831515021790555050565b6060600480546118779061416c565b80601f01602080910402602001604051908101604052809291908181526020018280546118a39061416c565b80156118f05780601f106118c5576101008083540402835291602001916118f0565b820191906000526020600020905b8154815290600101906020018083116118d357829003601f168201915b5050505050905090565b6119026123c8565b73ffffffffffffffffffffffffffffffffffffffff1661192061179f565b73ffffffffffffffffffffffffffffffffffffffff1614611976576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196d906141e9565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a04576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fb9061465a565b60405180910390fd5b611a0e82826132f6565b5050565b601b6020528060005260406000206000915054906101000a900460ff1681565b60008060016000611a416123c8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611afe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af5906146ec565b60405180910390fd5b611b12611b096123c8565b858584036123d0565b600191505092915050565b6000611b31611b2a6123c8565b8484612599565b6001905092915050565b611b436123c8565b73ffffffffffffffffffffffffffffffffffffffff16611b6161179f565b73ffffffffffffffffffffffffffffffffffffffff1614611bb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bae906141e9565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c6020528060005260406000206000915054906101000a900460ff1681565b611c9f6123c8565b73ffffffffffffffffffffffffffffffffffffffff16611cbd61179f565b73ffffffffffffffffffffffffffffffffffffffff1614611d13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0a906141e9565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ffa486461dcdff36faabb21004a43dd48cd470ed93cb0bd1899208e7684da368160405160405180910390a380600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e60149054906101000a900460ff1681565b611dee6123c8565b73ffffffffffffffffffffffffffffffffffffffff16611e0c61179f565b73ffffffffffffffffffffffffffffffffffffffff1614611e62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e59906141e9565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611eff9190613e04565b60405180910390a25050565b611f136123c8565b73ffffffffffffffffffffffffffffffffffffffff16611f3161179f565b73ffffffffffffffffffffffffffffffffffffffff1614611f87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7e906141e9565b60405180910390fd5b826014819055508160158190555080601681905550601654601554601454611faf91906145b4565b611fb991906145b4565b601381905550505050565b611fcc6123c8565b73ffffffffffffffffffffffffffffffffffffffff16611fea61179f565b73ffffffffffffffffffffffffffffffffffffffff1614612040576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612037906141e9565b60405180910390fd5b6005811015612084576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207b9061477e565b60405180910390fd5b6103e861208f610e79565b8261209a91906142ca565b6120a49190614583565b60098190555050565b600860019054906101000a900460ff1681565b600a5481565b60165481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60065481565b60006121636123c8565b73ffffffffffffffffffffffffffffffffffffffff1661218161179f565b73ffffffffffffffffffffffffffffffffffffffff16146121d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ce906141e9565b60405180910390fd5b6000600860016101000a81548160ff0219169083151502179055506001905090565b60115481565b6122076123c8565b73ffffffffffffffffffffffffffffffffffffffff1661222561179f565b73ffffffffffffffffffffffffffffffffffffffff161461227b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612272906141e9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036122ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e190614810565b60405180910390fd5b6122f381613230565b50565b60155481565b60095481565b61230a6123c8565b73ffffffffffffffffffffffffffffffffffffffff1661232861179f565b73ffffffffffffffffffffffffffffffffffffffff161461237e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612375906141e9565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60195481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361243f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612436906148a2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a590614934565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161258c9190613e2e565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612608576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ff906149c6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612677576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266e90614a58565b60405180910390fd5b600081036126905761268b83836000613397565b61322b565b600860009054906101000a900460ff1615612d53576126ad61179f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561271b57506126eb61179f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127545750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561278e575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127a75750600560149054906101000a900460ff16155b15612d5257600e60149054906101000a900460ff166128a157601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128615750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6128a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289790614ac4565b60405180910390fd5b5b600860019054906101000a900460ff1615612a69576128be61179f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561294557507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561299d57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612a685743600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612a23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1a90614b7c565b60405180910390fd5b43600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612b0c5750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612bb357600a54811115612b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4d90614c0e565b60405180910390fd5b600954612b62836113b9565b82612b6d91906145b4565b1115612bae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ba590614c7a565b60405180910390fd5b612d51565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c565750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ca557600a54811115612ca0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9790614d0c565b60405180910390fd5b612d50565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612d4f57600954612d02836113b9565b82612d0d91906145b4565b1115612d4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4590614c7a565b60405180910390fd5b5b5b5b5b5b6000612d5e306113b9565b905060006006548210159050808015612d835750600560159054906101000a900460ff165b8015612d9c5750600560149054906101000a900460ff16155b8015612df25750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e485750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e9e5750601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ee2576001600560146101000a81548160ff021916908315150217905550612ec6613616565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f985750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612fa257600090505b6000811561321b57601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561300557506000601354115b156130d2576130326064613024601354886138d990919063ffffffff16565b6138ef90919063ffffffff16565b90506013546015548261304591906142ca565b61304f9190614583565b6018600082825461306091906145b4565b925050819055506013546016548261307891906142ca565b6130829190614583565b6019600082825461309391906145b4565b92505081905550601354601454826130ab91906142ca565b6130b59190614583565b601760008282546130c691906145b4565b925050819055506131f7565b601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561312d57506000600f54115b156131f65761315a606461314c600f54886138d990919063ffffffff16565b6138ef90919063ffffffff16565b9050600f546011548261316d91906142ca565b6131779190614583565b6018600082825461318891906145b4565b92505081905550600f54601254826131a091906142ca565b6131aa9190614583565b601960008282546131bb91906145b4565b92505081905550600f54601054826131d391906142ca565b6131dd9190614583565b601760008282546131ee91906145b4565b925050819055505b5b600081111561320c5761320b873083613397565b5b80856132189190614d2c565b94505b613226878787613397565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613406576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133fd906149c6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161346c90614a58565b60405180910390fd5b613480838383613905565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613506576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134fd90614dd2565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461359991906145b4565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516135fd9190613e2e565b60405180910390a361361084848461390a565b50505050565b6000613621306113b9565b9050600060195460175460185461363891906145b4565b61364291906145b4565b90506000808303613655575050506138d7565b6007548311156136655760075492505b60006002836018548661367891906142ca565b6136829190614583565b61368c9190614583565b905060006136a3828661390f90919063ffffffff16565b905060004790506136b382613925565b60006136c8824761390f90919063ffffffff16565b905060006136f3876136e5601754856138d990919063ffffffff16565b6138ef90919063ffffffff16565b9050600061371e88613710601954866138d990919063ffffffff16565b6138ef90919063ffffffff16565b9050600081838561372f9190614d2c565b6137399190614d2c565b9050600060188190555060006017819055506000601981905550600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161379990614e23565b60006040518083038185875af1925050503d80600081146137d6576040519150601f19603f3d011682016040523d82523d6000602084013e6137db565b606091505b5050809850506000871180156137f15750600081115b1561383e576138008782613b62565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868260185460405161383593929190614e38565b60405180910390a15b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161388490614e23565b60006040518083038185875af1925050503d80600081146138c1576040519150601f19603f3d011682016040523d82523d6000602084013e6138c6565b606091505b505080985050505050505050505050505b565b600081836138e791906142ca565b905092915050565b600081836138fd9190614583565b905092915050565b505050565b505050565b6000818361391d9190614d2c565b905092915050565b6000600267ffffffffffffffff81111561394257613941614e6f565b5b6040519080825280602002602001820160405280156139705781602001602082028036833780820191505090505b509050308160008151811061398857613987614e9e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a519190614ee2565b81600181518110613a6557613a64614e9e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613aca307f0000000000000000000000000000000000000000000000000000000000000000846123d0565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613b2c959493929190615008565b600060405180830381600087803b158015613b4657600080fd5b505af1158015613b5a573d6000803e3d6000fd5b505050505050565b613b8d307f0000000000000000000000000000000000000000000000000000000000000000846123d0565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613c1496959493929190615062565b60606040518083038185885af1158015613c32573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613c5791906150d8565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613c98578082015181840152602081019050613c7d565b60008484015250505050565b6000601f19601f8301169050919050565b6000613cc082613c5e565b613cca8185613c69565b9350613cda818560208601613c7a565b613ce381613ca4565b840191505092915050565b60006020820190508181036000830152613d088184613cb5565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613d4082613d15565b9050919050565b613d5081613d35565b8114613d5b57600080fd5b50565b600081359050613d6d81613d47565b92915050565b6000819050919050565b613d8681613d73565b8114613d9157600080fd5b50565b600081359050613da381613d7d565b92915050565b60008060408385031215613dc057613dbf613d10565b5b6000613dce85828601613d5e565b9250506020613ddf85828601613d94565b9150509250929050565b60008115159050919050565b613dfe81613de9565b82525050565b6000602082019050613e196000830184613df5565b92915050565b613e2881613d73565b82525050565b6000602082019050613e436000830184613e1f565b92915050565b6000819050919050565b6000613e6e613e69613e6484613d15565b613e49565b613d15565b9050919050565b6000613e8082613e53565b9050919050565b6000613e9282613e75565b9050919050565b613ea281613e87565b82525050565b6000602082019050613ebd6000830184613e99565b92915050565b600060208284031215613ed957613ed8613d10565b5b6000613ee784828501613d94565b91505092915050565b600080600060608486031215613f0957613f08613d10565b5b6000613f1786828701613d5e565b9350506020613f2886828701613d5e565b9250506040613f3986828701613d94565b9150509250925092565b613f4c81613d35565b82525050565b6000602082019050613f676000830184613f43565b92915050565b60008060408385031215613f8457613f83613d10565b5b6000613f9285828601613d94565b9250506020613fa385828601613d94565b9150509250929050565b600060ff82169050919050565b613fc381613fad565b82525050565b6000602082019050613fde6000830184613fba565b92915050565b600060208284031215613ffa57613ff9613d10565b5b600061400884828501613d5e565b91505092915050565b61401a81613de9565b811461402557600080fd5b50565b60008135905061403781614011565b92915050565b6000806040838503121561405457614053613d10565b5b600061406285828601613d5e565b925050602061407385828601614028565b9150509250929050565b60008060006060848603121561409657614095613d10565b5b60006140a486828701613d94565b93505060206140b586828701613d94565b92505060406140c686828701613d94565b9150509250925092565b6000602082840312156140e6576140e5613d10565b5b60006140f484828501614028565b91505092915050565b6000806040838503121561411457614113613d10565b5b600061412285828601613d5e565b925050602061413385828601613d5e565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061418457607f821691505b6020821081036141975761419661413d565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006141d3602083613c69565b91506141de8261419d565b602082019050919050565b60006020820190508181036000830152614202816141c6565b9050919050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e32250000000000000000000000000000000000602082015250565b6000614265602f83613c69565b915061427082614209565b604082019050919050565b6000602082019050818103600083015261429481614258565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006142d582613d73565b91506142e083613d73565b92508282026142ee81613d73565b915082820484148315176143055761430461429b565b5b5092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614368602883613c69565b91506143738261430c565b604082019050919050565b600060208201905081810360008301526143978161435b565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006143fa603583613c69565b91506144058261439e565b604082019050919050565b60006020820190508181036000830152614429816143ed565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061448c603483613c69565b915061449782614430565b604082019050919050565b600060208201905081810360008301526144bb8161447f565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e206d6178546f6b656e73466f72537761706261636b00000000000000000000602082015250565b600061451e603683613c69565b9150614529826144c2565b604082019050919050565b6000602082019050818103600083015261454d81614511565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061458e82613d73565b915061459983613d73565b9250826145a9576145a8614554565b5b828204905092915050565b60006145bf82613d73565b91506145ca83613d73565b92508282019050808211156145e2576145e161429b565b5b92915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614644603983613c69565b915061464f826145e8565b604082019050919050565b6000602082019050818103600083015261467381614637565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006146d6602583613c69565b91506146e18261467a565b604082019050919050565b60006020820190508181036000830152614705816146c9565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614768602483613c69565b91506147738261470c565b604082019050919050565b600060208201905081810360008301526147978161475b565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006147fa602683613c69565b91506148058261479e565b604082019050919050565b60006020820190508181036000830152614829816147ed565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061488c602483613c69565b915061489782614830565b604082019050919050565b600060208201905081810360008301526148bb8161487f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061491e602283613c69565b9150614929826148c2565b604082019050919050565b6000602082019050818103600083015261494d81614911565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006149b0602583613c69565b91506149bb82614954565b604082019050919050565b600060208201905081810360008301526149df816149a3565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614a42602383613c69565b9150614a4d826149e6565b604082019050919050565b60006020820190508181036000830152614a7181614a35565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614aae601683613c69565b9150614ab982614a78565b602082019050919050565b60006020820190508181036000830152614add81614aa1565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614b66604983613c69565b9150614b7182614ae4565b606082019050919050565b60006020820190508181036000830152614b9581614b59565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614bf8603583613c69565b9150614c0382614b9c565b604082019050919050565b60006020820190508181036000830152614c2781614beb565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614c64601383613c69565b9150614c6f82614c2e565b602082019050919050565b60006020820190508181036000830152614c9381614c57565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614cf6603683613c69565b9150614d0182614c9a565b604082019050919050565b60006020820190508181036000830152614d2581614ce9565b9050919050565b6000614d3782613d73565b9150614d4283613d73565b9250828203905081811115614d5a57614d5961429b565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614dbc602683613c69565b9150614dc782614d60565b604082019050919050565b60006020820190508181036000830152614deb81614daf565b9050919050565b600081905092915050565b50565b6000614e0d600083614df2565b9150614e1882614dfd565b600082019050919050565b6000614e2e82614e00565b9150819050919050565b6000606082019050614e4d6000830186613e1f565b614e5a6020830185613e1f565b614e676040830184613e1f565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614edc81613d47565b92915050565b600060208284031215614ef857614ef7613d10565b5b6000614f0684828501614ecd565b91505092915050565b6000819050919050565b6000614f34614f2f614f2a84614f0f565b613e49565b613d73565b9050919050565b614f4481614f19565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614f7f81613d35565b82525050565b6000614f918383614f76565b60208301905092915050565b6000602082019050919050565b6000614fb582614f4a565b614fbf8185614f55565b9350614fca83614f66565b8060005b83811015614ffb578151614fe28882614f85565b9750614fed83614f9d565b925050600181019050614fce565b5085935050505092915050565b600060a08201905061501d6000830188613e1f565b61502a6020830187614f3b565b818103604083015261503c8186614faa565b905061504b6060830185613f43565b6150586080830184613e1f565b9695505050505050565b600060c0820190506150776000830189613f43565b6150846020830188613e1f565b6150916040830187614f3b565b61509e6060830186614f3b565b6150ab6080830185613f43565b6150b860a0830184613e1f565b979650505050505050565b6000815190506150d281613d7d565b92915050565b6000806000606084860312156150f1576150f0613d10565b5b60006150ff868287016150c3565b9350506020615110868287016150c3565b9250506040615121868287016150c3565b915050925092509256fea264697066735822122072ba41777597b8a6d9a118b2442fe3efe49ca392c872910ae868b94f66baa8ea64736f6c63430008130033

Deployed Bytecode

0x60806040526004361061037a5760003560e01c80638095d564116101d1578063c024666811610102578063e2f45605116100a0578063f63743421161006f578063f637434214610cf5578063f8b45b0514610d20578063fbc10c5514610d4b578063fd52cdd314610d7457610381565b8063e2f4560514610c4b578063e884f26014610c76578063f11a24d314610ca1578063f2fde38b14610ccc57610381565b8063c876d0b9116100dc578063c876d0b914610b8d578063c8c8ebe414610bb8578063d5433db014610be3578063dd62ed3e14610c0e57610381565b8063c024666814610b12578063c17b5b8c14610b3b578063c18bc19514610b6457610381565b8063a0c973f11161016f578063aacebbe311610149578063aacebbe314610a58578063b62496f514610a81578063b97849c114610abe578063bbc0c74214610ae757610381565b8063a0c973f1146109a1578063a457c2d7146109de578063a9059cbb14610a1b57610381565b806392136913116101ab57806392136913146108f9578063924de9b71461092457806395d89b411461094d5780639a7a23d61461097857610381565b80638095d5641461088e5780638a8c523c146108b75780638da5cb5b146108ce57610381565b806339509351116102ab57806370a08231116102495780637571336a116102235780637571336a146107e457806375f0a8741461080d57806377c18352146108385780637bce5a041461086357610381565b806370a0823114610765578063715018a6146107a2578063751039fc146107b957610381565b80634fbee193116102855780634fbee193146106a757806362cfc88b146106e45780636303516c1461070f5780636ddd17131461073a57610381565b8063395093511461061457806349bd5a5e146106515780634a62bb651461067c57610381565b80631f3fed8f1161031857806327c8f835116102f257806327c8f835146105565780632c0e22cc14610581578063313ce567146105be578063367c8581146105e957610381565b80631f3fed8f146104c5578063203e727e146104f057806323b872dd1461051957610381565b80631694505e116103545780631694505e1461041957806318160ddd1461044457806319c59e2c1461046f5780631a8145bb1461049a57610381565b806306fdde0314610386578063095ea7b3146103b15780630e47e822146103ee57610381565b3661038157005b600080fd5b34801561039257600080fd5b5061039b610d9f565b6040516103a89190613cee565b60405180910390f35b3480156103bd57600080fd5b506103d860048036038101906103d39190613da9565b610e31565b6040516103e59190613e04565b60405180910390f35b3480156103fa57600080fd5b50610403610e4f565b6040516104109190613e2e565b60405180910390f35b34801561042557600080fd5b5061042e610e55565b60405161043b9190613ea8565b60405180910390f35b34801561045057600080fd5b50610459610e79565b6040516104669190613e2e565b60405180910390f35b34801561047b57600080fd5b50610484610e83565b6040516104919190613e2e565b60405180910390f35b3480156104a657600080fd5b506104af610e89565b6040516104bc9190613e2e565b60405180910390f35b3480156104d157600080fd5b506104da610e8f565b6040516104e79190613e2e565b60405180910390f35b3480156104fc57600080fd5b5061051760048036038101906105129190613ec3565b610e95565b005b34801561052557600080fd5b50610540600480360381019061053b9190613ef0565b610f72565b60405161054d9190613e04565b60405180910390f35b34801561056257600080fd5b5061056b61106a565b6040516105789190613f52565b60405180910390f35b34801561058d57600080fd5b506105a860048036038101906105a39190613f6d565b611070565b6040516105b59190613e04565b60405180910390f35b3480156105ca57600080fd5b506105d3611212565b6040516105e09190613fc9565b60405180910390f35b3480156105f557600080fd5b506105fe61121b565b60405161060b9190613e2e565b60405180910390f35b34801561062057600080fd5b5061063b60048036038101906106369190613da9565b611221565b6040516106489190613e04565b60405180910390f35b34801561065d57600080fd5b506106666112cd565b6040516106739190613f52565b60405180910390f35b34801561068857600080fd5b506106916112f1565b60405161069e9190613e04565b60405180910390f35b3480156106b357600080fd5b506106ce60048036038101906106c99190613fe4565b611304565b6040516106db9190613e04565b60405180910390f35b3480156106f057600080fd5b506106f961135a565b6040516107069190613f52565b60405180910390f35b34801561071b57600080fd5b50610724611380565b6040516107319190613f52565b60405180910390f35b34801561074657600080fd5b5061074f6113a6565b60405161075c9190613e04565b60405180910390f35b34801561077157600080fd5b5061078c60048036038101906107879190613fe4565b6113b9565b6040516107999190613e2e565b60405180910390f35b3480156107ae57600080fd5b506107b7611401565b005b3480156107c557600080fd5b506107ce611489565b6040516107db9190613e04565b60405180910390f35b3480156107f057600080fd5b5061080b6004803603810190610806919061403d565b611529565b005b34801561081957600080fd5b50610822611600565b60405161082f9190613f52565b60405180910390f35b34801561084457600080fd5b5061084d611626565b60405161085a9190613e2e565b60405180910390f35b34801561086f57600080fd5b5061087861162c565b6040516108859190613e2e565b60405180910390f35b34801561089a57600080fd5b506108b560048036038101906108b0919061407d565b611632565b005b3480156108c357600080fd5b506108cc6116eb565b005b3480156108da57600080fd5b506108e361179f565b6040516108f09190613f52565b60405180910390f35b34801561090557600080fd5b5061090e6117c9565b60405161091b9190613e2e565b60405180910390f35b34801561093057600080fd5b5061094b600480360381019061094691906140d0565b6117cf565b005b34801561095957600080fd5b50610962611868565b60405161096f9190613cee565b60405180910390f35b34801561098457600080fd5b5061099f600480360381019061099a919061403d565b6118fa565b005b3480156109ad57600080fd5b506109c860048036038101906109c39190613fe4565b611a12565b6040516109d59190613e04565b60405180910390f35b3480156109ea57600080fd5b50610a056004803603810190610a009190613da9565b611a32565b604051610a129190613e04565b60405180910390f35b348015610a2757600080fd5b50610a426004803603810190610a3d9190613da9565b611b1d565b604051610a4f9190613e04565b60405180910390f35b348015610a6457600080fd5b50610a7f6004803603810190610a7a9190613fe4565b611b3b565b005b348015610a8d57600080fd5b50610aa86004803603810190610aa39190613fe4565b611c77565b604051610ab59190613e04565b60405180910390f35b348015610aca57600080fd5b50610ae56004803603810190610ae09190613fe4565b611c97565b005b348015610af357600080fd5b50610afc611dd3565b604051610b099190613e04565b60405180910390f35b348015610b1e57600080fd5b50610b396004803603810190610b34919061403d565b611de6565b005b348015610b4757600080fd5b50610b626004803603810190610b5d919061407d565b611f0b565b005b348015610b7057600080fd5b50610b8b6004803603810190610b869190613ec3565b611fc4565b005b348015610b9957600080fd5b50610ba26120ad565b604051610baf9190613e04565b60405180910390f35b348015610bc457600080fd5b50610bcd6120c0565b604051610bda9190613e2e565b60405180910390f35b348015610bef57600080fd5b50610bf86120c6565b604051610c059190613e2e565b60405180910390f35b348015610c1a57600080fd5b50610c356004803603810190610c3091906140fd565b6120cc565b604051610c429190613e2e565b60405180910390f35b348015610c5757600080fd5b50610c60612153565b604051610c6d9190613e2e565b60405180910390f35b348015610c8257600080fd5b50610c8b612159565b604051610c989190613e04565b60405180910390f35b348015610cad57600080fd5b50610cb66121f9565b604051610cc39190613e2e565b60405180910390f35b348015610cd857600080fd5b50610cf36004803603810190610cee9190613fe4565b6121ff565b005b348015610d0157600080fd5b50610d0a6122f6565b604051610d179190613e2e565b60405180910390f35b348015610d2c57600080fd5b50610d356122fc565b604051610d429190613e2e565b60405180910390f35b348015610d5757600080fd5b50610d726004803603810190610d6d9190613fe4565b612302565b005b348015610d8057600080fd5b50610d896123c2565b604051610d969190613e2e565b60405180910390f35b606060038054610dae9061416c565b80601f0160208091040260200160405190810160405280929190818152602001828054610dda9061416c565b8015610e275780601f10610dfc57610100808354040283529160200191610e27565b820191906000526020600020905b815481529060010190602001808311610e0a57829003601f168201915b5050505050905090565b6000610e45610e3e6123c8565b84846123d0565b6001905092915050565b60135481565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b600f5481565b60185481565b60175481565b610e9d6123c8565b73ffffffffffffffffffffffffffffffffffffffff16610ebb61179f565b73ffffffffffffffffffffffffffffffffffffffff1614610f11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f08906141e9565b60405180910390fd5b6002811015610f55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4c9061427b565b60405180910390fd5b670de0b6b3a764000081610f6991906142ca565b600a8190555050565b6000610f7f848484612599565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610fca6123c8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561104a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110419061437e565b60405180910390fd5b61105e856110566123c8565b8584036123d0565b60019150509392505050565b61dead81565b600061107a6123c8565b73ffffffffffffffffffffffffffffffffffffffff1661109861179f565b73ffffffffffffffffffffffffffffffffffffffff16146110ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e5906141e9565b60405180910390fd5b6001831015611132576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112990614410565b60405180910390fd5b6101f4831115611177576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116e906144a2565b60405180910390fd5b818311156111ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b190614534565b60405180910390fd5b620186a06111c6610e79565b846111d191906142ca565b6111db9190614583565b600681905550620186a06111ed610e79565b836111f891906142ca565b6112029190614583565b6007819055506001905092915050565b60006012905090565b60125481565b60006112c361122e6123c8565b84846001600061123c6123c8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112be91906145b4565b6123d0565b6001905092915050565b7f000000000000000000000000665118e905e66e16df15a65cb4c6a9c8ae36e78381565b600860009054906101000a900460ff1681565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560159054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114096123c8565b73ffffffffffffffffffffffffffffffffffffffff1661142761179f565b73ffffffffffffffffffffffffffffffffffffffff161461147d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611474906141e9565b60405180910390fd5b6114876000613230565b565b60006114936123c8565b73ffffffffffffffffffffffffffffffffffffffff166114b161179f565b73ffffffffffffffffffffffffffffffffffffffff1614611507576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fe906141e9565b60405180910390fd5b6000600860006101000a81548160ff0219169083151502179055506001905090565b6115316123c8565b73ffffffffffffffffffffffffffffffffffffffff1661154f61179f565b73ffffffffffffffffffffffffffffffffffffffff16146115a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159c906141e9565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b60105481565b61163a6123c8565b73ffffffffffffffffffffffffffffffffffffffff1661165861179f565b73ffffffffffffffffffffffffffffffffffffffff16146116ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a5906141e9565b60405180910390fd5b8260108190555081601181905550806012819055506012546011546010546116d691906145b4565b6116e091906145b4565b600f81905550505050565b6116f36123c8565b73ffffffffffffffffffffffffffffffffffffffff1661171161179f565b73ffffffffffffffffffffffffffffffffffffffff1614611767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175e906141e9565b60405180910390fd5b6001600e60146101000a81548160ff0219169083151502179055506001600560156101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60145481565b6117d76123c8565b73ffffffffffffffffffffffffffffffffffffffff166117f561179f565b73ffffffffffffffffffffffffffffffffffffffff161461184b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611842906141e9565b60405180910390fd5b80600560156101000a81548160ff02191690831515021790555050565b6060600480546118779061416c565b80601f01602080910402602001604051908101604052809291908181526020018280546118a39061416c565b80156118f05780601f106118c5576101008083540402835291602001916118f0565b820191906000526020600020905b8154815290600101906020018083116118d357829003601f168201915b5050505050905090565b6119026123c8565b73ffffffffffffffffffffffffffffffffffffffff1661192061179f565b73ffffffffffffffffffffffffffffffffffffffff1614611976576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196d906141e9565b60405180910390fd5b7f000000000000000000000000665118e905e66e16df15a65cb4c6a9c8ae36e78373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a04576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fb9061465a565b60405180910390fd5b611a0e82826132f6565b5050565b601b6020528060005260406000206000915054906101000a900460ff1681565b60008060016000611a416123c8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611afe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af5906146ec565b60405180910390fd5b611b12611b096123c8565b858584036123d0565b600191505092915050565b6000611b31611b2a6123c8565b8484612599565b6001905092915050565b611b436123c8565b73ffffffffffffffffffffffffffffffffffffffff16611b6161179f565b73ffffffffffffffffffffffffffffffffffffffff1614611bb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bae906141e9565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c6020528060005260406000206000915054906101000a900460ff1681565b611c9f6123c8565b73ffffffffffffffffffffffffffffffffffffffff16611cbd61179f565b73ffffffffffffffffffffffffffffffffffffffff1614611d13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0a906141e9565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ffa486461dcdff36faabb21004a43dd48cd470ed93cb0bd1899208e7684da368160405160405180910390a380600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e60149054906101000a900460ff1681565b611dee6123c8565b73ffffffffffffffffffffffffffffffffffffffff16611e0c61179f565b73ffffffffffffffffffffffffffffffffffffffff1614611e62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e59906141e9565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611eff9190613e04565b60405180910390a25050565b611f136123c8565b73ffffffffffffffffffffffffffffffffffffffff16611f3161179f565b73ffffffffffffffffffffffffffffffffffffffff1614611f87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7e906141e9565b60405180910390fd5b826014819055508160158190555080601681905550601654601554601454611faf91906145b4565b611fb991906145b4565b601381905550505050565b611fcc6123c8565b73ffffffffffffffffffffffffffffffffffffffff16611fea61179f565b73ffffffffffffffffffffffffffffffffffffffff1614612040576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612037906141e9565b60405180910390fd5b6005811015612084576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207b9061477e565b60405180910390fd5b6103e861208f610e79565b8261209a91906142ca565b6120a49190614583565b60098190555050565b600860019054906101000a900460ff1681565b600a5481565b60165481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60065481565b60006121636123c8565b73ffffffffffffffffffffffffffffffffffffffff1661218161179f565b73ffffffffffffffffffffffffffffffffffffffff16146121d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ce906141e9565b60405180910390fd5b6000600860016101000a81548160ff0219169083151502179055506001905090565b60115481565b6122076123c8565b73ffffffffffffffffffffffffffffffffffffffff1661222561179f565b73ffffffffffffffffffffffffffffffffffffffff161461227b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612272906141e9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036122ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e190614810565b60405180910390fd5b6122f381613230565b50565b60155481565b60095481565b61230a6123c8565b73ffffffffffffffffffffffffffffffffffffffff1661232861179f565b73ffffffffffffffffffffffffffffffffffffffff161461237e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612375906141e9565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60195481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361243f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612436906148a2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a590614934565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161258c9190613e2e565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612608576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ff906149c6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612677576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266e90614a58565b60405180910390fd5b600081036126905761268b83836000613397565b61322b565b600860009054906101000a900460ff1615612d53576126ad61179f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561271b57506126eb61179f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127545750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561278e575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127a75750600560149054906101000a900460ff16155b15612d5257600e60149054906101000a900460ff166128a157601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128615750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6128a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289790614ac4565b60405180910390fd5b5b600860019054906101000a900460ff1615612a69576128be61179f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561294557507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561299d57507f000000000000000000000000665118e905e66e16df15a65cb4c6a9c8ae36e78373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612a685743600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612a23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1a90614b7c565b60405180910390fd5b43600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612b0c5750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612bb357600a54811115612b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4d90614c0e565b60405180910390fd5b600954612b62836113b9565b82612b6d91906145b4565b1115612bae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ba590614c7a565b60405180910390fd5b612d51565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c565750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ca557600a54811115612ca0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9790614d0c565b60405180910390fd5b612d50565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612d4f57600954612d02836113b9565b82612d0d91906145b4565b1115612d4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4590614c7a565b60405180910390fd5b5b5b5b5b5b6000612d5e306113b9565b905060006006548210159050808015612d835750600560159054906101000a900460ff165b8015612d9c5750600560149054906101000a900460ff16155b8015612df25750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e485750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e9e5750601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ee2576001600560146101000a81548160ff021916908315150217905550612ec6613616565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f985750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612fa257600090505b6000811561321b57601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561300557506000601354115b156130d2576130326064613024601354886138d990919063ffffffff16565b6138ef90919063ffffffff16565b90506013546015548261304591906142ca565b61304f9190614583565b6018600082825461306091906145b4565b925050819055506013546016548261307891906142ca565b6130829190614583565b6019600082825461309391906145b4565b92505081905550601354601454826130ab91906142ca565b6130b59190614583565b601760008282546130c691906145b4565b925050819055506131f7565b601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561312d57506000600f54115b156131f65761315a606461314c600f54886138d990919063ffffffff16565b6138ef90919063ffffffff16565b9050600f546011548261316d91906142ca565b6131779190614583565b6018600082825461318891906145b4565b92505081905550600f54601254826131a091906142ca565b6131aa9190614583565b601960008282546131bb91906145b4565b92505081905550600f54601054826131d391906142ca565b6131dd9190614583565b601760008282546131ee91906145b4565b925050819055505b5b600081111561320c5761320b873083613397565b5b80856132189190614d2c565b94505b613226878787613397565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613406576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133fd906149c6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161346c90614a58565b60405180910390fd5b613480838383613905565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613506576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134fd90614dd2565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461359991906145b4565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516135fd9190613e2e565b60405180910390a361361084848461390a565b50505050565b6000613621306113b9565b9050600060195460175460185461363891906145b4565b61364291906145b4565b90506000808303613655575050506138d7565b6007548311156136655760075492505b60006002836018548661367891906142ca565b6136829190614583565b61368c9190614583565b905060006136a3828661390f90919063ffffffff16565b905060004790506136b382613925565b60006136c8824761390f90919063ffffffff16565b905060006136f3876136e5601754856138d990919063ffffffff16565b6138ef90919063ffffffff16565b9050600061371e88613710601954866138d990919063ffffffff16565b6138ef90919063ffffffff16565b9050600081838561372f9190614d2c565b6137399190614d2c565b9050600060188190555060006017819055506000601981905550600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161379990614e23565b60006040518083038185875af1925050503d80600081146137d6576040519150601f19603f3d011682016040523d82523d6000602084013e6137db565b606091505b5050809850506000871180156137f15750600081115b1561383e576138008782613b62565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868260185460405161383593929190614e38565b60405180910390a15b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161388490614e23565b60006040518083038185875af1925050503d80600081146138c1576040519150601f19603f3d011682016040523d82523d6000602084013e6138c6565b606091505b505080985050505050505050505050505b565b600081836138e791906142ca565b905092915050565b600081836138fd9190614583565b905092915050565b505050565b505050565b6000818361391d9190614d2c565b905092915050565b6000600267ffffffffffffffff81111561394257613941614e6f565b5b6040519080825280602002602001820160405280156139705781602001602082028036833780820191505090505b509050308160008151811061398857613987614e9e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a519190614ee2565b81600181518110613a6557613a64614e9e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613aca307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846123d0565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613b2c959493929190615008565b600060405180830381600087803b158015613b4657600080fd5b505af1158015613b5a573d6000803e3d6000fd5b505050505050565b613b8d307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846123d0565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613c1496959493929190615062565b60606040518083038185885af1158015613c32573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613c5791906150d8565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613c98578082015181840152602081019050613c7d565b60008484015250505050565b6000601f19601f8301169050919050565b6000613cc082613c5e565b613cca8185613c69565b9350613cda818560208601613c7a565b613ce381613ca4565b840191505092915050565b60006020820190508181036000830152613d088184613cb5565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613d4082613d15565b9050919050565b613d5081613d35565b8114613d5b57600080fd5b50565b600081359050613d6d81613d47565b92915050565b6000819050919050565b613d8681613d73565b8114613d9157600080fd5b50565b600081359050613da381613d7d565b92915050565b60008060408385031215613dc057613dbf613d10565b5b6000613dce85828601613d5e565b9250506020613ddf85828601613d94565b9150509250929050565b60008115159050919050565b613dfe81613de9565b82525050565b6000602082019050613e196000830184613df5565b92915050565b613e2881613d73565b82525050565b6000602082019050613e436000830184613e1f565b92915050565b6000819050919050565b6000613e6e613e69613e6484613d15565b613e49565b613d15565b9050919050565b6000613e8082613e53565b9050919050565b6000613e9282613e75565b9050919050565b613ea281613e87565b82525050565b6000602082019050613ebd6000830184613e99565b92915050565b600060208284031215613ed957613ed8613d10565b5b6000613ee784828501613d94565b91505092915050565b600080600060608486031215613f0957613f08613d10565b5b6000613f1786828701613d5e565b9350506020613f2886828701613d5e565b9250506040613f3986828701613d94565b9150509250925092565b613f4c81613d35565b82525050565b6000602082019050613f676000830184613f43565b92915050565b60008060408385031215613f8457613f83613d10565b5b6000613f9285828601613d94565b9250506020613fa385828601613d94565b9150509250929050565b600060ff82169050919050565b613fc381613fad565b82525050565b6000602082019050613fde6000830184613fba565b92915050565b600060208284031215613ffa57613ff9613d10565b5b600061400884828501613d5e565b91505092915050565b61401a81613de9565b811461402557600080fd5b50565b60008135905061403781614011565b92915050565b6000806040838503121561405457614053613d10565b5b600061406285828601613d5e565b925050602061407385828601614028565b9150509250929050565b60008060006060848603121561409657614095613d10565b5b60006140a486828701613d94565b93505060206140b586828701613d94565b92505060406140c686828701613d94565b9150509250925092565b6000602082840312156140e6576140e5613d10565b5b60006140f484828501614028565b91505092915050565b6000806040838503121561411457614113613d10565b5b600061412285828601613d5e565b925050602061413385828601613d5e565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061418457607f821691505b6020821081036141975761419661413d565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006141d3602083613c69565b91506141de8261419d565b602082019050919050565b60006020820190508181036000830152614202816141c6565b9050919050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e32250000000000000000000000000000000000602082015250565b6000614265602f83613c69565b915061427082614209565b604082019050919050565b6000602082019050818103600083015261429481614258565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006142d582613d73565b91506142e083613d73565b92508282026142ee81613d73565b915082820484148315176143055761430461429b565b5b5092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614368602883613c69565b91506143738261430c565b604082019050919050565b600060208201905081810360008301526143978161435b565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006143fa603583613c69565b91506144058261439e565b604082019050919050565b60006020820190508181036000830152614429816143ed565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061448c603483613c69565b915061449782614430565b604082019050919050565b600060208201905081810360008301526144bb8161447f565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e206d6178546f6b656e73466f72537761706261636b00000000000000000000602082015250565b600061451e603683613c69565b9150614529826144c2565b604082019050919050565b6000602082019050818103600083015261454d81614511565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061458e82613d73565b915061459983613d73565b9250826145a9576145a8614554565b5b828204905092915050565b60006145bf82613d73565b91506145ca83613d73565b92508282019050808211156145e2576145e161429b565b5b92915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614644603983613c69565b915061464f826145e8565b604082019050919050565b6000602082019050818103600083015261467381614637565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006146d6602583613c69565b91506146e18261467a565b604082019050919050565b60006020820190508181036000830152614705816146c9565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614768602483613c69565b91506147738261470c565b604082019050919050565b600060208201905081810360008301526147978161475b565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006147fa602683613c69565b91506148058261479e565b604082019050919050565b60006020820190508181036000830152614829816147ed565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061488c602483613c69565b915061489782614830565b604082019050919050565b600060208201905081810360008301526148bb8161487f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061491e602283613c69565b9150614929826148c2565b604082019050919050565b6000602082019050818103600083015261494d81614911565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006149b0602583613c69565b91506149bb82614954565b604082019050919050565b600060208201905081810360008301526149df816149a3565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614a42602383613c69565b9150614a4d826149e6565b604082019050919050565b60006020820190508181036000830152614a7181614a35565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614aae601683613c69565b9150614ab982614a78565b602082019050919050565b60006020820190508181036000830152614add81614aa1565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614b66604983613c69565b9150614b7182614ae4565b606082019050919050565b60006020820190508181036000830152614b9581614b59565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614bf8603583613c69565b9150614c0382614b9c565b604082019050919050565b60006020820190508181036000830152614c2781614beb565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614c64601383613c69565b9150614c6f82614c2e565b602082019050919050565b60006020820190508181036000830152614c9381614c57565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614cf6603683613c69565b9150614d0182614c9a565b604082019050919050565b60006020820190508181036000830152614d2581614ce9565b9050919050565b6000614d3782613d73565b9150614d4283613d73565b9250828203905081811115614d5a57614d5961429b565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614dbc602683613c69565b9150614dc782614d60565b604082019050919050565b60006020820190508181036000830152614deb81614daf565b9050919050565b600081905092915050565b50565b6000614e0d600083614df2565b9150614e1882614dfd565b600082019050919050565b6000614e2e82614e00565b9150819050919050565b6000606082019050614e4d6000830186613e1f565b614e5a6020830185613e1f565b614e676040830184613e1f565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614edc81613d47565b92915050565b600060208284031215614ef857614ef7613d10565b5b6000614f0684828501614ecd565b91505092915050565b6000819050919050565b6000614f34614f2f614f2a84614f0f565b613e49565b613d73565b9050919050565b614f4481614f19565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614f7f81613d35565b82525050565b6000614f918383614f76565b60208301905092915050565b6000602082019050919050565b6000614fb582614f4a565b614fbf8185614f55565b9350614fca83614f66565b8060005b83811015614ffb578151614fe28882614f85565b9750614fed83614f9d565b925050600181019050614fce565b5085935050505092915050565b600060a08201905061501d6000830188613e1f565b61502a6020830187614f3b565b818103604083015261503c8186614faa565b905061504b6060830185613f43565b6150586080830184613e1f565b9695505050505050565b600060c0820190506150776000830189613f43565b6150846020830188613e1f565b6150916040830187614f3b565b61509e6060830186614f3b565b6150ab6080830185613f43565b6150b860a0830184613e1f565b979650505050505050565b6000815190506150d281613d7d565b92915050565b6000806000606084860312156150f1576150f0613d10565b5b60006150ff868287016150c3565b9350506020615110868287016150c3565b9250506040615121868287016150c3565b915050925092509256fea264697066735822122072ba41777597b8a6d9a118b2442fe3efe49ca392c872910ae868b94f66baa8ea64736f6c63430008130033

Deployed Bytecode Sourcemap

24889:17883:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10712:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12879:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25914:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24963:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11832:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25768:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26104:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26064;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31243:241;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13530:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25066:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30418:670;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11674:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25876:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14431:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25021:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25313:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35104:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25686:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25619:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25173:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12003:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21736:103;;;;;;;;;;;;;:::i;:::-;;29951:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32023:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25649:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25251:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25802:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32623:352;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29767:112;;;;;;;;;;;;;:::i;:::-;;21085:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25949:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32290:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10931:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34036:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26318:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15149:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12343:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34544:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26524:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34919:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25726:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33729:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33205:360;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31606:232;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25353:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25430:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26025:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12581:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25211:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30140:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25839:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21994:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25987:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25399:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34783:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26144:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10712:100;10766:13;10799:5;10792:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10712:100;:::o;12879:169::-;12962:4;12979:39;12988:12;:10;:12::i;:::-;13002:7;13011:6;12979:8;:39::i;:::-;13036:4;13029:11;;12879:169;;;;:::o;25914:28::-;;;;:::o;24963:51::-;;;:::o;11832:108::-;11893:7;11920:12;;11913:19;;11832:108;:::o;25768:27::-;;;;:::o;26104:33::-;;;;:::o;26064:::-;;;;:::o;31243:241::-;21316:12;:10;:12::i;:::-;21305:23;;:7;:5;:7::i;:::-;:23;;;21297:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31349:1:::1;31339:6;:11;;31317:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;31469:6;31459;:17;;;;:::i;:::-;31436:20;:40;;;;31243:241:::0;:::o;13530:492::-;13670:4;13687:36;13697:6;13705:9;13716:6;13687:9;:36::i;:::-;13736:24;13763:11;:19;13775:6;13763:19;;;;;;;;;;;;;;;:33;13783:12;:10;:12::i;:::-;13763:33;;;;;;;;;;;;;;;;13736:60;;13835:6;13815:16;:26;;13807:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;13922:57;13931:6;13939:12;:10;:12::i;:::-;13972:6;13953:16;:25;13922:8;:57::i;:::-;14010:4;14003:11;;;13530:492;;;;;:::o;25066:53::-;25112:6;25066:53;:::o;30418:670::-;30539:4;21316:12;:10;:12::i;:::-;21305:23;;:7;:5;:7::i;:::-;:23;;;21297:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30593:1:::1;30583:6;:11;;30561:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;30718:3;30708:6;:13;;30686:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;30844:6;30834;:16;;30812:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;30988:6;30973:13;:11;:13::i;:::-;30964:6;:22;;;;:::i;:::-;:30;;;;:::i;:::-;30943:18;:51;;;;31052:6;31037:13;:11;:13::i;:::-;31028:6;:22;;;;:::i;:::-;:30;;;;:::i;:::-;31005:20;:53;;;;31076:4;31069:11;;30418:670:::0;;;;:::o;11674:93::-;11732:5;11757:2;11750:9;;11674:93;:::o;25876:29::-;;;;:::o;14431:215::-;14519:4;14536:80;14545:12;:10;:12::i;:::-;14559:7;14605:10;14568:11;:25;14580:12;:10;:12::i;:::-;14568:25;;;;;;;;;;;;;;;:34;14594:7;14568:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;14536:8;:80::i;:::-;14634:4;14627:11;;14431:215;;;;:::o;25021:38::-;;;:::o;25313:33::-;;;;;;;;;;;;;:::o;35104:119::-;35170:4;35194:12;:21;35207:7;35194:21;;;;;;;;;;;;;;;;;;;;;;;;;35187:28;;35104:119;;;:::o;25686:29::-;;;;;;;;;;;;;:::o;25619:23::-;;;;;;;;;;;;;:::o;25173:31::-;;;;;;;;;;;;;:::o;12003:127::-;12077:7;12104:9;:18;12114:7;12104:18;;;;;;;;;;;;;;;;12097:25;;12003:127;;;:::o;21736:103::-;21316:12;:10;:12::i;:::-;21305:23;;:7;:5;:7::i;:::-;:23;;;21297:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21801:30:::1;21828:1;21801:18;:30::i;:::-;21736:103::o:0;29951:121::-;30003:4;21316:12;:10;:12::i;:::-;21305:23;;:7;:5;:7::i;:::-;:23;;;21297:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30037:5:::1;30020:14;;:22;;;;;;;;;;;;;;;;;;30060:4;30053:11;;29951:121:::0;:::o;32023:152::-;21316:12;:10;:12::i;:::-;21305:23;;:7;:5;:7::i;:::-;:23;;;21297:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32163:4:::1;32136:16;:24;32153:6;32136:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;32023:152:::0;;:::o;25649:30::-;;;;;;;;;;;;;:::o;25251:35::-;;;;:::o;25802:30::-;;;;:::o;32623:352::-;21316:12;:10;:12::i;:::-;21305:23;;:7;:5;:7::i;:::-;:23;;;21297:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32796:13:::1;32778:15;:31;;;;32838:13;32820:15;:31;;;;32879:12;32862:14;:29;;;;32953:14;;32935:15;;32917;;:33;;;;:::i;:::-;:50;;;;:::i;:::-;32902:12;:65;;;;32623:352:::0;;;:::o;29767:112::-;21316:12;:10;:12::i;:::-;21305:23;;:7;:5;:7::i;:::-;:23;;;21297:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29838:4:::1;29822:13;;:20;;;;;;;;;;;;;;;;;;29867:4;29853:11;;:18;;;;;;;;;;;;;;;;;;29767:112::o:0;21085:87::-;21131:7;21158:6;;;;;;;;;;;21151:13;;21085:87;:::o;25949:31::-;;;;:::o;32290:100::-;21316:12;:10;:12::i;:::-;21305:23;;:7;:5;:7::i;:::-;:23;;;21297:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32375:7:::1;32361:11;;:21;;;;;;;;;;;;;;;;;;32290:100:::0;:::o;10931:104::-;10987:13;11020:7;11013:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10931:104;:::o;34036:304::-;21316:12;:10;:12::i;:::-;21305:23;;:7;:5;:7::i;:::-;:23;;;21297:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34180:13:::1;34172:21;;:4;:21;;::::0;34150:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;34291:41;34320:4;34326:5;34291:28;:41::i;:::-;34036:304:::0;;:::o;26318:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;15149:413::-;15242:4;15259:24;15286:11;:25;15298:12;:10;:12::i;:::-;15286:25;;;;;;;;;;;;;;;:34;15312:7;15286:34;;;;;;;;;;;;;;;;15259:61;;15359:15;15339:16;:35;;15331:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;15452:67;15461:12;:10;:12::i;:::-;15475:7;15503:15;15484:16;:34;15452:8;:67::i;:::-;15550:4;15543:11;;;15149:413;;;;:::o;12343:175::-;12429:4;12446:42;12456:12;:10;:12::i;:::-;12470:9;12481:6;12446:9;:42::i;:::-;12506:4;12499:11;;12343:175;;;;:::o;34544:231::-;21316:12;:10;:12::i;:::-;21305:23;;:7;:5;:7::i;:::-;:23;;;21297:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34704:15:::1;;;;;;;;;;;34661:59;;34684:18;34661:59;;;;;;;;;;;;34749:18;34731:15;;:36;;;;;;;;;;;;;;;;;;34544:231:::0;:::o;26524:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;34919:177::-;21316:12;:10;:12::i;:::-;21305:23;;:7;:5;:7::i;:::-;:23;;;21297:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35036:14:::1;;;;;;;;;;;35003:48;;35025:9;35003:48;;;;;;;;;;;;35079:9;35062:14;;:26;;;;;;;;;;;;;;;;;;34919:177:::0;:::o;25726:33::-;;;;;;;;;;;;;:::o;33729:175::-;21316:12;:10;:12::i;:::-;21305:23;;:7;:5;:7::i;:::-;:23;;;21297:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33838:8:::1;33814:12;:21;33827:7;33814:21;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;33878:7;33862:34;;;33887:8;33862:34;;;;;;:::i;:::-;;;;;;;;33729:175:::0;;:::o;33205:360::-;21316:12;:10;:12::i;:::-;21305:23;;:7;:5;:7::i;:::-;:23;;;21297:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33380:13:::1;33361:16;:32;;;;33423:13;33404:16;:32;;;;33465:12;33447:15;:30;;;;33542:15;;33523:16;;33504;;:35;;;;:::i;:::-;:53;;;;:::i;:::-;33488:13;:69;;;;33205:360:::0;;;:::o;31606:232::-;21316:12;:10;:12::i;:::-;21305:23;;:7;:5;:7::i;:::-;:23;;;21297:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31715:1:::1;31705:6;:11;;31683:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;31826:4;31812:13;:11;:13::i;:::-;31803:6;:22;;;;:::i;:::-;:27;;;;:::i;:::-;31791:9;:39;;;;31606:232:::0;:::o;25353:39::-;;;;;;;;;;;;;:::o;25430:35::-;;;;:::o;26025:30::-;;;;:::o;12581:151::-;12670:7;12697:11;:18;12709:5;12697:18;;;;;;;;;;;;;;;:27;12716:7;12697:27;;;;;;;;;;;;;;;;12690:34;;12581:151;;;;:::o;25211:33::-;;;;:::o;30140:135::-;30200:4;21316:12;:10;:12::i;:::-;21305:23;;:7;:5;:7::i;:::-;:23;;;21297:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30240:5:::1;30217:20;;:28;;;;;;;;;;;;;;;;;;30263:4;30256:11;;30140:135:::0;:::o;25839:30::-;;;;:::o;21994:201::-;21316:12;:10;:12::i;:::-;21305:23;;:7;:5;:7::i;:::-;:23;;;21297:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22103:1:::1;22083:22;;:8;:22;;::::0;22075:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22159:28;22178:8;22159:18;:28::i;:::-;21994:201:::0;:::o;25987:31::-;;;;:::o;25399:24::-;;;;:::o;34783:128::-;21316:12;:10;:12::i;:::-;21305:23;;:7;:5;:7::i;:::-;:23;;;21297:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34892:11:::1;34881:8;;:22;;;;;;;;;;;;;;;;;;34783:128:::0;:::o;26144:32::-;;;;:::o;9718:98::-;9771:7;9798:10;9791:17;;9718:98;:::o;18833:380::-;18986:1;18969:19;;:5;:19;;;18961:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19067:1;19048:21;;:7;:21;;;19040:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19151:6;19121:11;:18;19133:5;19121:18;;;;;;;;;;;;;;;:27;19140:7;19121:27;;;;;;;;;;;;;;;:36;;;;19189:7;19173:32;;19182:5;19173:32;;;19198:6;19173:32;;;;;;:::i;:::-;;;;;;;;18833:380;;;:::o;35231:4650::-;35379:1;35363:18;;:4;:18;;;35355:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35456:1;35442:16;;:2;:16;;;35434:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;35525:1;35515:6;:11;35511:93;;35543:28;35559:4;35565:2;35569:1;35543:15;:28::i;:::-;35586:7;;35511:93;35620:14;;;;;;;;;;;35616:2428;;;35681:7;:5;:7::i;:::-;35673:15;;:4;:15;;;;:49;;;;;35715:7;:5;:7::i;:::-;35709:13;;:2;:13;;;;35673:49;:86;;;;;35757:1;35743:16;;:2;:16;;;;35673:86;:128;;;;;35794:6;35780:21;;:2;:21;;;;35673:128;:158;;;;;35823:8;;;;;;;;;;;35822:9;35673:158;35651:2382;;;35871:13;;;;;;;;;;;35866:209;;35943:12;:18;35956:4;35943:18;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;;35965:12;:16;35978:2;35965:16;;;;;;;;;;;;;;;;;;;;;;;;;35943:38;35909:146;;;;;;;;;;;;:::i;:::-;;;;;;;;;35866:209;36231:20;;;;;;;;;;;36227:641;;;36312:7;:5;:7::i;:::-;36306:13;;:2;:13;;;;:72;;;;;36362:15;36348:30;;:2;:30;;;;36306:72;:129;;;;;36421:13;36407:28;;:2;:28;;;;36306:129;36276:573;;;36599:12;36524:28;:39;36553:9;36524:39;;;;;;;;;;;;;;;;:87;36486:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;36813:12;36771:28;:39;36800:9;36771:39;;;;;;;;;;;;;;;:54;;;;36276:573;36227:641;36942:25;:31;36968:4;36942:31;;;;;;;;;;;;;;;;;;;;;;;;;:77;;;;;36999:16;:20;37016:2;36999:20;;;;;;;;;;;;;;;;;;;;;;;;;36998:21;36942:77;36916:1102;;;37106:20;;37096:6;:30;;37062:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;37314:9;;37297:13;37307:2;37297:9;:13::i;:::-;37288:6;:22;;;;:::i;:::-;:35;;37254:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;36916:1102;;;37492:25;:29;37518:2;37492:29;;;;;;;;;;;;;;;;;;;;;;;;;:77;;;;;37547:16;:22;37564:4;37547:22;;;;;;;;;;;;;;;;;;;;;;;;;37546:23;37492:77;37466:552;;;37656:20;;37646:6;:30;;37612:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;37466:552;;;37813:16;:20;37830:2;37813:20;;;;;;;;;;;;;;;;;;;;;;;;;37808:210;;37918:9;;37901:13;37911:2;37901:9;:13::i;:::-;37892:6;:22;;;;:::i;:::-;:35;;37858:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;37808:210;37466:552;36916:1102;35651:2382;35616:2428;38056:28;38087:24;38105:4;38087:9;:24::i;:::-;38056:55;;38124:12;38163:18;;38139:20;:42;;38124:57;;38212:7;:35;;;;;38236:11;;;;;;;;;;;38212:35;:61;;;;;38265:8;;;;;;;;;;;38264:9;38212:61;:110;;;;;38291:25;:31;38317:4;38291:31;;;;;;;;;;;;;;;;;;;;;;;;;38290:32;38212:110;:146;;;;;38340:12;:18;38353:4;38340:18;;;;;;;;;;;;;;;;;;;;;;;;;38339:19;38212:146;:180;;;;;38376:12;:16;38389:2;38376:16;;;;;;;;;;;;;;;;;;;;;;;;;38375:17;38212:180;38194:312;;;38430:4;38419:8;;:15;;;;;;;;;;;;;;;;;;38451:10;:8;:10::i;:::-;38489:5;38478:8;;:16;;;;;;;;;;;;;;;;;;38194:312;38518:12;38534:8;;;;;;;;;;;38533:9;38518:24;;38644:12;:18;38657:4;38644:18;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;;38666:12;:16;38679:2;38666:16;;;;;;;;;;;;;;;;;;;;;;;;;38644:38;38640:86;;;38709:5;38699:15;;38640:86;38738:12;38843:7;38839:989;;;38895:25;:29;38921:2;38895:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;38944:1;38928:13;;:17;38895:50;38891:788;;;38973:34;39003:3;38973:25;38984:13;;38973:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;38966:41;;39076:13;;39056:16;;39049:4;:23;;;;:::i;:::-;39048:41;;;;:::i;:::-;39026:18;;:63;;;;;;;:::i;:::-;;;;;;;;39156:13;;39137:15;;39130:4;:22;;;;:::i;:::-;39129:40;;;;:::i;:::-;39108:17;;:61;;;;;;;:::i;:::-;;;;;;;;39238:13;;39218:16;;39211:4;:23;;;;:::i;:::-;39210:41;;;;:::i;:::-;39188:18;;:63;;;;;;;:::i;:::-;;;;;;;;38891:788;;;39313:25;:31;39339:4;39313:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;39363:1;39348:12;;:16;39313:51;39309:370;;;39392:33;39421:3;39392:24;39403:12;;39392:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;39385:40;;39493:12;;39474:15;;39467:4;:22;;;;:::i;:::-;39466:39;;;;:::i;:::-;39444:18;;:61;;;;;;;:::i;:::-;;;;;;;;39571:12;;39553:14;;39546:4;:21;;;;:::i;:::-;39545:38;;;;:::i;:::-;39524:17;;:59;;;;;;;:::i;:::-;;;;;;;;39651:12;;39632:15;;39625:4;:22;;;;:::i;:::-;39624:39;;;;:::i;:::-;39602:18;;:61;;;;;;;:::i;:::-;;;;;;;;39309:370;38891:788;39706:1;39699:4;:8;39695:91;;;39728:42;39744:4;39758;39765;39728:15;:42::i;:::-;39695:91;39812:4;39802:14;;;;;:::i;:::-;;;38839:989;39840:33;39856:4;39862:2;39866:6;39840:15;:33::i;:::-;35344:4537;;;;35231:4650;;;;:::o;22355:191::-;22429:16;22448:6;;;;;;;;;;;22429:25;;22474:8;22465:6;;:17;;;;;;;;;;;;;;;;;;22529:8;22498:40;;22519:8;22498:40;;;;;;;;;;;;22418:128;22355:191;:::o;34348:188::-;34465:5;34431:25;:31;34457:4;34431:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;34522:5;34488:40;;34516:4;34488:40;;;;;;;;;;;;34348:188;;:::o;16052:733::-;16210:1;16192:20;;:6;:20;;;16184:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;16294:1;16273:23;;:9;:23;;;16265:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;16349:47;16370:6;16378:9;16389:6;16349:20;:47::i;:::-;16409:21;16433:9;:17;16443:6;16433:17;;;;;;;;;;;;;;;;16409:41;;16486:6;16469:13;:23;;16461:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;16607:6;16591:13;:22;16571:9;:17;16581:6;16571:17;;;;;;;;;;;;;;;:42;;;;16659:6;16635:9;:20;16645:9;16635:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;16700:9;16683:35;;16692:6;16683:35;;;16711:6;16683:35;;;;;;:::i;:::-;;;;;;;;16731:46;16751:6;16759:9;16770:6;16731:19;:46::i;:::-;16173:612;16052:733;;;:::o;41008:1759::-;41047:23;41073:24;41091:4;41073:9;:24::i;:::-;41047:50;;41108:25;41204:17;;41170:18;;41136;;:52;;;;:::i;:::-;:85;;;;:::i;:::-;41108:113;;41232:12;41280:1;41261:15;:20;41257:59;;41298:7;;;;;41257:59;41350:20;;41332:15;:38;41328:109;;;41405:20;;41387:38;;41328:109;41498:23;41611:1;41578:17;41543:18;;41525:15;:36;;;;:::i;:::-;41524:71;;;;:::i;:::-;:88;;;;:::i;:::-;41498:114;;41623:26;41652:36;41672:15;41652;:19;;:36;;;;:::i;:::-;41623:65;;41701:25;41729:21;41701:49;;41763:36;41780:18;41763:16;:36::i;:::-;41812:18;41833:44;41859:17;41833:21;:25;;:44;;;;:::i;:::-;41812:65;;41890:23;41916:81;41969:17;41916:34;41931:18;;41916:10;:14;;:34;;;;:::i;:::-;:38;;:81;;;;:::i;:::-;41890:107;;42008:22;42033:56;42071:17;42033:33;42048:17;;42033:10;:14;;:33;;;;:::i;:::-;:37;;:56;;;;:::i;:::-;42008:81;;42102:23;42159:14;42141:15;42128:10;:28;;;;:::i;:::-;:45;;;;:::i;:::-;42102:71;;42207:1;42186:18;:22;;;;42240:1;42219:18;:22;;;;42272:1;42252:17;:21;;;;42308:14;;;;;;;;;;;42300:28;;42336:14;42300:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42286:69;;;;;42390:1;42372:15;:19;:42;;;;;42413:1;42395:15;:19;42372:42;42368:278;;;42431:46;42444:15;42461;42431:12;:46::i;:::-;42497:137;42530:18;42567:15;42601:18;;42497:137;;;;;;;;:::i;:::-;;;;;;;;42368:278;42680:15;;;;;;;;;;;42672:29;;42723:21;42672:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42658:101;;;;;41036:1731;;;;;;;;;;41008:1759;:::o;3161:98::-;3219:7;3250:1;3246;:5;;;;:::i;:::-;3239:12;;3161:98;;;;:::o;3560:::-;3618:7;3649:1;3645;:5;;;;:::i;:::-;3638:12;;3560:98;;;;:::o;19813:125::-;;;;:::o;20542:124::-;;;;:::o;2804:98::-;2862:7;2893:1;2889;:5;;;;:::i;:::-;2882:12;;2804:98;;;;:::o;39889:589::-;40015:21;40053:1;40039:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40015:40;;40084:4;40066;40071:1;40066:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;40110:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40100:4;40105:1;40100:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;40145:62;40162:4;40177:15;40195:11;40145:8;:62::i;:::-;40246:15;:66;;;40327:11;40353:1;40397:4;40424;40444:15;40246:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39944:534;39889:589;:::o;40486:514::-;40634:62;40651:4;40666:15;40684:11;40634:8;:62::i;:::-;40739:15;:31;;;40778:9;40811:4;40831:11;40857:1;40900;40943:8;;;;;;;;;;;40966:15;40739:253;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;40486:514;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:60::-;3826:3;3847:5;3840:12;;3798:60;;;:::o;3864:142::-;3914:9;3947:53;3965:34;3974:24;3992:5;3974:24;:::i;:::-;3965:34;:::i;:::-;3947:53;:::i;:::-;3934:66;;3864:142;;;:::o;4012:126::-;4062:9;4095:37;4126:5;4095:37;:::i;:::-;4082:50;;4012:126;;;:::o;4144:153::-;4221:9;4254:37;4285:5;4254:37;:::i;:::-;4241:50;;4144:153;;;:::o;4303:185::-;4417:64;4475:5;4417:64;:::i;:::-;4412:3;4405:77;4303:185;;:::o;4494:276::-;4614:4;4652:2;4641:9;4637:18;4629:26;;4665:98;4760:1;4749:9;4745:17;4736:6;4665:98;:::i;:::-;4494:276;;;;:::o;4776:329::-;4835:6;4884:2;4872:9;4863:7;4859:23;4855:32;4852:119;;;4890:79;;:::i;:::-;4852:119;5010:1;5035:53;5080:7;5071:6;5060:9;5056:22;5035:53;:::i;:::-;5025:63;;4981:117;4776:329;;;;:::o;5111:619::-;5188:6;5196;5204;5253:2;5241:9;5232:7;5228:23;5224:32;5221:119;;;5259:79;;:::i;:::-;5221:119;5379:1;5404:53;5449:7;5440:6;5429:9;5425:22;5404:53;:::i;:::-;5394:63;;5350:117;5506:2;5532:53;5577:7;5568:6;5557:9;5553:22;5532:53;:::i;:::-;5522:63;;5477:118;5634:2;5660:53;5705:7;5696:6;5685:9;5681:22;5660:53;:::i;:::-;5650:63;;5605:118;5111:619;;;;;:::o;5736:118::-;5823:24;5841:5;5823:24;:::i;:::-;5818:3;5811:37;5736:118;;:::o;5860:222::-;5953:4;5991:2;5980:9;5976:18;5968:26;;6004:71;6072:1;6061:9;6057:17;6048:6;6004:71;:::i;:::-;5860:222;;;;:::o;6088:474::-;6156:6;6164;6213:2;6201:9;6192:7;6188:23;6184:32;6181:119;;;6219:79;;:::i;:::-;6181:119;6339:1;6364:53;6409:7;6400:6;6389:9;6385:22;6364:53;:::i;:::-;6354:63;;6310:117;6466:2;6492:53;6537:7;6528:6;6517:9;6513:22;6492:53;:::i;:::-;6482:63;;6437:118;6088:474;;;;;:::o;6568:86::-;6603:7;6643:4;6636:5;6632:16;6621:27;;6568:86;;;:::o;6660:112::-;6743:22;6759:5;6743:22;:::i;:::-;6738:3;6731:35;6660:112;;:::o;6778:214::-;6867:4;6905:2;6894:9;6890:18;6882:26;;6918:67;6982:1;6971:9;6967:17;6958:6;6918:67;:::i;:::-;6778:214;;;;:::o;6998:329::-;7057:6;7106:2;7094:9;7085:7;7081:23;7077:32;7074:119;;;7112:79;;:::i;:::-;7074:119;7232:1;7257:53;7302:7;7293:6;7282:9;7278:22;7257:53;:::i;:::-;7247:63;;7203:117;6998:329;;;;:::o;7333:116::-;7403:21;7418:5;7403:21;:::i;:::-;7396:5;7393:32;7383:60;;7439:1;7436;7429:12;7383:60;7333:116;:::o;7455:133::-;7498:5;7536:6;7523:20;7514:29;;7552:30;7576:5;7552:30;:::i;:::-;7455:133;;;;:::o;7594:468::-;7659:6;7667;7716:2;7704:9;7695:7;7691:23;7687:32;7684:119;;;7722:79;;:::i;:::-;7684:119;7842:1;7867:53;7912:7;7903:6;7892:9;7888:22;7867:53;:::i;:::-;7857:63;;7813:117;7969:2;7995:50;8037:7;8028:6;8017:9;8013:22;7995:50;:::i;:::-;7985:60;;7940:115;7594:468;;;;;:::o;8068:619::-;8145:6;8153;8161;8210:2;8198:9;8189:7;8185:23;8181:32;8178:119;;;8216:79;;:::i;:::-;8178:119;8336:1;8361:53;8406:7;8397:6;8386:9;8382:22;8361:53;:::i;:::-;8351:63;;8307:117;8463:2;8489:53;8534:7;8525:6;8514:9;8510:22;8489:53;:::i;:::-;8479:63;;8434:118;8591:2;8617:53;8662:7;8653:6;8642:9;8638:22;8617:53;:::i;:::-;8607:63;;8562:118;8068:619;;;;;:::o;8693:323::-;8749:6;8798:2;8786:9;8777:7;8773:23;8769:32;8766:119;;;8804:79;;:::i;:::-;8766:119;8924:1;8949:50;8991:7;8982:6;8971:9;8967:22;8949:50;:::i;:::-;8939:60;;8895:114;8693:323;;;;:::o;9022:474::-;9090:6;9098;9147:2;9135:9;9126:7;9122:23;9118:32;9115:119;;;9153:79;;:::i;:::-;9115:119;9273:1;9298:53;9343:7;9334:6;9323:9;9319:22;9298:53;:::i;:::-;9288:63;;9244:117;9400:2;9426:53;9471:7;9462:6;9451:9;9447:22;9426:53;:::i;:::-;9416:63;;9371:118;9022:474;;;;;:::o;9502:180::-;9550:77;9547:1;9540:88;9647:4;9644:1;9637:15;9671:4;9668:1;9661:15;9688:320;9732:6;9769:1;9763:4;9759:12;9749:22;;9816:1;9810:4;9806:12;9837:18;9827:81;;9893:4;9885:6;9881:17;9871:27;;9827:81;9955:2;9947:6;9944:14;9924:18;9921:38;9918:84;;9974:18;;:::i;:::-;9918:84;9739:269;9688:320;;;:::o;10014:182::-;10154:34;10150:1;10142:6;10138:14;10131:58;10014:182;:::o;10202:366::-;10344:3;10365:67;10429:2;10424:3;10365:67;:::i;:::-;10358:74;;10441:93;10530:3;10441:93;:::i;:::-;10559:2;10554:3;10550:12;10543:19;;10202:366;;;:::o;10574:419::-;10740:4;10778:2;10767:9;10763:18;10755:26;;10827:9;10821:4;10817:20;10813:1;10802:9;10798:17;10791:47;10855:131;10981:4;10855:131;:::i;:::-;10847:139;;10574:419;;;:::o;10999:234::-;11139:34;11135:1;11127:6;11123:14;11116:58;11208:17;11203:2;11195:6;11191:15;11184:42;10999:234;:::o;11239:366::-;11381:3;11402:67;11466:2;11461:3;11402:67;:::i;:::-;11395:74;;11478:93;11567:3;11478:93;:::i;:::-;11596:2;11591:3;11587:12;11580:19;;11239:366;;;:::o;11611:419::-;11777:4;11815:2;11804:9;11800:18;11792:26;;11864:9;11858:4;11854:20;11850:1;11839:9;11835:17;11828:47;11892:131;12018:4;11892:131;:::i;:::-;11884:139;;11611:419;;;:::o;12036:180::-;12084:77;12081:1;12074:88;12181:4;12178:1;12171:15;12205:4;12202:1;12195:15;12222:410;12262:7;12285:20;12303:1;12285:20;:::i;:::-;12280:25;;12319:20;12337:1;12319:20;:::i;:::-;12314:25;;12374:1;12371;12367:9;12396:30;12414:11;12396:30;:::i;:::-;12385:41;;12575:1;12566:7;12562:15;12559:1;12556:22;12536:1;12529:9;12509:83;12486:139;;12605:18;;:::i;:::-;12486:139;12270:362;12222:410;;;;:::o;12638:227::-;12778:34;12774:1;12766:6;12762:14;12755:58;12847:10;12842:2;12834:6;12830:15;12823:35;12638:227;:::o;12871:366::-;13013:3;13034:67;13098:2;13093:3;13034:67;:::i;:::-;13027:74;;13110:93;13199:3;13110:93;:::i;:::-;13228:2;13223:3;13219:12;13212:19;;12871:366;;;:::o;13243:419::-;13409:4;13447:2;13436:9;13432:18;13424:26;;13496:9;13490:4;13486:20;13482:1;13471:9;13467:17;13460:47;13524:131;13650:4;13524:131;:::i;:::-;13516:139;;13243:419;;;:::o;13668:240::-;13808:34;13804:1;13796:6;13792:14;13785:58;13877:23;13872:2;13864:6;13860:15;13853:48;13668:240;:::o;13914:366::-;14056:3;14077:67;14141:2;14136:3;14077:67;:::i;:::-;14070:74;;14153:93;14242:3;14153:93;:::i;:::-;14271:2;14266:3;14262:12;14255:19;;13914:366;;;:::o;14286:419::-;14452:4;14490:2;14479:9;14475:18;14467:26;;14539:9;14533:4;14529:20;14525:1;14514:9;14510:17;14503:47;14567:131;14693:4;14567:131;:::i;:::-;14559:139;;14286:419;;;:::o;14711:239::-;14851:34;14847:1;14839:6;14835:14;14828:58;14920:22;14915:2;14907:6;14903:15;14896:47;14711:239;:::o;14956:366::-;15098:3;15119:67;15183:2;15178:3;15119:67;:::i;:::-;15112:74;;15195:93;15284:3;15195:93;:::i;:::-;15313:2;15308:3;15304:12;15297:19;;14956:366;;;:::o;15328:419::-;15494:4;15532:2;15521:9;15517:18;15509:26;;15581:9;15575:4;15571:20;15567:1;15556:9;15552:17;15545:47;15609:131;15735:4;15609:131;:::i;:::-;15601:139;;15328:419;;;:::o;15753:241::-;15893:34;15889:1;15881:6;15877:14;15870:58;15962:24;15957:2;15949:6;15945:15;15938:49;15753:241;:::o;16000:366::-;16142:3;16163:67;16227:2;16222:3;16163:67;:::i;:::-;16156:74;;16239:93;16328:3;16239:93;:::i;:::-;16357:2;16352:3;16348:12;16341:19;;16000:366;;;:::o;16372:419::-;16538:4;16576:2;16565:9;16561:18;16553:26;;16625:9;16619:4;16615:20;16611:1;16600:9;16596:17;16589:47;16653:131;16779:4;16653:131;:::i;:::-;16645:139;;16372:419;;;:::o;16797:180::-;16845:77;16842:1;16835:88;16942:4;16939:1;16932:15;16966:4;16963:1;16956:15;16983:185;17023:1;17040:20;17058:1;17040:20;:::i;:::-;17035:25;;17074:20;17092:1;17074:20;:::i;:::-;17069:25;;17113:1;17103:35;;17118:18;;:::i;:::-;17103:35;17160:1;17157;17153:9;17148:14;;16983:185;;;;:::o;17174:191::-;17214:3;17233:20;17251:1;17233:20;:::i;:::-;17228:25;;17267:20;17285:1;17267:20;:::i;:::-;17262:25;;17310:1;17307;17303:9;17296:16;;17331:3;17328:1;17325:10;17322:36;;;17338:18;;:::i;:::-;17322:36;17174:191;;;;:::o;17371:244::-;17511:34;17507:1;17499:6;17495:14;17488:58;17580:27;17575:2;17567:6;17563:15;17556:52;17371:244;:::o;17621:366::-;17763:3;17784:67;17848:2;17843:3;17784:67;:::i;:::-;17777:74;;17860:93;17949:3;17860:93;:::i;:::-;17978:2;17973:3;17969:12;17962:19;;17621:366;;;:::o;17993:419::-;18159:4;18197:2;18186:9;18182:18;18174:26;;18246:9;18240:4;18236:20;18232:1;18221:9;18217:17;18210:47;18274:131;18400:4;18274:131;:::i;:::-;18266:139;;17993:419;;;:::o;18418:224::-;18558:34;18554:1;18546:6;18542:14;18535:58;18627:7;18622:2;18614:6;18610:15;18603:32;18418:224;:::o;18648:366::-;18790:3;18811:67;18875:2;18870:3;18811:67;:::i;:::-;18804:74;;18887:93;18976:3;18887:93;:::i;:::-;19005:2;19000:3;18996:12;18989:19;;18648:366;;;:::o;19020:419::-;19186:4;19224:2;19213:9;19209:18;19201:26;;19273:9;19267:4;19263:20;19259:1;19248:9;19244:17;19237:47;19301:131;19427:4;19301:131;:::i;:::-;19293:139;;19020:419;;;:::o;19445:223::-;19585:34;19581:1;19573:6;19569:14;19562:58;19654:6;19649:2;19641:6;19637:15;19630:31;19445:223;:::o;19674:366::-;19816:3;19837:67;19901:2;19896:3;19837:67;:::i;:::-;19830:74;;19913:93;20002:3;19913:93;:::i;:::-;20031:2;20026:3;20022:12;20015:19;;19674:366;;;:::o;20046:419::-;20212:4;20250:2;20239:9;20235:18;20227:26;;20299:9;20293:4;20289:20;20285:1;20274:9;20270:17;20263:47;20327:131;20453:4;20327:131;:::i;:::-;20319:139;;20046:419;;;:::o;20471:225::-;20611:34;20607:1;20599:6;20595:14;20588:58;20680:8;20675:2;20667:6;20663:15;20656:33;20471:225;:::o;20702:366::-;20844:3;20865:67;20929:2;20924:3;20865:67;:::i;:::-;20858:74;;20941:93;21030:3;20941:93;:::i;:::-;21059:2;21054:3;21050:12;21043:19;;20702:366;;;:::o;21074:419::-;21240:4;21278:2;21267:9;21263:18;21255:26;;21327:9;21321:4;21317:20;21313:1;21302:9;21298:17;21291:47;21355:131;21481:4;21355:131;:::i;:::-;21347:139;;21074:419;;;:::o;21499:223::-;21639:34;21635:1;21627:6;21623:14;21616:58;21708:6;21703:2;21695:6;21691:15;21684:31;21499:223;:::o;21728:366::-;21870:3;21891:67;21955:2;21950:3;21891:67;:::i;:::-;21884:74;;21967:93;22056:3;21967:93;:::i;:::-;22085:2;22080:3;22076:12;22069:19;;21728:366;;;:::o;22100:419::-;22266:4;22304:2;22293:9;22289:18;22281:26;;22353:9;22347:4;22343:20;22339:1;22328:9;22324:17;22317:47;22381:131;22507:4;22381:131;:::i;:::-;22373:139;;22100:419;;;:::o;22525:221::-;22665:34;22661:1;22653:6;22649:14;22642:58;22734:4;22729:2;22721:6;22717:15;22710:29;22525:221;:::o;22752:366::-;22894:3;22915:67;22979:2;22974:3;22915:67;:::i;:::-;22908:74;;22991:93;23080:3;22991:93;:::i;:::-;23109:2;23104:3;23100:12;23093:19;;22752:366;;;:::o;23124:419::-;23290:4;23328:2;23317:9;23313:18;23305:26;;23377:9;23371:4;23367:20;23363:1;23352:9;23348:17;23341:47;23405:131;23531:4;23405:131;:::i;:::-;23397:139;;23124:419;;;:::o;23549:224::-;23689:34;23685:1;23677:6;23673:14;23666:58;23758:7;23753:2;23745:6;23741:15;23734:32;23549:224;:::o;23779:366::-;23921:3;23942:67;24006:2;24001:3;23942:67;:::i;:::-;23935:74;;24018:93;24107:3;24018:93;:::i;:::-;24136:2;24131:3;24127:12;24120:19;;23779:366;;;:::o;24151:419::-;24317:4;24355:2;24344:9;24340:18;24332:26;;24404:9;24398:4;24394:20;24390:1;24379:9;24375:17;24368:47;24432:131;24558:4;24432:131;:::i;:::-;24424:139;;24151:419;;;:::o;24576:222::-;24716:34;24712:1;24704:6;24700:14;24693:58;24785:5;24780:2;24772:6;24768:15;24761:30;24576:222;:::o;24804:366::-;24946:3;24967:67;25031:2;25026:3;24967:67;:::i;:::-;24960:74;;25043:93;25132:3;25043:93;:::i;:::-;25161:2;25156:3;25152:12;25145:19;;24804:366;;;:::o;25176:419::-;25342:4;25380:2;25369:9;25365:18;25357:26;;25429:9;25423:4;25419:20;25415:1;25404:9;25400:17;25393:47;25457:131;25583:4;25457:131;:::i;:::-;25449:139;;25176:419;;;:::o;25601:172::-;25741:24;25737:1;25729:6;25725:14;25718:48;25601:172;:::o;25779:366::-;25921:3;25942:67;26006:2;26001:3;25942:67;:::i;:::-;25935:74;;26018:93;26107:3;26018:93;:::i;:::-;26136:2;26131:3;26127:12;26120:19;;25779:366;;;:::o;26151:419::-;26317:4;26355:2;26344:9;26340:18;26332:26;;26404:9;26398:4;26394:20;26390:1;26379:9;26375:17;26368:47;26432:131;26558:4;26432:131;:::i;:::-;26424:139;;26151:419;;;:::o;26576:297::-;26716:34;26712:1;26704:6;26700:14;26693:58;26785:34;26780:2;26772:6;26768:15;26761:59;26854:11;26849:2;26841:6;26837:15;26830:36;26576:297;:::o;26879:366::-;27021:3;27042:67;27106:2;27101:3;27042:67;:::i;:::-;27035:74;;27118:93;27207:3;27118:93;:::i;:::-;27236:2;27231:3;27227:12;27220:19;;26879:366;;;:::o;27251:419::-;27417:4;27455:2;27444:9;27440:18;27432:26;;27504:9;27498:4;27494:20;27490:1;27479:9;27475:17;27468:47;27532:131;27658:4;27532:131;:::i;:::-;27524:139;;27251:419;;;:::o;27676:240::-;27816:34;27812:1;27804:6;27800:14;27793:58;27885:23;27880:2;27872:6;27868:15;27861:48;27676:240;:::o;27922:366::-;28064:3;28085:67;28149:2;28144:3;28085:67;:::i;:::-;28078:74;;28161:93;28250:3;28161:93;:::i;:::-;28279:2;28274:3;28270:12;28263:19;;27922:366;;;:::o;28294:419::-;28460:4;28498:2;28487:9;28483:18;28475:26;;28547:9;28541:4;28537:20;28533:1;28522:9;28518:17;28511:47;28575:131;28701:4;28575:131;:::i;:::-;28567:139;;28294:419;;;:::o;28719:169::-;28859:21;28855:1;28847:6;28843:14;28836:45;28719:169;:::o;28894:366::-;29036:3;29057:67;29121:2;29116:3;29057:67;:::i;:::-;29050:74;;29133:93;29222:3;29133:93;:::i;:::-;29251:2;29246:3;29242:12;29235:19;;28894:366;;;:::o;29266:419::-;29432:4;29470:2;29459:9;29455:18;29447:26;;29519:9;29513:4;29509:20;29505:1;29494:9;29490:17;29483:47;29547:131;29673:4;29547:131;:::i;:::-;29539:139;;29266:419;;;:::o;29691:241::-;29831:34;29827:1;29819:6;29815:14;29808:58;29900:24;29895:2;29887:6;29883:15;29876:49;29691:241;:::o;29938:366::-;30080:3;30101:67;30165:2;30160:3;30101:67;:::i;:::-;30094:74;;30177:93;30266:3;30177:93;:::i;:::-;30295:2;30290:3;30286:12;30279:19;;29938:366;;;:::o;30310:419::-;30476:4;30514:2;30503:9;30499:18;30491:26;;30563:9;30557:4;30553:20;30549:1;30538:9;30534:17;30527:47;30591:131;30717:4;30591:131;:::i;:::-;30583:139;;30310:419;;;:::o;30735:194::-;30775:4;30795:20;30813:1;30795:20;:::i;:::-;30790:25;;30829:20;30847:1;30829:20;:::i;:::-;30824:25;;30873:1;30870;30866:9;30858:17;;30897:1;30891:4;30888:11;30885:37;;;30902:18;;:::i;:::-;30885:37;30735:194;;;;:::o;30935:225::-;31075:34;31071:1;31063:6;31059:14;31052:58;31144:8;31139:2;31131:6;31127:15;31120:33;30935:225;:::o;31166:366::-;31308:3;31329:67;31393:2;31388:3;31329:67;:::i;:::-;31322:74;;31405:93;31494:3;31405:93;:::i;:::-;31523:2;31518:3;31514:12;31507:19;;31166:366;;;:::o;31538:419::-;31704:4;31742:2;31731:9;31727:18;31719:26;;31791:9;31785:4;31781:20;31777:1;31766:9;31762:17;31755:47;31819:131;31945:4;31819:131;:::i;:::-;31811:139;;31538:419;;;:::o;31963:147::-;32064:11;32101:3;32086:18;;31963:147;;;;:::o;32116:114::-;;:::o;32236:398::-;32395:3;32416:83;32497:1;32492:3;32416:83;:::i;:::-;32409:90;;32508:93;32597:3;32508:93;:::i;:::-;32626:1;32621:3;32617:11;32610:18;;32236:398;;;:::o;32640:379::-;32824:3;32846:147;32989:3;32846:147;:::i;:::-;32839:154;;33010:3;33003:10;;32640:379;;;:::o;33025:442::-;33174:4;33212:2;33201:9;33197:18;33189:26;;33225:71;33293:1;33282:9;33278:17;33269:6;33225:71;:::i;:::-;33306:72;33374:2;33363:9;33359:18;33350:6;33306:72;:::i;:::-;33388;33456:2;33445:9;33441:18;33432:6;33388:72;:::i;:::-;33025:442;;;;;;:::o;33473:180::-;33521:77;33518:1;33511:88;33618:4;33615:1;33608:15;33642:4;33639:1;33632:15;33659:180;33707:77;33704:1;33697:88;33804:4;33801:1;33794:15;33828:4;33825:1;33818:15;33845:143;33902:5;33933:6;33927:13;33918:22;;33949:33;33976:5;33949:33;:::i;:::-;33845:143;;;;:::o;33994:351::-;34064:6;34113:2;34101:9;34092:7;34088:23;34084:32;34081:119;;;34119:79;;:::i;:::-;34081:119;34239:1;34264:64;34320:7;34311:6;34300:9;34296:22;34264:64;:::i;:::-;34254:74;;34210:128;33994:351;;;;:::o;34351:85::-;34396:7;34425:5;34414:16;;34351:85;;;:::o;34442:158::-;34500:9;34533:61;34551:42;34560:32;34586:5;34560:32;:::i;:::-;34551:42;:::i;:::-;34533:61;:::i;:::-;34520:74;;34442:158;;;:::o;34606:147::-;34701:45;34740:5;34701:45;:::i;:::-;34696:3;34689:58;34606:147;;:::o;34759:114::-;34826:6;34860:5;34854:12;34844:22;;34759:114;;;:::o;34879:184::-;34978:11;35012:6;35007:3;35000:19;35052:4;35047:3;35043:14;35028:29;;34879:184;;;;:::o;35069:132::-;35136:4;35159:3;35151:11;;35189:4;35184:3;35180:14;35172:22;;35069:132;;;:::o;35207:108::-;35284:24;35302:5;35284:24;:::i;:::-;35279:3;35272:37;35207:108;;:::o;35321:179::-;35390:10;35411:46;35453:3;35445:6;35411:46;:::i;:::-;35489:4;35484:3;35480:14;35466:28;;35321:179;;;;:::o;35506:113::-;35576:4;35608;35603:3;35599:14;35591:22;;35506:113;;;:::o;35655:732::-;35774:3;35803:54;35851:5;35803:54;:::i;:::-;35873:86;35952:6;35947:3;35873:86;:::i;:::-;35866:93;;35983:56;36033:5;35983:56;:::i;:::-;36062:7;36093:1;36078:284;36103:6;36100:1;36097:13;36078:284;;;36179:6;36173:13;36206:63;36265:3;36250:13;36206:63;:::i;:::-;36199:70;;36292:60;36345:6;36292:60;:::i;:::-;36282:70;;36138:224;36125:1;36122;36118:9;36113:14;;36078:284;;;36082:14;36378:3;36371:10;;35779:608;;;35655:732;;;;:::o;36393:831::-;36656:4;36694:3;36683:9;36679:19;36671:27;;36708:71;36776:1;36765:9;36761:17;36752:6;36708:71;:::i;:::-;36789:80;36865:2;36854:9;36850:18;36841:6;36789:80;:::i;:::-;36916:9;36910:4;36906:20;36901:2;36890:9;36886:18;36879:48;36944:108;37047:4;37038:6;36944:108;:::i;:::-;36936:116;;37062:72;37130:2;37119:9;37115:18;37106:6;37062:72;:::i;:::-;37144:73;37212:3;37201:9;37197:19;37188:6;37144:73;:::i;:::-;36393:831;;;;;;;;:::o;37230:807::-;37479:4;37517:3;37506:9;37502:19;37494:27;;37531:71;37599:1;37588:9;37584:17;37575:6;37531:71;:::i;:::-;37612:72;37680:2;37669:9;37665:18;37656:6;37612:72;:::i;:::-;37694:80;37770:2;37759:9;37755:18;37746:6;37694:80;:::i;:::-;37784;37860:2;37849:9;37845:18;37836:6;37784:80;:::i;:::-;37874:73;37942:3;37931:9;37927:19;37918:6;37874:73;:::i;:::-;37957;38025:3;38014:9;38010:19;38001:6;37957:73;:::i;:::-;37230:807;;;;;;;;;:::o;38043:143::-;38100:5;38131:6;38125:13;38116:22;;38147:33;38174:5;38147:33;:::i;:::-;38043:143;;;;:::o;38192:663::-;38280:6;38288;38296;38345:2;38333:9;38324:7;38320:23;38316:32;38313:119;;;38351:79;;:::i;:::-;38313:119;38471:1;38496:64;38552:7;38543:6;38532:9;38528:22;38496:64;:::i;:::-;38486:74;;38442:128;38609:2;38635:64;38691:7;38682:6;38671:9;38667:22;38635:64;:::i;:::-;38625:74;;38580:129;38748:2;38774:64;38830:7;38821:6;38810:9;38806:22;38774:64;:::i;:::-;38764:74;;38719:129;38192:663;;;;;:::o

Swarm Source

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