ETH Price: $2,377.57 (-0.49%)

Token

MemeStation (Memes)
 

Overview

Max Total Supply

10,000,000 Memes

Holders

285 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.453782963510113582 Memes

Value
$0.00
0x6b746ff4c150eb920185a799360ea6d049cb8a53
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Platform for memes designed for global impact. Add text, images, and stickers to a meme template, then save your creation. Using the built-in meme, GIF, and video editor.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
MemeStation

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-08-30
*/

/**
 * SPDX-License-Identifier: MIT

 Twitter: https://Twitter.com/Memestationeth
 Docs: https://memestation.gitbook.io/memestation/
 Website: https://www.memestationerc.com
 Telegram: https://t.me/memestationerc
 */
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 Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

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

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

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

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

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

interface IERC20Errors {
    /**
     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param balance Current balance for the interacting account.
     * @param needed Minimum amount required to perform a transfer.
     */
    error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC20InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC20InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.
     * @param spender Address that may be allowed to operate on tokens without being their owner.
     * @param allowance Amount of tokens a `spender` is allowed to operate with.
     * @param needed Minimum amount required to perform a transfer.
     */
    error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC20InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `spender` to be approved. Used in approvals.
     * @param spender Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC20InvalidSpender(address spender);
}

abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {
    mapping(address account => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Indicates a failed `decreaseAllowance` request.
     */
    error ERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease);

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

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

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

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

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

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

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

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

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

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `requestedDecrease`.
     *
     * NOTE: Although this function is designed to avoid double spending with {approval},
     * it can still be frontrunned, preventing any attempt of allowance reduction.
     */
    function decreaseAllowance(address spender, uint256 requestedDecrease) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance < requestedDecrease) {
            revert ERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease);
        }
        unchecked {
            _approve(owner, spender, currentAllowance - requestedDecrease);
        }

        return true;
    }

    /**
     * @dev Moves a `value` amount of tokens from `from` to `to`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead.
     */
    function _transfer(address from, address to, uint256 value) internal {
        if (from == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        if (to == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(from, to, value);
    }

    /**
     * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from` (or `to`) is
     * the zero address. All customizations to transfers, mints, and burns should be done by overriding this function.
     *
     * Emits a {Transfer} event.
     */
    function _update(address from, address to, uint256 value) internal virtual {
        if (from == address(0)) {
            // Overflow check required: The rest of the code assumes that totalSupply never overflows
            _totalSupply += value;
        } else {
            uint256 fromBalance = _balances[from];
            if (fromBalance < value) {
                revert ERC20InsufficientBalance(from, fromBalance, value);
            }
            unchecked {
                // Overflow not possible: value <= fromBalance <= totalSupply.
                _balances[from] = fromBalance - value;
            }
        }

        if (to == address(0)) {
            unchecked {
                // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.
                _totalSupply -= value;
            }
        } else {
            unchecked {
                // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.
                _balances[to] += value;
            }
        }

        emit Transfer(from, to, value);
    }

    /**
     * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).
     * Relies on the `_update` mechanism
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead.
     */
    function _mint(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(address(0), account, value);
    }

    /**
     * @dev Destroys a `value` amount of tokens from `account`, by transferring it to address(0).
     * Relies on the `_update` mechanism.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead
     */
    function _burn(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        _update(account, address(0), value);
    }

    /**
     * @dev Sets `value` 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 value) internal virtual {
        _approve(owner, spender, value, true);
    }

    /**
     * @dev Alternative version of {_approve} with an optional flag that can enable or disable the Approval event.
     *
     * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by
     * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any
     * `Approval` event during `transferFrom` operations.
     *
     * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to true
     * using the following override:
     * ```
     * function _approve(address owner, address spender, uint256 value, bool) internal virtual override {
     *     super._approve(owner, spender, value, true);
     * }
     * ```
     *
     * Requirements are the same as {_approve}.
     */
    function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {
        if (owner == address(0)) {
            revert ERC20InvalidApprover(address(0));
        }
        if (spender == address(0)) {
            revert ERC20InvalidSpender(address(0));
        }
        _allowances[owner][spender] = value;
        if (emitEvent) {
            emit Approval(owner, spender, value);
        }
    }

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

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 IDexFactory {
    function createPair(
        address tokenA,
        address tokenB
    ) external returns (address pair);
}

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

    function WETH() external pure returns (address);

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

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

    IDexRouter public immutable dexRouter;
    address public immutable dexPair;

    // Swapback
    bool private duringContractSell;
    bool public contractSellEnabled = false;
    uint256 public minBalanceForContractSell;
    uint256 public maxAmountTokensForContractSell;

    //Anti-whale
    bool public tradingLimitsOn = true;
    bool public limitTxsPerBlock = true;
    uint256 public maxHold;
    uint256 public maxTx;
    mapping(address => uint256) private _addressLastTransfer; // to hold last Transfers temporarily during launch

    // Blacklist
    mapping(address => bool) public blacklisted;
    bool public canSetBlacklist = true;

    // Fee receivers
    address public treasuryWallet;
    address public projectWallet;

    bool public tokenLaunched = false;

    uint256 public buyFeesTotal;
    uint256 public treasuryFeeBuy;
    uint256 public projectFeeBuy;

    uint256 public sellFeesTotal;
    uint256 public treasuryFeeSell;
    uint256 public projectFeeSell;

    uint256 public tokensToSwapTreasury;
    uint256 public tokensToSwapProject;

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

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

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

    event FeeWhitelist(address indexed account, bool isExcluded);

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

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

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

    constructor() ERC20("MemeStation", "Memes") {
        IDexRouter _dexRouter = IDexRouter(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        txLimitsWhitelist(address(_dexRouter), true);
        dexRouter = _dexRouter;

        dexPair = IDexFactory(_dexRouter.factory())
            .createPair(address(this), _dexRouter.WETH());
        txLimitsWhitelist(address(dexPair), true);
        _setAutomatedMarketMakerPair(address(dexPair), true);

        uint256 _treasuryFeeBuy = 0;
        uint256 _projectFeeBuy = 20;

        uint256 _treasuryFeeSell = 0;
        uint256 _projectFeeSell = 20;

        uint256 tokenSupply = 10000000 * 1e18;

        maxTx = (tokenSupply * 20) / 1000; // 2% of total supply
        maxHold = (tokenSupply * 20) / 1000; // 2% of total supply

        minBalanceForContractSell = (tokenSupply * 5) / 10000; // 0.05% swapback trigger
        maxAmountTokensForContractSell = (tokenSupply * 1) / 100; // 1% max swapback

        treasuryFeeBuy = _treasuryFeeBuy;
        projectFeeBuy = _projectFeeBuy;
        buyFeesTotal = treasuryFeeBuy + projectFeeBuy;

        treasuryFeeSell = _treasuryFeeSell;
        projectFeeSell = _projectFeeSell;
        sellFeesTotal = treasuryFeeSell + projectFeeSell;

        treasuryWallet = address(msg.sender);
        projectWallet = address(msg.sender);

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

        txLimitsWhitelist(owner(), true);
        txLimitsWhitelist(address(this), true);
        txLimitsWhitelist(address(0xdead), true);
        txLimitsWhitelist(treasuryWallet, true);

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

    receive() external payable {}

    /// @notice Launches the token and enables trading. Irriversable.
    function startLaunch() external onlyOwner {
        tokenLaunched = true;
        contractSellEnabled = true;
    }

    /// @notice Removes the max wallet and max transaction limits
    function finishLaunchPeriod() external onlyOwner returns (bool) {
        tradingLimitsOn = false;
        return true;
    }

    /// @notice Disables the Same wallet block transfer delay
    function disableBlockTxLimit() external onlyOwner returns (bool) {
        limitTxsPerBlock = false;
        return true;
    }

    /// @notice Changes the minimum balance of tokens the contract must have before duringContractSell tokens for ETH. Base 100000, so 0.5% = 500.
    function updateContractSellMin(
        uint256 newAmount
    ) external onlyOwner returns (bool) {
        require(
            newAmount >= totalSupply() / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (500 * totalSupply()) / 100000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        require(
            newAmount <= maxAmountTokensForContractSell,
            "Swap amount cannot be higher than maxAmountTokensForContractSell"
        );
        minBalanceForContractSell = newAmount;
        return true;
    }

    /// @notice Changes the maximum amount of tokens the contract can swap for ETH. Base 10000, so 0.5% = 50.
    function updateMaxContractSellAmount(
        uint256 newAmount
    ) external onlyOwner returns (bool) {
        require(
            newAmount >= minBalanceForContractSell,
            "Swap amount cannot be lower than minBalanceForContractSell"
        );
        maxAmountTokensForContractSell = newAmount;
        return true;
    }

    /// @notice 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 maxTx lower than 0.2%");
        maxTx = (newNum * totalSupply()) / 1000;
    }

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

    /// @notice 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 txLimitsWhitelist(
        address updAds,
        bool isEx
    ) public onlyOwner {
        exemptFromMaxLimits[updAds] = isEx;
    }

    /// @notice Sets if the contract can sell tokens
    /// @param enabled set to false to disable selling
    function setContractSellEnabled(bool enabled) external onlyOwner {
        contractSellEnabled = enabled;
    }

    /// @notice Sets the fees for buys
    /// @param _treasuryFee The fee for the treasury wallet
    /// @param _projectFee The fee for the dev wallet
    function setBuyFees(
        uint256 _treasuryFee,
        uint256 _projectFee
    ) external onlyOwner {
        treasuryFeeBuy = _treasuryFee;
        projectFeeBuy = _projectFee;
        buyFeesTotal = treasuryFeeBuy + projectFeeBuy;
        require(buyFeesTotal <= 12, "Must keep fees at 12% or less");
    }

    /// @notice Sets the fees for sells
    /// @param _treasuryFee The fee for the treasury wallet
    /// @param _projectFee The fee for the dev wallet
    function setSellFees(
        uint256 _treasuryFee,
        uint256 _projectFee
    ) external onlyOwner {
        treasuryFeeSell = _treasuryFee;
        projectFeeSell = _projectFee;
        sellFeesTotal = treasuryFeeSell + projectFeeSell;
        require(sellFeesTotal <= 12, "Must keep fees at 12% or less");
    }

    /// @notice 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 {
        exemptFromFees[account] = excluded;
        emit FeeWhitelist(account, excluded);
    }

    /// @notice 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 != dexPair,
            "The pair cannot be removed from isAMMPair"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAMMPair(pair, value);
    }

    /// @notice Sets a wallet as the new treasury wallet
    /// @param newTreasuryWallet The new treasury wallet
    function updateTreasuryWallet(
        address newTreasuryWallet
    ) external onlyOwner {
        emit treasuryWalletUpdated(newTreasuryWallet, treasuryWallet);
        treasuryWallet = newTreasuryWallet;
    }

    /// @notice Sets a wallet as the new dev wallet
    /// @param newWallet The new dev wallet
    function updateProjectWallet(address newWallet) external onlyOwner {
        emit projectWalletUpdated(newWallet, projectWallet);
        projectWallet = newWallet;
    }

    /// @notice Sets the blacklist status of multiple addresses
    /// @param addresses The addresses to update
    /// @param isBlacklisted If the addresses are blacklisted or not
    function updateBlacklistMultiple(
        address[] calldata addresses,
        bool isBlacklisted
    ) external onlyOwner {
        require(canSetBlacklist, "Blacklist is locked");
        for (uint256 i = 0; i < addresses.length; i++) {
            blacklisted[addresses[i]] = isBlacklisted;
        }
    }

    /// @notice Removes the owner ability to change the blacklist
    function lockBlacklist() external onlyOwner {
        canSetBlacklist = false;
    }

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

    function _update(
        address from,
        address to,
        uint256 amount
    ) internal override {
        if (amount == 0) {
            super._update(from, to, 0);
            return;
        }

        if (tradingLimitsOn) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !duringContractSell
            ) {
                if (!tokenLaunched) {
                    require(
                        exemptFromFees[from] || exemptFromFees[to],
                        "Trading is not active."
                    );
                }

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

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

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= minBalanceForContractSell;

        if (
            canSwap &&
            contractSellEnabled &&
            !duringContractSell &&
            !isAMMPair[from] &&
            !exemptFromFees[from] &&
            !exemptFromFees[to]
        ) {
            duringContractSell = true;

            swapBack();

            duringContractSell = false;
        }

        bool takeFee = !duringContractSell;

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

        if (!exemptFromFees[from] || !exemptFromFees[to]) {
            require(!blacklisted[from], "Address is blacklisted");
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (isAMMPair[to] && sellFeesTotal > 0) {
                fees = amount.mul(sellFeesTotal).div(100);
                tokensToSwapProject += (fees * projectFeeSell) / sellFeesTotal;
                tokensToSwapTreasury += (fees * treasuryFeeSell) / sellFeesTotal;
            }
            // on buy
            else if (isAMMPair[from] && buyFeesTotal > 0) {
                fees = amount.mul(buyFeesTotal).div(100);
                tokensToSwapProject += (fees * projectFeeBuy) / buyFeesTotal;
                tokensToSwapTreasury += (fees * treasuryFeeBuy) / buyFeesTotal;
            }

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

            amount -= fees;
        }

        super._update(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] = dexRouter.WETH();

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

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

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

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

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

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(contractBalance);

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

        uint256 ethForProject = ethBalance.mul(tokensToSwapProject).div(totalTokensToSwap);

        tokensToSwapTreasury = 0;
        tokensToSwapProject = 0;

        (success, ) = address(projectWallet).call{value: ethForProject}("");

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

    /// @notice Airdrop function for relaunch
    /// @param addresses The addresses to airdrop to
    /// @param amounts The amounts to airdrop to each address, in order
    function airdrop(address[] calldata addresses, uint256[] calldata amounts)
        external
        onlyOwner
    {
        require(addresses.length == amounts.length, "Mismatched inputs");
        for (uint256 i = 0; i < addresses.length; i++) {
            super._update(msg.sender, addresses[i], amounts[i]);
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"currentAllowance","type":"uint256"},{"internalType":"uint256","name":"requestedDecrease","type":"uint256"}],"name":"ERC20FailedDecreaseAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"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":"FeeWhitelist","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":"SetAMMPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"projectWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"treasuryWalletUpdated","type":"event"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","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":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFeesTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"canSetBlacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractSellEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"requestedDecrease","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableBlockTxLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"","type":"address"}],"name":"exemptFromMaxLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"finishLaunchPeriod","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"","type":"address"}],"name":"isAMMPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitTxsPerBlock","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxAmountTokensForContractSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxHold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minBalanceForContractSell","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":"projectFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"projectFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"projectWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFeesTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_projectFee","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setContractSellEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_projectFee","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startLaunch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenLaunched","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensToSwapProject","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensToSwapTreasury","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":"tradingLimitsOn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","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":"treasuryFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"txLimitsWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"isBlacklisted","type":"bool"}],"name":"updateBlacklistMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateContractSellMin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateMaxContractSellAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxHoldAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateProjectWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newTreasuryWallet","type":"address"}],"name":"updateTreasuryWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526000600560156101000a81548160ff0219169083151502179055506001600860006101000a81548160ff0219169083151502179055506001600860016101000a81548160ff0219169083151502179055506001600d60006101000a81548160ff0219169083151502179055506000600e60146101000a81548160ff0219169083151502179055503480156200009857600080fd5b506040518060400160405280600b81526020017f4d656d6553746174696f6e0000000000000000000000000000000000000000008152506040518060400160405280600581526020017f4d656d6573000000000000000000000000000000000000000000000000000000815250816003908162000116919062002273565b50806004908162000128919062002273565b5050506200014b6200013f6200060460201b60201c565b6200060c60201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905062000177816001620006d260201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001f7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021d9190620023c4565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000285573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ab9190620023c4565b6040518363ffffffff1660e01b8152600401620002ca92919062002407565b6020604051808303816000875af1158015620002ea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003109190620023c4565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200035860a0516001620006d260201b60201c565b6200036d60a0516001620007bc60201b60201c565b600080601490506000806014905060006a084595161401484a00000090506103e86014826200039d919062002463565b620003a99190620024dd565b600a819055506103e8601482620003c1919062002463565b620003cd9190620024dd565b600981905550612710600582620003e5919062002463565b620003f19190620024dd565b600681905550606460018262000408919062002463565b620004149190620024dd565b60078190555084601081905550836011819055506011546010546200043a919062002515565b600f81905550826013819055508160148190555060145460135462000460919062002515565b60128190555033600d60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200050a620004fc6200085d60201b60201c565b60016200088760201b60201c565b6200051d3060016200088760201b60201c565b6200053261dead60016200088760201b60201c565b62000567600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200088760201b60201c565b620005896200057b6200085d60201b60201c565b6001620006d260201b60201c565b6200059c306001620006d260201b60201c565b620005b161dead6001620006d260201b60201c565b620005e6600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620006d260201b60201c565b620005f83382620009c160201b60201c565b50505050505062002c04565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620006e26200060460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620007086200085d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000761576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200075890620025b1565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fee6ce3a11a74f9a94b8a0152fc219acc6645b25bc298e2cae8ec6a520bd83da960405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008976200060460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620008bd6200085d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000916576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200090d90620025b1565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f781d26db56cdaee11e2fce438cd1461fa45f059fcd5f02aa8e6b1e5716d8d46582604051620009b59190620025f0565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a365760006040517fec442f0500000000000000000000000000000000000000000000000000000000815260040162000a2d91906200260d565b60405180910390fd5b62000a4a6000838362000a4e60201b60201c565b5050565b6000810362000a715762000a6b838360006200174c60201b60201c565b62001747565b600860009054906101000a900460ff1615620011495762000a976200085d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801562000b0e575062000ade6200085d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801562000b485750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801562000b83575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801562000b9d5750600560149054906101000a900460ff16155b156200114857600e60149054906101000a900460ff1662000c9d57601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168062000c5a5750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b62000c9c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c93906200267a565b60405180910390fd5b5b600860019054906101000a900460ff161562000e385762000cc36200085d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801562000d2d575060805173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801562000d68575060a05173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1562000e375743600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541062000df2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000de99062002738565b60405180910390fd5b43600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801562000edc5750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1562000f9557600a5481111562000f2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000f2190620027d0565b60405180910390fd5b60095462000f3e836200197c60201b60201c565b8262000f4b919062002515565b111562000f8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000f869062002842565b60405180910390fd5b62001147565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015620010395750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156200108d57600a5481111562001087576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200107e90620028da565b60405180910390fd5b62001146565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166200114557600954620010f3836200197c60201b60201c565b8262001100919062002515565b111562001144576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200113b9062002842565b60405180910390fd5b5b5b5b5b5b60006200115c306200197c60201b60201c565b905060006006548210159050808015620011825750600560159054906101000a900460ff165b80156200119c5750600560149054906101000a900460ff16155b8015620011f35750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156200124a5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015620012a15750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15620012ee576001600560146101000a81548160ff021916908315150217905550620012d2620019c460201b60201c565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680620013a55750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15620013b057600090505b601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580620014545750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15620014eb57600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615620014ea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620014e1906200294c565b60405180910390fd5b5b600081156200172f57601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156200155057506000601254115b15620015fc57620015826064620015736012548862001bbb60201b90919060201c565b62001bd360201b90919060201c565b90506012546014548262001597919062002463565b620015a39190620024dd565b60166000828254620015b6919062002515565b9250508190555060125460135482620015d0919062002463565b620015dc9190620024dd565b60156000828254620015ef919062002515565b9250508190555062001700565b601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156200165857506000600f54115b15620016ff576200168a60646200167b600f548862001bbb60201b90919060201c565b62001bd360201b90919060201c565b9050600f54601154826200169f919062002463565b620016ab9190620024dd565b60166000828254620016be919062002515565b92505081905550600f5460105482620016d8919062002463565b620016e49190620024dd565b60156000828254620016f7919062002515565b925050819055505b5b60008111156200171e576200171d8730836200174c60201b60201c565b5b80856200172c91906200296e565b94505b620017428787876200174c60201b60201c565b505050505b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620017a257806002600082825462001795919062002515565b9250508190555062001878565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101562001831578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016200182893929190620029ba565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620018c3578060026000828254039250508190555062001910565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200196f9190620029f7565b60405180910390a3505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000620019d7306200197c60201b60201c565b90506000601654601554620019ed919062002515565b905060008083148062001a005750600082145b1562001a0f5750505062001bb9565b60075483111562001a205760075492505b600047905062001a368462001beb60201b60201c565b600062001a4d824762001de760201b90919060201c565b9050600062001a7c8562001a6d6016548562001bbb60201b90919060201c565b62001bd360201b90919060201c565b905060006015819055506000601681905550600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405162001ad69062002a49565b60006040518083038185875af1925050503d806000811462001b15576040519150601f19603f3d011682016040523d82523d6000602084013e62001b1a565b606091505b505080945050600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405162001b689062002a49565b60006040518083038185875af1925050503d806000811462001ba7576040519150601f19603f3d011682016040523d82523d6000602084013e62001bac565b606091505b5050809450505050505050505b565b6000818362001bcb919062002463565b905092915050565b6000818362001be39190620024dd565b905092915050565b6000600267ffffffffffffffff81111562001c0b5762001c0a62002004565b5b60405190808252806020026020018201604052801562001c3a5781602001602082028036833780820191505090505b509050308160008151811062001c555762001c5462002a60565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060805173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001cdd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001d039190620023c4565b8160018151811062001d1a5762001d1962002a60565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505062001d69306080518462001dff60201b60201c565b60805173ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040162001daf95949392919062002ba0565b600060405180830381600087803b15801562001dca57600080fd5b505af115801562001ddf573d6000803e3d6000fd5b505050505050565b6000818362001df791906200296e565b905092915050565b62001e14838383600162001e1960201b60201c565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160362001e8e5760006040517fe602df0500000000000000000000000000000000000000000000000000000000815260040162001e8591906200260d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362001f035760006040517f94280d6200000000000000000000000000000000000000000000000000000000815260040162001efa91906200260d565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550801562001ff3578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405162001fea9190620029f7565b60405180910390a35b50505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200207b57607f821691505b60208210810362002091576200209062002033565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620020fb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620020bc565b620021078683620020bc565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620021546200214e62002148846200211f565b62002129565b6200211f565b9050919050565b6000819050919050565b620021708362002133565b620021886200217f826200215b565b848454620020c9565b825550505050565b600090565b6200219f62002190565b620021ac81848462002165565b505050565b5b81811015620021d457620021c860008262002195565b600181019050620021b2565b5050565b601f8211156200222357620021ed8162002097565b620021f884620020ac565b8101602085101562002208578190505b620022206200221785620020ac565b830182620021b1565b50505b505050565b600082821c905092915050565b6000620022486000198460080262002228565b1980831691505092915050565b600062002263838362002235565b9150826002028217905092915050565b6200227e8262001ff9565b67ffffffffffffffff8111156200229a576200229962002004565b5b620022a6825462002062565b620022b3828285620021d8565b600060209050601f831160018114620022eb5760008415620022d6578287015190505b620022e2858262002255565b86555062002352565b601f198416620022fb8662002097565b60005b828110156200232557848901518255600182019150602085019450602081019050620022fe565b8683101562002345578489015162002341601f89168262002235565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200238c826200235f565b9050919050565b6200239e816200237f565b8114620023aa57600080fd5b50565b600081519050620023be8162002393565b92915050565b600060208284031215620023dd57620023dc6200235a565b5b6000620023ed84828501620023ad565b91505092915050565b62002401816200237f565b82525050565b60006040820190506200241e6000830185620023f6565b6200242d6020830184620023f6565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062002470826200211f565b91506200247d836200211f565b92508282026200248d816200211f565b91508282048414831517620024a757620024a662002434565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620024ea826200211f565b9150620024f7836200211f565b9250826200250a5762002509620024ae565b5b828204905092915050565b600062002522826200211f565b91506200252f836200211f565b92508282019050808211156200254a576200254962002434565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200259960208362002550565b9150620025a68262002561565b602082019050919050565b60006020820190508181036000830152620025cc816200258a565b9050919050565b60008115159050919050565b620025ea81620025d3565b82525050565b6000602082019050620026076000830184620025df565b92915050565b6000602082019050620026246000830184620023f6565b92915050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006200266260168362002550565b91506200266f826200262a565b602082019050919050565b60006020820190508181036000830152620026958162002653565b9050919050565b7f5f7570646174653a3a205472616e736665722044656c617920656e61626c656460008201527f2e20204f6e6c79206f6e652070757263686173652070657220626c6f636b206160208201527f6c6c6f7765642e00000000000000000000000000000000000000000000000000604082015250565b60006200272060478362002550565b91506200272d826200269c565b606082019050919050565b60006020820190508181036000830152620027538162002711565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b6000620027b860268362002550565b9150620027c5826200275a565b604082019050919050565b60006020820190508181036000830152620027eb81620027a9565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006200282a60138362002550565b91506200283782620027f2565b602082019050919050565b600060208201905081810360008301526200285d816200281b565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b6000620028c260278362002550565b9150620028cf8262002864565b604082019050919050565b60006020820190508181036000830152620028f581620028b3565b9050919050565b7f4164647265737320697320626c61636b6c697374656400000000000000000000600082015250565b60006200293460168362002550565b91506200294182620028fc565b602082019050919050565b60006020820190508181036000830152620029678162002925565b9050919050565b60006200297b826200211f565b915062002988836200211f565b9250828203905081811115620029a357620029a262002434565b5b92915050565b620029b4816200211f565b82525050565b6000606082019050620029d16000830186620023f6565b620029e06020830185620029a9565b620029ef6040830184620029a9565b949350505050565b600060208201905062002a0e6000830184620029a9565b92915050565b600081905092915050565b50565b600062002a3160008362002a14565b915062002a3e8262002a1f565b600082019050919050565b600062002a568262002a22565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b600062002aba62002ab462002aae8462002a8f565b62002129565b6200211f565b9050919050565b62002acc8162002a99565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b62002b09816200237f565b82525050565b600062002b1d838362002afe565b60208301905092915050565b6000602082019050919050565b600062002b438262002ad2565b62002b4f818562002add565b935062002b5c8362002aee565b8060005b8381101562002b9357815162002b77888262002b0f565b975062002b848362002b29565b92505060018101905062002b60565b5085935050505092915050565b600060a08201905062002bb76000830188620029a9565b62002bc6602083018762002ac1565b818103604083015262002bda818662002b36565b905062002beb6060830185620023f6565b62002bfa6080830184620029a9565b9695505050505050565b60805160a0516151a662002c5460003960008181611c58015281816124b90152612fb4015260008181610f8001528181612f5c01528181613c0401528181613ce50152613d0c01526151a66000f3fe60806040526004361061037a5760003560e01c8063809d458d116101d1578063b2d8f20811610102578063d6dc84cc116100a0578063de78e78a1161006f578063de78e78a14610d03578063f242ab4114610d2e578063f2fde38b14610d59578063f799b2c814610d8257610381565b8063d6dc84cc14610c35578063dbac26e914610c60578063dcbc1b5614610c9d578063dd62ed3e14610cc657610381565b8063beb08ab9116100dc578063beb08ab914610b79578063c024666814610ba4578063c463b99514610bcd578063d6bb961214610bf857610381565b8063b2d8f20814610afa578063b633200214610b23578063bbd2f21a14610b4e57610381565b80639a6c614e1161016f5780639fd8234e116101495780639fd8234e14610a1a578063a457c2d714610a43578063a9059cbb14610a80578063b0249cc614610abd57610381565b80639a6c614e1461099b5780639a7a23d6146109c65780639b77884d146109ef57610381565b80638da5cb5b116101ab5780638da5cb5b146108f15780638fbef0971461091c5780639125ff841461094557806395d89b411461097057610381565b8063809d458d14610860578063830804c9146108895780638d1942a7146108b457610381565b806343278c61116102ab5780636c53c8f711610249578063719276281161022357806371927628146107b6578063727fd358146107df5780637437681e1461080a5780637e7e5acc1461083557610381565b80636c53c8f71461073757806370a0823114610762578063715018a61461079f57610381565b80634fbee193116102855780634fbee1931461069157806359a945e9146106ce57806365954704146106e5578063672434821461070e57610381565b806343278c61146106105780634626402b1461063b57806348b98ef51461066657610381565b806318160ddd1161031857806323b872dd116102f257806323b872dd14610542578063313ce5671461057f57806339509351146105aa5780633b7b6a10146105e757610381565b806318160ddd146104c35780631a2953fe146104ee578063203e727e1461051957610381565b806306fdde031161035457806306fdde03146103f35780630758d9241461041e578063095ea7b31461044957806311aa0ee51461048657610381565b806303a88e801461038657806303a928eb146103b157806304019c14146103c857610381565b3661038157005b600080fd5b34801561039257600080fd5b5061039b610dad565b6040516103a89190613dd3565b60405180910390f35b3480156103bd57600080fd5b506103c6610e4d565b005b3480156103d457600080fd5b506103dd610ee6565b6040516103ea9190613e07565b60405180910390f35b3480156103ff57600080fd5b50610408610eec565b6040516104159190613eb2565b60405180910390f35b34801561042a57600080fd5b50610433610f7e565b6040516104409190613f53565b60405180910390f35b34801561045557600080fd5b50610470600480360381019061046b9190613fe2565b610fa2565b60405161047d9190613dd3565b60405180910390f35b34801561049257600080fd5b506104ad60048036038101906104a89190614022565b610fc5565b6040516104ba9190613dd3565b60405180910390f35b3480156104cf57600080fd5b506104d8610fe5565b6040516104e59190613e07565b60405180910390f35b3480156104fa57600080fd5b50610503610fef565b6040516105109190613dd3565b60405180910390f35b34801561052557600080fd5b50610540600480360381019061053b919061404f565b611002565b005b34801561054e57600080fd5b506105696004803603810190610564919061407c565b6110eb565b6040516105769190613dd3565b60405180910390f35b34801561058b57600080fd5b5061059461111a565b6040516105a191906140eb565b60405180910390f35b3480156105b657600080fd5b506105d160048036038101906105cc9190613fe2565b611123565b6040516105de9190613dd3565b60405180910390f35b3480156105f357600080fd5b5061060e6004803603810190610609919061404f565b61115a565b005b34801561061c57600080fd5b50610625611243565b6040516106329190613e07565b60405180910390f35b34801561064757600080fd5b50610650611249565b60405161065d9190614115565b60405180910390f35b34801561067257600080fd5b5061067b61126f565b6040516106889190613dd3565b60405180910390f35b34801561069d57600080fd5b506106b860048036038101906106b39190614022565b611282565b6040516106c59190613dd3565b60405180910390f35b3480156106da57600080fd5b506106e36112d8565b005b3480156106f157600080fd5b5061070c6004803603810190610707919061415c565b61138c565b005b34801561071a57600080fd5b5061073560048036038101906107309190614244565b611425565b005b34801561074357600080fd5b5061074c61155c565b6040516107599190613dd3565b60405180910390f35b34801561076e57600080fd5b5061078960048036038101906107849190614022565b61156f565b6040516107969190613e07565b60405180910390f35b3480156107ab57600080fd5b506107b46115b7565b005b3480156107c257600080fd5b506107dd60048036038101906107d89190614022565b61163f565b005b3480156107eb57600080fd5b506107f461177b565b6040516108019190613e07565b60405180910390f35b34801561081657600080fd5b5061081f611781565b60405161082c9190613e07565b60405180910390f35b34801561084157600080fd5b5061084a611787565b6040516108579190613e07565b60405180910390f35b34801561086c57600080fd5b5061088760048036038101906108829190614022565b61178d565b005b34801561089557600080fd5b5061089e6118c9565b6040516108ab9190613e07565b60405180910390f35b3480156108c057600080fd5b506108db60048036038101906108d6919061404f565b6118cf565b6040516108e89190613dd3565b60405180910390f35b3480156108fd57600080fd5b506109066119a2565b6040516109139190614115565b60405180910390f35b34801561092857600080fd5b50610943600480360381019061093e91906142c5565b6119cc565b005b34801561095157600080fd5b5061095a611b3c565b6040516109679190613e07565b60405180910390f35b34801561097c57600080fd5b50610985611b42565b6040516109929190613eb2565b60405180910390f35b3480156109a757600080fd5b506109b0611bd4565b6040516109bd9190613e07565b60405180910390f35b3480156109d257600080fd5b506109ed60048036038101906109e89190614325565b611bda565b005b3480156109fb57600080fd5b50610a04611cf2565b604051610a119190613e07565b60405180910390f35b348015610a2657600080fd5b50610a416004803603810190610a3c9190614365565b611cf8565b005b348015610a4f57600080fd5b50610a6a6004803603810190610a659190613fe2565b611de2565b604051610a779190613dd3565b60405180910390f35b348015610a8c57600080fd5b50610aa76004803603810190610aa29190613fe2565b611e5f565b604051610ab49190613dd3565b60405180910390f35b348015610ac957600080fd5b50610ae46004803603810190610adf9190614022565b611e82565b604051610af19190613dd3565b60405180910390f35b348015610b0657600080fd5b50610b216004803603810190610b1c9190614365565b611ea2565b005b348015610b2f57600080fd5b50610b38611f8c565b604051610b459190613dd3565b60405180910390f35b348015610b5a57600080fd5b50610b63611f9f565b604051610b709190613e07565b60405180910390f35b348015610b8557600080fd5b50610b8e611fa5565b604051610b9b9190614115565b60405180910390f35b348015610bb057600080fd5b50610bcb6004803603810190610bc69190614325565b611fcb565b005b348015610bd957600080fd5b50610be26120f0565b604051610bef9190613dd3565b60405180910390f35b348015610c0457600080fd5b50610c1f6004803603810190610c1a919061404f565b612190565b604051610c2c9190613dd3565b60405180910390f35b348015610c4157600080fd5b50610c4a612320565b604051610c579190613e07565b60405180910390f35b348015610c6c57600080fd5b50610c876004803603810190610c829190614022565b612326565b604051610c949190613dd3565b60405180910390f35b348015610ca957600080fd5b50610cc46004803603810190610cbf9190614325565b612346565b005b348015610cd257600080fd5b50610ced6004803603810190610ce891906143a5565b61241d565b604051610cfa9190613e07565b60405180910390f35b348015610d0f57600080fd5b50610d186124a4565b604051610d259190613dd3565b60405180910390f35b348015610d3a57600080fd5b50610d436124b7565b604051610d509190614115565b60405180910390f35b348015610d6557600080fd5b50610d806004803603810190610d7b9190614022565b6124db565b005b348015610d8e57600080fd5b50610d976125d2565b604051610da49190613e07565b60405180910390f35b6000610db76125d8565b73ffffffffffffffffffffffffffffffffffffffff16610dd56119a2565b73ffffffffffffffffffffffffffffffffffffffff1614610e2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2290614431565b60405180910390fd5b6000600860016101000a81548160ff0219169083151502179055506001905090565b610e556125d8565b73ffffffffffffffffffffffffffffffffffffffff16610e736119a2565b73ffffffffffffffffffffffffffffffffffffffff1614610ec9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec090614431565b60405180910390fd5b6000600d60006101000a81548160ff021916908315150217905550565b60165481565b606060038054610efb90614480565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2790614480565b8015610f745780601f10610f4957610100808354040283529160200191610f74565b820191906000526020600020905b815481529060010190602001808311610f5757829003601f168201915b5050505050905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080610fad6125d8565b9050610fba8185856125e0565b600191505092915050565b60186020528060005260406000206000915054906101000a900460ff1681565b6000600254905090565b600860019054906101000a900460ff1681565b61100a6125d8565b73ffffffffffffffffffffffffffffffffffffffff166110286119a2565b73ffffffffffffffffffffffffffffffffffffffff161461107e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107590614431565b60405180910390fd5b60028110156110c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b9906144fd565b60405180910390fd5b6103e86110cd610fe5565b826110d8919061454c565b6110e291906145bd565b600a8190555050565b6000806110f66125d8565b90506111038582856125f2565b61110e858585612686565b60019150509392505050565b60006012905090565b60008061112e6125d8565b905061114f818585611140858961241d565b61114a91906145ee565b6125e0565b600191505092915050565b6111626125d8565b73ffffffffffffffffffffffffffffffffffffffff166111806119a2565b73ffffffffffffffffffffffffffffffffffffffff16146111d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cd90614431565b60405180910390fd5b600581101561121a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121190614694565b60405180910390fd5b6103e8611225610fe5565b82611230919061454c565b61123a91906145bd565b60098190555050565b60065481565b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560159054906101000a900460ff1681565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6112e06125d8565b73ffffffffffffffffffffffffffffffffffffffff166112fe6119a2565b73ffffffffffffffffffffffffffffffffffffffff1614611354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134b90614431565b60405180910390fd5b6001600e60146101000a81548160ff0219169083151502179055506001600560156101000a81548160ff021916908315150217905550565b6113946125d8565b73ffffffffffffffffffffffffffffffffffffffff166113b26119a2565b73ffffffffffffffffffffffffffffffffffffffff1614611408576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ff90614431565b60405180910390fd5b80600560156101000a81548160ff02191690831515021790555050565b61142d6125d8565b73ffffffffffffffffffffffffffffffffffffffff1661144b6119a2565b73ffffffffffffffffffffffffffffffffffffffff16146114a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149890614431565b60405180910390fd5b8181905084849050146114e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e090614700565b60405180910390fd5b60005b84849050811015611555576115423386868481811061150e5761150d614720565b5b90506020020160208101906115239190614022565b85858581811061153657611535614720565b5b9050602002013561277a565b808061154d9061474f565b9150506114ec565b5050505050565b600d60009054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115bf6125d8565b73ffffffffffffffffffffffffffffffffffffffff166115dd6119a2565b73ffffffffffffffffffffffffffffffffffffffff1614611633576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162a90614431565b60405180910390fd5b61163d600061299f565b565b6116476125d8565b73ffffffffffffffffffffffffffffffffffffffff166116656119a2565b73ffffffffffffffffffffffffffffffffffffffff16146116bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b290614431565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fd0bdd1bf92049384d44f81d258f51a39b26cfc1d256348efb3b109fd8db7271160405160405180910390a380600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b600a5481565b600f5481565b6117956125d8565b73ffffffffffffffffffffffffffffffffffffffff166117b36119a2565b73ffffffffffffffffffffffffffffffffffffffff1614611809576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180090614431565b60405180910390fd5b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f02f8a1483978974a6412ba3a67040b4daa4fc0dfe9439a7295f9a9538394f63560405160405180910390a380600d60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60075481565b60006118d96125d8565b73ffffffffffffffffffffffffffffffffffffffff166118f76119a2565b73ffffffffffffffffffffffffffffffffffffffff161461194d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194490614431565b60405180910390fd5b600654821015611992576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198990614809565b60405180910390fd5b8160078190555060019050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6119d46125d8565b73ffffffffffffffffffffffffffffffffffffffff166119f26119a2565b73ffffffffffffffffffffffffffffffffffffffff1614611a48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3f90614431565b60405180910390fd5b600d60009054906101000a900460ff16611a97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8e90614875565b60405180910390fd5b60005b83839050811015611b365781600c6000868685818110611abd57611abc614720565b5b9050602002016020810190611ad29190614022565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611b2e9061474f565b915050611a9a565b50505050565b60135481565b606060048054611b5190614480565b80601f0160208091040260200160405190810160405280929190818152602001828054611b7d90614480565b8015611bca5780601f10611b9f57610100808354040283529160200191611bca565b820191906000526020600020905b815481529060010190602001808311611bad57829003601f168201915b5050505050905090565b60095481565b611be26125d8565b73ffffffffffffffffffffffffffffffffffffffff16611c006119a2565b73ffffffffffffffffffffffffffffffffffffffff1614611c56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4d90614431565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ce4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cdb90614907565b60405180910390fd5b611cee8282612a65565b5050565b60115481565b611d006125d8565b73ffffffffffffffffffffffffffffffffffffffff16611d1e6119a2565b73ffffffffffffffffffffffffffffffffffffffff1614611d74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6b90614431565b60405180910390fd5b8160138190555080601481905550601454601354611d9291906145ee565b601281905550600c6012541115611dde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd590614973565b60405180910390fd5b5050565b600080611ded6125d8565b90506000611dfb828661241d565b905083811015611e46578481856040517fa60f030c000000000000000000000000000000000000000000000000000000008152600401611e3d93929190614993565b60405180910390fd5b611e5382868684036125e0565b60019250505092915050565b600080611e6a6125d8565b9050611e77818585612686565b600191505092915050565b60196020528060005260406000206000915054906101000a900460ff1681565b611eaa6125d8565b73ffffffffffffffffffffffffffffffffffffffff16611ec86119a2565b73ffffffffffffffffffffffffffffffffffffffff1614611f1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1590614431565b60405180910390fd5b8160108190555080601181905550601154601054611f3c91906145ee565b600f81905550600c600f541115611f88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7f90614973565b60405180910390fd5b5050565b600860009054906101000a900460ff1681565b60105481565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611fd36125d8565b73ffffffffffffffffffffffffffffffffffffffff16611ff16119a2565b73ffffffffffffffffffffffffffffffffffffffff1614612047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203e90614431565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f781d26db56cdaee11e2fce438cd1461fa45f059fcd5f02aa8e6b1e5716d8d465826040516120e49190613dd3565b60405180910390a25050565b60006120fa6125d8565b73ffffffffffffffffffffffffffffffffffffffff166121186119a2565b73ffffffffffffffffffffffffffffffffffffffff161461216e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216590614431565b60405180910390fd5b6000600860006101000a81548160ff0219169083151502179055506001905090565b600061219a6125d8565b73ffffffffffffffffffffffffffffffffffffffff166121b86119a2565b73ffffffffffffffffffffffffffffffffffffffff161461220e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220590614431565b60405180910390fd5b620186a061221a610fe5565b61222491906145bd565b821015612266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225d90614a3c565b60405180910390fd5b620186a0612272610fe5565b6101f461227f919061454c565b61228991906145bd565b8211156122cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c290614ace565b60405180910390fd5b600754821115612310576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230790614b60565b60405180910390fd5b8160068190555060019050919050565b60125481565b600c6020528060005260406000206000915054906101000a900460ff1681565b61234e6125d8565b73ffffffffffffffffffffffffffffffffffffffff1661236c6119a2565b73ffffffffffffffffffffffffffffffffffffffff16146123c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b990614431565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600e60149054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6124e36125d8565b73ffffffffffffffffffffffffffffffffffffffff166125016119a2565b73ffffffffffffffffffffffffffffffffffffffff1614612557576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254e90614431565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036125c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125bd90614bf2565b60405180910390fd5b6125cf8161299f565b50565b60145481565b600033905090565b6125ed8383836001612b06565b505050565b60006125fe848461241d565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146126805781811015612670578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161266793929190614993565b60405180910390fd5b61267f84848484036000612b06565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036126f85760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016126ef9190614115565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361276a5760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016127619190614115565b60405180910390fd5b612775838383612cdd565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036127cc5780600260008282546127c091906145ee565b9250508190555061289f565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612858578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161284f93929190614993565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036128e85780600260008282540392505081905550612935565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516129929190613e07565b60405180910390a3505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fee6ce3a11a74f9a94b8a0152fc219acc6645b25bc298e2cae8ec6a520bd83da960405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612b785760006040517fe602df05000000000000000000000000000000000000000000000000000000008152600401612b6f9190614115565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612bea5760006040517f94280d62000000000000000000000000000000000000000000000000000000008152600401612be19190614115565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508015612cd7578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051612cce9190613e07565b60405180910390a35b50505050565b60008103612cf657612cf18383600061277a565b613961565b600860009054906101000a900460ff16156133b957612d136119a2565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612d815750612d516119a2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612dba5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612df4575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e0d5750600560149054906101000a900460ff16155b156133b857600e60149054906101000a900460ff16612f0757601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ec75750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612f06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612efd90614c5e565b60405180910390fd5b5b600860019054906101000a900460ff16156130cf57612f246119a2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612fab57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561300357507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156130ce5743600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410613089576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161308090614d16565b60405180910390fd5b43600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131725750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561321957600a548111156131bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131b390614da8565b60405180910390fd5b6009546131c88361156f565b826131d391906145ee565b1115613214576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161320b90614e14565b60405180910390fd5b6133b7565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132bc5750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561330b57600a54811115613306576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132fd90614ea6565b60405180910390fd5b6133b6565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166133b5576009546133688361156f565b8261337391906145ee565b11156133b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133ab90614e14565b60405180910390fd5b5b5b5b5b5b60006133c43061156f565b9050600060065482101590508080156133e95750600560159054906101000a900460ff165b80156134025750600560149054906101000a900460ff16155b80156134585750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156134ae5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156135045750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613548576001600560146101000a81548160ff02191690831515021790555061352c613966565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806135fe5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561360857600090505b601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615806136ab5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561373e57600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561373d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161373490614f12565b60405180910390fd5b5b6000811561395157601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156137a157506000601254115b1561383b576137ce60646137c060125488613b3990919063ffffffff16565b613b4f90919063ffffffff16565b9050601254601454826137e1919061454c565b6137eb91906145bd565b601660008282546137fc91906145ee565b9250508190555060125460135482613814919061454c565b61381e91906145bd565b6015600082825461382f91906145ee565b9250508190555061392d565b601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561389657506000600f54115b1561392c576138c360646138b5600f5488613b3990919063ffffffff16565b613b4f90919063ffffffff16565b9050600f54601154826138d6919061454c565b6138e091906145bd565b601660008282546138f191906145ee565b92505081905550600f5460105482613909919061454c565b61391391906145bd565b6015600082825461392491906145ee565b925050819055505b5b60008111156139425761394187308361277a565b5b808561394e9190614f32565b94505b61395c87878761277a565b505050505b505050565b60006139713061156f565b9050600060165460155461398591906145ee565b90506000808314806139975750600082145b156139a457505050613b37565b6007548311156139b45760075492505b60004790506139c284613b65565b60006139d78247613da290919063ffffffff16565b90506000613a02856139f460165485613b3990919063ffffffff16565b613b4f90919063ffffffff16565b905060006015819055506000601681905550600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051613a5a90614f97565b60006040518083038185875af1925050503d8060008114613a97576040519150601f19603f3d011682016040523d82523d6000602084013e613a9c565b606091505b505080945050600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613ae890614f97565b60006040518083038185875af1925050503d8060008114613b25576040519150601f19603f3d011682016040523d82523d6000602084013e613b2a565b606091505b5050809450505050505050505b565b60008183613b47919061454c565b905092915050565b60008183613b5d91906145bd565b905092915050565b6000600267ffffffffffffffff811115613b8257613b81614fac565b5b604051908082528060200260200182016040528015613bb05781602001602082028036833780820191505090505b5090503081600081518110613bc857613bc7614720565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c919190614ff0565b81600181518110613ca557613ca4614720565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613d0a307f0000000000000000000000000000000000000000000000000000000000000000846125e0565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613d6c959493929190615116565b600060405180830381600087803b158015613d8657600080fd5b505af1158015613d9a573d6000803e3d6000fd5b505050505050565b60008183613db09190614f32565b905092915050565b60008115159050919050565b613dcd81613db8565b82525050565b6000602082019050613de86000830184613dc4565b92915050565b6000819050919050565b613e0181613dee565b82525050565b6000602082019050613e1c6000830184613df8565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613e5c578082015181840152602081019050613e41565b60008484015250505050565b6000601f19601f8301169050919050565b6000613e8482613e22565b613e8e8185613e2d565b9350613e9e818560208601613e3e565b613ea781613e68565b840191505092915050565b60006020820190508181036000830152613ecc8184613e79565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000613f19613f14613f0f84613ed4565b613ef4565b613ed4565b9050919050565b6000613f2b82613efe565b9050919050565b6000613f3d82613f20565b9050919050565b613f4d81613f32565b82525050565b6000602082019050613f686000830184613f44565b92915050565b600080fd5b600080fd5b6000613f8382613ed4565b9050919050565b613f9381613f78565b8114613f9e57600080fd5b50565b600081359050613fb081613f8a565b92915050565b613fbf81613dee565b8114613fca57600080fd5b50565b600081359050613fdc81613fb6565b92915050565b60008060408385031215613ff957613ff8613f6e565b5b600061400785828601613fa1565b925050602061401885828601613fcd565b9150509250929050565b60006020828403121561403857614037613f6e565b5b600061404684828501613fa1565b91505092915050565b60006020828403121561406557614064613f6e565b5b600061407384828501613fcd565b91505092915050565b60008060006060848603121561409557614094613f6e565b5b60006140a386828701613fa1565b93505060206140b486828701613fa1565b92505060406140c586828701613fcd565b9150509250925092565b600060ff82169050919050565b6140e5816140cf565b82525050565b600060208201905061410060008301846140dc565b92915050565b61410f81613f78565b82525050565b600060208201905061412a6000830184614106565b92915050565b61413981613db8565b811461414457600080fd5b50565b60008135905061415681614130565b92915050565b60006020828403121561417257614171613f6e565b5b600061418084828501614147565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126141ae576141ad614189565b5b8235905067ffffffffffffffff8111156141cb576141ca61418e565b5b6020830191508360208202830111156141e7576141e6614193565b5b9250929050565b60008083601f84011261420457614203614189565b5b8235905067ffffffffffffffff8111156142215761422061418e565b5b60208301915083602082028301111561423d5761423c614193565b5b9250929050565b6000806000806040858703121561425e5761425d613f6e565b5b600085013567ffffffffffffffff81111561427c5761427b613f73565b5b61428887828801614198565b9450945050602085013567ffffffffffffffff8111156142ab576142aa613f73565b5b6142b7878288016141ee565b925092505092959194509250565b6000806000604084860312156142de576142dd613f6e565b5b600084013567ffffffffffffffff8111156142fc576142fb613f73565b5b61430886828701614198565b9350935050602061431b86828701614147565b9150509250925092565b6000806040838503121561433c5761433b613f6e565b5b600061434a85828601613fa1565b925050602061435b85828601614147565b9150509250929050565b6000806040838503121561437c5761437b613f6e565b5b600061438a85828601613fcd565b925050602061439b85828601613fcd565b9150509250929050565b600080604083850312156143bc576143bb613f6e565b5b60006143ca85828601613fa1565b92505060206143db85828601613fa1565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061441b602083613e2d565b9150614426826143e5565b602082019050919050565b6000602082019050818103600083015261444a8161440e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061449857607f821691505b6020821081036144ab576144aa614451565b5b50919050565b7f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e3225600082015250565b60006144e7602083613e2d565b91506144f2826144b1565b602082019050919050565b60006020820190508181036000830152614516816144da565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061455782613dee565b915061456283613dee565b925082820261457081613dee565b915082820484148315176145875761458661451d565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006145c882613dee565b91506145d383613dee565b9250826145e3576145e261458e565b5b828204905092915050565b60006145f982613dee565b915061460483613dee565b925082820190508082111561461c5761461b61451d565b5b92915050565b7f43616e6e6f7420736574206d6178486f6c64206c6f776572207468616e20302e60008201527f3525000000000000000000000000000000000000000000000000000000000000602082015250565b600061467e602283613e2d565b915061468982614622565b604082019050919050565b600060208201905081810360008301526146ad81614671565b9050919050565b7f4d69736d61746368656420696e70757473000000000000000000000000000000600082015250565b60006146ea601183613e2d565b91506146f5826146b4565b602082019050919050565b60006020820190508181036000830152614719816146dd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061475a82613dee565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361478c5761478b61451d565b5b600182019050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f206d696e42616c616e6365466f72436f6e747261637453656c6c000000000000602082015250565b60006147f3603a83613e2d565b91506147fe82614797565b604082019050919050565b60006020820190508181036000830152614822816147e6565b9050919050565b7f426c61636b6c697374206973206c6f636b656400000000000000000000000000600082015250565b600061485f601383613e2d565b915061486a82614829565b602082019050919050565b6000602082019050818103600083015261488e81614852565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6973414d4d506169720000000000000000000000000000000000000000000000602082015250565b60006148f1602983613e2d565b91506148fc82614895565b604082019050919050565b60006020820190508181036000830152614920816148e4565b9050919050565b7f4d757374206b656570206665657320617420313225206f72206c657373000000600082015250565b600061495d601d83613e2d565b915061496882614927565b602082019050919050565b6000602082019050818103600083015261498c81614950565b9050919050565b60006060820190506149a86000830186614106565b6149b56020830185613df8565b6149c26040830184613df8565b949350505050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614a26603583613e2d565b9150614a31826149ca565b604082019050919050565b60006020820190508181036000830152614a5581614a19565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614ab8603483613e2d565b9150614ac382614a5c565b604082019050919050565b60006020820190508181036000830152614ae781614aab565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e206d6178416d6f756e74546f6b656e73466f72436f6e747261637453656c6c602082015250565b6000614b4a604083613e2d565b9150614b5582614aee565b604082019050919050565b60006020820190508181036000830152614b7981614b3d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614bdc602683613e2d565b9150614be782614b80565b604082019050919050565b60006020820190508181036000830152614c0b81614bcf565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614c48601683613e2d565b9150614c5382614c12565b602082019050919050565b60006020820190508181036000830152614c7781614c3b565b9050919050565b7f5f7570646174653a3a205472616e736665722044656c617920656e61626c656460008201527f2e20204f6e6c79206f6e652070757263686173652070657220626c6f636b206160208201527f6c6c6f7765642e00000000000000000000000000000000000000000000000000604082015250565b6000614d00604783613e2d565b9150614d0b82614c7e565b606082019050919050565b60006020820190508181036000830152614d2f81614cf3565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b6000614d92602683613e2d565b9150614d9d82614d36565b604082019050919050565b60006020820190508181036000830152614dc181614d85565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614dfe601383613e2d565b9150614e0982614dc8565b602082019050919050565b60006020820190508181036000830152614e2d81614df1565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b6000614e90602783613e2d565b9150614e9b82614e34565b604082019050919050565b60006020820190508181036000830152614ebf81614e83565b9050919050565b7f4164647265737320697320626c61636b6c697374656400000000000000000000600082015250565b6000614efc601683613e2d565b9150614f0782614ec6565b602082019050919050565b60006020820190508181036000830152614f2b81614eef565b9050919050565b6000614f3d82613dee565b9150614f4883613dee565b9250828203905081811115614f6057614f5f61451d565b5b92915050565b600081905092915050565b50565b6000614f81600083614f66565b9150614f8c82614f71565b600082019050919050565b6000614fa282614f74565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050614fea81613f8a565b92915050565b60006020828403121561500657615005613f6e565b5b600061501484828501614fdb565b91505092915050565b6000819050919050565b600061504261503d6150388461501d565b613ef4565b613dee565b9050919050565b61505281615027565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61508d81613f78565b82525050565b600061509f8383615084565b60208301905092915050565b6000602082019050919050565b60006150c382615058565b6150cd8185615063565b93506150d883615074565b8060005b838110156151095781516150f08882615093565b97506150fb836150ab565b9250506001810190506150dc565b5085935050505092915050565b600060a08201905061512b6000830188613df8565b6151386020830187615049565b818103604083015261514a81866150b8565b90506151596060830185614106565b6151666080830184613df8565b969550505050505056fea2646970667358221220eaa16122e941e41632a14cbfa188701c3240721f200709bcf9fbcf07968c440064736f6c63430008130033

Deployed Bytecode

0x60806040526004361061037a5760003560e01c8063809d458d116101d1578063b2d8f20811610102578063d6dc84cc116100a0578063de78e78a1161006f578063de78e78a14610d03578063f242ab4114610d2e578063f2fde38b14610d59578063f799b2c814610d8257610381565b8063d6dc84cc14610c35578063dbac26e914610c60578063dcbc1b5614610c9d578063dd62ed3e14610cc657610381565b8063beb08ab9116100dc578063beb08ab914610b79578063c024666814610ba4578063c463b99514610bcd578063d6bb961214610bf857610381565b8063b2d8f20814610afa578063b633200214610b23578063bbd2f21a14610b4e57610381565b80639a6c614e1161016f5780639fd8234e116101495780639fd8234e14610a1a578063a457c2d714610a43578063a9059cbb14610a80578063b0249cc614610abd57610381565b80639a6c614e1461099b5780639a7a23d6146109c65780639b77884d146109ef57610381565b80638da5cb5b116101ab5780638da5cb5b146108f15780638fbef0971461091c5780639125ff841461094557806395d89b411461097057610381565b8063809d458d14610860578063830804c9146108895780638d1942a7146108b457610381565b806343278c61116102ab5780636c53c8f711610249578063719276281161022357806371927628146107b6578063727fd358146107df5780637437681e1461080a5780637e7e5acc1461083557610381565b80636c53c8f71461073757806370a0823114610762578063715018a61461079f57610381565b80634fbee193116102855780634fbee1931461069157806359a945e9146106ce57806365954704146106e5578063672434821461070e57610381565b806343278c61146106105780634626402b1461063b57806348b98ef51461066657610381565b806318160ddd1161031857806323b872dd116102f257806323b872dd14610542578063313ce5671461057f57806339509351146105aa5780633b7b6a10146105e757610381565b806318160ddd146104c35780631a2953fe146104ee578063203e727e1461051957610381565b806306fdde031161035457806306fdde03146103f35780630758d9241461041e578063095ea7b31461044957806311aa0ee51461048657610381565b806303a88e801461038657806303a928eb146103b157806304019c14146103c857610381565b3661038157005b600080fd5b34801561039257600080fd5b5061039b610dad565b6040516103a89190613dd3565b60405180910390f35b3480156103bd57600080fd5b506103c6610e4d565b005b3480156103d457600080fd5b506103dd610ee6565b6040516103ea9190613e07565b60405180910390f35b3480156103ff57600080fd5b50610408610eec565b6040516104159190613eb2565b60405180910390f35b34801561042a57600080fd5b50610433610f7e565b6040516104409190613f53565b60405180910390f35b34801561045557600080fd5b50610470600480360381019061046b9190613fe2565b610fa2565b60405161047d9190613dd3565b60405180910390f35b34801561049257600080fd5b506104ad60048036038101906104a89190614022565b610fc5565b6040516104ba9190613dd3565b60405180910390f35b3480156104cf57600080fd5b506104d8610fe5565b6040516104e59190613e07565b60405180910390f35b3480156104fa57600080fd5b50610503610fef565b6040516105109190613dd3565b60405180910390f35b34801561052557600080fd5b50610540600480360381019061053b919061404f565b611002565b005b34801561054e57600080fd5b506105696004803603810190610564919061407c565b6110eb565b6040516105769190613dd3565b60405180910390f35b34801561058b57600080fd5b5061059461111a565b6040516105a191906140eb565b60405180910390f35b3480156105b657600080fd5b506105d160048036038101906105cc9190613fe2565b611123565b6040516105de9190613dd3565b60405180910390f35b3480156105f357600080fd5b5061060e6004803603810190610609919061404f565b61115a565b005b34801561061c57600080fd5b50610625611243565b6040516106329190613e07565b60405180910390f35b34801561064757600080fd5b50610650611249565b60405161065d9190614115565b60405180910390f35b34801561067257600080fd5b5061067b61126f565b6040516106889190613dd3565b60405180910390f35b34801561069d57600080fd5b506106b860048036038101906106b39190614022565b611282565b6040516106c59190613dd3565b60405180910390f35b3480156106da57600080fd5b506106e36112d8565b005b3480156106f157600080fd5b5061070c6004803603810190610707919061415c565b61138c565b005b34801561071a57600080fd5b5061073560048036038101906107309190614244565b611425565b005b34801561074357600080fd5b5061074c61155c565b6040516107599190613dd3565b60405180910390f35b34801561076e57600080fd5b5061078960048036038101906107849190614022565b61156f565b6040516107969190613e07565b60405180910390f35b3480156107ab57600080fd5b506107b46115b7565b005b3480156107c257600080fd5b506107dd60048036038101906107d89190614022565b61163f565b005b3480156107eb57600080fd5b506107f461177b565b6040516108019190613e07565b60405180910390f35b34801561081657600080fd5b5061081f611781565b60405161082c9190613e07565b60405180910390f35b34801561084157600080fd5b5061084a611787565b6040516108579190613e07565b60405180910390f35b34801561086c57600080fd5b5061088760048036038101906108829190614022565b61178d565b005b34801561089557600080fd5b5061089e6118c9565b6040516108ab9190613e07565b60405180910390f35b3480156108c057600080fd5b506108db60048036038101906108d6919061404f565b6118cf565b6040516108e89190613dd3565b60405180910390f35b3480156108fd57600080fd5b506109066119a2565b6040516109139190614115565b60405180910390f35b34801561092857600080fd5b50610943600480360381019061093e91906142c5565b6119cc565b005b34801561095157600080fd5b5061095a611b3c565b6040516109679190613e07565b60405180910390f35b34801561097c57600080fd5b50610985611b42565b6040516109929190613eb2565b60405180910390f35b3480156109a757600080fd5b506109b0611bd4565b6040516109bd9190613e07565b60405180910390f35b3480156109d257600080fd5b506109ed60048036038101906109e89190614325565b611bda565b005b3480156109fb57600080fd5b50610a04611cf2565b604051610a119190613e07565b60405180910390f35b348015610a2657600080fd5b50610a416004803603810190610a3c9190614365565b611cf8565b005b348015610a4f57600080fd5b50610a6a6004803603810190610a659190613fe2565b611de2565b604051610a779190613dd3565b60405180910390f35b348015610a8c57600080fd5b50610aa76004803603810190610aa29190613fe2565b611e5f565b604051610ab49190613dd3565b60405180910390f35b348015610ac957600080fd5b50610ae46004803603810190610adf9190614022565b611e82565b604051610af19190613dd3565b60405180910390f35b348015610b0657600080fd5b50610b216004803603810190610b1c9190614365565b611ea2565b005b348015610b2f57600080fd5b50610b38611f8c565b604051610b459190613dd3565b60405180910390f35b348015610b5a57600080fd5b50610b63611f9f565b604051610b709190613e07565b60405180910390f35b348015610b8557600080fd5b50610b8e611fa5565b604051610b9b9190614115565b60405180910390f35b348015610bb057600080fd5b50610bcb6004803603810190610bc69190614325565b611fcb565b005b348015610bd957600080fd5b50610be26120f0565b604051610bef9190613dd3565b60405180910390f35b348015610c0457600080fd5b50610c1f6004803603810190610c1a919061404f565b612190565b604051610c2c9190613dd3565b60405180910390f35b348015610c4157600080fd5b50610c4a612320565b604051610c579190613e07565b60405180910390f35b348015610c6c57600080fd5b50610c876004803603810190610c829190614022565b612326565b604051610c949190613dd3565b60405180910390f35b348015610ca957600080fd5b50610cc46004803603810190610cbf9190614325565b612346565b005b348015610cd257600080fd5b50610ced6004803603810190610ce891906143a5565b61241d565b604051610cfa9190613e07565b60405180910390f35b348015610d0f57600080fd5b50610d186124a4565b604051610d259190613dd3565b60405180910390f35b348015610d3a57600080fd5b50610d436124b7565b604051610d509190614115565b60405180910390f35b348015610d6557600080fd5b50610d806004803603810190610d7b9190614022565b6124db565b005b348015610d8e57600080fd5b50610d976125d2565b604051610da49190613e07565b60405180910390f35b6000610db76125d8565b73ffffffffffffffffffffffffffffffffffffffff16610dd56119a2565b73ffffffffffffffffffffffffffffffffffffffff1614610e2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2290614431565b60405180910390fd5b6000600860016101000a81548160ff0219169083151502179055506001905090565b610e556125d8565b73ffffffffffffffffffffffffffffffffffffffff16610e736119a2565b73ffffffffffffffffffffffffffffffffffffffff1614610ec9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec090614431565b60405180910390fd5b6000600d60006101000a81548160ff021916908315150217905550565b60165481565b606060038054610efb90614480565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2790614480565b8015610f745780601f10610f4957610100808354040283529160200191610f74565b820191906000526020600020905b815481529060010190602001808311610f5757829003601f168201915b5050505050905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b600080610fad6125d8565b9050610fba8185856125e0565b600191505092915050565b60186020528060005260406000206000915054906101000a900460ff1681565b6000600254905090565b600860019054906101000a900460ff1681565b61100a6125d8565b73ffffffffffffffffffffffffffffffffffffffff166110286119a2565b73ffffffffffffffffffffffffffffffffffffffff161461107e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107590614431565b60405180910390fd5b60028110156110c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b9906144fd565b60405180910390fd5b6103e86110cd610fe5565b826110d8919061454c565b6110e291906145bd565b600a8190555050565b6000806110f66125d8565b90506111038582856125f2565b61110e858585612686565b60019150509392505050565b60006012905090565b60008061112e6125d8565b905061114f818585611140858961241d565b61114a91906145ee565b6125e0565b600191505092915050565b6111626125d8565b73ffffffffffffffffffffffffffffffffffffffff166111806119a2565b73ffffffffffffffffffffffffffffffffffffffff16146111d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cd90614431565b60405180910390fd5b600581101561121a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121190614694565b60405180910390fd5b6103e8611225610fe5565b82611230919061454c565b61123a91906145bd565b60098190555050565b60065481565b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560159054906101000a900460ff1681565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6112e06125d8565b73ffffffffffffffffffffffffffffffffffffffff166112fe6119a2565b73ffffffffffffffffffffffffffffffffffffffff1614611354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134b90614431565b60405180910390fd5b6001600e60146101000a81548160ff0219169083151502179055506001600560156101000a81548160ff021916908315150217905550565b6113946125d8565b73ffffffffffffffffffffffffffffffffffffffff166113b26119a2565b73ffffffffffffffffffffffffffffffffffffffff1614611408576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ff90614431565b60405180910390fd5b80600560156101000a81548160ff02191690831515021790555050565b61142d6125d8565b73ffffffffffffffffffffffffffffffffffffffff1661144b6119a2565b73ffffffffffffffffffffffffffffffffffffffff16146114a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149890614431565b60405180910390fd5b8181905084849050146114e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e090614700565b60405180910390fd5b60005b84849050811015611555576115423386868481811061150e5761150d614720565b5b90506020020160208101906115239190614022565b85858581811061153657611535614720565b5b9050602002013561277a565b808061154d9061474f565b9150506114ec565b5050505050565b600d60009054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115bf6125d8565b73ffffffffffffffffffffffffffffffffffffffff166115dd6119a2565b73ffffffffffffffffffffffffffffffffffffffff1614611633576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162a90614431565b60405180910390fd5b61163d600061299f565b565b6116476125d8565b73ffffffffffffffffffffffffffffffffffffffff166116656119a2565b73ffffffffffffffffffffffffffffffffffffffff16146116bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b290614431565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fd0bdd1bf92049384d44f81d258f51a39b26cfc1d256348efb3b109fd8db7271160405160405180910390a380600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b600a5481565b600f5481565b6117956125d8565b73ffffffffffffffffffffffffffffffffffffffff166117b36119a2565b73ffffffffffffffffffffffffffffffffffffffff1614611809576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180090614431565b60405180910390fd5b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f02f8a1483978974a6412ba3a67040b4daa4fc0dfe9439a7295f9a9538394f63560405160405180910390a380600d60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60075481565b60006118d96125d8565b73ffffffffffffffffffffffffffffffffffffffff166118f76119a2565b73ffffffffffffffffffffffffffffffffffffffff161461194d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194490614431565b60405180910390fd5b600654821015611992576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198990614809565b60405180910390fd5b8160078190555060019050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6119d46125d8565b73ffffffffffffffffffffffffffffffffffffffff166119f26119a2565b73ffffffffffffffffffffffffffffffffffffffff1614611a48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3f90614431565b60405180910390fd5b600d60009054906101000a900460ff16611a97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8e90614875565b60405180910390fd5b60005b83839050811015611b365781600c6000868685818110611abd57611abc614720565b5b9050602002016020810190611ad29190614022565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611b2e9061474f565b915050611a9a565b50505050565b60135481565b606060048054611b5190614480565b80601f0160208091040260200160405190810160405280929190818152602001828054611b7d90614480565b8015611bca5780601f10611b9f57610100808354040283529160200191611bca565b820191906000526020600020905b815481529060010190602001808311611bad57829003601f168201915b5050505050905090565b60095481565b611be26125d8565b73ffffffffffffffffffffffffffffffffffffffff16611c006119a2565b73ffffffffffffffffffffffffffffffffffffffff1614611c56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4d90614431565b60405180910390fd5b7f0000000000000000000000001e138c0b050b91cd0b9f714bb30d9e698ee02c7a73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ce4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cdb90614907565b60405180910390fd5b611cee8282612a65565b5050565b60115481565b611d006125d8565b73ffffffffffffffffffffffffffffffffffffffff16611d1e6119a2565b73ffffffffffffffffffffffffffffffffffffffff1614611d74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6b90614431565b60405180910390fd5b8160138190555080601481905550601454601354611d9291906145ee565b601281905550600c6012541115611dde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd590614973565b60405180910390fd5b5050565b600080611ded6125d8565b90506000611dfb828661241d565b905083811015611e46578481856040517fa60f030c000000000000000000000000000000000000000000000000000000008152600401611e3d93929190614993565b60405180910390fd5b611e5382868684036125e0565b60019250505092915050565b600080611e6a6125d8565b9050611e77818585612686565b600191505092915050565b60196020528060005260406000206000915054906101000a900460ff1681565b611eaa6125d8565b73ffffffffffffffffffffffffffffffffffffffff16611ec86119a2565b73ffffffffffffffffffffffffffffffffffffffff1614611f1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1590614431565b60405180910390fd5b8160108190555080601181905550601154601054611f3c91906145ee565b600f81905550600c600f541115611f88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7f90614973565b60405180910390fd5b5050565b600860009054906101000a900460ff1681565b60105481565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611fd36125d8565b73ffffffffffffffffffffffffffffffffffffffff16611ff16119a2565b73ffffffffffffffffffffffffffffffffffffffff1614612047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203e90614431565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f781d26db56cdaee11e2fce438cd1461fa45f059fcd5f02aa8e6b1e5716d8d465826040516120e49190613dd3565b60405180910390a25050565b60006120fa6125d8565b73ffffffffffffffffffffffffffffffffffffffff166121186119a2565b73ffffffffffffffffffffffffffffffffffffffff161461216e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216590614431565b60405180910390fd5b6000600860006101000a81548160ff0219169083151502179055506001905090565b600061219a6125d8565b73ffffffffffffffffffffffffffffffffffffffff166121b86119a2565b73ffffffffffffffffffffffffffffffffffffffff161461220e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220590614431565b60405180910390fd5b620186a061221a610fe5565b61222491906145bd565b821015612266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225d90614a3c565b60405180910390fd5b620186a0612272610fe5565b6101f461227f919061454c565b61228991906145bd565b8211156122cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c290614ace565b60405180910390fd5b600754821115612310576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230790614b60565b60405180910390fd5b8160068190555060019050919050565b60125481565b600c6020528060005260406000206000915054906101000a900460ff1681565b61234e6125d8565b73ffffffffffffffffffffffffffffffffffffffff1661236c6119a2565b73ffffffffffffffffffffffffffffffffffffffff16146123c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b990614431565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600e60149054906101000a900460ff1681565b7f0000000000000000000000001e138c0b050b91cd0b9f714bb30d9e698ee02c7a81565b6124e36125d8565b73ffffffffffffffffffffffffffffffffffffffff166125016119a2565b73ffffffffffffffffffffffffffffffffffffffff1614612557576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254e90614431565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036125c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125bd90614bf2565b60405180910390fd5b6125cf8161299f565b50565b60145481565b600033905090565b6125ed8383836001612b06565b505050565b60006125fe848461241d565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146126805781811015612670578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161266793929190614993565b60405180910390fd5b61267f84848484036000612b06565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036126f85760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016126ef9190614115565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361276a5760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016127619190614115565b60405180910390fd5b612775838383612cdd565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036127cc5780600260008282546127c091906145ee565b9250508190555061289f565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612858578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161284f93929190614993565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036128e85780600260008282540392505081905550612935565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516129929190613e07565b60405180910390a3505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fee6ce3a11a74f9a94b8a0152fc219acc6645b25bc298e2cae8ec6a520bd83da960405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612b785760006040517fe602df05000000000000000000000000000000000000000000000000000000008152600401612b6f9190614115565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612bea5760006040517f94280d62000000000000000000000000000000000000000000000000000000008152600401612be19190614115565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508015612cd7578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051612cce9190613e07565b60405180910390a35b50505050565b60008103612cf657612cf18383600061277a565b613961565b600860009054906101000a900460ff16156133b957612d136119a2565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612d815750612d516119a2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612dba5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612df4575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e0d5750600560149054906101000a900460ff16155b156133b857600e60149054906101000a900460ff16612f0757601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ec75750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612f06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612efd90614c5e565b60405180910390fd5b5b600860019054906101000a900460ff16156130cf57612f246119a2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612fab57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561300357507f0000000000000000000000001e138c0b050b91cd0b9f714bb30d9e698ee02c7a73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156130ce5743600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410613089576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161308090614d16565b60405180910390fd5b43600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131725750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561321957600a548111156131bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131b390614da8565b60405180910390fd5b6009546131c88361156f565b826131d391906145ee565b1115613214576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161320b90614e14565b60405180910390fd5b6133b7565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132bc5750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561330b57600a54811115613306576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132fd90614ea6565b60405180910390fd5b6133b6565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166133b5576009546133688361156f565b8261337391906145ee565b11156133b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133ab90614e14565b60405180910390fd5b5b5b5b5b5b60006133c43061156f565b9050600060065482101590508080156133e95750600560159054906101000a900460ff165b80156134025750600560149054906101000a900460ff16155b80156134585750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156134ae5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156135045750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613548576001600560146101000a81548160ff02191690831515021790555061352c613966565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806135fe5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561360857600090505b601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615806136ab5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561373e57600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561373d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161373490614f12565b60405180910390fd5b5b6000811561395157601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156137a157506000601254115b1561383b576137ce60646137c060125488613b3990919063ffffffff16565b613b4f90919063ffffffff16565b9050601254601454826137e1919061454c565b6137eb91906145bd565b601660008282546137fc91906145ee565b9250508190555060125460135482613814919061454c565b61381e91906145bd565b6015600082825461382f91906145ee565b9250508190555061392d565b601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561389657506000600f54115b1561392c576138c360646138b5600f5488613b3990919063ffffffff16565b613b4f90919063ffffffff16565b9050600f54601154826138d6919061454c565b6138e091906145bd565b601660008282546138f191906145ee565b92505081905550600f5460105482613909919061454c565b61391391906145bd565b6015600082825461392491906145ee565b925050819055505b5b60008111156139425761394187308361277a565b5b808561394e9190614f32565b94505b61395c87878761277a565b505050505b505050565b60006139713061156f565b9050600060165460155461398591906145ee565b90506000808314806139975750600082145b156139a457505050613b37565b6007548311156139b45760075492505b60004790506139c284613b65565b60006139d78247613da290919063ffffffff16565b90506000613a02856139f460165485613b3990919063ffffffff16565b613b4f90919063ffffffff16565b905060006015819055506000601681905550600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051613a5a90614f97565b60006040518083038185875af1925050503d8060008114613a97576040519150601f19603f3d011682016040523d82523d6000602084013e613a9c565b606091505b505080945050600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613ae890614f97565b60006040518083038185875af1925050503d8060008114613b25576040519150601f19603f3d011682016040523d82523d6000602084013e613b2a565b606091505b5050809450505050505050505b565b60008183613b47919061454c565b905092915050565b60008183613b5d91906145bd565b905092915050565b6000600267ffffffffffffffff811115613b8257613b81614fac565b5b604051908082528060200260200182016040528015613bb05781602001602082028036833780820191505090505b5090503081600081518110613bc857613bc7614720565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c919190614ff0565b81600181518110613ca557613ca4614720565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613d0a307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846125e0565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613d6c959493929190615116565b600060405180830381600087803b158015613d8657600080fd5b505af1158015613d9a573d6000803e3d6000fd5b505050505050565b60008183613db09190614f32565b905092915050565b60008115159050919050565b613dcd81613db8565b82525050565b6000602082019050613de86000830184613dc4565b92915050565b6000819050919050565b613e0181613dee565b82525050565b6000602082019050613e1c6000830184613df8565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613e5c578082015181840152602081019050613e41565b60008484015250505050565b6000601f19601f8301169050919050565b6000613e8482613e22565b613e8e8185613e2d565b9350613e9e818560208601613e3e565b613ea781613e68565b840191505092915050565b60006020820190508181036000830152613ecc8184613e79565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000613f19613f14613f0f84613ed4565b613ef4565b613ed4565b9050919050565b6000613f2b82613efe565b9050919050565b6000613f3d82613f20565b9050919050565b613f4d81613f32565b82525050565b6000602082019050613f686000830184613f44565b92915050565b600080fd5b600080fd5b6000613f8382613ed4565b9050919050565b613f9381613f78565b8114613f9e57600080fd5b50565b600081359050613fb081613f8a565b92915050565b613fbf81613dee565b8114613fca57600080fd5b50565b600081359050613fdc81613fb6565b92915050565b60008060408385031215613ff957613ff8613f6e565b5b600061400785828601613fa1565b925050602061401885828601613fcd565b9150509250929050565b60006020828403121561403857614037613f6e565b5b600061404684828501613fa1565b91505092915050565b60006020828403121561406557614064613f6e565b5b600061407384828501613fcd565b91505092915050565b60008060006060848603121561409557614094613f6e565b5b60006140a386828701613fa1565b93505060206140b486828701613fa1565b92505060406140c586828701613fcd565b9150509250925092565b600060ff82169050919050565b6140e5816140cf565b82525050565b600060208201905061410060008301846140dc565b92915050565b61410f81613f78565b82525050565b600060208201905061412a6000830184614106565b92915050565b61413981613db8565b811461414457600080fd5b50565b60008135905061415681614130565b92915050565b60006020828403121561417257614171613f6e565b5b600061418084828501614147565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126141ae576141ad614189565b5b8235905067ffffffffffffffff8111156141cb576141ca61418e565b5b6020830191508360208202830111156141e7576141e6614193565b5b9250929050565b60008083601f84011261420457614203614189565b5b8235905067ffffffffffffffff8111156142215761422061418e565b5b60208301915083602082028301111561423d5761423c614193565b5b9250929050565b6000806000806040858703121561425e5761425d613f6e565b5b600085013567ffffffffffffffff81111561427c5761427b613f73565b5b61428887828801614198565b9450945050602085013567ffffffffffffffff8111156142ab576142aa613f73565b5b6142b7878288016141ee565b925092505092959194509250565b6000806000604084860312156142de576142dd613f6e565b5b600084013567ffffffffffffffff8111156142fc576142fb613f73565b5b61430886828701614198565b9350935050602061431b86828701614147565b9150509250925092565b6000806040838503121561433c5761433b613f6e565b5b600061434a85828601613fa1565b925050602061435b85828601614147565b9150509250929050565b6000806040838503121561437c5761437b613f6e565b5b600061438a85828601613fcd565b925050602061439b85828601613fcd565b9150509250929050565b600080604083850312156143bc576143bb613f6e565b5b60006143ca85828601613fa1565b92505060206143db85828601613fa1565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061441b602083613e2d565b9150614426826143e5565b602082019050919050565b6000602082019050818103600083015261444a8161440e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061449857607f821691505b6020821081036144ab576144aa614451565b5b50919050565b7f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e3225600082015250565b60006144e7602083613e2d565b91506144f2826144b1565b602082019050919050565b60006020820190508181036000830152614516816144da565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061455782613dee565b915061456283613dee565b925082820261457081613dee565b915082820484148315176145875761458661451d565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006145c882613dee565b91506145d383613dee565b9250826145e3576145e261458e565b5b828204905092915050565b60006145f982613dee565b915061460483613dee565b925082820190508082111561461c5761461b61451d565b5b92915050565b7f43616e6e6f7420736574206d6178486f6c64206c6f776572207468616e20302e60008201527f3525000000000000000000000000000000000000000000000000000000000000602082015250565b600061467e602283613e2d565b915061468982614622565b604082019050919050565b600060208201905081810360008301526146ad81614671565b9050919050565b7f4d69736d61746368656420696e70757473000000000000000000000000000000600082015250565b60006146ea601183613e2d565b91506146f5826146b4565b602082019050919050565b60006020820190508181036000830152614719816146dd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061475a82613dee565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361478c5761478b61451d565b5b600182019050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f206d696e42616c616e6365466f72436f6e747261637453656c6c000000000000602082015250565b60006147f3603a83613e2d565b91506147fe82614797565b604082019050919050565b60006020820190508181036000830152614822816147e6565b9050919050565b7f426c61636b6c697374206973206c6f636b656400000000000000000000000000600082015250565b600061485f601383613e2d565b915061486a82614829565b602082019050919050565b6000602082019050818103600083015261488e81614852565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6973414d4d506169720000000000000000000000000000000000000000000000602082015250565b60006148f1602983613e2d565b91506148fc82614895565b604082019050919050565b60006020820190508181036000830152614920816148e4565b9050919050565b7f4d757374206b656570206665657320617420313225206f72206c657373000000600082015250565b600061495d601d83613e2d565b915061496882614927565b602082019050919050565b6000602082019050818103600083015261498c81614950565b9050919050565b60006060820190506149a86000830186614106565b6149b56020830185613df8565b6149c26040830184613df8565b949350505050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614a26603583613e2d565b9150614a31826149ca565b604082019050919050565b60006020820190508181036000830152614a5581614a19565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614ab8603483613e2d565b9150614ac382614a5c565b604082019050919050565b60006020820190508181036000830152614ae781614aab565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e206d6178416d6f756e74546f6b656e73466f72436f6e747261637453656c6c602082015250565b6000614b4a604083613e2d565b9150614b5582614aee565b604082019050919050565b60006020820190508181036000830152614b7981614b3d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614bdc602683613e2d565b9150614be782614b80565b604082019050919050565b60006020820190508181036000830152614c0b81614bcf565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614c48601683613e2d565b9150614c5382614c12565b602082019050919050565b60006020820190508181036000830152614c7781614c3b565b9050919050565b7f5f7570646174653a3a205472616e736665722044656c617920656e61626c656460008201527f2e20204f6e6c79206f6e652070757263686173652070657220626c6f636b206160208201527f6c6c6f7765642e00000000000000000000000000000000000000000000000000604082015250565b6000614d00604783613e2d565b9150614d0b82614c7e565b606082019050919050565b60006020820190508181036000830152614d2f81614cf3565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b6000614d92602683613e2d565b9150614d9d82614d36565b604082019050919050565b60006020820190508181036000830152614dc181614d85565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614dfe601383613e2d565b9150614e0982614dc8565b602082019050919050565b60006020820190508181036000830152614e2d81614df1565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b6000614e90602783613e2d565b9150614e9b82614e34565b604082019050919050565b60006020820190508181036000830152614ebf81614e83565b9050919050565b7f4164647265737320697320626c61636b6c697374656400000000000000000000600082015250565b6000614efc601683613e2d565b9150614f0782614ec6565b602082019050919050565b60006020820190508181036000830152614f2b81614eef565b9050919050565b6000614f3d82613dee565b9150614f4883613dee565b9250828203905081811115614f6057614f5f61451d565b5b92915050565b600081905092915050565b50565b6000614f81600083614f66565b9150614f8c82614f71565b600082019050919050565b6000614fa282614f74565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050614fea81613f8a565b92915050565b60006020828403121561500657615005613f6e565b5b600061501484828501614fdb565b91505092915050565b6000819050919050565b600061504261503d6150388461501d565b613ef4565b613dee565b9050919050565b61505281615027565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61508d81613f78565b82525050565b600061509f8383615084565b60208301905092915050565b6000602082019050919050565b60006150c382615058565b6150cd8185615063565b93506150d883615074565b8060005b838110156151095781516150f08882615093565b97506150fb836150ab565b9250506001810190506150dc565b5085935050505092915050565b600060a08201905061512b6000830188613df8565b6151386020830187615049565b818103604083015261514a81866150b8565b90506151596060830185614106565b6151666080830184613df8565b969550505050505056fea2646970667358221220eaa16122e941e41632a14cbfa188701c3240721f200709bcf9fbcf07968c440064736f6c63430008130033

Deployed Bytecode Sourcemap

26436:16846:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30934:130;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36671:86;;;;;;;;;;;;;:::i;:::-;;27585:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12910:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26517:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15203:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27763:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14012:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26863:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32494:188;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15971:249;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13863:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16629:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32807:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26703:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27211:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26657:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36765:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30542:118;;;;;;;;;;;;;:::i;:::-;;33453:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42944:335;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27146:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14174:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25071:103;;;;;;;;;;;;;:::i;:::-;;35912:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27543:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26934:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27326:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35589:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26750:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31990:346;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24420:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36278:318;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27468:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13120:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26905:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35018:284;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27396:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34215:327;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17555:504;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14497:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27972:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33730:320;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26822:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27360:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27247:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34709:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30735:128;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31220:651;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27433:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27096:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33186:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14742:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27284:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26561:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25329:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27505:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30934:130;30993:4;24651:12;:10;:12::i;:::-;24640:23;;:7;:5;:7::i;:::-;:23;;;24632:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31029:5:::1;31010:16;;:24;;;;;;;;;;;;;;;;;;31052:4;31045:11;;30934:130:::0;:::o;36671:86::-;24651:12;:10;:12::i;:::-;24640:23;;:7;:5;:7::i;:::-;:23;;;24632:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36744:5:::1;36726:15;;:23;;;;;;;;;;;;;;;;;;36671:86::o:0;27585:34::-;;;;:::o;12910:91::-;12955:13;12988:5;12981:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12910:91;:::o;26517:37::-;;;:::o;15203:190::-;15276:4;15293:13;15309:12;:10;:12::i;:::-;15293:28;;15332:31;15341:5;15348:7;15357:5;15332:8;:31::i;:::-;15381:4;15374:11;;;15203:190;;;;:::o;27763:51::-;;;;;;;;;;;;;;;;;;;;;;:::o;14012:99::-;14064:7;14091:12;;14084:19;;14012:99;:::o;26863:35::-;;;;;;;;;;;;;:::o;32494:188::-;24651:12;:10;:12::i;:::-;24640:23;;:7;:5;:7::i;:::-;:23;;;24632:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32586:1:::1;32576:6;:11;;32568:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;32670:4;32653:13;:11;:13::i;:::-;32644:6;:22;;;;:::i;:::-;32643:31;;;;:::i;:::-;32635:5;:39;;;;32494:188:::0;:::o;15971:249::-;16058:4;16075:15;16093:12;:10;:12::i;:::-;16075:30;;16116:37;16132:4;16138:7;16147:5;16116:15;:37::i;:::-;16164:26;16174:4;16180:2;16184:5;16164:9;:26::i;:::-;16208:4;16201:11;;;15971:249;;;;;:::o;13863:84::-;13912:5;13937:2;13930:9;;13863:84;:::o;16629:238::-;16717:4;16734:13;16750:12;:10;:12::i;:::-;16734:28;;16773:64;16782:5;16789:7;16826:10;16798:25;16808:5;16815:7;16798:9;:25::i;:::-;:38;;;;:::i;:::-;16773:8;:64::i;:::-;16855:4;16848:11;;;16629:238;;;;:::o;32807:193::-;24651:12;:10;:12::i;:::-;24640:23;;:7;:5;:7::i;:::-;:23;;;24632:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32900:1:::1;32890:6;:11;;32882:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;32988:4;32971:13;:11;:13::i;:::-;32962:6;:22;;;;:::i;:::-;32961:31;;;;:::i;:::-;32951:7;:41;;;;32807:193:::0;:::o;26703:40::-;;;;:::o;27211:29::-;;;;;;;;;;;;;:::o;26657:39::-;;;;;;;;;;;;;:::o;36765:121::-;36831:4;36855:14;:23;36870:7;36855:23;;;;;;;;;;;;;;;;;;;;;;;;;36848:30;;36765:121;;;:::o;30542:118::-;24651:12;:10;:12::i;:::-;24640:23;;:7;:5;:7::i;:::-;:23;;;24632:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30611:4:::1;30595:13;;:20;;;;;;;;;;;;;;;;;;30648:4;30626:19;;:26;;;;;;;;;;;;;;;;;;30542:118::o:0;33453:113::-;24651:12;:10;:12::i;:::-;24640:23;;:7;:5;:7::i;:::-;:23;;;24632:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33551:7:::1;33529:19;;:29;;;;;;;;;;;;;;;;;;33453:113:::0;:::o;42944:335::-;24651:12;:10;:12::i;:::-;24640:23;;:7;:5;:7::i;:::-;:23;;;24632:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43100:7:::1;;:14;;43080:9;;:16;;:34;43072:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;43152:9;43147:125;43171:9;;:16;;43167:1;:20;43147:125;;;43209:51;43223:10;43235:9;;43245:1;43235:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;43249:7;;43257:1;43249:10;;;;;;;:::i;:::-;;;;;;;;43209:13;:51::i;:::-;43189:3;;;;;:::i;:::-;;;;43147:125;;;;42944:335:::0;;;;:::o;27146:34::-;;;;;;;;;;;;;:::o;14174:118::-;14239:7;14266:9;:18;14276:7;14266:18;;;;;;;;;;;;;;;;14259:25;;14174:118;;;:::o;25071:103::-;24651:12;:10;:12::i;:::-;24640:23;;:7;:5;:7::i;:::-;:23;;;24632:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25136:30:::1;25163:1;25136:18;:30::i;:::-;25071:103::o:0;35912:173::-;24651:12;:10;:12::i;:::-;24640:23;;:7;:5;:7::i;:::-;:23;;;24632:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36027:13:::1;;;;;;;;;;;35995:46;;36016:9;35995:46;;;;;;;;;;;;36068:9;36052:13;;:25;;;;;;;;;;;;;;;;;;35912:173:::0;:::o;27543:35::-;;;;:::o;26934:20::-;;;;:::o;27326:27::-;;;;:::o;35589:217::-;24651:12;:10;:12::i;:::-;24640:23;;:7;:5;:7::i;:::-;:23;;;24632:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35738:14:::1;;;;;;;;;;;35697:56;;35719:17;35697:56;;;;;;;;;;;;35781:17;35764:14;;:34;;;;;;;;;;;;;;;;;;35589:217:::0;:::o;26750:45::-;;;;:::o;31990:346::-;32090:4;24651:12;:10;:12::i;:::-;24640:23;;:7;:5;:7::i;:::-;:23;;;24632:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32142:25:::1;;32129:9;:38;;32107:146;;;;;;;;;;;;:::i;:::-;;;;;;;;;32297:9;32264:30;:42;;;;32324:4;32317:11;;31990:346:::0;;;:::o;24420:87::-;24466:7;24493:6;;;;;;;;;;;24486:13;;24420:87;:::o;36278:318::-;24651:12;:10;:12::i;:::-;24640:23;;:7;:5;:7::i;:::-;:23;;;24632:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36424:15:::1;;;;;;;;;;;36416:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;36479:9;36474:115;36498:9;;:16;;36494:1;:20;36474:115;;;36564:13;36536:11;:25;36548:9;;36558:1;36548:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;36536:25;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;36516:3;;;;;:::i;:::-;;;;36474:115;;;;36278:318:::0;;;:::o;27468:30::-;;;;:::o;13120:95::-;13167:13;13200:7;13193:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13120:95;:::o;26905:22::-;;;;:::o;35018:284::-;24651:12;:10;:12::i;:::-;24640:23;;:7;:5;:7::i;:::-;:23;;;24632:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35164:7:::1;35156:15;;:4;:15;;::::0;35134:106:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;35253:41;35282:4;35288:5;35253:28;:41::i;:::-;35018:284:::0;;:::o;27396:28::-;;;;:::o;34215:327::-;24651:12;:10;:12::i;:::-;24640:23;;:7;:5;:7::i;:::-;:23;;;24632:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34352:12:::1;34334:15;:30;;;;34392:11;34375:14;:28;;;;34448:14;;34430:15;;:32;;;;:::i;:::-;34414:13;:48;;;;34498:2;34481:13;;:19;;34473:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34215:327:::0;;:::o;17555:504::-;17650:4;17667:13;17683:12;:10;:12::i;:::-;17667:28;;17706:24;17733:25;17743:5;17750:7;17733:9;:25::i;:::-;17706:52;;17792:17;17773:16;:36;17769:150;;;17862:7;17871:16;17889:17;17833:74;;;;;;;;;;;;;:::i;:::-;;;;;;;;17769:150;17954:62;17963:5;17970:7;17998:17;17979:16;:36;17954:8;:62::i;:::-;18047:4;18040:11;;;;17555:504;;;;:::o;14497:182::-;14566:4;14583:13;14599:12;:10;:12::i;:::-;14583:28;;14622:27;14632:5;14639:2;14643:5;14622:9;:27::i;:::-;14667:4;14660:11;;;14497:182;;;;:::o;27972:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;33730:320::-;24651:12;:10;:12::i;:::-;24640:23;;:7;:5;:7::i;:::-;:23;;;24632:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33865:12:::1;33848:14;:29;;;;33904:11;33888:13;:27;;;;33958:13;;33941:14;;:30;;;;:::i;:::-;33926:12;:45;;;;34006:2;33990:12;;:18;;33982:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;33730:320:::0;;:::o;26822:34::-;;;;;;;;;;;;;:::o;27360:29::-;;;;:::o;27247:28::-;;;;;;;;;;;;;:::o;34709:174::-;24651:12;:10;:12::i;:::-;24640:23;;:7;:5;:7::i;:::-;:23;;;24632:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34820:8:::1;34794:14;:23;34809:7;34794:23;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;34857:7;34844:31;;;34866:8;34844:31;;;;;;:::i;:::-;;;;;;;;34709:174:::0;;:::o;30735:128::-;30793:4;24651:12;:10;:12::i;:::-;24640:23;;:7;:5;:7::i;:::-;:23;;;24632:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30828:5:::1;30810:15;;:23;;;;;;;;;;;;;;;;;;30851:4;30844:11;;30735:128:::0;:::o;31220:651::-;31314:4;24651:12;:10;:12::i;:::-;24640:23;;:7;:5;:7::i;:::-;:23;;;24632:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31382:6:::1;31366:13;:11;:13::i;:::-;:22;;;;:::i;:::-;31353:9;:35;;31331:138;;;;;;;;;;;;:::i;:::-;;;;;;;;;31539:6;31522:13;:11;:13::i;:::-;31516:3;:19;;;;:::i;:::-;31515:30;;;;:::i;:::-;31502:9;:43;;31480:145;;;;;;;;;;;;:::i;:::-;;;;;;;;;31671:30;;31658:9;:43;;31636:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;31832:9;31804:25;:37;;;;31859:4;31852:11;;31220:651:::0;;;:::o;27433:28::-;;;;:::o;27096:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;33186:149::-;24651:12;:10;:12::i;:::-;24640:23;;:7;:5;:7::i;:::-;:23;;;24632:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33323:4:::1;33293:19;:27;33313:6;33293:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;33186:149:::0;;:::o;14742:142::-;14822:7;14849:11;:18;14861:5;14849:18;;;;;;;;;;;;;;;:27;14868:7;14849:27;;;;;;;;;;;;;;;;14842:34;;14742:142;;;;:::o;27284:33::-;;;;;;;;;;;;;:::o;26561:32::-;;;:::o;25329:238::-;24651:12;:10;:12::i;:::-;24640:23;;:7;:5;:7::i;:::-;:23;;;24632:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25452:1:::1;25432:22;;:8;:22;;::::0;25410:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;25531:28;25550:8;25531:18;:28::i;:::-;25329:238:::0;:::o;27505:29::-;;;;:::o;9999:98::-;10052:7;10079:10;10072:17;;9999:98;:::o;21752:138::-;21845:37;21854:5;21861:7;21870:5;21877:4;21845:8;:37::i;:::-;21752:138;;;:::o;23489:487::-;23589:24;23616:25;23626:5;23633:7;23616:9;:25::i;:::-;23589:52;;23676:17;23656:16;:37;23652:317;;23733:5;23714:16;:24;23710:132;;;23793:7;23802:16;23820:5;23766:60;;;;;;;;;;;;;:::i;:::-;;;;;;;;23710:132;23885:57;23894:5;23901:7;23929:5;23910:16;:24;23936:5;23885:8;:57::i;:::-;23652:317;23578:398;23489:487;;;:::o;18444:308::-;18544:1;18528:18;;:4;:18;;;18524:88;;18597:1;18570:30;;;;;;;;;;;:::i;:::-;;;;;;;;18524:88;18640:1;18626:16;;:2;:16;;;18622:88;;18695:1;18666:32;;;;;;;;;;;:::i;:::-;;;;;;;;18622:88;18720:24;18728:4;18734:2;18738:5;18720:7;:24::i;:::-;18444:308;;;:::o;19068:1135::-;19174:1;19158:18;;:4;:18;;;19154:552;;19312:5;19296:12;;:21;;;;;;;:::i;:::-;;;;;;;;19154:552;;;19350:19;19372:9;:15;19382:4;19372:15;;;;;;;;;;;;;;;;19350:37;;19420:5;19406:11;:19;19402:117;;;19478:4;19484:11;19497:5;19453:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;19402:117;19674:5;19660:11;:19;19642:9;:15;19652:4;19642:15;;;;;;;;;;;;;;;:37;;;;19335:371;19154:552;19736:1;19722:16;;:2;:16;;;19718:435;;19904:5;19888:12;;:21;;;;;;;;;;;19718:435;;;20121:5;20104:9;:13;20114:2;20104:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;19718:435;20185:2;20170:25;;20179:4;20170:25;;;20189:5;20170:25;;;;;;:::i;:::-;;;;;;;;19068:1135;;;:::o;25727:191::-;25801:16;25820:6;;;;;;;;;;;25801:25;;25846:8;25837:6;;:17;;;;;;;;;;;;;;;;;;25901:8;25870:40;;25891:8;25870:40;;;;;;;;;;;;25790:128;25727:191;:::o;35310:155::-;35411:5;35393:9;:15;35403:4;35393:15;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;35451:5;35434:23;;35445:4;35434:23;;;;;;;;;;;;35310:155;;:::o;22757:443::-;22887:1;22870:19;;:5;:19;;;22866:91;;22942:1;22913:32;;;;;;;;;;;:::i;:::-;;;;;;;;22866:91;22990:1;22971:21;;:7;:21;;;22967:92;;23044:1;23016:31;;;;;;;;;;;:::i;:::-;;;;;;;;22967:92;23099:5;23069:11;:18;23081:5;23069:18;;;;;;;;;;;;;;;:27;23088:7;23069:27;;;;;;;;;;;;;;;:35;;;;23119:9;23115:78;;;23166:7;23150:31;;23159:5;23150:31;;;23175:5;23150:31;;;;;;:::i;:::-;;;;;;;;23115:78;22757:443;;;;:::o;36894:4297::-;37030:1;37020:6;:11;37016:91;;37048:26;37062:4;37068:2;37072:1;37048:13;:26::i;:::-;37089:7;;37016:91;37123:15;;;;;;;;;;;37119:2240;;;37185:7;:5;:7::i;:::-;37177:15;;:4;:15;;;;:49;;;;;37219:7;:5;:7::i;:::-;37213:13;;:2;:13;;;;37177:49;:86;;;;;37261:1;37247:16;;:2;:16;;;;37177:86;:128;;;;;37298:6;37284:21;;:2;:21;;;;37177:128;:168;;;;;37327:18;;;;;;;;;;;37326:19;37177:168;37155:2193;;;37385:13;;;;;;;;;;;37380:213;;37457:14;:20;37472:4;37457:20;;;;;;;;;;;;;;;;;;;;;;;;;:42;;;;37481:14;:18;37496:2;37481:18;;;;;;;;;;;;;;;;;;;;;;;;;37457:42;37423:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;37380:213;37749:16;;;;;;;;;;;37745:607;;;37826:7;:5;:7::i;:::-;37820:13;;:2;:13;;;;:66;;;;;37876:9;37862:24;;:2;:24;;;;37820:66;:117;;;;;37929:7;37915:22;;:2;:22;;;;37820:117;37790:543;;;38093:12;38026:20;:31;38047:9;38026:31;;;;;;;;;;;;;;;;:79;37988:248;;;;;;;;;;;;:::i;:::-;;;;;;;;;38297:12;38263:20;:31;38284:9;38263:31;;;;;;;;;;;;;;;:46;;;;37790:543;37745:607;38404:9;:15;38414:4;38404:15;;;;;;;;;;;;;;;;;;;;;;;;;:43;;;;;38424:19;:23;38444:2;38424:23;;;;;;;;;;;;;;;;;;;;;;;;;38423:24;38404:43;38400:933;;;38516:5;;38506:6;:15;;38472:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;38694:7;;38677:13;38687:2;38677:9;:13::i;:::-;38668:6;:22;;;;:::i;:::-;:33;;38634:138;;;;;;;;;;;;:::i;:::-;;;;;;;;;38400:933;;;38870:9;:13;38880:2;38870:13;;;;;;;;;;;;;;;;;;;;;;;;;:43;;;;;38888:19;:25;38908:4;38888:25;;;;;;;;;;;;;;;;;;;;;;;;;38887:26;38870:43;38844:489;;;39000:5;;38990:6;:15;;38956:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;38844:489;;;39127:19;:23;39147:2;39127:23;;;;;;;;;;;;;;;;;;;;;;;;;39122:211;;39235:7;;39218:13;39228:2;39218:9;:13::i;:::-;39209:6;:22;;;;:::i;:::-;:33;;39175:138;;;;;;;;;;;;:::i;:::-;;;;;;;;;39122:211;38844:489;38400:933;37155:2193;37119:2240;39371:28;39402:24;39420:4;39402:9;:24::i;:::-;39371:55;;39439:12;39478:25;;39454:20;:49;;39439:64;;39534:7;:43;;;;;39558:19;;;;;;;;;;;39534:43;:79;;;;;39595:18;;;;;;;;;;;39594:19;39534:79;:112;;;;;39631:9;:15;39641:4;39631:15;;;;;;;;;;;;;;;;;;;;;;;;;39630:16;39534:112;:150;;;;;39664:14;:20;39679:4;39664:20;;;;;;;;;;;;;;;;;;;;;;;;;39663:21;39534:150;:186;;;;;39702:14;:18;39717:2;39702:18;;;;;;;;;;;;;;;;;;;;;;;;;39701:19;39534:186;39516:338;;;39768:4;39747:18;;:25;;;;;;;;;;;;;;;;;;39789:10;:8;:10::i;:::-;39837:5;39816:18;;:26;;;;;;;;;;;;;;;;;;39516:338;39866:12;39882:18;;;;;;;;;;;39881:19;39866:34;;40002:14;:20;40017:4;40002:20;;;;;;;;;;;;;;;;;;;;;;;;;:42;;;;40026:14;:18;40041:2;40026:18;;;;;;;;;;;;;;;;;;;;;;;;;40002:42;39998:90;;;40071:5;40061:15;;39998:90;40105:14;:20;40120:4;40105:20;;;;;;;;;;;;;;;;;;;;;;;;;40104:21;:44;;;;40130:14;:18;40145:2;40130:18;;;;;;;;;;;;;;;;;;;;;;;;;40129:19;40104:44;40100:130;;;40174:11;:17;40186:4;40174:17;;;;;;;;;;;;;;;;;;;;;;;;;40173:18;40165:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;40100:130;40242:12;40347:7;40343:797;;;40399:9;:13;40409:2;40399:13;;;;;;;;;;;;;;;;;;;;;;;;;:34;;;;;40432:1;40416:13;;:17;40399:34;40395:598;;;40461:34;40491:3;40461:25;40472:13;;40461:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;40454:41;;40563:13;;40545:14;;40538:4;:21;;;;:::i;:::-;40537:39;;;;:::i;:::-;40514:19;;:62;;;;;;;:::i;:::-;;;;;;;;40646:13;;40627:15;;40620:4;:22;;;;:::i;:::-;40619:40;;;;:::i;:::-;40595:20;;:64;;;;;;;:::i;:::-;;;;;;;;40395:598;;;40721:9;:15;40731:4;40721:15;;;;;;;;;;;;;;;;;;;;;;;;;:35;;;;;40755:1;40740:12;;:16;40721:35;40717:276;;;40784:33;40813:3;40784:24;40795:12;;40784:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;40777:40;;40884:12;;40867:13;;40860:4;:20;;;;:::i;:::-;40859:37;;;;:::i;:::-;40836:19;;:60;;;;;;;:::i;:::-;;;;;;;;40965:12;;40947:14;;40940:4;:21;;;;:::i;:::-;40939:38;;;;:::i;:::-;40915:20;;:62;;;;;;;:::i;:::-;;;;;;;;40717:276;40395:598;41020:1;41013:4;:8;41009:89;;;41042:40;41056:4;41070;41077;41042:13;:40::i;:::-;41009:89;41124:4;41114:14;;;;;:::i;:::-;;;40343:797;41152:31;41166:4;41172:2;41176:6;41152:13;:31::i;:::-;37005:4186;;;;36894:4297;;;;:::o;41778:984::-;41817:23;41843:24;41861:4;41843:9;:24::i;:::-;41817:50;;41878:25;41929:19;;41906:20;;:42;;;;:::i;:::-;41878:70;;41959:12;42007:1;41988:15;:20;:46;;;;42033:1;42012:17;:22;41988:46;41984:85;;;42051:7;;;;;41984:85;42103:30;;42085:15;:48;42081:129;;;42168:30;;42150:48;;42081:129;42222:25;42250:21;42222:49;;42284:33;42301:15;42284:16;:33::i;:::-;42330:18;42351:44;42377:17;42351:21;:25;;:44;;;;:::i;:::-;42330:65;;42408:21;42432:58;42472:17;42432:35;42447:19;;42432:10;:14;;:35;;;;:::i;:::-;:39;;:58;;;;:::i;:::-;42408:82;;42526:1;42503:20;:24;;;;42560:1;42538:19;:23;;;;42596:13;;;;;;;;;;;42588:27;;42623:13;42588:53;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42574:67;;;;;42676:14;;;;;;;;;;;42668:28;;42718:21;42668:86;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42654:100;;;;;41806:956;;;;;;41778:984;:::o;3466:98::-;3524:7;3555:1;3551;:5;;;;:::i;:::-;3544:12;;3466:98;;;;:::o;3865:::-;3923:7;3954:1;3950;:5;;;;:::i;:::-;3943:12;;3865:98;;;;:::o;41199:571::-;41325:21;41363:1;41349:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41325:40;;41394:4;41376;41381:1;41376:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;41420:9;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41410:4;41415:1;41410:7;;;;;;;;:::i;:::-;;;;;;;:26;;;;;;;;;;;41449:56;41466:4;41481:9;41493:11;41449:8;:56::i;:::-;41544:9;:60;;;41619:11;41645:1;41689:4;41716;41736:15;41544:218;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41254:516;41199:571;:::o;3109:98::-;3167:7;3198:1;3194;:5;;;;:::i;:::-;3187:12;;3109:98;;;;:::o;7:90:1:-;41:7;84:5;77:13;70:21;59:32;;7:90;;;:::o;103:109::-;184:21;199:5;184:21;:::i;:::-;179:3;172:34;103:109;;:::o;218:210::-;305:4;343:2;332:9;328:18;320:26;;356:65;418:1;407:9;403:17;394:6;356:65;:::i;:::-;218:210;;;;:::o;434:77::-;471:7;500:5;489:16;;434:77;;;:::o;517:118::-;604:24;622:5;604:24;:::i;:::-;599:3;592:37;517:118;;:::o;641:222::-;734:4;772:2;761:9;757:18;749:26;;785:71;853:1;842:9;838:17;829:6;785:71;:::i;:::-;641:222;;;;:::o;869:99::-;921:6;955:5;949:12;939:22;;869:99;;;:::o;974:169::-;1058:11;1092:6;1087:3;1080:19;1132:4;1127:3;1123:14;1108:29;;974:169;;;;:::o;1149:246::-;1230:1;1240:113;1254:6;1251:1;1248:13;1240:113;;;1339:1;1334:3;1330:11;1324:18;1320:1;1315:3;1311:11;1304:39;1276:2;1273:1;1269:10;1264:15;;1240:113;;;1387:1;1378:6;1373:3;1369:16;1362:27;1211:184;1149:246;;;:::o;1401:102::-;1442:6;1493:2;1489:7;1484:2;1477:5;1473:14;1469:28;1459:38;;1401:102;;;:::o;1509:377::-;1597:3;1625:39;1658:5;1625:39;:::i;:::-;1680:71;1744:6;1739:3;1680:71;:::i;:::-;1673:78;;1760:65;1818:6;1813:3;1806:4;1799:5;1795:16;1760:65;:::i;:::-;1850:29;1872:6;1850:29;:::i;:::-;1845:3;1841:39;1834:46;;1601:285;1509:377;;;;:::o;1892:313::-;2005:4;2043:2;2032:9;2028:18;2020:26;;2092:9;2086:4;2082:20;2078:1;2067:9;2063:17;2056:47;2120:78;2193:4;2184:6;2120:78;:::i;:::-;2112:86;;1892:313;;;;:::o;2211:126::-;2248:7;2288:42;2281:5;2277:54;2266:65;;2211:126;;;:::o;2343:60::-;2371:3;2392:5;2385:12;;2343:60;;;:::o;2409:142::-;2459:9;2492:53;2510:34;2519:24;2537:5;2519:24;:::i;:::-;2510:34;:::i;:::-;2492:53;:::i;:::-;2479:66;;2409:142;;;:::o;2557:126::-;2607:9;2640:37;2671:5;2640:37;:::i;:::-;2627:50;;2557:126;;;:::o;2689:145::-;2758:9;2791:37;2822:5;2791:37;:::i;:::-;2778:50;;2689:145;;;:::o;2840:169::-;2946:56;2996:5;2946:56;:::i;:::-;2941:3;2934:69;2840:169;;:::o;3015:260::-;3127:4;3165:2;3154:9;3150:18;3142:26;;3178:90;3265:1;3254:9;3250:17;3241:6;3178:90;:::i;:::-;3015:260;;;;:::o;3362:117::-;3471:1;3468;3461:12;3485:117;3594:1;3591;3584:12;3608:96;3645:7;3674:24;3692:5;3674:24;:::i;:::-;3663:35;;3608:96;;;:::o;3710:122::-;3783:24;3801:5;3783:24;:::i;:::-;3776:5;3773:35;3763:63;;3822:1;3819;3812:12;3763:63;3710:122;:::o;3838:139::-;3884:5;3922:6;3909:20;3900:29;;3938:33;3965:5;3938:33;:::i;:::-;3838:139;;;;:::o;3983:122::-;4056:24;4074:5;4056:24;:::i;:::-;4049:5;4046:35;4036:63;;4095:1;4092;4085:12;4036:63;3983:122;:::o;4111:139::-;4157:5;4195:6;4182:20;4173:29;;4211:33;4238:5;4211:33;:::i;:::-;4111:139;;;;:::o;4256:474::-;4324:6;4332;4381:2;4369:9;4360:7;4356:23;4352:32;4349:119;;;4387:79;;:::i;:::-;4349:119;4507:1;4532:53;4577:7;4568:6;4557:9;4553:22;4532:53;:::i;:::-;4522:63;;4478:117;4634:2;4660:53;4705:7;4696:6;4685:9;4681:22;4660:53;:::i;:::-;4650:63;;4605:118;4256:474;;;;;:::o;4736:329::-;4795:6;4844:2;4832:9;4823:7;4819:23;4815:32;4812:119;;;4850:79;;:::i;:::-;4812:119;4970:1;4995:53;5040:7;5031:6;5020:9;5016:22;4995:53;:::i;:::-;4985:63;;4941:117;4736:329;;;;:::o;5071:::-;5130:6;5179:2;5167:9;5158:7;5154:23;5150:32;5147:119;;;5185:79;;:::i;:::-;5147:119;5305:1;5330:53;5375:7;5366:6;5355:9;5351:22;5330:53;:::i;:::-;5320:63;;5276:117;5071:329;;;;:::o;5406:619::-;5483:6;5491;5499;5548:2;5536:9;5527:7;5523:23;5519:32;5516:119;;;5554:79;;:::i;:::-;5516:119;5674:1;5699:53;5744:7;5735:6;5724:9;5720:22;5699:53;:::i;:::-;5689:63;;5645:117;5801:2;5827:53;5872:7;5863:6;5852:9;5848:22;5827:53;:::i;:::-;5817:63;;5772:118;5929:2;5955:53;6000:7;5991:6;5980:9;5976:22;5955:53;:::i;:::-;5945:63;;5900:118;5406:619;;;;;:::o;6031:86::-;6066:7;6106:4;6099:5;6095:16;6084:27;;6031:86;;;:::o;6123:112::-;6206:22;6222:5;6206:22;:::i;:::-;6201:3;6194:35;6123:112;;:::o;6241:214::-;6330:4;6368:2;6357:9;6353:18;6345:26;;6381:67;6445:1;6434:9;6430:17;6421:6;6381:67;:::i;:::-;6241:214;;;;:::o;6461:118::-;6548:24;6566:5;6548:24;:::i;:::-;6543:3;6536:37;6461:118;;:::o;6585:222::-;6678:4;6716:2;6705:9;6701:18;6693:26;;6729:71;6797:1;6786:9;6782:17;6773:6;6729:71;:::i;:::-;6585:222;;;;:::o;6813:116::-;6883:21;6898:5;6883:21;:::i;:::-;6876:5;6873:32;6863:60;;6919:1;6916;6909:12;6863:60;6813:116;:::o;6935:133::-;6978:5;7016:6;7003:20;6994:29;;7032:30;7056:5;7032:30;:::i;:::-;6935:133;;;;:::o;7074:323::-;7130:6;7179:2;7167:9;7158:7;7154:23;7150:32;7147:119;;;7185:79;;:::i;:::-;7147:119;7305:1;7330:50;7372:7;7363:6;7352:9;7348:22;7330:50;:::i;:::-;7320:60;;7276:114;7074:323;;;;:::o;7403:117::-;7512:1;7509;7502:12;7526:117;7635:1;7632;7625:12;7649:117;7758:1;7755;7748:12;7789:568;7862:8;7872:6;7922:3;7915:4;7907:6;7903:17;7899:27;7889:122;;7930:79;;:::i;:::-;7889:122;8043:6;8030:20;8020:30;;8073:18;8065:6;8062:30;8059:117;;;8095:79;;:::i;:::-;8059:117;8209:4;8201:6;8197:17;8185:29;;8263:3;8255:4;8247:6;8243:17;8233:8;8229:32;8226:41;8223:128;;;8270:79;;:::i;:::-;8223:128;7789:568;;;;;:::o;8380:::-;8453:8;8463:6;8513:3;8506:4;8498:6;8494:17;8490:27;8480:122;;8521:79;;:::i;:::-;8480:122;8634:6;8621:20;8611:30;;8664:18;8656:6;8653:30;8650:117;;;8686:79;;:::i;:::-;8650:117;8800:4;8792:6;8788:17;8776:29;;8854:3;8846:4;8838:6;8834:17;8824:8;8820:32;8817:41;8814:128;;;8861:79;;:::i;:::-;8814:128;8380:568;;;;;:::o;8954:934::-;9076:6;9084;9092;9100;9149:2;9137:9;9128:7;9124:23;9120:32;9117:119;;;9155:79;;:::i;:::-;9117:119;9303:1;9292:9;9288:17;9275:31;9333:18;9325:6;9322:30;9319:117;;;9355:79;;:::i;:::-;9319:117;9468:80;9540:7;9531:6;9520:9;9516:22;9468:80;:::i;:::-;9450:98;;;;9246:312;9625:2;9614:9;9610:18;9597:32;9656:18;9648:6;9645:30;9642:117;;;9678:79;;:::i;:::-;9642:117;9791:80;9863:7;9854:6;9843:9;9839:22;9791:80;:::i;:::-;9773:98;;;;9568:313;8954:934;;;;;;;:::o;9894:698::-;9986:6;9994;10002;10051:2;10039:9;10030:7;10026:23;10022:32;10019:119;;;10057:79;;:::i;:::-;10019:119;10205:1;10194:9;10190:17;10177:31;10235:18;10227:6;10224:30;10221:117;;;10257:79;;:::i;:::-;10221:117;10370:80;10442:7;10433:6;10422:9;10418:22;10370:80;:::i;:::-;10352:98;;;;10148:312;10499:2;10525:50;10567:7;10558:6;10547:9;10543:22;10525:50;:::i;:::-;10515:60;;10470:115;9894:698;;;;;:::o;10598:468::-;10663:6;10671;10720:2;10708:9;10699:7;10695:23;10691:32;10688:119;;;10726:79;;:::i;:::-;10688:119;10846:1;10871:53;10916:7;10907:6;10896:9;10892:22;10871:53;:::i;:::-;10861:63;;10817:117;10973:2;10999:50;11041:7;11032:6;11021:9;11017:22;10999:50;:::i;:::-;10989:60;;10944:115;10598:468;;;;;:::o;11072:474::-;11140:6;11148;11197:2;11185:9;11176:7;11172:23;11168:32;11165:119;;;11203:79;;:::i;:::-;11165:119;11323:1;11348:53;11393:7;11384:6;11373:9;11369:22;11348:53;:::i;:::-;11338:63;;11294:117;11450:2;11476:53;11521:7;11512:6;11501:9;11497:22;11476:53;:::i;:::-;11466:63;;11421:118;11072:474;;;;;:::o;11552:::-;11620:6;11628;11677:2;11665:9;11656:7;11652:23;11648:32;11645:119;;;11683:79;;:::i;:::-;11645:119;11803:1;11828:53;11873:7;11864:6;11853:9;11849:22;11828:53;:::i;:::-;11818:63;;11774:117;11930:2;11956:53;12001:7;11992:6;11981:9;11977:22;11956:53;:::i;:::-;11946:63;;11901:118;11552:474;;;;;:::o;12032:182::-;12172:34;12168:1;12160:6;12156:14;12149:58;12032:182;:::o;12220:366::-;12362:3;12383:67;12447:2;12442:3;12383:67;:::i;:::-;12376:74;;12459:93;12548:3;12459:93;:::i;:::-;12577:2;12572:3;12568:12;12561:19;;12220:366;;;:::o;12592:419::-;12758:4;12796:2;12785:9;12781:18;12773:26;;12845:9;12839:4;12835:20;12831:1;12820:9;12816:17;12809:47;12873:131;12999:4;12873:131;:::i;:::-;12865:139;;12592:419;;;:::o;13017:180::-;13065:77;13062:1;13055:88;13162:4;13159:1;13152:15;13186:4;13183:1;13176:15;13203:320;13247:6;13284:1;13278:4;13274:12;13264:22;;13331:1;13325:4;13321:12;13352:18;13342:81;;13408:4;13400:6;13396:17;13386:27;;13342:81;13470:2;13462:6;13459:14;13439:18;13436:38;13433:84;;13489:18;;:::i;:::-;13433:84;13254:269;13203:320;;;:::o;13529:182::-;13669:34;13665:1;13657:6;13653:14;13646:58;13529:182;:::o;13717:366::-;13859:3;13880:67;13944:2;13939:3;13880:67;:::i;:::-;13873:74;;13956:93;14045:3;13956:93;:::i;:::-;14074:2;14069:3;14065:12;14058:19;;13717:366;;;:::o;14089:419::-;14255:4;14293:2;14282:9;14278:18;14270:26;;14342:9;14336:4;14332:20;14328:1;14317:9;14313:17;14306:47;14370:131;14496:4;14370:131;:::i;:::-;14362:139;;14089:419;;;:::o;14514:180::-;14562:77;14559:1;14552:88;14659:4;14656:1;14649:15;14683:4;14680:1;14673:15;14700:410;14740:7;14763:20;14781:1;14763:20;:::i;:::-;14758:25;;14797:20;14815:1;14797:20;:::i;:::-;14792:25;;14852:1;14849;14845:9;14874:30;14892:11;14874:30;:::i;:::-;14863:41;;15053:1;15044:7;15040:15;15037:1;15034:22;15014:1;15007:9;14987:83;14964:139;;15083:18;;:::i;:::-;14964:139;14748:362;14700:410;;;;:::o;15116:180::-;15164:77;15161:1;15154:88;15261:4;15258:1;15251:15;15285:4;15282:1;15275:15;15302:185;15342:1;15359:20;15377:1;15359:20;:::i;:::-;15354:25;;15393:20;15411:1;15393:20;:::i;:::-;15388:25;;15432:1;15422:35;;15437:18;;:::i;:::-;15422:35;15479:1;15476;15472:9;15467:14;;15302:185;;;;:::o;15493:191::-;15533:3;15552:20;15570:1;15552:20;:::i;:::-;15547:25;;15586:20;15604:1;15586:20;:::i;:::-;15581:25;;15629:1;15626;15622:9;15615:16;;15650:3;15647:1;15644:10;15641:36;;;15657:18;;:::i;:::-;15641:36;15493:191;;;;:::o;15690:221::-;15830:34;15826:1;15818:6;15814:14;15807:58;15899:4;15894:2;15886:6;15882:15;15875:29;15690:221;:::o;15917:366::-;16059:3;16080:67;16144:2;16139:3;16080:67;:::i;:::-;16073:74;;16156:93;16245:3;16156:93;:::i;:::-;16274:2;16269:3;16265:12;16258:19;;15917:366;;;:::o;16289:419::-;16455:4;16493:2;16482:9;16478:18;16470:26;;16542:9;16536:4;16532:20;16528:1;16517:9;16513:17;16506:47;16570:131;16696:4;16570:131;:::i;:::-;16562:139;;16289:419;;;:::o;16714:167::-;16854:19;16850:1;16842:6;16838:14;16831:43;16714:167;:::o;16887:366::-;17029:3;17050:67;17114:2;17109:3;17050:67;:::i;:::-;17043:74;;17126:93;17215:3;17126:93;:::i;:::-;17244:2;17239:3;17235:12;17228:19;;16887:366;;;:::o;17259:419::-;17425:4;17463:2;17452:9;17448:18;17440:26;;17512:9;17506:4;17502:20;17498:1;17487:9;17483:17;17476:47;17540:131;17666:4;17540:131;:::i;:::-;17532:139;;17259:419;;;:::o;17684:180::-;17732:77;17729:1;17722:88;17829:4;17826:1;17819:15;17853:4;17850:1;17843:15;17870:233;17909:3;17932:24;17950:5;17932:24;:::i;:::-;17923:33;;17978:66;17971:5;17968:77;17965:103;;18048:18;;:::i;:::-;17965:103;18095:1;18088:5;18084:13;18077:20;;17870:233;;;:::o;18109:245::-;18249:34;18245:1;18237:6;18233:14;18226:58;18318:28;18313:2;18305:6;18301:15;18294:53;18109:245;:::o;18360:366::-;18502:3;18523:67;18587:2;18582:3;18523:67;:::i;:::-;18516:74;;18599:93;18688:3;18599:93;:::i;:::-;18717:2;18712:3;18708:12;18701:19;;18360:366;;;:::o;18732:419::-;18898:4;18936:2;18925:9;18921:18;18913:26;;18985:9;18979:4;18975:20;18971:1;18960:9;18956:17;18949:47;19013:131;19139:4;19013:131;:::i;:::-;19005:139;;18732:419;;;:::o;19157:169::-;19297:21;19293:1;19285:6;19281:14;19274:45;19157:169;:::o;19332:366::-;19474:3;19495:67;19559:2;19554:3;19495:67;:::i;:::-;19488:74;;19571:93;19660:3;19571:93;:::i;:::-;19689:2;19684:3;19680:12;19673:19;;19332:366;;;:::o;19704:419::-;19870:4;19908:2;19897:9;19893:18;19885:26;;19957:9;19951:4;19947:20;19943:1;19932:9;19928:17;19921:47;19985:131;20111:4;19985:131;:::i;:::-;19977:139;;19704:419;;;:::o;20129:228::-;20269:34;20265:1;20257:6;20253:14;20246:58;20338:11;20333:2;20325:6;20321:15;20314:36;20129:228;:::o;20363:366::-;20505:3;20526:67;20590:2;20585:3;20526:67;:::i;:::-;20519:74;;20602:93;20691:3;20602:93;:::i;:::-;20720:2;20715:3;20711:12;20704:19;;20363:366;;;:::o;20735:419::-;20901:4;20939:2;20928:9;20924:18;20916:26;;20988:9;20982:4;20978:20;20974:1;20963:9;20959:17;20952:47;21016:131;21142:4;21016:131;:::i;:::-;21008:139;;20735:419;;;:::o;21160:179::-;21300:31;21296:1;21288:6;21284:14;21277:55;21160:179;:::o;21345:366::-;21487:3;21508:67;21572:2;21567:3;21508:67;:::i;:::-;21501:74;;21584:93;21673:3;21584:93;:::i;:::-;21702:2;21697:3;21693:12;21686:19;;21345:366;;;:::o;21717:419::-;21883:4;21921:2;21910:9;21906:18;21898:26;;21970:9;21964:4;21960:20;21956:1;21945:9;21941:17;21934:47;21998:131;22124:4;21998:131;:::i;:::-;21990:139;;21717:419;;;:::o;22142:442::-;22291:4;22329:2;22318:9;22314:18;22306:26;;22342:71;22410:1;22399:9;22395:17;22386:6;22342:71;:::i;:::-;22423:72;22491:2;22480:9;22476:18;22467:6;22423:72;:::i;:::-;22505;22573:2;22562:9;22558:18;22549:6;22505:72;:::i;:::-;22142:442;;;;;;:::o;22590:240::-;22730:34;22726:1;22718:6;22714:14;22707:58;22799:23;22794:2;22786:6;22782:15;22775:48;22590:240;:::o;22836:366::-;22978:3;22999:67;23063:2;23058:3;22999:67;:::i;:::-;22992:74;;23075:93;23164:3;23075:93;:::i;:::-;23193:2;23188:3;23184:12;23177:19;;22836:366;;;:::o;23208:419::-;23374:4;23412:2;23401:9;23397:18;23389:26;;23461:9;23455:4;23451:20;23447:1;23436:9;23432:17;23425:47;23489:131;23615:4;23489:131;:::i;:::-;23481:139;;23208:419;;;:::o;23633:239::-;23773:34;23769:1;23761:6;23757:14;23750:58;23842:22;23837:2;23829:6;23825:15;23818:47;23633:239;:::o;23878:366::-;24020:3;24041:67;24105:2;24100:3;24041:67;:::i;:::-;24034:74;;24117:93;24206:3;24117:93;:::i;:::-;24235:2;24230:3;24226:12;24219:19;;23878:366;;;:::o;24250:419::-;24416:4;24454:2;24443:9;24439:18;24431:26;;24503:9;24497:4;24493:20;24489:1;24478:9;24474:17;24467:47;24531:131;24657:4;24531:131;:::i;:::-;24523:139;;24250:419;;;:::o;24675:251::-;24815:34;24811:1;24803:6;24799:14;24792:58;24884:34;24879:2;24871:6;24867:15;24860:59;24675:251;:::o;24932:366::-;25074:3;25095:67;25159:2;25154:3;25095:67;:::i;:::-;25088:74;;25171:93;25260:3;25171:93;:::i;:::-;25289:2;25284:3;25280:12;25273:19;;24932:366;;;:::o;25304:419::-;25470:4;25508:2;25497:9;25493:18;25485:26;;25557:9;25551:4;25547:20;25543:1;25532:9;25528:17;25521:47;25585:131;25711:4;25585:131;:::i;:::-;25577:139;;25304:419;;;:::o;25729:225::-;25869:34;25865:1;25857:6;25853:14;25846:58;25938:8;25933:2;25925:6;25921:15;25914:33;25729:225;:::o;25960:366::-;26102:3;26123:67;26187:2;26182:3;26123:67;:::i;:::-;26116:74;;26199:93;26288:3;26199:93;:::i;:::-;26317:2;26312:3;26308:12;26301:19;;25960:366;;;:::o;26332:419::-;26498:4;26536:2;26525:9;26521:18;26513:26;;26585:9;26579:4;26575:20;26571:1;26560:9;26556:17;26549:47;26613:131;26739:4;26613:131;:::i;:::-;26605:139;;26332:419;;;:::o;26757:172::-;26897:24;26893:1;26885:6;26881:14;26874:48;26757:172;:::o;26935:366::-;27077:3;27098:67;27162:2;27157:3;27098:67;:::i;:::-;27091:74;;27174:93;27263:3;27174:93;:::i;:::-;27292:2;27287:3;27283:12;27276:19;;26935:366;;;:::o;27307:419::-;27473:4;27511:2;27500:9;27496:18;27488:26;;27560:9;27554:4;27550:20;27546:1;27535:9;27531:17;27524:47;27588:131;27714:4;27588:131;:::i;:::-;27580:139;;27307:419;;;:::o;27732:295::-;27872:34;27868:1;27860:6;27856:14;27849:58;27941:34;27936:2;27928:6;27924:15;27917:59;28010:9;28005:2;27997:6;27993:15;27986:34;27732:295;:::o;28033:366::-;28175:3;28196:67;28260:2;28255:3;28196:67;:::i;:::-;28189:74;;28272:93;28361:3;28272:93;:::i;:::-;28390:2;28385:3;28381:12;28374:19;;28033:366;;;:::o;28405:419::-;28571:4;28609:2;28598:9;28594:18;28586:26;;28658:9;28652:4;28648:20;28644:1;28633:9;28629:17;28622:47;28686:131;28812:4;28686:131;:::i;:::-;28678:139;;28405:419;;;:::o;28830:225::-;28970:34;28966:1;28958:6;28954:14;28947:58;29039:8;29034:2;29026:6;29022:15;29015:33;28830:225;:::o;29061:366::-;29203:3;29224:67;29288:2;29283:3;29224:67;:::i;:::-;29217:74;;29300:93;29389:3;29300:93;:::i;:::-;29418:2;29413:3;29409:12;29402:19;;29061:366;;;:::o;29433:419::-;29599:4;29637:2;29626:9;29622:18;29614:26;;29686:9;29680:4;29676:20;29672:1;29661:9;29657:17;29650:47;29714:131;29840:4;29714:131;:::i;:::-;29706:139;;29433:419;;;:::o;29858:169::-;29998:21;29994:1;29986:6;29982:14;29975:45;29858:169;:::o;30033:366::-;30175:3;30196:67;30260:2;30255:3;30196:67;:::i;:::-;30189:74;;30272:93;30361:3;30272:93;:::i;:::-;30390:2;30385:3;30381:12;30374:19;;30033:366;;;:::o;30405:419::-;30571:4;30609:2;30598:9;30594:18;30586:26;;30658:9;30652:4;30648:20;30644:1;30633:9;30629:17;30622:47;30686:131;30812:4;30686:131;:::i;:::-;30678:139;;30405:419;;;:::o;30830:226::-;30970:34;30966:1;30958:6;30954:14;30947:58;31039:9;31034:2;31026:6;31022:15;31015:34;30830:226;:::o;31062:366::-;31204:3;31225:67;31289:2;31284:3;31225:67;:::i;:::-;31218:74;;31301:93;31390:3;31301:93;:::i;:::-;31419:2;31414:3;31410:12;31403:19;;31062:366;;;:::o;31434:419::-;31600:4;31638:2;31627:9;31623:18;31615:26;;31687:9;31681:4;31677:20;31673:1;31662:9;31658:17;31651:47;31715:131;31841:4;31715:131;:::i;:::-;31707:139;;31434:419;;;:::o;31859:172::-;31999:24;31995:1;31987:6;31983:14;31976:48;31859:172;:::o;32037:366::-;32179:3;32200:67;32264:2;32259:3;32200:67;:::i;:::-;32193:74;;32276:93;32365:3;32276:93;:::i;:::-;32394:2;32389:3;32385:12;32378:19;;32037:366;;;:::o;32409:419::-;32575:4;32613:2;32602:9;32598:18;32590:26;;32662:9;32656:4;32652:20;32648:1;32637:9;32633:17;32626:47;32690:131;32816:4;32690:131;:::i;:::-;32682:139;;32409:419;;;:::o;32834:194::-;32874:4;32894:20;32912:1;32894:20;:::i;:::-;32889:25;;32928:20;32946:1;32928:20;:::i;:::-;32923:25;;32972:1;32969;32965:9;32957:17;;32996:1;32990:4;32987:11;32984:37;;;33001:18;;:::i;:::-;32984:37;32834:194;;;;:::o;33034:147::-;33135:11;33172:3;33157:18;;33034:147;;;;:::o;33187:114::-;;:::o;33307:398::-;33466:3;33487:83;33568:1;33563:3;33487:83;:::i;:::-;33480:90;;33579:93;33668:3;33579:93;:::i;:::-;33697:1;33692:3;33688:11;33681:18;;33307:398;;;:::o;33711:379::-;33895:3;33917:147;34060:3;33917:147;:::i;:::-;33910:154;;34081:3;34074:10;;33711:379;;;:::o;34096:180::-;34144:77;34141:1;34134:88;34241:4;34238:1;34231:15;34265:4;34262:1;34255:15;34282:143;34339:5;34370:6;34364:13;34355:22;;34386:33;34413:5;34386:33;:::i;:::-;34282:143;;;;:::o;34431:351::-;34501:6;34550:2;34538:9;34529:7;34525:23;34521:32;34518:119;;;34556:79;;:::i;:::-;34518:119;34676:1;34701:64;34757:7;34748:6;34737:9;34733:22;34701:64;:::i;:::-;34691:74;;34647:128;34431:351;;;;:::o;34788:85::-;34833:7;34862:5;34851:16;;34788:85;;;:::o;34879:158::-;34937:9;34970:61;34988:42;34997:32;35023:5;34997:32;:::i;:::-;34988:42;:::i;:::-;34970:61;:::i;:::-;34957:74;;34879:158;;;:::o;35043:147::-;35138:45;35177:5;35138:45;:::i;:::-;35133:3;35126:58;35043:147;;:::o;35196:114::-;35263:6;35297:5;35291:12;35281:22;;35196:114;;;:::o;35316:184::-;35415:11;35449:6;35444:3;35437:19;35489:4;35484:3;35480:14;35465:29;;35316:184;;;;:::o;35506:132::-;35573:4;35596:3;35588:11;;35626:4;35621:3;35617:14;35609:22;;35506:132;;;:::o;35644:108::-;35721:24;35739:5;35721:24;:::i;:::-;35716:3;35709:37;35644:108;;:::o;35758:179::-;35827:10;35848:46;35890:3;35882:6;35848:46;:::i;:::-;35926:4;35921:3;35917:14;35903:28;;35758:179;;;;:::o;35943:113::-;36013:4;36045;36040:3;36036:14;36028:22;;35943:113;;;:::o;36092:732::-;36211:3;36240:54;36288:5;36240:54;:::i;:::-;36310:86;36389:6;36384:3;36310:86;:::i;:::-;36303:93;;36420:56;36470:5;36420:56;:::i;:::-;36499:7;36530:1;36515:284;36540:6;36537:1;36534:13;36515:284;;;36616:6;36610:13;36643:63;36702:3;36687:13;36643:63;:::i;:::-;36636:70;;36729:60;36782:6;36729:60;:::i;:::-;36719:70;;36575:224;36562:1;36559;36555:9;36550:14;;36515:284;;;36519:14;36815:3;36808:10;;36216:608;;;36092:732;;;;:::o;36830:831::-;37093:4;37131:3;37120:9;37116:19;37108:27;;37145:71;37213:1;37202:9;37198:17;37189:6;37145:71;:::i;:::-;37226:80;37302:2;37291:9;37287:18;37278:6;37226:80;:::i;:::-;37353:9;37347:4;37343:20;37338:2;37327:9;37323:18;37316:48;37381:108;37484:4;37475:6;37381:108;:::i;:::-;37373:116;;37499:72;37567:2;37556:9;37552:18;37543:6;37499:72;:::i;:::-;37581:73;37649:3;37638:9;37634:19;37625:6;37581:73;:::i;:::-;36830:831;;;;;;;;:::o

Swarm Source

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