ETH Price: $2,611.73 (-2.38%)

Token

CzZhusuDKfukPaulyBen (Sam)
 

Overview

Max Total Supply

10,000,000 Sam

Holders

37

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.000000000001702416 Sam

Value
$0.00
0xed743606f2f2cb840d24ab2d2e3d28d99b468385
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:
Sam

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// $SAM?
//
// https://t.me/samcoin1776
// https://samcoin.xyz/
// https://twitter.com/SamCoin_Eth
// 
// $SAM


// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

    /**
     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

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

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

// File: @openzeppelin/contracts/utils/Context.sol

// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

// File: @openzeppelin/contracts/access/Ownable.sol

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions 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);
    }
}

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol

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

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol

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

pragma solidity ^0.8.0;

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

// File: @openzeppelin/contracts/token/ERC20/ERC20.sol

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

pragma solidity ^0.8.0;

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * 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:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

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

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

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

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

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

        return true;
    }

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

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(
            fromBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

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

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

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

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

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

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

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

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

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

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

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

pragma solidity 0.8.9;

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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

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

    function price0CumulativeLast() external view returns (uint);

    function price1CumulativeLast() external view returns (uint);

    function kLast() external view returns (uint);

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

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    /**
     * @dev Multiplies two int256 variables and fails on overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }

    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }

    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

library SafeMathUint {
    function toInt256Safe(uint256 a) internal pure returns (int256) {
        int256 b = int256(a);
        require(b >= 0);
        return b;
    }
}

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

    function WETH() external pure returns (address);

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

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

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    bool private swapping;

    address public marketingWallet;
    address public devWallet;

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

    uint256 public percentForLPBurn = 1;
    bool public lpBurnEnabled = false;
    uint256 public lpBurnFrequency = 1360000000000 seconds;
    uint256 public lastLpBurnTime;

    uint256 public manualBurnFrequency = 43210 minutes;
    uint256 public lastManualLpBurnTime;

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

    mapping(address => uint256) private _holderLastTransferTimestamp;
    bool public transferDelayEnabled = true;

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

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

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;

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

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

    // blacklist
    mapping(address => bool) public blacklists;

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

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

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

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

    event AutoNukeLP();

    event ManualNukeLP();

    constructor() ERC20("CzZhusuDKfukPaulyBen", "Sam") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

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

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

        uint256 _buyMarketingFee = 0;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 20;

        uint256 _sellMarketingFee = 0;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 20;

        uint256 totalSupply = 10_000_000 * 1e18;

        //  Maximum tx size and wallet size
        maxTransactionAmount = (totalSupply * 2) / 100;
        maxWallet = (totalSupply * 2) / 100;

        swapTokensAtAmount = (totalSupply * 1) / 10000;

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

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

        marketingWallet = address(owner()); // set as marketing wallet
        devWallet = address(owner()); // 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 {}
/*
    function blacklist(
        address[] calldata _addresses,
        bool _isBlacklisting
    ) external onlyOwner {
        for (uint i = 0; i < _addresses.length; i++) {
            blacklists[_addresses[i]] = _isBlacklisting;
        }
    }
*/
    // once enabled, can never be turned off
    function beginTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        lastLpBurnTime = block.timestamp;
    }

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

    // disable Transfer delay - cannot be reenabled
    function removeTransferDelay() 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() * 10) / 1000,
            "Swap amount cannot be higher than 1% total supply."
        );
        swapTokensAtAmount = newAmount;
        return true;
    }

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

        require(
            maxPerWallet >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set maxWallet lower than 0.5%"
        );
        maxWallet = maxPerWallet * (10 ** 18);
    }

    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 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 25, "Must keep fees at 25% or less");
    }

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

    function updateTaxes(uint256 buy, uint256 sell) external onlyOwner {
        sellDevFee = sell;
        buyDevFee = buy;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 25, "Must keep fees at 25% or less");
        require(sellTotalFees <= 30, "Must keep fees at 30% 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 updateMarketingWallet(
        address newMarketingWallet
    ) external onlyOwner {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }

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

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

    event BoughtEarly(address indexed sniper);

    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");
        require(!blacklists[to] && !blacklists[from], "Blacklisted");

        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) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
            }

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

            amount -= fees;
        }

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

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

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

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

    function 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
            deadAddress,
            block.timestamp
        );
    }

    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 swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity +
            tokensForMarketing +
            tokensForDev;
        bool success;

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

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

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

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

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

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

        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;

        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;

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

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

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

    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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","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":"beginTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blacklists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":[{"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":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeAllLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","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":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"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":"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":"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":"tokensForMarketing","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":"to","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":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","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":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxPerTx","type":"uint256"},{"internalType":"uint256","name":"maxPerWallet","type":"uint256"}],"name":"updateMaxBuy","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":"_marketingFee","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"},{"inputs":[{"internalType":"uint256","name":"buy","type":"uint256"},{"internalType":"uint256","name":"sell","type":"uint256"}],"name":"updateTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600b556000600c60006101000a81548160ff02191690831515021790555065013ca6512000600d5562278f58600f556001601160006101000a81548160ff0219169083151502179055506000601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff0219169083151502179055506001601360006101000a81548160ff021916908315150217905550348015620000ae57600080fd5b506040518060400160405280601481526020017f437a5a68757375444b66756b5061756c7942656e0000000000000000000000008152506040518060400160405280600381526020017f53616d000000000000000000000000000000000000000000000000000000000081525081600390805190602001906200013392919062000ae1565b5080600490805190602001906200014c92919062000ae1565b5050506200016f620001636200061960201b60201c565b6200062160201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506200019b816001620006e760201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200021657600080fd5b505afa1580156200022b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000251919062000bfb565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002b457600080fd5b505afa158015620002c9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ef919062000bfb565b6040518363ffffffff1660e01b81526004016200030e92919062000c3e565b602060405180830381600087803b1580156200032957600080fd5b505af11580156200033e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000364919062000bfb565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003ac60a0516001620006e760201b60201c565b620003c160a05160016200075260201b60201c565b60008060006014905060008060006014905060006a084595161401484a00000090506064600282620003f4919062000ca4565b62000400919062000d34565b600881905550606460028262000417919062000ca4565b62000423919062000d34565b600a819055506127106001826200043b919062000ca4565b62000447919062000d34565b60098190555086601581905550856016819055508460178190555060175460165460155462000477919062000d6c565b62000483919062000d6c565b6014819055508360198190555082601a8190555081601b81905550601b54601a54601954620004b3919062000d6c565b620004bf919062000d6c565b601881905550620004d5620007f360201b60201c565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000525620007f360201b60201c565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200058762000579620007f360201b60201c565b60016200081d60201b60201c565b6200059a3060016200081d60201b60201c565b620005af61dead60016200081d60201b60201c565b620005d1620005c3620007f360201b60201c565b6001620006e760201b60201c565b620005e4306001620006e760201b60201c565b620005f961dead6001620006e760201b60201c565b6200060b3382620008d860201b60201c565b505050505050505062000f8b565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620006f762000a4660201b60201c565b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200082d62000a4660201b60201c565b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620008cc919062000de6565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200094b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009429062000e64565b60405180910390fd5b6200095f6000838362000ad760201b60201c565b806002600082825462000973919062000d6c565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a26919062000e97565b60405180910390a362000a426000838362000adc60201b60201c565b5050565b62000a566200061960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000a7c620007f360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000ad5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000acc9062000f04565b60405180910390fd5b565b505050565b505050565b82805462000aef9062000f55565b90600052602060002090601f01602090048101928262000b13576000855562000b5f565b82601f1062000b2e57805160ff191683800117855562000b5f565b8280016001018555821562000b5f579182015b8281111562000b5e57825182559160200191906001019062000b41565b5b50905062000b6e919062000b72565b5090565b5b8082111562000b8d57600081600090555060010162000b73565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000bc38262000b96565b9050919050565b62000bd58162000bb6565b811462000be157600080fd5b50565b60008151905062000bf58162000bca565b92915050565b60006020828403121562000c145762000c1362000b91565b5b600062000c248482850162000be4565b91505092915050565b62000c388162000bb6565b82525050565b600060408201905062000c55600083018562000c2d565b62000c64602083018462000c2d565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000cb18262000c6b565b915062000cbe8362000c6b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000cfa5762000cf962000c75565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000d418262000c6b565b915062000d4e8362000c6b565b92508262000d615762000d6062000d05565b5b828204905092915050565b600062000d798262000c6b565b915062000d868362000c6b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000dbe5762000dbd62000c75565b5b828201905092915050565b60008115159050919050565b62000de08162000dc9565b82525050565b600060208201905062000dfd600083018462000dd5565b92915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000e4c601f8362000e03565b915062000e598262000e14565b602082019050919050565b6000602082019050818103600083015262000e7f8162000e3d565b9050919050565b62000e918162000c6b565b82525050565b600060208201905062000eae600083018462000e86565b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000eec60208362000e03565b915062000ef98262000eb4565b602082019050919050565b6000602082019050818103600083015262000f1f8162000edd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000f6e57607f821691505b6020821081141562000f855762000f8462000f26565b5b50919050565b60805160a0516157f66200101360003960008181611388015281816118b10152818161205f01528181612125015281816121520152818161298301528181613a7e01528181613b460152613b730152600081816111310152818161292b01528181613ce901528181613dd901528181613e0001528181613e9c0152613ec301526157f66000f3fe6080604052600436106103d25760003560e01c80638da5cb5b116101fd578063c024666811610118578063db05e5cb116100ab578063f2fde38b1161007a578063f2fde38b14610e88578063f637434214610eb1578063f8686f0714610edc578063f8b45b0514610f07578063fe72b27a14610f32576103d9565b8063db05e5cb14610dca578063dd62ed3e14610df5578063e2f4560514610e32578063f11a24d314610e5d576103d9565b8063c876d0b9116100e7578063c876d0b914610d0c578063c8c8ebe414610d37578063d257b34f14610d62578063d85ba06314610d9f576103d9565b8063c024666814610c7a578063c17b5b8c14610ca3578063c18bc19514610ccc578063c408c24514610cf5576103d9565b80639fccce3211610190578063a9059cbb1161015f578063a9059cbb14610bac578063aacebbe314610be9578063b62496f514610c12578063bbc0c74214610c4f576103d9565b80639fccce3214610aee578063a0d82dc514610b19578063a457c2d714610b44578063a4c82a0014610b81576103d9565b806395d89b41116101cc57806395d89b4114610a445780639a7a23d614610a6f5780639c3b4fdc14610a985780639ec22c0e14610ac3576103d9565b80638da5cb5b1461099a5780638ea5220f146109c557806392136913146109f0578063924de9b714610a1b576103d9565b80632e82f1a0116102ed57806370a082311161028057806375f0a8741161024f57806375f0a874146108f25780637b3c10301461091d5780637bce5a04146109465780638095d56414610971576103d9565b806370a082311461084c578063715018a614610889578063730c1888146108a05780637571336a146108c9576103d9565b80634a62bb65116102bc5780634a62bb651461078e5780634fbee193146107b95780636a486a8e146107f65780636ddd171314610821576103d9565b80632e82f1a0146106d0578063313ce567146106fb578063395093511461072657806349bd5a5e14610763576103d9565b8063184c16c511610365578063203e727e11610334578063203e727e1461061457806323b872dd1461063d57806327c8f8351461067a5780632c3e486c146106a5576103d9565b8063184c16c514610568578063199ffc72146105935780631a8145bb146105be5780631f3fed8f146105e9576103d9565b80631694505e116103a15780631694505e146104ac57806316c02129146104d757806318160ddd146105145780631816467f1461053f576103d9565b806306fdde03146103de578063095ea7b3146104095780631006ee0c1461044657806310d5de531461046f576103d9565b366103d957005b600080fd5b3480156103ea57600080fd5b506103f3610f6f565b604051610400919061401a565b60405180910390f35b34801561041557600080fd5b50610430600480360381019061042b91906140d5565b611001565b60405161043d9190614130565b60405180910390f35b34801561045257600080fd5b5061046d6004803603810190610468919061414b565b611024565b005b34801561047b57600080fd5b506104966004803603810190610491919061418b565b611110565b6040516104a39190614130565b60405180910390f35b3480156104b857600080fd5b506104c161112f565b6040516104ce9190614217565b60405180910390f35b3480156104e357600080fd5b506104fe60048036038101906104f9919061418b565b611153565b60405161050b9190614130565b60405180910390f35b34801561052057600080fd5b50610529611173565b6040516105369190614241565b60405180910390f35b34801561054b57600080fd5b506105666004803603810190610561919061418b565b61117d565b005b34801561057457600080fd5b5061057d611245565b60405161058a9190614241565b60405180910390f35b34801561059f57600080fd5b506105a861124b565b6040516105b59190614241565b60405180910390f35b3480156105ca57600080fd5b506105d3611251565b6040516105e09190614241565b60405180910390f35b3480156105f557600080fd5b506105fe611257565b60405161060b9190614241565b60405180910390f35b34801561062057600080fd5b5061063b6004803603810190610636919061425c565b61125d565b005b34801561064957600080fd5b50610664600480360381019061065f9190614289565b6112f8565b6040516106719190614130565b60405180910390f35b34801561068657600080fd5b5061068f611327565b60405161069c91906142eb565b60405180910390f35b3480156106b157600080fd5b506106ba61132d565b6040516106c79190614241565b60405180910390f35b3480156106dc57600080fd5b506106e5611333565b6040516106f29190614130565b60405180910390f35b34801561070757600080fd5b50610710611346565b60405161071d9190614322565b60405180910390f35b34801561073257600080fd5b5061074d600480360381019061074891906140d5565b61134f565b60405161075a9190614130565b60405180910390f35b34801561076f57600080fd5b50610778611386565b60405161078591906142eb565b60405180910390f35b34801561079a57600080fd5b506107a36113aa565b6040516107b09190614130565b60405180910390f35b3480156107c557600080fd5b506107e060048036038101906107db919061418b565b6113bd565b6040516107ed9190614130565b60405180910390f35b34801561080257600080fd5b5061080b611413565b6040516108189190614241565b60405180910390f35b34801561082d57600080fd5b50610836611419565b6040516108439190614130565b60405180910390f35b34801561085857600080fd5b50610873600480360381019061086e919061418b565b61142c565b6040516108809190614241565b60405180910390f35b34801561089557600080fd5b5061089e611474565b005b3480156108ac57600080fd5b506108c760048036038101906108c29190614369565b611488565b005b3480156108d557600080fd5b506108f060048036038101906108eb91906143bc565b611554565b005b3480156108fe57600080fd5b506109076115b7565b60405161091491906142eb565b60405180910390f35b34801561092957600080fd5b50610944600480360381019061093f919061414b565b6115dd565b005b34801561095257600080fd5b5061095b611709565b6040516109689190614241565b60405180910390f35b34801561097d57600080fd5b50610998600480360381019061099391906143fc565b61170f565b005b3480156109a657600080fd5b506109af61179a565b6040516109bc91906142eb565b60405180910390f35b3480156109d157600080fd5b506109da6117c4565b6040516109e791906142eb565b60405180910390f35b3480156109fc57600080fd5b50610a056117ea565b604051610a129190614241565b60405180910390f35b348015610a2757600080fd5b50610a426004803603810190610a3d919061444f565b6117f0565b005b348015610a5057600080fd5b50610a59611815565b604051610a66919061401a565b60405180910390f35b348015610a7b57600080fd5b50610a966004803603810190610a9191906143bc565b6118a7565b005b348015610aa457600080fd5b50610aad61194c565b604051610aba9190614241565b60405180910390f35b348015610acf57600080fd5b50610ad8611952565b604051610ae59190614241565b60405180910390f35b348015610afa57600080fd5b50610b03611958565b604051610b109190614241565b60405180910390f35b348015610b2557600080fd5b50610b2e61195e565b604051610b3b9190614241565b60405180910390f35b348015610b5057600080fd5b50610b6b6004803603810190610b6691906140d5565b611964565b604051610b789190614130565b60405180910390f35b348015610b8d57600080fd5b50610b966119db565b604051610ba39190614241565b60405180910390f35b348015610bb857600080fd5b50610bd36004803603810190610bce91906140d5565b6119e1565b604051610be09190614130565b60405180910390f35b348015610bf557600080fd5b50610c106004803603810190610c0b919061418b565b611a04565b005b348015610c1e57600080fd5b50610c396004803603810190610c34919061418b565b611acc565b604051610c469190614130565b60405180910390f35b348015610c5b57600080fd5b50610c64611aec565b604051610c719190614130565b60405180910390f35b348015610c8657600080fd5b50610ca16004803603810190610c9c91906143bc565b611aff565b005b348015610caf57600080fd5b50610cca6004803603810190610cc591906143fc565b611bb0565b005b348015610cd857600080fd5b50610cf36004803603810190610cee919061425c565b611c3b565b005b348015610d0157600080fd5b50610d0a611cd6565b005b348015610d1857600080fd5b50610d21611d1d565b604051610d2e9190614130565b60405180910390f35b348015610d4357600080fd5b50610d4c611d30565b604051610d599190614241565b60405180910390f35b348015610d6e57600080fd5b50610d896004803603810190610d84919061425c565b611d36565b604051610d969190614130565b60405180910390f35b348015610dab57600080fd5b50610db4611e17565b604051610dc19190614241565b60405180910390f35b348015610dd657600080fd5b50610ddf611e1d565b604051610dec9190614130565b60405180910390f35b348015610e0157600080fd5b50610e1c6004803603810190610e17919061447c565b611e49565b604051610e299190614241565b60405180910390f35b348015610e3e57600080fd5b50610e47611ed0565b604051610e549190614241565b60405180910390f35b348015610e6957600080fd5b50610e72611ed6565b604051610e7f9190614241565b60405180910390f35b348015610e9457600080fd5b50610eaf6004803603810190610eaa919061418b565b611edc565b005b348015610ebd57600080fd5b50610ec6611f60565b604051610ed39190614241565b60405180910390f35b348015610ee857600080fd5b50610ef1611f66565b604051610efe9190614130565b60405180910390f35b348015610f1357600080fd5b50610f1c611f92565b604051610f299190614241565b60405180910390f35b348015610f3e57600080fd5b50610f596004803603810190610f54919061425c565b611f98565b604051610f669190614130565b60405180910390f35b606060038054610f7e906144eb565b80601f0160208091040260200160405190810160405280929190818152602001828054610faa906144eb565b8015610ff75780601f10610fcc57610100808354040283529160200191610ff7565b820191906000526020600020905b815481529060010190602001808311610fda57829003601f168201915b5050505050905090565b60008061100c61220b565b9050611019818585612213565b600191505092915050565b61102c6123de565b80601b8190555081601781905550601b54601a5460195461104d919061454c565b611057919061454c565b601881905550601754601654601554611070919061454c565b61107a919061454c565b601481905550601960145411156110c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110bd906145ee565b60405180910390fd5b601e601854111561110c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111039061465a565b60405180910390fd5b5050565b602080528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b60216020528060005260406000206000915054906101000a900460ff1681565b6000600254905090565b6111856123de565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b600b5481565b601d5481565b601c5481565b6112656123de565b670de0b6b3a76400006103e8600161127b611173565b611285919061467a565b61128f9190614703565b6112999190614703565b8110156112db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d2906147a6565b60405180910390fd5b670de0b6b3a7640000816112ef919061467a565b60088190555050565b60008061130361220b565b905061131085828561245c565b61131b8585856124e8565b60019150509392505050565b61dead81565b600d5481565b600c60009054906101000a900460ff1681565b60006012905090565b60008061135a61220b565b905061137b81858561136c8589611e49565b611376919061454c565b612213565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601160009054906101000a900460ff1681565b6000601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60185481565b601160029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61147c6123de565b6114866000613363565b565b6114906123de565b6102588310156114d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114cc90614838565b60405180910390fd5b6103e882111580156114e8575060008210155b611527576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151e906148ca565b60405180910390fd5b82600d8190555081600b8190555080600c60006101000a81548160ff021916908315150217905550505050565b61155c6123de565b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6115e56123de565b670de0b6b3a76400006103e860016115fb611173565b611605919061467a565b61160f9190614703565b6116199190614703565b82101561165b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611652906147a6565b60405180910390fd5b670de0b6b3a76400008261166f919061467a565b600881905550670de0b6b3a76400006103e8600561168b611173565b611695919061467a565b61169f9190614703565b6116a99190614703565b8110156116eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e29061495c565b60405180910390fd5b670de0b6b3a7640000816116ff919061467a565b600a819055505050565b60155481565b6117176123de565b82601581905550816016819055508060178190555060175460165460155461173f919061454c565b611749919061454c565b60148190555060196014541115611795576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178c906145ee565b60405180910390fd5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60195481565b6117f86123de565b80601160026101000a81548160ff02191690831515021790555050565b606060048054611824906144eb565b80601f0160208091040260200160405190810160405280929190818152602001828054611850906144eb565b801561189d5780601f106118725761010080835404028352916020019161189d565b820191906000526020600020905b81548152906001019060200180831161188057829003601f168201915b5050505050905090565b6118af6123de565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561193e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611935906149ee565b60405180910390fd5b6119488282613429565b5050565b60175481565b60105481565b601e5481565b601b5481565b60008061196f61220b565b9050600061197d8286611e49565b9050838110156119c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b990614a80565b60405180910390fd5b6119cf8286868403612213565b60019250505092915050565b600e5481565b6000806119ec61220b565b90506119f98185856124e8565b600191505092915050565b611a0c6123de565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60226020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b611b076123de565b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611ba49190614130565b60405180910390a25050565b611bb86123de565b8260198190555081601a8190555080601b81905550601b54601a54601954611be0919061454c565b611bea919061454c565b601881905550601e6018541115611c36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2d9061465a565b60405180910390fd5b505050565b611c436123de565b670de0b6b3a76400006103e86005611c59611173565b611c63919061467a565b611c6d9190614703565b611c779190614703565b811015611cb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb09061495c565b60405180910390fd5b670de0b6b3a764000081611ccd919061467a565b600a8190555050565b611cde6123de565b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e81905550565b601360009054906101000a900460ff1681565b60085481565b6000611d406123de565b620186a06001611d4e611173565b611d58919061467a565b611d629190614703565b821015611da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9b90614b12565b60405180910390fd5b6103e8600a611db1611173565b611dbb919061467a565b611dc59190614703565b821115611e07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfe90614ba4565b60405180910390fd5b8160098190555060019050919050565b60145481565b6000611e276123de565b6000601160006101000a81548160ff0219169083151502179055506001905090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60165481565b611ee46123de565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4b90614c36565b60405180910390fd5b611f5d81613363565b50565b601a5481565b6000611f706123de565b6000601360006101000a81548160ff0219169083151502179055506001905090565b600a5481565b6000611fa26123de565b600f54601054611fb2919061454c565b4211611ff3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fea90614ca2565b60405180910390fd5b6103e8821115612038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202f90614d34565b60405180910390fd5b4260108190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040161209a91906142eb565b60206040518083038186803b1580156120b257600080fd5b505afa1580156120c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ea9190614d69565b9050600061211561271061210786856134ca90919063ffffffff16565b6134e090919063ffffffff16565b9050600081111561214e5761214d7f000000000000000000000000000000000000000000000000000000000000000061dead836134f6565b5b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156121bb57600080fd5b505af11580156121cf573d6000803e3d6000fd5b505050507f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb60405160405180910390a160019350505050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612283576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227a90614e08565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ea90614e9a565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123d19190614241565b60405180910390a3505050565b6123e661220b565b73ffffffffffffffffffffffffffffffffffffffff1661240461179a565b73ffffffffffffffffffffffffffffffffffffffff161461245a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245190614f06565b60405180910390fd5b565b60006124688484611e49565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146124e257818110156124d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124cb90614f72565b60405180910390fd5b6124e18484848403612213565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612558576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254f90615004565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125bf90615096565b60405180910390fd5b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561266c5750602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6126ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a290615102565b60405180910390fd5b60008114156126c5576126c0838360006134f6565b61335e565b601160009054906101000a900460ff1615612d88576126e261179a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612750575061272061179a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127895750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127c3575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127dc5750600560149054906101000a900460ff16155b15612d8757601160019054906101000a900460ff166128d657601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128965750601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6128d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128cc9061516e565b60405180910390fd5b5b601360009054906101000a900460ff1615612a9e576128f361179a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561297a57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129d257507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612a9d5743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612a58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4f90615226565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612b415750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612be857600854811115612b8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b82906152b8565b60405180910390fd5b600a54612b978361142c565b82612ba2919061454c565b1115612be3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bda90615324565b60405180910390fd5b612d86565b602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c8b5750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612cda57600854811115612cd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ccc906153b6565b60405180910390fd5b612d85565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612d8457600a54612d378361142c565b82612d42919061454c565b1115612d83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7a90615324565b60405180910390fd5b5b5b5b5b5b6000612d933061142c565b905060006009548210159050808015612db85750601160029054906101000a900460ff165b8015612dd15750600560149054906101000a900460ff16155b8015612e275750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e7d5750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612ed35750601f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f17576001600560146101000a81548160ff021916908315150217905550612efb61376e565b6000600560146101000a81548160ff0219169083151502179055505b600560149054906101000a900460ff16158015612f7d5750602260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015612f955750600c60009054906101000a900460ff165b8015612fb05750600d54600e54612fac919061454c565b4210155b80156130065750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561301557613013613a55565b505b6000600560149054906101000a900460ff16159050601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806130cb5750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156130d557600090505b6000811561334e57602260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561313857506000601854115b15613205576131656064613157601854886134ca90919063ffffffff16565b6134e090919063ffffffff16565b9050601854601a5482613178919061467a565b6131829190614703565b601d6000828254613193919061454c565b92505081905550601854601b54826131ab919061467a565b6131b59190614703565b601e60008282546131c6919061454c565b92505081905550601854601954826131de919061467a565b6131e89190614703565b601c60008282546131f9919061454c565b9250508190555061332a565b602260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561326057506000601454115b156133295761328d606461327f601454886134ca90919063ffffffff16565b6134e090919063ffffffff16565b9050601454601654826132a0919061467a565b6132aa9190614703565b601d60008282546132bb919061454c565b92505081905550601454601754826132d3919061467a565b6132dd9190614703565b601e60008282546132ee919061454c565b9250508190555060145460155482613306919061467a565b6133109190614703565b601c6000828254613321919061454c565b925050819055505b5b600081111561333f5761333e8730836134f6565b5b808561334b91906153d6565b94505b6133598787876134f6565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600081836134d8919061467a565b905092915050565b600081836134ee9190614703565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613566576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161355d90615004565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156135d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135cd90615096565b60405180910390fd5b6135e1838383613c2a565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161365e9061547c565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516137559190614241565b60405180910390a3613768848484613c2f565b50505050565b60006137793061142c565b90506000601e54601c54601d54613790919061454c565b61379a919061454c565b90506000808314806137ac5750600082145b156137b957505050613a53565b60146009546137c8919061467a565b8311156137e15760146009546137de919061467a565b92505b6000600283601d54866137f4919061467a565b6137fe9190614703565b6138089190614703565b9050600061381f8286613c3490919063ffffffff16565b9050600047905061382f82613c4a565b60006138448247613c3490919063ffffffff16565b9050600061386f87613861601c54856134ca90919063ffffffff16565b6134e090919063ffffffff16565b9050600061389a8861388c601e54866134ca90919063ffffffff16565b6134e090919063ffffffff16565b905060008183856138ab91906153d6565b6138b591906153d6565b90506000601d819055506000601c819055506000601e81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613915906154cd565b60006040518083038185875af1925050503d8060008114613952576040519150601f19603f3d011682016040523d82523d6000602084013e613957565b606091505b50508098505060008711801561396d5750600081115b156139ba5761397c8782613e96565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601d546040516139b1939291906154e2565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613a00906154cd565b60006040518083038185875af1925050503d8060008114613a3d576040519150601f19603f3d011682016040523d82523d6000602084013e613a42565b606091505b505080985050505050505050505050505b565b600042600e8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b8152600401613ab991906142eb565b60206040518083038186803b158015613ad157600080fd5b505afa158015613ae5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b099190614d69565b90506000613b36612710613b28600b54856134ca90919063ffffffff16565b6134e090919063ffffffff16565b90506000811115613b6f57613b6e7f000000000000000000000000000000000000000000000000000000000000000061dead836134f6565b5b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613bdc57600080fd5b505af1158015613bf0573d6000803e3d6000fd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b505050565b505050565b60008183613c4291906153d6565b905092915050565b6000600267ffffffffffffffff811115613c6757613c66615519565b5b604051908082528060200260200182016040528015613c955781602001602082028036833780820191505090505b5090503081600081518110613cad57613cac615548565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613d4d57600080fd5b505afa158015613d61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d85919061558c565b81600181518110613d9957613d98615548565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613dfe307f000000000000000000000000000000000000000000000000000000000000000084612213565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613e609594939291906156b2565b600060405180830381600087803b158015613e7a57600080fd5b505af1158015613e8e573d6000803e3d6000fd5b505050505050565b613ec1307f000000000000000000000000000000000000000000000000000000000000000084612213565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401613f289695949392919061570c565b6060604051808303818588803b158015613f4157600080fd5b505af1158015613f55573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613f7a919061576d565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613fbb578082015181840152602081019050613fa0565b83811115613fca576000848401525b50505050565b6000601f19601f8301169050919050565b6000613fec82613f81565b613ff68185613f8c565b9350614006818560208601613f9d565b61400f81613fd0565b840191505092915050565b600060208201905081810360008301526140348184613fe1565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061406c82614041565b9050919050565b61407c81614061565b811461408757600080fd5b50565b60008135905061409981614073565b92915050565b6000819050919050565b6140b28161409f565b81146140bd57600080fd5b50565b6000813590506140cf816140a9565b92915050565b600080604083850312156140ec576140eb61403c565b5b60006140fa8582860161408a565b925050602061410b858286016140c0565b9150509250929050565b60008115159050919050565b61412a81614115565b82525050565b60006020820190506141456000830184614121565b92915050565b600080604083850312156141625761416161403c565b5b6000614170858286016140c0565b9250506020614181858286016140c0565b9150509250929050565b6000602082840312156141a1576141a061403c565b5b60006141af8482850161408a565b91505092915050565b6000819050919050565b60006141dd6141d86141d384614041565b6141b8565b614041565b9050919050565b60006141ef826141c2565b9050919050565b6000614201826141e4565b9050919050565b614211816141f6565b82525050565b600060208201905061422c6000830184614208565b92915050565b61423b8161409f565b82525050565b60006020820190506142566000830184614232565b92915050565b6000602082840312156142725761427161403c565b5b6000614280848285016140c0565b91505092915050565b6000806000606084860312156142a2576142a161403c565b5b60006142b08682870161408a565b93505060206142c18682870161408a565b92505060406142d2868287016140c0565b9150509250925092565b6142e581614061565b82525050565b600060208201905061430060008301846142dc565b92915050565b600060ff82169050919050565b61431c81614306565b82525050565b60006020820190506143376000830184614313565b92915050565b61434681614115565b811461435157600080fd5b50565b6000813590506143638161433d565b92915050565b6000806000606084860312156143825761438161403c565b5b6000614390868287016140c0565b93505060206143a1868287016140c0565b92505060406143b286828701614354565b9150509250925092565b600080604083850312156143d3576143d261403c565b5b60006143e18582860161408a565b92505060206143f285828601614354565b9150509250929050565b6000806000606084860312156144155761441461403c565b5b6000614423868287016140c0565b9350506020614434868287016140c0565b9250506040614445868287016140c0565b9150509250925092565b6000602082840312156144655761446461403c565b5b600061447384828501614354565b91505092915050565b600080604083850312156144935761449261403c565b5b60006144a18582860161408a565b92505060206144b28582860161408a565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061450357607f821691505b60208210811415614517576145166144bc565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006145578261409f565b91506145628361409f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156145975761459661451d565b5b828201905092915050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b60006145d8601d83613f8c565b91506145e3826145a2565b602082019050919050565b60006020820190508181036000830152614607816145cb565b9050919050565b7f4d757374206b656570206665657320617420333025206f72206c657373000000600082015250565b6000614644601d83613f8c565b915061464f8261460e565b602082019050919050565b6000602082019050818103600083015261467381614637565b9050919050565b60006146858261409f565b91506146908361409f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156146c9576146c861451d565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061470e8261409f565b91506147198361409f565b925082614729576147286146d4565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614790602f83613f8c565b915061479b82614734565b604082019050919050565b600060208201905081810360008301526147bf81614783565b9050919050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b6000614822603383613f8c565b915061482d826147c6565b604082019050919050565b6000602082019050818103600083015261485181614815565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b60006148b4603083613f8c565b91506148bf82614858565b604082019050919050565b600060208201905081810360008301526148e3816148a7565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614946602483613f8c565b9150614951826148ea565b604082019050919050565b6000602082019050818103600083015261497581614939565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006149d8603983613f8c565b91506149e38261497c565b604082019050919050565b60006020820190508181036000830152614a07816149cb565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614a6a602583613f8c565b9150614a7582614a0e565b604082019050919050565b60006020820190508181036000830152614a9981614a5d565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614afc603583613f8c565b9150614b0782614aa0565b604082019050919050565b60006020820190508181036000830152614b2b81614aef565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20312520746f74616c20737570706c792e0000000000000000000000000000602082015250565b6000614b8e603283613f8c565b9150614b9982614b32565b604082019050919050565b60006020820190508181036000830152614bbd81614b81565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614c20602683613f8c565b9150614c2b82614bc4565b604082019050919050565b60006020820190508181036000830152614c4f81614c13565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b6000614c8c602083613f8c565b9150614c9782614c56565b602082019050919050565b60006020820190508181036000830152614cbb81614c7f565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b6000614d1e602a83613f8c565b9150614d2982614cc2565b604082019050919050565b60006020820190508181036000830152614d4d81614d11565b9050919050565b600081519050614d63816140a9565b92915050565b600060208284031215614d7f57614d7e61403c565b5b6000614d8d84828501614d54565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614df2602483613f8c565b9150614dfd82614d96565b604082019050919050565b60006020820190508181036000830152614e2181614de5565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614e84602283613f8c565b9150614e8f82614e28565b604082019050919050565b60006020820190508181036000830152614eb381614e77565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614ef0602083613f8c565b9150614efb82614eba565b602082019050919050565b60006020820190508181036000830152614f1f81614ee3565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000614f5c601d83613f8c565b9150614f6782614f26565b602082019050919050565b60006020820190508181036000830152614f8b81614f4f565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614fee602583613f8c565b9150614ff982614f92565b604082019050919050565b6000602082019050818103600083015261501d81614fe1565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615080602383613f8c565b915061508b82615024565b604082019050919050565b600060208201905081810360008301526150af81615073565b9050919050565b7f426c61636b6c6973746564000000000000000000000000000000000000000000600082015250565b60006150ec600b83613f8c565b91506150f7826150b6565b602082019050919050565b6000602082019050818103600083015261511b816150df565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000615158601683613f8c565b915061516382615122565b602082019050919050565b600060208201905081810360008301526151878161514b565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000615210604983613f8c565b915061521b8261518e565b606082019050919050565b6000602082019050818103600083015261523f81615203565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006152a2603583613f8c565b91506152ad82615246565b604082019050919050565b600060208201905081810360008301526152d181615295565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061530e601383613f8c565b9150615319826152d8565b602082019050919050565b6000602082019050818103600083015261533d81615301565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006153a0603683613f8c565b91506153ab82615344565b604082019050919050565b600060208201905081810360008301526153cf81615393565b9050919050565b60006153e18261409f565b91506153ec8361409f565b9250828210156153ff576153fe61451d565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615466602683613f8c565b91506154718261540a565b604082019050919050565b6000602082019050818103600083015261549581615459565b9050919050565b600081905092915050565b50565b60006154b760008361549c565b91506154c2826154a7565b600082019050919050565b60006154d8826154aa565b9150819050919050565b60006060820190506154f76000830186614232565b6155046020830185614232565b6155116040830184614232565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061558681614073565b92915050565b6000602082840312156155a2576155a161403c565b5b60006155b084828501615577565b91505092915050565b6000819050919050565b60006155de6155d96155d4846155b9565b6141b8565b61409f565b9050919050565b6155ee816155c3565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61562981614061565b82525050565b600061563b8383615620565b60208301905092915050565b6000602082019050919050565b600061565f826155f4565b61566981856155ff565b935061567483615610565b8060005b838110156156a557815161568c888261562f565b975061569783615647565b925050600181019050615678565b5085935050505092915050565b600060a0820190506156c76000830188614232565b6156d460208301876155e5565b81810360408301526156e68186615654565b90506156f560608301856142dc565b6157026080830184614232565b9695505050505050565b600060c08201905061572160008301896142dc565b61572e6020830188614232565b61573b60408301876155e5565b61574860608301866155e5565b61575560808301856142dc565b61576260a0830184614232565b979650505050505050565b6000806000606084860312156157865761578561403c565b5b600061579486828701614d54565b93505060206157a586828701614d54565b92505060406157b686828701614d54565b915050925092509256fea2646970667358221220442c3fabe318ab1eff306e02d44ca1b2c6f5f3ce1db72661a5b507ad018cc8c864736f6c63430008090033

Deployed Bytecode

0x6080604052600436106103d25760003560e01c80638da5cb5b116101fd578063c024666811610118578063db05e5cb116100ab578063f2fde38b1161007a578063f2fde38b14610e88578063f637434214610eb1578063f8686f0714610edc578063f8b45b0514610f07578063fe72b27a14610f32576103d9565b8063db05e5cb14610dca578063dd62ed3e14610df5578063e2f4560514610e32578063f11a24d314610e5d576103d9565b8063c876d0b9116100e7578063c876d0b914610d0c578063c8c8ebe414610d37578063d257b34f14610d62578063d85ba06314610d9f576103d9565b8063c024666814610c7a578063c17b5b8c14610ca3578063c18bc19514610ccc578063c408c24514610cf5576103d9565b80639fccce3211610190578063a9059cbb1161015f578063a9059cbb14610bac578063aacebbe314610be9578063b62496f514610c12578063bbc0c74214610c4f576103d9565b80639fccce3214610aee578063a0d82dc514610b19578063a457c2d714610b44578063a4c82a0014610b81576103d9565b806395d89b41116101cc57806395d89b4114610a445780639a7a23d614610a6f5780639c3b4fdc14610a985780639ec22c0e14610ac3576103d9565b80638da5cb5b1461099a5780638ea5220f146109c557806392136913146109f0578063924de9b714610a1b576103d9565b80632e82f1a0116102ed57806370a082311161028057806375f0a8741161024f57806375f0a874146108f25780637b3c10301461091d5780637bce5a04146109465780638095d56414610971576103d9565b806370a082311461084c578063715018a614610889578063730c1888146108a05780637571336a146108c9576103d9565b80634a62bb65116102bc5780634a62bb651461078e5780634fbee193146107b95780636a486a8e146107f65780636ddd171314610821576103d9565b80632e82f1a0146106d0578063313ce567146106fb578063395093511461072657806349bd5a5e14610763576103d9565b8063184c16c511610365578063203e727e11610334578063203e727e1461061457806323b872dd1461063d57806327c8f8351461067a5780632c3e486c146106a5576103d9565b8063184c16c514610568578063199ffc72146105935780631a8145bb146105be5780631f3fed8f146105e9576103d9565b80631694505e116103a15780631694505e146104ac57806316c02129146104d757806318160ddd146105145780631816467f1461053f576103d9565b806306fdde03146103de578063095ea7b3146104095780631006ee0c1461044657806310d5de531461046f576103d9565b366103d957005b600080fd5b3480156103ea57600080fd5b506103f3610f6f565b604051610400919061401a565b60405180910390f35b34801561041557600080fd5b50610430600480360381019061042b91906140d5565b611001565b60405161043d9190614130565b60405180910390f35b34801561045257600080fd5b5061046d6004803603810190610468919061414b565b611024565b005b34801561047b57600080fd5b506104966004803603810190610491919061418b565b611110565b6040516104a39190614130565b60405180910390f35b3480156104b857600080fd5b506104c161112f565b6040516104ce9190614217565b60405180910390f35b3480156104e357600080fd5b506104fe60048036038101906104f9919061418b565b611153565b60405161050b9190614130565b60405180910390f35b34801561052057600080fd5b50610529611173565b6040516105369190614241565b60405180910390f35b34801561054b57600080fd5b506105666004803603810190610561919061418b565b61117d565b005b34801561057457600080fd5b5061057d611245565b60405161058a9190614241565b60405180910390f35b34801561059f57600080fd5b506105a861124b565b6040516105b59190614241565b60405180910390f35b3480156105ca57600080fd5b506105d3611251565b6040516105e09190614241565b60405180910390f35b3480156105f557600080fd5b506105fe611257565b60405161060b9190614241565b60405180910390f35b34801561062057600080fd5b5061063b6004803603810190610636919061425c565b61125d565b005b34801561064957600080fd5b50610664600480360381019061065f9190614289565b6112f8565b6040516106719190614130565b60405180910390f35b34801561068657600080fd5b5061068f611327565b60405161069c91906142eb565b60405180910390f35b3480156106b157600080fd5b506106ba61132d565b6040516106c79190614241565b60405180910390f35b3480156106dc57600080fd5b506106e5611333565b6040516106f29190614130565b60405180910390f35b34801561070757600080fd5b50610710611346565b60405161071d9190614322565b60405180910390f35b34801561073257600080fd5b5061074d600480360381019061074891906140d5565b61134f565b60405161075a9190614130565b60405180910390f35b34801561076f57600080fd5b50610778611386565b60405161078591906142eb565b60405180910390f35b34801561079a57600080fd5b506107a36113aa565b6040516107b09190614130565b60405180910390f35b3480156107c557600080fd5b506107e060048036038101906107db919061418b565b6113bd565b6040516107ed9190614130565b60405180910390f35b34801561080257600080fd5b5061080b611413565b6040516108189190614241565b60405180910390f35b34801561082d57600080fd5b50610836611419565b6040516108439190614130565b60405180910390f35b34801561085857600080fd5b50610873600480360381019061086e919061418b565b61142c565b6040516108809190614241565b60405180910390f35b34801561089557600080fd5b5061089e611474565b005b3480156108ac57600080fd5b506108c760048036038101906108c29190614369565b611488565b005b3480156108d557600080fd5b506108f060048036038101906108eb91906143bc565b611554565b005b3480156108fe57600080fd5b506109076115b7565b60405161091491906142eb565b60405180910390f35b34801561092957600080fd5b50610944600480360381019061093f919061414b565b6115dd565b005b34801561095257600080fd5b5061095b611709565b6040516109689190614241565b60405180910390f35b34801561097d57600080fd5b50610998600480360381019061099391906143fc565b61170f565b005b3480156109a657600080fd5b506109af61179a565b6040516109bc91906142eb565b60405180910390f35b3480156109d157600080fd5b506109da6117c4565b6040516109e791906142eb565b60405180910390f35b3480156109fc57600080fd5b50610a056117ea565b604051610a129190614241565b60405180910390f35b348015610a2757600080fd5b50610a426004803603810190610a3d919061444f565b6117f0565b005b348015610a5057600080fd5b50610a59611815565b604051610a66919061401a565b60405180910390f35b348015610a7b57600080fd5b50610a966004803603810190610a9191906143bc565b6118a7565b005b348015610aa457600080fd5b50610aad61194c565b604051610aba9190614241565b60405180910390f35b348015610acf57600080fd5b50610ad8611952565b604051610ae59190614241565b60405180910390f35b348015610afa57600080fd5b50610b03611958565b604051610b109190614241565b60405180910390f35b348015610b2557600080fd5b50610b2e61195e565b604051610b3b9190614241565b60405180910390f35b348015610b5057600080fd5b50610b6b6004803603810190610b6691906140d5565b611964565b604051610b789190614130565b60405180910390f35b348015610b8d57600080fd5b50610b966119db565b604051610ba39190614241565b60405180910390f35b348015610bb857600080fd5b50610bd36004803603810190610bce91906140d5565b6119e1565b604051610be09190614130565b60405180910390f35b348015610bf557600080fd5b50610c106004803603810190610c0b919061418b565b611a04565b005b348015610c1e57600080fd5b50610c396004803603810190610c34919061418b565b611acc565b604051610c469190614130565b60405180910390f35b348015610c5b57600080fd5b50610c64611aec565b604051610c719190614130565b60405180910390f35b348015610c8657600080fd5b50610ca16004803603810190610c9c91906143bc565b611aff565b005b348015610caf57600080fd5b50610cca6004803603810190610cc591906143fc565b611bb0565b005b348015610cd857600080fd5b50610cf36004803603810190610cee919061425c565b611c3b565b005b348015610d0157600080fd5b50610d0a611cd6565b005b348015610d1857600080fd5b50610d21611d1d565b604051610d2e9190614130565b60405180910390f35b348015610d4357600080fd5b50610d4c611d30565b604051610d599190614241565b60405180910390f35b348015610d6e57600080fd5b50610d896004803603810190610d84919061425c565b611d36565b604051610d969190614130565b60405180910390f35b348015610dab57600080fd5b50610db4611e17565b604051610dc19190614241565b60405180910390f35b348015610dd657600080fd5b50610ddf611e1d565b604051610dec9190614130565b60405180910390f35b348015610e0157600080fd5b50610e1c6004803603810190610e17919061447c565b611e49565b604051610e299190614241565b60405180910390f35b348015610e3e57600080fd5b50610e47611ed0565b604051610e549190614241565b60405180910390f35b348015610e6957600080fd5b50610e72611ed6565b604051610e7f9190614241565b60405180910390f35b348015610e9457600080fd5b50610eaf6004803603810190610eaa919061418b565b611edc565b005b348015610ebd57600080fd5b50610ec6611f60565b604051610ed39190614241565b60405180910390f35b348015610ee857600080fd5b50610ef1611f66565b604051610efe9190614130565b60405180910390f35b348015610f1357600080fd5b50610f1c611f92565b604051610f299190614241565b60405180910390f35b348015610f3e57600080fd5b50610f596004803603810190610f54919061425c565b611f98565b604051610f669190614130565b60405180910390f35b606060038054610f7e906144eb565b80601f0160208091040260200160405190810160405280929190818152602001828054610faa906144eb565b8015610ff75780601f10610fcc57610100808354040283529160200191610ff7565b820191906000526020600020905b815481529060010190602001808311610fda57829003601f168201915b5050505050905090565b60008061100c61220b565b9050611019818585612213565b600191505092915050565b61102c6123de565b80601b8190555081601781905550601b54601a5460195461104d919061454c565b611057919061454c565b601881905550601754601654601554611070919061454c565b61107a919061454c565b601481905550601960145411156110c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110bd906145ee565b60405180910390fd5b601e601854111561110c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111039061465a565b60405180910390fd5b5050565b602080528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b60216020528060005260406000206000915054906101000a900460ff1681565b6000600254905090565b6111856123de565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b600b5481565b601d5481565b601c5481565b6112656123de565b670de0b6b3a76400006103e8600161127b611173565b611285919061467a565b61128f9190614703565b6112999190614703565b8110156112db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d2906147a6565b60405180910390fd5b670de0b6b3a7640000816112ef919061467a565b60088190555050565b60008061130361220b565b905061131085828561245c565b61131b8585856124e8565b60019150509392505050565b61dead81565b600d5481565b600c60009054906101000a900460ff1681565b60006012905090565b60008061135a61220b565b905061137b81858561136c8589611e49565b611376919061454c565b612213565b600191505092915050565b7f0000000000000000000000002242f18a4189a9bb7fc97715cb0d873c096ffdc381565b601160009054906101000a900460ff1681565b6000601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60185481565b601160029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61147c6123de565b6114866000613363565b565b6114906123de565b6102588310156114d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114cc90614838565b60405180910390fd5b6103e882111580156114e8575060008210155b611527576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151e906148ca565b60405180910390fd5b82600d8190555081600b8190555080600c60006101000a81548160ff021916908315150217905550505050565b61155c6123de565b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6115e56123de565b670de0b6b3a76400006103e860016115fb611173565b611605919061467a565b61160f9190614703565b6116199190614703565b82101561165b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611652906147a6565b60405180910390fd5b670de0b6b3a76400008261166f919061467a565b600881905550670de0b6b3a76400006103e8600561168b611173565b611695919061467a565b61169f9190614703565b6116a99190614703565b8110156116eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e29061495c565b60405180910390fd5b670de0b6b3a7640000816116ff919061467a565b600a819055505050565b60155481565b6117176123de565b82601581905550816016819055508060178190555060175460165460155461173f919061454c565b611749919061454c565b60148190555060196014541115611795576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178c906145ee565b60405180910390fd5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60195481565b6117f86123de565b80601160026101000a81548160ff02191690831515021790555050565b606060048054611824906144eb565b80601f0160208091040260200160405190810160405280929190818152602001828054611850906144eb565b801561189d5780601f106118725761010080835404028352916020019161189d565b820191906000526020600020905b81548152906001019060200180831161188057829003601f168201915b5050505050905090565b6118af6123de565b7f0000000000000000000000002242f18a4189a9bb7fc97715cb0d873c096ffdc373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561193e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611935906149ee565b60405180910390fd5b6119488282613429565b5050565b60175481565b60105481565b601e5481565b601b5481565b60008061196f61220b565b9050600061197d8286611e49565b9050838110156119c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b990614a80565b60405180910390fd5b6119cf8286868403612213565b60019250505092915050565b600e5481565b6000806119ec61220b565b90506119f98185856124e8565b600191505092915050565b611a0c6123de565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60226020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b611b076123de565b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611ba49190614130565b60405180910390a25050565b611bb86123de565b8260198190555081601a8190555080601b81905550601b54601a54601954611be0919061454c565b611bea919061454c565b601881905550601e6018541115611c36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2d9061465a565b60405180910390fd5b505050565b611c436123de565b670de0b6b3a76400006103e86005611c59611173565b611c63919061467a565b611c6d9190614703565b611c779190614703565b811015611cb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb09061495c565b60405180910390fd5b670de0b6b3a764000081611ccd919061467a565b600a8190555050565b611cde6123de565b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e81905550565b601360009054906101000a900460ff1681565b60085481565b6000611d406123de565b620186a06001611d4e611173565b611d58919061467a565b611d629190614703565b821015611da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9b90614b12565b60405180910390fd5b6103e8600a611db1611173565b611dbb919061467a565b611dc59190614703565b821115611e07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfe90614ba4565b60405180910390fd5b8160098190555060019050919050565b60145481565b6000611e276123de565b6000601160006101000a81548160ff0219169083151502179055506001905090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60165481565b611ee46123de565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4b90614c36565b60405180910390fd5b611f5d81613363565b50565b601a5481565b6000611f706123de565b6000601360006101000a81548160ff0219169083151502179055506001905090565b600a5481565b6000611fa26123de565b600f54601054611fb2919061454c565b4211611ff3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fea90614ca2565b60405180910390fd5b6103e8821115612038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202f90614d34565b60405180910390fd5b4260108190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f0000000000000000000000002242f18a4189a9bb7fc97715cb0d873c096ffdc36040518263ffffffff1660e01b815260040161209a91906142eb565b60206040518083038186803b1580156120b257600080fd5b505afa1580156120c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ea9190614d69565b9050600061211561271061210786856134ca90919063ffffffff16565b6134e090919063ffffffff16565b9050600081111561214e5761214d7f0000000000000000000000002242f18a4189a9bb7fc97715cb0d873c096ffdc361dead836134f6565b5b60007f0000000000000000000000002242f18a4189a9bb7fc97715cb0d873c096ffdc390508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156121bb57600080fd5b505af11580156121cf573d6000803e3d6000fd5b505050507f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb60405160405180910390a160019350505050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612283576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227a90614e08565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ea90614e9a565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123d19190614241565b60405180910390a3505050565b6123e661220b565b73ffffffffffffffffffffffffffffffffffffffff1661240461179a565b73ffffffffffffffffffffffffffffffffffffffff161461245a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245190614f06565b60405180910390fd5b565b60006124688484611e49565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146124e257818110156124d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124cb90614f72565b60405180910390fd5b6124e18484848403612213565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612558576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254f90615004565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125bf90615096565b60405180910390fd5b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561266c5750602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6126ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a290615102565b60405180910390fd5b60008114156126c5576126c0838360006134f6565b61335e565b601160009054906101000a900460ff1615612d88576126e261179a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612750575061272061179a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127895750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127c3575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127dc5750600560149054906101000a900460ff16155b15612d8757601160019054906101000a900460ff166128d657601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128965750601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6128d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128cc9061516e565b60405180910390fd5b5b601360009054906101000a900460ff1615612a9e576128f361179a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561297a57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129d257507f0000000000000000000000002242f18a4189a9bb7fc97715cb0d873c096ffdc373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612a9d5743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612a58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4f90615226565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612b415750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612be857600854811115612b8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b82906152b8565b60405180910390fd5b600a54612b978361142c565b82612ba2919061454c565b1115612be3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bda90615324565b60405180910390fd5b612d86565b602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c8b5750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612cda57600854811115612cd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ccc906153b6565b60405180910390fd5b612d85565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612d8457600a54612d378361142c565b82612d42919061454c565b1115612d83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7a90615324565b60405180910390fd5b5b5b5b5b5b6000612d933061142c565b905060006009548210159050808015612db85750601160029054906101000a900460ff165b8015612dd15750600560149054906101000a900460ff16155b8015612e275750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e7d5750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612ed35750601f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f17576001600560146101000a81548160ff021916908315150217905550612efb61376e565b6000600560146101000a81548160ff0219169083151502179055505b600560149054906101000a900460ff16158015612f7d5750602260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015612f955750600c60009054906101000a900460ff165b8015612fb05750600d54600e54612fac919061454c565b4210155b80156130065750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561301557613013613a55565b505b6000600560149054906101000a900460ff16159050601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806130cb5750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156130d557600090505b6000811561334e57602260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561313857506000601854115b15613205576131656064613157601854886134ca90919063ffffffff16565b6134e090919063ffffffff16565b9050601854601a5482613178919061467a565b6131829190614703565b601d6000828254613193919061454c565b92505081905550601854601b54826131ab919061467a565b6131b59190614703565b601e60008282546131c6919061454c565b92505081905550601854601954826131de919061467a565b6131e89190614703565b601c60008282546131f9919061454c565b9250508190555061332a565b602260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561326057506000601454115b156133295761328d606461327f601454886134ca90919063ffffffff16565b6134e090919063ffffffff16565b9050601454601654826132a0919061467a565b6132aa9190614703565b601d60008282546132bb919061454c565b92505081905550601454601754826132d3919061467a565b6132dd9190614703565b601e60008282546132ee919061454c565b9250508190555060145460155482613306919061467a565b6133109190614703565b601c6000828254613321919061454c565b925050819055505b5b600081111561333f5761333e8730836134f6565b5b808561334b91906153d6565b94505b6133598787876134f6565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600081836134d8919061467a565b905092915050565b600081836134ee9190614703565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613566576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161355d90615004565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156135d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135cd90615096565b60405180910390fd5b6135e1838383613c2a565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161365e9061547c565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516137559190614241565b60405180910390a3613768848484613c2f565b50505050565b60006137793061142c565b90506000601e54601c54601d54613790919061454c565b61379a919061454c565b90506000808314806137ac5750600082145b156137b957505050613a53565b60146009546137c8919061467a565b8311156137e15760146009546137de919061467a565b92505b6000600283601d54866137f4919061467a565b6137fe9190614703565b6138089190614703565b9050600061381f8286613c3490919063ffffffff16565b9050600047905061382f82613c4a565b60006138448247613c3490919063ffffffff16565b9050600061386f87613861601c54856134ca90919063ffffffff16565b6134e090919063ffffffff16565b9050600061389a8861388c601e54866134ca90919063ffffffff16565b6134e090919063ffffffff16565b905060008183856138ab91906153d6565b6138b591906153d6565b90506000601d819055506000601c819055506000601e81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613915906154cd565b60006040518083038185875af1925050503d8060008114613952576040519150601f19603f3d011682016040523d82523d6000602084013e613957565b606091505b50508098505060008711801561396d5750600081115b156139ba5761397c8782613e96565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601d546040516139b1939291906154e2565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613a00906154cd565b60006040518083038185875af1925050503d8060008114613a3d576040519150601f19603f3d011682016040523d82523d6000602084013e613a42565b606091505b505080985050505050505050505050505b565b600042600e8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f0000000000000000000000002242f18a4189a9bb7fc97715cb0d873c096ffdc36040518263ffffffff1660e01b8152600401613ab991906142eb565b60206040518083038186803b158015613ad157600080fd5b505afa158015613ae5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b099190614d69565b90506000613b36612710613b28600b54856134ca90919063ffffffff16565b6134e090919063ffffffff16565b90506000811115613b6f57613b6e7f0000000000000000000000002242f18a4189a9bb7fc97715cb0d873c096ffdc361dead836134f6565b5b60007f0000000000000000000000002242f18a4189a9bb7fc97715cb0d873c096ffdc390508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613bdc57600080fd5b505af1158015613bf0573d6000803e3d6000fd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b505050565b505050565b60008183613c4291906153d6565b905092915050565b6000600267ffffffffffffffff811115613c6757613c66615519565b5b604051908082528060200260200182016040528015613c955781602001602082028036833780820191505090505b5090503081600081518110613cad57613cac615548565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613d4d57600080fd5b505afa158015613d61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d85919061558c565b81600181518110613d9957613d98615548565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613dfe307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612213565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613e609594939291906156b2565b600060405180830381600087803b158015613e7a57600080fd5b505af1158015613e8e573d6000803e3d6000fd5b505050505050565b613ec1307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612213565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401613f289695949392919061570c565b6060604051808303818588803b158015613f4157600080fd5b505af1158015613f55573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613f7a919061576d565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613fbb578082015181840152602081019050613fa0565b83811115613fca576000848401525b50505050565b6000601f19601f8301169050919050565b6000613fec82613f81565b613ff68185613f8c565b9350614006818560208601613f9d565b61400f81613fd0565b840191505092915050565b600060208201905081810360008301526140348184613fe1565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061406c82614041565b9050919050565b61407c81614061565b811461408757600080fd5b50565b60008135905061409981614073565b92915050565b6000819050919050565b6140b28161409f565b81146140bd57600080fd5b50565b6000813590506140cf816140a9565b92915050565b600080604083850312156140ec576140eb61403c565b5b60006140fa8582860161408a565b925050602061410b858286016140c0565b9150509250929050565b60008115159050919050565b61412a81614115565b82525050565b60006020820190506141456000830184614121565b92915050565b600080604083850312156141625761416161403c565b5b6000614170858286016140c0565b9250506020614181858286016140c0565b9150509250929050565b6000602082840312156141a1576141a061403c565b5b60006141af8482850161408a565b91505092915050565b6000819050919050565b60006141dd6141d86141d384614041565b6141b8565b614041565b9050919050565b60006141ef826141c2565b9050919050565b6000614201826141e4565b9050919050565b614211816141f6565b82525050565b600060208201905061422c6000830184614208565b92915050565b61423b8161409f565b82525050565b60006020820190506142566000830184614232565b92915050565b6000602082840312156142725761427161403c565b5b6000614280848285016140c0565b91505092915050565b6000806000606084860312156142a2576142a161403c565b5b60006142b08682870161408a565b93505060206142c18682870161408a565b92505060406142d2868287016140c0565b9150509250925092565b6142e581614061565b82525050565b600060208201905061430060008301846142dc565b92915050565b600060ff82169050919050565b61431c81614306565b82525050565b60006020820190506143376000830184614313565b92915050565b61434681614115565b811461435157600080fd5b50565b6000813590506143638161433d565b92915050565b6000806000606084860312156143825761438161403c565b5b6000614390868287016140c0565b93505060206143a1868287016140c0565b92505060406143b286828701614354565b9150509250925092565b600080604083850312156143d3576143d261403c565b5b60006143e18582860161408a565b92505060206143f285828601614354565b9150509250929050565b6000806000606084860312156144155761441461403c565b5b6000614423868287016140c0565b9350506020614434868287016140c0565b9250506040614445868287016140c0565b9150509250925092565b6000602082840312156144655761446461403c565b5b600061447384828501614354565b91505092915050565b600080604083850312156144935761449261403c565b5b60006144a18582860161408a565b92505060206144b28582860161408a565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061450357607f821691505b60208210811415614517576145166144bc565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006145578261409f565b91506145628361409f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156145975761459661451d565b5b828201905092915050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b60006145d8601d83613f8c565b91506145e3826145a2565b602082019050919050565b60006020820190508181036000830152614607816145cb565b9050919050565b7f4d757374206b656570206665657320617420333025206f72206c657373000000600082015250565b6000614644601d83613f8c565b915061464f8261460e565b602082019050919050565b6000602082019050818103600083015261467381614637565b9050919050565b60006146858261409f565b91506146908361409f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156146c9576146c861451d565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061470e8261409f565b91506147198361409f565b925082614729576147286146d4565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614790602f83613f8c565b915061479b82614734565b604082019050919050565b600060208201905081810360008301526147bf81614783565b9050919050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b6000614822603383613f8c565b915061482d826147c6565b604082019050919050565b6000602082019050818103600083015261485181614815565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b60006148b4603083613f8c565b91506148bf82614858565b604082019050919050565b600060208201905081810360008301526148e3816148a7565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614946602483613f8c565b9150614951826148ea565b604082019050919050565b6000602082019050818103600083015261497581614939565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006149d8603983613f8c565b91506149e38261497c565b604082019050919050565b60006020820190508181036000830152614a07816149cb565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614a6a602583613f8c565b9150614a7582614a0e565b604082019050919050565b60006020820190508181036000830152614a9981614a5d565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614afc603583613f8c565b9150614b0782614aa0565b604082019050919050565b60006020820190508181036000830152614b2b81614aef565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20312520746f74616c20737570706c792e0000000000000000000000000000602082015250565b6000614b8e603283613f8c565b9150614b9982614b32565b604082019050919050565b60006020820190508181036000830152614bbd81614b81565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614c20602683613f8c565b9150614c2b82614bc4565b604082019050919050565b60006020820190508181036000830152614c4f81614c13565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b6000614c8c602083613f8c565b9150614c9782614c56565b602082019050919050565b60006020820190508181036000830152614cbb81614c7f565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b6000614d1e602a83613f8c565b9150614d2982614cc2565b604082019050919050565b60006020820190508181036000830152614d4d81614d11565b9050919050565b600081519050614d63816140a9565b92915050565b600060208284031215614d7f57614d7e61403c565b5b6000614d8d84828501614d54565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614df2602483613f8c565b9150614dfd82614d96565b604082019050919050565b60006020820190508181036000830152614e2181614de5565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614e84602283613f8c565b9150614e8f82614e28565b604082019050919050565b60006020820190508181036000830152614eb381614e77565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614ef0602083613f8c565b9150614efb82614eba565b602082019050919050565b60006020820190508181036000830152614f1f81614ee3565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000614f5c601d83613f8c565b9150614f6782614f26565b602082019050919050565b60006020820190508181036000830152614f8b81614f4f565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614fee602583613f8c565b9150614ff982614f92565b604082019050919050565b6000602082019050818103600083015261501d81614fe1565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615080602383613f8c565b915061508b82615024565b604082019050919050565b600060208201905081810360008301526150af81615073565b9050919050565b7f426c61636b6c6973746564000000000000000000000000000000000000000000600082015250565b60006150ec600b83613f8c565b91506150f7826150b6565b602082019050919050565b6000602082019050818103600083015261511b816150df565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000615158601683613f8c565b915061516382615122565b602082019050919050565b600060208201905081810360008301526151878161514b565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000615210604983613f8c565b915061521b8261518e565b606082019050919050565b6000602082019050818103600083015261523f81615203565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006152a2603583613f8c565b91506152ad82615246565b604082019050919050565b600060208201905081810360008301526152d181615295565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061530e601383613f8c565b9150615319826152d8565b602082019050919050565b6000602082019050818103600083015261533d81615301565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006153a0603683613f8c565b91506153ab82615344565b604082019050919050565b600060208201905081810360008301526153cf81615393565b9050919050565b60006153e18261409f565b91506153ec8361409f565b9250828210156153ff576153fe61451d565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615466602683613f8c565b91506154718261540a565b604082019050919050565b6000602082019050818103600083015261549581615459565b9050919050565b600081905092915050565b50565b60006154b760008361549c565b91506154c2826154a7565b600082019050919050565b60006154d8826154aa565b9150819050919050565b60006060820190506154f76000830186614232565b6155046020830185614232565b6155116040830184614232565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061558681614073565b92915050565b6000602082840312156155a2576155a161403c565b5b60006155b084828501615577565b91505092915050565b6000819050919050565b60006155de6155d96155d4846155b9565b6141b8565b61409f565b9050919050565b6155ee816155c3565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61562981614061565b82525050565b600061563b8383615620565b60208301905092915050565b6000602082019050919050565b600061565f826155f4565b61566981856155ff565b935061567483615610565b8060005b838110156156a557815161568c888261562f565b975061569783615647565b925050600181019050615678565b5085935050505092915050565b600060a0820190506156c76000830188614232565b6156d460208301876155e5565b81810360408301526156e68186615654565b90506156f560608301856142dc565b6157026080830184614232565b9695505050505050565b600060c08201905061572160008301896142dc565b61572e6020830188614232565b61573b60408301876155e5565b61574860608301866155e5565b61575560808301856142dc565b61576260a0830184614232565b979650505050505050565b6000806000606084860312156157865761578561403c565b5b600061579486828701614d54565b93505060206157a586828701614d54565b92505060406157b686828701614d54565b915050925092509256fea2646970667358221220442c3fabe318ab1eff306e02d44ca1b2c6f5f3ce1db72661a5b507ad018cc8c864736f6c63430008090033

Deployed Bytecode Sourcemap

38830:20551:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16636:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19053:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47296:418;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40345:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38903:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40435:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17756:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48654:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39464:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39283:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40129:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40089;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45541:277;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19859:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39006:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39365:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39325:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17598:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20563:263;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38961:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39565:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48819:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39944:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39645:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17927:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9979:103;;;;;;;;;;;;;:::i;:::-;;55215:555;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46092:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39098:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45011:522;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39837:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46465:403;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9331:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39135:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39979:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46357:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16855:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47912:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39911:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39521:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40169:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40055:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21329:498;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39426:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18276:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48422:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40635:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39605:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47722:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46876:412;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45826:258;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43928:154;;;;;;;;;;;;;:::i;:::-;;39755:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39168:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44523:480;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39803:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44134:124;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18557:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39210:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39874:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10237:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40017:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44319:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39250:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58338:1040;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16636:100;16690:13;16723:5;16716:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16636:100;:::o;19053:226::-;19161:4;19178:13;19194:12;:10;:12::i;:::-;19178:28;;19217:32;19226:5;19233:7;19242:6;19217:8;:32::i;:::-;19267:4;19260:11;;;19053:226;;;;:::o;47296:418::-;9217:13;:11;:13::i;:::-;47387:4:::1;47374:10;:17;;;;47414:3;47402:9;:15;;;;47482:10;;47463:16;;47444;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;47428:13;:64;;;;47554:9;;47536:15;;47518;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;47503:12;:60;;;;47598:2;47582:12;;:18;;47574:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;47670:2;47653:13;;:19;;47645:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;47296:418:::0;;:::o;40345:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;38903:51::-;;;:::o;40435:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;17756:108::-;17817:7;17844:12;;17837:19;;17756:108;:::o;48654:157::-;9217:13;:11;:13::i;:::-;48761:9:::1;;;;;;;;;;;48733:38;;48750:9;48733:38;;;;;;;;;;;;48794:9;48782;;:21;;;;;;;;;;;;;;;;;;48654:157:::0;:::o;39464:50::-;;;;:::o;39283:35::-;;;;:::o;40129:33::-;;;;:::o;40089:::-;;;;:::o;45541:277::-;9217:13;:11;:13::i;:::-;45678:4:::1;45670;45665:1;45649:13;:11;:13::i;:::-;:17;;;;:::i;:::-;45648:26;;;;:::i;:::-;45647:35;;;;:::i;:::-;45637:6;:45;;45615:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;45801:8;45791:6;:19;;;;:::i;:::-;45768:20;:42;;;;45541:277:::0;:::o;19859:295::-;19990:4;20007:15;20025:12;:10;:12::i;:::-;20007:30;;20048:38;20064:4;20070:7;20079:6;20048:15;:38::i;:::-;20097:27;20107:4;20113:2;20117:6;20097:9;:27::i;:::-;20142:4;20135:11;;;19859:295;;;;;:::o;39006:53::-;39052:6;39006:53;:::o;39365:54::-;;;;:::o;39325:33::-;;;;;;;;;;;;;:::o;17598:93::-;17656:5;17681:2;17674:9;;17598:93;:::o;20563:263::-;20676:4;20693:13;20709:12;:10;:12::i;:::-;20693:28;;20732:64;20741:5;20748:7;20785:10;20757:25;20767:5;20774:7;20757:9;:25::i;:::-;:38;;;;:::i;:::-;20732:8;:64::i;:::-;20814:4;20807:11;;;20563:263;;;;:::o;38961:38::-;;;:::o;39565:33::-;;;;;;;;;;;;;:::o;48819:126::-;48885:4;48909:19;:28;48929:7;48909:28;;;;;;;;;;;;;;;;;;;;;;;;;48902:35;;48819:126;;;:::o;39944:28::-;;;;:::o;39645:30::-;;;;;;;;;;;;;:::o;17927:143::-;18017:7;18044:9;:18;18054:7;18044:18;;;;;;;;;;;;;;;;18037:25;;17927:143;;;:::o;9979:103::-;9217:13;:11;:13::i;:::-;10044:30:::1;10071:1;10044:18;:30::i;:::-;9979:103::o:0;55215:555::-;9217:13;:11;:13::i;:::-;55417:3:::1;55394:19;:26;;55372:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;55544:4;55532:8;:16;;:33;;;;;55564:1;55552:8;:13;;55532:33;55510:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;55670:19;55652:15;:37;;;;55719:8;55700:16;:27;;;;55754:8;55738:13;;:24;;;;;;;;;;;;;;;;;;55215:555:::0;;;:::o;46092:169::-;9217:13;:11;:13::i;:::-;46249:4:::1;46207:31;:39;46239:6;46207:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;46092:169:::0;;:::o;39098:30::-;;;;;;;;;;;;;:::o;45011:522::-;9217:13;:11;:13::i;:::-;45193:4:::1;45185;45180:1;45164:13;:11;:13::i;:::-;:17;;;;:::i;:::-;45163:26;;;;:::i;:::-;45162:35;;;;:::i;:::-;45150:8;:47;;45128:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;45318:8;45306;:21;;;;:::i;:::-;45283:20;:44;;;;45409:4;45401;45396:1;45380:13;:11;:13::i;:::-;:17;;;;:::i;:::-;45379:26;;;;:::i;:::-;45378:35;;;;:::i;:::-;45362:12;:51;;45340:137;;;;;;;;;;;;:::i;:::-;;;;;;;;;45516:8;45500:12;:25;;;;:::i;:::-;45488:9;:37;;;;45011:522:::0;;:::o;39837:30::-;;;;:::o;46465:403::-;9217:13;:11;:13::i;:::-;46633::::1;46615:15;:31;;;;46675:13;46657:15;:31;;;;46711:7;46699:9;:19;;;;46780:9;;46762:15;;46744;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;46729:12;:60;;;;46824:2;46808:12;;:18;;46800:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;46465:403:::0;;;:::o;9331:87::-;9377:7;9404:6;;;;;;;;;;;9397:13;;9331:87;:::o;39135:24::-;;;;;;;;;;;;;:::o;39979:31::-;;;;:::o;46357:100::-;9217:13;:11;:13::i;:::-;46442:7:::1;46428:11;;:21;;;;;;;;;;;;;;;;;;46357:100:::0;:::o;16855:104::-;16911:13;16944:7;16937:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16855:104;:::o;47912:306::-;9217:13;:11;:13::i;:::-;48058::::1;48050:21;;:4;:21;;;;48028:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;48169:41;48198:4;48204:5;48169:28;:41::i;:::-;47912:306:::0;;:::o;39911:24::-;;;;:::o;39521:35::-;;;;:::o;40169:27::-;;;;:::o;40055:25::-;;;;:::o;21329:498::-;21447:4;21464:13;21480:12;:10;:12::i;:::-;21464:28;;21503:24;21530:25;21540:5;21547:7;21530:9;:25::i;:::-;21503:52;;21608:15;21588:16;:35;;21566:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;21724:60;21733:5;21740:7;21768:15;21749:16;:34;21724:8;:60::i;:::-;21815:4;21808:11;;;;21329:498;;;;:::o;39426:29::-;;;;:::o;18276:218::-;18380:4;18397:13;18413:12;:10;:12::i;:::-;18397:28;;18436;18446:5;18453:2;18457:6;18436:9;:28::i;:::-;18482:4;18475:11;;;18276:218;;;;:::o;48422:224::-;9217:13;:11;:13::i;:::-;48575:15:::1;;;;;;;;;;;48532:59;;48555:18;48532:59;;;;;;;;;;;;48620:18;48602:15;;:36;;;;;;;;;;;;;;;;;;48422:224:::0;:::o;40635:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;39605:33::-;;;;;;;;;;;;;:::o;47722:182::-;9217:13;:11;:13::i;:::-;47838:8:::1;47807:19;:28;47827:7;47807:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;47878:7;47862:34;;;47887:8;47862:34;;;;;;:::i;:::-;;;;;;;;47722:182:::0;;:::o;46876:412::-;9217:13;:11;:13::i;:::-;47046::::1;47027:16;:32;;;;47089:13;47070:16;:32;;;;47126:7;47113:10;:20;;;;47198:10;;47179:16;;47160;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;47144:13;:64;;;;47244:2;47227:13;;:19;;47219:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;46876:412:::0;;;:::o;45826:258::-;9217:13;:11;:13::i;:::-;45966:4:::1;45958;45953:1;45937:13;:11;:13::i;:::-;:17;;;;:::i;:::-;45936:26;;;;:::i;:::-;45935:35;;;;:::i;:::-;45925:6;:45;;45903:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;46067:8;46057:6;:19;;;;:::i;:::-;46045:9;:31;;;;45826:258:::0;:::o;43928:154::-;9217:13;:11;:13::i;:::-;43998:4:::1;43982:13;;:20;;;;;;;;;;;;;;;;;;44027:4;44013:11;;:18;;;;;;;;;;;;;;;;;;44059:15;44042:14;:32;;;;43928:154::o:0;39755:39::-;;;;;;;;;;;;;:::o;39168:35::-;;;;:::o;44523:480::-;44620:4;9217:13;:11;:13::i;:::-;44694:6:::1;44689:1;44673:13;:11;:13::i;:::-;:17;;;;:::i;:::-;44672:28;;;;:::i;:::-;44659:9;:41;;44637:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;44850:4;44844:2;44828:13;:11;:13::i;:::-;:18;;;;:::i;:::-;44827:27;;;;:::i;:::-;44814:9;:40;;44792:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;44964:9;44943:18;:30;;;;44991:4;44984:11;;44523:480:::0;;;:::o;39803:27::-;;;;:::o;44134:124::-;44189:4;9217:13;:11;:13::i;:::-;44223:5:::1;44206:14;;:22;;;;;;;;;;;;;;;;;;44246:4;44239:11;;44134:124:::0;:::o;18557:176::-;18671:7;18698:11;:18;18710:5;18698:18;;;;;;;;;;;;;;;:27;18717:7;18698:27;;;;;;;;;;;;;;;;18691:34;;18557:176;;;;:::o;39210:33::-;;;;:::o;39874:30::-;;;;:::o;10237:238::-;9217:13;:11;:13::i;:::-;10360:1:::1;10340:22;;:8;:22;;;;10318:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;10439:28;10458:8;10439:18;:28::i;:::-;10237:238:::0;:::o;40017:31::-;;;;:::o;44319:134::-;44378:4;9217:13;:11;:13::i;:::-;44418:5:::1;44395:20;;:28;;;;;;;;;;;;;;;;;;44441:4;44434:11;;44319:134:::0;:::o;39250:24::-;;;;:::o;58338:1040::-;58438:4;9217:13;:11;:13::i;:::-;58518:19:::1;;58495:20;;:42;;;;:::i;:::-;58477:15;:60;58455:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;58627:4;58616:7;:15;;58608:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;58712:15;58689:20;:38;;;;58782:28;58813:4;:14;;;58828:13;58813:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;58782:60;;58892:20;58915:44;58953:5;58915:33;58940:7;58915:20;:24;;:33;;;;:::i;:::-;:37;;:44;;;;:::i;:::-;58892:67;;59079:1;59064:12;:16;59060:110;;;59097:61;59113:13;59136:6;59145:12;59097:15;:61::i;:::-;59060:110;59245:19;59282:13;59245:51;;59307:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;59334:14;;;;;;;;;;59366:4;59359:11;;;;;58338:1040:::0;;;:::o;7861:98::-;7914:7;7941:10;7934:17;;7861:98;:::o;25455:380::-;25608:1;25591:19;;:5;:19;;;;25583:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25689:1;25670:21;;:7;:21;;;;25662:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25773:6;25743:11;:18;25755:5;25743:18;;;;;;;;;;;;;;;:27;25762:7;25743:27;;;;;;;;;;;;;;;:36;;;;25811:7;25795:32;;25804:5;25795:32;;;25820:6;25795:32;;;;;;:::i;:::-;;;;;;;;25455:380;;;:::o;9496:132::-;9571:12;:10;:12::i;:::-;9560:23;;:7;:5;:7::i;:::-;:23;;;9552:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9496:132::o;26126:502::-;26261:24;26288:25;26298:5;26305:7;26288:9;:25::i;:::-;26261:52;;26348:17;26328:16;:37;26324:297;;26428:6;26408:16;:26;;26382:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;26543:51;26552:5;26559:7;26587:6;26568:16;:25;26543:8;:51::i;:::-;26324:297;26250:378;26126:502;;;:::o;49003:5082::-;49151:1;49135:18;;:4;:18;;;;49127:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49228:1;49214:16;;:2;:16;;;;49206:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;49290:10;:14;49301:2;49290:14;;;;;;;;;;;;;;;;;;;;;;;;;49289:15;:36;;;;;49309:10;:16;49320:4;49309:16;;;;;;;;;;;;;;;;;;;;;;;;;49308:17;49289:36;49281:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;49368:1;49358:6;:11;49354:93;;;49386:28;49402:4;49408:2;49412:1;49386:15;:28::i;:::-;49429:7;;49354:93;49463:14;;;;;;;;;;;49459:2487;;;49524:7;:5;:7::i;:::-;49516:15;;:4;:15;;;;:49;;;;;49558:7;:5;:7::i;:::-;49552:13;;:2;:13;;;;49516:49;:86;;;;;49600:1;49586:16;;:2;:16;;;;49516:86;:128;;;;;49637:6;49623:21;;:2;:21;;;;49516:128;:158;;;;;49666:8;;;;;;;;;;;49665:9;49516:158;49494:2441;;;49714:13;;;;;;;;;;;49709:223;;49786:19;:25;49806:4;49786:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;49815:19;:23;49835:2;49815:23;;;;;;;;;;;;;;;;;;;;;;;;;49786:52;49752:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;49709:223;50088:20;;;;;;;;;;;50084:641;;;50169:7;:5;:7::i;:::-;50163:13;;:2;:13;;;;:72;;;;;50219:15;50205:30;;:2;:30;;;;50163:72;:129;;;;;50278:13;50264:28;;:2;:28;;;;50163:129;50133:573;;;50456:12;50381:28;:39;50410:9;50381:39;;;;;;;;;;;;;;;;:87;50343:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;50670:12;50628:28;:39;50657:9;50628:39;;;;;;;;;;;;;;;:54;;;;50133:573;50084:641;50799:25;:31;50825:4;50799:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;50856:31;:35;50888:2;50856:35;;;;;;;;;;;;;;;;;;;;;;;;;50855:36;50799:92;50773:1147;;;50978:20;;50968:6;:30;;50934:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;51186:9;;51169:13;51179:2;51169:9;:13::i;:::-;51160:6;:22;;;;:::i;:::-;:35;;51126:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;50773:1147;;;51364:25;:29;51390:2;51364:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;51419:31;:37;51451:4;51419:37;;;;;;;;;;;;;;;;;;;;;;;;;51418:38;51364:92;51338:582;;;51543:20;;51533:6;:30;;51499:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;51338:582;;;51700:31;:35;51732:2;51700:35;;;;;;;;;;;;;;;;;;;;;;;;;51695:225;;51820:9;;51803:13;51813:2;51803:9;:13::i;:::-;51794:6;:22;;;;:::i;:::-;:35;;51760:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;51695:225;51338:582;50773:1147;49494:2441;49459:2487;51958:28;51989:24;52007:4;51989:9;:24::i;:::-;51958:55;;52026:12;52065:18;;52041:20;:42;;52026:57;;52114:7;:35;;;;;52138:11;;;;;;;;;;;52114:35;:61;;;;;52167:8;;;;;;;;;;;52166:9;52114:61;:110;;;;;52193:25;:31;52219:4;52193:31;;;;;;;;;;;;;;;;;;;;;;;;;52192:32;52114:110;:153;;;;;52242:19;:25;52262:4;52242:25;;;;;;;;;;;;;;;;;;;;;;;;;52241:26;52114:153;:194;;;;;52285:19;:23;52305:2;52285:23;;;;;;;;;;;;;;;;;;;;;;;;;52284:24;52114:194;52096:326;;;52346:4;52335:8;;:15;;;;;;;;;;;;;;;;;;52367:10;:8;:10::i;:::-;52405:5;52394:8;;:16;;;;;;;;;;;;;;;;;;52096:326;52453:8;;;;;;;;;;;52452:9;:55;;;;;52478:25;:29;52504:2;52478:29;;;;;;;;;;;;;;;;;;;;;;;;;52452:55;:85;;;;;52524:13;;;;;;;;;;;52452:85;:153;;;;;52590:15;;52573:14;;:32;;;;:::i;:::-;52554:15;:51;;52452:153;:196;;;;;52623:19;:25;52643:4;52623:25;;;;;;;;;;;;;;;;;;;;;;;;;52622:26;52452:196;52434:282;;;52675:29;:27;:29::i;:::-;;52434:282;52728:12;52744:8;;;;;;;;;;;52743:9;52728:24;;52854:19;:25;52874:4;52854:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;52883:19;:23;52903:2;52883:23;;;;;;;;;;;;;;;;;;;;;;;;;52854:52;52850:100;;;52933:5;52923:15;;52850:100;52962:12;53067:7;53063:969;;;53119:25;:29;53145:2;53119:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;53168:1;53152:13;;:17;53119:50;53115:768;;;53197:34;53227:3;53197:25;53208:13;;53197:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;53190:41;;53300:13;;53280:16;;53273:4;:23;;;;:::i;:::-;53272:41;;;;:::i;:::-;53250:18;;:63;;;;;;;:::i;:::-;;;;;;;;53370:13;;53356:10;;53349:4;:17;;;;:::i;:::-;53348:35;;;;:::i;:::-;53332:12;;:51;;;;;;;:::i;:::-;;;;;;;;53452:13;;53432:16;;53425:4;:23;;;;:::i;:::-;53424:41;;;;:::i;:::-;53402:18;;:63;;;;;;;:::i;:::-;;;;;;;;53115:768;;;53527:25;:31;53553:4;53527:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;53577:1;53562:12;;:16;53527:51;53523:360;;;53606:33;53635:3;53606:24;53617:12;;53606:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;53599:40;;53707:12;;53688:15;;53681:4;:22;;;;:::i;:::-;53680:39;;;;:::i;:::-;53658:18;;:61;;;;;;;:::i;:::-;;;;;;;;53775:12;;53762:9;;53755:4;:16;;;;:::i;:::-;53754:33;;;;:::i;:::-;53738:12;;:49;;;;;;;:::i;:::-;;;;;;;;53855:12;;53836:15;;53829:4;:22;;;;:::i;:::-;53828:39;;;;:::i;:::-;53806:18;;:61;;;;;;;:::i;:::-;;;;;;;;53523:360;53115:768;53910:1;53903:4;:8;53899:91;;;53932:42;53948:4;53962;53969;53932:15;:42::i;:::-;53899:91;54016:4;54006:14;;;;;:::i;:::-;;;53063:969;54044:33;54060:4;54066:2;54070:6;54044:15;:33::i;:::-;49116:4969;;;;49003:5082;;;;:::o;10635:191::-;10709:16;10728:6;;;;;;;;;;;10709:25;;10754:8;10745:6;;:17;;;;;;;;;;;;;;;;;;10809:8;10778:40;;10799:8;10778:40;;;;;;;;;;;;10698:128;10635:191;:::o;48226:188::-;48343:5;48309:25;:31;48335:4;48309:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;48400:5;48366:40;;48394:4;48366:40;;;;;;;;;;;;48226:188;;:::o;3757:98::-;3815:7;3846:1;3842;:5;;;;:::i;:::-;3835:12;;3757:98;;;;:::o;4156:::-;4214:7;4245:1;4241;:5;;;;:::i;:::-;4234:12;;4156:98;;;;:::o;22297:877::-;22444:1;22428:18;;:4;:18;;;;22420:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22521:1;22507:16;;:2;:16;;;;22499:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;22576:38;22597:4;22603:2;22607:6;22576:20;:38::i;:::-;22627:19;22649:9;:15;22659:4;22649:15;;;;;;;;;;;;;;;;22627:37;;22712:6;22697:11;:21;;22675:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;22852:6;22838:11;:20;22820:9;:15;22830:4;22820:15;;;;;;;;;;;;;;;:38;;;;23055:6;23038:9;:13;23048:2;23038:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;23105:2;23090:26;;23099:4;23090:26;;;23109:6;23090:26;;;;;;:::i;:::-;;;;;;;;23129:37;23149:4;23155:2;23159:6;23129:19;:37::i;:::-;22409:765;22297:877;;;:::o;55778:1756::-;55817:23;55843:24;55861:4;55843:9;:24::i;:::-;55817:50;;55878:25;55974:12;;55940:18;;55906;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;55878:108;;55997:12;56045:1;56026:15;:20;:46;;;;56071:1;56050:17;:22;56026:46;56022:85;;;56089:7;;;;;56022:85;56162:2;56141:18;;:23;;;;:::i;:::-;56123:15;:41;56119:115;;;56220:2;56199:18;;:23;;;;:::i;:::-;56181:41;;56119:115;56295:23;56408:1;56375:17;56340:18;;56322:15;:36;;;;:::i;:::-;56321:71;;;;:::i;:::-;:88;;;;:::i;:::-;56295:114;;56420:26;56449:36;56469:15;56449;:19;;:36;;;;:::i;:::-;56420:65;;56498:25;56526:21;56498:49;;56560:36;56577:18;56560:16;:36::i;:::-;56609:18;56630:44;56656:17;56630:21;:25;;:44;;;;:::i;:::-;56609:65;;56687:23;56713:81;56766:17;56713:34;56728:18;;56713:10;:14;;:34;;;;:::i;:::-;:38;;:81;;;;:::i;:::-;56687:107;;56805:17;56825:51;56858:17;56825:28;56840:12;;56825:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;56805:71;;56889:23;56946:9;56928:15;56915:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;56889:66;;56989:1;56968:18;:22;;;;57022:1;57001:18;:22;;;;57049:1;57034:12;:16;;;;57085:9;;;;;;;;;;;57077:23;;57108:9;57077:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57063:59;;;;;57157:1;57139:15;:19;:42;;;;;57180:1;57162:15;:19;57139:42;57135:278;;;57198:46;57211:15;57228;57198:12;:46::i;:::-;57264:137;57297:18;57334:15;57368:18;;57264:137;;;;;;;;:::i;:::-;;;;;;;;57135:278;57447:15;;;;;;;;;;;57439:29;;57490:21;57439:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57425:101;;;;;55806:1728;;;;;;;;;;55778:1756;:::o;57542:788::-;57599:4;57633:15;57616:14;:32;;;;57703:28;57734:4;:14;;;57749:13;57734:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;57703:60;;57813:20;57836:77;57897:5;57836:42;57861:16;;57836:20;:24;;:42;;;;:::i;:::-;:46;;:77;;;;:::i;:::-;57813:100;;58033:1;58018:12;:16;58014:110;;;58051:61;58067:13;58090:6;58099:12;58051:15;:61::i;:::-;58014:110;58199:19;58236:13;58199:51;;58261:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58288:12;;;;;;;;;;58318:4;58311:11;;;;;57542:788;:::o;27228:125::-;;;;:::o;27957:124::-;;;;:::o;3400:98::-;3458:7;3489:1;3485;:5;;;;:::i;:::-;3478:12;;3400:98;;;;:::o;54093:589::-;54219:21;54257:1;54243:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54219:40;;54288:4;54270;54275:1;54270:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;54314:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;54304:4;54309:1;54304:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;54349:62;54366:4;54381:15;54399:11;54349:8;:62::i;:::-;54450:15;:66;;;54531:11;54557:1;54601:4;54628;54648:15;54450:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54148:534;54093:589;:::o;54690:517::-;54838:62;54855:4;54870:15;54888:11;54838:8;:62::i;:::-;54943:15;:31;;;54982:9;55015:4;55035:11;55061:1;55104;39052:6;55173:15;54943:256;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;54690:517;;:::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:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:474::-;3562:6;3570;3619:2;3607:9;3598:7;3594:23;3590:32;3587:119;;;3625:79;;:::i;:::-;3587:119;3745:1;3770:53;3815:7;3806:6;3795:9;3791:22;3770:53;:::i;:::-;3760:63;;3716:117;3872:2;3898:53;3943:7;3934:6;3923:9;3919:22;3898:53;:::i;:::-;3888:63;;3843:118;3494:474;;;;;:::o;3974:329::-;4033:6;4082:2;4070:9;4061:7;4057:23;4053:32;4050:119;;;4088:79;;:::i;:::-;4050:119;4208:1;4233:53;4278:7;4269:6;4258:9;4254:22;4233:53;:::i;:::-;4223:63;;4179:117;3974:329;;;;:::o;4309:60::-;4337:3;4358:5;4351:12;;4309:60;;;:::o;4375:142::-;4425:9;4458:53;4476:34;4485:24;4503:5;4485:24;:::i;:::-;4476:34;:::i;:::-;4458:53;:::i;:::-;4445:66;;4375:142;;;:::o;4523:126::-;4573:9;4606:37;4637:5;4606:37;:::i;:::-;4593:50;;4523:126;;;:::o;4655:153::-;4732:9;4765:37;4796:5;4765:37;:::i;:::-;4752:50;;4655:153;;;:::o;4814:185::-;4928:64;4986:5;4928:64;:::i;:::-;4923:3;4916:77;4814:185;;:::o;5005:276::-;5125:4;5163:2;5152:9;5148:18;5140:26;;5176:98;5271:1;5260:9;5256:17;5247:6;5176:98;:::i;:::-;5005:276;;;;:::o;5287:118::-;5374:24;5392:5;5374:24;:::i;:::-;5369:3;5362:37;5287:118;;:::o;5411:222::-;5504:4;5542:2;5531:9;5527:18;5519:26;;5555:71;5623:1;5612:9;5608:17;5599:6;5555:71;:::i;:::-;5411:222;;;;:::o;5639:329::-;5698:6;5747:2;5735:9;5726:7;5722:23;5718:32;5715:119;;;5753:79;;:::i;:::-;5715:119;5873:1;5898:53;5943:7;5934:6;5923:9;5919:22;5898:53;:::i;:::-;5888:63;;5844:117;5639:329;;;;:::o;5974:619::-;6051:6;6059;6067;6116:2;6104:9;6095:7;6091:23;6087:32;6084:119;;;6122:79;;:::i;:::-;6084:119;6242:1;6267:53;6312:7;6303:6;6292:9;6288:22;6267:53;:::i;:::-;6257:63;;6213:117;6369:2;6395:53;6440:7;6431:6;6420:9;6416:22;6395:53;:::i;:::-;6385:63;;6340:118;6497:2;6523:53;6568:7;6559:6;6548:9;6544:22;6523:53;:::i;:::-;6513:63;;6468:118;5974:619;;;;;:::o;6599:118::-;6686:24;6704:5;6686:24;:::i;:::-;6681:3;6674:37;6599:118;;:::o;6723:222::-;6816:4;6854:2;6843:9;6839:18;6831:26;;6867:71;6935:1;6924:9;6920:17;6911:6;6867:71;:::i;:::-;6723:222;;;;:::o;6951:86::-;6986:7;7026:4;7019:5;7015:16;7004:27;;6951:86;;;:::o;7043:112::-;7126:22;7142:5;7126:22;:::i;:::-;7121:3;7114:35;7043:112;;:::o;7161:214::-;7250:4;7288:2;7277:9;7273:18;7265:26;;7301:67;7365:1;7354:9;7350:17;7341:6;7301:67;:::i;:::-;7161:214;;;;:::o;7381:116::-;7451:21;7466:5;7451:21;:::i;:::-;7444:5;7441:32;7431:60;;7487:1;7484;7477:12;7431:60;7381:116;:::o;7503:133::-;7546:5;7584:6;7571:20;7562:29;;7600:30;7624:5;7600:30;:::i;:::-;7503:133;;;;:::o;7642:613::-;7716:6;7724;7732;7781:2;7769:9;7760:7;7756:23;7752:32;7749:119;;;7787:79;;:::i;:::-;7749:119;7907:1;7932:53;7977:7;7968:6;7957:9;7953:22;7932:53;:::i;:::-;7922:63;;7878:117;8034:2;8060:53;8105:7;8096:6;8085:9;8081:22;8060:53;:::i;:::-;8050:63;;8005:118;8162:2;8188:50;8230:7;8221:6;8210:9;8206:22;8188:50;:::i;:::-;8178:60;;8133:115;7642:613;;;;;:::o;8261:468::-;8326:6;8334;8383:2;8371:9;8362:7;8358:23;8354:32;8351:119;;;8389:79;;:::i;:::-;8351:119;8509:1;8534:53;8579:7;8570:6;8559:9;8555:22;8534:53;:::i;:::-;8524:63;;8480:117;8636:2;8662:50;8704:7;8695:6;8684:9;8680:22;8662:50;:::i;:::-;8652:60;;8607:115;8261:468;;;;;:::o;8735:619::-;8812:6;8820;8828;8877:2;8865:9;8856:7;8852:23;8848:32;8845:119;;;8883:79;;:::i;:::-;8845:119;9003:1;9028:53;9073:7;9064:6;9053:9;9049:22;9028:53;:::i;:::-;9018:63;;8974:117;9130:2;9156:53;9201:7;9192:6;9181:9;9177:22;9156:53;:::i;:::-;9146:63;;9101:118;9258:2;9284:53;9329:7;9320:6;9309:9;9305:22;9284:53;:::i;:::-;9274:63;;9229:118;8735:619;;;;;:::o;9360:323::-;9416:6;9465:2;9453:9;9444:7;9440:23;9436:32;9433:119;;;9471:79;;:::i;:::-;9433:119;9591:1;9616:50;9658:7;9649:6;9638:9;9634:22;9616:50;:::i;:::-;9606:60;;9562:114;9360:323;;;;:::o;9689:474::-;9757:6;9765;9814:2;9802:9;9793:7;9789:23;9785:32;9782:119;;;9820:79;;:::i;:::-;9782:119;9940:1;9965:53;10010:7;10001:6;9990:9;9986:22;9965:53;:::i;:::-;9955:63;;9911:117;10067:2;10093:53;10138:7;10129:6;10118:9;10114:22;10093:53;:::i;:::-;10083:63;;10038:118;9689:474;;;;;:::o;10169:180::-;10217:77;10214:1;10207:88;10314:4;10311:1;10304:15;10338:4;10335:1;10328:15;10355:320;10399:6;10436:1;10430:4;10426:12;10416:22;;10483:1;10477:4;10473:12;10504:18;10494:81;;10560:4;10552:6;10548:17;10538:27;;10494:81;10622:2;10614:6;10611:14;10591:18;10588:38;10585:84;;;10641:18;;:::i;:::-;10585:84;10406:269;10355:320;;;:::o;10681:180::-;10729:77;10726:1;10719:88;10826:4;10823:1;10816:15;10850:4;10847:1;10840:15;10867:305;10907:3;10926:20;10944:1;10926:20;:::i;:::-;10921:25;;10960:20;10978:1;10960:20;:::i;:::-;10955:25;;11114:1;11046:66;11042:74;11039:1;11036:81;11033:107;;;11120:18;;:::i;:::-;11033:107;11164:1;11161;11157:9;11150:16;;10867:305;;;;:::o;11178:179::-;11318:31;11314:1;11306:6;11302:14;11295:55;11178:179;:::o;11363:366::-;11505:3;11526:67;11590:2;11585:3;11526:67;:::i;:::-;11519:74;;11602:93;11691:3;11602:93;:::i;:::-;11720:2;11715:3;11711:12;11704:19;;11363:366;;;:::o;11735:419::-;11901:4;11939:2;11928:9;11924:18;11916:26;;11988:9;11982:4;11978:20;11974:1;11963:9;11959:17;11952:47;12016:131;12142:4;12016:131;:::i;:::-;12008:139;;11735:419;;;:::o;12160:179::-;12300:31;12296:1;12288:6;12284:14;12277:55;12160:179;:::o;12345:366::-;12487:3;12508:67;12572:2;12567:3;12508:67;:::i;:::-;12501:74;;12584:93;12673:3;12584:93;:::i;:::-;12702:2;12697:3;12693:12;12686:19;;12345:366;;;:::o;12717:419::-;12883:4;12921:2;12910:9;12906:18;12898:26;;12970:9;12964:4;12960:20;12956:1;12945:9;12941:17;12934:47;12998:131;13124:4;12998:131;:::i;:::-;12990:139;;12717:419;;;:::o;13142:348::-;13182:7;13205:20;13223:1;13205:20;:::i;:::-;13200:25;;13239:20;13257:1;13239:20;:::i;:::-;13234:25;;13427:1;13359:66;13355:74;13352:1;13349:81;13344:1;13337:9;13330:17;13326:105;13323:131;;;13434:18;;:::i;:::-;13323:131;13482:1;13479;13475:9;13464:20;;13142:348;;;;:::o;13496:180::-;13544:77;13541:1;13534:88;13641:4;13638:1;13631:15;13665:4;13662:1;13655:15;13682:185;13722:1;13739:20;13757:1;13739:20;:::i;:::-;13734:25;;13773:20;13791:1;13773:20;:::i;:::-;13768:25;;13812:1;13802:35;;13817:18;;:::i;:::-;13802:35;13859:1;13856;13852:9;13847:14;;13682:185;;;;:::o;13873:234::-;14013:34;14009:1;14001:6;13997:14;13990:58;14082:17;14077:2;14069:6;14065:15;14058:42;13873:234;:::o;14113:366::-;14255:3;14276:67;14340:2;14335:3;14276:67;:::i;:::-;14269:74;;14352:93;14441:3;14352:93;:::i;:::-;14470:2;14465:3;14461:12;14454:19;;14113:366;;;:::o;14485:419::-;14651:4;14689:2;14678:9;14674:18;14666:26;;14738:9;14732:4;14728:20;14724:1;14713:9;14709:17;14702:47;14766:131;14892:4;14766:131;:::i;:::-;14758:139;;14485:419;;;:::o;14910:238::-;15050:34;15046:1;15038:6;15034:14;15027:58;15119:21;15114:2;15106:6;15102:15;15095:46;14910:238;:::o;15154:366::-;15296:3;15317:67;15381:2;15376:3;15317:67;:::i;:::-;15310:74;;15393:93;15482:3;15393:93;:::i;:::-;15511:2;15506:3;15502:12;15495:19;;15154:366;;;:::o;15526:419::-;15692:4;15730:2;15719:9;15715:18;15707:26;;15779:9;15773:4;15769:20;15765:1;15754:9;15750:17;15743:47;15807:131;15933:4;15807:131;:::i;:::-;15799:139;;15526:419;;;:::o;15951:235::-;16091:34;16087:1;16079:6;16075:14;16068:58;16160:18;16155:2;16147:6;16143:15;16136:43;15951:235;:::o;16192:366::-;16334:3;16355:67;16419:2;16414:3;16355:67;:::i;:::-;16348:74;;16431:93;16520:3;16431:93;:::i;:::-;16549:2;16544:3;16540:12;16533:19;;16192:366;;;:::o;16564:419::-;16730:4;16768:2;16757:9;16753:18;16745:26;;16817:9;16811:4;16807:20;16803:1;16792:9;16788:17;16781:47;16845:131;16971:4;16845:131;:::i;:::-;16837:139;;16564:419;;;:::o;16989:223::-;17129:34;17125:1;17117:6;17113:14;17106:58;17198:6;17193:2;17185:6;17181:15;17174:31;16989:223;:::o;17218:366::-;17360:3;17381:67;17445:2;17440:3;17381:67;:::i;:::-;17374:74;;17457:93;17546:3;17457:93;:::i;:::-;17575:2;17570:3;17566:12;17559:19;;17218:366;;;:::o;17590:419::-;17756:4;17794:2;17783:9;17779:18;17771:26;;17843:9;17837:4;17833:20;17829:1;17818:9;17814:17;17807:47;17871:131;17997:4;17871:131;:::i;:::-;17863:139;;17590:419;;;:::o;18015:244::-;18155:34;18151:1;18143:6;18139:14;18132:58;18224:27;18219:2;18211:6;18207:15;18200:52;18015:244;:::o;18265:366::-;18407:3;18428:67;18492:2;18487:3;18428:67;:::i;:::-;18421:74;;18504:93;18593:3;18504:93;:::i;:::-;18622:2;18617:3;18613:12;18606:19;;18265:366;;;:::o;18637:419::-;18803:4;18841:2;18830:9;18826:18;18818:26;;18890:9;18884:4;18880:20;18876:1;18865:9;18861:17;18854:47;18918:131;19044:4;18918:131;:::i;:::-;18910:139;;18637:419;;;:::o;19062:224::-;19202:34;19198:1;19190:6;19186:14;19179:58;19271:7;19266:2;19258:6;19254:15;19247:32;19062:224;:::o;19292:366::-;19434:3;19455:67;19519:2;19514:3;19455:67;:::i;:::-;19448:74;;19531:93;19620:3;19531:93;:::i;:::-;19649:2;19644:3;19640:12;19633:19;;19292:366;;;:::o;19664:419::-;19830:4;19868:2;19857:9;19853:18;19845:26;;19917:9;19911:4;19907:20;19903:1;19892:9;19888:17;19881:47;19945:131;20071:4;19945:131;:::i;:::-;19937:139;;19664:419;;;:::o;20089:240::-;20229:34;20225:1;20217:6;20213:14;20206:58;20298:23;20293:2;20285:6;20281:15;20274:48;20089:240;:::o;20335:366::-;20477:3;20498:67;20562:2;20557:3;20498:67;:::i;:::-;20491:74;;20574:93;20663:3;20574:93;:::i;:::-;20692:2;20687:3;20683:12;20676:19;;20335:366;;;:::o;20707:419::-;20873:4;20911:2;20900:9;20896:18;20888:26;;20960:9;20954:4;20950:20;20946:1;20935:9;20931:17;20924:47;20988:131;21114:4;20988:131;:::i;:::-;20980:139;;20707:419;;;:::o;21132:237::-;21272:34;21268:1;21260:6;21256:14;21249:58;21341:20;21336:2;21328:6;21324:15;21317:45;21132:237;:::o;21375:366::-;21517:3;21538:67;21602:2;21597:3;21538:67;:::i;:::-;21531:74;;21614:93;21703:3;21614:93;:::i;:::-;21732:2;21727:3;21723:12;21716:19;;21375:366;;;:::o;21747:419::-;21913:4;21951:2;21940:9;21936:18;21928:26;;22000:9;21994:4;21990:20;21986:1;21975:9;21971:17;21964:47;22028:131;22154:4;22028:131;:::i;:::-;22020:139;;21747:419;;;:::o;22172:225::-;22312:34;22308:1;22300:6;22296:14;22289:58;22381:8;22376:2;22368:6;22364:15;22357:33;22172:225;:::o;22403:366::-;22545:3;22566:67;22630:2;22625:3;22566:67;:::i;:::-;22559:74;;22642:93;22731:3;22642:93;:::i;:::-;22760:2;22755:3;22751:12;22744:19;;22403:366;;;:::o;22775:419::-;22941:4;22979:2;22968:9;22964:18;22956:26;;23028:9;23022:4;23018:20;23014:1;23003:9;22999:17;22992:47;23056:131;23182:4;23056:131;:::i;:::-;23048:139;;22775:419;;;:::o;23200:182::-;23340:34;23336:1;23328:6;23324:14;23317:58;23200:182;:::o;23388:366::-;23530:3;23551:67;23615:2;23610:3;23551:67;:::i;:::-;23544:74;;23627:93;23716:3;23627:93;:::i;:::-;23745:2;23740:3;23736:12;23729:19;;23388:366;;;:::o;23760:419::-;23926:4;23964:2;23953:9;23949:18;23941:26;;24013:9;24007:4;24003:20;23999:1;23988:9;23984:17;23977:47;24041:131;24167:4;24041:131;:::i;:::-;24033:139;;23760:419;;;:::o;24185:229::-;24325:34;24321:1;24313:6;24309:14;24302:58;24394:12;24389:2;24381:6;24377:15;24370:37;24185:229;:::o;24420:366::-;24562:3;24583:67;24647:2;24642:3;24583:67;:::i;:::-;24576:74;;24659:93;24748:3;24659:93;:::i;:::-;24777:2;24772:3;24768:12;24761:19;;24420:366;;;:::o;24792:419::-;24958:4;24996:2;24985:9;24981:18;24973:26;;25045:9;25039:4;25035:20;25031:1;25020:9;25016:17;25009:47;25073:131;25199:4;25073:131;:::i;:::-;25065:139;;24792:419;;;:::o;25217:143::-;25274:5;25305:6;25299:13;25290:22;;25321:33;25348:5;25321:33;:::i;:::-;25217:143;;;;:::o;25366:351::-;25436:6;25485:2;25473:9;25464:7;25460:23;25456:32;25453:119;;;25491:79;;:::i;:::-;25453:119;25611:1;25636:64;25692:7;25683:6;25672:9;25668:22;25636:64;:::i;:::-;25626:74;;25582:128;25366:351;;;;:::o;25723:223::-;25863:34;25859:1;25851:6;25847:14;25840:58;25932:6;25927:2;25919:6;25915:15;25908:31;25723:223;:::o;25952:366::-;26094:3;26115:67;26179:2;26174:3;26115:67;:::i;:::-;26108:74;;26191:93;26280:3;26191:93;:::i;:::-;26309:2;26304:3;26300:12;26293:19;;25952:366;;;:::o;26324:419::-;26490:4;26528:2;26517:9;26513:18;26505:26;;26577:9;26571:4;26567:20;26563:1;26552:9;26548:17;26541:47;26605:131;26731:4;26605:131;:::i;:::-;26597:139;;26324:419;;;:::o;26749:221::-;26889:34;26885:1;26877:6;26873:14;26866:58;26958:4;26953:2;26945:6;26941:15;26934:29;26749:221;:::o;26976:366::-;27118:3;27139:67;27203:2;27198:3;27139:67;:::i;:::-;27132:74;;27215:93;27304:3;27215:93;:::i;:::-;27333:2;27328:3;27324:12;27317:19;;26976:366;;;:::o;27348:419::-;27514:4;27552:2;27541:9;27537:18;27529:26;;27601:9;27595:4;27591:20;27587:1;27576:9;27572:17;27565:47;27629:131;27755:4;27629:131;:::i;:::-;27621:139;;27348:419;;;:::o;27773:182::-;27913:34;27909:1;27901:6;27897:14;27890:58;27773:182;:::o;27961:366::-;28103:3;28124:67;28188:2;28183:3;28124:67;:::i;:::-;28117:74;;28200:93;28289:3;28200:93;:::i;:::-;28318:2;28313:3;28309:12;28302:19;;27961:366;;;:::o;28333:419::-;28499:4;28537:2;28526:9;28522:18;28514:26;;28586:9;28580:4;28576:20;28572:1;28561:9;28557:17;28550:47;28614:131;28740:4;28614:131;:::i;:::-;28606:139;;28333:419;;;:::o;28758:179::-;28898:31;28894:1;28886:6;28882:14;28875:55;28758:179;:::o;28943:366::-;29085:3;29106:67;29170:2;29165:3;29106:67;:::i;:::-;29099:74;;29182:93;29271:3;29182:93;:::i;:::-;29300:2;29295:3;29291:12;29284:19;;28943:366;;;:::o;29315:419::-;29481:4;29519:2;29508:9;29504:18;29496:26;;29568:9;29562:4;29558:20;29554:1;29543:9;29539:17;29532:47;29596:131;29722:4;29596:131;:::i;:::-;29588:139;;29315:419;;;:::o;29740:224::-;29880:34;29876:1;29868:6;29864:14;29857:58;29949:7;29944:2;29936:6;29932:15;29925:32;29740:224;:::o;29970:366::-;30112:3;30133:67;30197:2;30192:3;30133:67;:::i;:::-;30126:74;;30209:93;30298:3;30209:93;:::i;:::-;30327:2;30322:3;30318:12;30311:19;;29970:366;;;:::o;30342:419::-;30508:4;30546:2;30535:9;30531:18;30523:26;;30595:9;30589:4;30585:20;30581:1;30570:9;30566:17;30559:47;30623:131;30749:4;30623:131;:::i;:::-;30615:139;;30342:419;;;:::o;30767:222::-;30907:34;30903:1;30895:6;30891:14;30884:58;30976:5;30971:2;30963:6;30959:15;30952:30;30767:222;:::o;30995:366::-;31137:3;31158:67;31222:2;31217:3;31158:67;:::i;:::-;31151:74;;31234:93;31323:3;31234:93;:::i;:::-;31352:2;31347:3;31343:12;31336:19;;30995:366;;;:::o;31367:419::-;31533:4;31571:2;31560:9;31556:18;31548:26;;31620:9;31614:4;31610:20;31606:1;31595:9;31591:17;31584:47;31648:131;31774:4;31648:131;:::i;:::-;31640:139;;31367:419;;;:::o;31792:161::-;31932:13;31928:1;31920:6;31916:14;31909:37;31792:161;:::o;31959:366::-;32101:3;32122:67;32186:2;32181:3;32122:67;:::i;:::-;32115:74;;32198:93;32287:3;32198:93;:::i;:::-;32316:2;32311:3;32307:12;32300:19;;31959:366;;;:::o;32331:419::-;32497:4;32535:2;32524:9;32520:18;32512:26;;32584:9;32578:4;32574:20;32570:1;32559:9;32555:17;32548:47;32612:131;32738:4;32612:131;:::i;:::-;32604:139;;32331:419;;;:::o;32756:172::-;32896:24;32892:1;32884:6;32880:14;32873:48;32756:172;:::o;32934:366::-;33076:3;33097:67;33161:2;33156:3;33097:67;:::i;:::-;33090:74;;33173:93;33262:3;33173:93;:::i;:::-;33291:2;33286:3;33282:12;33275:19;;32934:366;;;:::o;33306:419::-;33472:4;33510:2;33499:9;33495:18;33487:26;;33559:9;33553:4;33549:20;33545:1;33534:9;33530:17;33523:47;33587:131;33713:4;33587:131;:::i;:::-;33579:139;;33306:419;;;:::o;33731:297::-;33871:34;33867:1;33859:6;33855:14;33848:58;33940:34;33935:2;33927:6;33923:15;33916:59;34009:11;34004:2;33996:6;33992:15;33985:36;33731:297;:::o;34034:366::-;34176:3;34197:67;34261:2;34256:3;34197:67;:::i;:::-;34190:74;;34273:93;34362:3;34273:93;:::i;:::-;34391:2;34386:3;34382:12;34375:19;;34034:366;;;:::o;34406:419::-;34572:4;34610:2;34599:9;34595:18;34587:26;;34659:9;34653:4;34649:20;34645:1;34634:9;34630:17;34623:47;34687:131;34813:4;34687:131;:::i;:::-;34679:139;;34406:419;;;:::o;34831:240::-;34971:34;34967:1;34959:6;34955:14;34948:58;35040:23;35035:2;35027:6;35023:15;35016:48;34831:240;:::o;35077:366::-;35219:3;35240:67;35304:2;35299:3;35240:67;:::i;:::-;35233:74;;35316:93;35405:3;35316:93;:::i;:::-;35434:2;35429:3;35425:12;35418:19;;35077:366;;;:::o;35449:419::-;35615:4;35653:2;35642:9;35638:18;35630:26;;35702:9;35696:4;35692:20;35688:1;35677:9;35673:17;35666:47;35730:131;35856:4;35730:131;:::i;:::-;35722:139;;35449:419;;;:::o;35874:169::-;36014:21;36010:1;36002:6;35998:14;35991:45;35874:169;:::o;36049:366::-;36191:3;36212:67;36276:2;36271:3;36212:67;:::i;:::-;36205:74;;36288:93;36377:3;36288:93;:::i;:::-;36406:2;36401:3;36397:12;36390:19;;36049:366;;;:::o;36421:419::-;36587:4;36625:2;36614:9;36610:18;36602:26;;36674:9;36668:4;36664:20;36660:1;36649:9;36645:17;36638:47;36702:131;36828:4;36702:131;:::i;:::-;36694:139;;36421:419;;;:::o;36846:241::-;36986:34;36982:1;36974:6;36970:14;36963:58;37055:24;37050:2;37042:6;37038:15;37031:49;36846:241;:::o;37093:366::-;37235:3;37256:67;37320:2;37315:3;37256:67;:::i;:::-;37249:74;;37332:93;37421:3;37332:93;:::i;:::-;37450:2;37445:3;37441:12;37434:19;;37093:366;;;:::o;37465:419::-;37631:4;37669:2;37658:9;37654:18;37646:26;;37718:9;37712:4;37708:20;37704:1;37693:9;37689:17;37682:47;37746:131;37872:4;37746:131;:::i;:::-;37738:139;;37465:419;;;:::o;37890:191::-;37930:4;37950:20;37968:1;37950:20;:::i;:::-;37945:25;;37984:20;38002:1;37984:20;:::i;:::-;37979:25;;38023:1;38020;38017:8;38014:34;;;38028:18;;:::i;:::-;38014:34;38073:1;38070;38066:9;38058:17;;37890:191;;;;:::o;38087:225::-;38227:34;38223:1;38215:6;38211:14;38204:58;38296:8;38291:2;38283:6;38279:15;38272:33;38087:225;:::o;38318:366::-;38460:3;38481:67;38545:2;38540:3;38481:67;:::i;:::-;38474:74;;38557:93;38646:3;38557:93;:::i;:::-;38675:2;38670:3;38666:12;38659:19;;38318:366;;;:::o;38690:419::-;38856:4;38894:2;38883:9;38879:18;38871:26;;38943:9;38937:4;38933:20;38929:1;38918:9;38914:17;38907:47;38971:131;39097:4;38971:131;:::i;:::-;38963:139;;38690:419;;;:::o;39115:147::-;39216:11;39253:3;39238:18;;39115:147;;;;:::o;39268:114::-;;:::o;39388:398::-;39547:3;39568:83;39649:1;39644:3;39568:83;:::i;:::-;39561:90;;39660:93;39749:3;39660:93;:::i;:::-;39778:1;39773:3;39769:11;39762:18;;39388:398;;;:::o;39792:379::-;39976:3;39998:147;40141:3;39998:147;:::i;:::-;39991:154;;40162:3;40155:10;;39792:379;;;:::o;40177:442::-;40326:4;40364:2;40353:9;40349:18;40341:26;;40377:71;40445:1;40434:9;40430:17;40421:6;40377:71;:::i;:::-;40458:72;40526:2;40515:9;40511:18;40502:6;40458:72;:::i;:::-;40540;40608:2;40597:9;40593:18;40584:6;40540:72;:::i;:::-;40177:442;;;;;;:::o;40625:180::-;40673:77;40670:1;40663:88;40770:4;40767:1;40760:15;40794:4;40791:1;40784:15;40811:180;40859:77;40856:1;40849:88;40956:4;40953:1;40946:15;40980:4;40977:1;40970:15;40997:143;41054:5;41085:6;41079:13;41070:22;;41101:33;41128:5;41101:33;:::i;:::-;40997:143;;;;:::o;41146:351::-;41216:6;41265:2;41253:9;41244:7;41240:23;41236:32;41233:119;;;41271:79;;:::i;:::-;41233:119;41391:1;41416:64;41472:7;41463:6;41452:9;41448:22;41416:64;:::i;:::-;41406:74;;41362:128;41146:351;;;;:::o;41503:85::-;41548:7;41577:5;41566:16;;41503:85;;;:::o;41594:158::-;41652:9;41685:61;41703:42;41712:32;41738:5;41712:32;:::i;:::-;41703:42;:::i;:::-;41685:61;:::i;:::-;41672:74;;41594:158;;;:::o;41758:147::-;41853:45;41892:5;41853:45;:::i;:::-;41848:3;41841:58;41758:147;;:::o;41911:114::-;41978:6;42012:5;42006:12;41996:22;;41911:114;;;:::o;42031:184::-;42130:11;42164:6;42159:3;42152:19;42204:4;42199:3;42195:14;42180:29;;42031:184;;;;:::o;42221:132::-;42288:4;42311:3;42303:11;;42341:4;42336:3;42332:14;42324:22;;42221:132;;;:::o;42359:108::-;42436:24;42454:5;42436:24;:::i;:::-;42431:3;42424:37;42359:108;;:::o;42473:179::-;42542:10;42563:46;42605:3;42597:6;42563:46;:::i;:::-;42641:4;42636:3;42632:14;42618:28;;42473:179;;;;:::o;42658:113::-;42728:4;42760;42755:3;42751:14;42743:22;;42658:113;;;:::o;42807:732::-;42926:3;42955:54;43003:5;42955:54;:::i;:::-;43025:86;43104:6;43099:3;43025:86;:::i;:::-;43018:93;;43135:56;43185:5;43135:56;:::i;:::-;43214:7;43245:1;43230:284;43255:6;43252:1;43249:13;43230:284;;;43331:6;43325:13;43358:63;43417:3;43402:13;43358:63;:::i;:::-;43351:70;;43444:60;43497:6;43444:60;:::i;:::-;43434:70;;43290:224;43277:1;43274;43270:9;43265:14;;43230:284;;;43234:14;43530:3;43523:10;;42931:608;;;42807:732;;;;:::o;43545:831::-;43808:4;43846:3;43835:9;43831:19;43823:27;;43860:71;43928:1;43917:9;43913:17;43904:6;43860:71;:::i;:::-;43941:80;44017:2;44006:9;44002:18;43993:6;43941:80;:::i;:::-;44068:9;44062:4;44058:20;44053:2;44042:9;44038:18;44031:48;44096:108;44199:4;44190:6;44096:108;:::i;:::-;44088:116;;44214:72;44282:2;44271:9;44267:18;44258:6;44214:72;:::i;:::-;44296:73;44364:3;44353:9;44349:19;44340:6;44296:73;:::i;:::-;43545:831;;;;;;;;:::o;44382:807::-;44631:4;44669:3;44658:9;44654:19;44646:27;;44683:71;44751:1;44740:9;44736:17;44727:6;44683:71;:::i;:::-;44764:72;44832:2;44821:9;44817:18;44808:6;44764:72;:::i;:::-;44846:80;44922:2;44911:9;44907:18;44898:6;44846:80;:::i;:::-;44936;45012:2;45001:9;44997:18;44988:6;44936:80;:::i;:::-;45026:73;45094:3;45083:9;45079:19;45070:6;45026:73;:::i;:::-;45109;45177:3;45166:9;45162:19;45153:6;45109:73;:::i;:::-;44382:807;;;;;;;;;:::o;45195:663::-;45283:6;45291;45299;45348:2;45336:9;45327:7;45323:23;45319:32;45316:119;;;45354:79;;:::i;:::-;45316:119;45474:1;45499:64;45555:7;45546:6;45535:9;45531:22;45499:64;:::i;:::-;45489:74;;45445:128;45612:2;45638:64;45694:7;45685:6;45674:9;45670:22;45638:64;:::i;:::-;45628:74;;45583:129;45751:2;45777:64;45833:7;45824:6;45813:9;45809:22;45777:64;:::i;:::-;45767:74;;45722:129;45195:663;;;;;:::o

Swarm Source

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