ETH Price: $3,028.41 (+2.33%)
Gas: 2 Gwei

Token

Lucid Protocol (LUCID)
 

Overview

Max Total Supply

1,000,000 LUCID

Holders

55

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
9,283.642711164091954158 LUCID

Value
$0.00
0x418eee6f3cd2e451bf5faceea75193feb76fa5f4
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
LucidProtocol

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

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

/*

https://t.me/LucidProtocol

*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.15;

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);
}

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

    function WETH() external pure returns (address);

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

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

interface IUniswapV2Pair {
    function sync() external;
}

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

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

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

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

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

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

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

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

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

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

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the 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;
        }
    }
}

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

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

    bool private swapping;

    address public devWallet;

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

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

    uint256 public manualBurnFrequency = 30 minutes;
    uint256 public lastManualLpBurnTime;
    uint256 public tokenAllocation=0;

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

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

    uint256 public  buyTotalFees;
    uint256 public  buyBurnFee = 0;
    uint256 public  buyLiquidityFee = 2;
    uint256 public  buyDevFee = 10;

    uint256 public  sellTotalFees;
    uint256 public  sellBurnFee = 0;
    uint256 public  sellLiquidityFee = 2;
    uint256 public  sellDevFee = 10;

    uint256 public tokensForBurn;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;

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

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

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

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

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

    event AutoNukeLP();

    event ManualNukeLP();

    event BoughtEarly(address indexed sniper);

    constructor() ERC20("Lucid Protocol", "LUCID") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

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

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

        uint256 totalSupply = 1_000_000 * 1e18; // 1 million total supply

        maxTransactionAmount = 20_000 * 1e18; // 2% from total supply
        maxWallet = 20_000 * 1e18; // 2% from total supply maxWallet
        swapTokensAtAmount = (totalSupply * 3) / 10000; // 0.03% swap wallet

        buyTotalFees = buyBurnFee + buyLiquidityFee + buyDevFee;
        sellTotalFees = sellBurnFee + sellLiquidityFee + sellDevFee;

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

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

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

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

    receive() external payable {}

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

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

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 1000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        swapTokensAtAmount = newAmount;
        return true;
    }

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

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

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

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

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

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

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

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

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

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

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

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

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

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapBack();

            swapping = false;
        }

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

        bool takeFee = !swapping;

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

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

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

            amount -= fees;
        }

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

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

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

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

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

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

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

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

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

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

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

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

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

        uint256 ethForLiquidity = ethBalance - ethForDev;
        if (tokensForBurn > 0) {
        super._transfer(address(this), address(0xdead), tokensForBurn); 
        }

        tokensForLiquidity = 0;
        tokensForBurn = 0;
        tokensForDev = 0;


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

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

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

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

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

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

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

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

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

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

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLiquidityPairTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenAllocation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_burnFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_burnFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526014600b556001600c60006101000a81548160ff021916908315150217905550610e10600d55610708600f5560006011556001601260006101000a81548160ff0219169083151502179055506000601260016101000a81548160ff0219169083151502179055506000601260026101000a81548160ff0219169083151502179055506001601460006101000a81548160ff02191690831515021790555060006016556002601755600a6018556000601a556002601b55600a601c55348015620000cc57600080fd5b506040518060400160405280600e81526020017f4c756369642050726f746f636f6c0000000000000000000000000000000000008152506040518060400160405280600581526020017f4c5543494400000000000000000000000000000000000000000000000000000081525081600390816200014a919062000d4d565b5080600490816200015c919062000d4d565b5050506200017f620001736200059460201b60201c565b6200059c60201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001ab8160016200066260201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200022b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000251919062000e9e565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002b9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002df919062000e9e565b6040518363ffffffff1660e01b8152600401620002fe92919062000ee1565b6020604051808303816000875af11580156200031e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000344919062000e9e565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003b9600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200066260201b60201c565b620003ee600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200074c60201b60201c565b600069d3c21bcecceda1000000905069043c33c193756480000060088190555069043c33c1937564800000600a8190555061271060038262000431919062000f3d565b6200043d919062000fb7565b60098190555060185460175460165462000458919062000fef565b62000464919062000fef565b601581905550601c54601b54601a546200047f919062000fef565b6200048b919062000fef565b60198190555073b1cbff669fad01d1956cff201e06e6f26de71a30600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000508620004fa620007ed60201b60201c565b60016200081760201b60201c565b6200051b3060016200081760201b60201c565b6200053061dead60016200081760201b60201c565b6200055262000544620007ed60201b60201c565b60016200066260201b60201c565b620005653060016200066260201b60201c565b6200057a61dead60016200066260201b60201c565b6200058c33826200095160201b60201c565b505062001187565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620006726200059460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000698620007ed60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620006f1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006e8906200108b565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008276200059460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200084d620007ed60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620008a6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200089d906200108b565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009459190620010ca565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620009c3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009ba9062001137565b60405180910390fd5b620009d76000838362000ac960201b60201c565b8060026000828254620009eb919062000fef565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000a42919062000fef565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000aa991906200116a565b60405180910390a362000ac56000838362000ace60201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000b5557607f821691505b60208210810362000b6b5762000b6a62000b0d565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000bd57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000b96565b62000be1868362000b96565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000c2e62000c2862000c228462000bf9565b62000c03565b62000bf9565b9050919050565b6000819050919050565b62000c4a8362000c0d565b62000c6262000c598262000c35565b84845462000ba3565b825550505050565b600090565b62000c7962000c6a565b62000c8681848462000c3f565b505050565b5b8181101562000cae5762000ca260008262000c6f565b60018101905062000c8c565b5050565b601f82111562000cfd5762000cc78162000b71565b62000cd28462000b86565b8101602085101562000ce2578190505b62000cfa62000cf18562000b86565b83018262000c8b565b50505b505050565b600082821c905092915050565b600062000d226000198460080262000d02565b1980831691505092915050565b600062000d3d838362000d0f565b9150826002028217905092915050565b62000d588262000ad3565b67ffffffffffffffff81111562000d745762000d7362000ade565b5b62000d80825462000b3c565b62000d8d82828562000cb2565b600060209050601f83116001811462000dc5576000841562000db0578287015190505b62000dbc858262000d2f565b86555062000e2c565b601f19841662000dd58662000b71565b60005b8281101562000dff5784890151825560018201915060208501945060208101905062000dd8565b8683101562000e1f578489015162000e1b601f89168262000d0f565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000e668262000e39565b9050919050565b62000e788162000e59565b811462000e8457600080fd5b50565b60008151905062000e988162000e6d565b92915050565b60006020828403121562000eb75762000eb662000e34565b5b600062000ec78482850162000e87565b91505092915050565b62000edb8162000e59565b82525050565b600060408201905062000ef8600083018562000ed0565b62000f07602083018462000ed0565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000f4a8262000bf9565b915062000f578362000bf9565b925082820262000f678162000bf9565b9150828204841483151762000f815762000f8062000f0e565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000fc48262000bf9565b915062000fd18362000bf9565b92508262000fe45762000fe362000f88565b5b828204905092915050565b600062000ffc8262000bf9565b9150620010098362000bf9565b925082820190508082111562001024576200102362000f0e565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620010736020836200102a565b915062001080826200103b565b602082019050919050565b60006020820190508181036000830152620010a68162001064565b9050919050565b60008115159050919050565b620010c481620010ad565b82525050565b6000602082019050620010e16000830184620010b9565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006200111f601f836200102a565b91506200112c82620010e7565b602082019050919050565b60006020820190508181036000830152620011528162001110565b9050919050565b620011648162000bf9565b82525050565b600060208201905062001181600083018462001159565b92915050565b608051615a5a620011cd60003960008181610f5d01528181612c8b01528181613fcd015281816140ae015281816140d50152818161417101526141980152615a5a6000f3fe6080604052600436106103a65760003560e01c80638da5cb5b116101e7578063c02466681161010d578063e2f45605116100a0578063f2fde38b1161006f578063f2fde38b14610dcf578063f637434214610df8578063f8b45b0514610e23578063fe72b27a14610e4e576103ad565b8063e2f4560514610d23578063e71dc3f514610d4e578063e884f26014610d79578063f11a24d314610da4576103ad565b8063c8c8ebe4116100dc578063c8c8ebe414610c53578063d257b34f14610c7e578063d85ba06314610cbb578063dd62ed3e14610ce6576103ad565b8063c024666814610bad578063c17b5b8c14610bd6578063c18bc19514610bff578063c876d0b914610c28576103ad565b80639fccce3211610185578063a9059cbb11610154578063a9059cbb14610add578063adb873bd14610b1a578063b62496f514610b45578063bbc0c74214610b82576103ad565b80639fccce3214610a1f578063a0d82dc514610a4a578063a457c2d714610a75578063a4c82a0014610ab2576103ad565b806395d89b41116101c157806395d89b41146109755780639a7a23d6146109a05780639c3b4fdc146109c95780639ec22c0e146109f4576103ad565b80638da5cb5b146108f65780638ea5220f14610921578063924de9b71461094c576103ad565b80632e82f1a0116102cc5780636a486a8e1161026a578063730c188811610239578063730c188814610850578063751039fc146108795780637571336a146108a45780638095d564146108cd576103ad565b80636a486a8e146107a65780636ddd1713146107d157806370a08231146107fc578063715018a614610839576103ad565b806349bd5a5e116102a657806349bd5a5e146106e85780634a62bb65146107135780634fbee1931461073e57806358525fda1461077b576103ad565b80632e82f1a014610655578063313ce5671461068057806339509351146106ab576103ad565b8063199ffc721161034457806323b872dd1161031357806323b872dd146105ab57806327c8f835146105e8578063293230b8146106135780632c3e486c1461062a576103ad565b8063199ffc72146105015780631a8145bb1461052c5780631d77785614610557578063203e727e14610582576103ad565b80631694505e116103805780631694505e1461045757806318160ddd146104825780631816467f146104ad578063184c16c5146104d6576103ad565b806306fdde03146103b2578063095ea7b3146103dd57806310d5de531461041a576103ad565b366103ad57005b600080fd5b3480156103be57600080fd5b506103c7610e8b565b6040516103d491906142f7565b60405180910390f35b3480156103e957600080fd5b5061040460048036038101906103ff91906143b2565b610f1d565b604051610411919061440d565b60405180910390f35b34801561042657600080fd5b50610441600480360381019061043c9190614428565b610f3b565b60405161044e919061440d565b60405180910390f35b34801561046357600080fd5b5061046c610f5b565b60405161047991906144b4565b60405180910390f35b34801561048e57600080fd5b50610497610f7f565b6040516104a491906144de565b60405180910390f35b3480156104b957600080fd5b506104d460048036038101906104cf9190614428565b610f89565b005b3480156104e257600080fd5b506104eb6110c5565b6040516104f891906144de565b60405180910390f35b34801561050d57600080fd5b506105166110cb565b60405161052391906144de565b60405180910390f35b34801561053857600080fd5b506105416110d1565b60405161054e91906144de565b60405180910390f35b34801561056357600080fd5b5061056c6110d7565b60405161057991906144de565b60405180910390f35b34801561058e57600080fd5b506105a960048036038101906105a491906144f9565b6110dd565b005b3480156105b757600080fd5b506105d260048036038101906105cd9190614526565b6111ec565b6040516105df919061440d565b60405180910390f35b3480156105f457600080fd5b506105fd6112e4565b60405161060a9190614588565b60405180910390f35b34801561061f57600080fd5b506106286112ea565b005b34801561063657600080fd5b5061063f6113a5565b60405161064c91906144de565b60405180910390f35b34801561066157600080fd5b5061066a6113ab565b604051610677919061440d565b60405180910390f35b34801561068c57600080fd5b506106956113be565b6040516106a291906145bf565b60405180910390f35b3480156106b757600080fd5b506106d260048036038101906106cd91906143b2565b6113c7565b6040516106df919061440d565b60405180910390f35b3480156106f457600080fd5b506106fd611473565b60405161070a9190614588565b60405180910390f35b34801561071f57600080fd5b50610728611499565b604051610735919061440d565b60405180910390f35b34801561074a57600080fd5b5061076560048036038101906107609190614428565b6114ac565b604051610772919061440d565b60405180910390f35b34801561078757600080fd5b50610790611502565b60405161079d91906144de565b60405180910390f35b3480156107b257600080fd5b506107bb611508565b6040516107c891906144de565b60405180910390f35b3480156107dd57600080fd5b506107e661150e565b6040516107f3919061440d565b60405180910390f35b34801561080857600080fd5b50610823600480360381019061081e9190614428565b611521565b60405161083091906144de565b60405180910390f35b34801561084557600080fd5b5061084e611569565b005b34801561085c57600080fd5b5061087760048036038101906108729190614606565b6115f1565b005b34801561088557600080fd5b5061088e611731565b60405161089b919061440d565b60405180910390f35b3480156108b057600080fd5b506108cb60048036038101906108c69190614659565b6117d1565b005b3480156108d957600080fd5b506108f460048036038101906108ef9190614699565b6118a8565b005b34801561090257600080fd5b5061090b6119a7565b6040516109189190614588565b60405180910390f35b34801561092d57600080fd5b506109366119d1565b6040516109439190614588565b60405180910390f35b34801561095857600080fd5b50610973600480360381019061096e91906146ec565b6119f7565b005b34801561098157600080fd5b5061098a611a90565b60405161099791906142f7565b60405180910390f35b3480156109ac57600080fd5b506109c760048036038101906109c29190614659565b611b22565b005b3480156109d557600080fd5b506109de611c3c565b6040516109eb91906144de565b60405180910390f35b348015610a0057600080fd5b50610a09611c42565b604051610a1691906144de565b60405180910390f35b348015610a2b57600080fd5b50610a34611c48565b604051610a4191906144de565b60405180910390f35b348015610a5657600080fd5b50610a5f611c4e565b604051610a6c91906144de565b60405180910390f35b348015610a8157600080fd5b50610a9c6004803603810190610a9791906143b2565b611c54565b604051610aa9919061440d565b60405180910390f35b348015610abe57600080fd5b50610ac7611d3f565b604051610ad491906144de565b60405180910390f35b348015610ae957600080fd5b50610b046004803603810190610aff91906143b2565b611d45565b604051610b11919061440d565b60405180910390f35b348015610b2657600080fd5b50610b2f611d63565b604051610b3c91906144de565b60405180910390f35b348015610b5157600080fd5b50610b6c6004803603810190610b679190614428565b611d69565b604051610b79919061440d565b60405180910390f35b348015610b8e57600080fd5b50610b97611d89565b604051610ba4919061440d565b60405180910390f35b348015610bb957600080fd5b50610bd46004803603810190610bcf9190614659565b611d9c565b005b348015610be257600080fd5b50610bfd6004803603810190610bf89190614699565b611ec1565b005b348015610c0b57600080fd5b50610c266004803603810190610c2191906144f9565b611fc0565b005b348015610c3457600080fd5b50610c3d6120cf565b604051610c4a919061440d565b60405180910390f35b348015610c5f57600080fd5b50610c686120e2565b604051610c7591906144de565b60405180910390f35b348015610c8a57600080fd5b50610ca56004803603810190610ca091906144f9565b6120e8565b604051610cb2919061440d565b60405180910390f35b348015610cc757600080fd5b50610cd061223d565b604051610cdd91906144de565b60405180910390f35b348015610cf257600080fd5b50610d0d6004803603810190610d089190614719565b612243565b604051610d1a91906144de565b60405180910390f35b348015610d2f57600080fd5b50610d386122ca565b604051610d4591906144de565b60405180910390f35b348015610d5a57600080fd5b50610d636122d0565b604051610d7091906144de565b60405180910390f35b348015610d8557600080fd5b50610d8e6122d6565b604051610d9b919061440d565b60405180910390f35b348015610db057600080fd5b50610db9612376565b604051610dc691906144de565b60405180910390f35b348015610ddb57600080fd5b50610df66004803603810190610df19190614428565b61237c565b005b348015610e0457600080fd5b50610e0d612473565b604051610e1a91906144de565b60405180910390f35b348015610e2f57600080fd5b50610e38612479565b604051610e4591906144de565b60405180910390f35b348015610e5a57600080fd5b50610e756004803603810190610e7091906144f9565b61247f565b604051610e82919061440d565b60405180910390f35b606060038054610e9a90614788565b80601f0160208091040260200160405190810160405280929190818152602001828054610ec690614788565b8015610f135780601f10610ee857610100808354040283529160200191610f13565b820191906000526020600020905b815481529060010190602001808311610ef657829003601f168201915b5050505050905090565b6000610f31610f2a61275d565b8484612765565b6001905092915050565b60216020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610f9161275d565b73ffffffffffffffffffffffffffffffffffffffff16610faf6119a7565b73ffffffffffffffffffffffffffffffffffffffff1614611005576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffc90614805565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b600b5481565b601e5481565b601d5481565b6110e561275d565b73ffffffffffffffffffffffffffffffffffffffff166111036119a7565b73ffffffffffffffffffffffffffffffffffffffff1614611159576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115090614805565b60405180910390fd5b670de0b6b3a76400006103e8600161116f610f7f565b6111799190614854565b61118391906148c5565b61118d91906148c5565b8110156111cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c690614968565b60405180910390fd5b670de0b6b3a7640000816111e39190614854565b60088190555050565b60006111f984848461292e565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061124461275d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156112c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bb906149fa565b60405180910390fd5b6112d8856112d061275d565b858403612765565b60019150509392505050565b61dead81565b6112f261275d565b73ffffffffffffffffffffffffffffffffffffffff166113106119a7565b73ffffffffffffffffffffffffffffffffffffffff1614611366576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135d90614805565b60405180910390fd5b6001601260016101000a81548160ff0219169083151502179055506001601260026101000a81548160ff02191690831515021790555042600e81905550565b600d5481565b600c60009054906101000a900460ff1681565b60006012905090565b60006114696113d461275d565b8484600160006113e261275d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114649190614a1a565b612765565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601260009054906101000a900460ff1681565b6000602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60115481565b60195481565b601260029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61157161275d565b73ffffffffffffffffffffffffffffffffffffffff1661158f6119a7565b73ffffffffffffffffffffffffffffffffffffffff16146115e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115dc90614805565b60405180910390fd5b6115ef60006136ec565b565b6115f961275d565b73ffffffffffffffffffffffffffffffffffffffff166116176119a7565b73ffffffffffffffffffffffffffffffffffffffff161461166d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166490614805565b60405180910390fd5b6102588310156116b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a990614ac0565b60405180910390fd5b6103e882111580156116c5575060008210155b611704576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fb90614b52565b60405180910390fd5b82600d8190555081600b8190555080600c60006101000a81548160ff021916908315150217905550505050565b600061173b61275d565b73ffffffffffffffffffffffffffffffffffffffff166117596119a7565b73ffffffffffffffffffffffffffffffffffffffff16146117af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a690614805565b60405180910390fd5b6000601260006101000a81548160ff0219169083151502179055506001905090565b6117d961275d565b73ffffffffffffffffffffffffffffffffffffffff166117f76119a7565b73ffffffffffffffffffffffffffffffffffffffff161461184d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184490614805565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6118b061275d565b73ffffffffffffffffffffffffffffffffffffffff166118ce6119a7565b73ffffffffffffffffffffffffffffffffffffffff1614611924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191b90614805565b60405180910390fd5b82601681905550816017819055508060188190555060185460175460165461194c9190614a1a565b6119569190614a1a565b601581905550600560155411156119a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199990614bbe565b60405180910390fd5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6119ff61275d565b73ffffffffffffffffffffffffffffffffffffffff16611a1d6119a7565b73ffffffffffffffffffffffffffffffffffffffff1614611a73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6a90614805565b60405180910390fd5b80601260026101000a81548160ff02191690831515021790555050565b606060048054611a9f90614788565b80601f0160208091040260200160405190810160405280929190818152602001828054611acb90614788565b8015611b185780601f10611aed57610100808354040283529160200191611b18565b820191906000526020600020905b815481529060010190602001808311611afb57829003601f168201915b5050505050905090565b611b2a61275d565b73ffffffffffffffffffffffffffffffffffffffff16611b486119a7565b73ffffffffffffffffffffffffffffffffffffffff1614611b9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9590614805565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2590614c50565b60405180910390fd5b611c3882826137b2565b5050565b60185481565b60105481565b601f5481565b601c5481565b60008060016000611c6361275d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611d20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1790614ce2565b60405180910390fd5b611d34611d2b61275d565b85858403612765565b600191505092915050565b600e5481565b6000611d59611d5261275d565b848461292e565b6001905092915050565b601a5481565b60226020528060005260406000206000915054906101000a900460ff1681565b601260019054906101000a900460ff1681565b611da461275d565b73ffffffffffffffffffffffffffffffffffffffff16611dc26119a7565b73ffffffffffffffffffffffffffffffffffffffff1614611e18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0f90614805565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611eb5919061440d565b60405180910390a25050565b611ec961275d565b73ffffffffffffffffffffffffffffffffffffffff16611ee76119a7565b73ffffffffffffffffffffffffffffffffffffffff1614611f3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3490614805565b60405180910390fd5b82601a8190555081601b8190555080601c81905550601c54601b54601a54611f659190614a1a565b611f6f9190614a1a565b60198190555060056019541115611fbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb290614d4e565b60405180910390fd5b505050565b611fc861275d565b73ffffffffffffffffffffffffffffffffffffffff16611fe66119a7565b73ffffffffffffffffffffffffffffffffffffffff161461203c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203390614805565b60405180910390fd5b670de0b6b3a76400006103e86005612052610f7f565b61205c9190614854565b61206691906148c5565b61207091906148c5565b8110156120b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a990614de0565b60405180910390fd5b670de0b6b3a7640000816120c69190614854565b600a8190555050565b601460009054906101000a900460ff1681565b60085481565b60006120f261275d565b73ffffffffffffffffffffffffffffffffffffffff166121106119a7565b73ffffffffffffffffffffffffffffffffffffffff1614612166576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215d90614805565b60405180910390fd5b620186a06001612174610f7f565b61217e9190614854565b61218891906148c5565b8210156121ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c190614e72565b60405180910390fd5b6103e860056121d7610f7f565b6121e19190614854565b6121eb91906148c5565b82111561222d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222490614f04565b60405180910390fd5b8160098190555060019050919050565b60155481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60165481565b60006122e061275d565b73ffffffffffffffffffffffffffffffffffffffff166122fe6119a7565b73ffffffffffffffffffffffffffffffffffffffff1614612354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234b90614805565b60405180910390fd5b6000601460006101000a81548160ff0219169083151502179055506001905090565b60175481565b61238461275d565b73ffffffffffffffffffffffffffffffffffffffff166123a26119a7565b73ffffffffffffffffffffffffffffffffffffffff16146123f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ef90614805565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612467576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245e90614f96565b60405180910390fd5b612470816136ec565b50565b601b5481565b600a5481565b600061248961275d565b73ffffffffffffffffffffffffffffffffffffffff166124a76119a7565b73ffffffffffffffffffffffffffffffffffffffff16146124fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f490614805565b60405180910390fd5b600f5460105461250d9190614a1a565b421161254e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254590615002565b60405180910390fd5b6103e8821115612593576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258a90615094565b60405180910390fd5b4260108190555060003073ffffffffffffffffffffffffffffffffffffffff166370a08231600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016125f79190614588565b602060405180830381865afa158015612614573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061263891906150c9565b90506000612663612710612655868561385390919063ffffffff16565b61386990919063ffffffff16565b9050600081111561269e5761269d600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661dead8361387f565b5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561270d57600080fd5b505af1158015612721573d6000803e3d6000fd5b505050507f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb60405160405180910390a160019350505050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036127d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127cb90615168565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283a906151fa565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161292191906144de565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361299d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129949061528c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a039061531e565b60405180910390fd5b60008103612a2557612a208383600061387f565b6136e7565b601260009054906101000a900460ff16156130ea57612a426119a7565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612ab05750612a806119a7565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ae95750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b23575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b3c5750600660149054906101000a900460ff16155b156130e957601260019054906101000a900460ff16612c3657602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612bf65750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2c9061538a565b60405180910390fd5b5b601460009054906101000a900460ff1615612e0057612c536119a7565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612cda57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d345750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612dff5743601360003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db190615442565b60405180910390fd5b43601360003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ea35750602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f4a57600854811115612eed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ee4906154d4565b60405180910390fd5b600a54612ef983611521565b82612f049190614a1a565b1115612f45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3c90615540565b60405180910390fd5b6130e8565b602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612fed5750602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561303c57600854811115613037576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302e906155d2565b60405180910390fd5b6130e7565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166130e657600a5461309983611521565b826130a49190614a1a565b11156130e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130dc90615540565b60405180910390fd5b5b5b5b5b5b60006130f530611521565b90506000600954821015905080801561311a5750601260029054906101000a900460ff165b80156131335750600660149054906101000a900460ff16155b80156131895750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131df5750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132355750602060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613279576001600660146101000a81548160ff02191690831515021790555061325d613afe565b6000600660146101000a81548160ff0219169083151502179055505b600660149054906101000a900460ff161580156132df5750602260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156132f75750600c60009054906101000a900460ff165b80156133125750600d54600e5461330e9190614a1a565b4210155b80156133685750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561337757613375613d42565b505b6000600660149054906101000a900460ff16159050602060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061342d5750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561343757600090505b600081156136d757602260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561349a57506000601954115b15613576576032601154106134ae57600080fd5b6134d660646134c86019548861385390919063ffffffff16565b61386990919063ffffffff16565b9050601954601b54826134e99190614854565b6134f391906148c5565b601e60008282546135049190614a1a565b92505081905550601954601c548261351c9190614854565b61352691906148c5565b601f60008282546135379190614a1a565b92505081905550601954601a548261354f9190614854565b61355991906148c5565b601d600082825461356a9190614a1a565b925050819055506136b3565b602260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156135d157506000601554115b156136b257601160008154809291906135e9906155f2565b919050555061361660646136086015548861385390919063ffffffff16565b61386990919063ffffffff16565b9050601554601754826136299190614854565b61363391906148c5565b601e60008282546136449190614a1a565b925050819055506015546018548261365c9190614854565b61366691906148c5565b601f60008282546136779190614a1a565b925050819055506015546016548261368f9190614854565b61369991906148c5565b601d60008282546136aa9190614a1a565b925050819055505b5b60008111156136c8576136c787308361387f565b5b80856136d4919061563a565b94505b6136e287878761387f565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600081836138619190614854565b905092915050565b6000818361387791906148c5565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036138ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138e59061528c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361395d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139549061531e565b60405180910390fd5b613968838383613f0e565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156139ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139e5906156e0565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613a819190614a1a565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613ae591906144de565b60405180910390a3613af8848484613f13565b50505050565b6000613b0930611521565b90506000601f54601e54613b1d9190614a1a565b9050600080831480613b2f5750600082145b15613b3c57505050613d40565b6014600954613b4b9190614854565b831115613b64576014600954613b619190614854565b92505b6000600283601e5486613b779190614854565b613b8191906148c5565b613b8b91906148c5565b90506000613bb6601d54613ba88488613f1890919063ffffffff16565b613f1890919063ffffffff16565b90506000479050613bc682613f2e565b6000613bdb8247613f1890919063ffffffff16565b90506000613c0687613bf8601f548561385390919063ffffffff16565b61386990919063ffffffff16565b905060008183613c16919061563a565b90506000601d541115613c3357613c323061dead601d5461387f565b5b6000601e819055506000601d819055506000601f81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613c9190615731565b60006040518083038185875af1925050503d8060008114613cce576040519150601f19603f3d011682016040523d82523d6000602084013e613cd3565b606091505b505080975050600086118015613ce95750600081115b15613d3657613cf8868261416b565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601e54604051613d2d93929190615746565b60405180910390a15b5050505050505050505b565b600042600e8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a08231600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401613da89190614588565b602060405180830381865afa158015613dc5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613de991906150c9565b90506000613e16612710613e08600b548561385390919063ffffffff16565b61386990919063ffffffff16565b90506000811115613e5157613e50600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661dead8361387f565b5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613ec057600080fd5b505af1158015613ed4573d6000803e3d6000fd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b505050565b505050565b60008183613f26919061563a565b905092915050565b6000600267ffffffffffffffff811115613f4b57613f4a61577d565b5b604051908082528060200260200182016040528015613f795781602001602082028036833780820191505090505b5090503081600081518110613f9157613f906157ac565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614036573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061405a91906157f0565b8160018151811061406e5761406d6157ac565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506140d3307f000000000000000000000000000000000000000000000000000000000000000084612765565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614135959493929190615916565b600060405180830381600087803b15801561414f57600080fd5b505af1158015614163573d6000803e3d6000fd5b505050505050565b614196307f000000000000000000000000000000000000000000000000000000000000000084612765565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161421d96959493929190615970565b60606040518083038185885af115801561423b573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061426091906159d1565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156142a1578082015181840152602081019050614286565b60008484015250505050565b6000601f19601f8301169050919050565b60006142c982614267565b6142d38185614272565b93506142e3818560208601614283565b6142ec816142ad565b840191505092915050565b6000602082019050818103600083015261431181846142be565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006143498261431e565b9050919050565b6143598161433e565b811461436457600080fd5b50565b60008135905061437681614350565b92915050565b6000819050919050565b61438f8161437c565b811461439a57600080fd5b50565b6000813590506143ac81614386565b92915050565b600080604083850312156143c9576143c8614319565b5b60006143d785828601614367565b92505060206143e88582860161439d565b9150509250929050565b60008115159050919050565b614407816143f2565b82525050565b600060208201905061442260008301846143fe565b92915050565b60006020828403121561443e5761443d614319565b5b600061444c84828501614367565b91505092915050565b6000819050919050565b600061447a6144756144708461431e565b614455565b61431e565b9050919050565b600061448c8261445f565b9050919050565b600061449e82614481565b9050919050565b6144ae81614493565b82525050565b60006020820190506144c960008301846144a5565b92915050565b6144d88161437c565b82525050565b60006020820190506144f360008301846144cf565b92915050565b60006020828403121561450f5761450e614319565b5b600061451d8482850161439d565b91505092915050565b60008060006060848603121561453f5761453e614319565b5b600061454d86828701614367565b935050602061455e86828701614367565b925050604061456f8682870161439d565b9150509250925092565b6145828161433e565b82525050565b600060208201905061459d6000830184614579565b92915050565b600060ff82169050919050565b6145b9816145a3565b82525050565b60006020820190506145d460008301846145b0565b92915050565b6145e3816143f2565b81146145ee57600080fd5b50565b600081359050614600816145da565b92915050565b60008060006060848603121561461f5761461e614319565b5b600061462d8682870161439d565b935050602061463e8682870161439d565b925050604061464f868287016145f1565b9150509250925092565b600080604083850312156146705761466f614319565b5b600061467e85828601614367565b925050602061468f858286016145f1565b9150509250929050565b6000806000606084860312156146b2576146b1614319565b5b60006146c08682870161439d565b93505060206146d18682870161439d565b92505060406146e28682870161439d565b9150509250925092565b60006020828403121561470257614701614319565b5b6000614710848285016145f1565b91505092915050565b600080604083850312156147305761472f614319565b5b600061473e85828601614367565b925050602061474f85828601614367565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806147a057607f821691505b6020821081036147b3576147b2614759565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006147ef602083614272565b91506147fa826147b9565b602082019050919050565b6000602082019050818103600083015261481e816147e2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061485f8261437c565b915061486a8361437c565b92508282026148788161437c565b9150828204841483151761488f5761488e614825565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006148d08261437c565b91506148db8361437c565b9250826148eb576148ea614896565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614952602f83614272565b915061495d826148f6565b604082019050919050565b6000602082019050818103600083015261498181614945565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006149e4602883614272565b91506149ef82614988565b604082019050919050565b60006020820190508181036000830152614a13816149d7565b9050919050565b6000614a258261437c565b9150614a308361437c565b9250828201905080821115614a4857614a47614825565b5b92915050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b6000614aaa603383614272565b9150614ab582614a4e565b604082019050919050565b60006020820190508181036000830152614ad981614a9d565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b6000614b3c603083614272565b9150614b4782614ae0565b604082019050919050565b60006020820190508181036000830152614b6b81614b2f565b9050919050565b7f4d757374206b6565702066656573206174203525206f72206c65737300000000600082015250565b6000614ba8601c83614272565b9150614bb382614b72565b602082019050919050565b60006020820190508181036000830152614bd781614b9b565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614c3a603983614272565b9150614c4582614bde565b604082019050919050565b60006020820190508181036000830152614c6981614c2d565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614ccc602583614272565b9150614cd782614c70565b604082019050919050565b60006020820190508181036000830152614cfb81614cbf565b9050919050565b7f4d757374206b656570206665657320617420203525206f72206c657373000000600082015250565b6000614d38601d83614272565b9150614d4382614d02565b602082019050919050565b60006020820190508181036000830152614d6781614d2b565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614dca602483614272565b9150614dd582614d6e565b604082019050919050565b60006020820190508181036000830152614df981614dbd565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614e5c603583614272565b9150614e6782614e00565b604082019050919050565b60006020820190508181036000830152614e8b81614e4f565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614eee603483614272565b9150614ef982614e92565b604082019050919050565b60006020820190508181036000830152614f1d81614ee1565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614f80602683614272565b9150614f8b82614f24565b604082019050919050565b60006020820190508181036000830152614faf81614f73565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b6000614fec602083614272565b9150614ff782614fb6565b602082019050919050565b6000602082019050818103600083015261501b81614fdf565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b600061507e602a83614272565b915061508982615022565b604082019050919050565b600060208201905081810360008301526150ad81615071565b9050919050565b6000815190506150c381614386565b92915050565b6000602082840312156150df576150de614319565b5b60006150ed848285016150b4565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000615152602483614272565b915061515d826150f6565b604082019050919050565b6000602082019050818103600083015261518181615145565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006151e4602283614272565b91506151ef82615188565b604082019050919050565b60006020820190508181036000830152615213816151d7565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615276602583614272565b91506152818261521a565b604082019050919050565b600060208201905081810360008301526152a581615269565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615308602383614272565b9150615313826152ac565b604082019050919050565b60006020820190508181036000830152615337816152fb565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000615374601683614272565b915061537f8261533e565b602082019050919050565b600060208201905081810360008301526153a381615367565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061542c604983614272565b9150615437826153aa565b606082019050919050565b6000602082019050818103600083015261545b8161541f565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006154be603583614272565b91506154c982615462565b604082019050919050565b600060208201905081810360008301526154ed816154b1565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061552a601383614272565b9150615535826154f4565b602082019050919050565b600060208201905081810360008301526155598161551d565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006155bc603683614272565b91506155c782615560565b604082019050919050565b600060208201905081810360008301526155eb816155af565b9050919050565b60006155fd8261437c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361562f5761562e614825565b5b600182019050919050565b60006156458261437c565b91506156508361437c565b925082820390508181111561566857615667614825565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006156ca602683614272565b91506156d58261566e565b604082019050919050565b600060208201905081810360008301526156f9816156bd565b9050919050565b600081905092915050565b50565b600061571b600083615700565b91506157268261570b565b600082019050919050565b600061573c8261570e565b9150819050919050565b600060608201905061575b60008301866144cf565b61576860208301856144cf565b61577560408301846144cf565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506157ea81614350565b92915050565b60006020828403121561580657615805614319565b5b6000615814848285016157db565b91505092915050565b6000819050919050565b600061584261583d6158388461581d565b614455565b61437c565b9050919050565b61585281615827565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61588d8161433e565b82525050565b600061589f8383615884565b60208301905092915050565b6000602082019050919050565b60006158c382615858565b6158cd8185615863565b93506158d883615874565b8060005b838110156159095781516158f08882615893565b97506158fb836158ab565b9250506001810190506158dc565b5085935050505092915050565b600060a08201905061592b60008301886144cf565b6159386020830187615849565b818103604083015261594a81866158b8565b90506159596060830185614579565b61596660808301846144cf565b9695505050505050565b600060c0820190506159856000830189614579565b61599260208301886144cf565b61599f6040830187615849565b6159ac6060830186615849565b6159b96080830185614579565b6159c660a08301846144cf565b979650505050505050565b6000806000606084860312156159ea576159e9614319565b5b60006159f8868287016150b4565b9350506020615a09868287016150b4565b9250506040615a1a868287016150b4565b915050925092509256fea2646970667358221220768ac90218912e92993130988015d57e4223b16a321f0fad49029d758dd7c6c164736f6c63430008110033

Deployed Bytecode

0x6080604052600436106103a65760003560e01c80638da5cb5b116101e7578063c02466681161010d578063e2f45605116100a0578063f2fde38b1161006f578063f2fde38b14610dcf578063f637434214610df8578063f8b45b0514610e23578063fe72b27a14610e4e576103ad565b8063e2f4560514610d23578063e71dc3f514610d4e578063e884f26014610d79578063f11a24d314610da4576103ad565b8063c8c8ebe4116100dc578063c8c8ebe414610c53578063d257b34f14610c7e578063d85ba06314610cbb578063dd62ed3e14610ce6576103ad565b8063c024666814610bad578063c17b5b8c14610bd6578063c18bc19514610bff578063c876d0b914610c28576103ad565b80639fccce3211610185578063a9059cbb11610154578063a9059cbb14610add578063adb873bd14610b1a578063b62496f514610b45578063bbc0c74214610b82576103ad565b80639fccce3214610a1f578063a0d82dc514610a4a578063a457c2d714610a75578063a4c82a0014610ab2576103ad565b806395d89b41116101c157806395d89b41146109755780639a7a23d6146109a05780639c3b4fdc146109c95780639ec22c0e146109f4576103ad565b80638da5cb5b146108f65780638ea5220f14610921578063924de9b71461094c576103ad565b80632e82f1a0116102cc5780636a486a8e1161026a578063730c188811610239578063730c188814610850578063751039fc146108795780637571336a146108a45780638095d564146108cd576103ad565b80636a486a8e146107a65780636ddd1713146107d157806370a08231146107fc578063715018a614610839576103ad565b806349bd5a5e116102a657806349bd5a5e146106e85780634a62bb65146107135780634fbee1931461073e57806358525fda1461077b576103ad565b80632e82f1a014610655578063313ce5671461068057806339509351146106ab576103ad565b8063199ffc721161034457806323b872dd1161031357806323b872dd146105ab57806327c8f835146105e8578063293230b8146106135780632c3e486c1461062a576103ad565b8063199ffc72146105015780631a8145bb1461052c5780631d77785614610557578063203e727e14610582576103ad565b80631694505e116103805780631694505e1461045757806318160ddd146104825780631816467f146104ad578063184c16c5146104d6576103ad565b806306fdde03146103b2578063095ea7b3146103dd57806310d5de531461041a576103ad565b366103ad57005b600080fd5b3480156103be57600080fd5b506103c7610e8b565b6040516103d491906142f7565b60405180910390f35b3480156103e957600080fd5b5061040460048036038101906103ff91906143b2565b610f1d565b604051610411919061440d565b60405180910390f35b34801561042657600080fd5b50610441600480360381019061043c9190614428565b610f3b565b60405161044e919061440d565b60405180910390f35b34801561046357600080fd5b5061046c610f5b565b60405161047991906144b4565b60405180910390f35b34801561048e57600080fd5b50610497610f7f565b6040516104a491906144de565b60405180910390f35b3480156104b957600080fd5b506104d460048036038101906104cf9190614428565b610f89565b005b3480156104e257600080fd5b506104eb6110c5565b6040516104f891906144de565b60405180910390f35b34801561050d57600080fd5b506105166110cb565b60405161052391906144de565b60405180910390f35b34801561053857600080fd5b506105416110d1565b60405161054e91906144de565b60405180910390f35b34801561056357600080fd5b5061056c6110d7565b60405161057991906144de565b60405180910390f35b34801561058e57600080fd5b506105a960048036038101906105a491906144f9565b6110dd565b005b3480156105b757600080fd5b506105d260048036038101906105cd9190614526565b6111ec565b6040516105df919061440d565b60405180910390f35b3480156105f457600080fd5b506105fd6112e4565b60405161060a9190614588565b60405180910390f35b34801561061f57600080fd5b506106286112ea565b005b34801561063657600080fd5b5061063f6113a5565b60405161064c91906144de565b60405180910390f35b34801561066157600080fd5b5061066a6113ab565b604051610677919061440d565b60405180910390f35b34801561068c57600080fd5b506106956113be565b6040516106a291906145bf565b60405180910390f35b3480156106b757600080fd5b506106d260048036038101906106cd91906143b2565b6113c7565b6040516106df919061440d565b60405180910390f35b3480156106f457600080fd5b506106fd611473565b60405161070a9190614588565b60405180910390f35b34801561071f57600080fd5b50610728611499565b604051610735919061440d565b60405180910390f35b34801561074a57600080fd5b5061076560048036038101906107609190614428565b6114ac565b604051610772919061440d565b60405180910390f35b34801561078757600080fd5b50610790611502565b60405161079d91906144de565b60405180910390f35b3480156107b257600080fd5b506107bb611508565b6040516107c891906144de565b60405180910390f35b3480156107dd57600080fd5b506107e661150e565b6040516107f3919061440d565b60405180910390f35b34801561080857600080fd5b50610823600480360381019061081e9190614428565b611521565b60405161083091906144de565b60405180910390f35b34801561084557600080fd5b5061084e611569565b005b34801561085c57600080fd5b5061087760048036038101906108729190614606565b6115f1565b005b34801561088557600080fd5b5061088e611731565b60405161089b919061440d565b60405180910390f35b3480156108b057600080fd5b506108cb60048036038101906108c69190614659565b6117d1565b005b3480156108d957600080fd5b506108f460048036038101906108ef9190614699565b6118a8565b005b34801561090257600080fd5b5061090b6119a7565b6040516109189190614588565b60405180910390f35b34801561092d57600080fd5b506109366119d1565b6040516109439190614588565b60405180910390f35b34801561095857600080fd5b50610973600480360381019061096e91906146ec565b6119f7565b005b34801561098157600080fd5b5061098a611a90565b60405161099791906142f7565b60405180910390f35b3480156109ac57600080fd5b506109c760048036038101906109c29190614659565b611b22565b005b3480156109d557600080fd5b506109de611c3c565b6040516109eb91906144de565b60405180910390f35b348015610a0057600080fd5b50610a09611c42565b604051610a1691906144de565b60405180910390f35b348015610a2b57600080fd5b50610a34611c48565b604051610a4191906144de565b60405180910390f35b348015610a5657600080fd5b50610a5f611c4e565b604051610a6c91906144de565b60405180910390f35b348015610a8157600080fd5b50610a9c6004803603810190610a9791906143b2565b611c54565b604051610aa9919061440d565b60405180910390f35b348015610abe57600080fd5b50610ac7611d3f565b604051610ad491906144de565b60405180910390f35b348015610ae957600080fd5b50610b046004803603810190610aff91906143b2565b611d45565b604051610b11919061440d565b60405180910390f35b348015610b2657600080fd5b50610b2f611d63565b604051610b3c91906144de565b60405180910390f35b348015610b5157600080fd5b50610b6c6004803603810190610b679190614428565b611d69565b604051610b79919061440d565b60405180910390f35b348015610b8e57600080fd5b50610b97611d89565b604051610ba4919061440d565b60405180910390f35b348015610bb957600080fd5b50610bd46004803603810190610bcf9190614659565b611d9c565b005b348015610be257600080fd5b50610bfd6004803603810190610bf89190614699565b611ec1565b005b348015610c0b57600080fd5b50610c266004803603810190610c2191906144f9565b611fc0565b005b348015610c3457600080fd5b50610c3d6120cf565b604051610c4a919061440d565b60405180910390f35b348015610c5f57600080fd5b50610c686120e2565b604051610c7591906144de565b60405180910390f35b348015610c8a57600080fd5b50610ca56004803603810190610ca091906144f9565b6120e8565b604051610cb2919061440d565b60405180910390f35b348015610cc757600080fd5b50610cd061223d565b604051610cdd91906144de565b60405180910390f35b348015610cf257600080fd5b50610d0d6004803603810190610d089190614719565b612243565b604051610d1a91906144de565b60405180910390f35b348015610d2f57600080fd5b50610d386122ca565b604051610d4591906144de565b60405180910390f35b348015610d5a57600080fd5b50610d636122d0565b604051610d7091906144de565b60405180910390f35b348015610d8557600080fd5b50610d8e6122d6565b604051610d9b919061440d565b60405180910390f35b348015610db057600080fd5b50610db9612376565b604051610dc691906144de565b60405180910390f35b348015610ddb57600080fd5b50610df66004803603810190610df19190614428565b61237c565b005b348015610e0457600080fd5b50610e0d612473565b604051610e1a91906144de565b60405180910390f35b348015610e2f57600080fd5b50610e38612479565b604051610e4591906144de565b60405180910390f35b348015610e5a57600080fd5b50610e756004803603810190610e7091906144f9565b61247f565b604051610e82919061440d565b60405180910390f35b606060038054610e9a90614788565b80601f0160208091040260200160405190810160405280929190818152602001828054610ec690614788565b8015610f135780601f10610ee857610100808354040283529160200191610f13565b820191906000526020600020905b815481529060010190602001808311610ef657829003601f168201915b5050505050905090565b6000610f31610f2a61275d565b8484612765565b6001905092915050565b60216020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610f9161275d565b73ffffffffffffffffffffffffffffffffffffffff16610faf6119a7565b73ffffffffffffffffffffffffffffffffffffffff1614611005576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffc90614805565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b600b5481565b601e5481565b601d5481565b6110e561275d565b73ffffffffffffffffffffffffffffffffffffffff166111036119a7565b73ffffffffffffffffffffffffffffffffffffffff1614611159576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115090614805565b60405180910390fd5b670de0b6b3a76400006103e8600161116f610f7f565b6111799190614854565b61118391906148c5565b61118d91906148c5565b8110156111cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c690614968565b60405180910390fd5b670de0b6b3a7640000816111e39190614854565b60088190555050565b60006111f984848461292e565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061124461275d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156112c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bb906149fa565b60405180910390fd5b6112d8856112d061275d565b858403612765565b60019150509392505050565b61dead81565b6112f261275d565b73ffffffffffffffffffffffffffffffffffffffff166113106119a7565b73ffffffffffffffffffffffffffffffffffffffff1614611366576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135d90614805565b60405180910390fd5b6001601260016101000a81548160ff0219169083151502179055506001601260026101000a81548160ff02191690831515021790555042600e81905550565b600d5481565b600c60009054906101000a900460ff1681565b60006012905090565b60006114696113d461275d565b8484600160006113e261275d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114649190614a1a565b612765565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601260009054906101000a900460ff1681565b6000602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60115481565b60195481565b601260029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61157161275d565b73ffffffffffffffffffffffffffffffffffffffff1661158f6119a7565b73ffffffffffffffffffffffffffffffffffffffff16146115e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115dc90614805565b60405180910390fd5b6115ef60006136ec565b565b6115f961275d565b73ffffffffffffffffffffffffffffffffffffffff166116176119a7565b73ffffffffffffffffffffffffffffffffffffffff161461166d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166490614805565b60405180910390fd5b6102588310156116b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a990614ac0565b60405180910390fd5b6103e882111580156116c5575060008210155b611704576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fb90614b52565b60405180910390fd5b82600d8190555081600b8190555080600c60006101000a81548160ff021916908315150217905550505050565b600061173b61275d565b73ffffffffffffffffffffffffffffffffffffffff166117596119a7565b73ffffffffffffffffffffffffffffffffffffffff16146117af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a690614805565b60405180910390fd5b6000601260006101000a81548160ff0219169083151502179055506001905090565b6117d961275d565b73ffffffffffffffffffffffffffffffffffffffff166117f76119a7565b73ffffffffffffffffffffffffffffffffffffffff161461184d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184490614805565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6118b061275d565b73ffffffffffffffffffffffffffffffffffffffff166118ce6119a7565b73ffffffffffffffffffffffffffffffffffffffff1614611924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191b90614805565b60405180910390fd5b82601681905550816017819055508060188190555060185460175460165461194c9190614a1a565b6119569190614a1a565b601581905550600560155411156119a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199990614bbe565b60405180910390fd5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6119ff61275d565b73ffffffffffffffffffffffffffffffffffffffff16611a1d6119a7565b73ffffffffffffffffffffffffffffffffffffffff1614611a73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6a90614805565b60405180910390fd5b80601260026101000a81548160ff02191690831515021790555050565b606060048054611a9f90614788565b80601f0160208091040260200160405190810160405280929190818152602001828054611acb90614788565b8015611b185780601f10611aed57610100808354040283529160200191611b18565b820191906000526020600020905b815481529060010190602001808311611afb57829003601f168201915b5050505050905090565b611b2a61275d565b73ffffffffffffffffffffffffffffffffffffffff16611b486119a7565b73ffffffffffffffffffffffffffffffffffffffff1614611b9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9590614805565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2590614c50565b60405180910390fd5b611c3882826137b2565b5050565b60185481565b60105481565b601f5481565b601c5481565b60008060016000611c6361275d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611d20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1790614ce2565b60405180910390fd5b611d34611d2b61275d565b85858403612765565b600191505092915050565b600e5481565b6000611d59611d5261275d565b848461292e565b6001905092915050565b601a5481565b60226020528060005260406000206000915054906101000a900460ff1681565b601260019054906101000a900460ff1681565b611da461275d565b73ffffffffffffffffffffffffffffffffffffffff16611dc26119a7565b73ffffffffffffffffffffffffffffffffffffffff1614611e18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0f90614805565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611eb5919061440d565b60405180910390a25050565b611ec961275d565b73ffffffffffffffffffffffffffffffffffffffff16611ee76119a7565b73ffffffffffffffffffffffffffffffffffffffff1614611f3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3490614805565b60405180910390fd5b82601a8190555081601b8190555080601c81905550601c54601b54601a54611f659190614a1a565b611f6f9190614a1a565b60198190555060056019541115611fbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb290614d4e565b60405180910390fd5b505050565b611fc861275d565b73ffffffffffffffffffffffffffffffffffffffff16611fe66119a7565b73ffffffffffffffffffffffffffffffffffffffff161461203c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203390614805565b60405180910390fd5b670de0b6b3a76400006103e86005612052610f7f565b61205c9190614854565b61206691906148c5565b61207091906148c5565b8110156120b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a990614de0565b60405180910390fd5b670de0b6b3a7640000816120c69190614854565b600a8190555050565b601460009054906101000a900460ff1681565b60085481565b60006120f261275d565b73ffffffffffffffffffffffffffffffffffffffff166121106119a7565b73ffffffffffffffffffffffffffffffffffffffff1614612166576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215d90614805565b60405180910390fd5b620186a06001612174610f7f565b61217e9190614854565b61218891906148c5565b8210156121ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c190614e72565b60405180910390fd5b6103e860056121d7610f7f565b6121e19190614854565b6121eb91906148c5565b82111561222d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222490614f04565b60405180910390fd5b8160098190555060019050919050565b60155481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60165481565b60006122e061275d565b73ffffffffffffffffffffffffffffffffffffffff166122fe6119a7565b73ffffffffffffffffffffffffffffffffffffffff1614612354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234b90614805565b60405180910390fd5b6000601460006101000a81548160ff0219169083151502179055506001905090565b60175481565b61238461275d565b73ffffffffffffffffffffffffffffffffffffffff166123a26119a7565b73ffffffffffffffffffffffffffffffffffffffff16146123f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ef90614805565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612467576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245e90614f96565b60405180910390fd5b612470816136ec565b50565b601b5481565b600a5481565b600061248961275d565b73ffffffffffffffffffffffffffffffffffffffff166124a76119a7565b73ffffffffffffffffffffffffffffffffffffffff16146124fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f490614805565b60405180910390fd5b600f5460105461250d9190614a1a565b421161254e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254590615002565b60405180910390fd5b6103e8821115612593576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258a90615094565b60405180910390fd5b4260108190555060003073ffffffffffffffffffffffffffffffffffffffff166370a08231600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016125f79190614588565b602060405180830381865afa158015612614573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061263891906150c9565b90506000612663612710612655868561385390919063ffffffff16565b61386990919063ffffffff16565b9050600081111561269e5761269d600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661dead8361387f565b5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561270d57600080fd5b505af1158015612721573d6000803e3d6000fd5b505050507f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb60405160405180910390a160019350505050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036127d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127cb90615168565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283a906151fa565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161292191906144de565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361299d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129949061528c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a039061531e565b60405180910390fd5b60008103612a2557612a208383600061387f565b6136e7565b601260009054906101000a900460ff16156130ea57612a426119a7565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612ab05750612a806119a7565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ae95750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b23575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b3c5750600660149054906101000a900460ff16155b156130e957601260019054906101000a900460ff16612c3657602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612bf65750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2c9061538a565b60405180910390fd5b5b601460009054906101000a900460ff1615612e0057612c536119a7565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612cda57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d345750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612dff5743601360003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db190615442565b60405180910390fd5b43601360003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ea35750602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f4a57600854811115612eed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ee4906154d4565b60405180910390fd5b600a54612ef983611521565b82612f049190614a1a565b1115612f45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3c90615540565b60405180910390fd5b6130e8565b602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612fed5750602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561303c57600854811115613037576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302e906155d2565b60405180910390fd5b6130e7565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166130e657600a5461309983611521565b826130a49190614a1a565b11156130e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130dc90615540565b60405180910390fd5b5b5b5b5b5b60006130f530611521565b90506000600954821015905080801561311a5750601260029054906101000a900460ff165b80156131335750600660149054906101000a900460ff16155b80156131895750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131df5750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132355750602060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613279576001600660146101000a81548160ff02191690831515021790555061325d613afe565b6000600660146101000a81548160ff0219169083151502179055505b600660149054906101000a900460ff161580156132df5750602260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156132f75750600c60009054906101000a900460ff165b80156133125750600d54600e5461330e9190614a1a565b4210155b80156133685750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561337757613375613d42565b505b6000600660149054906101000a900460ff16159050602060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061342d5750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561343757600090505b600081156136d757602260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561349a57506000601954115b15613576576032601154106134ae57600080fd5b6134d660646134c86019548861385390919063ffffffff16565b61386990919063ffffffff16565b9050601954601b54826134e99190614854565b6134f391906148c5565b601e60008282546135049190614a1a565b92505081905550601954601c548261351c9190614854565b61352691906148c5565b601f60008282546135379190614a1a565b92505081905550601954601a548261354f9190614854565b61355991906148c5565b601d600082825461356a9190614a1a565b925050819055506136b3565b602260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156135d157506000601554115b156136b257601160008154809291906135e9906155f2565b919050555061361660646136086015548861385390919063ffffffff16565b61386990919063ffffffff16565b9050601554601754826136299190614854565b61363391906148c5565b601e60008282546136449190614a1a565b925050819055506015546018548261365c9190614854565b61366691906148c5565b601f60008282546136779190614a1a565b925050819055506015546016548261368f9190614854565b61369991906148c5565b601d60008282546136aa9190614a1a565b925050819055505b5b60008111156136c8576136c787308361387f565b5b80856136d4919061563a565b94505b6136e287878761387f565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600081836138619190614854565b905092915050565b6000818361387791906148c5565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036138ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138e59061528c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361395d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139549061531e565b60405180910390fd5b613968838383613f0e565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156139ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139e5906156e0565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613a819190614a1a565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613ae591906144de565b60405180910390a3613af8848484613f13565b50505050565b6000613b0930611521565b90506000601f54601e54613b1d9190614a1a565b9050600080831480613b2f5750600082145b15613b3c57505050613d40565b6014600954613b4b9190614854565b831115613b64576014600954613b619190614854565b92505b6000600283601e5486613b779190614854565b613b8191906148c5565b613b8b91906148c5565b90506000613bb6601d54613ba88488613f1890919063ffffffff16565b613f1890919063ffffffff16565b90506000479050613bc682613f2e565b6000613bdb8247613f1890919063ffffffff16565b90506000613c0687613bf8601f548561385390919063ffffffff16565b61386990919063ffffffff16565b905060008183613c16919061563a565b90506000601d541115613c3357613c323061dead601d5461387f565b5b6000601e819055506000601d819055506000601f81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613c9190615731565b60006040518083038185875af1925050503d8060008114613cce576040519150601f19603f3d011682016040523d82523d6000602084013e613cd3565b606091505b505080975050600086118015613ce95750600081115b15613d3657613cf8868261416b565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601e54604051613d2d93929190615746565b60405180910390a15b5050505050505050505b565b600042600e8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a08231600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401613da89190614588565b602060405180830381865afa158015613dc5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613de991906150c9565b90506000613e16612710613e08600b548561385390919063ffffffff16565b61386990919063ffffffff16565b90506000811115613e5157613e50600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661dead8361387f565b5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613ec057600080fd5b505af1158015613ed4573d6000803e3d6000fd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b505050565b505050565b60008183613f26919061563a565b905092915050565b6000600267ffffffffffffffff811115613f4b57613f4a61577d565b5b604051908082528060200260200182016040528015613f795781602001602082028036833780820191505090505b5090503081600081518110613f9157613f906157ac565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614036573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061405a91906157f0565b8160018151811061406e5761406d6157ac565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506140d3307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612765565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614135959493929190615916565b600060405180830381600087803b15801561414f57600080fd5b505af1158015614163573d6000803e3d6000fd5b505050505050565b614196307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612765565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161421d96959493929190615970565b60606040518083038185885af115801561423b573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061426091906159d1565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156142a1578082015181840152602081019050614286565b60008484015250505050565b6000601f19601f8301169050919050565b60006142c982614267565b6142d38185614272565b93506142e3818560208601614283565b6142ec816142ad565b840191505092915050565b6000602082019050818103600083015261431181846142be565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006143498261431e565b9050919050565b6143598161433e565b811461436457600080fd5b50565b60008135905061437681614350565b92915050565b6000819050919050565b61438f8161437c565b811461439a57600080fd5b50565b6000813590506143ac81614386565b92915050565b600080604083850312156143c9576143c8614319565b5b60006143d785828601614367565b92505060206143e88582860161439d565b9150509250929050565b60008115159050919050565b614407816143f2565b82525050565b600060208201905061442260008301846143fe565b92915050565b60006020828403121561443e5761443d614319565b5b600061444c84828501614367565b91505092915050565b6000819050919050565b600061447a6144756144708461431e565b614455565b61431e565b9050919050565b600061448c8261445f565b9050919050565b600061449e82614481565b9050919050565b6144ae81614493565b82525050565b60006020820190506144c960008301846144a5565b92915050565b6144d88161437c565b82525050565b60006020820190506144f360008301846144cf565b92915050565b60006020828403121561450f5761450e614319565b5b600061451d8482850161439d565b91505092915050565b60008060006060848603121561453f5761453e614319565b5b600061454d86828701614367565b935050602061455e86828701614367565b925050604061456f8682870161439d565b9150509250925092565b6145828161433e565b82525050565b600060208201905061459d6000830184614579565b92915050565b600060ff82169050919050565b6145b9816145a3565b82525050565b60006020820190506145d460008301846145b0565b92915050565b6145e3816143f2565b81146145ee57600080fd5b50565b600081359050614600816145da565b92915050565b60008060006060848603121561461f5761461e614319565b5b600061462d8682870161439d565b935050602061463e8682870161439d565b925050604061464f868287016145f1565b9150509250925092565b600080604083850312156146705761466f614319565b5b600061467e85828601614367565b925050602061468f858286016145f1565b9150509250929050565b6000806000606084860312156146b2576146b1614319565b5b60006146c08682870161439d565b93505060206146d18682870161439d565b92505060406146e28682870161439d565b9150509250925092565b60006020828403121561470257614701614319565b5b6000614710848285016145f1565b91505092915050565b600080604083850312156147305761472f614319565b5b600061473e85828601614367565b925050602061474f85828601614367565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806147a057607f821691505b6020821081036147b3576147b2614759565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006147ef602083614272565b91506147fa826147b9565b602082019050919050565b6000602082019050818103600083015261481e816147e2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061485f8261437c565b915061486a8361437c565b92508282026148788161437c565b9150828204841483151761488f5761488e614825565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006148d08261437c565b91506148db8361437c565b9250826148eb576148ea614896565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614952602f83614272565b915061495d826148f6565b604082019050919050565b6000602082019050818103600083015261498181614945565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006149e4602883614272565b91506149ef82614988565b604082019050919050565b60006020820190508181036000830152614a13816149d7565b9050919050565b6000614a258261437c565b9150614a308361437c565b9250828201905080821115614a4857614a47614825565b5b92915050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b6000614aaa603383614272565b9150614ab582614a4e565b604082019050919050565b60006020820190508181036000830152614ad981614a9d565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b6000614b3c603083614272565b9150614b4782614ae0565b604082019050919050565b60006020820190508181036000830152614b6b81614b2f565b9050919050565b7f4d757374206b6565702066656573206174203525206f72206c65737300000000600082015250565b6000614ba8601c83614272565b9150614bb382614b72565b602082019050919050565b60006020820190508181036000830152614bd781614b9b565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614c3a603983614272565b9150614c4582614bde565b604082019050919050565b60006020820190508181036000830152614c6981614c2d565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614ccc602583614272565b9150614cd782614c70565b604082019050919050565b60006020820190508181036000830152614cfb81614cbf565b9050919050565b7f4d757374206b656570206665657320617420203525206f72206c657373000000600082015250565b6000614d38601d83614272565b9150614d4382614d02565b602082019050919050565b60006020820190508181036000830152614d6781614d2b565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614dca602483614272565b9150614dd582614d6e565b604082019050919050565b60006020820190508181036000830152614df981614dbd565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614e5c603583614272565b9150614e6782614e00565b604082019050919050565b60006020820190508181036000830152614e8b81614e4f565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614eee603483614272565b9150614ef982614e92565b604082019050919050565b60006020820190508181036000830152614f1d81614ee1565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614f80602683614272565b9150614f8b82614f24565b604082019050919050565b60006020820190508181036000830152614faf81614f73565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b6000614fec602083614272565b9150614ff782614fb6565b602082019050919050565b6000602082019050818103600083015261501b81614fdf565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b600061507e602a83614272565b915061508982615022565b604082019050919050565b600060208201905081810360008301526150ad81615071565b9050919050565b6000815190506150c381614386565b92915050565b6000602082840312156150df576150de614319565b5b60006150ed848285016150b4565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000615152602483614272565b915061515d826150f6565b604082019050919050565b6000602082019050818103600083015261518181615145565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006151e4602283614272565b91506151ef82615188565b604082019050919050565b60006020820190508181036000830152615213816151d7565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615276602583614272565b91506152818261521a565b604082019050919050565b600060208201905081810360008301526152a581615269565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615308602383614272565b9150615313826152ac565b604082019050919050565b60006020820190508181036000830152615337816152fb565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000615374601683614272565b915061537f8261533e565b602082019050919050565b600060208201905081810360008301526153a381615367565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061542c604983614272565b9150615437826153aa565b606082019050919050565b6000602082019050818103600083015261545b8161541f565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006154be603583614272565b91506154c982615462565b604082019050919050565b600060208201905081810360008301526154ed816154b1565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061552a601383614272565b9150615535826154f4565b602082019050919050565b600060208201905081810360008301526155598161551d565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006155bc603683614272565b91506155c782615560565b604082019050919050565b600060208201905081810360008301526155eb816155af565b9050919050565b60006155fd8261437c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361562f5761562e614825565b5b600182019050919050565b60006156458261437c565b91506156508361437c565b925082820390508181111561566857615667614825565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006156ca602683614272565b91506156d58261566e565b604082019050919050565b600060208201905081810360008301526156f9816156bd565b9050919050565b600081905092915050565b50565b600061571b600083615700565b91506157268261570b565b600082019050919050565b600061573c8261570e565b9150819050919050565b600060608201905061575b60008301866144cf565b61576860208301856144cf565b61577560408301846144cf565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506157ea81614350565b92915050565b60006020828403121561580657615805614319565b5b6000615814848285016157db565b91505092915050565b6000819050919050565b600061584261583d6158388461581d565b614455565b61437c565b9050919050565b61585281615827565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61588d8161433e565b82525050565b600061589f8383615884565b60208301905092915050565b6000602082019050919050565b60006158c382615858565b6158cd8185615863565b93506158d883615874565b8060005b838110156159095781516158f08882615893565b97506158fb836158ab565b9250506001810190506158dc565b5085935050505092915050565b600060a08201905061592b60008301886144cf565b6159386020830187615849565b818103604083015261594a81866158b8565b90506159596060830185614579565b61596660808301846144cf565b9695505050505050565b600060c0820190506159856000830189614579565b61599260208301886144cf565b61599f6040830187615849565b6159ac6060830186615849565b6159b96080830185614579565b6159c660a08301846144cf565b979650505050505050565b6000806000606084860312156159ea576159e9614319565b5b60006159f8868287016150b4565b9350506020615a09868287016150b4565b9250506040615a1a868287016150b4565b915050925092509256fea2646970667358221220768ac90218912e92993130988015d57e4223b16a321f0fad49029d758dd7c6c164736f6c63430008110033

Deployed Bytecode Sourcemap

27076:18368:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9672:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11980:210;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28721:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27159:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10792:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34911:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27677:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27492:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28505:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28470:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32507:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12672:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27252:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31409:154;;;;;;;;;;;;;:::i;:::-;;27587:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27548:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10634:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13610:297;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27217:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27814:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35076:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27773:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28313:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27894:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10963:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3468:103;;;;;;;;;;;;;:::i;:::-;;43026:555;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31615:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33054:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33425:381;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2817:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27344:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33317:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9891:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34403:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28274:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27731:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28545:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28430:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14410:482;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27639:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11353:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28349:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28942:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27854:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34213:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33814:391;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32790:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28112:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27377:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32002:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28160:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11632:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27419:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28195:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31797:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28232:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3726:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28387:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27459:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44385:1056;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9672:100;9726:13;9759:5;9752:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9672:100;:::o;11980:210::-;12099:4;12121:39;12130:12;:10;:12::i;:::-;12144:7;12153:6;12121:8;:39::i;:::-;12178:4;12171:11;;11980:210;;;;:::o;28721:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;27159:51::-;;;:::o;10792:108::-;10853:7;10880:12;;10873:19;;10792:108;:::o;34911:157::-;3048:12;:10;:12::i;:::-;3037:23;;:7;:5;:7::i;:::-;:23;;;3029:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35018:9:::1;;;;;;;;;;;34990:38;;35007:9;34990:38;;;;;;;;;;;;35051:9;35039;;:21;;;;;;;;;;;;;;;;;;34911:157:::0;:::o;27677:47::-;;;;:::o;27492:36::-;;;;:::o;28505:33::-;;;;:::o;28470:28::-;;;;:::o;32507:275::-;3048:12;:10;:12::i;:::-;3037:23;;:7;:5;:7::i;:::-;:23;;;3029:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32644:4:::1;32636;32631:1;32615:13;:11;:13::i;:::-;:17;;;;:::i;:::-;32614:26;;;;:::i;:::-;32613:35;;;;:::i;:::-;32603:6;:45;;32581:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;32767:6;32757;:17;;;;:::i;:::-;32734:20;:40;;;;32507:275:::0;:::o;12672:529::-;12812:4;12829:36;12839:6;12847:9;12858:6;12829:9;:36::i;:::-;12878:24;12905:11;:19;12917:6;12905:19;;;;;;;;;;;;;;;:33;12925:12;:10;:12::i;:::-;12905:33;;;;;;;;;;;;;;;;12878:60;;12991:6;12971:16;:26;;12949:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;13101:57;13110:6;13118:12;:10;:12::i;:::-;13151:6;13132:16;:25;13101:8;:57::i;:::-;13189:4;13182:11;;;12672:529;;;;;:::o;27252:53::-;27298:6;27252:53;:::o;31409:154::-;3048:12;:10;:12::i;:::-;3037:23;;:7;:5;:7::i;:::-;:23;;;3029:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31479:4:::1;31463:13;;:20;;;;;;;;;;;;;;;;;;31508:4;31494:11;;:18;;;;;;;;;;;;;;;;;;31540:15;31523:14;:32;;;;31409:154::o:0;27587:45::-;;;;:::o;27548:32::-;;;;;;;;;;;;;:::o;10634:93::-;10692:5;10717:2;10710:9;;10634:93;:::o;13610:297::-;13725:4;13747:130;13770:12;:10;:12::i;:::-;13797:7;13856:10;13819:11;:25;13831:12;:10;:12::i;:::-;13819:25;;;;;;;;;;;;;;;:34;13845:7;13819:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;13747:8;:130::i;:::-;13895:4;13888:11;;13610:297;;;;:::o;27217:28::-;;;;;;;;;;;;;:::o;27814:33::-;;;;;;;;;;;;;:::o;35076:126::-;35142:4;35166:19;:28;35186:7;35166:28;;;;;;;;;;;;;;;;;;;;;;;;;35159:35;;35076:126;;;:::o;27773:32::-;;;;:::o;28313:29::-;;;;:::o;27894:31::-;;;;;;;;;;;;;:::o;10963:177::-;11082:7;11114:9;:18;11124:7;11114:18;;;;;;;;;;;;;;;;11107:25;;10963:177;;;:::o;3468:103::-;3048:12;:10;:12::i;:::-;3037:23;;:7;:5;:7::i;:::-;:23;;;3029:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3533:30:::1;3560:1;3533:18;:30::i;:::-;3468:103::o:0;43026:555::-;3048:12;:10;:12::i;:::-;3037:23;;:7;:5;:7::i;:::-;:23;;;3029:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43228:3:::1;43205:19;:26;;43183:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;43355:4;43343:8;:16;;:33;;;;;43375:1;43363:8;:13;;43343:33;43321:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;43481:19;43463:15;:37;;;;43530:8;43511:16;:27;;;;43565:8;43549:13;;:24;;;;;;;;;;;;;;;;;;43026:555:::0;;;:::o;31615:121::-;31667:4;3048:12;:10;:12::i;:::-;3037:23;;:7;:5;:7::i;:::-;:23;;;3029:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31701:5:::1;31684:14;;:22;;;;;;;;;;;;;;;;;;31724:4;31717:11;;31615:121:::0;:::o;33054:167::-;3048:12;:10;:12::i;:::-;3037:23;;:7;:5;:7::i;:::-;:23;;;3029:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33209:4:::1;33167:31;:39;33199:6;33167:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;33054:167:::0;;:::o;33425:381::-;3048:12;:10;:12::i;:::-;3037:23;;:7;:5;:7::i;:::-;:23;;;3029:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33583:8:::1;33570:10;:21;;;;33620:13;33602:15;:31;;;;33656:7;33644:9;:19;;;;33720:9;;33702:15;;33689:10;;:28;;;;:::i;:::-;:40;;;;:::i;:::-;33674:12;:55;;;;33764:1;33748:12;;:17;;33740:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33425:381:::0;;;:::o;2817:87::-;2863:7;2890:6;;;;;;;;;;;2883:13;;2817:87;:::o;27344:24::-;;;;;;;;;;;;;:::o;33317:100::-;3048:12;:10;:12::i;:::-;3037:23;;:7;:5;:7::i;:::-;:23;;;3029:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33402:7:::1;33388:11;;:21;;;;;;;;;;;;;;;;;;33317:100:::0;:::o;9891:104::-;9947:13;9980:7;9973:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9891:104;:::o;34403:304::-;3048:12;:10;:12::i;:::-;3037:23;;:7;:5;:7::i;:::-;:23;;;3029:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34547:13:::1;;;;;;;;;;;34539:21;;:4;:21;;::::0;34517:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;34658:41;34687:4;34693:5;34658:28;:41::i;:::-;34403:304:::0;;:::o;28274:30::-;;;;:::o;27731:35::-;;;;:::o;28545:27::-;;;;:::o;28430:31::-;;;;:::o;14410:482::-;14530:4;14552:24;14579:11;:25;14591:12;:10;:12::i;:::-;14579:25;;;;;;;;;;;;;;;:34;14605:7;14579:34;;;;;;;;;;;;;;;;14552:61;;14666:15;14646:16;:35;;14624:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;14782:67;14791:12;:10;:12::i;:::-;14805:7;14833:15;14814:16;:34;14782:8;:67::i;:::-;14880:4;14873:11;;;14410:482;;;;:::o;27639:29::-;;;;:::o;11353:216::-;11475:4;11497:42;11507:12;:10;:12::i;:::-;11521:9;11532:6;11497:9;:42::i;:::-;11557:4;11550:11;;11353:216;;;;:::o;28349:31::-;;;;:::o;28942:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;27854:33::-;;;;;;;;;;;;;:::o;34213:182::-;3048:12;:10;:12::i;:::-;3037:23;;:7;:5;:7::i;:::-;:23;;;3029:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34329:8:::1;34298:19;:28;34318:7;34298:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;34369:7;34353:34;;;34378:8;34353:34;;;;;;:::i;:::-;;;;;;;;34213:182:::0;;:::o;33814:391::-;3048:12;:10;:12::i;:::-;3037:23;;:7;:5;:7::i;:::-;:23;;;3029:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33974:8:::1;33960:11;:22;;;;34012:13;33993:16;:32;;;;34049:7;34036:10;:20;;;;34116:10;;34097:16;;34083:11;;:30;;;;:::i;:::-;:43;;;;:::i;:::-;34067:13;:59;;;;34162:1;34145:13;;:18;;34137:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;33814:391:::0;;;:::o;32790:256::-;3048:12;:10;:12::i;:::-;3037:23;;:7;:5;:7::i;:::-;:23;;;3029:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32930:4:::1;32922;32917:1;32901:13;:11;:13::i;:::-;:17;;;;:::i;:::-;32900:26;;;;:::i;:::-;32899:35;;;;:::i;:::-;32889:6;:45;;32867:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;33031:6;33021;:17;;;;:::i;:::-;33009:9;:29;;;;32790:256:::0;:::o;28112:39::-;;;;;;;;;;;;;:::o;27377:35::-;;;;:::o;32002:497::-;32110:4;3048:12;:10;:12::i;:::-;3037:23;;:7;:5;:7::i;:::-;:23;;;3029:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32189:6:::1;32184:1;32168:13;:11;:13::i;:::-;:17;;;;:::i;:::-;32167:28;;;;:::i;:::-;32154:9;:41;;32132:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;32344:4;32339:1;32323:13;:11;:13::i;:::-;:17;;;;:::i;:::-;32322:26;;;;:::i;:::-;32309:9;:39;;32287:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;32460:9;32439:18;:30;;;;32487:4;32480:11;;32002:497:::0;;;:::o;28160:28::-;;;;:::o;11632:201::-;11766:7;11798:11;:18;11810:5;11798:18;;;;;;;;;;;;;;;:27;11817:7;11798:27;;;;;;;;;;;;;;;;11791:34;;11632:201;;;;:::o;27419:33::-;;;;:::o;28195:30::-;;;;:::o;31797:135::-;31857:4;3048:12;:10;:12::i;:::-;3037:23;;:7;:5;:7::i;:::-;:23;;;3029:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31897:5:::1;31874:20;;:28;;;;;;;;;;;;;;;;;;31920:4;31913:11;;31797:135:::0;:::o;28232:35::-;;;;:::o;3726:238::-;3048:12;:10;:12::i;:::-;3037:23;;:7;:5;:7::i;:::-;:23;;;3029:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3849:1:::1;3829:22;;:8;:22;;::::0;3807:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3928:28;3947:8;3928:18;:28::i;:::-;3726:238:::0;:::o;28387:36::-;;;;:::o;27459:24::-;;;;:::o;44385:1056::-;44496:4;3048:12;:10;:12::i;:::-;3037:23;;:7;:5;:7::i;:::-;:23;;;3029:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44581:19:::1;;44558:20;;:42;;;;:::i;:::-;44540:15;:60;44518:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;44690:4;44679:7;:15;;44671:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;44775:15;44752:20;:38;;;;44845:28;44876:4;:14;;;44891:13;;;;;;;;;;;44876:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44845:60;;44955:20;44978:44;45016:5;44978:33;45003:7;44978:20;:24;;:33;;;;:::i;:::-;:37;;:44;;;;:::i;:::-;44955:67;;45142:1;45127:12;:16;45123:110;;;45160:61;45176:13;;;;;;;;;;;45199:6;45208:12;45160:15;:61::i;:::-;45123:110;45308:19;45345:13;;;;;;;;;;;45308:51;;45370:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;45397:14;;;;;;;;;;45429:4;45422:11;;;;;44385:1056:::0;;;:::o;1659:98::-;1712:7;1739:10;1732:17;;1659:98;:::o;18200:380::-;18353:1;18336:19;;:5;:19;;;18328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18434:1;18415:21;;:7;:21;;;18407:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18518:6;18488:11;:18;18500:5;18488:18;;;;;;;;;;;;;;;:27;18507:7;18488:27;;;;;;;;;;;;;;;:36;;;;18556:7;18540:32;;18549:5;18540:32;;;18565:6;18540:32;;;;;;:::i;:::-;;;;;;;;18200:380;;;:::o;35210:5073::-;35358:1;35342:18;;:4;:18;;;35334:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35435:1;35421:16;;:2;:16;;;35413:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;35504:1;35494:6;:11;35490:93;;35522:28;35538:4;35544:2;35548:1;35522:15;:28::i;:::-;35565:7;;35490:93;35599:14;;;;;;;;;;;35595:2487;;;35660:7;:5;:7::i;:::-;35652:15;;:4;:15;;;;:49;;;;;35694:7;:5;:7::i;:::-;35688:13;;:2;:13;;;;35652:49;:86;;;;;35736:1;35722:16;;:2;:16;;;;35652:86;:128;;;;;35773:6;35759:21;;:2;:21;;;;35652:128;:158;;;;;35802:8;;;;;;;;;;;35801:9;35652:158;35630:2441;;;35850:13;;;;;;;;;;;35845:223;;35922:19;:25;35942:4;35922:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;35951:19;:23;35971:2;35951:23;;;;;;;;;;;;;;;;;;;;;;;;;35922:52;35888:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;35845:223;36224:20;;;;;;;;;;;36220:641;;;36305:7;:5;:7::i;:::-;36299:13;;:2;:13;;;;:72;;;;;36355:15;36341:30;;:2;:30;;;;36299:72;:129;;;;;36414:13;;;;;;;;;;;36400:28;;:2;:28;;;;36299:129;36269:573;;;36592:12;36517:28;:39;36546:9;36517:39;;;;;;;;;;;;;;;;:87;36479:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;36806:12;36764:28;:39;36793:9;36764:39;;;;;;;;;;;;;;;:54;;;;36269:573;36220:641;36935:25;:31;36961:4;36935:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;36992:31;:35;37024:2;36992:35;;;;;;;;;;;;;;;;;;;;;;;;;36991:36;36935:92;36909:1147;;;37114:20;;37104:6;:30;;37070:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;37322:9;;37305:13;37315:2;37305:9;:13::i;:::-;37296:6;:22;;;;:::i;:::-;:35;;37262:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;36909:1147;;;37500:25;:29;37526:2;37500:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;37555:31;:37;37587:4;37555:37;;;;;;;;;;;;;;;;;;;;;;;;;37554:38;37500:92;37474:582;;;37679:20;;37669:6;:30;;37635:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;37474:582;;;37836:31;:35;37868:2;37836:35;;;;;;;;;;;;;;;;;;;;;;;;;37831:225;;37956:9;;37939:13;37949:2;37939:9;:13::i;:::-;37930:6;:22;;;;:::i;:::-;:35;;37896:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;37831:225;37474:582;36909:1147;35630:2441;35595:2487;38094:28;38125:24;38143:4;38125:9;:24::i;:::-;38094:55;;38162:12;38201:18;;38177:20;:42;;38162:57;;38250:7;:35;;;;;38274:11;;;;;;;;;;;38250:35;:61;;;;;38303:8;;;;;;;;;;;38302:9;38250:61;:110;;;;;38329:25;:31;38355:4;38329:31;;;;;;;;;;;;;;;;;;;;;;;;;38328:32;38250:110;:153;;;;;38378:19;:25;38398:4;38378:25;;;;;;;;;;;;;;;;;;;;;;;;;38377:26;38250:153;:194;;;;;38421:19;:23;38441:2;38421:23;;;;;;;;;;;;;;;;;;;;;;;;;38420:24;38250:194;38232:326;;;38482:4;38471:8;;:15;;;;;;;;;;;;;;;;;;38503:10;:8;:10::i;:::-;38541:5;38530:8;;:16;;;;;;;;;;;;;;;;;;38232:326;38589:8;;;;;;;;;;;38588:9;:55;;;;;38614:25;:29;38640:2;38614:29;;;;;;;;;;;;;;;;;;;;;;;;;38588:55;:85;;;;;38660:13;;;;;;;;;;;38588:85;:153;;;;;38726:15;;38709:14;;:32;;;;:::i;:::-;38690:15;:51;;38588:153;:196;;;;;38759:19;:25;38779:4;38759:25;;;;;;;;;;;;;;;;;;;;;;;;;38758:26;38588:196;38570:282;;;38811:29;:27;:29::i;:::-;;38570:282;38864:12;38880:8;;;;;;;;;;;38879:9;38864:24;;38990:19;:25;39010:4;38990:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;39019:19;:23;39039:2;39019:23;;;;;;;;;;;;;;;;;;;;;;;;;38990:52;38986:100;;;39069:5;39059:15;;38986:100;39098:12;39203:7;39199:1031;;;39255:25;:29;39281:2;39255:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;39304:1;39288:13;;:17;39255:50;39251:830;;;39350:2;39334:15;;:18;39326:27;;;;;;39379:34;39409:3;39379:25;39390:13;;39379:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;39372:41;;39482:13;;39462:16;;39455:4;:23;;;;:::i;:::-;39454:41;;;;:::i;:::-;39432:18;;:63;;;;;;;:::i;:::-;;;;;;;;39552:13;;39538:10;;39531:4;:17;;;;:::i;:::-;39530:35;;;;:::i;:::-;39514:12;;:51;;;;;;;:::i;:::-;;;;;;;;39624:13;;39609:11;;39602:4;:18;;;;:::i;:::-;39601:36;;;;:::i;:::-;39584:13;;:53;;;;;;;:::i;:::-;;;;;;;;39251:830;;;39699:25;:31;39725:4;39699:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;39749:1;39734:12;;:16;39699:51;39695:386;;;39771:15;;:17;;;;;;;;;:::i;:::-;;;;;;39814:33;39843:3;39814:24;39825:12;;39814:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;39807:40;;39915:12;;39896:15;;39889:4;:22;;;;:::i;:::-;39888:39;;;;:::i;:::-;39866:18;;:61;;;;;;;:::i;:::-;;;;;;;;39983:12;;39970:9;;39963:4;:16;;;;:::i;:::-;39962:33;;;;:::i;:::-;39946:12;;:49;;;;;;;:::i;:::-;;;;;;;;40053:12;;40039:10;;40032:4;:17;;;;:::i;:::-;40031:34;;;;:::i;:::-;40014:13;;:51;;;;;;;:::i;:::-;;;;;;;;39695:386;39251:830;40108:1;40101:4;:8;40097:91;;;40130:42;40146:4;40160;40167;40130:15;:42::i;:::-;40097:91;40214:4;40204:14;;;;;:::i;:::-;;;39199:1031;40242:33;40258:4;40264:2;40268:6;40242:15;:33::i;:::-;35323:4960;;;;35210:5073;;;;:::o;4124:191::-;4198:16;4217:6;;;;;;;;;;;4198:25;;4243:8;4234:6;;:17;;;;;;;;;;;;;;;;;;4298:8;4267:40;;4288:8;4267:40;;;;;;;;;;;;4187:128;4124:191;:::o;34715:188::-;34832:5;34798:25;:31;34824:4;34798:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;34889:5;34855:40;;34883:4;34855:40;;;;;;;;;;;;34715:188;;:::o;23649:98::-;23707:7;23738:1;23734;:5;;;;:::i;:::-;23727:12;;23649:98;;;;:::o;24048:::-;24106:7;24137:1;24133;:5;;;;:::i;:::-;24126:12;;24048:98;;;;:::o;15382:770::-;15540:1;15522:20;;:6;:20;;;15514:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;15624:1;15603:23;;:9;:23;;;15595:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;15679:47;15700:6;15708:9;15719:6;15679:20;:47::i;:::-;15739:21;15763:9;:17;15773:6;15763:17;;;;;;;;;;;;;;;;15739:41;;15830:6;15813:13;:23;;15791:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;15974:6;15958:13;:22;15938:9;:17;15948:6;15938:17;;;;;;;;;;;;;;;:42;;;;16026:6;16002:9;:20;16012:9;16002:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;16067:9;16050:35;;16059:6;16050:35;;;16078:6;16050:35;;;;;;:::i;:::-;;;;;;;;16098:46;16118:6;16126:9;16137:6;16098:19;:46::i;:::-;15503:649;15382:770;;;:::o;41411:1607::-;41450:23;41476:24;41494:4;41476:9;:24::i;:::-;41450:50;;41511:25;41573:12;;41539:18;;:46;;;;:::i;:::-;41511:74;;41596:12;41644:1;41625:15;:20;:46;;;;41670:1;41649:17;:22;41625:46;41621:85;;;41688:7;;;;;41621:85;41761:2;41740:18;;:23;;;;:::i;:::-;41722:15;:41;41718:115;;;41819:2;41798:18;;:23;;;;:::i;:::-;41780:41;;41718:115;41894:23;42007:1;41974:17;41939:18;;41921:15;:36;;;;:::i;:::-;41920:71;;;;:::i;:::-;:88;;;;:::i;:::-;41894:114;;42019:26;42048:55;42089:13;;42048:36;42068:15;42048;:19;;:36;;;;:::i;:::-;:40;;:55;;;;:::i;:::-;42019:84;;42116:25;42144:21;42116:49;;42178:36;42195:18;42178:16;:36::i;:::-;42227:18;42248:44;42274:17;42248:21;:25;;:44;;;;:::i;:::-;42227:65;;42305:17;42325:51;42358:17;42325:28;42340:12;;42325:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;42305:71;;42389:23;42428:9;42415:10;:22;;;;:::i;:::-;42389:48;;42468:1;42452:13;;:17;42448:109;;;42482:62;42506:4;42521:6;42530:13;;42482:15;:62::i;:::-;42448:109;42590:1;42569:18;:22;;;;42618:1;42602:13;:17;;;;42645:1;42630:12;:16;;;;42683:9;;;;;;;;;;;42675:23;;42706:9;42675:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42661:59;;;;;42755:1;42737:15;:19;:42;;;;;42778:1;42760:15;:19;42737:42;42733:278;;;42796:46;42809:15;42826;42796:12;:46::i;:::-;42862:137;42895:18;42932:15;42966:18;;42862:137;;;;;;;;:::i;:::-;;;;;;;;42733:278;41439:1579;;;;;;;;;41411:1607;:::o;43589:788::-;43646:4;43680:15;43663:14;:32;;;;43750:28;43781:4;:14;;;43796:13;;;;;;;;;;;43781:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43750:60;;43860:20;43883:77;43944:5;43883:42;43908:16;;43883:20;:24;;:42;;;;:::i;:::-;:46;;:77;;;;:::i;:::-;43860:100;;44080:1;44065:12;:16;44061:110;;;44098:61;44114:13;;;;;;;;;;;44137:6;44146:12;44098:15;:61::i;:::-;44061:110;44246:19;44283:13;;;;;;;;;;;44246:51;;44308:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44335:12;;;;;;;;;;44365:4;44358:11;;;;;43589:788;:::o;19180:125::-;;;;:::o;19909:124::-;;;;:::o;23292:98::-;23350:7;23381:1;23377;:5;;;;:::i;:::-;23370:12;;23292:98;;;;:::o;40291:589::-;40417:21;40455:1;40441:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40417:40;;40486:4;40468;40473:1;40468:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;40512:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40502:4;40507:1;40502:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;40547:62;40564:4;40579:15;40597:11;40547:8;:62::i;:::-;40648:15;:66;;;40729:11;40755:1;40799:4;40826;40846:15;40648:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40346:534;40291:589;:::o;40888:515::-;41036:62;41053:4;41068:15;41086:11;41036:8;:62::i;:::-;41141:15;:31;;;41180:9;41213:4;41233:11;41259:1;41302;41345:9;;;;;;;;;;;41369:15;41141:254;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;40888:515;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:151::-;4202:9;4235:37;4266:5;4235:37;:::i;:::-;4222:50;;4127:151;;;:::o;4284:181::-;4396:62;4452:5;4396:62;:::i;:::-;4391:3;4384:75;4284:181;;:::o;4471:272::-;4589:4;4627:2;4616:9;4612:18;4604:26;;4640:96;4733:1;4722:9;4718:17;4709:6;4640:96;:::i;:::-;4471:272;;;;:::o;4749:118::-;4836:24;4854:5;4836:24;:::i;:::-;4831:3;4824:37;4749:118;;:::o;4873:222::-;4966:4;5004:2;4993:9;4989:18;4981:26;;5017:71;5085:1;5074:9;5070:17;5061:6;5017:71;:::i;:::-;4873:222;;;;:::o;5101:329::-;5160:6;5209:2;5197:9;5188:7;5184:23;5180:32;5177:119;;;5215:79;;:::i;:::-;5177:119;5335:1;5360:53;5405:7;5396:6;5385:9;5381:22;5360:53;:::i;:::-;5350:63;;5306:117;5101:329;;;;:::o;5436:619::-;5513:6;5521;5529;5578:2;5566:9;5557:7;5553:23;5549:32;5546:119;;;5584:79;;:::i;:::-;5546:119;5704:1;5729:53;5774:7;5765:6;5754:9;5750:22;5729:53;:::i;:::-;5719:63;;5675:117;5831:2;5857:53;5902:7;5893:6;5882:9;5878:22;5857:53;:::i;:::-;5847:63;;5802:118;5959:2;5985:53;6030:7;6021:6;6010:9;6006:22;5985:53;:::i;:::-;5975:63;;5930:118;5436:619;;;;;:::o;6061:118::-;6148:24;6166:5;6148:24;:::i;:::-;6143:3;6136:37;6061:118;;:::o;6185:222::-;6278:4;6316:2;6305:9;6301:18;6293:26;;6329:71;6397:1;6386:9;6382:17;6373:6;6329:71;:::i;:::-;6185:222;;;;:::o;6413:86::-;6448:7;6488:4;6481:5;6477:16;6466:27;;6413:86;;;:::o;6505:112::-;6588:22;6604:5;6588:22;:::i;:::-;6583:3;6576:35;6505:112;;:::o;6623:214::-;6712:4;6750:2;6739:9;6735:18;6727:26;;6763:67;6827:1;6816:9;6812:17;6803:6;6763:67;:::i;:::-;6623:214;;;;:::o;6843:116::-;6913:21;6928:5;6913:21;:::i;:::-;6906:5;6903:32;6893:60;;6949:1;6946;6939:12;6893:60;6843:116;:::o;6965:133::-;7008:5;7046:6;7033:20;7024:29;;7062:30;7086:5;7062:30;:::i;:::-;6965:133;;;;:::o;7104:613::-;7178:6;7186;7194;7243:2;7231:9;7222:7;7218:23;7214:32;7211:119;;;7249:79;;:::i;:::-;7211:119;7369:1;7394:53;7439:7;7430:6;7419:9;7415:22;7394:53;:::i;:::-;7384:63;;7340:117;7496:2;7522:53;7567:7;7558:6;7547:9;7543:22;7522:53;:::i;:::-;7512:63;;7467:118;7624:2;7650:50;7692:7;7683:6;7672:9;7668:22;7650:50;:::i;:::-;7640:60;;7595:115;7104:613;;;;;:::o;7723:468::-;7788:6;7796;7845:2;7833:9;7824:7;7820:23;7816:32;7813:119;;;7851:79;;:::i;:::-;7813:119;7971:1;7996:53;8041:7;8032:6;8021:9;8017:22;7996:53;:::i;:::-;7986:63;;7942:117;8098:2;8124:50;8166:7;8157:6;8146:9;8142:22;8124:50;:::i;:::-;8114:60;;8069:115;7723:468;;;;;:::o;8197:619::-;8274:6;8282;8290;8339:2;8327:9;8318:7;8314:23;8310:32;8307:119;;;8345:79;;:::i;:::-;8307:119;8465:1;8490:53;8535:7;8526:6;8515:9;8511:22;8490:53;:::i;:::-;8480:63;;8436:117;8592:2;8618:53;8663:7;8654:6;8643:9;8639:22;8618:53;:::i;:::-;8608:63;;8563:118;8720:2;8746:53;8791:7;8782:6;8771:9;8767:22;8746:53;:::i;:::-;8736:63;;8691:118;8197:619;;;;;:::o;8822:323::-;8878:6;8927:2;8915:9;8906:7;8902:23;8898:32;8895:119;;;8933:79;;:::i;:::-;8895:119;9053:1;9078:50;9120:7;9111:6;9100:9;9096:22;9078:50;:::i;:::-;9068:60;;9024:114;8822:323;;;;:::o;9151:474::-;9219:6;9227;9276:2;9264:9;9255:7;9251:23;9247:32;9244:119;;;9282:79;;:::i;:::-;9244:119;9402:1;9427:53;9472:7;9463:6;9452:9;9448:22;9427:53;:::i;:::-;9417:63;;9373:117;9529:2;9555:53;9600:7;9591:6;9580:9;9576:22;9555:53;:::i;:::-;9545:63;;9500:118;9151:474;;;;;:::o;9631:180::-;9679:77;9676:1;9669:88;9776:4;9773:1;9766:15;9800:4;9797:1;9790:15;9817:320;9861:6;9898:1;9892:4;9888:12;9878:22;;9945:1;9939:4;9935:12;9966:18;9956:81;;10022:4;10014:6;10010:17;10000:27;;9956:81;10084:2;10076:6;10073:14;10053:18;10050:38;10047:84;;10103:18;;:::i;:::-;10047:84;9868:269;9817:320;;;:::o;10143:182::-;10283:34;10279:1;10271:6;10267:14;10260:58;10143:182;:::o;10331:366::-;10473:3;10494:67;10558:2;10553:3;10494:67;:::i;:::-;10487:74;;10570:93;10659:3;10570:93;:::i;:::-;10688:2;10683:3;10679:12;10672:19;;10331:366;;;:::o;10703:419::-;10869:4;10907:2;10896:9;10892:18;10884:26;;10956:9;10950:4;10946:20;10942:1;10931:9;10927:17;10920:47;10984:131;11110:4;10984:131;:::i;:::-;10976:139;;10703:419;;;:::o;11128:180::-;11176:77;11173:1;11166:88;11273:4;11270:1;11263:15;11297:4;11294:1;11287:15;11314:410;11354:7;11377:20;11395:1;11377:20;:::i;:::-;11372:25;;11411:20;11429:1;11411:20;:::i;:::-;11406:25;;11466:1;11463;11459:9;11488:30;11506:11;11488:30;:::i;:::-;11477:41;;11667:1;11658:7;11654:15;11651:1;11648:22;11628:1;11621:9;11601:83;11578:139;;11697:18;;:::i;:::-;11578:139;11362:362;11314:410;;;;:::o;11730:180::-;11778:77;11775:1;11768:88;11875:4;11872:1;11865:15;11899:4;11896:1;11889:15;11916:185;11956:1;11973:20;11991:1;11973:20;:::i;:::-;11968:25;;12007:20;12025:1;12007:20;:::i;:::-;12002:25;;12046:1;12036:35;;12051:18;;:::i;:::-;12036:35;12093:1;12090;12086:9;12081:14;;11916:185;;;;:::o;12107:234::-;12247:34;12243:1;12235:6;12231:14;12224:58;12316:17;12311:2;12303:6;12299:15;12292:42;12107:234;:::o;12347:366::-;12489:3;12510:67;12574:2;12569:3;12510:67;:::i;:::-;12503:74;;12586:93;12675:3;12586:93;:::i;:::-;12704:2;12699:3;12695:12;12688:19;;12347:366;;;:::o;12719:419::-;12885:4;12923:2;12912:9;12908:18;12900:26;;12972:9;12966:4;12962:20;12958:1;12947:9;12943:17;12936:47;13000:131;13126:4;13000:131;:::i;:::-;12992:139;;12719:419;;;:::o;13144:227::-;13284:34;13280:1;13272:6;13268:14;13261:58;13353:10;13348:2;13340:6;13336:15;13329:35;13144:227;:::o;13377:366::-;13519:3;13540:67;13604:2;13599:3;13540:67;:::i;:::-;13533:74;;13616:93;13705:3;13616:93;:::i;:::-;13734:2;13729:3;13725:12;13718:19;;13377:366;;;:::o;13749:419::-;13915:4;13953:2;13942:9;13938:18;13930:26;;14002:9;13996:4;13992:20;13988:1;13977:9;13973:17;13966:47;14030:131;14156:4;14030:131;:::i;:::-;14022:139;;13749:419;;;:::o;14174:191::-;14214:3;14233:20;14251:1;14233:20;:::i;:::-;14228:25;;14267:20;14285:1;14267:20;:::i;:::-;14262:25;;14310:1;14307;14303:9;14296:16;;14331:3;14328:1;14325:10;14322:36;;;14338:18;;:::i;:::-;14322:36;14174:191;;;;:::o;14371:238::-;14511:34;14507:1;14499:6;14495:14;14488:58;14580:21;14575:2;14567:6;14563:15;14556:46;14371:238;:::o;14615:366::-;14757:3;14778:67;14842:2;14837:3;14778:67;:::i;:::-;14771:74;;14854:93;14943:3;14854:93;:::i;:::-;14972:2;14967:3;14963:12;14956:19;;14615:366;;;:::o;14987:419::-;15153:4;15191:2;15180:9;15176:18;15168:26;;15240:9;15234:4;15230:20;15226:1;15215:9;15211:17;15204:47;15268:131;15394:4;15268:131;:::i;:::-;15260:139;;14987:419;;;:::o;15412:235::-;15552:34;15548:1;15540:6;15536:14;15529:58;15621:18;15616:2;15608:6;15604:15;15597:43;15412:235;:::o;15653:366::-;15795:3;15816:67;15880:2;15875:3;15816:67;:::i;:::-;15809:74;;15892:93;15981:3;15892:93;:::i;:::-;16010:2;16005:3;16001:12;15994:19;;15653:366;;;:::o;16025:419::-;16191:4;16229:2;16218:9;16214:18;16206:26;;16278:9;16272:4;16268:20;16264:1;16253:9;16249:17;16242:47;16306:131;16432:4;16306:131;:::i;:::-;16298:139;;16025:419;;;:::o;16450:178::-;16590:30;16586:1;16578:6;16574:14;16567:54;16450:178;:::o;16634:366::-;16776:3;16797:67;16861:2;16856:3;16797:67;:::i;:::-;16790:74;;16873:93;16962:3;16873:93;:::i;:::-;16991:2;16986:3;16982:12;16975:19;;16634:366;;;:::o;17006:419::-;17172:4;17210:2;17199:9;17195:18;17187:26;;17259:9;17253:4;17249:20;17245:1;17234:9;17230:17;17223:47;17287:131;17413:4;17287:131;:::i;:::-;17279:139;;17006:419;;;:::o;17431:244::-;17571:34;17567:1;17559:6;17555:14;17548:58;17640:27;17635:2;17627:6;17623:15;17616:52;17431:244;:::o;17681:366::-;17823:3;17844:67;17908:2;17903:3;17844:67;:::i;:::-;17837:74;;17920:93;18009:3;17920:93;:::i;:::-;18038:2;18033:3;18029:12;18022:19;;17681:366;;;:::o;18053:419::-;18219:4;18257:2;18246:9;18242:18;18234:26;;18306:9;18300:4;18296:20;18292:1;18281:9;18277:17;18270:47;18334:131;18460:4;18334:131;:::i;:::-;18326:139;;18053:419;;;:::o;18478:224::-;18618:34;18614:1;18606:6;18602:14;18595:58;18687:7;18682:2;18674:6;18670:15;18663:32;18478:224;:::o;18708:366::-;18850:3;18871:67;18935:2;18930:3;18871:67;:::i;:::-;18864:74;;18947:93;19036:3;18947:93;:::i;:::-;19065:2;19060:3;19056:12;19049:19;;18708:366;;;:::o;19080:419::-;19246:4;19284:2;19273:9;19269:18;19261:26;;19333:9;19327:4;19323:20;19319:1;19308:9;19304:17;19297:47;19361:131;19487:4;19361:131;:::i;:::-;19353:139;;19080:419;;;:::o;19505:179::-;19645:31;19641:1;19633:6;19629:14;19622:55;19505:179;:::o;19690:366::-;19832:3;19853:67;19917:2;19912:3;19853:67;:::i;:::-;19846:74;;19929:93;20018:3;19929:93;:::i;:::-;20047:2;20042:3;20038:12;20031:19;;19690:366;;;:::o;20062:419::-;20228:4;20266:2;20255:9;20251:18;20243:26;;20315:9;20309:4;20305:20;20301:1;20290:9;20286:17;20279:47;20343:131;20469:4;20343:131;:::i;:::-;20335:139;;20062:419;;;:::o;20487:223::-;20627:34;20623:1;20615:6;20611:14;20604:58;20696:6;20691:2;20683:6;20679:15;20672:31;20487:223;:::o;20716:366::-;20858:3;20879:67;20943:2;20938:3;20879:67;:::i;:::-;20872:74;;20955:93;21044:3;20955:93;:::i;:::-;21073:2;21068:3;21064:12;21057:19;;20716:366;;;:::o;21088:419::-;21254:4;21292:2;21281:9;21277:18;21269:26;;21341:9;21335:4;21331:20;21327:1;21316:9;21312:17;21305:47;21369:131;21495:4;21369:131;:::i;:::-;21361:139;;21088:419;;;:::o;21513:240::-;21653:34;21649:1;21641:6;21637:14;21630:58;21722:23;21717:2;21709:6;21705:15;21698:48;21513:240;:::o;21759:366::-;21901:3;21922:67;21986:2;21981:3;21922:67;:::i;:::-;21915:74;;21998:93;22087:3;21998:93;:::i;:::-;22116:2;22111:3;22107:12;22100:19;;21759:366;;;:::o;22131:419::-;22297:4;22335:2;22324:9;22320:18;22312:26;;22384:9;22378:4;22374:20;22370:1;22359:9;22355:17;22348:47;22412:131;22538:4;22412:131;:::i;:::-;22404:139;;22131:419;;;:::o;22556:239::-;22696:34;22692:1;22684:6;22680:14;22673:58;22765:22;22760:2;22752:6;22748:15;22741:47;22556:239;:::o;22801:366::-;22943:3;22964:67;23028:2;23023:3;22964:67;:::i;:::-;22957:74;;23040:93;23129:3;23040:93;:::i;:::-;23158:2;23153:3;23149:12;23142:19;;22801:366;;;:::o;23173:419::-;23339:4;23377:2;23366:9;23362:18;23354:26;;23426:9;23420:4;23416:20;23412:1;23401:9;23397:17;23390:47;23454:131;23580:4;23454:131;:::i;:::-;23446:139;;23173:419;;;:::o;23598:225::-;23738:34;23734:1;23726:6;23722:14;23715:58;23807:8;23802:2;23794:6;23790:15;23783:33;23598:225;:::o;23829:366::-;23971:3;23992:67;24056:2;24051:3;23992:67;:::i;:::-;23985:74;;24068:93;24157:3;24068:93;:::i;:::-;24186:2;24181:3;24177:12;24170:19;;23829:366;;;:::o;24201:419::-;24367:4;24405:2;24394:9;24390:18;24382:26;;24454:9;24448:4;24444:20;24440:1;24429:9;24425:17;24418:47;24482:131;24608:4;24482:131;:::i;:::-;24474:139;;24201:419;;;:::o;24626:182::-;24766:34;24762:1;24754:6;24750:14;24743:58;24626:182;:::o;24814:366::-;24956:3;24977:67;25041:2;25036:3;24977:67;:::i;:::-;24970:74;;25053:93;25142:3;25053:93;:::i;:::-;25171:2;25166:3;25162:12;25155:19;;24814:366;;;:::o;25186:419::-;25352:4;25390:2;25379:9;25375:18;25367:26;;25439:9;25433:4;25429:20;25425:1;25414:9;25410:17;25403:47;25467:131;25593:4;25467:131;:::i;:::-;25459:139;;25186:419;;;:::o;25611:229::-;25751:34;25747:1;25739:6;25735:14;25728:58;25820:12;25815:2;25807:6;25803:15;25796:37;25611:229;:::o;25846:366::-;25988:3;26009:67;26073:2;26068:3;26009:67;:::i;:::-;26002:74;;26085:93;26174:3;26085:93;:::i;:::-;26203:2;26198:3;26194:12;26187:19;;25846:366;;;:::o;26218:419::-;26384:4;26422:2;26411:9;26407:18;26399:26;;26471:9;26465:4;26461:20;26457:1;26446:9;26442:17;26435:47;26499:131;26625:4;26499:131;:::i;:::-;26491:139;;26218:419;;;:::o;26643:143::-;26700:5;26731:6;26725:13;26716:22;;26747:33;26774:5;26747:33;:::i;:::-;26643:143;;;;:::o;26792:351::-;26862:6;26911:2;26899:9;26890:7;26886:23;26882:32;26879:119;;;26917:79;;:::i;:::-;26879:119;27037:1;27062:64;27118:7;27109:6;27098:9;27094:22;27062:64;:::i;:::-;27052:74;;27008:128;26792:351;;;;:::o;27149:223::-;27289:34;27285:1;27277:6;27273:14;27266:58;27358:6;27353:2;27345:6;27341:15;27334:31;27149:223;:::o;27378:366::-;27520:3;27541:67;27605:2;27600:3;27541:67;:::i;:::-;27534:74;;27617:93;27706:3;27617:93;:::i;:::-;27735:2;27730:3;27726:12;27719:19;;27378:366;;;:::o;27750:419::-;27916:4;27954:2;27943:9;27939:18;27931:26;;28003:9;27997:4;27993:20;27989:1;27978:9;27974:17;27967:47;28031:131;28157:4;28031:131;:::i;:::-;28023:139;;27750:419;;;:::o;28175:221::-;28315:34;28311:1;28303:6;28299:14;28292:58;28384:4;28379:2;28371:6;28367:15;28360:29;28175:221;:::o;28402:366::-;28544:3;28565:67;28629:2;28624:3;28565:67;:::i;:::-;28558:74;;28641:93;28730:3;28641:93;:::i;:::-;28759:2;28754:3;28750:12;28743:19;;28402:366;;;:::o;28774:419::-;28940:4;28978:2;28967:9;28963:18;28955:26;;29027:9;29021:4;29017:20;29013:1;29002:9;28998:17;28991:47;29055:131;29181:4;29055:131;:::i;:::-;29047:139;;28774:419;;;:::o;29199:224::-;29339:34;29335:1;29327:6;29323:14;29316:58;29408:7;29403:2;29395:6;29391:15;29384:32;29199:224;:::o;29429:366::-;29571:3;29592:67;29656:2;29651:3;29592:67;:::i;:::-;29585:74;;29668:93;29757:3;29668:93;:::i;:::-;29786:2;29781:3;29777:12;29770:19;;29429:366;;;:::o;29801:419::-;29967:4;30005:2;29994:9;29990:18;29982:26;;30054:9;30048:4;30044:20;30040:1;30029:9;30025:17;30018:47;30082:131;30208:4;30082:131;:::i;:::-;30074:139;;29801:419;;;:::o;30226:222::-;30366:34;30362:1;30354:6;30350:14;30343:58;30435:5;30430:2;30422:6;30418:15;30411:30;30226:222;:::o;30454:366::-;30596:3;30617:67;30681:2;30676:3;30617:67;:::i;:::-;30610:74;;30693:93;30782:3;30693:93;:::i;:::-;30811:2;30806:3;30802:12;30795:19;;30454:366;;;:::o;30826:419::-;30992:4;31030:2;31019:9;31015:18;31007:26;;31079:9;31073:4;31069:20;31065:1;31054:9;31050:17;31043:47;31107:131;31233:4;31107:131;:::i;:::-;31099:139;;30826:419;;;:::o;31251:172::-;31391:24;31387:1;31379:6;31375:14;31368:48;31251:172;:::o;31429:366::-;31571:3;31592:67;31656:2;31651:3;31592:67;:::i;:::-;31585:74;;31668:93;31757:3;31668:93;:::i;:::-;31786:2;31781:3;31777:12;31770:19;;31429:366;;;:::o;31801:419::-;31967:4;32005:2;31994:9;31990:18;31982:26;;32054:9;32048:4;32044:20;32040:1;32029:9;32025:17;32018:47;32082:131;32208:4;32082:131;:::i;:::-;32074:139;;31801:419;;;:::o;32226:297::-;32366:34;32362:1;32354:6;32350:14;32343:58;32435:34;32430:2;32422:6;32418:15;32411:59;32504:11;32499:2;32491:6;32487:15;32480:36;32226:297;:::o;32529:366::-;32671:3;32692:67;32756:2;32751:3;32692:67;:::i;:::-;32685:74;;32768:93;32857:3;32768:93;:::i;:::-;32886:2;32881:3;32877:12;32870:19;;32529:366;;;:::o;32901:419::-;33067:4;33105:2;33094:9;33090:18;33082:26;;33154:9;33148:4;33144:20;33140:1;33129:9;33125:17;33118:47;33182:131;33308:4;33182:131;:::i;:::-;33174:139;;32901:419;;;:::o;33326:240::-;33466:34;33462:1;33454:6;33450:14;33443:58;33535:23;33530:2;33522:6;33518:15;33511:48;33326:240;:::o;33572:366::-;33714:3;33735:67;33799:2;33794:3;33735:67;:::i;:::-;33728:74;;33811:93;33900:3;33811:93;:::i;:::-;33929:2;33924:3;33920:12;33913:19;;33572:366;;;:::o;33944:419::-;34110:4;34148:2;34137:9;34133:18;34125:26;;34197:9;34191:4;34187:20;34183:1;34172:9;34168:17;34161:47;34225:131;34351:4;34225:131;:::i;:::-;34217:139;;33944:419;;;:::o;34369:169::-;34509:21;34505:1;34497:6;34493:14;34486:45;34369:169;:::o;34544:366::-;34686:3;34707:67;34771:2;34766:3;34707:67;:::i;:::-;34700:74;;34783:93;34872:3;34783:93;:::i;:::-;34901:2;34896:3;34892:12;34885:19;;34544:366;;;:::o;34916:419::-;35082:4;35120:2;35109:9;35105:18;35097:26;;35169:9;35163:4;35159:20;35155:1;35144:9;35140:17;35133:47;35197:131;35323:4;35197:131;:::i;:::-;35189:139;;34916:419;;;:::o;35341:241::-;35481:34;35477:1;35469:6;35465:14;35458:58;35550:24;35545:2;35537:6;35533:15;35526:49;35341:241;:::o;35588:366::-;35730:3;35751:67;35815:2;35810:3;35751:67;:::i;:::-;35744:74;;35827:93;35916:3;35827:93;:::i;:::-;35945:2;35940:3;35936:12;35929:19;;35588:366;;;:::o;35960:419::-;36126:4;36164:2;36153:9;36149:18;36141:26;;36213:9;36207:4;36203:20;36199:1;36188:9;36184:17;36177:47;36241:131;36367:4;36241:131;:::i;:::-;36233:139;;35960:419;;;:::o;36385:233::-;36424:3;36447:24;36465:5;36447:24;:::i;:::-;36438:33;;36493:66;36486:5;36483:77;36480:103;;36563:18;;:::i;:::-;36480:103;36610:1;36603:5;36599:13;36592:20;;36385:233;;;:::o;36624:194::-;36664:4;36684:20;36702:1;36684:20;:::i;:::-;36679:25;;36718:20;36736:1;36718:20;:::i;:::-;36713:25;;36762:1;36759;36755:9;36747:17;;36786:1;36780:4;36777:11;36774:37;;;36791:18;;:::i;:::-;36774:37;36624:194;;;;:::o;36824:225::-;36964:34;36960:1;36952:6;36948:14;36941:58;37033:8;37028:2;37020:6;37016:15;37009:33;36824:225;:::o;37055:366::-;37197:3;37218:67;37282:2;37277:3;37218:67;:::i;:::-;37211:74;;37294:93;37383:3;37294:93;:::i;:::-;37412:2;37407:3;37403:12;37396:19;;37055:366;;;:::o;37427:419::-;37593:4;37631:2;37620:9;37616:18;37608:26;;37680:9;37674:4;37670:20;37666:1;37655:9;37651:17;37644:47;37708:131;37834:4;37708:131;:::i;:::-;37700:139;;37427:419;;;:::o;37852:147::-;37953:11;37990:3;37975:18;;37852:147;;;;:::o;38005:114::-;;:::o;38125:398::-;38284:3;38305:83;38386:1;38381:3;38305:83;:::i;:::-;38298:90;;38397:93;38486:3;38397:93;:::i;:::-;38515:1;38510:3;38506:11;38499:18;;38125:398;;;:::o;38529:379::-;38713:3;38735:147;38878:3;38735:147;:::i;:::-;38728:154;;38899:3;38892:10;;38529:379;;;:::o;38914:442::-;39063:4;39101:2;39090:9;39086:18;39078:26;;39114:71;39182:1;39171:9;39167:17;39158:6;39114:71;:::i;:::-;39195:72;39263:2;39252:9;39248:18;39239:6;39195:72;:::i;:::-;39277;39345:2;39334:9;39330:18;39321:6;39277:72;:::i;:::-;38914:442;;;;;;:::o;39362:180::-;39410:77;39407:1;39400:88;39507:4;39504:1;39497:15;39531:4;39528:1;39521:15;39548:180;39596:77;39593:1;39586:88;39693:4;39690:1;39683:15;39717:4;39714:1;39707:15;39734:143;39791:5;39822:6;39816:13;39807:22;;39838:33;39865:5;39838:33;:::i;:::-;39734:143;;;;:::o;39883:351::-;39953:6;40002:2;39990:9;39981:7;39977:23;39973:32;39970:119;;;40008:79;;:::i;:::-;39970:119;40128:1;40153:64;40209:7;40200:6;40189:9;40185:22;40153:64;:::i;:::-;40143:74;;40099:128;39883:351;;;;:::o;40240:85::-;40285:7;40314:5;40303:16;;40240:85;;;:::o;40331:158::-;40389:9;40422:61;40440:42;40449:32;40475:5;40449:32;:::i;:::-;40440:42;:::i;:::-;40422:61;:::i;:::-;40409:74;;40331:158;;;:::o;40495:147::-;40590:45;40629:5;40590:45;:::i;:::-;40585:3;40578:58;40495:147;;:::o;40648:114::-;40715:6;40749:5;40743:12;40733:22;;40648:114;;;:::o;40768:184::-;40867:11;40901:6;40896:3;40889:19;40941:4;40936:3;40932:14;40917:29;;40768:184;;;;:::o;40958:132::-;41025:4;41048:3;41040:11;;41078:4;41073:3;41069:14;41061:22;;40958:132;;;:::o;41096:108::-;41173:24;41191:5;41173:24;:::i;:::-;41168:3;41161:37;41096:108;;:::o;41210:179::-;41279:10;41300:46;41342:3;41334:6;41300:46;:::i;:::-;41378:4;41373:3;41369:14;41355:28;;41210:179;;;;:::o;41395:113::-;41465:4;41497;41492:3;41488:14;41480:22;;41395:113;;;:::o;41544:732::-;41663:3;41692:54;41740:5;41692:54;:::i;:::-;41762:86;41841:6;41836:3;41762:86;:::i;:::-;41755:93;;41872:56;41922:5;41872:56;:::i;:::-;41951:7;41982:1;41967:284;41992:6;41989:1;41986:13;41967:284;;;42068:6;42062:13;42095:63;42154:3;42139:13;42095:63;:::i;:::-;42088:70;;42181:60;42234:6;42181:60;:::i;:::-;42171:70;;42027:224;42014:1;42011;42007:9;42002:14;;41967:284;;;41971:14;42267:3;42260:10;;41668:608;;;41544:732;;;;:::o;42282:831::-;42545:4;42583:3;42572:9;42568:19;42560:27;;42597:71;42665:1;42654:9;42650:17;42641:6;42597:71;:::i;:::-;42678:80;42754:2;42743:9;42739:18;42730:6;42678:80;:::i;:::-;42805:9;42799:4;42795:20;42790:2;42779:9;42775:18;42768:48;42833:108;42936:4;42927:6;42833:108;:::i;:::-;42825:116;;42951:72;43019:2;43008:9;43004:18;42995:6;42951:72;:::i;:::-;43033:73;43101:3;43090:9;43086:19;43077:6;43033:73;:::i;:::-;42282:831;;;;;;;;:::o;43119:807::-;43368:4;43406:3;43395:9;43391:19;43383:27;;43420:71;43488:1;43477:9;43473:17;43464:6;43420:71;:::i;:::-;43501:72;43569:2;43558:9;43554:18;43545:6;43501:72;:::i;:::-;43583:80;43659:2;43648:9;43644:18;43635:6;43583:80;:::i;:::-;43673;43749:2;43738:9;43734:18;43725:6;43673:80;:::i;:::-;43763:73;43831:3;43820:9;43816:19;43807:6;43763:73;:::i;:::-;43846;43914:3;43903:9;43899:19;43890:6;43846:73;:::i;:::-;43119:807;;;;;;;;;:::o;43932:663::-;44020:6;44028;44036;44085:2;44073:9;44064:7;44060:23;44056:32;44053:119;;;44091:79;;:::i;:::-;44053:119;44211:1;44236:64;44292:7;44283:6;44272:9;44268:22;44236:64;:::i;:::-;44226:74;;44182:128;44349:2;44375:64;44431:7;44422:6;44411:9;44407:22;44375:64;:::i;:::-;44365:74;;44320:129;44488:2;44514:64;44570:7;44561:6;44550:9;44546:22;44514:64;:::i;:::-;44504:74;;44459:129;43932:663;;;;;:::o

Swarm Source

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