ETH Price: $2,613.30 (+1.08%)
Gas: 1 Gwei

Token

Alpha PEPE (APEPE)
 

Overview

Max Total Supply

1,000,000,000 APEPE

Holders

19

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
13,599,000 APEPE

Value
$0.00
0x65be9f868e132e19143b14684dce17e3e103537e
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:
ALPHAPEPE

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// Twitter: https://twitter.com/alphapepe_eth
// Telegram: https://t.me/alphapepeerc
// Website: https://www.alphapepe.me

// File: contracts/IUniswapV2Router01.sol


pragma solidity >=0.6.2;

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);
}
// File: contracts/IUniswapV2Router02.sol


pragma solidity >=0.6.2;


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;
}
// File: contracts/IUniswapV2Factory.sol


pragma solidity >=0.5.0;

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;
}
// File: @openzeppelin/contracts/utils/math/SafeMath.sol


// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/SafeMath.sol)

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.9.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. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling 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.9.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/interfaces/IERC20.sol


// OpenZeppelin Contracts v4.4.1 (interfaces/IERC20.sol)

pragma solidity ^0.8.0;


// 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.9.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].
 *
 * The default value of {decimals} is 18. To change this, you should override
 * this function so it returns a different value.
 *
 * 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}.
     *
     * 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 default value returned by this function, unless
     * it's overridden.
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual 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 {}
}

// File: contracts/Alpha_pepe.sol


pragma solidity ^0.8.0;








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

    IUniswapV2Router02 public immutable router;
    address public immutable uniswapV2Pair;

    // addresses
    address public devWallet;
    address private marketingWallet;

    // limits
    uint256 private maxBuyAmount;
    uint256 private maxSellAmount;
    uint256 private maxWalletAmount;

    uint256 private thresholdSwapAmount;

    // status flags
    bool private isTrading = false;
    bool public swapEnabled = false;
    bool public isSwapping;

    struct Fees {
        uint8 buyTotalFees;
        uint8 buyMarketingFee;
        uint8 buyDevFee;
        uint8 buyLiquidityFee;

        uint8 sellTotalFees;
        uint8 sellMarketingFee;
        uint8 sellDevFee;
        uint8 sellLiquidityFee;
    }

    Fees public _fees = Fees({
        buyTotalFees: 0,
        buyMarketingFee: 0,
        buyDevFee: 0,
        buyLiquidityFee: 0,

        sellTotalFees: 0,
        sellMarketingFee: 0,
        sellDevFee: 0,
        sellLiquidityFee: 0
    });

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
    uint256 private taxTill;
    // exclude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;
    mapping(address => bool) public _isExcludedMaxWalletAmount;

    // 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 marketPair;
    mapping(address => bool) public _isBlacklisted;

    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived);

    constructor() ERC20("Alpha PEPE", "APEPE") {
        router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        uniswapV2Pair = IUniswapV2Factory(router.factory()).createPair(address(this), router.WETH());

        _isExcludedMaxTransactionAmount[address(router)] = true;
        _isExcludedMaxTransactionAmount[address(uniswapV2Pair)] = true;
        _isExcludedMaxTransactionAmount[owner()] = true;
        _isExcludedMaxTransactionAmount[address(this)] = true;

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(this)] = true;

        _isExcludedMaxWalletAmount[owner()] = true;
        _isExcludedMaxWalletAmount[address(this)] = true;
        _isExcludedMaxWalletAmount[address(uniswapV2Pair)] = true;

        marketPair[address(uniswapV2Pair)] = true;

        approve(address(router), type(uint256).max);
        uint256 totalSupply = 1e9 * 1e18;

        maxBuyAmount = totalSupply * 3 / 100;
        maxSellAmount = totalSupply * 3 / 100;
        maxWalletAmount = totalSupply * 3 / 100;
        thresholdSwapAmount = totalSupply * 1 / 1000; // 0.01% swap wallet

        _fees.buyMarketingFee = 2;
        _fees.buyLiquidityFee = 0;
        _fees.buyDevFee = 1;
        _fees.buyTotalFees = _fees.buyMarketingFee + _fees.buyLiquidityFee + _fees.buyDevFee;

        _fees.sellMarketingFee = 20;
        _fees.sellLiquidityFee = 0;
        _fees.sellDevFee = 0;
        _fees.sellTotalFees = _fees.sellMarketingFee + _fees.sellLiquidityFee + _fees.sellDevFee;

        marketingWallet = address(0x9b01217cED9720a061CeFb5902DCb7268A276eC3);
        devWallet = address(0x36D84067880aE2b9b5468bbB69aA8CCCE4ac74B6);

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    function startTrading() external onlyOwner {
        isTrading = true;
        swapEnabled = true;
        taxTill = block.number + 4;
    }

    function updateThresholdSwapAmount(uint256 newAmount) external onlyOwner returns (bool) {
        thresholdSwapAmount = newAmount;
        return true;
    }

    function updateMaxTxnAmount(uint256 newMaxBuy, uint256 newMaxSell) external onlyOwner {
        require(((totalSupply() * newMaxBuy) / 1000) >= (totalSupply() / 100), "maxBuyAmount must be higher than 1%");
        require(((totalSupply() * newMaxSell) / 1000) >= (totalSupply() / 100), "maxSellAmount must be higher than 1%");
        maxBuyAmount = (totalSupply() * newMaxBuy) / 1000;
        maxSellAmount = (totalSupply() * newMaxSell) / 1000;
    }

    function updateMaxWalletAmount(uint256 newPercentage) external onlyOwner {
        require(((totalSupply() * newPercentage) / 1000) >= (totalSupply() / 100), "Cannot set maxWallet lower than 1%");
        maxWalletAmount = (totalSupply() * newPercentage) / 1000;
    }

    function toggleSwapEnabled(bool enabled) external onlyOwner() {
        swapEnabled = enabled;
    }

    function blacklistAddress(address account, bool value) external onlyOwner {
        _isBlacklisted[account] = value;
    }

    function updateFees(
        uint8 _marketingFeeBuy,
        uint8 _liquidityFeeBuy,
        uint8 _devFeeBuy,
        uint8 _marketingFeeSell,
        uint8 _liquidityFeeSell,
        uint8 _devFeeSell
    ) external onlyOwner {
        _fees.buyMarketingFee = _marketingFeeBuy;
        _fees.buyLiquidityFee = _liquidityFeeBuy;
        _fees.buyDevFee = _devFeeBuy;
        _fees.buyTotalFees = _fees.buyMarketingFee + _fees.buyLiquidityFee + _fees.buyDevFee;

        _fees.sellMarketingFee = _marketingFeeSell;
        _fees.sellLiquidityFee = _liquidityFeeSell;
        _fees.sellDevFee = _devFeeSell;
        _fees.sellTotalFees = _fees.sellMarketingFee + _fees.sellLiquidityFee + _fees.sellDevFee;
        require(_fees.buyTotalFees <= 30, "Must keep fees at 30% or less");
        require(_fees.sellTotalFees <= 30, "Must keep fees at 30% or less");
    }

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

    function excludeFromWalletLimit(address account, bool excluded) public onlyOwner {
        _isExcludedMaxWalletAmount[account] = excluded;
    }

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

    function setMarketPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "Must keep uniswapV2Pair");
        marketPair[pair] = value;
    }

    function setWallets(address _marketingWallet, address _devWallet) external onlyOwner {
        marketingWallet = _marketingWallet;
        devWallet = _devWallet;
    }

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

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal override {
        if (amount == 0) {
            super._transfer(sender, recipient, 0);
            return;
        }

        if (
            sender != owner() &&
            recipient != owner() &&
            !isSwapping
        ) {
            if (!isTrading) {
                require(_isExcludedFromFees[sender] || _isExcludedFromFees[recipient], "Trading is not active.");
            }
            if (marketPair[sender] && !_isExcludedMaxTransactionAmount[recipient]) {
                require(amount <= maxBuyAmount, "buy transfer over max amount");
            } else if (marketPair[recipient] && !_isExcludedMaxTransactionAmount[sender]) {
                require(amount <= maxSellAmount, "Sell transfer over max amount");
            }

            if (!_isExcludedMaxWalletAmount[recipient]) {
                require(amount + balanceOf(recipient) <= maxWalletAmount, "Max wallet exceeded");
            }
            require(!_isBlacklisted[sender] && !_isBlacklisted[recipient], "Blacklisted address");
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= thresholdSwapAmount;

        if (
            canSwap &&
            swapEnabled &&
            !isSwapping &&
            marketPair[recipient] &&
            !_isExcludedFromFees[sender] &&
            !_isExcludedFromFees[recipient]
        ) {
            isSwapping = true;
            swapBack();
            isSwapping = false;
        }

        bool takeFee = !isSwapping;

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

        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            uint256 fees = 0;
            if (block.number < taxTill) {
                fees = amount.mul(99).div(100);
                tokensForMarketing += (fees * 94) / 99;
                tokensForDev += (fees * 5) / 99;
            } else if (marketPair[recipient] && _fees.sellTotalFees > 0) {
                fees = amount.mul(_fees.sellTotalFees).div(100);
                tokensForLiquidity += fees * _fees.sellLiquidityFee / _fees.sellTotalFees;
                tokensForMarketing += fees * _fees.sellMarketingFee / _fees.sellTotalFees;
                tokensForDev += fees * _fees.sellDevFee / _fees.sellTotalFees;
            }
            // on buy
            else if (marketPair[sender] && _fees.buyTotalFees > 0) {
                fees = amount.mul(_fees.buyTotalFees).div(100);
                tokensForLiquidity += fees * _fees.buyLiquidityFee / _fees.buyTotalFees;
                tokensForMarketing += fees * _fees.buyMarketingFee / _fees.buyTotalFees;
                tokensForDev += fees * _fees.buyDevFee / _fees.buyTotalFees;
            }

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

            amount -= fees;
        }

        super._transfer(sender, recipient, amount);
    }

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

        _approve(address(this), address(router), tAmount);

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

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

        // add the liquidity
        router.addLiquidityETH{value: ethAmount}(
            address(this),
            tAmount,
            0,
            0,
            address(this),
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractTokenBalance = balanceOf(address(this));
        uint256 toSwap = tokensForLiquidity + tokensForMarketing + tokensForDev;
        bool success;

        if (contractTokenBalance == 0 || toSwap == 0) {
            return;
        }

        if (contractTokenBalance > thresholdSwapAmount * 20) {
            contractTokenBalance = thresholdSwapAmount * 20;
        }

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

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

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

        uint256 ethForMarketing = newBalance.mul(tokensForMarketing).div(toSwap);
        uint256 ethForDev = newBalance.mul(tokensForDev).div(toSwap);
        uint256 ethForLiquidity = newBalance - (ethForMarketing + ethForDev);

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","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"},{"inputs":[],"name":"_fees","outputs":[{"internalType":"uint8","name":"buyTotalFees","type":"uint8"},{"internalType":"uint8","name":"buyMarketingFee","type":"uint8"},{"internalType":"uint8","name":"buyDevFee","type":"uint8"},{"internalType":"uint8","name":"buyLiquidityFee","type":"uint8"},{"internalType":"uint8","name":"sellTotalFees","type":"uint8"},{"internalType":"uint8","name":"sellMarketingFee","type":"uint8"},{"internalType":"uint8","name":"sellDevFee","type":"uint8"},{"internalType":"uint8","name":"sellLiquidityFee","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxWalletAmount","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"blacklistAddress","outputs":[],"stateMutability":"nonpayable","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":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromWalletLimit","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":"isSwapping","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"marketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setMarketPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_devWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"toggleSwapEnabled","outputs":[],"stateMutability":"nonpayable","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":[{"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":[{"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":[{"internalType":"uint8","name":"_marketingFeeBuy","type":"uint8"},{"internalType":"uint8","name":"_liquidityFeeBuy","type":"uint8"},{"internalType":"uint8","name":"_devFeeBuy","type":"uint8"},{"internalType":"uint8","name":"_marketingFeeSell","type":"uint8"},{"internalType":"uint8","name":"_liquidityFeeSell","type":"uint8"},{"internalType":"uint8","name":"_devFeeSell","type":"uint8"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxBuy","type":"uint256"},{"internalType":"uint256","name":"newMaxSell","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPercentage","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateThresholdSwapAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040525f600c5f6101000a81548160ff0219169083151502179055505f600c60016101000a81548160ff0219169083151502179055506040518061010001604052805f60ff1681526020015f60ff1681526020015f60ff1681526020015f60ff1681526020015f60ff1681526020015f60ff1681526020015f60ff1681526020015f60ff16815250600d5f820151815f015f6101000a81548160ff021916908360ff1602179055506020820151815f0160016101000a81548160ff021916908360ff1602179055506040820151815f0160026101000a81548160ff021916908360ff1602179055506060820151815f0160036101000a81548160ff021916908360ff1602179055506080820151815f0160046101000a81548160ff021916908360ff16021790555060a0820151815f0160056101000a81548160ff021916908360ff16021790555060c0820151815f0160066101000a81548160ff021916908360ff16021790555060e0820151815f0160076101000a81548160ff021916908360ff160217905550505034801562000197575f80fd5b506040518060400160405280600a81526020017f416c7068612050455045000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f4150455045000000000000000000000000000000000000000000000000000000815250816003908162000215919062001187565b50806004908162000227919062001187565b5050506200024a6200023e62000ac560201b60201c565b62000acc60201b60201c565b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060805173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002de573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003049190620012d0565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060805173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200036c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003929190620012d0565b6040518363ffffffff1660e01b8152600401620003b192919062001311565b6020604051808303815f875af1158015620003ce573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003f49190620012d0565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050600160135f60805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160135f60a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160135f620004ea62000b8f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160135f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160125f620005a362000b8f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160125f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160145f6200065c62000b8f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160145f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160145f60a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160155f60a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550620007e26080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62000bb760201b60201c565b505f6b033b2e3c9fd0803ce80000009050606460038262000804919062001369565b620008109190620013e0565b600881905550606460038262000827919062001369565b620008339190620013e0565b60098190555060646003826200084a919062001369565b620008569190620013e0565b600a819055506103e86001826200086e919062001369565b6200087a9190620013e0565b600b819055506002600d5f0160016101000a81548160ff021916908360ff1602179055505f600d5f0160036101000a81548160ff021916908360ff1602179055506001600d5f0160026101000a81548160ff021916908360ff160217905550600d5f0160029054906101000a900460ff16600d5f0160039054906101000a900460ff16600d5f0160019054906101000a900460ff166200091b919062001423565b62000927919062001423565b600d5f015f6101000a81548160ff021916908360ff1602179055506014600d5f0160056101000a81548160ff021916908360ff1602179055505f600d5f0160076101000a81548160ff021916908360ff1602179055505f600d5f0160066101000a81548160ff021916908360ff160217905550600d5f0160069054906101000a900460ff16600d5f0160079054906101000a900460ff16600d5f0160059054906101000a900460ff16620009dc919062001423565b620009e8919062001423565b600d5f0160046101000a81548160ff021916908360ff160217905550739b01217ced9720a061cefb5902dcb7268a276ec360075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507336d84067880ae2b9b5468bbb69aa8ccce4ac74b660065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000abe338262000be960201b60201c565b506200166a565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f8062000bc962000ac560201b60201c565b905062000bde81858562000d4e60201b60201c565b600191505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000c5a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c5190620014bc565b60405180910390fd5b62000c6d5f838362000f1960201b60201c565b8060025f82825462000c809190620014dc565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000d2f919062001527565b60405180910390a362000d4a5f838362000f1e60201b60201c565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000dbf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000db690620015b6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000e30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000e27906200164a565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000f0c919062001527565b60405180910390a3505050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000f9f57607f821691505b60208210810362000fb55762000fb462000f5a565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620010197fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000fdc565b62001025868362000fdc565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6200106f6200106962001063846200103d565b62001046565b6200103d565b9050919050565b5f819050919050565b6200108a836200104f565b620010a2620010998262001076565b84845462000fe8565b825550505050565b5f90565b620010b8620010aa565b620010c58184846200107f565b505050565b5b81811015620010ec57620010e05f82620010ae565b600181019050620010cb565b5050565b601f8211156200113b57620011058162000fbb565b620011108462000fcd565b8101602085101562001120578190505b620011386200112f8562000fcd565b830182620010ca565b50505b505050565b5f82821c905092915050565b5f6200115d5f198460080262001140565b1980831691505092915050565b5f6200117783836200114c565b9150826002028217905092915050565b620011928262000f23565b67ffffffffffffffff811115620011ae57620011ad62000f2d565b5b620011ba825462000f87565b620011c7828285620010f0565b5f60209050601f831160018114620011fd575f8415620011e8578287015190505b620011f485826200116a565b86555062001263565b601f1984166200120d8662000fbb565b5f5b8281101562001236578489015182556001820191506020850194506020810190506200120f565b8683101562001256578489015162001252601f8916826200114c565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6200129a826200126f565b9050919050565b620012ac816200128e565b8114620012b7575f80fd5b50565b5f81519050620012ca81620012a1565b92915050565b5f60208284031215620012e857620012e76200126b565b5b5f620012f784828501620012ba565b91505092915050565b6200130b816200128e565b82525050565b5f604082019050620013265f83018562001300565b62001335602083018462001300565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62001375826200103d565b915062001382836200103d565b925082820262001392816200103d565b91508282048414831517620013ac57620013ab6200133c565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f620013ec826200103d565b9150620013f9836200103d565b9250826200140c576200140b620013b3565b5b828204905092915050565b5f60ff82169050919050565b5f6200142f8262001417565b91506200143c8362001417565b9250828201905060ff8111156200145857620014576200133c565b5b92915050565b5f82825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f620014a4601f836200145e565b9150620014b1826200146e565b602082019050919050565b5f6020820190508181035f830152620014d58162001496565b9050919050565b5f620014e8826200103d565b9150620014f5836200103d565b925082820190508082111562001510576200150f6200133c565b5b92915050565b62001521816200103d565b82525050565b5f6020820190506200153c5f83018462001516565b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6200159e6024836200145e565b9150620015ab8262001542565b604082019050919050565b5f6020820190508181035f830152620015cf8162001590565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f620016326022836200145e565b91506200163f82620015d6565b604082019050919050565b5f6020820190508181035f830152620016638162001624565b9050919050565b60805160a051614252620016b65f395f8181610f4c01526112b801525f81816116e601528181612c2501528181612d0401528181612d2b01528181612dc10152612de801526142525ff3fe60806040526004361061023e575f3560e01c8063715018a61161012d578063c0246668116100aa578063dd62ed3e1161006e578063dd62ed3e1461089a578063e16830a8146108d6578063f2fde38b146108fe578063f5b3c3bf14610926578063f887ea401461096257610245565b8063c0246668146107c9578063c16dd4a4146107f1578063c18bc19514610819578063d212a69a14610841578063d3f6a1571461087257610245565b806396880b17116100f157806396880b17146106c15780639fccce32146106fd578063a457c2d714610727578063a9059cbb14610763578063b88631151461079f57610245565b8063715018a6146106055780637571336a1461061b5780638da5cb5b146106435780638ea5220f1461066d57806395d89b411461069757610245565b8063293230b8116101bb57806349bd5a5e1161017f57806349bd5a5e146104fd5780634fbee19314610527578063555467a1146105635780636ddd17131461059f57806370a08231146105c957610245565b8063293230b814610431578063313ce567146104475780633265e846146104715780633950935114610499578063455a4396146104d557610245565b80631a8145bb116102025780631a8145bb1461033d5780631c6e8a75146103675780631cdd3be31461038f5780631f3fed8f146103cb57806323b872dd146103f557610245565b806306fdde0314610249578063095ea7b31461027357806310d5de53146102af57806311a582c3146102eb57806318160ddd1461031357610245565b3661024557005b5f80fd5b348015610254575f80fd5b5061025d61098c565b60405161026a9190612f1c565b60405180910390f35b34801561027e575f80fd5b5061029960048036038101906102949190612fcd565b610a1c565b6040516102a69190613025565b60405180910390f35b3480156102ba575f80fd5b506102d560048036038101906102d0919061303e565b610a3e565b6040516102e29190613025565b60405180910390f35b3480156102f6575f80fd5b50610311600480360381019061030c9190613069565b610a5b565b005b34801561031e575f80fd5b50610327610b9d565b60405161033491906130b6565b60405180910390f35b348015610348575f80fd5b50610351610ba6565b60405161035e91906130b6565b60405180910390f35b348015610372575f80fd5b5061038d600480360381019061038891906130f9565b610bac565b005b34801561039a575f80fd5b506103b560048036038101906103b0919061303e565b610bd1565b6040516103c29190613025565b60405180910390f35b3480156103d6575f80fd5b506103df610bee565b6040516103ec91906130b6565b60405180910390f35b348015610400575f80fd5b5061041b60048036038101906104169190613124565b610bf4565b6040516104289190613025565b60405180910390f35b34801561043c575f80fd5b50610445610c22565b005b348015610452575f80fd5b5061045b610c74565b604051610468919061318f565b60405180910390f35b34801561047c575f80fd5b50610497600480360381019061049291906131d2565b610c7c565b005b3480156104a4575f80fd5b506104bf60048036038101906104ba9190612fcd565b610eb4565b6040516104cc9190613025565b60405180910390f35b3480156104e0575f80fd5b506104fb60048036038101906104f6919061325b565b610eea565b005b348015610508575f80fd5b50610511610f4a565b60405161051e91906132a8565b60405180910390f35b348015610532575f80fd5b5061054d6004803603810190610548919061303e565b610f6e565b60405161055a9190613025565b60405180910390f35b34801561056e575f80fd5b50610589600480360381019061058491906132c1565b610fc0565b6040516105969190613025565b60405180910390f35b3480156105aa575f80fd5b506105b3610fd9565b6040516105c09190613025565b60405180910390f35b3480156105d4575f80fd5b506105ef60048036038101906105ea919061303e565b610fec565b6040516105fc91906130b6565b60405180910390f35b348015610610575f80fd5b50610619611031565b005b348015610626575f80fd5b50610641600480360381019061063c919061325b565b611044565b005b34801561064e575f80fd5b506106576110a4565b60405161066491906132a8565b60405180910390f35b348015610678575f80fd5b506106816110cc565b60405161068e91906132a8565b60405180910390f35b3480156106a2575f80fd5b506106ab6110f1565b6040516106b89190612f1c565b60405180910390f35b3480156106cc575f80fd5b506106e760048036038101906106e2919061303e565b611181565b6040516106f49190613025565b60405180910390f35b348015610708575f80fd5b5061071161119e565b60405161071e91906130b6565b60405180910390f35b348015610732575f80fd5b5061074d60048036038101906107489190612fcd565b6111a4565b60405161075a9190613025565b60405180910390f35b34801561076e575f80fd5b5061078960048036038101906107849190612fcd565b611219565b6040516107969190613025565b60405180910390f35b3480156107aa575f80fd5b506107b361123b565b6040516107c09190613025565b60405180910390f35b3480156107d4575f80fd5b506107ef60048036038101906107ea919061325b565b61124e565b005b3480156107fc575f80fd5b506108176004803603810190610812919061325b565b6112ae565b005b348015610824575f80fd5b5061083f600480360381019061083a91906132c1565b61139c565b005b34801561084c575f80fd5b50610855611442565b6040516108699897969594939291906132ec565b60405180910390f35b34801561087d575f80fd5b5061089860048036038101906108939190613368565b6114d7565b005b3480156108a5575f80fd5b506108c060048036038101906108bb9190613368565b611563565b6040516108cd91906130b6565b60405180910390f35b3480156108e1575f80fd5b506108fc60048036038101906108f7919061325b565b6115e5565b005b348015610909575f80fd5b50610924600480360381019061091f919061303e565b611645565b005b348015610931575f80fd5b5061094c6004803603810190610947919061303e565b6116c7565b6040516109599190613025565b60405180910390f35b34801561096d575f80fd5b506109766116e4565b6040516109839190613401565b60405180910390f35b60606003805461099b90613447565b80601f01602080910402602001604051908101604052809291908181526020018280546109c790613447565b8015610a125780601f106109e957610100808354040283529160200191610a12565b820191905f5260205f20905b8154815290600101906020018083116109f557829003601f168201915b5050505050905090565b5f80610a26611708565b9050610a3381858561170f565b600191505092915050565b6013602052805f5260405f205f915054906101000a900460ff1681565b610a636118d2565b6064610a6d610b9d565b610a7791906134d1565b6103e883610a83610b9d565b610a8d9190613501565b610a9791906134d1565b1015610ad8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acf906135b2565b60405180910390fd5b6064610ae2610b9d565b610aec91906134d1565b6103e882610af8610b9d565b610b029190613501565b610b0c91906134d1565b1015610b4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4490613640565b60405180910390fd5b6103e882610b59610b9d565b610b639190613501565b610b6d91906134d1565b6008819055506103e881610b7f610b9d565b610b899190613501565b610b9391906134d1565b6009819055505050565b5f600254905090565b600f5481565b610bb46118d2565b80600c60016101000a81548160ff02191690831515021790555050565b6016602052805f5260405f205f915054906101000a900460ff1681565b600e5481565b5f80610bfe611708565b9050610c0b858285611950565b610c168585856119db565b60019150509392505050565b610c2a6118d2565b6001600c5f6101000a81548160ff0219169083151502179055506001600c60016101000a81548160ff021916908315150217905550600443610c6c919061365e565b601181905550565b5f6012905090565b610c846118d2565b85600d5f0160016101000a81548160ff021916908360ff16021790555084600d5f0160036101000a81548160ff021916908360ff16021790555083600d5f0160026101000a81548160ff021916908360ff160217905550600d5f0160029054906101000a900460ff16600d5f0160039054906101000a900460ff16600d5f0160019054906101000a900460ff16610d1b9190613691565b610d259190613691565b600d5f015f6101000a81548160ff021916908360ff16021790555082600d5f0160056101000a81548160ff021916908360ff16021790555081600d5f0160076101000a81548160ff021916908360ff16021790555080600d5f0160066101000a81548160ff021916908360ff160217905550600d5f0160069054906101000a900460ff16600d5f0160079054906101000a900460ff16600d5f0160059054906101000a900460ff16610dd79190613691565b610de19190613691565b600d5f0160046101000a81548160ff021916908360ff160217905550601e600d5f015f9054906101000a900460ff1660ff161115610e54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4b9061370f565b60405180910390fd5b601e600d5f0160049054906101000a900460ff1660ff161115610eac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea39061370f565b60405180910390fd5b505050505050565b5f80610ebe611708565b9050610edf818585610ed08589611563565b610eda919061365e565b61170f565b600191505092915050565b610ef26118d2565b8060165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f60125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f610fc96118d2565b81600b8190555060019050919050565b600c60019054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6110396118d2565b6110425f61253a565b565b61104c6118d2565b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606004805461110090613447565b80601f016020809104026020016040519081016040528092919081815260200182805461112c90613447565b80156111775780601f1061114e57610100808354040283529160200191611177565b820191905f5260205f20905b81548152906001019060200180831161115a57829003601f168201915b5050505050905090565b6014602052805f5260405f205f915054906101000a900460ff1681565b60105481565b5f806111ae611708565b90505f6111bb8286611563565b905083811015611200576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f79061379d565b60405180910390fd5b61120d828686840361170f565b60019250505092915050565b5f80611223611708565b90506112308185856119db565b600191505092915050565b600c60029054906101000a900460ff1681565b6112566118d2565b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6112b66118d2565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611344576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133b90613805565b60405180910390fd5b8060155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6113a46118d2565b60646113ae610b9d565b6113b891906134d1565b6103e8826113c4610b9d565b6113ce9190613501565b6113d891906134d1565b1015611419576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141090613893565b60405180910390fd5b6103e881611425610b9d565b61142f9190613501565b61143991906134d1565b600a8190555050565b600d805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff1690805f0160059054906101000a900460ff1690805f0160069054906101000a900460ff1690805f0160079054906101000a900460ff16905088565b6114df6118d2565b8160075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6115ed6118d2565b8060145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b61164d6118d2565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036116bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b290613921565b60405180910390fd5b6116c48161253a565b50565b6015602052805f5260405f205f915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361177d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611774906139af565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e290613a3d565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516118c591906130b6565b60405180910390a3505050565b6118da611708565b73ffffffffffffffffffffffffffffffffffffffff166118f86110a4565b73ffffffffffffffffffffffffffffffffffffffff161461194e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194590613aa5565b60405180910390fd5b565b5f61195b8484611563565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146119d557818110156119c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119be90613b0d565b60405180910390fd5b6119d4848484840361170f565b5b50505050565b5f81036119f2576119ed83835f6125fd565b612535565b6119fa6110a4565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611a685750611a386110a4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611a815750600c60029054906101000a900460ff16155b15611ece57600c5f9054906101000a900460ff16611b745760125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611b34575060125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b611b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6a90613b75565b60405180910390fd5b5b60155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015611c11575060135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611c6057600854811115611c5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5290613bdd565b60405180910390fd5b611d49565b60155f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015611cfd575060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611d4857600954811115611d47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3e90613c45565b60405180910390fd5b5b5b60145f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611df057600a54611da383610fec565b82611dae919061365e565b1115611def576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de690613cad565b60405180910390fd5b5b60165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015611e8e575060165f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b611ecd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec490613d15565b60405180910390fd5b5b5f611ed830610fec565b90505f600b548210159050808015611efc5750600c60019054906101000a900460ff165b8015611f155750600c60029054906101000a900460ff16155b8015611f67575060155f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b8015611fba575060125f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561200d575060125f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612050576001600c60026101000a81548160ff021916908315150217905550612035612869565b5f600c60026101000a81548160ff0219169083151502179055505b5f600c60029054906101000a900460ff1615905060125f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806120ff575060125f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612108575f90505b8015612526575f6011544310156121a7576121406064612132606388612b3f90919063ffffffff16565b612b5490919063ffffffff16565b90506063605e826121519190613501565b61215b91906134d1565b600e5f82825461216b919061365e565b9250508190555060636005826121819190613501565b61218b91906134d1565b60105f82825461219b919061365e565b92505081905550612502565b60155f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561221057505f600d5f0160049054906101000a900460ff1660ff16115b156123585761224f6064612241600d5f0160049054906101000a900460ff1660ff1688612b3f90919063ffffffff16565b612b5490919063ffffffff16565b9050600d5f0160049054906101000a900460ff1660ff16600d5f0160079054906101000a900460ff1660ff16826122869190613501565b61229091906134d1565b600f5f8282546122a0919061365e565b92505081905550600d5f0160049054906101000a900460ff1660ff16600d5f0160059054906101000a900460ff1660ff16826122dc9190613501565b6122e691906134d1565b600e5f8282546122f6919061365e565b92505081905550600d5f0160049054906101000a900460ff1660ff16600d5f0160069054906101000a900460ff1660ff16826123329190613501565b61233c91906134d1565b60105f82825461234c919061365e565b92505081905550612501565b60155f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156123c057505f600d5f015f9054906101000a900460ff1660ff16115b15612500576123fe60646123f0600d5f015f9054906101000a900460ff1660ff1688612b3f90919063ffffffff16565b612b5490919063ffffffff16565b9050600d5f015f9054906101000a900460ff1660ff16600d5f0160039054906101000a900460ff1660ff16826124349190613501565b61243e91906134d1565b600f5f82825461244e919061365e565b92505081905550600d5f015f9054906101000a900460ff1660ff16600d5f0160019054906101000a900460ff1660ff16826124899190613501565b61249391906134d1565b600e5f8282546124a3919061365e565b92505081905550600d5f015f9054906101000a900460ff1660ff16600d5f0160029054906101000a900460ff1660ff16826124de9190613501565b6124e891906134d1565b60105f8282546124f8919061365e565b925050819055505b5b5b5f811115612516576125158730836125fd565b5b80856125229190613d33565b9450505b6125318686866125fd565b5050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361266b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266290613dd6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036126d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d090613e64565b60405180910390fd5b6126e4838383612b69565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275e90613ef2565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161285091906130b6565b60405180910390a3612863848484612b6e565b50505050565b5f61287330610fec565b90505f601054600e54600f54612889919061365e565b612893919061365e565b90505f808314806128a357505f82145b156128b057505050612b3d565b6014600b546128bf9190613501565b8311156128d8576014600b546128d59190613501565b92505b5f600283600f54866128ea9190613501565b6128f491906134d1565b6128fe91906134d1565b90505f6129148286612b7390919063ffffffff16565b90505f47905061292382612b88565b5f6129378247612b7390919063ffffffff16565b90505f61296187612953600e5485612b3f90919063ffffffff16565b612b5490919063ffffffff16565b90505f61298b8861297d60105486612b3f90919063ffffffff16565b612b5490919063ffffffff16565b90505f818361299a919061365e565b846129a59190613d33565b90505f600f819055505f600e819055505f6010819055505f871180156129ca57505f81115b15612a13576129d98782612dbb565b7f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f83814868682604051612a0a929190613f10565b60405180910390a15b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168347612a579190613d33565b604051612a6390613f64565b5f6040518083038185875af1925050503d805f8114612a9d576040519150601f19603f3d011682016040523d82523d5f602084013e612aa2565b606091505b50508098505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612aed90613f64565b5f6040518083038185875af1925050503d805f8114612b27576040519150601f19603f3d011682016040523d82523d5f602084013e612b2c565b606091505b505080985050505050505050505050505b565b5f8183612b4c9190613501565b905092915050565b5f8183612b6191906134d1565b905092915050565b505050565b505050565b5f8183612b809190613d33565b905092915050565b5f600267ffffffffffffffff811115612ba457612ba3613f78565b5b604051908082528060200260200182016040528015612bd25781602001602082028036833780820191505090505b50905030815f81518110612be957612be8613fa5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c8c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612cb09190613fe6565b81600181518110612cc457612cc3613fa5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612d29307f00000000000000000000000000000000000000000000000000000000000000008461170f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401612d8a959493929190614101565b5f604051808303815f87803b158015612da1575f80fd5b505af1158015612db3573d5f803e3d5ffd5b505050505050565b612de6307f00000000000000000000000000000000000000000000000000000000000000008461170f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8030426040518863ffffffff1660e01b8152600401612e4a96959493929190614159565b60606040518083038185885af1158015612e66573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190612e8b91906141cc565b5050505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612ec9578082015181840152602081019050612eae565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612eee82612e92565b612ef88185612e9c565b9350612f08818560208601612eac565b612f1181612ed4565b840191505092915050565b5f6020820190508181035f830152612f348184612ee4565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612f6982612f40565b9050919050565b612f7981612f5f565b8114612f83575f80fd5b50565b5f81359050612f9481612f70565b92915050565b5f819050919050565b612fac81612f9a565b8114612fb6575f80fd5b50565b5f81359050612fc781612fa3565b92915050565b5f8060408385031215612fe357612fe2612f3c565b5b5f612ff085828601612f86565b925050602061300185828601612fb9565b9150509250929050565b5f8115159050919050565b61301f8161300b565b82525050565b5f6020820190506130385f830184613016565b92915050565b5f6020828403121561305357613052612f3c565b5b5f61306084828501612f86565b91505092915050565b5f806040838503121561307f5761307e612f3c565b5b5f61308c85828601612fb9565b925050602061309d85828601612fb9565b9150509250929050565b6130b081612f9a565b82525050565b5f6020820190506130c95f8301846130a7565b92915050565b6130d88161300b565b81146130e2575f80fd5b50565b5f813590506130f3816130cf565b92915050565b5f6020828403121561310e5761310d612f3c565b5b5f61311b848285016130e5565b91505092915050565b5f805f6060848603121561313b5761313a612f3c565b5b5f61314886828701612f86565b935050602061315986828701612f86565b925050604061316a86828701612fb9565b9150509250925092565b5f60ff82169050919050565b61318981613174565b82525050565b5f6020820190506131a25f830184613180565b92915050565b6131b181613174565b81146131bb575f80fd5b50565b5f813590506131cc816131a8565b92915050565b5f805f805f8060c087890312156131ec576131eb612f3c565b5b5f6131f989828a016131be565b965050602061320a89828a016131be565b955050604061321b89828a016131be565b945050606061322c89828a016131be565b935050608061323d89828a016131be565b92505060a061324e89828a016131be565b9150509295509295509295565b5f806040838503121561327157613270612f3c565b5b5f61327e85828601612f86565b925050602061328f858286016130e5565b9150509250929050565b6132a281612f5f565b82525050565b5f6020820190506132bb5f830184613299565b92915050565b5f602082840312156132d6576132d5612f3c565b5b5f6132e384828501612fb9565b91505092915050565b5f610100820190506133005f83018b613180565b61330d602083018a613180565b61331a6040830189613180565b6133276060830188613180565b6133346080830187613180565b61334160a0830186613180565b61334e60c0830185613180565b61335b60e0830184613180565b9998505050505050505050565b5f806040838503121561337e5761337d612f3c565b5b5f61338b85828601612f86565b925050602061339c85828601612f86565b9150509250929050565b5f819050919050565b5f6133c96133c46133bf84612f40565b6133a6565b612f40565b9050919050565b5f6133da826133af565b9050919050565b5f6133eb826133d0565b9050919050565b6133fb816133e1565b82525050565b5f6020820190506134145f8301846133f2565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061345e57607f821691505b6020821081036134715761347061341a565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6134db82612f9a565b91506134e683612f9a565b9250826134f6576134f5613477565b5b828204905092915050565b5f61350b82612f9a565b915061351683612f9a565b925082820261352481612f9a565b9150828204841483151761353b5761353a6134a4565b5b5092915050565b7f6d6178427579416d6f756e74206d75737420626520686967686572207468616e5f8201527f2031250000000000000000000000000000000000000000000000000000000000602082015250565b5f61359c602383612e9c565b91506135a782613542565b604082019050919050565b5f6020820190508181035f8301526135c981613590565b9050919050565b7f6d617853656c6c416d6f756e74206d75737420626520686967686572207468615f8201527f6e20312500000000000000000000000000000000000000000000000000000000602082015250565b5f61362a602483612e9c565b9150613635826135d0565b604082019050919050565b5f6020820190508181035f8301526136578161361e565b9050919050565b5f61366882612f9a565b915061367383612f9a565b925082820190508082111561368b5761368a6134a4565b5b92915050565b5f61369b82613174565b91506136a683613174565b9250828201905060ff8111156136bf576136be6134a4565b5b92915050565b7f4d757374206b656570206665657320617420333025206f72206c6573730000005f82015250565b5f6136f9601d83612e9c565b9150613704826136c5565b602082019050919050565b5f6020820190508181035f830152613726816136ed565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613787602583612e9c565b91506137928261372d565b604082019050919050565b5f6020820190508181035f8301526137b48161377b565b9050919050565b7f4d757374206b65657020756e69737761705632506169720000000000000000005f82015250565b5f6137ef601783612e9c565b91506137fa826137bb565b602082019050919050565b5f6020820190508181035f83015261381c816137e3565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b5f61387d602283612e9c565b915061388882613823565b604082019050919050565b5f6020820190508181035f8301526138aa81613871565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61390b602683612e9c565b9150613916826138b1565b604082019050919050565b5f6020820190508181035f830152613938816138ff565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613999602483612e9c565b91506139a48261393f565b604082019050919050565b5f6020820190508181035f8301526139c68161398d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613a27602283612e9c565b9150613a32826139cd565b604082019050919050565b5f6020820190508181035f830152613a5481613a1b565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613a8f602083612e9c565b9150613a9a82613a5b565b602082019050919050565b5f6020820190508181035f830152613abc81613a83565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f613af7601d83612e9c565b9150613b0282613ac3565b602082019050919050565b5f6020820190508181035f830152613b2481613aeb565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f613b5f601683612e9c565b9150613b6a82613b2b565b602082019050919050565b5f6020820190508181035f830152613b8c81613b53565b9050919050565b7f627579207472616e73666572206f766572206d617820616d6f756e74000000005f82015250565b5f613bc7601c83612e9c565b9150613bd282613b93565b602082019050919050565b5f6020820190508181035f830152613bf481613bbb565b9050919050565b7f53656c6c207472616e73666572206f766572206d617820616d6f756e740000005f82015250565b5f613c2f601d83612e9c565b9150613c3a82613bfb565b602082019050919050565b5f6020820190508181035f830152613c5c81613c23565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f613c97601383612e9c565b9150613ca282613c63565b602082019050919050565b5f6020820190508181035f830152613cc481613c8b565b9050919050565b7f426c61636b6c69737465642061646472657373000000000000000000000000005f82015250565b5f613cff601383612e9c565b9150613d0a82613ccb565b602082019050919050565b5f6020820190508181035f830152613d2c81613cf3565b9050919050565b5f613d3d82612f9a565b9150613d4883612f9a565b9250828203905081811115613d6057613d5f6134a4565b5b92915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613dc0602583612e9c565b9150613dcb82613d66565b604082019050919050565b5f6020820190508181035f830152613ded81613db4565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613e4e602383612e9c565b9150613e5982613df4565b604082019050919050565b5f6020820190508181035f830152613e7b81613e42565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f613edc602683612e9c565b9150613ee782613e82565b604082019050919050565b5f6020820190508181035f830152613f0981613ed0565b9050919050565b5f604082019050613f235f8301856130a7565b613f3060208301846130a7565b9392505050565b5f81905092915050565b50565b5f613f4f5f83613f37565b9150613f5a82613f41565b5f82019050919050565b5f613f6e82613f44565b9150819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050613fe081612f70565b92915050565b5f60208284031215613ffb57613ffa612f3c565b5b5f61400884828501613fd2565b91505092915050565b5f819050919050565b5f61403461402f61402a84614011565b6133a6565b612f9a565b9050919050565b6140448161401a565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61407c81612f5f565b82525050565b5f61408d8383614073565b60208301905092915050565b5f602082019050919050565b5f6140af8261404a565b6140b98185614054565b93506140c483614064565b805f5b838110156140f45781516140db8882614082565b97506140e683614099565b9250506001810190506140c7565b5085935050505092915050565b5f60a0820190506141145f8301886130a7565b614121602083018761403b565b818103604083015261413381866140a5565b90506141426060830185613299565b61414f60808301846130a7565b9695505050505050565b5f60c08201905061416c5f830189613299565b61417960208301886130a7565b614186604083018761403b565b614193606083018661403b565b6141a06080830185613299565b6141ad60a08301846130a7565b979650505050505050565b5f815190506141c681612fa3565b92915050565b5f805f606084860312156141e3576141e2612f3c565b5b5f6141f0868287016141b8565b9350506020614201868287016141b8565b9250506040614212868287016141b8565b915050925092509256fea26469706673582212209ff4abe6d0c7bf74a2c5ccce108400d084679a449b82829505361f3f759c416e64736f6c63430008140033

Deployed Bytecode

0x60806040526004361061023e575f3560e01c8063715018a61161012d578063c0246668116100aa578063dd62ed3e1161006e578063dd62ed3e1461089a578063e16830a8146108d6578063f2fde38b146108fe578063f5b3c3bf14610926578063f887ea401461096257610245565b8063c0246668146107c9578063c16dd4a4146107f1578063c18bc19514610819578063d212a69a14610841578063d3f6a1571461087257610245565b806396880b17116100f157806396880b17146106c15780639fccce32146106fd578063a457c2d714610727578063a9059cbb14610763578063b88631151461079f57610245565b8063715018a6146106055780637571336a1461061b5780638da5cb5b146106435780638ea5220f1461066d57806395d89b411461069757610245565b8063293230b8116101bb57806349bd5a5e1161017f57806349bd5a5e146104fd5780634fbee19314610527578063555467a1146105635780636ddd17131461059f57806370a08231146105c957610245565b8063293230b814610431578063313ce567146104475780633265e846146104715780633950935114610499578063455a4396146104d557610245565b80631a8145bb116102025780631a8145bb1461033d5780631c6e8a75146103675780631cdd3be31461038f5780631f3fed8f146103cb57806323b872dd146103f557610245565b806306fdde0314610249578063095ea7b31461027357806310d5de53146102af57806311a582c3146102eb57806318160ddd1461031357610245565b3661024557005b5f80fd5b348015610254575f80fd5b5061025d61098c565b60405161026a9190612f1c565b60405180910390f35b34801561027e575f80fd5b5061029960048036038101906102949190612fcd565b610a1c565b6040516102a69190613025565b60405180910390f35b3480156102ba575f80fd5b506102d560048036038101906102d0919061303e565b610a3e565b6040516102e29190613025565b60405180910390f35b3480156102f6575f80fd5b50610311600480360381019061030c9190613069565b610a5b565b005b34801561031e575f80fd5b50610327610b9d565b60405161033491906130b6565b60405180910390f35b348015610348575f80fd5b50610351610ba6565b60405161035e91906130b6565b60405180910390f35b348015610372575f80fd5b5061038d600480360381019061038891906130f9565b610bac565b005b34801561039a575f80fd5b506103b560048036038101906103b0919061303e565b610bd1565b6040516103c29190613025565b60405180910390f35b3480156103d6575f80fd5b506103df610bee565b6040516103ec91906130b6565b60405180910390f35b348015610400575f80fd5b5061041b60048036038101906104169190613124565b610bf4565b6040516104289190613025565b60405180910390f35b34801561043c575f80fd5b50610445610c22565b005b348015610452575f80fd5b5061045b610c74565b604051610468919061318f565b60405180910390f35b34801561047c575f80fd5b50610497600480360381019061049291906131d2565b610c7c565b005b3480156104a4575f80fd5b506104bf60048036038101906104ba9190612fcd565b610eb4565b6040516104cc9190613025565b60405180910390f35b3480156104e0575f80fd5b506104fb60048036038101906104f6919061325b565b610eea565b005b348015610508575f80fd5b50610511610f4a565b60405161051e91906132a8565b60405180910390f35b348015610532575f80fd5b5061054d6004803603810190610548919061303e565b610f6e565b60405161055a9190613025565b60405180910390f35b34801561056e575f80fd5b50610589600480360381019061058491906132c1565b610fc0565b6040516105969190613025565b60405180910390f35b3480156105aa575f80fd5b506105b3610fd9565b6040516105c09190613025565b60405180910390f35b3480156105d4575f80fd5b506105ef60048036038101906105ea919061303e565b610fec565b6040516105fc91906130b6565b60405180910390f35b348015610610575f80fd5b50610619611031565b005b348015610626575f80fd5b50610641600480360381019061063c919061325b565b611044565b005b34801561064e575f80fd5b506106576110a4565b60405161066491906132a8565b60405180910390f35b348015610678575f80fd5b506106816110cc565b60405161068e91906132a8565b60405180910390f35b3480156106a2575f80fd5b506106ab6110f1565b6040516106b89190612f1c565b60405180910390f35b3480156106cc575f80fd5b506106e760048036038101906106e2919061303e565b611181565b6040516106f49190613025565b60405180910390f35b348015610708575f80fd5b5061071161119e565b60405161071e91906130b6565b60405180910390f35b348015610732575f80fd5b5061074d60048036038101906107489190612fcd565b6111a4565b60405161075a9190613025565b60405180910390f35b34801561076e575f80fd5b5061078960048036038101906107849190612fcd565b611219565b6040516107969190613025565b60405180910390f35b3480156107aa575f80fd5b506107b361123b565b6040516107c09190613025565b60405180910390f35b3480156107d4575f80fd5b506107ef60048036038101906107ea919061325b565b61124e565b005b3480156107fc575f80fd5b506108176004803603810190610812919061325b565b6112ae565b005b348015610824575f80fd5b5061083f600480360381019061083a91906132c1565b61139c565b005b34801561084c575f80fd5b50610855611442565b6040516108699897969594939291906132ec565b60405180910390f35b34801561087d575f80fd5b5061089860048036038101906108939190613368565b6114d7565b005b3480156108a5575f80fd5b506108c060048036038101906108bb9190613368565b611563565b6040516108cd91906130b6565b60405180910390f35b3480156108e1575f80fd5b506108fc60048036038101906108f7919061325b565b6115e5565b005b348015610909575f80fd5b50610924600480360381019061091f919061303e565b611645565b005b348015610931575f80fd5b5061094c6004803603810190610947919061303e565b6116c7565b6040516109599190613025565b60405180910390f35b34801561096d575f80fd5b506109766116e4565b6040516109839190613401565b60405180910390f35b60606003805461099b90613447565b80601f01602080910402602001604051908101604052809291908181526020018280546109c790613447565b8015610a125780601f106109e957610100808354040283529160200191610a12565b820191905f5260205f20905b8154815290600101906020018083116109f557829003601f168201915b5050505050905090565b5f80610a26611708565b9050610a3381858561170f565b600191505092915050565b6013602052805f5260405f205f915054906101000a900460ff1681565b610a636118d2565b6064610a6d610b9d565b610a7791906134d1565b6103e883610a83610b9d565b610a8d9190613501565b610a9791906134d1565b1015610ad8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acf906135b2565b60405180910390fd5b6064610ae2610b9d565b610aec91906134d1565b6103e882610af8610b9d565b610b029190613501565b610b0c91906134d1565b1015610b4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4490613640565b60405180910390fd5b6103e882610b59610b9d565b610b639190613501565b610b6d91906134d1565b6008819055506103e881610b7f610b9d565b610b899190613501565b610b9391906134d1565b6009819055505050565b5f600254905090565b600f5481565b610bb46118d2565b80600c60016101000a81548160ff02191690831515021790555050565b6016602052805f5260405f205f915054906101000a900460ff1681565b600e5481565b5f80610bfe611708565b9050610c0b858285611950565b610c168585856119db565b60019150509392505050565b610c2a6118d2565b6001600c5f6101000a81548160ff0219169083151502179055506001600c60016101000a81548160ff021916908315150217905550600443610c6c919061365e565b601181905550565b5f6012905090565b610c846118d2565b85600d5f0160016101000a81548160ff021916908360ff16021790555084600d5f0160036101000a81548160ff021916908360ff16021790555083600d5f0160026101000a81548160ff021916908360ff160217905550600d5f0160029054906101000a900460ff16600d5f0160039054906101000a900460ff16600d5f0160019054906101000a900460ff16610d1b9190613691565b610d259190613691565b600d5f015f6101000a81548160ff021916908360ff16021790555082600d5f0160056101000a81548160ff021916908360ff16021790555081600d5f0160076101000a81548160ff021916908360ff16021790555080600d5f0160066101000a81548160ff021916908360ff160217905550600d5f0160069054906101000a900460ff16600d5f0160079054906101000a900460ff16600d5f0160059054906101000a900460ff16610dd79190613691565b610de19190613691565b600d5f0160046101000a81548160ff021916908360ff160217905550601e600d5f015f9054906101000a900460ff1660ff161115610e54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4b9061370f565b60405180910390fd5b601e600d5f0160049054906101000a900460ff1660ff161115610eac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea39061370f565b60405180910390fd5b505050505050565b5f80610ebe611708565b9050610edf818585610ed08589611563565b610eda919061365e565b61170f565b600191505092915050565b610ef26118d2565b8060165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b7f0000000000000000000000008ae529b5808be7a591b926ffd6da7bd8234bcf5781565b5f60125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f610fc96118d2565b81600b8190555060019050919050565b600c60019054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6110396118d2565b6110425f61253a565b565b61104c6118d2565b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606004805461110090613447565b80601f016020809104026020016040519081016040528092919081815260200182805461112c90613447565b80156111775780601f1061114e57610100808354040283529160200191611177565b820191905f5260205f20905b81548152906001019060200180831161115a57829003601f168201915b5050505050905090565b6014602052805f5260405f205f915054906101000a900460ff1681565b60105481565b5f806111ae611708565b90505f6111bb8286611563565b905083811015611200576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f79061379d565b60405180910390fd5b61120d828686840361170f565b60019250505092915050565b5f80611223611708565b90506112308185856119db565b600191505092915050565b600c60029054906101000a900460ff1681565b6112566118d2565b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6112b66118d2565b7f0000000000000000000000008ae529b5808be7a591b926ffd6da7bd8234bcf5773ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611344576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133b90613805565b60405180910390fd5b8060155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6113a46118d2565b60646113ae610b9d565b6113b891906134d1565b6103e8826113c4610b9d565b6113ce9190613501565b6113d891906134d1565b1015611419576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141090613893565b60405180910390fd5b6103e881611425610b9d565b61142f9190613501565b61143991906134d1565b600a8190555050565b600d805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff1690805f0160029054906101000a900460ff1690805f0160039054906101000a900460ff1690805f0160049054906101000a900460ff1690805f0160059054906101000a900460ff1690805f0160069054906101000a900460ff1690805f0160079054906101000a900460ff16905088565b6114df6118d2565b8160075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6115ed6118d2565b8060145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b61164d6118d2565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036116bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b290613921565b60405180910390fd5b6116c48161253a565b50565b6015602052805f5260405f205f915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361177d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611774906139af565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e290613a3d565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516118c591906130b6565b60405180910390a3505050565b6118da611708565b73ffffffffffffffffffffffffffffffffffffffff166118f86110a4565b73ffffffffffffffffffffffffffffffffffffffff161461194e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194590613aa5565b60405180910390fd5b565b5f61195b8484611563565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146119d557818110156119c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119be90613b0d565b60405180910390fd5b6119d4848484840361170f565b5b50505050565b5f81036119f2576119ed83835f6125fd565b612535565b6119fa6110a4565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611a685750611a386110a4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611a815750600c60029054906101000a900460ff16155b15611ece57600c5f9054906101000a900460ff16611b745760125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611b34575060125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b611b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6a90613b75565b60405180910390fd5b5b60155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015611c11575060135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611c6057600854811115611c5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5290613bdd565b60405180910390fd5b611d49565b60155f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015611cfd575060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611d4857600954811115611d47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3e90613c45565b60405180910390fd5b5b5b60145f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611df057600a54611da383610fec565b82611dae919061365e565b1115611def576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de690613cad565b60405180910390fd5b5b60165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015611e8e575060165f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b611ecd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec490613d15565b60405180910390fd5b5b5f611ed830610fec565b90505f600b548210159050808015611efc5750600c60019054906101000a900460ff165b8015611f155750600c60029054906101000a900460ff16155b8015611f67575060155f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b8015611fba575060125f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561200d575060125f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612050576001600c60026101000a81548160ff021916908315150217905550612035612869565b5f600c60026101000a81548160ff0219169083151502179055505b5f600c60029054906101000a900460ff1615905060125f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806120ff575060125f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612108575f90505b8015612526575f6011544310156121a7576121406064612132606388612b3f90919063ffffffff16565b612b5490919063ffffffff16565b90506063605e826121519190613501565b61215b91906134d1565b600e5f82825461216b919061365e565b9250508190555060636005826121819190613501565b61218b91906134d1565b60105f82825461219b919061365e565b92505081905550612502565b60155f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561221057505f600d5f0160049054906101000a900460ff1660ff16115b156123585761224f6064612241600d5f0160049054906101000a900460ff1660ff1688612b3f90919063ffffffff16565b612b5490919063ffffffff16565b9050600d5f0160049054906101000a900460ff1660ff16600d5f0160079054906101000a900460ff1660ff16826122869190613501565b61229091906134d1565b600f5f8282546122a0919061365e565b92505081905550600d5f0160049054906101000a900460ff1660ff16600d5f0160059054906101000a900460ff1660ff16826122dc9190613501565b6122e691906134d1565b600e5f8282546122f6919061365e565b92505081905550600d5f0160049054906101000a900460ff1660ff16600d5f0160069054906101000a900460ff1660ff16826123329190613501565b61233c91906134d1565b60105f82825461234c919061365e565b92505081905550612501565b60155f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156123c057505f600d5f015f9054906101000a900460ff1660ff16115b15612500576123fe60646123f0600d5f015f9054906101000a900460ff1660ff1688612b3f90919063ffffffff16565b612b5490919063ffffffff16565b9050600d5f015f9054906101000a900460ff1660ff16600d5f0160039054906101000a900460ff1660ff16826124349190613501565b61243e91906134d1565b600f5f82825461244e919061365e565b92505081905550600d5f015f9054906101000a900460ff1660ff16600d5f0160019054906101000a900460ff1660ff16826124899190613501565b61249391906134d1565b600e5f8282546124a3919061365e565b92505081905550600d5f015f9054906101000a900460ff1660ff16600d5f0160029054906101000a900460ff1660ff16826124de9190613501565b6124e891906134d1565b60105f8282546124f8919061365e565b925050819055505b5b5b5f811115612516576125158730836125fd565b5b80856125229190613d33565b9450505b6125318686866125fd565b5050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361266b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266290613dd6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036126d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d090613e64565b60405180910390fd5b6126e4838383612b69565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275e90613ef2565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161285091906130b6565b60405180910390a3612863848484612b6e565b50505050565b5f61287330610fec565b90505f601054600e54600f54612889919061365e565b612893919061365e565b90505f808314806128a357505f82145b156128b057505050612b3d565b6014600b546128bf9190613501565b8311156128d8576014600b546128d59190613501565b92505b5f600283600f54866128ea9190613501565b6128f491906134d1565b6128fe91906134d1565b90505f6129148286612b7390919063ffffffff16565b90505f47905061292382612b88565b5f6129378247612b7390919063ffffffff16565b90505f61296187612953600e5485612b3f90919063ffffffff16565b612b5490919063ffffffff16565b90505f61298b8861297d60105486612b3f90919063ffffffff16565b612b5490919063ffffffff16565b90505f818361299a919061365e565b846129a59190613d33565b90505f600f819055505f600e819055505f6010819055505f871180156129ca57505f81115b15612a13576129d98782612dbb565b7f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f83814868682604051612a0a929190613f10565b60405180910390a15b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168347612a579190613d33565b604051612a6390613f64565b5f6040518083038185875af1925050503d805f8114612a9d576040519150601f19603f3d011682016040523d82523d5f602084013e612aa2565b606091505b50508098505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612aed90613f64565b5f6040518083038185875af1925050503d805f8114612b27576040519150601f19603f3d011682016040523d82523d5f602084013e612b2c565b606091505b505080985050505050505050505050505b565b5f8183612b4c9190613501565b905092915050565b5f8183612b6191906134d1565b905092915050565b505050565b505050565b5f8183612b809190613d33565b905092915050565b5f600267ffffffffffffffff811115612ba457612ba3613f78565b5b604051908082528060200260200182016040528015612bd25781602001602082028036833780820191505090505b50905030815f81518110612be957612be8613fa5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c8c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612cb09190613fe6565b81600181518110612cc457612cc3613fa5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612d29307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461170f565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401612d8a959493929190614101565b5f604051808303815f87803b158015612da1575f80fd5b505af1158015612db3573d5f803e3d5ffd5b505050505050565b612de6307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461170f565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8030426040518863ffffffff1660e01b8152600401612e4a96959493929190614159565b60606040518083038185885af1158015612e66573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190612e8b91906141cc565b5050505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612ec9578082015181840152602081019050612eae565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612eee82612e92565b612ef88185612e9c565b9350612f08818560208601612eac565b612f1181612ed4565b840191505092915050565b5f6020820190508181035f830152612f348184612ee4565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612f6982612f40565b9050919050565b612f7981612f5f565b8114612f83575f80fd5b50565b5f81359050612f9481612f70565b92915050565b5f819050919050565b612fac81612f9a565b8114612fb6575f80fd5b50565b5f81359050612fc781612fa3565b92915050565b5f8060408385031215612fe357612fe2612f3c565b5b5f612ff085828601612f86565b925050602061300185828601612fb9565b9150509250929050565b5f8115159050919050565b61301f8161300b565b82525050565b5f6020820190506130385f830184613016565b92915050565b5f6020828403121561305357613052612f3c565b5b5f61306084828501612f86565b91505092915050565b5f806040838503121561307f5761307e612f3c565b5b5f61308c85828601612fb9565b925050602061309d85828601612fb9565b9150509250929050565b6130b081612f9a565b82525050565b5f6020820190506130c95f8301846130a7565b92915050565b6130d88161300b565b81146130e2575f80fd5b50565b5f813590506130f3816130cf565b92915050565b5f6020828403121561310e5761310d612f3c565b5b5f61311b848285016130e5565b91505092915050565b5f805f6060848603121561313b5761313a612f3c565b5b5f61314886828701612f86565b935050602061315986828701612f86565b925050604061316a86828701612fb9565b9150509250925092565b5f60ff82169050919050565b61318981613174565b82525050565b5f6020820190506131a25f830184613180565b92915050565b6131b181613174565b81146131bb575f80fd5b50565b5f813590506131cc816131a8565b92915050565b5f805f805f8060c087890312156131ec576131eb612f3c565b5b5f6131f989828a016131be565b965050602061320a89828a016131be565b955050604061321b89828a016131be565b945050606061322c89828a016131be565b935050608061323d89828a016131be565b92505060a061324e89828a016131be565b9150509295509295509295565b5f806040838503121561327157613270612f3c565b5b5f61327e85828601612f86565b925050602061328f858286016130e5565b9150509250929050565b6132a281612f5f565b82525050565b5f6020820190506132bb5f830184613299565b92915050565b5f602082840312156132d6576132d5612f3c565b5b5f6132e384828501612fb9565b91505092915050565b5f610100820190506133005f83018b613180565b61330d602083018a613180565b61331a6040830189613180565b6133276060830188613180565b6133346080830187613180565b61334160a0830186613180565b61334e60c0830185613180565b61335b60e0830184613180565b9998505050505050505050565b5f806040838503121561337e5761337d612f3c565b5b5f61338b85828601612f86565b925050602061339c85828601612f86565b9150509250929050565b5f819050919050565b5f6133c96133c46133bf84612f40565b6133a6565b612f40565b9050919050565b5f6133da826133af565b9050919050565b5f6133eb826133d0565b9050919050565b6133fb816133e1565b82525050565b5f6020820190506134145f8301846133f2565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061345e57607f821691505b6020821081036134715761347061341a565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6134db82612f9a565b91506134e683612f9a565b9250826134f6576134f5613477565b5b828204905092915050565b5f61350b82612f9a565b915061351683612f9a565b925082820261352481612f9a565b9150828204841483151761353b5761353a6134a4565b5b5092915050565b7f6d6178427579416d6f756e74206d75737420626520686967686572207468616e5f8201527f2031250000000000000000000000000000000000000000000000000000000000602082015250565b5f61359c602383612e9c565b91506135a782613542565b604082019050919050565b5f6020820190508181035f8301526135c981613590565b9050919050565b7f6d617853656c6c416d6f756e74206d75737420626520686967686572207468615f8201527f6e20312500000000000000000000000000000000000000000000000000000000602082015250565b5f61362a602483612e9c565b9150613635826135d0565b604082019050919050565b5f6020820190508181035f8301526136578161361e565b9050919050565b5f61366882612f9a565b915061367383612f9a565b925082820190508082111561368b5761368a6134a4565b5b92915050565b5f61369b82613174565b91506136a683613174565b9250828201905060ff8111156136bf576136be6134a4565b5b92915050565b7f4d757374206b656570206665657320617420333025206f72206c6573730000005f82015250565b5f6136f9601d83612e9c565b9150613704826136c5565b602082019050919050565b5f6020820190508181035f830152613726816136ed565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613787602583612e9c565b91506137928261372d565b604082019050919050565b5f6020820190508181035f8301526137b48161377b565b9050919050565b7f4d757374206b65657020756e69737761705632506169720000000000000000005f82015250565b5f6137ef601783612e9c565b91506137fa826137bb565b602082019050919050565b5f6020820190508181035f83015261381c816137e3565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b5f61387d602283612e9c565b915061388882613823565b604082019050919050565b5f6020820190508181035f8301526138aa81613871565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61390b602683612e9c565b9150613916826138b1565b604082019050919050565b5f6020820190508181035f830152613938816138ff565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613999602483612e9c565b91506139a48261393f565b604082019050919050565b5f6020820190508181035f8301526139c68161398d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613a27602283612e9c565b9150613a32826139cd565b604082019050919050565b5f6020820190508181035f830152613a5481613a1b565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613a8f602083612e9c565b9150613a9a82613a5b565b602082019050919050565b5f6020820190508181035f830152613abc81613a83565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f613af7601d83612e9c565b9150613b0282613ac3565b602082019050919050565b5f6020820190508181035f830152613b2481613aeb565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f613b5f601683612e9c565b9150613b6a82613b2b565b602082019050919050565b5f6020820190508181035f830152613b8c81613b53565b9050919050565b7f627579207472616e73666572206f766572206d617820616d6f756e74000000005f82015250565b5f613bc7601c83612e9c565b9150613bd282613b93565b602082019050919050565b5f6020820190508181035f830152613bf481613bbb565b9050919050565b7f53656c6c207472616e73666572206f766572206d617820616d6f756e740000005f82015250565b5f613c2f601d83612e9c565b9150613c3a82613bfb565b602082019050919050565b5f6020820190508181035f830152613c5c81613c23565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f613c97601383612e9c565b9150613ca282613c63565b602082019050919050565b5f6020820190508181035f830152613cc481613c8b565b9050919050565b7f426c61636b6c69737465642061646472657373000000000000000000000000005f82015250565b5f613cff601383612e9c565b9150613d0a82613ccb565b602082019050919050565b5f6020820190508181035f830152613d2c81613cf3565b9050919050565b5f613d3d82612f9a565b9150613d4883612f9a565b9250828203905081811115613d6057613d5f6134a4565b5b92915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613dc0602583612e9c565b9150613dcb82613d66565b604082019050919050565b5f6020820190508181035f830152613ded81613db4565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613e4e602383612e9c565b9150613e5982613df4565b604082019050919050565b5f6020820190508181035f830152613e7b81613e42565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f613edc602683612e9c565b9150613ee782613e82565b604082019050919050565b5f6020820190508181035f830152613f0981613ed0565b9050919050565b5f604082019050613f235f8301856130a7565b613f3060208301846130a7565b9392505050565b5f81905092915050565b50565b5f613f4f5f83613f37565b9150613f5a82613f41565b5f82019050919050565b5f613f6e82613f44565b9150819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050613fe081612f70565b92915050565b5f60208284031215613ffb57613ffa612f3c565b5b5f61400884828501613fd2565b91505092915050565b5f819050919050565b5f61403461402f61402a84614011565b6133a6565b612f9a565b9050919050565b6140448161401a565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61407c81612f5f565b82525050565b5f61408d8383614073565b60208301905092915050565b5f602082019050919050565b5f6140af8261404a565b6140b98185614054565b93506140c483614064565b805f5b838110156140f45781516140db8882614082565b97506140e683614099565b9250506001810190506140c7565b5085935050505092915050565b5f60a0820190506141145f8301886130a7565b614121602083018761403b565b818103604083015261413381866140a5565b90506141426060830185613299565b61414f60808301846130a7565b9695505050505050565b5f60c08201905061416c5f830189613299565b61417960208301886130a7565b614186604083018761403b565b614193606083018661403b565b6141a06080830185613299565b6141ad60a08301846130a7565b979650505050505050565b5f815190506141c681612fa3565b92915050565b5f805f606084860312156141e3576141e2612f3c565b5b5f6141f0868287016141b8565b9350506020614201868287016141b8565b9250506040614212868287016141b8565b915050925092509256fea26469706673582212209ff4abe6d0c7bf74a2c5ccce108400d084679a449b82829505361f3f759c416e64736f6c63430008140033

Deployed Bytecode Sourcemap

33335:12635:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22262:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24622:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34686:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37278:458;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23391:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34470:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38023:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35021:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34430:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25403:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36958:144;;;;;;;;;;;;;:::i;:::-;;23233:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38265:882;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26073:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38133:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33463:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39965:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37110:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33827:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23562:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15568:103;;;;;;;;;;;;;:::i;:::-;;39449:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14927:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33528:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22481:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34756:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34510:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26814:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23895:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33865:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39155:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39601:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37744:271;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34168:253;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;39786:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24151:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39295:146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15826:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34972:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33414;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22262:100;22316:13;22349:5;22342:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22262:100;:::o;24622:201::-;24705:4;24722:13;24738:12;:10;:12::i;:::-;24722:28;;24761:32;24770:5;24777:7;24786:6;24761:8;:32::i;:::-;24811:4;24804:11;;;24622:201;;;;:::o;34686:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;37278:458::-;14813:13;:11;:13::i;:::-;37440:3:::1;37424:13;:11;:13::i;:::-;:19;;;;:::i;:::-;37414:4;37401:9;37385:13;:11;:13::i;:::-;:25;;;;:::i;:::-;37384:34;;;;:::i;:::-;37383:61;;37375:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;37561:3;37545:13;:11;:13::i;:::-;:19;;;;:::i;:::-;37535:4;37521:10;37505:13;:11;:13::i;:::-;:26;;;;:::i;:::-;37504:35;;;;:::i;:::-;37503:62;;37495:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;37662:4;37649:9;37633:13;:11;:13::i;:::-;:25;;;;:::i;:::-;37632:34;;;;:::i;:::-;37617:12;:49;;;;37724:4;37710:10;37694:13;:11;:13::i;:::-;:26;;;;:::i;:::-;37693:35;;;;:::i;:::-;37677:13;:51;;;;37278:458:::0;;:::o;23391:108::-;23452:7;23479:12;;23472:19;;23391:108;:::o;34470:33::-;;;;:::o;38023:102::-;14813:13;:11;:13::i;:::-;38110:7:::1;38096:11;;:21;;;;;;;;;;;;;;;;;;38023:102:::0;:::o;35021:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;34430:33::-;;;;:::o;25403:261::-;25500:4;25517:15;25535:12;:10;:12::i;:::-;25517:30;;25558:38;25574:4;25580:7;25589:6;25558:15;:38::i;:::-;25607:27;25617:4;25623:2;25627:6;25607:9;:27::i;:::-;25652:4;25645:11;;;25403:261;;;;;:::o;36958:144::-;14813:13;:11;:13::i;:::-;37024:4:::1;37012:9;;:16;;;;;;;;;;;;;;;;;;37053:4;37039:11;;:18;;;;;;;;;;;;;;;;;;37093:1;37078:12;:16;;;;:::i;:::-;37068:7;:26;;;;36958:144::o:0;23233:93::-;23291:5;23316:2;23309:9;;23233:93;:::o;38265:882::-;14813:13;:11;:13::i;:::-;38535:16:::1;38511:5;:21;;;:40;;;;;;;;;;;;;;;;;;38586:16;38562:5;:21;;;:40;;;;;;;;;;;;;;;;;;38631:10;38613:5;:15;;;:28;;;;;;;;;;;;;;;;;;38721:5;:15;;;;;;;;;;;;38697:5;:21;;;;;;;;;;;;38673:5;:21;;;;;;;;;;;;:45;;;;:::i;:::-;:63;;;;:::i;:::-;38652:5;:18;;;:84;;;;;;;;;;;;;;;;;;38774:17;38749:5;:22;;;:42;;;;;;;;;;;;;;;;;;38827:17;38802:5;:22;;;:42;;;;;;;;;;;;;;;;;;38874:11;38855:5;:16;;;:30;;;;;;;;;;;;;;;;;;38968:5;:16;;;;;;;;;;;;38943:5;:22;;;;;;;;;;;;38918:5;:22;;;;;;;;;;;;:47;;;;:::i;:::-;:66;;;;:::i;:::-;38896:5;:19;;;:88;;;;;;;;;;;;;;;;;;39025:2;39003:5;:18;;;;;;;;;;;;:24;;;;38995:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;39103:2;39080:5;:19;;;;;;;;;;;;:25;;;;39072:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38265:882:::0;;;;;;:::o;26073:238::-;26161:4;26178:13;26194:12;:10;:12::i;:::-;26178:28;;26217:64;26226:5;26233:7;26270:10;26242:25;26252:5;26259:7;26242:9;:25::i;:::-;:38;;;;:::i;:::-;26217:8;:64::i;:::-;26299:4;26292:11;;;26073:238;;;;:::o;38133:124::-;14813:13;:11;:13::i;:::-;38244:5:::1;38218:14;:23;38233:7;38218:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;38133:124:::0;;:::o;33463:38::-;;;:::o;39965:126::-;40031:4;40055:19;:28;40075:7;40055:28;;;;;;;;;;;;;;;;;;;;;;;;;40048:35;;39965:126;;;:::o;37110:160::-;37192:4;14813:13;:11;:13::i;:::-;37231:9:::1;37209:19;:31;;;;37258:4;37251:11;;37110:160:::0;;;:::o;33827:31::-;;;;;;;;;;;;;:::o;23562:127::-;23636:7;23663:9;:18;23673:7;23663:18;;;;;;;;;;;;;;;;23656:25;;23562:127;;;:::o;15568:103::-;14813:13;:11;:13::i;:::-;15633:30:::1;15660:1;15633:18;:30::i;:::-;15568:103::o:0;39449:144::-;14813:13;:11;:13::i;:::-;39581:4:::1;39539:31;:39;39571:6;39539:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;39449:144:::0;;:::o;14927:87::-;14973:7;15000:6;;;;;;;;;;;14993:13;;14927:87;:::o;33528:24::-;;;;;;;;;;;;;:::o;22481:104::-;22537:13;22570:7;22563:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22481:104;:::o;34756:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;34510:27::-;;;;:::o;26814:436::-;26907:4;26924:13;26940:12;:10;:12::i;:::-;26924:28;;26963:24;26990:25;27000:5;27007:7;26990:9;:25::i;:::-;26963:52;;27054:15;27034:16;:35;;27026:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;27147:60;27156:5;27163:7;27191:15;27172:16;:34;27147:8;:60::i;:::-;27238:4;27231:11;;;;26814:436;;;;:::o;23895:193::-;23974:4;23991:13;24007:12;:10;:12::i;:::-;23991:28;;24030;24040:5;24047:2;24051:6;24030:9;:28::i;:::-;24076:4;24069:11;;;23895:193;;;;:::o;33865:22::-;;;;;;;;;;;;;:::o;39155:132::-;14813:13;:11;:13::i;:::-;39271:8:::1;39240:19;:28;39260:7;39240:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;39155:132:::0;;:::o;39601:177::-;14813:13;:11;:13::i;:::-;39694::::1;39686:21;;:4;:21;;::::0;39678:57:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;39765:5;39746:10;:16;39757:4;39746:16;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;39601:177:::0;;:::o;37744:271::-;14813:13;:11;:13::i;:::-;37897:3:::1;37881:13;:11;:13::i;:::-;:19;;;;:::i;:::-;37871:4;37854:13;37838;:11;:13::i;:::-;:29;;;;:::i;:::-;37837:38;;;;:::i;:::-;37836:65;;37828:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;38003:4;37986:13;37970;:11;:13::i;:::-;:29;;;;:::i;:::-;37969:38;;;;:::i;:::-;37951:15;:56;;;;37744:271:::0;:::o;34168:253::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;39786:171::-;14813:13;:11;:13::i;:::-;39900:16:::1;39882:15;;:34;;;;;;;;;;;;;;;;;;39939:10;39927:9;;:22;;;;;;;;;;;;;;;;;;39786:171:::0;;:::o;24151:151::-;24240:7;24267:11;:18;24279:5;24267:18;;;;;;;;;;;;;;;:27;24286:7;24267:27;;;;;;;;;;;;;;;;24260:34;;24151:151;;;;:::o;39295:146::-;14813:13;:11;:13::i;:::-;39425:8:::1;39387:26;:35;39414:7;39387:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;39295:146:::0;;:::o;15826:201::-;14813:13;:11;:13::i;:::-;15935:1:::1;15915:22;;:8;:22;;::::0;15907:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;15991:28;16010:8;15991:18;:28::i;:::-;15826:201:::0;:::o;34972:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;33414:::-;;;:::o;13478:98::-;13531:7;13558:10;13551:17;;13478:98;:::o;30807:346::-;30926:1;30909:19;;:5;:19;;;30901:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31007:1;30988:21;;:7;:21;;;30980:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31091:6;31061:11;:18;31073:5;31061:18;;;;;;;;;;;;;;;:27;31080:7;31061:27;;;;;;;;;;;;;;;:36;;;;31129:7;31113:32;;31122:5;31113:32;;;31138:6;31113:32;;;;;;:::i;:::-;;;;;;;;30807:346;;;:::o;15092:132::-;15167:12;:10;:12::i;:::-;15156:23;;:7;:5;:7::i;:::-;:23;;;15148:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15092:132::o;31444:419::-;31545:24;31572:25;31582:5;31589:7;31572:9;:25::i;:::-;31545:52;;31632:17;31612:16;:37;31608:248;;31694:6;31674:16;:26;;31666:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31778:51;31787:5;31794:7;31822:6;31803:16;:25;31778:8;:51::i;:::-;31608:248;31534:329;31444:419;;;:::o;40099:3284::-;40246:1;40236:6;:11;40232:102;;40264:37;40280:6;40288:9;40299:1;40264:15;:37::i;:::-;40316:7;;40232:102;40374:7;:5;:7::i;:::-;40364:17;;:6;:17;;;;:54;;;;;40411:7;:5;:7::i;:::-;40398:20;;:9;:20;;;;40364:54;:82;;;;;40436:10;;;;;;;;;;;40435:11;40364:82;40346:920;;;40478:9;;;;;;;;;;;40473:147;;40516:19;:27;40536:6;40516:27;;;;;;;;;;;;;;;;;;;;;;;;;:61;;;;40547:19;:30;40567:9;40547:30;;;;;;;;;;;;;;;;;;;;;;;;;40516:61;40508:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;40473:147;40638:10;:18;40649:6;40638:18;;;;;;;;;;;;;;;;;;;;;;;;;:65;;;;;40661:31;:42;40693:9;40661:42;;;;;;;;;;;;;;;;;;;;;;;;;40660:43;40638:65;40634:346;;;40742:12;;40732:6;:22;;40724:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;40634:346;;;40813:10;:21;40824:9;40813:21;;;;;;;;;;;;;;;;;;;;;;;;;:65;;;;;40839:31;:39;40871:6;40839:39;;;;;;;;;;;;;;;;;;;;;;;;;40838:40;40813:65;40809:171;;;40917:13;;40907:6;:23;;40899:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;40809:171;40634:346;41001:26;:37;41028:9;41001:37;;;;;;;;;;;;;;;;;;;;;;;;;40996:159;;41100:15;;41076:20;41086:9;41076;:20::i;:::-;41067:6;:29;;;;:::i;:::-;:48;;41059:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;40996:159;41178:14;:22;41193:6;41178:22;;;;;;;;;;;;;;;;;;;;;;;;;41177:23;:53;;;;;41205:14;:25;41220:9;41205:25;;;;;;;;;;;;;;;;;;;;;;;;;41204:26;41177:53;41169:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;40346:920;41278:28;41309:24;41327:4;41309:9;:24::i;:::-;41278:55;;41346:12;41385:19;;41361:20;:43;;41346:58;;41435:7;:35;;;;;41459:11;;;;;;;;;;;41435:35;:63;;;;;41488:10;;;;;;;;;;;41487:11;41435:63;:101;;;;;41515:10;:21;41526:9;41515:21;;;;;;;;;;;;;;;;;;;;;;;;;41435:101;:146;;;;;41554:19;:27;41574:6;41554:27;;;;;;;;;;;;;;;;;;;;;;;;;41553:28;41435:146;:194;;;;;41599:19;:30;41619:9;41599:30;;;;;;;;;;;;;;;;;;;;;;;;;41598:31;41435:194;41417:326;;;41669:4;41656:10;;:17;;;;;;;;;;;;;;;;;;41688:10;:8;:10::i;:::-;41726:5;41713:10;;:18;;;;;;;;;;;;;;;;;;41417:326;41755:12;41771:10;;;;;;;;;;;41770:11;41755:26;;41883:19;:27;41903:6;41883:27;;;;;;;;;;;;;;;;;;;;;;;;;:61;;;;41914:19;:30;41934:9;41914:30;;;;;;;;;;;;;;;;;;;;;;;;;41883:61;41879:109;;;41971:5;41961:15;;41879:109;42078:7;42074:1247;;;42102:12;42152:7;;42137:12;:22;42133:1037;;;42187:23;42206:3;42187:14;42198:2;42187:6;:10;;:14;;;;:::i;:::-;:18;;:23;;;;:::i;:::-;42180:30;;42265:2;42259;42252:4;:9;;;;:::i;:::-;42251:16;;;;:::i;:::-;42229:18;;:38;;;;;;;:::i;:::-;;;;;;;;42315:2;42310:1;42303:4;:8;;;;:::i;:::-;42302:15;;;;:::i;:::-;42286:12;;:31;;;;;;;:::i;:::-;;;;;;;;42133:1037;;;42343:10;:21;42354:9;42343:21;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;;42390:1;42368:5;:19;;;;;;;;;;;;:23;;;42343:48;42339:831;;;42419:40;42455:3;42419:31;42430:5;:19;;;;;;;;;;;;42419:31;;:6;:10;;:31;;;;:::i;:::-;:35;;:40;;;;:::i;:::-;42412:47;;42532:5;:19;;;;;;;;;;;;42500:51;;42507:5;:22;;;;;;;;;;;;42500:29;;:4;:29;;;;:::i;:::-;:51;;;;:::i;:::-;42478:18;;:73;;;;;;;:::i;:::-;;;;;;;;42624:5;:19;;;;;;;;;;;;42592:51;;42599:5;:22;;;;;;;;;;;;42592:29;;:4;:29;;;;:::i;:::-;:51;;;;:::i;:::-;42570:18;;:73;;;;;;;:::i;:::-;;;;;;;;42704:5;:19;;;;;;;;;;;;42678:45;;42685:5;:16;;;;;;;;;;;;42678:23;;:4;:23;;;;:::i;:::-;:45;;;;:::i;:::-;42662:12;;:61;;;;;;;:::i;:::-;;;;;;;;42339:831;;;42785:10;:18;42796:6;42785:18;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;;;42828:1;42807:5;:18;;;;;;;;;;;;:22;;;42785:44;42781:389;;;42857:39;42892:3;42857:30;42868:5;:18;;;;;;;;;;;;42857:30;;:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;42850:46;;42968:5;:18;;;;;;;;;;;;42937:49;;42944:5;:21;;;;;;;;;;;;42937:28;;:4;:28;;;;:::i;:::-;:49;;;;:::i;:::-;42915:18;;:71;;;;;;;:::i;:::-;;;;;;;;43058:5;:18;;;;;;;;;;;;43027:49;;43034:5;:21;;;;;;;;;;;;43027:28;;:4;:28;;;;:::i;:::-;:49;;;;:::i;:::-;43005:18;;:71;;;;;;;:::i;:::-;;;;;;;;43136:5;:18;;;;;;;;;;;;43111:43;;43118:5;:15;;;;;;;;;;;;43111:22;;:4;:22;;;;:::i;:::-;:43;;;;:::i;:::-;43095:12;;:59;;;;;;;:::i;:::-;;;;;;;;42781:389;42339:831;42133:1037;43197:1;43190:4;:8;43186:93;;;43219:44;43235:6;43251:4;43258;43219:15;:44::i;:::-;43186:93;43305:4;43295:14;;;;;:::i;:::-;;;42087:1234;42074:1247;43333:42;43349:6;43357:9;43368:6;43333:15;:42::i;:::-;40221:3162;;;40099:3284;;;;:::o;16187:191::-;16261:16;16280:6;;;;;;;;;;;16261:25;;16306:8;16297:6;;:17;;;;;;;;;;;;;;;;;;16361:8;16330:40;;16351:8;16330:40;;;;;;;;;;;;16250:128;16187:191;:::o;27720:806::-;27833:1;27817:18;;:4;:18;;;27809:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27910:1;27896:16;;:2;:16;;;27888:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;27965:38;27986:4;27992:2;27996:6;27965:20;:38::i;:::-;28016:19;28038:9;:15;28048:4;28038:15;;;;;;;;;;;;;;;;28016:37;;28087:6;28072:11;:21;;28064:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;28204:6;28190:11;:20;28172:9;:15;28182:4;28172:15;;;;;;;;;;;;;;;:38;;;;28407:6;28390:9;:13;28400:2;28390:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;28457:2;28442:26;;28451:4;28442:26;;;28461:6;28442:26;;;;;;:::i;:::-;;;;;;;;28481:37;28501:4;28507:2;28511:6;28481:19;:37::i;:::-;27798:728;27720:806;;;:::o;44392:1575::-;44431:28;44462:24;44480:4;44462:9;:24::i;:::-;44431:55;;44497:14;44556:12;;44535:18;;44514;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;44497:71;;44579:12;44632:1;44608:20;:25;:40;;;;44647:1;44637:6;:11;44608:40;44604:79;;;44665:7;;;;;44604:79;44744:2;44722:19;;:24;;;;:::i;:::-;44699:20;:47;44695:127;;;44808:2;44786:19;;:24;;;;:::i;:::-;44763:47;;44695:127;44883:23;44962:1;44953:6;44932:18;;44909:20;:41;;;;:::i;:::-;:50;;;;:::i;:::-;:54;;;;:::i;:::-;44883:80;;44974:26;45003:41;45028:15;45003:20;:24;;:41;;;;:::i;:::-;44974:70;;45057:25;45085:21;45057:49;;45119:36;45136:18;45119:16;:36::i;:::-;45168:18;45189:44;45215:17;45189:21;:25;;:44;;;;:::i;:::-;45168:65;;45246:23;45272:46;45311:6;45272:34;45287:18;;45272:10;:14;;:34;;;;:::i;:::-;:38;;:46;;;;:::i;:::-;45246:72;;45329:17;45349:40;45382:6;45349:28;45364:12;;45349:10;:14;;:28;;;;:::i;:::-;:32;;:40;;;;:::i;:::-;45329:60;;45400:23;45458:9;45440:15;:27;;;;:::i;:::-;45426:10;:42;;;;:::i;:::-;45400:68;;45502:1;45481:18;:22;;;;45535:1;45514:18;:22;;;;45562:1;45547:12;:16;;;;45598:1;45580:15;:19;:42;;;;;45621:1;45603:15;:19;45580:42;45576:192;;;45639:46;45652:15;45669;45639:12;:46::i;:::-;45705:51;45720:18;45740:15;45705:51;;;;;;;:::i;:::-;;;;;;;;45576:192;45802:9;;;;;;;;;;;45794:23;;45850:15;45826:21;:39;;;;:::i;:::-;45794:77;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45780:91;;;;;45904:15;;;;;;;;;;;45896:29;;45933:21;45896:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45882:77;;;;;44420:1547;;;;;;;;;;44392:1575;:::o;9474:98::-;9532:7;9563:1;9559;:5;;;;:::i;:::-;9552:12;;9474:98;;;;:::o;9873:::-;9931:7;9962:1;9958;:5;;;;:::i;:::-;9951:12;;9873:98;;;;:::o;32463:91::-;;;;:::o;33158:90::-;;;;:::o;9117:98::-;9175:7;9206:1;9202;:5;;;;:::i;:::-;9195:12;;9117:98;;;;:::o;43391:550::-;43513:21;43551:1;43537:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43513:40;;43582:4;43564;43569:1;43564:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;43608:6;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43598:4;43603:1;43598:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;43634:49;43651:4;43666:6;43675:7;43634:8;:49::i;:::-;43722:6;:57;;;43794:7;43816:1;43860:4;43887;43907:15;43722:211;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43442:499;43391:550;:::o;43949:435::-;44093:49;44110:4;44125:6;44134:7;44093:8;:49::i;:::-;44185:6;:22;;;44215:9;44248:4;44268:7;44290:1;44306;44330:4;44350:15;44185:191;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;43949:435;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:474::-;3849:6;3857;3906:2;3894:9;3885:7;3881:23;3877:32;3874:119;;;3912:79;;:::i;:::-;3874:119;4032:1;4057:53;4102:7;4093:6;4082:9;4078:22;4057:53;:::i;:::-;4047:63;;4003:117;4159:2;4185:53;4230:7;4221:6;4210:9;4206:22;4185:53;:::i;:::-;4175:63;;4130:118;3781:474;;;;;:::o;4261:118::-;4348:24;4366:5;4348:24;:::i;:::-;4343:3;4336:37;4261:118;;:::o;4385:222::-;4478:4;4516:2;4505:9;4501:18;4493:26;;4529:71;4597:1;4586:9;4582:17;4573:6;4529:71;:::i;:::-;4385:222;;;;:::o;4613:116::-;4683:21;4698:5;4683:21;:::i;:::-;4676:5;4673:32;4663:60;;4719:1;4716;4709:12;4663:60;4613:116;:::o;4735:133::-;4778:5;4816:6;4803:20;4794:29;;4832:30;4856:5;4832:30;:::i;:::-;4735:133;;;;:::o;4874:323::-;4930:6;4979:2;4967:9;4958:7;4954:23;4950:32;4947:119;;;4985:79;;:::i;:::-;4947:119;5105:1;5130:50;5172:7;5163:6;5152:9;5148:22;5130:50;:::i;:::-;5120:60;;5076:114;4874:323;;;;:::o;5203:619::-;5280:6;5288;5296;5345:2;5333:9;5324:7;5320:23;5316:32;5313:119;;;5351:79;;:::i;:::-;5313:119;5471:1;5496:53;5541:7;5532:6;5521:9;5517:22;5496:53;:::i;:::-;5486:63;;5442:117;5598:2;5624:53;5669:7;5660:6;5649:9;5645:22;5624:53;:::i;:::-;5614:63;;5569:118;5726:2;5752:53;5797:7;5788:6;5777:9;5773:22;5752:53;:::i;:::-;5742:63;;5697:118;5203:619;;;;;:::o;5828:86::-;5863:7;5903:4;5896:5;5892:16;5881:27;;5828:86;;;:::o;5920:112::-;6003:22;6019:5;6003:22;:::i;:::-;5998:3;5991:35;5920:112;;:::o;6038:214::-;6127:4;6165:2;6154:9;6150:18;6142:26;;6178:67;6242:1;6231:9;6227:17;6218:6;6178:67;:::i;:::-;6038:214;;;;:::o;6258:118::-;6329:22;6345:5;6329:22;:::i;:::-;6322:5;6319:33;6309:61;;6366:1;6363;6356:12;6309:61;6258:118;:::o;6382:135::-;6426:5;6464:6;6451:20;6442:29;;6480:31;6505:5;6480:31;:::i;:::-;6382:135;;;;:::o;6523:1033::-;6615:6;6623;6631;6639;6647;6655;6704:3;6692:9;6683:7;6679:23;6675:33;6672:120;;;6711:79;;:::i;:::-;6672:120;6831:1;6856:51;6899:7;6890:6;6879:9;6875:22;6856:51;:::i;:::-;6846:61;;6802:115;6956:2;6982:51;7025:7;7016:6;7005:9;7001:22;6982:51;:::i;:::-;6972:61;;6927:116;7082:2;7108:51;7151:7;7142:6;7131:9;7127:22;7108:51;:::i;:::-;7098:61;;7053:116;7208:2;7234:51;7277:7;7268:6;7257:9;7253:22;7234:51;:::i;:::-;7224:61;;7179:116;7334:3;7361:51;7404:7;7395:6;7384:9;7380:22;7361:51;:::i;:::-;7351:61;;7305:117;7461:3;7488:51;7531:7;7522:6;7511:9;7507:22;7488:51;:::i;:::-;7478:61;;7432:117;6523:1033;;;;;;;;:::o;7562:468::-;7627:6;7635;7684:2;7672:9;7663:7;7659:23;7655:32;7652:119;;;7690:79;;:::i;:::-;7652:119;7810:1;7835:53;7880:7;7871:6;7860:9;7856:22;7835:53;:::i;:::-;7825:63;;7781:117;7937:2;7963:50;8005:7;7996:6;7985:9;7981:22;7963:50;:::i;:::-;7953:60;;7908:115;7562:468;;;;;:::o;8036:118::-;8123:24;8141:5;8123:24;:::i;:::-;8118:3;8111:37;8036:118;;:::o;8160:222::-;8253:4;8291:2;8280:9;8276:18;8268:26;;8304:71;8372:1;8361:9;8357:17;8348:6;8304:71;:::i;:::-;8160:222;;;;:::o;8388:329::-;8447:6;8496:2;8484:9;8475:7;8471:23;8467:32;8464:119;;;8502:79;;:::i;:::-;8464:119;8622:1;8647:53;8692:7;8683:6;8672:9;8668:22;8647:53;:::i;:::-;8637:63;;8593:117;8388:329;;;;:::o;8723:933::-;8980:4;9018:3;9007:9;9003:19;8995:27;;9032:67;9096:1;9085:9;9081:17;9072:6;9032:67;:::i;:::-;9109:68;9173:2;9162:9;9158:18;9149:6;9109:68;:::i;:::-;9187;9251:2;9240:9;9236:18;9227:6;9187:68;:::i;:::-;9265;9329:2;9318:9;9314:18;9305:6;9265:68;:::i;:::-;9343:69;9407:3;9396:9;9392:19;9383:6;9343:69;:::i;:::-;9422;9486:3;9475:9;9471:19;9462:6;9422:69;:::i;:::-;9501;9565:3;9554:9;9550:19;9541:6;9501:69;:::i;:::-;9580;9644:3;9633:9;9629:19;9620:6;9580:69;:::i;:::-;8723:933;;;;;;;;;;;:::o;9662:474::-;9730:6;9738;9787:2;9775:9;9766:7;9762:23;9758:32;9755:119;;;9793:79;;:::i;:::-;9755:119;9913:1;9938:53;9983:7;9974:6;9963:9;9959:22;9938:53;:::i;:::-;9928:63;;9884:117;10040:2;10066:53;10111:7;10102:6;10091:9;10087:22;10066:53;:::i;:::-;10056:63;;10011:118;9662:474;;;;;:::o;10142:60::-;10170:3;10191:5;10184:12;;10142:60;;;:::o;10208:142::-;10258:9;10291:53;10309:34;10318:24;10336:5;10318:24;:::i;:::-;10309:34;:::i;:::-;10291:53;:::i;:::-;10278:66;;10208:142;;;:::o;10356:126::-;10406:9;10439:37;10470:5;10439:37;:::i;:::-;10426:50;;10356:126;;;:::o;10488:152::-;10564:9;10597:37;10628:5;10597:37;:::i;:::-;10584:50;;10488:152;;;:::o;10646:183::-;10759:63;10816:5;10759:63;:::i;:::-;10754:3;10747:76;10646:183;;:::o;10835:274::-;10954:4;10992:2;10981:9;10977:18;10969:26;;11005:97;11099:1;11088:9;11084:17;11075:6;11005:97;:::i;:::-;10835:274;;;;:::o;11115:180::-;11163:77;11160:1;11153:88;11260:4;11257:1;11250:15;11284:4;11281:1;11274:15;11301:320;11345:6;11382:1;11376:4;11372:12;11362:22;;11429:1;11423:4;11419:12;11450:18;11440:81;;11506:4;11498:6;11494:17;11484:27;;11440:81;11568:2;11560:6;11557:14;11537:18;11534:38;11531:84;;11587:18;;:::i;:::-;11531:84;11352:269;11301:320;;;:::o;11627:180::-;11675:77;11672:1;11665:88;11772:4;11769:1;11762:15;11796:4;11793:1;11786:15;11813:180;11861:77;11858:1;11851:88;11958:4;11955:1;11948:15;11982:4;11979:1;11972:15;11999:185;12039:1;12056:20;12074:1;12056:20;:::i;:::-;12051:25;;12090:20;12108:1;12090:20;:::i;:::-;12085:25;;12129:1;12119:35;;12134:18;;:::i;:::-;12119:35;12176:1;12173;12169:9;12164:14;;11999:185;;;;:::o;12190:410::-;12230:7;12253:20;12271:1;12253:20;:::i;:::-;12248:25;;12287:20;12305:1;12287:20;:::i;:::-;12282:25;;12342:1;12339;12335:9;12364:30;12382:11;12364:30;:::i;:::-;12353:41;;12543:1;12534:7;12530:15;12527:1;12524:22;12504:1;12497:9;12477:83;12454:139;;12573:18;;:::i;:::-;12454:139;12238:362;12190:410;;;;:::o;12606:222::-;12746:34;12742:1;12734:6;12730:14;12723:58;12815:5;12810:2;12802:6;12798:15;12791:30;12606:222;:::o;12834:366::-;12976:3;12997:67;13061:2;13056:3;12997:67;:::i;:::-;12990:74;;13073:93;13162:3;13073:93;:::i;:::-;13191:2;13186:3;13182:12;13175:19;;12834:366;;;:::o;13206:419::-;13372:4;13410:2;13399:9;13395:18;13387:26;;13459:9;13453:4;13449:20;13445:1;13434:9;13430:17;13423:47;13487:131;13613:4;13487:131;:::i;:::-;13479:139;;13206:419;;;:::o;13631:223::-;13771:34;13767:1;13759:6;13755:14;13748:58;13840:6;13835:2;13827:6;13823:15;13816:31;13631:223;:::o;13860:366::-;14002:3;14023:67;14087:2;14082:3;14023:67;:::i;:::-;14016:74;;14099:93;14188:3;14099:93;:::i;:::-;14217:2;14212:3;14208:12;14201:19;;13860:366;;;:::o;14232:419::-;14398:4;14436:2;14425:9;14421:18;14413:26;;14485:9;14479:4;14475:20;14471:1;14460:9;14456:17;14449:47;14513:131;14639:4;14513:131;:::i;:::-;14505:139;;14232:419;;;:::o;14657:191::-;14697:3;14716:20;14734:1;14716:20;:::i;:::-;14711:25;;14750:20;14768:1;14750:20;:::i;:::-;14745:25;;14793:1;14790;14786:9;14779:16;;14814:3;14811:1;14808:10;14805:36;;;14821:18;;:::i;:::-;14805:36;14657:191;;;;:::o;14854:188::-;14892:3;14911:18;14927:1;14911:18;:::i;:::-;14906:23;;14943:18;14959:1;14943:18;:::i;:::-;14938:23;;14984:1;14981;14977:9;14970:16;;15007:4;15002:3;14999:13;14996:39;;;15015:18;;:::i;:::-;14996:39;14854:188;;;;:::o;15048:179::-;15188:31;15184:1;15176:6;15172:14;15165:55;15048:179;:::o;15233:366::-;15375:3;15396:67;15460:2;15455:3;15396:67;:::i;:::-;15389:74;;15472:93;15561:3;15472:93;:::i;:::-;15590:2;15585:3;15581:12;15574:19;;15233:366;;;:::o;15605:419::-;15771:4;15809:2;15798:9;15794:18;15786:26;;15858:9;15852:4;15848:20;15844:1;15833:9;15829:17;15822:47;15886:131;16012:4;15886:131;:::i;:::-;15878:139;;15605:419;;;:::o;16030:224::-;16170:34;16166:1;16158:6;16154:14;16147:58;16239:7;16234:2;16226:6;16222:15;16215:32;16030:224;:::o;16260:366::-;16402:3;16423:67;16487:2;16482:3;16423:67;:::i;:::-;16416:74;;16499:93;16588:3;16499:93;:::i;:::-;16617:2;16612:3;16608:12;16601:19;;16260:366;;;:::o;16632:419::-;16798:4;16836:2;16825:9;16821:18;16813:26;;16885:9;16879:4;16875:20;16871:1;16860:9;16856:17;16849:47;16913:131;17039:4;16913:131;:::i;:::-;16905:139;;16632:419;;;:::o;17057:173::-;17197:25;17193:1;17185:6;17181:14;17174:49;17057:173;:::o;17236:366::-;17378:3;17399:67;17463:2;17458:3;17399:67;:::i;:::-;17392:74;;17475:93;17564:3;17475:93;:::i;:::-;17593:2;17588:3;17584:12;17577:19;;17236:366;;;:::o;17608:419::-;17774:4;17812:2;17801:9;17797:18;17789:26;;17861:9;17855:4;17851:20;17847:1;17836:9;17832:17;17825:47;17889:131;18015:4;17889:131;:::i;:::-;17881:139;;17608:419;;;:::o;18033:221::-;18173:34;18169:1;18161:6;18157:14;18150:58;18242:4;18237:2;18229:6;18225:15;18218:29;18033:221;:::o;18260:366::-;18402:3;18423:67;18487:2;18482:3;18423:67;:::i;:::-;18416:74;;18499:93;18588:3;18499:93;:::i;:::-;18617:2;18612:3;18608:12;18601:19;;18260:366;;;:::o;18632:419::-;18798:4;18836:2;18825:9;18821:18;18813:26;;18885:9;18879:4;18875:20;18871:1;18860:9;18856:17;18849:47;18913:131;19039:4;18913:131;:::i;:::-;18905:139;;18632:419;;;:::o;19057:225::-;19197:34;19193:1;19185:6;19181:14;19174:58;19266:8;19261:2;19253:6;19249:15;19242:33;19057:225;:::o;19288:366::-;19430:3;19451:67;19515:2;19510:3;19451:67;:::i;:::-;19444:74;;19527:93;19616:3;19527:93;:::i;:::-;19645:2;19640:3;19636:12;19629:19;;19288:366;;;:::o;19660:419::-;19826:4;19864:2;19853:9;19849:18;19841:26;;19913:9;19907:4;19903:20;19899:1;19888:9;19884:17;19877:47;19941:131;20067:4;19941:131;:::i;:::-;19933:139;;19660:419;;;:::o;20085:223::-;20225:34;20221:1;20213:6;20209:14;20202:58;20294:6;20289:2;20281:6;20277:15;20270:31;20085:223;:::o;20314:366::-;20456:3;20477:67;20541:2;20536:3;20477:67;:::i;:::-;20470:74;;20553:93;20642:3;20553:93;:::i;:::-;20671:2;20666:3;20662:12;20655:19;;20314:366;;;:::o;20686:419::-;20852:4;20890:2;20879:9;20875:18;20867:26;;20939:9;20933:4;20929:20;20925:1;20914:9;20910:17;20903:47;20967:131;21093:4;20967:131;:::i;:::-;20959:139;;20686:419;;;:::o;21111:221::-;21251:34;21247:1;21239:6;21235:14;21228:58;21320:4;21315:2;21307:6;21303:15;21296:29;21111:221;:::o;21338:366::-;21480:3;21501:67;21565:2;21560:3;21501:67;:::i;:::-;21494:74;;21577:93;21666:3;21577:93;:::i;:::-;21695:2;21690:3;21686:12;21679:19;;21338:366;;;:::o;21710:419::-;21876:4;21914:2;21903:9;21899:18;21891:26;;21963:9;21957:4;21953:20;21949:1;21938:9;21934:17;21927:47;21991:131;22117:4;21991:131;:::i;:::-;21983:139;;21710:419;;;:::o;22135:182::-;22275:34;22271:1;22263:6;22259:14;22252:58;22135:182;:::o;22323:366::-;22465:3;22486:67;22550:2;22545:3;22486:67;:::i;:::-;22479:74;;22562:93;22651:3;22562:93;:::i;:::-;22680:2;22675:3;22671:12;22664:19;;22323:366;;;:::o;22695:419::-;22861:4;22899:2;22888:9;22884:18;22876:26;;22948:9;22942:4;22938:20;22934:1;22923:9;22919:17;22912:47;22976:131;23102:4;22976:131;:::i;:::-;22968:139;;22695:419;;;:::o;23120:179::-;23260:31;23256:1;23248:6;23244:14;23237:55;23120:179;:::o;23305:366::-;23447:3;23468:67;23532:2;23527:3;23468:67;:::i;:::-;23461:74;;23544:93;23633:3;23544:93;:::i;:::-;23662:2;23657:3;23653:12;23646:19;;23305:366;;;:::o;23677:419::-;23843:4;23881:2;23870:9;23866:18;23858:26;;23930:9;23924:4;23920:20;23916:1;23905:9;23901:17;23894:47;23958:131;24084:4;23958:131;:::i;:::-;23950:139;;23677:419;;;:::o;24102:172::-;24242:24;24238:1;24230:6;24226:14;24219:48;24102:172;:::o;24280:366::-;24422:3;24443:67;24507:2;24502:3;24443:67;:::i;:::-;24436:74;;24519:93;24608:3;24519:93;:::i;:::-;24637:2;24632:3;24628:12;24621:19;;24280:366;;;:::o;24652:419::-;24818:4;24856:2;24845:9;24841:18;24833:26;;24905:9;24899:4;24895:20;24891:1;24880:9;24876:17;24869:47;24933:131;25059:4;24933:131;:::i;:::-;24925:139;;24652:419;;;:::o;25077:178::-;25217:30;25213:1;25205:6;25201:14;25194:54;25077:178;:::o;25261:366::-;25403:3;25424:67;25488:2;25483:3;25424:67;:::i;:::-;25417:74;;25500:93;25589:3;25500:93;:::i;:::-;25618:2;25613:3;25609:12;25602:19;;25261:366;;;:::o;25633:419::-;25799:4;25837:2;25826:9;25822:18;25814:26;;25886:9;25880:4;25876:20;25872:1;25861:9;25857:17;25850:47;25914:131;26040:4;25914:131;:::i;:::-;25906:139;;25633:419;;;:::o;26058:179::-;26198:31;26194:1;26186:6;26182:14;26175:55;26058:179;:::o;26243:366::-;26385:3;26406:67;26470:2;26465:3;26406:67;:::i;:::-;26399:74;;26482:93;26571:3;26482:93;:::i;:::-;26600:2;26595:3;26591:12;26584:19;;26243:366;;;:::o;26615:419::-;26781:4;26819:2;26808:9;26804:18;26796:26;;26868:9;26862:4;26858:20;26854:1;26843:9;26839:17;26832:47;26896:131;27022:4;26896:131;:::i;:::-;26888:139;;26615:419;;;:::o;27040:169::-;27180:21;27176:1;27168:6;27164:14;27157:45;27040:169;:::o;27215:366::-;27357:3;27378:67;27442:2;27437:3;27378:67;:::i;:::-;27371:74;;27454:93;27543:3;27454:93;:::i;:::-;27572:2;27567:3;27563:12;27556:19;;27215:366;;;:::o;27587:419::-;27753:4;27791:2;27780:9;27776:18;27768:26;;27840:9;27834:4;27830:20;27826:1;27815:9;27811:17;27804:47;27868:131;27994:4;27868:131;:::i;:::-;27860:139;;27587:419;;;:::o;28012:169::-;28152:21;28148:1;28140:6;28136:14;28129:45;28012:169;:::o;28187:366::-;28329:3;28350:67;28414:2;28409:3;28350:67;:::i;:::-;28343:74;;28426:93;28515:3;28426:93;:::i;:::-;28544:2;28539:3;28535:12;28528:19;;28187:366;;;:::o;28559:419::-;28725:4;28763:2;28752:9;28748:18;28740:26;;28812:9;28806:4;28802:20;28798:1;28787:9;28783:17;28776:47;28840:131;28966:4;28840:131;:::i;:::-;28832:139;;28559:419;;;:::o;28984:194::-;29024:4;29044:20;29062:1;29044:20;:::i;:::-;29039:25;;29078:20;29096:1;29078:20;:::i;:::-;29073:25;;29122:1;29119;29115:9;29107:17;;29146:1;29140:4;29137:11;29134:37;;;29151:18;;:::i;:::-;29134:37;28984:194;;;;:::o;29184:224::-;29324:34;29320:1;29312:6;29308:14;29301:58;29393:7;29388:2;29380:6;29376:15;29369:32;29184:224;:::o;29414:366::-;29556:3;29577:67;29641:2;29636:3;29577:67;:::i;:::-;29570:74;;29653:93;29742:3;29653:93;:::i;:::-;29771:2;29766:3;29762:12;29755:19;;29414:366;;;:::o;29786:419::-;29952:4;29990:2;29979:9;29975:18;29967:26;;30039:9;30033:4;30029:20;30025:1;30014:9;30010:17;30003:47;30067:131;30193:4;30067:131;:::i;:::-;30059:139;;29786:419;;;:::o;30211:222::-;30351:34;30347:1;30339:6;30335:14;30328:58;30420:5;30415:2;30407:6;30403:15;30396:30;30211:222;:::o;30439:366::-;30581:3;30602:67;30666:2;30661:3;30602:67;:::i;:::-;30595:74;;30678:93;30767:3;30678:93;:::i;:::-;30796:2;30791:3;30787:12;30780:19;;30439:366;;;:::o;30811:419::-;30977:4;31015:2;31004:9;31000:18;30992:26;;31064:9;31058:4;31054:20;31050:1;31039:9;31035:17;31028:47;31092:131;31218:4;31092:131;:::i;:::-;31084:139;;30811:419;;;:::o;31236:225::-;31376:34;31372:1;31364:6;31360:14;31353:58;31445:8;31440:2;31432:6;31428:15;31421:33;31236:225;:::o;31467:366::-;31609:3;31630:67;31694:2;31689:3;31630:67;:::i;:::-;31623:74;;31706:93;31795:3;31706:93;:::i;:::-;31824:2;31819:3;31815:12;31808:19;;31467:366;;;:::o;31839:419::-;32005:4;32043:2;32032:9;32028:18;32020:26;;32092:9;32086:4;32082:20;32078:1;32067:9;32063:17;32056:47;32120:131;32246:4;32120:131;:::i;:::-;32112:139;;31839:419;;;:::o;32264:332::-;32385:4;32423:2;32412:9;32408:18;32400:26;;32436:71;32504:1;32493:9;32489:17;32480:6;32436:71;:::i;:::-;32517:72;32585:2;32574:9;32570:18;32561:6;32517:72;:::i;:::-;32264:332;;;;;:::o;32602:147::-;32703:11;32740:3;32725:18;;32602:147;;;;:::o;32755:114::-;;:::o;32875:398::-;33034:3;33055:83;33136:1;33131:3;33055:83;:::i;:::-;33048:90;;33147:93;33236:3;33147:93;:::i;:::-;33265:1;33260:3;33256:11;33249:18;;32875:398;;;:::o;33279:379::-;33463:3;33485:147;33628:3;33485:147;:::i;:::-;33478:154;;33649:3;33642:10;;33279:379;;;:::o;33664:180::-;33712:77;33709:1;33702:88;33809:4;33806:1;33799:15;33833:4;33830:1;33823:15;33850:180;33898:77;33895:1;33888:88;33995:4;33992:1;33985:15;34019:4;34016:1;34009:15;34036:143;34093:5;34124:6;34118:13;34109:22;;34140:33;34167:5;34140:33;:::i;:::-;34036:143;;;;:::o;34185:351::-;34255:6;34304:2;34292:9;34283:7;34279:23;34275:32;34272:119;;;34310:79;;:::i;:::-;34272:119;34430:1;34455:64;34511:7;34502:6;34491:9;34487:22;34455:64;:::i;:::-;34445:74;;34401:128;34185:351;;;;:::o;34542:85::-;34587:7;34616:5;34605:16;;34542:85;;;:::o;34633:158::-;34691:9;34724:61;34742:42;34751:32;34777:5;34751:32;:::i;:::-;34742:42;:::i;:::-;34724:61;:::i;:::-;34711:74;;34633:158;;;:::o;34797:147::-;34892:45;34931:5;34892:45;:::i;:::-;34887:3;34880:58;34797:147;;:::o;34950:114::-;35017:6;35051:5;35045:12;35035:22;;34950:114;;;:::o;35070:184::-;35169:11;35203:6;35198:3;35191:19;35243:4;35238:3;35234:14;35219:29;;35070:184;;;;:::o;35260:132::-;35327:4;35350:3;35342:11;;35380:4;35375:3;35371:14;35363:22;;35260:132;;;:::o;35398:108::-;35475:24;35493:5;35475:24;:::i;:::-;35470:3;35463:37;35398:108;;:::o;35512:179::-;35581:10;35602:46;35644:3;35636:6;35602:46;:::i;:::-;35680:4;35675:3;35671:14;35657:28;;35512:179;;;;:::o;35697:113::-;35767:4;35799;35794:3;35790:14;35782:22;;35697:113;;;:::o;35846:732::-;35965:3;35994:54;36042:5;35994:54;:::i;:::-;36064:86;36143:6;36138:3;36064:86;:::i;:::-;36057:93;;36174:56;36224:5;36174:56;:::i;:::-;36253:7;36284:1;36269:284;36294:6;36291:1;36288:13;36269:284;;;36370:6;36364:13;36397:63;36456:3;36441:13;36397:63;:::i;:::-;36390:70;;36483:60;36536:6;36483:60;:::i;:::-;36473:70;;36329:224;36316:1;36313;36309:9;36304:14;;36269:284;;;36273:14;36569:3;36562:10;;35970:608;;;35846:732;;;;:::o;36584:831::-;36847:4;36885:3;36874:9;36870:19;36862:27;;36899:71;36967:1;36956:9;36952:17;36943:6;36899:71;:::i;:::-;36980:80;37056:2;37045:9;37041:18;37032:6;36980:80;:::i;:::-;37107:9;37101:4;37097:20;37092:2;37081:9;37077:18;37070:48;37135:108;37238:4;37229:6;37135:108;:::i;:::-;37127:116;;37253:72;37321:2;37310:9;37306:18;37297:6;37253:72;:::i;:::-;37335:73;37403:3;37392:9;37388:19;37379:6;37335:73;:::i;:::-;36584:831;;;;;;;;:::o;37421:807::-;37670:4;37708:3;37697:9;37693:19;37685:27;;37722:71;37790:1;37779:9;37775:17;37766:6;37722:71;:::i;:::-;37803:72;37871:2;37860:9;37856:18;37847:6;37803:72;:::i;:::-;37885:80;37961:2;37950:9;37946:18;37937:6;37885:80;:::i;:::-;37975;38051:2;38040:9;38036:18;38027:6;37975:80;:::i;:::-;38065:73;38133:3;38122:9;38118:19;38109:6;38065:73;:::i;:::-;38148;38216:3;38205:9;38201:19;38192:6;38148:73;:::i;:::-;37421:807;;;;;;;;;:::o;38234:143::-;38291:5;38322:6;38316:13;38307:22;;38338:33;38365:5;38338:33;:::i;:::-;38234:143;;;;:::o;38383:663::-;38471:6;38479;38487;38536:2;38524:9;38515:7;38511:23;38507:32;38504:119;;;38542:79;;:::i;:::-;38504:119;38662:1;38687:64;38743:7;38734:6;38723:9;38719:22;38687:64;:::i;:::-;38677:74;;38633:128;38800:2;38826:64;38882:7;38873:6;38862:9;38858:22;38826:64;:::i;:::-;38816:74;;38771:129;38939:2;38965:64;39021:7;39012:6;39001:9;38997:22;38965:64;:::i;:::-;38955:74;;38910:129;38383:663;;;;;:::o

Swarm Source

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