ETH Price: $2,490.61 (+0.83%)

Token

Smolting Classic (SMOLC)
 

Overview

Max Total Supply

623,225.351337200834462664 SMOLC

Holders

47

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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:
SmoltingClassic

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-06-30
*/

// File: @uniswap/v2-periphery/contracts/interfaces/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: @uniswap/v2-periphery/contracts/interfaces/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: @uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol

pragma solidity >=0.5.0;

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

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

// File: @uniswap/v2-core/contracts/interfaces/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/Context.sol


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

pragma solidity ^0.8.0;

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

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

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

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/interfaces/IERC20.sol


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

pragma solidity ^0.8.0;


// File: contracts/SmolGame.sol


pragma solidity ^0.8.0;



contract SmolGame is Ownable {
    address payable public treasury;
    uint256 public serviceFeeWei;

    function _payServiceFee() internal {
        if (serviceFeeWei > 0) {
            require(msg.value >= serviceFeeWei, 'not able to pay service fee');
            address payable _treasury = treasury == address(0)
            ? payable(owner())
            : treasury;
            (bool success, ) = _treasury.call{ value: serviceFeeWei }('');
            require(success, 'could not pay service fee');
        }
    }

    function setTreasury(address _treasury) external onlyOwner {
        treasury = payable(_treasury);
    }

    function setServiceFeeWei(uint256 _feeWei) external onlyOwner {
        serviceFeeWei = _feeWei;
    }

    function withdrawTokens(address _tokenAddy, uint256 _amount)
    external
    onlyOwner
    {
        IERC20 _token = IERC20(_tokenAddy);
        _amount = _amount > 0 ? _amount : _token.balanceOf(address(this));
        require(_amount > 0, 'make sure there is a balance available to withdraw');
        _token.transfer(owner(), _amount);
    }

    function withdrawETH(uint256 _amountWei) external onlyOwner {
        _amountWei = _amountWei == 0 ? address(this).balance : _amountWei;
        payable(owner()).call{ value: _amountWei }('');
    }

    receive() external payable {}
}
// 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.7.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.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `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;
        }
        _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;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

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

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

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

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

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

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

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

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

    /**
     * @dev 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: @chainlink/contracts/src/v0.8/VRFConsumerBaseV2.sol


pragma solidity ^0.8.4;

/** ****************************************************************************
 * @notice Interface for contracts using VRF randomness
 * *****************************************************************************
 * @dev PURPOSE
 *
 * @dev Reggie the Random Oracle (not his real job) wants to provide randomness
 * @dev to Vera the verifier in such a way that Vera can be sure he's not
 * @dev making his output up to suit himself. Reggie provides Vera a public key
 * @dev to which he knows the secret key. Each time Vera provides a seed to
 * @dev Reggie, he gives back a value which is computed completely
 * @dev deterministically from the seed and the secret key.
 *
 * @dev Reggie provides a proof by which Vera can verify that the output was
 * @dev correctly computed once Reggie tells it to her, but without that proof,
 * @dev the output is indistinguishable to her from a uniform random sample
 * @dev from the output space.
 *
 * @dev The purpose of this contract is to make it easy for unrelated contracts
 * @dev to talk to Vera the verifier about the work Reggie is doing, to provide
 * @dev simple access to a verifiable source of randomness. It ensures 2 things:
 * @dev 1. The fulfillment came from the VRFCoordinator
 * @dev 2. The consumer contract implements fulfillRandomWords.
 * *****************************************************************************
 * @dev USAGE
 *
 * @dev Calling contracts must inherit from VRFConsumerBase, and can
 * @dev initialize VRFConsumerBase's attributes in their constructor as
 * @dev shown:
 *
 * @dev   contract VRFConsumer {
 * @dev     constructor(<other arguments>, address _vrfCoordinator, address _link)
 * @dev       VRFConsumerBase(_vrfCoordinator) public {
 * @dev         <initialization with other arguments goes here>
 * @dev       }
 * @dev   }
 *
 * @dev The oracle will have given you an ID for the VRF keypair they have
 * @dev committed to (let's call it keyHash). Create subscription, fund it
 * @dev and your consumer contract as a consumer of it (see VRFCoordinatorInterface
 * @dev subscription management functions).
 * @dev Call requestRandomWords(keyHash, subId, minimumRequestConfirmations,
 * @dev callbackGasLimit, numWords),
 * @dev see (VRFCoordinatorInterface for a description of the arguments).
 *
 * @dev Once the VRFCoordinator has received and validated the oracle's response
 * @dev to your request, it will call your contract's fulfillRandomWords method.
 *
 * @dev The randomness argument to fulfillRandomWords is a set of random words
 * @dev generated from your requestId and the blockHash of the request.
 *
 * @dev If your contract could have concurrent requests open, you can use the
 * @dev requestId returned from requestRandomWords to track which response is associated
 * @dev with which randomness request.
 * @dev See "SECURITY CONSIDERATIONS" for principles to keep in mind,
 * @dev if your contract could have multiple requests in flight simultaneously.
 *
 * @dev Colliding `requestId`s are cryptographically impossible as long as seeds
 * @dev differ.
 *
 * *****************************************************************************
 * @dev SECURITY CONSIDERATIONS
 *
 * @dev A method with the ability to call your fulfillRandomness method directly
 * @dev could spoof a VRF response with any random value, so it's critical that
 * @dev it cannot be directly called by anything other than this base contract
 * @dev (specifically, by the VRFConsumerBase.rawFulfillRandomness method).
 *
 * @dev For your users to trust that your contract's random behavior is free
 * @dev from malicious interference, it's best if you can write it so that all
 * @dev behaviors implied by a VRF response are executed *during* your
 * @dev fulfillRandomness method. If your contract must store the response (or
 * @dev anything derived from it) and use it later, you must ensure that any
 * @dev user-significant behavior which depends on that stored value cannot be
 * @dev manipulated by a subsequent VRF request.
 *
 * @dev Similarly, both miners and the VRF oracle itself have some influence
 * @dev over the order in which VRF responses appear on the blockchain, so if
 * @dev your contract could have multiple VRF requests in flight simultaneously,
 * @dev you must ensure that the order in which the VRF responses arrive cannot
 * @dev be used to manipulate your contract's user-significant behavior.
 *
 * @dev Since the block hash of the block which contains the requestRandomness
 * @dev call is mixed into the input to the VRF *last*, a sufficiently powerful
 * @dev miner could, in principle, fork the blockchain to evict the block
 * @dev containing the request, forcing the request to be included in a
 * @dev different block with a different hash, and therefore a different input
 * @dev to the VRF. However, such an attack would incur a substantial economic
 * @dev cost. This cost scales with the number of blocks the VRF oracle waits
 * @dev until it calls responds to a request. It is for this reason that
 * @dev that you can signal to an oracle you'd like them to wait longer before
 * @dev responding to the request (however this is not enforced in the contract
 * @dev and so remains effective only in the case of unmodified oracle software).
 */
abstract contract VRFConsumerBaseV2 {
  error OnlyCoordinatorCanFulfill(address have, address want);
  address private immutable vrfCoordinator;

  /**
   * @param _vrfCoordinator address of VRFCoordinator contract
   */
  constructor(address _vrfCoordinator) {
    vrfCoordinator = _vrfCoordinator;
  }

  /**
   * @notice fulfillRandomness handles the VRF response. Your contract must
   * @notice implement it. See "SECURITY CONSIDERATIONS" above for important
   * @notice principles to keep in mind when implementing your fulfillRandomness
   * @notice method.
   *
   * @dev VRFConsumerBaseV2 expects its subcontracts to have a method with this
   * @dev signature, and will call it once it has verified the proof
   * @dev associated with the randomness. (It is triggered via a call to
   * @dev rawFulfillRandomness, below.)
   *
   * @param requestId The Id initially returned by requestRandomness
   * @param randomWords the VRF output expanded to the requested number of words
   */
  function fulfillRandomWords(uint256 requestId, uint256[] memory randomWords) internal virtual;

  // rawFulfillRandomness is called by VRFCoordinator when it receives a valid VRF
  // proof. rawFulfillRandomness then calls fulfillRandomness, after validating
  // the origin of the call
  function rawFulfillRandomWords(uint256 requestId, uint256[] memory randomWords) external {
    if (msg.sender != vrfCoordinator) {
      revert OnlyCoordinatorCanFulfill(msg.sender, vrfCoordinator);
    }
    fulfillRandomWords(requestId, randomWords);
  }
}

// File: @chainlink/contracts/src/v0.8/interfaces/VRFCoordinatorV2Interface.sol


pragma solidity ^0.8.0;

interface VRFCoordinatorV2Interface {
  /**
   * @notice Get configuration relevant for making requests
   * @return minimumRequestConfirmations global min for request confirmations
   * @return maxGasLimit global max for request gas limit
   * @return s_provingKeyHashes list of registered key hashes
   */
  function getRequestConfig()
    external
    view
    returns (
      uint16,
      uint32,
      bytes32[] memory
    );

  /**
   * @notice Request a set of random words.
   * @param keyHash - Corresponds to a particular oracle job which uses
   * that key for generating the VRF proof. Different keyHash's have different gas price
   * ceilings, so you can select a specific one to bound your maximum per request cost.
   * @param subId  - The ID of the VRF subscription. Must be funded
   * with the minimum subscription balance required for the selected keyHash.
   * @param minimumRequestConfirmations - How many blocks you'd like the
   * oracle to wait before responding to the request. See SECURITY CONSIDERATIONS
   * for why you may want to request more. The acceptable range is
   * [minimumRequestBlockConfirmations, 200].
   * @param callbackGasLimit - How much gas you'd like to receive in your
   * fulfillRandomWords callback. Note that gasleft() inside fulfillRandomWords
   * may be slightly less than this amount because of gas used calling the function
   * (argument decoding etc.), so you may need to request slightly more than you expect
   * to have inside fulfillRandomWords. The acceptable range is
   * [0, maxGasLimit]
   * @param numWords - The number of uint256 random values you'd like to receive
   * in your fulfillRandomWords callback. Note these numbers are expanded in a
   * secure way by the VRFCoordinator from a single random value supplied by the oracle.
   * @return requestId - A unique identifier of the request. Can be used to match
   * a request to a response in fulfillRandomWords.
   */
  function requestRandomWords(
    bytes32 keyHash,
    uint64 subId,
    uint16 minimumRequestConfirmations,
    uint32 callbackGasLimit,
    uint32 numWords
  ) external returns (uint256 requestId);

  /**
   * @notice Create a VRF subscription.
   * @return subId - A unique subscription id.
   * @dev You can manage the consumer set dynamically with addConsumer/removeConsumer.
   * @dev Note to fund the subscription, use transferAndCall. For example
   * @dev  LINKTOKEN.transferAndCall(
   * @dev    address(COORDINATOR),
   * @dev    amount,
   * @dev    abi.encode(subId));
   */
  function createSubscription() external returns (uint64 subId);

  /**
   * @notice Get a VRF subscription.
   * @param subId - ID of the subscription
   * @return balance - LINK balance of the subscription in juels.
   * @return reqCount - number of requests for this subscription, determines fee tier.
   * @return owner - owner of the subscription.
   * @return consumers - list of consumer address which are able to use this subscription.
   */
  function getSubscription(uint64 subId)
    external
    view
    returns (
      uint96 balance,
      uint64 reqCount,
      address owner,
      address[] memory consumers
    );

  /**
   * @notice Request subscription owner transfer.
   * @param subId - ID of the subscription
   * @param newOwner - proposed new owner of the subscription
   */
  function requestSubscriptionOwnerTransfer(uint64 subId, address newOwner) external;

  /**
   * @notice Request subscription owner transfer.
   * @param subId - ID of the subscription
   * @dev will revert if original owner of subId has
   * not requested that msg.sender become the new owner.
   */
  function acceptSubscriptionOwnerTransfer(uint64 subId) external;

  /**
   * @notice Add a consumer to a VRF subscription.
   * @param subId - ID of the subscription
   * @param consumer - New consumer which can use the subscription
   */
  function addConsumer(uint64 subId, address consumer) external;

  /**
   * @notice Remove a consumer from a VRF subscription.
   * @param subId - ID of the subscription
   * @param consumer - Consumer to remove from the subscription
   */
  function removeConsumer(uint64 subId, address consumer) external;

  /**
   * @notice Cancel a subscription
   * @param subId - ID of the subscription
   * @param to - Where to send the remaining LINK to
   */
  function cancelSubscription(uint64 subId, address to) external;
}

// File: @chainlink/contracts/src/v0.8/interfaces/LinkTokenInterface.sol


pragma solidity ^0.8.0;

interface LinkTokenInterface {
  function allowance(address owner, address spender) external view returns (uint256 remaining);

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

  function balanceOf(address owner) external view returns (uint256 balance);

  function decimals() external view returns (uint8 decimalPlaces);

  function decreaseApproval(address spender, uint256 addedValue) external returns (bool success);

  function increaseApproval(address spender, uint256 subtractedValue) external;

  function name() external view returns (string memory tokenName);

  function symbol() external view returns (string memory tokenSymbol);

  function totalSupply() external view returns (uint256 totalTokensIssued);

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

  function transferAndCall(
    address to,
    uint256 value,
    bytes calldata data
  ) external returns (bool success);

  function transferFrom(
    address from,
    address to,
    uint256 value
  ) external returns (bool success);
}

// File: contracts/smoltingvfc.sol

/**************************************************************
smolting classic (SMOLC)
WS: https://smoltingclassic.com/
*************************************************************/

pragma solidity ^0.8.0;










contract SmoltingClassic is ERC20, Ownable, SmolGame, VRFConsumerBaseV2 {
    uint256 private constant ONE_HOUR = 60 * 60;
    uint256 private constant PERCENT_DENOMENATOR = 1000;
    address private constant DEAD = address(0xdead);

    VRFCoordinatorV2Interface vrfCoord;
    LinkTokenInterface link;
    uint64 private _vrfSubscriptionId;
    bytes32 private _vrfKeyHash;
    uint16 private _vrfNumBlocks = 3;
    uint32 private _vrfCallbackGasLimit = 600000;
    mapping(uint256 => address) private _wagerInit;
    mapping(address => uint256) private _wagerInitAmount;
    uint256 private _wagerBalance;

    uint256 public coinFlipMinBalancePerc = (PERCENT_DENOMENATOR * 50) / 100; // 50% user's balance
    uint256 public coinFlipWinPercentage = (PERCENT_DENOMENATOR * 95) / 100; // 95% wager amount
    uint256 public coinFlipMinWagerAbsolute;
    uint256 public coinFlipMaxWagerAbsolute;
    uint256 public coinFlipsWon;
    uint256 public coinFlipsLost;
    uint256 public coinFlipAmountWon;
    uint256 public coinFlipAmountLost;
    mapping(address => uint256) public coinFlipsUserWon;
    mapping(address => uint256) public coinFlipsUserLost;
    mapping(address => uint256) public coinFlipUserAmountWon;
    mapping(address => uint256) public coinFlipUserAmountLost;
    mapping(address => bool) public lastCoinFlipWon;

    uint256 public coinFlipMinWhaleWagerAbsolute = 500 * 10**18;
    uint256 public coinFlipMaxWhaleWagerAbsolute;
    uint64 public deadblocks = 2;
    mapping(address => bool) public isCoinFlipWhale;
    bool private _addingLP;

    mapping(address => uint256) public lastGameWin;
    uint256 public gameWinSellPenaltyTimeSeconds = 60 * 60; // 1 hour
    uint256 public gameWinSellPenaltyMultiplier = 6;

    uint256 public minTransferForSideEffectsToRecipient;

    uint256 public biggestBuyRewardPercentage = (PERCENT_DENOMENATOR * 50) / 100; // 50%
    mapping(uint256 => address) public biggestBuyer;
    mapping(uint256 => uint256) public biggestBuyerAmount;
    mapping(uint256 => uint256) public biggestBuyerPaid;

    address private _lpReceiver;
    address private _nukeRecipient = DEAD;
    uint256 public lpNukeBuildup;
    uint256 public nukePercentPerSell = (PERCENT_DENOMENATOR * 5) / 100; // 5%
    bool public lpNukeEnabled = true;

    mapping(address => bool) private _isTaxExcluded;
    mapping(address => bool) private _isLimitless;

    uint256 public taxLp = (PERCENT_DENOMENATOR * 3) / 100; // 3%
    uint256 public taxBuyer = (PERCENT_DENOMENATOR * 1) / 100; // 1%

    uint256 public maxTx = (PERCENT_DENOMENATOR * 1) / 100; //1%
    uint256 public maxWallet = (PERCENT_DENOMENATOR * 1) / 100; //2%
    bool public enableLimits = true;

    uint256 public sellTaxUnwageredMultiplier = 4; // init 16% (4% * 4)
    uint256 private _totalTax;
    bool private _taxesOff;
    mapping(address => bool) public canSellWithoutElevation;

    uint256 private _liquifyRate = (PERCENT_DENOMENATOR * 1) / 100; // 1%
    uint256 public launchTime;
    uint256 private _launchBlock;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    mapping(address => bool) private _isBot;

    mapping(address => bool) public isGameContract;

    bool private _swapEnabled = true;
    bool private _swapping = false;

    event InitiatedCoinFlip(
        address indexed wagerer,
        uint256 indexed requestId,
        uint256 amountWagered
    );
    event SettledCoinFlip(
        address indexed wagerer,
        uint256 indexed requestId,
        uint256 amountWagered,
        bool didUserWin
    );

    modifier onlyGame() {
        require(isGameContract[_msgSender()], 'not a smol game');
        _;
    }

    modifier swapLock() {
        _swapping = true;
        _;
        _swapping = false;
    }

    constructor(
        address _vrfCoordinator,
        uint64 _subscriptionId,
        address _linkToken,
        bytes32 _keyHash
    ) ERC20('Smolting Classic', 'SMOLC') VRFConsumerBaseV2(_vrfCoordinator) {
        _mint(address(this), 1_000_000 * 10**18);

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(
            address(this),
            _uniswapV2Router.WETH()
        );
        uniswapV2Router = _uniswapV2Router;
        _setTotalTax();
        _isTaxExcluded[address(this)] = true;
        _isTaxExcluded[msg.sender] = true;
        _isLimitless[address(this)] = true;
        _isLimitless[msg.sender] = true;

        vrfCoord = VRFCoordinatorV2Interface(_vrfCoordinator);
        link = LinkTokenInterface(_linkToken);
        _vrfSubscriptionId = _subscriptionId;
        _vrfKeyHash = _keyHash;
    }

    // _percent: 1 == 0.1%, 1000 = 100%
    function lnchtkn(uint16 _percent) external payable onlyOwner {
        require(_percent <= PERCENT_DENOMENATOR, 'must be between 0-100%');
        require(launchTime == 0, 'already launched');
        require(_percent == 0 || msg.value > 0, 'need ETH for initial LP');
        deadblocks = 0;
        _addingLP = true;

        uint256 _lpSupply = (totalSupply() * _percent) / PERCENT_DENOMENATOR;
        uint256 _leftover = totalSupply() - _lpSupply;
        if (_lpSupply > 0) {
            _addLp(_lpSupply, msg.value);
        }
        if (_leftover > 0) {
            _transfer(address(this), owner(), _leftover);
        }
        launchTime = block.timestamp;
        _launchBlock = block.number;
        _addingLP = false;
    }

    // coinFlipMinBalancePerc <= _percent <= 1000
    function flipCoin(uint16 _percent) external payable {
        require(balanceOf(msg.sender) > 0, 'must have a bag to wager');
        require(
            _percent >= coinFlipMinBalancePerc && _percent <= PERCENT_DENOMENATOR,
            'must wager between the minimum and your entire bag'
        );
        uint256 _finalWagerAmount = (balanceOf(msg.sender) * _percent) /
        PERCENT_DENOMENATOR;

        if (isCoinFlipWhale[msg.sender]) {
            require(
                _finalWagerAmount >= coinFlipMinWhaleWagerAbsolute,
                'does not meet minimum whale amount requirements'
            );
            require(
                coinFlipMaxWhaleWagerAbsolute == 0 ||
                _finalWagerAmount <= coinFlipMaxWhaleWagerAbsolute,
                'exceeds maximum whale amount requirements'
            );
        } else {
            require(
                _finalWagerAmount >= coinFlipMinWagerAbsolute,
                'does not meet minimum amount requirements'
            );
            require(
                coinFlipMaxWagerAbsolute == 0 ||
                _finalWagerAmount <= coinFlipMaxWagerAbsolute,
                'exceeds maximum amount requirements'
            );
        }
        require(_wagerInitAmount[msg.sender] == 0, 'already initiated');

        _transfer(msg.sender, address(this), _finalWagerAmount);
        _wagerBalance += _finalWagerAmount;

        uint256 requestId = vrfCoord.requestRandomWords(
            _vrfKeyHash,
            _vrfSubscriptionId,
            _vrfNumBlocks,
            _vrfCallbackGasLimit,
            uint16(1)
        );

        _wagerInit[requestId] = msg.sender;
        _wagerInitAmount[msg.sender] = _finalWagerAmount;
        canSellWithoutElevation[msg.sender] = true;

        _payServiceFee();
        emit InitiatedCoinFlip(msg.sender, requestId, _finalWagerAmount);
    }

    function fulfillRandomWords(uint256 requestId, uint256[] memory randomWords)
    internal
    override
    {
        _settleCoinFlip(requestId, randomWords[0]);
    }

    function manualFulfillRandomWords(
        uint256 requestId,
        uint256[] memory randomWords
    ) external onlyOwner {
        _settleCoinFlip(requestId, randomWords[0]);
    }

    function _settleCoinFlip(uint256 requestId, uint256 randomNumber) private {
        address _user = _wagerInit[requestId];
        require(_user != address(0), 'coin flip record does not exist');

        uint256 _amountWagered = _wagerInitAmount[_user];
        uint256 _amountToWin = (_amountWagered * coinFlipWinPercentage) /
        PERCENT_DENOMENATOR;
        bool _didUserWin = randomNumber % 2 == 0;

        if (_didUserWin) {
            _transfer(address(this), _user, _amountWagered);
            _mint(_user, _amountToWin);
            coinFlipsWon++;
            coinFlipAmountWon += _amountToWin;
            coinFlipsUserWon[_user]++;
            coinFlipUserAmountWon[_user] += _amountToWin;
            lastCoinFlipWon[_user] = true;
        } else {
            _burn(address(this), _amountWagered);
            coinFlipsLost++;
            coinFlipAmountLost += _amountWagered;
            coinFlipsUserLost[_user]++;
            coinFlipUserAmountLost[_user] += _amountWagered;
            lastCoinFlipWon[_user] = false;
        }
        _wagerBalance -= _amountWagered;
        // reset to allow wagering again
        _wagerInitAmount[_user] = 0;
        emit SettledCoinFlip(
            _user,
            requestId,
            _amountWagered,
            lastCoinFlipWon[_user]
        );
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual override {
        bool _isOwner = sender == owner() || recipient == owner();
        uint256 contractTokenBalance = balanceOf(address(this)) - _wagerBalance;

        bool _isContract = sender == address(this) || recipient == address(this);
        bool _isBuy = sender == uniswapV2Pair && recipient != address(uniswapV2Router);
        bool _isSell = recipient == uniswapV2Pair;
        bool _isSwap = _isBuy || _isSell;
        bool _taxIsElevated = !canSellWithoutElevation[sender];
        uint256 _hourAfterLaunch = getHour();

        if (_isSwap && enableLimits) {
            bool _skipCheck = _addingLP || _isLimitless[recipient] || _isLimitless[sender];
            uint256 _maxTx = totalSupply() * maxTx / PERCENT_DENOMENATOR;
            require(_maxTx >= amount || _skipCheck, "Tx amount exceed limit");
            if (_isBuy) {
                uint256 _maxWallet = totalSupply() * maxWallet / PERCENT_DENOMENATOR;
                require(_maxWallet >= balanceOf(recipient) + amount || _skipCheck, "Total amount exceed wallet limit");
            }
        }
        if (_isBuy) {
            canSellWithoutElevation[recipient] = false;
            if (block.number <= _launchBlock + deadblocks) {
                _isBot[recipient] = true;
            } else if (amount > biggestBuyerAmount[_hourAfterLaunch]) {
                biggestBuyer[_hourAfterLaunch] = recipient;
                biggestBuyerAmount[_hourAfterLaunch] = amount;
            }
        } else {
            require(!_isBot[recipient], 'Stop botting!');
            require(!_isBot[sender], 'Stop botting!');
            require(!_isBot[_msgSender()], 'Stop botting!');

            if (
                !_isSell &&
            !_isContract &&
            amount > minTransferForSideEffectsToRecipient
            ) {
                canSellWithoutElevation[recipient] = false;
                if (lastGameWin[recipient] < lastGameWin[sender]) {
                    lastGameWin[recipient] = lastGameWin[sender];
                }
            }
        }

        _checkAndPayBiggestBuyer(_hourAfterLaunch);

        uint256 _minSwap = (balanceOf(uniswapV2Pair) * _liquifyRate) /
        PERCENT_DENOMENATOR;
        bool _overMin = contractTokenBalance >= _minSwap;
        if (
            _swapEnabled &&
            !_swapping &&
            !_isOwner &&
            _overMin &&
            launchTime != 0 &&
            sender != uniswapV2Pair
        ) {
            _swap(_minSwap);
        }

        uint256 tax = 0;
        if (
            launchTime != 0 &&
            _isSwap &&
            !_taxesOff &&
            !(_isTaxExcluded[sender] || _isTaxExcluded[recipient])
        ) {
            tax = (amount * _totalTax) / PERCENT_DENOMENATOR;
            if (tax > 0) {
                if (_isSell) {
                    if (
                        block.timestamp <
                        lastGameWin[recipient] + gameWinSellPenaltyTimeSeconds
                    ) {
                        tax *= gameWinSellPenaltyMultiplier;
                    } else if (_taxIsElevated) {
                        tax *= sellTaxUnwageredMultiplier;
                    }
                }
                super._transfer(sender, address(this), tax);
            }
        }

        super._transfer(sender, recipient, amount - tax);

        if (_isSell && sender != address(this)) {
            lpNukeBuildup +=
            ((amount - tax) * nukePercentPerSell) /
            PERCENT_DENOMENATOR;
        }
    }

    function _swap(uint256 _amountToSwap) private swapLock {
        uint256 balBefore = address(this).balance;
        uint256 liquidityTokens = (_amountToSwap * taxLp) / _totalTax / 2;
        uint256 tokensToSwap = _amountToSwap - liquidityTokens;

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

        _approve(address(this), address(uniswapV2Router), tokensToSwap);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokensToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 balToProcess = address(this).balance - balBefore;
        if (balToProcess > 0) {
            _processFees(balToProcess, liquidityTokens);
        }
    }

    function _addLp(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.addLiquidityETH{ value: ethAmount }(
            address(this),
            tokenAmount,
            0,
            0,
            _lpReceiver == address(0) ? owner() : _lpReceiver,
            block.timestamp
        );
    }

    function _processFees(uint256 amountETH, uint256 amountLpTokens) private {
        uint256 lpETH = (amountETH * taxLp) / _totalTax;
        if (amountLpTokens > 0) {
            _addLp(amountLpTokens, lpETH);
        }
    }

    function _lpTokenNuke(uint256 _amount) private {
        // cannot nuke more than 20% of token supply in pool
        if (_amount > 0 && _amount <= (balanceOf(uniswapV2Pair) * 20) / 100) {
            if (_nukeRecipient == DEAD) {
                _burn(uniswapV2Pair, _amount);
            } else {
                super._transfer(uniswapV2Pair, _nukeRecipient, _amount);
            }
            IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
            pair.sync();
        }
    }

    function _checkAndPayBiggestBuyer(uint256 _currentHour) private {
        uint256 _prevHour = _currentHour - 1;
        if (
            _currentHour > 1 &&
            biggestBuyerAmount[_prevHour] > 0 &&
            biggestBuyerPaid[_prevHour] == 0
        ) {
            uint256 _before = address(this).balance;
            if (_before > 0) {
                uint256 _buyerAmount = (_before * biggestBuyRewardPercentage) /
                PERCENT_DENOMENATOR;
                biggestBuyerPaid[_prevHour] = _buyerAmount;
                payable(biggestBuyer[_prevHour]).call{ value: _buyerAmount }('');
                require(
                    address(this).balance >= _before - _buyerAmount,
                    'too much ser'
                );
            }
        }
    }

    function gameMint(address _wallet, uint256 _amount) external onlyGame {
        lastGameWin[_wallet] = block.timestamp;
        _mint(_wallet, _amount);
    }

    function gameBurn(address _wallet, uint256 _amount) external onlyGame {
        _burn(_wallet, _amount);
    }

    function nukeLpTokenFromBuildup() external {
        require(
            msg.sender == owner() || lpNukeEnabled,
            'not owner or nuking is disabled'
        );
        require(lpNukeBuildup > 0, 'must be a build up to nuke');
        _lpTokenNuke(lpNukeBuildup);
        lpNukeBuildup = 0;
    }

    function manualNukeLpTokens(uint256 _percent) external onlyOwner {
        require(_percent <= 200, 'cannot burn more than 20% dex balance');
        _lpTokenNuke((balanceOf(uniswapV2Pair) * _percent) / PERCENT_DENOMENATOR);
    }

    function payBiggestBuyer(uint256 _hour) external onlyOwner {
        _checkAndPayBiggestBuyer(_hour);
    }

    // starts at 1 and increments forever every hour after launch
    function getHour() public view returns (uint256) {
        uint256 secondsSinceLaunch = block.timestamp - launchTime;
        return 1 + (secondsSinceLaunch / ONE_HOUR);
    }

    function isBotBlacklisted(address account) external view returns (bool) {
        return _isBot[account];
    }

    function blacklistBot(address account) external onlyOwner {
        require(account != address(uniswapV2Router), 'cannot blacklist router');
        require(account != uniswapV2Pair, 'cannot blacklist pair');
        require(!_isBot[account], 'user is already blacklisted');
        _isBot[account] = true;
    }

    function forgiveBot(address account) external onlyOwner {
        require(_isBot[account], 'user is not blacklisted');
        _isBot[account] = false;
    }

    function _setTotalTax() private {
        _totalTax = taxLp + taxBuyer;
        require(
            _totalTax <= (PERCENT_DENOMENATOR * 25) / 100,
            'tax cannot be above 25%'
        );
        require(
            _totalTax * sellTaxUnwageredMultiplier <=
            (PERCENT_DENOMENATOR * 49) / 100,
            'total cannot be more than 49%'
        );
    }

    function setTaxLp(uint256 _tax) external onlyOwner {
        taxLp = _tax;
        _setTotalTax();
    }

    function setMaxWallet(uint256 _maxWallet) external onlyOwner {
        require(_maxWallet >= 10, 'max wallet cannot be below 0.1%');
        maxWallet = _maxWallet;
    }
    function setMaxTx(uint256 _maxTx) external onlyOwner {
        require(_maxTx >= 10, 'max tx cannot be below 0.1%');
        maxTx = _maxTx;
    }

    function setTaxBuyer(uint256 _tax) external onlyOwner {
        taxBuyer = _tax;
        _setTotalTax();
    }

    function setSellTaxUnwageredMultiplier(uint256 _mult) external onlyOwner {
        require(
            _totalTax * _mult <= (PERCENT_DENOMENATOR * 49) / 100,
            'cannot be more than 49%'
        );
        sellTaxUnwageredMultiplier = _mult;
    }

    function setGameWinSellPenaltyMultiplier(uint256 _mult) external onlyOwner {
        require(
            _totalTax * _mult <= (PERCENT_DENOMENATOR * 49) / 100,
            'total cannot be more than 49%'
        );
        gameWinSellPenaltyMultiplier = _mult;
    }

    function setLpReceiver(address _wallet) external onlyOwner {
        _lpReceiver = _wallet;
    }

    function setCoinFlipMinBalancePerc(uint256 _percentage) external onlyOwner {
        require(_percentage <= PERCENT_DENOMENATOR, 'cannot exceed 100%');
        coinFlipMinBalancePerc = _percentage;
    }

    function setCoinFlipMinWagerAbsolute(uint256 _amount) external onlyOwner {
        coinFlipMinWagerAbsolute = _amount;
    }

    function setCoinFlipMaxWagerAbsolute(uint256 _amount) external onlyOwner {
        coinFlipMaxWagerAbsolute = _amount;
    }

    function setCoinFlipMinWhaleWagerAbsolute(uint256 _amount)
    external
    onlyOwner
    {
        coinFlipMinWhaleWagerAbsolute = _amount;
    }

    function setCoinFlipMaxWhaleWagerAbsolute(uint256 _amount)
    external
    onlyOwner
    {
        coinFlipMaxWhaleWagerAbsolute = _amount;
    }

    function setIsCoinFlipWhale(address _user, bool _isWhale) external onlyOwner {
        isCoinFlipWhale[_user] = _isWhale;
    }

    function setCoinFlipWinPercentage(uint256 _percentage) external onlyOwner {
        require(_percentage <= PERCENT_DENOMENATOR, 'cannot exceed 100%');
        coinFlipWinPercentage = _percentage;
    }

    function setIsGameContract(address _game, bool _isGame) external onlyOwner {
        isGameContract[_game] = _isGame;
    }

    function setEnableLimits(bool _enable) external onlyOwner {
        enableLimits = _enable;
    }

    function setLiquifyRate(uint256 _rate) external onlyOwner {
        require(_rate <= PERCENT_DENOMENATOR / 10, 'cannot be more than 10%');
        _liquifyRate = _rate;
    }

    function setIsTaxExcluded(address _wallet, bool _isExcluded)
    external
    onlyOwner
    {
        _isTaxExcluded[_wallet] = _isExcluded;
    }

    function setTaxesOff(bool _areOff) external onlyOwner {
        _taxesOff = _areOff;
    }

    function setSwapEnabled(bool _enabled) external onlyOwner {
        _swapEnabled = _enabled;
    }

    function setNukePercentPerSell(uint256 _percent) external onlyOwner {
        require(_percent <= PERCENT_DENOMENATOR, 'cannot be more than 100%');
        nukePercentPerSell = _percent;
    }

    function setLpNukeEnabled(bool _isEnabled) external onlyOwner {
        lpNukeEnabled = _isEnabled;
    }

    function setBiggestBuyRewardPercentage(uint256 _percent) external onlyOwner {
        require(_percent <= PERCENT_DENOMENATOR, 'cannot be more than 100%');
        biggestBuyRewardPercentage = _percent;
    }

    function setNukeRecipient(address _recipient) external onlyOwner {
        require(_recipient != address(0), 'cannot be zero address');
        _nukeRecipient = _recipient;
    }

    function setGameWinSellPenaltyTimeSeconds(uint256 _seconds) external onlyOwner {
        gameWinSellPenaltyTimeSeconds = _seconds;
    }

    function setMinTransferForSideEffectsToRecipient(uint256 _amount) external onlyOwner {
        minTransferForSideEffectsToRecipient = _amount;
    }

    function setVrfSubscriptionId(uint64 _subId) external onlyOwner {
        _vrfSubscriptionId = _subId;
    }

    function setVrfNumBlocks(uint16 _numBlocks) external onlyOwner {
        _vrfNumBlocks = _numBlocks;
    }

    function setVrfCallbackGasLimit(uint32 _gas) external onlyOwner {
        _vrfCallbackGasLimit = _gas;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_vrfCoordinator","type":"address"},{"internalType":"uint64","name":"_subscriptionId","type":"uint64"},{"internalType":"address","name":"_linkToken","type":"address"},{"internalType":"bytes32","name":"_keyHash","type":"bytes32"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"have","type":"address"},{"internalType":"address","name":"want","type":"address"}],"name":"OnlyCoordinatorCanFulfill","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"wagerer","type":"address"},{"indexed":true,"internalType":"uint256","name":"requestId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWagered","type":"uint256"}],"name":"InitiatedCoinFlip","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"wagerer","type":"address"},{"indexed":true,"internalType":"uint256","name":"requestId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWagered","type":"uint256"},{"indexed":false,"internalType":"bool","name":"didUserWin","type":"bool"}],"name":"SettledCoinFlip","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":[{"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":[],"name":"biggestBuyRewardPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"biggestBuyer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"biggestBuyerAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"biggestBuyerPaid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"blacklistBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"canSellWithoutElevation","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"coinFlipAmountLost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"coinFlipAmountWon","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"coinFlipMaxWagerAbsolute","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"coinFlipMaxWhaleWagerAbsolute","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"coinFlipMinBalancePerc","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"coinFlipMinWagerAbsolute","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"coinFlipMinWhaleWagerAbsolute","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"coinFlipUserAmountLost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"coinFlipUserAmountWon","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"coinFlipWinPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"coinFlipsLost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"coinFlipsUserLost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"coinFlipsUserWon","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"coinFlipsWon","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadblocks","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_percent","type":"uint16"}],"name":"flipCoin","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"forgiveBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"gameBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"gameMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gameWinSellPenaltyMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gameWinSellPenaltyTimeSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getHour","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"isBotBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isCoinFlipWhale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isGameContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastCoinFlipWon","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastGameWin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_percent","type":"uint16"}],"name":"lnchtkn","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"lpNukeBuildup","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpNukeEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"requestId","type":"uint256"},{"internalType":"uint256[]","name":"randomWords","type":"uint256[]"}],"name":"manualFulfillRandomWords","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_percent","type":"uint256"}],"name":"manualNukeLpTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minTransferForSideEffectsToRecipient","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nukeLpTokenFromBuildup","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"nukePercentPerSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_hour","type":"uint256"}],"name":"payBiggestBuyer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"requestId","type":"uint256"},{"internalType":"uint256[]","name":"randomWords","type":"uint256[]"}],"name":"rawFulfillRandomWords","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTaxUnwageredMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"serviceFeeWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_percent","type":"uint256"}],"name":"setBiggestBuyRewardPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setCoinFlipMaxWagerAbsolute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setCoinFlipMaxWhaleWagerAbsolute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_percentage","type":"uint256"}],"name":"setCoinFlipMinBalancePerc","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setCoinFlipMinWagerAbsolute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setCoinFlipMinWhaleWagerAbsolute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_percentage","type":"uint256"}],"name":"setCoinFlipWinPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enable","type":"bool"}],"name":"setEnableLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mult","type":"uint256"}],"name":"setGameWinSellPenaltyMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_seconds","type":"uint256"}],"name":"setGameWinSellPenaltyTimeSeconds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"bool","name":"_isWhale","type":"bool"}],"name":"setIsCoinFlipWhale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_game","type":"address"},{"internalType":"bool","name":"_isGame","type":"bool"}],"name":"setIsGameContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"bool","name":"_isExcluded","type":"bool"}],"name":"setIsTaxExcluded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rate","type":"uint256"}],"name":"setLiquifyRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isEnabled","type":"bool"}],"name":"setLpNukeEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"setLpReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTx","type":"uint256"}],"name":"setMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWallet","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMinTransferForSideEffectsToRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_percent","type":"uint256"}],"name":"setNukePercentPerSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"}],"name":"setNukeRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mult","type":"uint256"}],"name":"setSellTaxUnwageredMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_feeWei","type":"uint256"}],"name":"setServiceFeeWei","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tax","type":"uint256"}],"name":"setTaxBuyer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tax","type":"uint256"}],"name":"setTaxLp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_areOff","type":"bool"}],"name":"setTaxesOff","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasury","type":"address"}],"name":"setTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_gas","type":"uint32"}],"name":"setVrfCallbackGasLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_numBlocks","type":"uint16"}],"name":"setVrfNumBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"_subId","type":"uint64"}],"name":"setVrfSubscriptionId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxBuyer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxLp","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":"treasury","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amountWei","type":"uint256"}],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddy","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a0604052600b805465ffffffffffff1916640927c0000317905560646200002b6103e86032620008cf565b620000379190620008ac565b600f5560646200004b6103e8605f620008cf565b620000579190620008ac565b601055681b1ae4d6e2ef500000601c55601e80546001600160401b0319166002179055610e1060225560066023556064620000966103e86032620008cf565b620000a29190620008ac565b602555602a80546001600160a01b03191661dead1790556064620000ca6103e86005620008cf565b620000d69190620008ac565b602c55602d805460ff191660011790556064620000f76103e86003620008cf565b620001039190620008ac565b6030556064620001176103e86001620008cf565b620001239190620008ac565b6031556064620001376103e86001620008cf565b620001439190620008ac565b6032556064620001576103e86001620008cf565b620001639190620008ac565b6033556034805460ff1916600190811790915560046035556064906200018d906103e890620008cf565b620001999190620008ac565b6039556040805461ffff19166001179055348015620001b757600080fd5b5060405162004da038038062004da0833981016040819052620001da9162000831565b604080518082018252601081526f536d6f6c74696e6720436c617373696360801b602080830191825283518085019094526005845264534d4f4c4360d81b90840152815187939162000230916003919062000749565b5080516200024690600490602084019062000749565b505050620002636200025d6200050460201b60201c565b62000508565b60601b6001600160601b031916608052620002893069d3c21bcecceda10000006200055a565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620002dc57600080fd5b505afa158015620002f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200031791906200080c565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200036057600080fd5b505afa15801562000375573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200039b91906200080c565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620003e457600080fd5b505af1158015620003f9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200041f91906200080c565b603d80546001600160a01b03199081166001600160a01b0393841617909155603c80549091169183169190911790556200045862000643565b50306000818152602e60209081526040808320805460ff199081166001908117909255338086528386208054831684179055958552602f909352818420805484168217905593835290912080549091169091179055600880546001600160a01b039586166001600160a01b0319909116179055600980546001600160401b03909416600160a01b026001600160e01b0319909416929094169190911791909117909155600a5562000944565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216620005b65760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064015b60405180910390fd5b8060026000828254620005ca919062000891565b90915550506001600160a01b03821660009081526020819052604081208054839290620005f990849062000891565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b60315460305462000655919062000891565b6036556064620006696103e86019620008cf565b620006759190620008ac565b6036541115620006c85760405162461bcd60e51b815260206004820152601760248201527f7461782063616e6e6f742062652061626f7665203235250000000000000000006044820152606401620005ad565b6064620006d96103e86031620008cf565b620006e59190620008ac565b603554603654620006f79190620008cf565b1115620007475760405162461bcd60e51b815260206004820152601d60248201527f746f74616c2063616e6e6f74206265206d6f7265207468616e203439250000006044820152606401620005ad565b565b8280546200075790620008f1565b90600052602060002090601f0160209004810192826200077b5760008555620007c6565b82601f106200079657805160ff1916838001178555620007c6565b82800160010185558215620007c6579182015b82811115620007c6578251825591602001919060010190620007a9565b50620007d4929150620007d8565b5090565b5b80821115620007d45760008155600101620007d9565b80516001600160a01b03811681146200080757600080fd5b919050565b6000602082840312156200081f57600080fd5b6200082a82620007ef565b9392505050565b600080600080608085870312156200084857600080fd5b6200085385620007ef565b60208601519094506001600160401b03811681146200087157600080fd5b92506200088160408601620007ef565b6060959095015193969295505050565b60008219821115620008a757620008a76200092e565b500190565b600082620008ca57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615620008ec57620008ec6200092e565b500290565b600181811c908216806200090657607f821691505b602082108114156200092857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60805160601c6144366200096a6000396000818161189e01526118e001526144366000f3fe6080604052600436106105ae5760003560e01c806367499ca9116102f3578063bb2b53b81161019b578063e01af92c116100e7578063f0f44260116100a0578063f6b483931161007a578063f6b48393146111c8578063f8b45b05146111e8578063fa4f0d9e146111fe578063fbeedd881461121457600080fd5b8063f0f4426014611168578063f14210a614611188578063f2fde38b146111a857600080fd5b8063e01af92c1461108e578063e16b4869146110ae578063e3fd7af2146110db578063e6a8cfa5146110fb578063e9187b741461111b578063f08103091461114857600080fd5b8063ce71ea6511610154578063d6594eda1161012e578063d6594eda14611018578063dd62ed3e14611038578063dddf66d314611058578063de0c3c501461106e57600080fd5b8063ce71ea6514610fce578063d0a51cc114610fe3578063d168d1461461100357600080fd5b8063bb2b53b814610f12578063bc33718214610f28578063bf89d92214610f48578063c04a7d0d14610f68578063c21ba85a14610f98578063c2ed1fc914610fb857600080fd5b806391f8efde1161025a578063a457c2d711610213578063ab05cf10116101ed578063ab05cf1014610e8f578063ad8f346714610ebc578063adc51a4114610edc578063b28cf16614610efc57600080fd5b8063a457c2d714610e39578063a7d6431614610e59578063a9059cbb14610e6f57600080fd5b806391f8efde14610d8e57806395d89b4114610dbb5780639660192414610dd057806396dac2a814610df057806398ee2a8e14610e03578063a203782614610e1957600080fd5b80637437681e116102ac5780637437681e14610cf857806375e9f14a14610d0e578063790ca41314610d2e5780638847616d14610d445780638da5cb5b14610d5a5780638e4105da14610d7857600080fd5b806367499ca914610c5357806368f1c56314610c695780636902ca6114610c8957806370a0823114610ca3578063715018a614610cc357806372e0c24614610cd857600080fd5b80632661bad81161045657806349bd5a5e116103bd57806350c9a88f116103765780635d0044ca116103505780635d0044ca14610bd357806361d027b314610bf3578063662ba3eb14610c1357806366ea81ae14610c3357600080fd5b806350c9a88f14610b4c57806353d4172714610b865780635a405c8714610bb357600080fd5b806349bd5a5e14610aa65780634b9ec1c214610ac65780634c74d3bb14610adc5780634cffb2d014610af25780634d15be2e14610b125780634eb9029914610b2c57600080fd5b8063322b551f1161040f578063322b551f146109fa5780633859d03614610a1a5780633950935114610a3a5780633a82fecb14610a5a5780633bf02ce314610a7057806342caf79a14610a8657600080fd5b80632661bad81461092e578063271292f51461094457806329de8e05146109645780632da07da31461099157806330ff252e146109be578063313ce567146109de57600080fd5b806314ea796d116105155780631a1e2f07116104ce57806320fb033b116104a857806320fb033b146108a857806321c17b5d146108d857806323b872dd146108ee57806325247a691461090e57600080fd5b80631a1e2f07146108325780631a8dc1e3146108685780631fe543e31461088857600080fd5b806314ea796d1461076c57806315486f2c1461078c5780631686bb0b1461079f5780631694505e146107b55780631709180a146107ed57806318160ddd1461081d57600080fd5b8063095ea7b311610567578063095ea7b3146106b05780630a646478146106d05780630c5a82c6146106e65780630e1732141461071657806312c66d4d14610736578063134f9c8d1461074c57600080fd5b8063045494f4146105ba57806305cb4893146105dc57806306b091f91461062a57806306fdde031461064a57806307dd43421461066c57806308aad1f11461069057600080fd5b366105b557005b600080fd5b3480156105c657600080fd5b506105da6105d5366004613fed565b611234565b005b3480156105e857600080fd5b506106156105f7366004613ed8565b6001600160a01b03166000908152603e602052604090205460ff1690565b60405190151581526020015b60405180910390f35b34801561063657600080fd5b506105da610645366004613fc1565b61124f565b34801561065657600080fd5b5061065f6113f4565b60405161062191906141cc565b34801561067857600080fd5b5061068260105481565b604051908152602001610621565b34801561069c57600080fd5b506105da6106ab366004613ed8565b611486565b3480156106bc57600080fd5b506106156106cb366004613fc1565b6115cf565b3480156106dc57600080fd5b5061068260315481565b3480156106f257600080fd5b50610615610701366004613ed8565b60386020526000908152604090205460ff1681565b34801561072257600080fd5b506105da61073136600461404b565b6115e7565b34801561074257600080fd5b5061068260125481565b34801561075857600080fd5b506105da610767366004613ed8565b6115f4565b34801561077857600080fd5b506105da610787366004613fed565b611685565b6105da61079a366004614027565b6116a0565b3480156107ab57600080fd5b50610682601d5481565b3480156107c157600080fd5b50603c546107d5906001600160a01b031681565b6040516001600160a01b039091168152602001610621565b3480156107f957600080fd5b50610615610808366004613ed8565b601b6020526000908152604090205460ff1681565b34801561082957600080fd5b50600254610682565b34801561083e57600080fd5b506107d561084d36600461404b565b6026602052600090815260409020546001600160a01b031681565b34801561087457600080fd5b506105da61088336600461404b565b61183f565b34801561089457600080fd5b506105da6108a336600461407d565b611893565b3480156108b457600080fd5b506106156108c3366004613ed8565b601f6020526000908152604090205460ff1681565b3480156108e457600080fd5b50610682602b5481565b3480156108fa57600080fd5b50610615610909366004613f52565b61191b565b34801561091a57600080fd5b506105da610929366004613ed8565b61193f565b34801561093a57600080fd5b5061068260115481565b34801561095057600080fd5b506105da61095f366004613fc1565b6119b8565b34801561097057600080fd5b5061068261097f366004613ed8565b60216020526000908152604090205481565b34801561099d57600080fd5b506106826109ac366004613ed8565b60186020526000908152604090205481565b3480156109ca57600080fd5b506105da6109d936600461404b565b611a13565b3480156109ea57600080fd5b5060405160128152602001610621565b348015610a0657600080fd5b506105da610a15366004613f93565b611a20565b348015610a2657600080fd5b506105da610a3536600461404b565b611a53565b348015610a4657600080fd5b50610615610a55366004613fc1565b611a6b565b348015610a6657600080fd5b5061068260305481565b348015610a7c57600080fd5b5061068260075481565b348015610a9257600080fd5b506105da610aa136600461404b565b611a8d565b348015610ab257600080fd5b50603d546107d5906001600160a01b031681565b348015610ad257600080fd5b5061068260245481565b348015610ae857600080fd5b5061068260135481565b348015610afe57600080fd5b506105da610b0d36600461404b565b611a9e565b348015610b1e57600080fd5b50602d546106159060ff1681565b348015610b3857600080fd5b506105da610b47366004613fc1565b611aab565b348015610b5857600080fd5b50601e54610b6d9067ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610621565b348015610b9257600080fd5b50610682610ba1366004613ed8565b60196020526000908152604090205481565b348015610bbf57600080fd5b506105da610bce36600461417c565b611b21565b348015610bdf57600080fd5b506105da610bee36600461404b565b611b4d565b348015610bff57600080fd5b506006546107d5906001600160a01b031681565b348015610c1f57600080fd5b506105da610c2e36600461404b565b611bab565b348015610c3f57600080fd5b506105da610c4e366004613f93565b611bff565b348015610c5f57600080fd5b5061068260145481565b348015610c7557600080fd5b506105da610c8436600461404b565b611c32565b348015610c9557600080fd5b506034546106159060ff1681565b348015610caf57600080fd5b50610682610cbe366004613ed8565b611c3f565b348015610ccf57600080fd5b506105da611c5a565b348015610ce457600080fd5b506105da610cf336600461404b565b611c6e565b348015610d0457600080fd5b5061068260325481565b348015610d1a57600080fd5b506105da610d2936600461404b565b611c7b565b348015610d3a57600080fd5b50610682603a5481565b348015610d5057600080fd5b5061068260165481565b348015610d6657600080fd5b506005546001600160a01b03166107d5565b348015610d8457600080fd5b50610682602c5481565b348015610d9a57600080fd5b50610682610da9366004613ed8565b601a6020526000908152604090205481565b348015610dc757600080fd5b5061065f611c88565b348015610ddc57600080fd5b506105da610deb366004614027565b611c97565b6105da610dfe366004614027565b611cb7565b348015610e0f57600080fd5b5061068260225481565b348015610e2557600080fd5b506105da610e3436600461404b565b61213d565b348015610e4557600080fd5b50610615610e54366004613fc1565b6121bf565b348015610e6557600080fd5b5061068260155481565b348015610e7b57600080fd5b50610615610e8a366004613fc1565b61223a565b348015610e9b57600080fd5b50610682610eaa366004613ed8565b60176020526000908152604090205481565b348015610ec857600080fd5b506105da610ed7366004613ed8565b612248565b348015610ee857600080fd5b506105da610ef736600461404b565b612272565b348015610f0857600080fd5b50610682600f5481565b348015610f1e57600080fd5b5061068260355481565b348015610f3457600080fd5b506105da610f4336600461404b565b61227f565b348015610f5457600080fd5b506105da610f63366004613fed565b6122dd565b348015610f7457600080fd5b50610615610f83366004613ed8565b603f6020526000908152604090205460ff1681565b348015610fa457600080fd5b506105da610fb336600461404b565b6122f8565b348015610fc457600080fd5b5061068260235481565b348015610fda57600080fd5b506105da61237a565b348015610fef57600080fd5b506105da610ffe36600461404b565b612445565b34801561100f57600080fd5b5061068261245a565b34801561102457600080fd5b506105da61103336600461404b565b61248a565b34801561104457600080fd5b50610682611053366004613f19565b6124f3565b34801561106457600080fd5b5061068260255481565b34801561107a57600080fd5b506105da61108936600461407d565b61251e565b34801561109a57600080fd5b506105da6110a9366004613fed565b61254a565b3480156110ba57600080fd5b506106826110c936600461404b565b60286020526000908152604090205481565b3480156110e757600080fd5b506105da6110f636600461404b565b612565565b34801561110757600080fd5b506105da61111636600461404b565b6125bf565b34801561112757600080fd5b5061068261113636600461404b565b60276020526000908152604090205481565b34801561115457600080fd5b506105da6111633660046141a2565b61265e565b34801561117457600080fd5b506105da611183366004613ed8565b612694565b34801561119457600080fd5b506105da6111a336600461404b565b6126be565b3480156111b457600080fd5b506105da6111c3366004613ed8565b612732565b3480156111d457600080fd5b506105da6111e336600461404b565b6127a8565b3480156111f457600080fd5b5061068260335481565b34801561120a57600080fd5b50610682601c5481565b34801561122057600080fd5b506105da61122f366004613f93565b612802565b61123c612835565b6034805460ff1916911515919091179055565b611257612835565b81816112d9576040516370a0823160e01b81523060048201526001600160a01b038216906370a082319060240160206040518083038186803b15801561129c57600080fd5b505afa1580156112b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d49190614064565b6112db565b815b91506000821161134d5760405162461bcd60e51b815260206004820152603260248201527f6d616b65207375726520746865726520697320612062616c616e636520617661604482015271696c61626c6520746f20776974686472617760701b60648201526084015b60405180910390fd5b806001600160a01b031663a9059cbb61136e6005546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101859052604401602060405180830381600087803b1580156113b657600080fd5b505af11580156113ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ee919061400a565b50505050565b6060600380546114039061431b565b80601f016020809104026020016040519081016040528092919081815260200182805461142f9061431b565b801561147c5780601f106114515761010080835404028352916020019161147c565b820191906000526020600020905b81548152906001019060200180831161145f57829003601f168201915b5050505050905090565b61148e612835565b603c546001600160a01b03828116911614156114ec5760405162461bcd60e51b815260206004820152601760248201527f63616e6e6f7420626c61636b6c69737420726f757465720000000000000000006044820152606401611344565b603d546001600160a01b03828116911614156115425760405162461bcd60e51b815260206004820152601560248201527431b0b73737ba10313630b1b5b634b9ba103830b4b960591b6044820152606401611344565b6001600160a01b0381166000908152603e602052604090205460ff16156115ab5760405162461bcd60e51b815260206004820152601b60248201527f7573657220697320616c726561647920626c61636b6c697374656400000000006044820152606401611344565b6001600160a01b03166000908152603e60205260409020805460ff19166001179055565b6000336115dd81858561288f565b5060019392505050565b6115ef612835565b601d55565b6115fc612835565b6001600160a01b0381166000908152603e602052604090205460ff166116645760405162461bcd60e51b815260206004820152601760248201527f75736572206973206e6f7420626c61636b6c69737465640000000000000000006044820152606401611344565b6001600160a01b03166000908152603e60205260409020805460ff19169055565b61168d612835565b6037805460ff1916911515919091179055565b6116a8612835565b6103e88161ffff1611156116f75760405162461bcd60e51b81526020600482015260166024820152756d757374206265206265747765656e20302d3130302560501b6044820152606401611344565b603a541561173a5760405162461bcd60e51b815260206004820152601060248201526f185b1c9958591e481b185d5b98da195960821b6044820152606401611344565b61ffff8116158061174b5750600034115b6117975760405162461bcd60e51b815260206004820152601760248201527f6e6565642045544820666f7220696e697469616c204c500000000000000000006044820152606401611344565b601e805467ffffffffffffffff191690556020805460ff1916600117905560006103e861ffff83166117c860025490565b6117d291906142e5565b6117dc91906142d1565b90506000816117ea60025490565b6117f49190614304565b905081156118065761180682346129ab565b801561182857611828306118226005546001600160a01b031690565b83612aad565b505042603a555043603b556020805460ff19169055565b611847612835565b6103e881111561188e5760405162461bcd60e51b815260206004820152601260248201527163616e6e6f7420657863656564203130302560701b6044820152606401611344565b601055565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461190d5760405163073e64fd60e21b81523360048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166024820152604401611344565b6119178282612526565b5050565b60003361192985828561311e565b611934858585612aad565b506001949350505050565b611947612835565b6001600160a01b0381166119965760405162461bcd60e51b815260206004820152601660248201527563616e6e6f74206265207a65726f206164647265737360501b6044820152606401611344565b602a80546001600160a01b0319166001600160a01b0392909216919091179055565b336000908152603f602052604090205460ff16611a095760405162461bcd60e51b815260206004820152600f60248201526e6e6f74206120736d6f6c2067616d6560881b6044820152606401611344565b6119178282613192565b611a1b612835565b602255565b611a28612835565b6001600160a01b03919091166000908152601f60205260409020805460ff1916911515919091179055565b611a5b612835565b6031819055611a686132dd565b50565b6000336115dd818585611a7e83836124f3565b611a8891906142b9565b61288f565b611a95612835565b611a68816133d1565b611aa6612835565b601155565b336000908152603f602052604090205460ff16611afc5760405162461bcd60e51b815260206004820152600f60248201526e6e6f74206120736d6f6c2067616d6560881b6044820152606401611344565b6001600160a01b038216600090815260216020526040902042905561191782826134f5565b611b29612835565b600b805463ffffffff909216620100000265ffffffff000019909216919091179055565b611b55612835565b600a811015611ba65760405162461bcd60e51b815260206004820152601f60248201527f6d61782077616c6c65742063616e6e6f742062652062656c6f7720302e3125006044820152606401611344565b603355565b611bb3612835565b6103e8811115611bfa5760405162461bcd60e51b815260206004820152601260248201527163616e6e6f7420657863656564203130302560701b6044820152606401611344565b600f55565b611c07612835565b6001600160a01b03919091166000908152603f60205260409020805460ff1916911515919091179055565b611c3a612835565b602455565b6001600160a01b031660009081526020819052604090205490565b611c62612835565b611c6c60006135d4565b565b611c76612835565b600755565b611c83612835565b601255565b6060600480546114039061431b565b611c9f612835565b600b805461ffff191661ffff92909216919091179055565b6000611cc233611c3f565b11611d0f5760405162461bcd60e51b815260206004820152601860248201527f6d757374206861766520612062616720746f20776167657200000000000000006044820152606401611344565b600f548161ffff1610158015611d2b57506103e88161ffff1611155b611d925760405162461bcd60e51b815260206004820152603260248201527f6d757374207761676572206265747765656e20746865206d696e696d756d20616044820152716e6420796f757220656e746972652062616760701b6064820152608401611344565b60006103e88261ffff16611da533611c3f565b611daf91906142e5565b611db991906142d1565b336000908152601f602052604090205490915060ff1615611eb257601c54811015611e3e5760405162461bcd60e51b815260206004820152602f60248201527f646f6573206e6f74206d656574206d696e696d756d207768616c6520616d6f7560448201526e6e7420726571756972656d656e747360881b6064820152608401611344565b601d541580611e4f5750601d548111155b611ead5760405162461bcd60e51b815260206004820152602960248201527f65786365656473206d6178696d756d207768616c6520616d6f756e7420726571604482015268756972656d656e747360b81b6064820152608401611344565b611f7f565b601154811015611f165760405162461bcd60e51b815260206004820152602960248201527f646f6573206e6f74206d656574206d696e696d756d20616d6f756e7420726571604482015268756972656d656e747360b81b6064820152608401611344565b6012541580611f2757506012548111155b611f7f5760405162461bcd60e51b815260206004820152602360248201527f65786365656473206d6178696d756d20616d6f756e7420726571756972656d656044820152626e747360e81b6064820152608401611344565b336000908152600d602052604090205415611fd05760405162461bcd60e51b8152602060048201526011602482015270185b1c9958591e481a5b9a5d1a585d1959607a1b6044820152606401611344565b611fdb333083612aad565b80600e6000828254611fed91906142b9565b9091555050600854600a54600954600b546040516305d3b1d360e41b81526004810193909352600160a01b90910467ffffffffffffffff16602483015261ffff8116604483015262010000900463ffffffff166064820152600160848201526000916001600160a01b031690635d3b1d309060a401602060405180830381600087803b15801561207c57600080fd5b505af1158015612090573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b49190614064565b6000818152600c6020908152604080832080546001600160a01b031916339081179091558352600d825280832086905560389091529020805460ff191660011790559050612100613626565b604051828152819033907ff685c2462d152e7aad42dcbbcaac8632ee381f37957c45b7f97959ae0b620215906020015b60405180910390a3505050565b612145612835565b60646121546103e860316142e5565b61215e91906142d1565b8160365461216c91906142e5565b11156121ba5760405162461bcd60e51b815260206004820152601d60248201527f746f74616c2063616e6e6f74206265206d6f7265207468616e203439250000006044820152606401611344565b602355565b600033816121cd82866124f3565b90508381101561222d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401611344565b611934828686840361288f565b6000336115dd818585612aad565b612250612835565b602980546001600160a01b0319166001600160a01b0392909216919091179055565b61227a612835565b601c55565b612287612835565b600a8110156122d85760405162461bcd60e51b815260206004820152601b60248201527f6d61782074782063616e6e6f742062652062656c6f7720302e312500000000006044820152606401611344565b603255565b6122e5612835565b602d805460ff1916911515919091179055565b612300612835565b606461230f6103e860316142e5565b61231991906142d1565b8160365461232791906142e5565b11156123755760405162461bcd60e51b815260206004820152601760248201527f63616e6e6f74206265206d6f7265207468616e203439250000000000000000006044820152606401611344565b603555565b6005546001600160a01b03163314806123955750602d5460ff165b6123e15760405162461bcd60e51b815260206004820152601f60248201527f6e6f74206f776e6572206f72206e756b696e672069732064697361626c6564006044820152606401611344565b6000602b54116124335760405162461bcd60e51b815260206004820152601a60248201527f6d7573742062652061206275696c6420757020746f206e756b650000000000006044820152606401611344565b61243e602b54613759565b6000602b55565b61244d612835565b6030819055611a686132dd565b600080603a544261246b9190614304565b9050612479610e10826142d1565b6124849060016142b9565b91505090565b612492612835565b61249f600a6103e86142d1565b8111156124ee5760405162461bcd60e51b815260206004820152601760248201527f63616e6e6f74206265206d6f7265207468616e203130250000000000000000006044820152606401611344565b603955565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b612526612835565b611917828260008151811061253d5761253d6143b1565b602002602001015161384d565b612552612835565b6040805460ff1916911515919091179055565b61256d612835565b6103e88111156125ba5760405162461bcd60e51b815260206004820152601860248201527763616e6e6f74206265206d6f7265207468616e203130302560401b6044820152606401611344565b602c55565b6125c7612835565b60c88111156126265760405162461bcd60e51b815260206004820152602560248201527f63616e6e6f74206275726e206d6f7265207468616e20323025206465782062616044820152646c616e636560d81b6064820152608401611344565b603d54611a68906103e8908390612645906001600160a01b0316611c3f565b61264f91906142e5565b61265991906142d1565b613759565b612666612835565b6009805467ffffffffffffffff909216600160a01b0267ffffffffffffffff60a01b19909216919091179055565b61269c612835565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6126c6612835565b80156126d257806126d4565b475b90506126e86005546001600160a01b031690565b6001600160a01b03168160405160006040518083038185875af1925050503d80600081146113ee576040519150601f19603f3d011682016040523d82523d6000602084013e6113ee565b61273a612835565b6001600160a01b03811661279f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401611344565b611a68816135d4565b6127b0612835565b6103e88111156127fd5760405162461bcd60e51b815260206004820152601860248201527763616e6e6f74206265206d6f7265207468616e203130302560401b6044820152606401611344565b602555565b61280a612835565b6001600160a01b03919091166000908152602e60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611c6c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611344565b6001600160a01b0383166128f15760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401611344565b6001600160a01b0382166129525760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401611344565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259101612130565b603c546129c39030906001600160a01b03168461288f565b603c546029546001600160a01b039182169163f305d71991849130918791600091829116156129fd576029546001600160a01b0316612a0a565b6005546001600160a01b03165b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015612a6d57600080fd5b505af1158015612a81573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612aa6919061414e565b5050505050565b6000612ac16005546001600160a01b031690565b6001600160a01b0316846001600160a01b03161480612aed57506005546001600160a01b038481169116145b90506000600e54612afd30611c3f565b612b079190614304565b905060006001600160a01b038616301480612b2a57506001600160a01b03851630145b603d549091506000906001600160a01b038881169116148015612b5b5750603c546001600160a01b03878116911614155b603d549091506001600160a01b0387811691161460008280612b7a5750815b6001600160a01b038a1660009081526038602052604081205491925060ff9091161590612ba561245a565b9050828015612bb6575060345460ff165b15612d215760205460009060ff1680612be757506001600160a01b038b166000908152602f602052604090205460ff165b80612c0a57506001600160a01b038c166000908152602f602052604090205460ff165b905060006103e8603254612c1d60025490565b612c2791906142e5565b612c3191906142d1565b90508a81101580612c3f5750815b612c845760405162461bcd60e51b8152602060048201526016602482015275151e08185b5bdd5b9d08195e18d95959081b1a5b5a5d60521b6044820152606401611344565b8615612d1e5760006103e8603354612c9b60025490565b612ca591906142e5565b612caf91906142d1565b90508b612cbb8e611c3f565b612cc591906142b9565b81101580612cd05750825b612d1c5760405162461bcd60e51b815260206004820181905260248201527f546f74616c20616d6f756e74206578636565642077616c6c6574206c696d69746044820152606401611344565b505b50505b8415612ddf576001600160a01b038a166000908152603860205260409020805460ff19169055601e54603b54612d619167ffffffffffffffff16906142b9565b4311612d8f576001600160a01b038a166000908152603e60205260409020805460ff19166001179055612f02565b600081815260276020526040902054891115612dda57600081815260266020908152604080832080546001600160a01b0319166001600160a01b038f16179055602790915290208990555b612f02565b6001600160a01b038a166000908152603e602052604090205460ff1615612e185760405162461bcd60e51b815260040161134490614221565b6001600160a01b038b166000908152603e602052604090205460ff1615612e515760405162461bcd60e51b815260040161134490614221565b336000908152603e602052604090205460ff1615612e815760405162461bcd60e51b815260040161134490614221565b83158015612e8d575085155b8015612e9a575060245489115b15612f02576001600160a01b03808b166000818152603860209081526040808320805460ff19169055938f168252602190528281205491815291909120541015612f02576001600160a01b03808c1660009081526021602052604080822054928d1682529020555b612f0b816133d1565b603954603d546000916103e891612f2a906001600160a01b0316611c3f565b612f3491906142e5565b612f3e91906142d1565b604054909150818910159060ff168015612f605750604054610100900460ff16155b8015612f6a575089155b8015612f735750805b8015612f805750603a5415155b8015612f9a5750603d546001600160a01b038e8116911614155b15612fa857612fa882613af4565b6000603a54600014158015612fba5750855b8015612fc9575060375460ff16155b801561301157506001600160a01b038e166000908152602e602052604090205460ff168061300f57506001600160a01b038d166000908152602e602052604090205460ff165b155b156130a1576103e86036548d61302791906142e5565b61303191906142d1565b905080156130a1578615613096576022546001600160a01b038e1660009081526021602052604090205461306591906142b9565b4210156130805760235461307990826142e5565b9050613096565b84156130965760355461309390826142e5565b90505b6130a18e3083613cdb565b6130b78e8e838f6130b29190614304565b613cdb565b8680156130cd57506001600160a01b038e163014155b1561310e57602c546103e8906130e3838f614304565b6130ed91906142e5565b6130f791906142d1565b602b600082825461310891906142b9565b90915550505b5050505050505050505050505050565b600061312a84846124f3565b905060001981146113ee57818110156131855760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401611344565b6113ee848484840361288f565b6001600160a01b0382166131f25760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401611344565b6001600160a01b038216600090815260208190526040902054818110156132665760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401611344565b6001600160a01b0383166000908152602081905260408120838303905560028054849290613295908490614304565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001612130565b505050565b6031546030546132ed91906142b9565b60365560646132ff6103e860196142e5565b61330991906142d1565b603654111561335a5760405162461bcd60e51b815260206004820152601760248201527f7461782063616e6e6f742062652061626f7665203235250000000000000000006044820152606401611344565b60646133696103e860316142e5565b61337391906142d1565b60355460365461338391906142e5565b1115611c6c5760405162461bcd60e51b815260206004820152601d60248201527f746f74616c2063616e6e6f74206265206d6f7265207468616e203439250000006044820152606401611344565b60006133de600183614304565b90506001821180156133fd575060008181526027602052604090205415155b80156134155750600081815260286020526040902054155b15611917574780156132d85760006103e86025548361343491906142e5565b61343e91906142d1565b600084815260286020908152604080832084905560269091528082205490519293506001600160a01b031691839181818185875af1925050503d80600081146134a3576040519150601f19603f3d011682016040523d82523d6000602084013e6134a8565b606091505b50505080826134b79190614304565b4710156113ee5760405162461bcd60e51b815260206004820152600c60248201526b3a37b79036bab1b41039b2b960a11b6044820152606401611344565b6001600160a01b03821661354b5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401611344565b806002600082825461355d91906142b9565b90915550506001600160a01b0382166000908152602081905260408120805483929061358a9084906142b9565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60075415611c6c576007543410156136805760405162461bcd60e51b815260206004820152601b60248201527f6e6f742061626c6520746f2070617920736572766963652066656500000000006044820152606401611344565b6006546000906001600160a01b0316156136a5576006546001600160a01b03166136b2565b6005546001600160a01b03165b90506000816001600160a01b031660075460405160006040518083038185875af1925050503d8060008114613703576040519150601f19603f3d011682016040523d82523d6000602084013e613708565b606091505b50509050806119175760405162461bcd60e51b815260206004820152601960248201527f636f756c64206e6f7420706179207365727669636520666565000000000000006044820152606401611344565b6000811180156137955750603d5460649061377c906001600160a01b0316611c3f565b6137879060146142e5565b61379191906142d1565b8111155b15611a6857602a546001600160a01b031661dead14156137ca57603d546137c5906001600160a01b031682613192565b6137e7565b603d54602a546137e7916001600160a01b03908116911683613cdb565b603d546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae991600480830192600092919082900301818387803b15801561383157600080fd5b505af1158015613845573d6000803e3d6000fd5b505050505050565b6000828152600c60205260409020546001600160a01b0316806138b25760405162461bcd60e51b815260206004820152601f60248201527f636f696e20666c6970207265636f726420646f6573206e6f74206578697374006044820152606401611344565b6001600160a01b0381166000908152600d60205260408120546010549091906103e8906138df90846142e5565b6138e991906142d1565b905060006138f8600286614371565b15905080156139c05761390c308585612aad565b61391684836134f5565b6013805490600061392683614356565b9190505550816015600082825461393d91906142b9565b90915550506001600160a01b038416600090815260176020526040812080549161396683614356565b90915550506001600160a01b038416600090815260196020526040812080548492906139939084906142b9565b90915550506001600160a01b0384166000908152601b60205260409020805460ff19166001179055613a6d565b6139ca3084613192565b601480549060006139da83614356565b919050555082601660008282546139f191906142b9565b90915550506001600160a01b0384166000908152601860205260408120805491613a1a83614356565b90915550506001600160a01b0384166000908152601a602052604081208054859290613a479084906142b9565b90915550506001600160a01b0384166000908152601b60205260409020805460ff191690555b82600e6000828254613a7f9190614304565b90915550506001600160a01b0384166000818152600d60209081526040808320839055601b82529182902054825187815260ff9091161515918101919091528892917fbd053f1bd6a4301cdbc18d23f8b17f23da7dd4462fd92670cc9c8f1bdd521ebe910160405180910390a3505050505050565b6040805461ff001916610100179055603654603054479160009160029190613b1c90866142e5565b613b2691906142d1565b613b3091906142d1565b90506000613b3e8285614304565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110613b7857613b786143b1565b6001600160a01b03928316602091820292909201810191909152603c54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015613bcc57600080fd5b505afa158015613be0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c049190613efc565b81600181518110613c1757613c176143b1565b6001600160a01b039283166020918202929092010152603c54613c3d913091168461288f565b603c5460405163791ac94760e01b81526001600160a01b039091169063791ac94790613c76908590600090869030904290600401614248565b600060405180830381600087803b158015613c9057600080fd5b505af1158015613ca4573d6000803e3d6000fd5b5050505060008447613cb69190614304565b90508015613cc857613cc88185613ea9565b50506040805461ff001916905550505050565b6001600160a01b038316613d3f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401611344565b6001600160a01b038216613da15760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401611344565b6001600160a01b03831660009081526020819052604090205481811015613e195760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401611344565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290613e509084906142b9565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613e9c91815260200190565b60405180910390a36113ee565b600060365460305484613ebc91906142e5565b613ec691906142d1565b905081156132d8576132d882826129ab565b600060208284031215613eea57600080fd5b8135613ef5816143dd565b9392505050565b600060208284031215613f0e57600080fd5b8151613ef5816143dd565b60008060408385031215613f2c57600080fd5b8235613f37816143dd565b91506020830135613f47816143dd565b809150509250929050565b600080600060608486031215613f6757600080fd5b8335613f72816143dd565b92506020840135613f82816143dd565b929592945050506040919091013590565b60008060408385031215613fa657600080fd5b8235613fb1816143dd565b91506020830135613f47816143f2565b60008060408385031215613fd457600080fd5b8235613fdf816143dd565b946020939093013593505050565b600060208284031215613fff57600080fd5b8135613ef5816143f2565b60006020828403121561401c57600080fd5b8151613ef5816143f2565b60006020828403121561403957600080fd5b813561ffff81168114613ef557600080fd5b60006020828403121561405d57600080fd5b5035919050565b60006020828403121561407657600080fd5b5051919050565b6000806040838503121561409057600080fd5b8235915060208084013567ffffffffffffffff808211156140b057600080fd5b818601915086601f8301126140c457600080fd5b8135818111156140d6576140d66143c7565b8060051b604051601f19603f830116810181811085821117156140fb576140fb6143c7565b604052828152858101935084860182860187018b101561411a57600080fd5b600095505b8386101561413d57803585526001959095019493860193860161411f565b508096505050505050509250929050565b60008060006060848603121561416357600080fd5b8351925060208401519150604084015190509250925092565b60006020828403121561418e57600080fd5b813563ffffffff81168114613ef557600080fd5b6000602082840312156141b457600080fd5b813567ffffffffffffffff81168114613ef557600080fd5b600060208083528351808285015260005b818110156141f9578581018301518582016040015282016141dd565b8181111561420b576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252600d908201526c53746f7020626f7474696e672160981b604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156142985784516001600160a01b031683529383019391830191600101614273565b50506001600160a01b03969096166060850152505050608001529392505050565b600082198211156142cc576142cc614385565b500190565b6000826142e0576142e061439b565b500490565b60008160001904831182151516156142ff576142ff614385565b500290565b60008282101561431657614316614385565b500390565b600181811c9082168061432f57607f821691505b6020821081141561435057634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561436a5761436a614385565b5060010190565b6000826143805761438061439b565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114611a6857600080fd5b8015158114611a6857600080fdfea26469706673582212207298b2297d2b9e7141fa475b9cb044be205d1c8cd144b2efd84f30a9ad8118b564736f6c63430008070033000000000000000000000000271682deb8c4e0901d1a1550ad2e64d568e6990900000000000000000000000000000000000000000000000000000000000000cb000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca8af398995b04c28e9951adb9721ef74c74f93e6a478f39e7e0777be13527e7ef

Deployed Bytecode

0x6080604052600436106105ae5760003560e01c806367499ca9116102f3578063bb2b53b81161019b578063e01af92c116100e7578063f0f44260116100a0578063f6b483931161007a578063f6b48393146111c8578063f8b45b05146111e8578063fa4f0d9e146111fe578063fbeedd881461121457600080fd5b8063f0f4426014611168578063f14210a614611188578063f2fde38b146111a857600080fd5b8063e01af92c1461108e578063e16b4869146110ae578063e3fd7af2146110db578063e6a8cfa5146110fb578063e9187b741461111b578063f08103091461114857600080fd5b8063ce71ea6511610154578063d6594eda1161012e578063d6594eda14611018578063dd62ed3e14611038578063dddf66d314611058578063de0c3c501461106e57600080fd5b8063ce71ea6514610fce578063d0a51cc114610fe3578063d168d1461461100357600080fd5b8063bb2b53b814610f12578063bc33718214610f28578063bf89d92214610f48578063c04a7d0d14610f68578063c21ba85a14610f98578063c2ed1fc914610fb857600080fd5b806391f8efde1161025a578063a457c2d711610213578063ab05cf10116101ed578063ab05cf1014610e8f578063ad8f346714610ebc578063adc51a4114610edc578063b28cf16614610efc57600080fd5b8063a457c2d714610e39578063a7d6431614610e59578063a9059cbb14610e6f57600080fd5b806391f8efde14610d8e57806395d89b4114610dbb5780639660192414610dd057806396dac2a814610df057806398ee2a8e14610e03578063a203782614610e1957600080fd5b80637437681e116102ac5780637437681e14610cf857806375e9f14a14610d0e578063790ca41314610d2e5780638847616d14610d445780638da5cb5b14610d5a5780638e4105da14610d7857600080fd5b806367499ca914610c5357806368f1c56314610c695780636902ca6114610c8957806370a0823114610ca3578063715018a614610cc357806372e0c24614610cd857600080fd5b80632661bad81161045657806349bd5a5e116103bd57806350c9a88f116103765780635d0044ca116103505780635d0044ca14610bd357806361d027b314610bf3578063662ba3eb14610c1357806366ea81ae14610c3357600080fd5b806350c9a88f14610b4c57806353d4172714610b865780635a405c8714610bb357600080fd5b806349bd5a5e14610aa65780634b9ec1c214610ac65780634c74d3bb14610adc5780634cffb2d014610af25780634d15be2e14610b125780634eb9029914610b2c57600080fd5b8063322b551f1161040f578063322b551f146109fa5780633859d03614610a1a5780633950935114610a3a5780633a82fecb14610a5a5780633bf02ce314610a7057806342caf79a14610a8657600080fd5b80632661bad81461092e578063271292f51461094457806329de8e05146109645780632da07da31461099157806330ff252e146109be578063313ce567146109de57600080fd5b806314ea796d116105155780631a1e2f07116104ce57806320fb033b116104a857806320fb033b146108a857806321c17b5d146108d857806323b872dd146108ee57806325247a691461090e57600080fd5b80631a1e2f07146108325780631a8dc1e3146108685780631fe543e31461088857600080fd5b806314ea796d1461076c57806315486f2c1461078c5780631686bb0b1461079f5780631694505e146107b55780631709180a146107ed57806318160ddd1461081d57600080fd5b8063095ea7b311610567578063095ea7b3146106b05780630a646478146106d05780630c5a82c6146106e65780630e1732141461071657806312c66d4d14610736578063134f9c8d1461074c57600080fd5b8063045494f4146105ba57806305cb4893146105dc57806306b091f91461062a57806306fdde031461064a57806307dd43421461066c57806308aad1f11461069057600080fd5b366105b557005b600080fd5b3480156105c657600080fd5b506105da6105d5366004613fed565b611234565b005b3480156105e857600080fd5b506106156105f7366004613ed8565b6001600160a01b03166000908152603e602052604090205460ff1690565b60405190151581526020015b60405180910390f35b34801561063657600080fd5b506105da610645366004613fc1565b61124f565b34801561065657600080fd5b5061065f6113f4565b60405161062191906141cc565b34801561067857600080fd5b5061068260105481565b604051908152602001610621565b34801561069c57600080fd5b506105da6106ab366004613ed8565b611486565b3480156106bc57600080fd5b506106156106cb366004613fc1565b6115cf565b3480156106dc57600080fd5b5061068260315481565b3480156106f257600080fd5b50610615610701366004613ed8565b60386020526000908152604090205460ff1681565b34801561072257600080fd5b506105da61073136600461404b565b6115e7565b34801561074257600080fd5b5061068260125481565b34801561075857600080fd5b506105da610767366004613ed8565b6115f4565b34801561077857600080fd5b506105da610787366004613fed565b611685565b6105da61079a366004614027565b6116a0565b3480156107ab57600080fd5b50610682601d5481565b3480156107c157600080fd5b50603c546107d5906001600160a01b031681565b6040516001600160a01b039091168152602001610621565b3480156107f957600080fd5b50610615610808366004613ed8565b601b6020526000908152604090205460ff1681565b34801561082957600080fd5b50600254610682565b34801561083e57600080fd5b506107d561084d36600461404b565b6026602052600090815260409020546001600160a01b031681565b34801561087457600080fd5b506105da61088336600461404b565b61183f565b34801561089457600080fd5b506105da6108a336600461407d565b611893565b3480156108b457600080fd5b506106156108c3366004613ed8565b601f6020526000908152604090205460ff1681565b3480156108e457600080fd5b50610682602b5481565b3480156108fa57600080fd5b50610615610909366004613f52565b61191b565b34801561091a57600080fd5b506105da610929366004613ed8565b61193f565b34801561093a57600080fd5b5061068260115481565b34801561095057600080fd5b506105da61095f366004613fc1565b6119b8565b34801561097057600080fd5b5061068261097f366004613ed8565b60216020526000908152604090205481565b34801561099d57600080fd5b506106826109ac366004613ed8565b60186020526000908152604090205481565b3480156109ca57600080fd5b506105da6109d936600461404b565b611a13565b3480156109ea57600080fd5b5060405160128152602001610621565b348015610a0657600080fd5b506105da610a15366004613f93565b611a20565b348015610a2657600080fd5b506105da610a3536600461404b565b611a53565b348015610a4657600080fd5b50610615610a55366004613fc1565b611a6b565b348015610a6657600080fd5b5061068260305481565b348015610a7c57600080fd5b5061068260075481565b348015610a9257600080fd5b506105da610aa136600461404b565b611a8d565b348015610ab257600080fd5b50603d546107d5906001600160a01b031681565b348015610ad257600080fd5b5061068260245481565b348015610ae857600080fd5b5061068260135481565b348015610afe57600080fd5b506105da610b0d36600461404b565b611a9e565b348015610b1e57600080fd5b50602d546106159060ff1681565b348015610b3857600080fd5b506105da610b47366004613fc1565b611aab565b348015610b5857600080fd5b50601e54610b6d9067ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610621565b348015610b9257600080fd5b50610682610ba1366004613ed8565b60196020526000908152604090205481565b348015610bbf57600080fd5b506105da610bce36600461417c565b611b21565b348015610bdf57600080fd5b506105da610bee36600461404b565b611b4d565b348015610bff57600080fd5b506006546107d5906001600160a01b031681565b348015610c1f57600080fd5b506105da610c2e36600461404b565b611bab565b348015610c3f57600080fd5b506105da610c4e366004613f93565b611bff565b348015610c5f57600080fd5b5061068260145481565b348015610c7557600080fd5b506105da610c8436600461404b565b611c32565b348015610c9557600080fd5b506034546106159060ff1681565b348015610caf57600080fd5b50610682610cbe366004613ed8565b611c3f565b348015610ccf57600080fd5b506105da611c5a565b348015610ce457600080fd5b506105da610cf336600461404b565b611c6e565b348015610d0457600080fd5b5061068260325481565b348015610d1a57600080fd5b506105da610d2936600461404b565b611c7b565b348015610d3a57600080fd5b50610682603a5481565b348015610d5057600080fd5b5061068260165481565b348015610d6657600080fd5b506005546001600160a01b03166107d5565b348015610d8457600080fd5b50610682602c5481565b348015610d9a57600080fd5b50610682610da9366004613ed8565b601a6020526000908152604090205481565b348015610dc757600080fd5b5061065f611c88565b348015610ddc57600080fd5b506105da610deb366004614027565b611c97565b6105da610dfe366004614027565b611cb7565b348015610e0f57600080fd5b5061068260225481565b348015610e2557600080fd5b506105da610e3436600461404b565b61213d565b348015610e4557600080fd5b50610615610e54366004613fc1565b6121bf565b348015610e6557600080fd5b5061068260155481565b348015610e7b57600080fd5b50610615610e8a366004613fc1565b61223a565b348015610e9b57600080fd5b50610682610eaa366004613ed8565b60176020526000908152604090205481565b348015610ec857600080fd5b506105da610ed7366004613ed8565b612248565b348015610ee857600080fd5b506105da610ef736600461404b565b612272565b348015610f0857600080fd5b50610682600f5481565b348015610f1e57600080fd5b5061068260355481565b348015610f3457600080fd5b506105da610f4336600461404b565b61227f565b348015610f5457600080fd5b506105da610f63366004613fed565b6122dd565b348015610f7457600080fd5b50610615610f83366004613ed8565b603f6020526000908152604090205460ff1681565b348015610fa457600080fd5b506105da610fb336600461404b565b6122f8565b348015610fc457600080fd5b5061068260235481565b348015610fda57600080fd5b506105da61237a565b348015610fef57600080fd5b506105da610ffe36600461404b565b612445565b34801561100f57600080fd5b5061068261245a565b34801561102457600080fd5b506105da61103336600461404b565b61248a565b34801561104457600080fd5b50610682611053366004613f19565b6124f3565b34801561106457600080fd5b5061068260255481565b34801561107a57600080fd5b506105da61108936600461407d565b61251e565b34801561109a57600080fd5b506105da6110a9366004613fed565b61254a565b3480156110ba57600080fd5b506106826110c936600461404b565b60286020526000908152604090205481565b3480156110e757600080fd5b506105da6110f636600461404b565b612565565b34801561110757600080fd5b506105da61111636600461404b565b6125bf565b34801561112757600080fd5b5061068261113636600461404b565b60276020526000908152604090205481565b34801561115457600080fd5b506105da6111633660046141a2565b61265e565b34801561117457600080fd5b506105da611183366004613ed8565b612694565b34801561119457600080fd5b506105da6111a336600461404b565b6126be565b3480156111b457600080fd5b506105da6111c3366004613ed8565b612732565b3480156111d457600080fd5b506105da6111e336600461404b565b6127a8565b3480156111f457600080fd5b5061068260335481565b34801561120a57600080fd5b50610682601c5481565b34801561122057600080fd5b506105da61122f366004613f93565b612802565b61123c612835565b6034805460ff1916911515919091179055565b611257612835565b81816112d9576040516370a0823160e01b81523060048201526001600160a01b038216906370a082319060240160206040518083038186803b15801561129c57600080fd5b505afa1580156112b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d49190614064565b6112db565b815b91506000821161134d5760405162461bcd60e51b815260206004820152603260248201527f6d616b65207375726520746865726520697320612062616c616e636520617661604482015271696c61626c6520746f20776974686472617760701b60648201526084015b60405180910390fd5b806001600160a01b031663a9059cbb61136e6005546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101859052604401602060405180830381600087803b1580156113b657600080fd5b505af11580156113ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ee919061400a565b50505050565b6060600380546114039061431b565b80601f016020809104026020016040519081016040528092919081815260200182805461142f9061431b565b801561147c5780601f106114515761010080835404028352916020019161147c565b820191906000526020600020905b81548152906001019060200180831161145f57829003601f168201915b5050505050905090565b61148e612835565b603c546001600160a01b03828116911614156114ec5760405162461bcd60e51b815260206004820152601760248201527f63616e6e6f7420626c61636b6c69737420726f757465720000000000000000006044820152606401611344565b603d546001600160a01b03828116911614156115425760405162461bcd60e51b815260206004820152601560248201527431b0b73737ba10313630b1b5b634b9ba103830b4b960591b6044820152606401611344565b6001600160a01b0381166000908152603e602052604090205460ff16156115ab5760405162461bcd60e51b815260206004820152601b60248201527f7573657220697320616c726561647920626c61636b6c697374656400000000006044820152606401611344565b6001600160a01b03166000908152603e60205260409020805460ff19166001179055565b6000336115dd81858561288f565b5060019392505050565b6115ef612835565b601d55565b6115fc612835565b6001600160a01b0381166000908152603e602052604090205460ff166116645760405162461bcd60e51b815260206004820152601760248201527f75736572206973206e6f7420626c61636b6c69737465640000000000000000006044820152606401611344565b6001600160a01b03166000908152603e60205260409020805460ff19169055565b61168d612835565b6037805460ff1916911515919091179055565b6116a8612835565b6103e88161ffff1611156116f75760405162461bcd60e51b81526020600482015260166024820152756d757374206265206265747765656e20302d3130302560501b6044820152606401611344565b603a541561173a5760405162461bcd60e51b815260206004820152601060248201526f185b1c9958591e481b185d5b98da195960821b6044820152606401611344565b61ffff8116158061174b5750600034115b6117975760405162461bcd60e51b815260206004820152601760248201527f6e6565642045544820666f7220696e697469616c204c500000000000000000006044820152606401611344565b601e805467ffffffffffffffff191690556020805460ff1916600117905560006103e861ffff83166117c860025490565b6117d291906142e5565b6117dc91906142d1565b90506000816117ea60025490565b6117f49190614304565b905081156118065761180682346129ab565b801561182857611828306118226005546001600160a01b031690565b83612aad565b505042603a555043603b556020805460ff19169055565b611847612835565b6103e881111561188e5760405162461bcd60e51b815260206004820152601260248201527163616e6e6f7420657863656564203130302560701b6044820152606401611344565b601055565b336001600160a01b037f000000000000000000000000271682deb8c4e0901d1a1550ad2e64d568e69909161461190d5760405163073e64fd60e21b81523360048201526001600160a01b037f000000000000000000000000271682deb8c4e0901d1a1550ad2e64d568e69909166024820152604401611344565b6119178282612526565b5050565b60003361192985828561311e565b611934858585612aad565b506001949350505050565b611947612835565b6001600160a01b0381166119965760405162461bcd60e51b815260206004820152601660248201527563616e6e6f74206265207a65726f206164647265737360501b6044820152606401611344565b602a80546001600160a01b0319166001600160a01b0392909216919091179055565b336000908152603f602052604090205460ff16611a095760405162461bcd60e51b815260206004820152600f60248201526e6e6f74206120736d6f6c2067616d6560881b6044820152606401611344565b6119178282613192565b611a1b612835565b602255565b611a28612835565b6001600160a01b03919091166000908152601f60205260409020805460ff1916911515919091179055565b611a5b612835565b6031819055611a686132dd565b50565b6000336115dd818585611a7e83836124f3565b611a8891906142b9565b61288f565b611a95612835565b611a68816133d1565b611aa6612835565b601155565b336000908152603f602052604090205460ff16611afc5760405162461bcd60e51b815260206004820152600f60248201526e6e6f74206120736d6f6c2067616d6560881b6044820152606401611344565b6001600160a01b038216600090815260216020526040902042905561191782826134f5565b611b29612835565b600b805463ffffffff909216620100000265ffffffff000019909216919091179055565b611b55612835565b600a811015611ba65760405162461bcd60e51b815260206004820152601f60248201527f6d61782077616c6c65742063616e6e6f742062652062656c6f7720302e3125006044820152606401611344565b603355565b611bb3612835565b6103e8811115611bfa5760405162461bcd60e51b815260206004820152601260248201527163616e6e6f7420657863656564203130302560701b6044820152606401611344565b600f55565b611c07612835565b6001600160a01b03919091166000908152603f60205260409020805460ff1916911515919091179055565b611c3a612835565b602455565b6001600160a01b031660009081526020819052604090205490565b611c62612835565b611c6c60006135d4565b565b611c76612835565b600755565b611c83612835565b601255565b6060600480546114039061431b565b611c9f612835565b600b805461ffff191661ffff92909216919091179055565b6000611cc233611c3f565b11611d0f5760405162461bcd60e51b815260206004820152601860248201527f6d757374206861766520612062616720746f20776167657200000000000000006044820152606401611344565b600f548161ffff1610158015611d2b57506103e88161ffff1611155b611d925760405162461bcd60e51b815260206004820152603260248201527f6d757374207761676572206265747765656e20746865206d696e696d756d20616044820152716e6420796f757220656e746972652062616760701b6064820152608401611344565b60006103e88261ffff16611da533611c3f565b611daf91906142e5565b611db991906142d1565b336000908152601f602052604090205490915060ff1615611eb257601c54811015611e3e5760405162461bcd60e51b815260206004820152602f60248201527f646f6573206e6f74206d656574206d696e696d756d207768616c6520616d6f7560448201526e6e7420726571756972656d656e747360881b6064820152608401611344565b601d541580611e4f5750601d548111155b611ead5760405162461bcd60e51b815260206004820152602960248201527f65786365656473206d6178696d756d207768616c6520616d6f756e7420726571604482015268756972656d656e747360b81b6064820152608401611344565b611f7f565b601154811015611f165760405162461bcd60e51b815260206004820152602960248201527f646f6573206e6f74206d656574206d696e696d756d20616d6f756e7420726571604482015268756972656d656e747360b81b6064820152608401611344565b6012541580611f2757506012548111155b611f7f5760405162461bcd60e51b815260206004820152602360248201527f65786365656473206d6178696d756d20616d6f756e7420726571756972656d656044820152626e747360e81b6064820152608401611344565b336000908152600d602052604090205415611fd05760405162461bcd60e51b8152602060048201526011602482015270185b1c9958591e481a5b9a5d1a585d1959607a1b6044820152606401611344565b611fdb333083612aad565b80600e6000828254611fed91906142b9565b9091555050600854600a54600954600b546040516305d3b1d360e41b81526004810193909352600160a01b90910467ffffffffffffffff16602483015261ffff8116604483015262010000900463ffffffff166064820152600160848201526000916001600160a01b031690635d3b1d309060a401602060405180830381600087803b15801561207c57600080fd5b505af1158015612090573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b49190614064565b6000818152600c6020908152604080832080546001600160a01b031916339081179091558352600d825280832086905560389091529020805460ff191660011790559050612100613626565b604051828152819033907ff685c2462d152e7aad42dcbbcaac8632ee381f37957c45b7f97959ae0b620215906020015b60405180910390a3505050565b612145612835565b60646121546103e860316142e5565b61215e91906142d1565b8160365461216c91906142e5565b11156121ba5760405162461bcd60e51b815260206004820152601d60248201527f746f74616c2063616e6e6f74206265206d6f7265207468616e203439250000006044820152606401611344565b602355565b600033816121cd82866124f3565b90508381101561222d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401611344565b611934828686840361288f565b6000336115dd818585612aad565b612250612835565b602980546001600160a01b0319166001600160a01b0392909216919091179055565b61227a612835565b601c55565b612287612835565b600a8110156122d85760405162461bcd60e51b815260206004820152601b60248201527f6d61782074782063616e6e6f742062652062656c6f7720302e312500000000006044820152606401611344565b603255565b6122e5612835565b602d805460ff1916911515919091179055565b612300612835565b606461230f6103e860316142e5565b61231991906142d1565b8160365461232791906142e5565b11156123755760405162461bcd60e51b815260206004820152601760248201527f63616e6e6f74206265206d6f7265207468616e203439250000000000000000006044820152606401611344565b603555565b6005546001600160a01b03163314806123955750602d5460ff165b6123e15760405162461bcd60e51b815260206004820152601f60248201527f6e6f74206f776e6572206f72206e756b696e672069732064697361626c6564006044820152606401611344565b6000602b54116124335760405162461bcd60e51b815260206004820152601a60248201527f6d7573742062652061206275696c6420757020746f206e756b650000000000006044820152606401611344565b61243e602b54613759565b6000602b55565b61244d612835565b6030819055611a686132dd565b600080603a544261246b9190614304565b9050612479610e10826142d1565b6124849060016142b9565b91505090565b612492612835565b61249f600a6103e86142d1565b8111156124ee5760405162461bcd60e51b815260206004820152601760248201527f63616e6e6f74206265206d6f7265207468616e203130250000000000000000006044820152606401611344565b603955565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b612526612835565b611917828260008151811061253d5761253d6143b1565b602002602001015161384d565b612552612835565b6040805460ff1916911515919091179055565b61256d612835565b6103e88111156125ba5760405162461bcd60e51b815260206004820152601860248201527763616e6e6f74206265206d6f7265207468616e203130302560401b6044820152606401611344565b602c55565b6125c7612835565b60c88111156126265760405162461bcd60e51b815260206004820152602560248201527f63616e6e6f74206275726e206d6f7265207468616e20323025206465782062616044820152646c616e636560d81b6064820152608401611344565b603d54611a68906103e8908390612645906001600160a01b0316611c3f565b61264f91906142e5565b61265991906142d1565b613759565b612666612835565b6009805467ffffffffffffffff909216600160a01b0267ffffffffffffffff60a01b19909216919091179055565b61269c612835565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6126c6612835565b80156126d257806126d4565b475b90506126e86005546001600160a01b031690565b6001600160a01b03168160405160006040518083038185875af1925050503d80600081146113ee576040519150601f19603f3d011682016040523d82523d6000602084013e6113ee565b61273a612835565b6001600160a01b03811661279f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401611344565b611a68816135d4565b6127b0612835565b6103e88111156127fd5760405162461bcd60e51b815260206004820152601860248201527763616e6e6f74206265206d6f7265207468616e203130302560401b6044820152606401611344565b602555565b61280a612835565b6001600160a01b03919091166000908152602e60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611c6c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611344565b6001600160a01b0383166128f15760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401611344565b6001600160a01b0382166129525760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401611344565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259101612130565b603c546129c39030906001600160a01b03168461288f565b603c546029546001600160a01b039182169163f305d71991849130918791600091829116156129fd576029546001600160a01b0316612a0a565b6005546001600160a01b03165b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015612a6d57600080fd5b505af1158015612a81573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612aa6919061414e565b5050505050565b6000612ac16005546001600160a01b031690565b6001600160a01b0316846001600160a01b03161480612aed57506005546001600160a01b038481169116145b90506000600e54612afd30611c3f565b612b079190614304565b905060006001600160a01b038616301480612b2a57506001600160a01b03851630145b603d549091506000906001600160a01b038881169116148015612b5b5750603c546001600160a01b03878116911614155b603d549091506001600160a01b0387811691161460008280612b7a5750815b6001600160a01b038a1660009081526038602052604081205491925060ff9091161590612ba561245a565b9050828015612bb6575060345460ff165b15612d215760205460009060ff1680612be757506001600160a01b038b166000908152602f602052604090205460ff165b80612c0a57506001600160a01b038c166000908152602f602052604090205460ff165b905060006103e8603254612c1d60025490565b612c2791906142e5565b612c3191906142d1565b90508a81101580612c3f5750815b612c845760405162461bcd60e51b8152602060048201526016602482015275151e08185b5bdd5b9d08195e18d95959081b1a5b5a5d60521b6044820152606401611344565b8615612d1e5760006103e8603354612c9b60025490565b612ca591906142e5565b612caf91906142d1565b90508b612cbb8e611c3f565b612cc591906142b9565b81101580612cd05750825b612d1c5760405162461bcd60e51b815260206004820181905260248201527f546f74616c20616d6f756e74206578636565642077616c6c6574206c696d69746044820152606401611344565b505b50505b8415612ddf576001600160a01b038a166000908152603860205260409020805460ff19169055601e54603b54612d619167ffffffffffffffff16906142b9565b4311612d8f576001600160a01b038a166000908152603e60205260409020805460ff19166001179055612f02565b600081815260276020526040902054891115612dda57600081815260266020908152604080832080546001600160a01b0319166001600160a01b038f16179055602790915290208990555b612f02565b6001600160a01b038a166000908152603e602052604090205460ff1615612e185760405162461bcd60e51b815260040161134490614221565b6001600160a01b038b166000908152603e602052604090205460ff1615612e515760405162461bcd60e51b815260040161134490614221565b336000908152603e602052604090205460ff1615612e815760405162461bcd60e51b815260040161134490614221565b83158015612e8d575085155b8015612e9a575060245489115b15612f02576001600160a01b03808b166000818152603860209081526040808320805460ff19169055938f168252602190528281205491815291909120541015612f02576001600160a01b03808c1660009081526021602052604080822054928d1682529020555b612f0b816133d1565b603954603d546000916103e891612f2a906001600160a01b0316611c3f565b612f3491906142e5565b612f3e91906142d1565b604054909150818910159060ff168015612f605750604054610100900460ff16155b8015612f6a575089155b8015612f735750805b8015612f805750603a5415155b8015612f9a5750603d546001600160a01b038e8116911614155b15612fa857612fa882613af4565b6000603a54600014158015612fba5750855b8015612fc9575060375460ff16155b801561301157506001600160a01b038e166000908152602e602052604090205460ff168061300f57506001600160a01b038d166000908152602e602052604090205460ff165b155b156130a1576103e86036548d61302791906142e5565b61303191906142d1565b905080156130a1578615613096576022546001600160a01b038e1660009081526021602052604090205461306591906142b9565b4210156130805760235461307990826142e5565b9050613096565b84156130965760355461309390826142e5565b90505b6130a18e3083613cdb565b6130b78e8e838f6130b29190614304565b613cdb565b8680156130cd57506001600160a01b038e163014155b1561310e57602c546103e8906130e3838f614304565b6130ed91906142e5565b6130f791906142d1565b602b600082825461310891906142b9565b90915550505b5050505050505050505050505050565b600061312a84846124f3565b905060001981146113ee57818110156131855760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401611344565b6113ee848484840361288f565b6001600160a01b0382166131f25760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401611344565b6001600160a01b038216600090815260208190526040902054818110156132665760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401611344565b6001600160a01b0383166000908152602081905260408120838303905560028054849290613295908490614304565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001612130565b505050565b6031546030546132ed91906142b9565b60365560646132ff6103e860196142e5565b61330991906142d1565b603654111561335a5760405162461bcd60e51b815260206004820152601760248201527f7461782063616e6e6f742062652061626f7665203235250000000000000000006044820152606401611344565b60646133696103e860316142e5565b61337391906142d1565b60355460365461338391906142e5565b1115611c6c5760405162461bcd60e51b815260206004820152601d60248201527f746f74616c2063616e6e6f74206265206d6f7265207468616e203439250000006044820152606401611344565b60006133de600183614304565b90506001821180156133fd575060008181526027602052604090205415155b80156134155750600081815260286020526040902054155b15611917574780156132d85760006103e86025548361343491906142e5565b61343e91906142d1565b600084815260286020908152604080832084905560269091528082205490519293506001600160a01b031691839181818185875af1925050503d80600081146134a3576040519150601f19603f3d011682016040523d82523d6000602084013e6134a8565b606091505b50505080826134b79190614304565b4710156113ee5760405162461bcd60e51b815260206004820152600c60248201526b3a37b79036bab1b41039b2b960a11b6044820152606401611344565b6001600160a01b03821661354b5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401611344565b806002600082825461355d91906142b9565b90915550506001600160a01b0382166000908152602081905260408120805483929061358a9084906142b9565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60075415611c6c576007543410156136805760405162461bcd60e51b815260206004820152601b60248201527f6e6f742061626c6520746f2070617920736572766963652066656500000000006044820152606401611344565b6006546000906001600160a01b0316156136a5576006546001600160a01b03166136b2565b6005546001600160a01b03165b90506000816001600160a01b031660075460405160006040518083038185875af1925050503d8060008114613703576040519150601f19603f3d011682016040523d82523d6000602084013e613708565b606091505b50509050806119175760405162461bcd60e51b815260206004820152601960248201527f636f756c64206e6f7420706179207365727669636520666565000000000000006044820152606401611344565b6000811180156137955750603d5460649061377c906001600160a01b0316611c3f565b6137879060146142e5565b61379191906142d1565b8111155b15611a6857602a546001600160a01b031661dead14156137ca57603d546137c5906001600160a01b031682613192565b6137e7565b603d54602a546137e7916001600160a01b03908116911683613cdb565b603d546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae991600480830192600092919082900301818387803b15801561383157600080fd5b505af1158015613845573d6000803e3d6000fd5b505050505050565b6000828152600c60205260409020546001600160a01b0316806138b25760405162461bcd60e51b815260206004820152601f60248201527f636f696e20666c6970207265636f726420646f6573206e6f74206578697374006044820152606401611344565b6001600160a01b0381166000908152600d60205260408120546010549091906103e8906138df90846142e5565b6138e991906142d1565b905060006138f8600286614371565b15905080156139c05761390c308585612aad565b61391684836134f5565b6013805490600061392683614356565b9190505550816015600082825461393d91906142b9565b90915550506001600160a01b038416600090815260176020526040812080549161396683614356565b90915550506001600160a01b038416600090815260196020526040812080548492906139939084906142b9565b90915550506001600160a01b0384166000908152601b60205260409020805460ff19166001179055613a6d565b6139ca3084613192565b601480549060006139da83614356565b919050555082601660008282546139f191906142b9565b90915550506001600160a01b0384166000908152601860205260408120805491613a1a83614356565b90915550506001600160a01b0384166000908152601a602052604081208054859290613a479084906142b9565b90915550506001600160a01b0384166000908152601b60205260409020805460ff191690555b82600e6000828254613a7f9190614304565b90915550506001600160a01b0384166000818152600d60209081526040808320839055601b82529182902054825187815260ff9091161515918101919091528892917fbd053f1bd6a4301cdbc18d23f8b17f23da7dd4462fd92670cc9c8f1bdd521ebe910160405180910390a3505050505050565b6040805461ff001916610100179055603654603054479160009160029190613b1c90866142e5565b613b2691906142d1565b613b3091906142d1565b90506000613b3e8285614304565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110613b7857613b786143b1565b6001600160a01b03928316602091820292909201810191909152603c54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015613bcc57600080fd5b505afa158015613be0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c049190613efc565b81600181518110613c1757613c176143b1565b6001600160a01b039283166020918202929092010152603c54613c3d913091168461288f565b603c5460405163791ac94760e01b81526001600160a01b039091169063791ac94790613c76908590600090869030904290600401614248565b600060405180830381600087803b158015613c9057600080fd5b505af1158015613ca4573d6000803e3d6000fd5b5050505060008447613cb69190614304565b90508015613cc857613cc88185613ea9565b50506040805461ff001916905550505050565b6001600160a01b038316613d3f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401611344565b6001600160a01b038216613da15760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401611344565b6001600160a01b03831660009081526020819052604090205481811015613e195760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401611344565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290613e509084906142b9565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613e9c91815260200190565b60405180910390a36113ee565b600060365460305484613ebc91906142e5565b613ec691906142d1565b905081156132d8576132d882826129ab565b600060208284031215613eea57600080fd5b8135613ef5816143dd565b9392505050565b600060208284031215613f0e57600080fd5b8151613ef5816143dd565b60008060408385031215613f2c57600080fd5b8235613f37816143dd565b91506020830135613f47816143dd565b809150509250929050565b600080600060608486031215613f6757600080fd5b8335613f72816143dd565b92506020840135613f82816143dd565b929592945050506040919091013590565b60008060408385031215613fa657600080fd5b8235613fb1816143dd565b91506020830135613f47816143f2565b60008060408385031215613fd457600080fd5b8235613fdf816143dd565b946020939093013593505050565b600060208284031215613fff57600080fd5b8135613ef5816143f2565b60006020828403121561401c57600080fd5b8151613ef5816143f2565b60006020828403121561403957600080fd5b813561ffff81168114613ef557600080fd5b60006020828403121561405d57600080fd5b5035919050565b60006020828403121561407657600080fd5b5051919050565b6000806040838503121561409057600080fd5b8235915060208084013567ffffffffffffffff808211156140b057600080fd5b818601915086601f8301126140c457600080fd5b8135818111156140d6576140d66143c7565b8060051b604051601f19603f830116810181811085821117156140fb576140fb6143c7565b604052828152858101935084860182860187018b101561411a57600080fd5b600095505b8386101561413d57803585526001959095019493860193860161411f565b508096505050505050509250929050565b60008060006060848603121561416357600080fd5b8351925060208401519150604084015190509250925092565b60006020828403121561418e57600080fd5b813563ffffffff81168114613ef557600080fd5b6000602082840312156141b457600080fd5b813567ffffffffffffffff81168114613ef557600080fd5b600060208083528351808285015260005b818110156141f9578581018301518582016040015282016141dd565b8181111561420b576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252600d908201526c53746f7020626f7474696e672160981b604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156142985784516001600160a01b031683529383019391830191600101614273565b50506001600160a01b03969096166060850152505050608001529392505050565b600082198211156142cc576142cc614385565b500190565b6000826142e0576142e061439b565b500490565b60008160001904831182151516156142ff576142ff614385565b500290565b60008282101561431657614316614385565b500390565b600181811c9082168061432f57607f821691505b6020821081141561435057634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561436a5761436a614385565b5060010190565b6000826143805761438061439b565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114611a6857600080fd5b8015158114611a6857600080fdfea26469706673582212207298b2297d2b9e7141fa475b9cb044be205d1c8cd144b2efd84f30a9ad8118b564736f6c63430008070033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000271682deb8c4e0901d1a1550ad2e64d568e6990900000000000000000000000000000000000000000000000000000000000000cb000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca8af398995b04c28e9951adb9721ef74c74f93e6a478f39e7e0777be13527e7ef

-----Decoded View---------------
Arg [0] : _vrfCoordinator (address): 0x271682DEB8C4E0901D1a1550aD2e64D568E69909
Arg [1] : _subscriptionId (uint64): 203
Arg [2] : _linkToken (address): 0x514910771AF9Ca656af840dff83E8264EcF986CA
Arg [3] : _keyHash (bytes32): 0x8af398995b04c28e9951adb9721ef74c74f93e6a478f39e7e0777be13527e7ef

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000271682deb8c4e0901d1a1550ad2e64d568e69909
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000cb
Arg [2] : 000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca
Arg [3] : 8af398995b04c28e9951adb9721ef74c74f93e6a478f39e7e0777be13527e7ef


Deployed Bytecode Sourcemap

43271:22819:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;64054:99;;;;;;;;;;-1:-1:-1;64054:99:0;;;;;:::i;:::-;;:::i;:::-;;60534:113;;;;;;;;;;-1:-1:-1;60534:113:0;;;;;:::i;:::-;-1:-1:-1;;;;;60624:15:0;60600:4;60624:15;;;:6;:15;;;;;;;;;60534:113;;;;7317:14:1;;7310:22;7292:41;;7280:2;7265:18;60534:113:0;;;;;;;;15835:353;;;;;;;;;;-1:-1:-1;15835:353:0;;;;;:::i;:::-;;:::i;19320:100::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;44000:71::-;;;;;;;;;;;;;;;;;;;26339:25:1;;;26327:2;26312:18;44000:71:0;26193:177:1;60655:317:0;;;;;;;;;;-1:-1:-1;60655:317:0;;;;;:::i;:::-;;:::i;21671:201::-;;;;;;;;;;-1:-1:-1;21671:201:0;;;;;:::i;:::-;;:::i;45788:57::-;;;;;;;;;;;;;;;;46170:55;;;;;;;;;;-1:-1:-1;46170:55:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;63413:151;;;;;;;;;;-1:-1:-1;63413:151:0;;;;;:::i;:::-;;:::i;44144:39::-;;;;;;;;;;;;;;;;60980:160;;;;;;;;;;-1:-1:-1;60980:160:0;;;;;:::i;:::-;;:::i;64505:92::-;;;;;;;;;;-1:-1:-1;64505:92:0;;;;;:::i;:::-;;:::i;48225:756::-;;;;;;:::i;:::-;;:::i;44704:44::-;;;;;;;;;;;;;;;;46378:41;;;;;;;;;;-1:-1:-1;46378:41:0;;;;-1:-1:-1;;;;;46378:41:0;;;;;;-1:-1:-1;;;;;5684:32:1;;;5666:51;;5654:2;5639:18;46378:41:0;5520:203:1;44582:47:0;;;;;;;;;;-1:-1:-1;44582:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;20440:108;;;;;;;;;;-1:-1:-1;20528:12:0;;20440:108;;45205:47;;;;;;;;;;-1:-1:-1;45205:47:0;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;45205:47:0;;;63709:204;;;;;;;;;;-1:-1:-1;63709:204:0;;;;;:::i;:::-;;:::i;36883:261::-;;;;;;;;;;-1:-1:-1;36883:261:0;;;;;:::i;:::-;;:::i;44790:47::-;;;;;;;;;;-1:-1:-1;44790:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;45457:28;;;;;;;;;;;;;;;;22452:295;;;;;;;;;;-1:-1:-1;22452:295:0;;;;;:::i;:::-;;:::i;65250:181::-;;;;;;;;;;-1:-1:-1;65250:181:0;;;;;:::i;:::-;;:::i;44098:39::-;;;;;;;;;;;;;;;;59481:112;;;;;;;;;;-1:-1:-1;59481:112:0;;;;;:::i;:::-;;:::i;44875:46::-;;;;;;;;;;-1:-1:-1;44875:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;44396:52;;;;;;;;;;-1:-1:-1;44396:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;65439:138;;;;;;;;;;-1:-1:-1;65439:138:0;;;;;:::i;:::-;;:::i;20282:93::-;;;;;;;;;;-1:-1:-1;20282:93:0;;20365:2;27970:36:1;;27958:2;27943:18;20282:93:0;27828:184:1;63572:129:0;;;;;;;;;;-1:-1:-1;63572:129:0;;;;;:::i;:::-;;:::i;61992:113::-;;;;;;;;;;-1:-1:-1;61992:113:0;;;;;:::i;:::-;;:::i;23156:238::-;;;;;;;;;;-1:-1:-1;23156:238:0;;;;;:::i;:::-;;:::i;45721:54::-;;;;;;;;;;;;;;;;15137:28;;;;;;;;;;;;;;;;60164:109;;;;;;;;;;-1:-1:-1;60164:109:0;;;;;:::i;:::-;;:::i;46426:28::-;;;;;;;;;;-1:-1:-1;46426:28:0;;;;-1:-1:-1;;;;;46426:28:0;;;45055:51;;;;;;;;;;;;;;;;44190:27;;;;;;;;;;;;;;;;62986:126;;;;;;;;;;-1:-1:-1;62986:126:0;;;;;:::i;:::-;;:::i;45572:32::-;;;;;;;;;;-1:-1:-1;45572:32:0;;;;;;;;59312:161;;;;;;;;;;-1:-1:-1;59312:161:0;;;;;:::i;:::-;;:::i;44755:28::-;;;;;;;;;;-1:-1:-1;44755:28:0;;;;;;;;;;;27797:18:1;27785:31;;;27767:50;;27755:2;27740:18;44755:28:0;27623:200:1;44455:56:0;;;;;;;;;;-1:-1:-1;44455:56:0;;;;;:::i;:::-;;;;;;;;;;;;;;65977:110;;;;;;;;;;-1:-1:-1;65977:110:0;;;;;:::i;:::-;;:::i;61656:173::-;;;;;;;;;;-1:-1:-1;61656:173:0;;;;;:::i;:::-;;:::i;15099:31::-;;;;;;;;;;-1:-1:-1;15099:31:0;;;;-1:-1:-1;;;;;15099:31:0;;;62772:206;;;;;;;;;;-1:-1:-1;62772:206:0;;;;;:::i;:::-;;:::i;63921:125::-;;;;;;;;;;-1:-1:-1;63921:125:0;;;;;:::i;:::-;;:::i;44224:28::-;;;;;;;;;;;;;;;;65585:150;;;;;;;;;;-1:-1:-1;65585:150:0;;;;;:::i;:::-;;:::i;45996:31::-;;;;;;;;;;-1:-1:-1;45996:31:0;;;;;;;;20611:127;;;;;;;;;;-1:-1:-1;20611:127:0;;;;;:::i;:::-;;:::i;11150:103::-;;;;;;;;;;;;;:::i;15723:104::-;;;;;;;;;;-1:-1:-1;15723:104:0;;;;;:::i;:::-;;:::i;45860:54::-;;;;;;;;;;;;;;;;63120:126;;;;;;;;;;-1:-1:-1;63120:126:0;;;;;:::i;:::-;;:::i;46309:25::-;;;;;;;;;;;;;;;;44298:33;;;;;;;;;;;;;;;;10502:87;;;;;;;;;;-1:-1:-1;10575:6:0;;-1:-1:-1;;;;;10575:6:0;10502:87;;45492:67;;;;;;;;;;;;;;;;44518:57;;;;;;;;;;-1:-1:-1;44518:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;19539:104;;;;;;;;;;;;;:::i;65861:108::-;;;;;;;;;;-1:-1:-1;65861:108:0;;;;;:::i;:::-;;:::i;49040:1926::-;;;;;;:::i;:::-;;:::i;44928:54::-;;;;;;;;;;;;;;;;62384:273;;;;;;;;;;-1:-1:-1;62384:273:0;;;;;:::i;:::-;;:::i;23897:436::-;;;;;;;;;;-1:-1:-1;23897:436:0;;;;;:::i;:::-;;:::i;44259:32::-;;;;;;;;;;;;;;;;20944:193;;;;;;;;;;-1:-1:-1;20944:193:0;;;;;:::i;:::-;;:::i;44338:51::-;;;;;;;;;;-1:-1:-1;44338:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;62665:99;;;;;;;;;;-1:-1:-1;62665:99:0;;;;;:::i;:::-;;:::i;63254:151::-;;;;;;;;;;-1:-1:-1;63254:151:0;;;;;:::i;:::-;;:::i;43899:72::-;;;;;;;;;;;;;;;;46036:45;;;;;;;;;;;;;;;;61835:149;;;;;;;;;;-1:-1:-1;61835:149:0;;;;;:::i;:::-;;:::i;64916:107::-;;;;;;;;;;-1:-1:-1;64916:107:0;;;;;:::i;:::-;;:::i;46511:46::-;;;;;;;;;;-1:-1:-1;46511:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;62113:263;;;;;;;;;;-1:-1:-1;62113:263:0;;;;;:::i;:::-;;:::i;44999:47::-;;;;;;;;;;;;;;;;59601:314;;;;;;;;;;;;;:::i;61541:107::-;;;;;;;;;;-1:-1:-1;61541:107:0;;;;;:::i;:::-;;:::i;60348:178::-;;;;;;;;;;;;;:::i;64161:177::-;;;;;;;;;;-1:-1:-1;64161:177:0;;;;;:::i;:::-;;:::i;21200:151::-;;;;;;;;;;-1:-1:-1;21200:151:0;;;;;:::i;:::-;;:::i;45115:76::-;;;;;;;;;;;;;;;;51153:188;;;;;;;;;;-1:-1:-1;51153:188:0;;;;;:::i;:::-;;:::i;64605:100::-;;;;;;;;;;-1:-1:-1;64605:100:0;;;;;:::i;:::-;;:::i;45319:51::-;;;;;;;;;;-1:-1:-1;45319:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;64713:195;;;;;;;;;;-1:-1:-1;64713:195:0;;;;;:::i;:::-;;:::i;59923:233::-;;;;;;;;;;-1:-1:-1;59923:233:0;;;;;:::i;:::-;;:::i;45259:53::-;;;;;;;;;;-1:-1:-1;45259:53:0;;;;;:::i;:::-;;;;;;;;;;;;;;65743:110;;;;;;;;;;-1:-1:-1;65743:110:0;;;;;:::i;:::-;;:::i;15608:107::-;;;;;;;;;;-1:-1:-1;15608:107:0;;;;;:::i;:::-;;:::i;16196:201::-;;;;;;;;;;-1:-1:-1;16196:201:0;;;;;:::i;:::-;;:::i;11408:::-;;;;;;;;;;-1:-1:-1;11408:201:0;;;;;:::i;:::-;;:::i;65031:211::-;;;;;;;;;;-1:-1:-1;65031:211:0;;;;;:::i;:::-;;:::i;45926:58::-;;;;;;;;;;;;;;;;44638:59;;;;;;;;;;;;;;;;64346:151;;;;;;;;;;-1:-1:-1;64346:151:0;;;;;:::i;:::-;;:::i;64054:99::-;10388:13;:11;:13::i;:::-;64123:12:::1;:22:::0;;-1:-1:-1;;64123:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;64054:99::o;15835:353::-;10388:13;:11;:13::i;:::-;15964:10;15996:11;:55:::1;;16020:31;::::0;-1:-1:-1;;;16020:31:0;;16045:4:::1;16020:31;::::0;::::1;5666:51:1::0;-1:-1:-1;;;;;16020:16:0;::::1;::::0;::::1;::::0;5639:18:1;;16020:31:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15996:55;;;16010:7;15996:55;15986:65;;16080:1;16070:7;:11;16062:74;;;::::0;-1:-1:-1;;;16062:74:0;;13460:2:1;16062:74:0::1;::::0;::::1;13442:21:1::0;13499:2;13479:18;;;13472:30;13538:34;13518:18;;;13511:62;-1:-1:-1;;;13589:18:1;;;13582:48;13647:19;;16062:74:0::1;;;;;;;;;16147:6;-1:-1:-1::0;;;;;16147:15:0::1;;16163:7;10575:6:::0;;-1:-1:-1;;;;;10575:6:0;;10502:87;16163:7:::1;16147:33;::::0;-1:-1:-1;;;;;;16147:33:0::1;::::0;;;;;;-1:-1:-1;;;;;6453:32:1;;;16147:33:0::1;::::0;::::1;6435:51:1::0;6502:18;;;6495:34;;;6408:18;;16147:33:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15930:258;15835:353:::0;;:::o;19320:100::-;19374:13;19407:5;19400:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19320:100;:::o;60655:317::-;10388:13;:11;:13::i;:::-;60751:15:::1;::::0;-1:-1:-1;;;;;60732:35:0;;::::1;60751:15:::0;::::1;60732:35;;60724:71;;;::::0;-1:-1:-1;;;60724:71:0;;16463:2:1;60724:71:0::1;::::0;::::1;16445:21:1::0;16502:2;16482:18;;;16475:30;16541:25;16521:18;;;16514:53;16584:18;;60724:71:0::1;16261:347:1::0;60724:71:0::1;60825:13;::::0;-1:-1:-1;;;;;60814:24:0;;::::1;60825:13:::0;::::1;60814:24;;60806:58;;;::::0;-1:-1:-1;;;60806:58:0;;17885:2:1;60806:58:0::1;::::0;::::1;17867:21:1::0;17924:2;17904:18;;;17897:30;-1:-1:-1;;;17943:18:1;;;17936:51;18004:18;;60806:58:0::1;17683:345:1::0;60806:58:0::1;-1:-1:-1::0;;;;;60884:15:0;::::1;;::::0;;;:6:::1;:15;::::0;;;;;::::1;;60883:16;60875:56;;;::::0;-1:-1:-1;;;60875:56:0;;18235:2:1;60875:56:0::1;::::0;::::1;18217:21:1::0;18274:2;18254:18;;;18247:30;18313:29;18293:18;;;18286:57;18360:18;;60875:56:0::1;18033:351:1::0;60875:56:0::1;-1:-1:-1::0;;;;;60942:15:0::1;;::::0;;;:6:::1;:15;::::0;;;;:22;;-1:-1:-1;;60942:22:0::1;60960:4;60942:22;::::0;;60655:317::o;21671:201::-;21754:4;9133:10;21810:32;9133:10;21826:7;21835:6;21810:8;:32::i;:::-;-1:-1:-1;21860:4:0;;21671:201;-1:-1:-1;;;21671:201:0:o;63413:151::-;10388:13;:11;:13::i;:::-;63517:29:::1;:39:::0;63413:151::o;60980:160::-;10388:13;:11;:13::i;:::-;-1:-1:-1;;;;;61055:15:0;::::1;;::::0;;;:6:::1;:15;::::0;;;;;::::1;;61047:51;;;::::0;-1:-1:-1;;;61047:51:0;;21219:2:1;61047:51:0::1;::::0;::::1;21201:21:1::0;21258:2;21238:18;;;21231:30;21297:25;21277:18;;;21270:53;21340:18;;61047:51:0::1;21017:347:1::0;61047:51:0::1;-1:-1:-1::0;;;;;61109:15:0::1;61127:5;61109:15:::0;;;:6:::1;:15;::::0;;;;:23;;-1:-1:-1;;61109:23:0::1;::::0;;60980:160::o;64505:92::-;10388:13;:11;:13::i;:::-;64570:9:::1;:19:::0;;-1:-1:-1;;64570:19:0::1;::::0;::::1;;::::0;;;::::1;::::0;;64505:92::o;48225:756::-;10388:13;:11;:13::i;:::-;43447:4:::1;48305:8;:31;;;;48297:66;;;::::0;-1:-1:-1;;;48297:66:0;;21571:2:1;48297:66:0::1;::::0;::::1;21553:21:1::0;21610:2;21590:18;;;21583:30;-1:-1:-1;;;21629:18:1;;;21622:52;21691:18;;48297:66:0::1;21369:346:1::0;48297:66:0::1;48382:10;::::0;:15;48374:44:::1;;;::::0;-1:-1:-1;;;48374:44:0;;19722:2:1;48374:44:0::1;::::0;::::1;19704:21:1::0;19761:2;19741:18;;;19734:30;-1:-1:-1;;;19780:18:1;;;19773:46;19836:18;;48374:44:0::1;19520:340:1::0;48374:44:0::1;48437:13;::::0;::::1;::::0;;:30:::1;;;48466:1;48454:9;:13;48437:30;48429:66;;;::::0;-1:-1:-1;;;48429:66:0;;13108:2:1;48429:66:0::1;::::0;::::1;13090:21:1::0;13147:2;13127:18;;;13120:30;13186:25;13166:18;;;13159:53;13229:18;;48429:66:0::1;12906:347:1::0;48429:66:0::1;48506:10;:14:::0;;-1:-1:-1;;48506:14:0::1;::::0;;48531:9:::1;:16:::0;;-1:-1:-1;;48531:16:0::1;48506:14:::0;48531:16:::1;::::0;;48519:1:::1;43447:4;48581:24;::::0;::::1;:13;20528:12:::0;;;20440:108;48581:13:::1;:24;;;;:::i;:::-;48580:48;;;;:::i;:::-;48560:68;;48639:17;48675:9;48659:13;20528:12:::0;;;20440:108;48659:13:::1;:25;;;;:::i;:::-;48639:45:::0;-1:-1:-1;48699:13:0;;48695:74:::1;;48729:28;48736:9;48747;48729:6;:28::i;:::-;48783:13:::0;;48779:90:::1;;48813:44;48831:4;48838:7;10575:6:::0;;-1:-1:-1;;;;;10575:6:0;;10502:87;48838:7:::1;48847:9;48813;:44::i;:::-;-1:-1:-1::0;;48892:15:0::1;48879:10;:28:::0;-1:-1:-1;48933:12:0::1;48918;:27:::0;48956:9:::1;:17:::0;;-1:-1:-1;;48956:17:0::1;::::0;;48225:756::o;63709:204::-;10388:13;:11;:13::i;:::-;43447:4:::1;63802:11;:34;;63794:65;;;::::0;-1:-1:-1;;;63794:65:0;;9282:2:1;63794:65:0::1;::::0;::::1;9264:21:1::0;9321:2;9301:18;;;9294:30;-1:-1:-1;;;9340:18:1;;;9333:48;9398:18;;63794:65:0::1;9080:342:1::0;63794:65:0::1;63870:21;:35:::0;63709:204::o;36883:261::-;36983:10;-1:-1:-1;;;;;36997:14:0;36983:28;;36979:111;;37029:53;;-1:-1:-1;;;37029:53:0;;37055:10;37029:53;;;6164:34:1;-1:-1:-1;;;;;37067:14:0;6234:15:1;6214:18;;;6207:43;6099:18;;37029:53:0;5952:304:1;36979:111:0;37096:42;37115:9;37126:11;37096:18;:42::i;:::-;36883:261;;:::o;22452:295::-;22583:4;9133:10;22641:38;22657:4;9133:10;22672:6;22641:15;:38::i;:::-;22690:27;22700:4;22706:2;22710:6;22690:9;:27::i;:::-;-1:-1:-1;22735:4:0;;22452:295;-1:-1:-1;;;;22452:295:0:o;65250:181::-;10388:13;:11;:13::i;:::-;-1:-1:-1;;;;;65334:24:0;::::1;65326:59;;;::::0;-1:-1:-1;;;65326:59:0;;21922:2:1;65326:59:0::1;::::0;::::1;21904:21:1::0;21961:2;21941:18;;;21934:30;-1:-1:-1;;;21980:18:1;;;21973:52;22042:18;;65326:59:0::1;21720:346:1::0;65326:59:0::1;65396:14;:27:::0;;-1:-1:-1;;;;;;65396:27:0::1;-1:-1:-1::0;;;;;65396:27:0;;;::::1;::::0;;;::::1;::::0;;65250:181::o;59481:112::-;9133:10;46987:28;;;;:14;:28;;;;;;;;46979:56;;;;-1:-1:-1;;;46979:56:0;;11954:2:1;46979:56:0;;;11936:21:1;11993:2;11973:18;;;11966:30;-1:-1:-1;;;12012:18:1;;;12005:45;12067:18;;46979:56:0;11752:339:1;46979:56:0;59562:23:::1;59568:7;59577;59562:5;:23::i;65439:138::-:0;10388:13;:11;:13::i;:::-;65529:29:::1;:40:::0;65439:138::o;63572:129::-;10388:13;:11;:13::i;:::-;-1:-1:-1;;;;;63660:22:0;;;::::1;;::::0;;;:15:::1;:22;::::0;;;;:33;;-1:-1:-1;;63660:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;63572:129::o;61992:113::-;10388:13;:11;:13::i;:::-;62057:8:::1;:15:::0;;;62083:14:::1;:12;:14::i;:::-;61992:113:::0;:::o;23156:238::-;23244:4;9133:10;23300:64;9133:10;23316:7;23353:10;23325:25;9133:10;23316:7;23325:9;:25::i;:::-;:38;;;;:::i;:::-;23300:8;:64::i;60164:109::-;10388:13;:11;:13::i;:::-;60234:31:::1;60259:5;60234:24;:31::i;62986:126::-:0;10388:13;:11;:13::i;:::-;63070:24:::1;:34:::0;62986:126::o;59312:161::-;9133:10;46987:28;;;;:14;:28;;;;;;;;46979:56;;;;-1:-1:-1;;;46979:56:0;;11954:2:1;46979:56:0;;;11936:21:1;11993:2;11973:18;;;11966:30;-1:-1:-1;;;12012:18:1;;;12005:45;12067:18;;46979:56:0;11752:339:1;46979:56:0;-1:-1:-1;;;;;59393:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;59416:15:::1;59393:38:::0;;59442:23:::1;59405:7:::0;59457;59442:5:::1;:23::i;65977:110::-:0;10388:13;:11;:13::i;:::-;66052:20:::1;:27:::0;;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;66052:27:0;;::::1;::::0;;;::::1;::::0;;65977:110::o;61656:173::-;10388:13;:11;:13::i;:::-;61750:2:::1;61736:10;:16;;61728:60;;;::::0;-1:-1:-1;;;61728:60:0;;11594:2:1;61728:60:0::1;::::0;::::1;11576:21:1::0;11633:2;11613:18;;;11606:30;11672:33;11652:18;;;11645:61;11723:18;;61728:60:0::1;11392:355:1::0;61728:60:0::1;61799:9;:22:::0;61656:173::o;62772:206::-;10388:13;:11;:13::i;:::-;43447:4:::1;62866:11;:34;;62858:65;;;::::0;-1:-1:-1;;;62858:65:0;;9282:2:1;62858:65:0::1;::::0;::::1;9264:21:1::0;9321:2;9301:18;;;9294:30;-1:-1:-1;;;9340:18:1;;;9333:48;9398:18;;62858:65:0::1;9080:342:1::0;62858:65:0::1;62934:22;:36:::0;62772:206::o;63921:125::-;10388:13;:11;:13::i;:::-;-1:-1:-1;;;;;64007:21:0;;;::::1;;::::0;;;:14:::1;:21;::::0;;;;:31;;-1:-1:-1;;64007:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;63921:125::o;65585:150::-;10388:13;:11;:13::i;:::-;65681:36:::1;:46:::0;65585:150::o;20611:127::-;-1:-1:-1;;;;;20712:18:0;20685:7;20712:18;;;;;;;;;;;;20611:127::o;11150:103::-;10388:13;:11;:13::i;:::-;11215:30:::1;11242:1;11215:18;:30::i;:::-;11150:103::o:0;15723:104::-;10388:13;:11;:13::i;:::-;15796::::1;:23:::0;15723:104::o;63120:126::-;10388:13;:11;:13::i;:::-;63204:24:::1;:34:::0;63120:126::o;19539:104::-;19595:13;19628:7;19621:14;;;;;:::i;65861:108::-;10388:13;:11;:13::i;:::-;65935::::1;:26:::0;;-1:-1:-1;;65935:26:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;65861:108::o;49040:1926::-;49135:1;49111:21;49121:10;49111:9;:21::i;:::-;:25;49103:62;;;;-1:-1:-1;;;49103:62:0;;23794:2:1;49103:62:0;;;23776:21:1;23833:2;23813:18;;;23806:30;23872:26;23852:18;;;23845:54;23916:18;;49103:62:0;23592:348:1;49103:62:0;49210:22;;49198:8;:34;;;;:69;;;;;43447:4;49236:8;:31;;;;49198:69;49176:169;;;;-1:-1:-1;;;49176:169:0;;16044:2:1;49176:169:0;;;16026:21:1;16083:2;16063:18;;;16056:30;16122:34;16102:18;;;16095:62;-1:-1:-1;;;16173:18:1;;;16166:48;16231:19;;49176:169:0;15842:414:1;49176:169:0;49356:25;43447:4;49409:8;49385:32;;:21;49395:10;49385:9;:21::i;:::-;:32;;;;:::i;:::-;49384:65;;;;:::i;:::-;49482:10;49466:27;;;;:15;:27;;;;;;49356:93;;-1:-1:-1;49466:27:0;;49462:830;;;49557:29;;49536:17;:50;;49510:159;;;;-1:-1:-1;;;49510:159:0;;24147:2:1;49510:159:0;;;24129:21:1;24186:2;24166:18;;;24159:30;24225:34;24205:18;;;24198:62;-1:-1:-1;;;24276:18:1;;;24269:45;24331:19;;49510:159:0;23945:411:1;49510:159:0;49710:29;;:34;;:105;;;49786:29;;49765:17;:50;;49710:105;49684:208;;;;-1:-1:-1;;;49684:208:0;;19312:2:1;49684:208:0;;;19294:21:1;19351:2;19331:18;;;19324:30;19390:34;19370:18;;;19363:62;-1:-1:-1;;;19441:18:1;;;19434:39;19490:19;;49684:208:0;19110:405:1;49684:208:0;49462:830;;;49972:24;;49951:17;:45;;49925:148;;;;-1:-1:-1;;;49925:148:0;;10033:2:1;49925:148:0;;;10015:21:1;10072:2;10052:18;;;10045:30;10111:34;10091:18;;;10084:62;-1:-1:-1;;;10162:18:1;;;10155:39;10211:19;;49925:148:0;9831:405:1;49925:148:0;50114:24;;:29;;:95;;;50185:24;;50164:17;:45;;50114:95;50088:192;;;;-1:-1:-1;;;50088:192:0;;20067:2:1;50088:192:0;;;20049:21:1;20106:2;20086:18;;;20079:30;20145:34;20125:18;;;20118:62;-1:-1:-1;;;20196:18:1;;;20189:33;20239:19;;50088:192:0;19865:399:1;50088:192:0;50327:10;50310:28;;;;:16;:28;;;;;;:33;50302:63;;;;-1:-1:-1;;;50302:63:0;;20471:2:1;50302:63:0;;;20453:21:1;20510:2;20490:18;;;20483:30;-1:-1:-1;;;20529:18:1;;;20522:47;20586:18;;50302:63:0;20269:341:1;50302:63:0;50378:55;50388:10;50408:4;50415:17;50378:9;:55::i;:::-;50461:17;50444:13;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;;50511:8:0;;50553:11;;50579:18;;50612:13;;50511:184;;-1:-1:-1;;;50511:184:0;;;;;7595:25:1;;;;-1:-1:-1;;;50579:18:0;;;;;7636::1;;;7629:59;50612:13:0;;;7729:18:1;;;7722:43;50640:20:0;;;;;7781:18:1;;;7774:51;50511:8:0;7841:19:1;;;7834:44;50491:17:0;;-1:-1:-1;;;;;50511:8:0;;:27;;7567:19:1;;50511:184:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50708:21;;;;:10;:21;;;;;;;;:34;;-1:-1:-1;;;;;;50708:34:0;50732:10;50708:34;;;;;;50753:28;;:16;:28;;;;;:48;;;50812:23;:35;;;;;:42;;-1:-1:-1;;50812:42:0;50708:34;50812:42;;;50491:204;-1:-1:-1;50867:16:0;:14;:16::i;:::-;50899:59;;26339:25:1;;;50929:9:0;;50917:10;;50899:59;;26327:2:1;26312:18;50899:59:0;;;;;;;;49092:1874;;49040:1926;:::o;62384:273::-;10388:13;:11;:13::i;:::-;62542:3:::1;62514:24;43447:4;62536:2;62514:24;:::i;:::-;62513:32;;;;:::i;:::-;62504:5;62492:9;;:17;;;;:::i;:::-;:53;;62470:132;;;::::0;-1:-1:-1;;;62470:132:0;;22679:2:1;62470:132:0::1;::::0;::::1;22661:21:1::0;22718:2;22698:18;;;22691:30;22757:31;22737:18;;;22730:59;22806:18;;62470:132:0::1;22477:353:1::0;62470:132:0::1;62613:28;:36:::0;62384:273::o;23897:436::-;23990:4;9133:10;23990:4;24073:25;9133:10;24090:7;24073:9;:25::i;:::-;24046:52;;24137:15;24117:16;:35;;24109:85;;;;-1:-1:-1;;;24109:85:0;;25629:2:1;24109:85:0;;;25611:21:1;25668:2;25648:18;;;25641:30;25707:34;25687:18;;;25680:62;-1:-1:-1;;;25758:18:1;;;25751:35;25803:19;;24109:85:0;25427:401:1;24109:85:0;24230:60;24239:5;24246:7;24274:15;24255:16;:34;24230:8;:60::i;20944:193::-;21023:4;9133:10;21079:28;9133:10;21096:2;21100:6;21079:9;:28::i;62665:99::-;10388:13;:11;:13::i;:::-;62735:11:::1;:21:::0;;-1:-1:-1;;;;;;62735:21:0::1;-1:-1:-1::0;;;;;62735:21:0;;;::::1;::::0;;;::::1;::::0;;62665:99::o;63254:151::-;10388:13;:11;:13::i;:::-;63358:29:::1;:39:::0;63254:151::o;61835:149::-;10388:13;:11;:13::i;:::-;61917:2:::1;61907:6;:12;;61899:52;;;::::0;-1:-1:-1;;;61899:52:0;;14578:2:1;61899:52:0::1;::::0;::::1;14560:21:1::0;14617:2;14597:18;;;14590:30;14656:29;14636:18;;;14629:57;14703:18;;61899:52:0::1;14376:351:1::0;61899:52:0::1;61962:5;:14:::0;61835:149::o;64916:107::-;10388:13;:11;:13::i;:::-;64989::::1;:26:::0;;-1:-1:-1;;64989:26:0::1;::::0;::::1;;::::0;;;::::1;::::0;;64916:107::o;62113:263::-;10388:13;:11;:13::i;:::-;62269:3:::1;62241:24;43447:4;62263:2;62241:24;:::i;:::-;62240:32;;;;:::i;:::-;62231:5;62219:9;;:17;;;;:::i;:::-;:53;;62197:126;;;::::0;-1:-1:-1;;;62197:126:0;;25277:2:1;62197:126:0::1;::::0;::::1;25259:21:1::0;25316:2;25296:18;;;25289:30;25355:25;25335:18;;;25328:53;25398:18;;62197:126:0::1;25075:347:1::0;62197:126:0::1;62334:26;:34:::0;62113:263::o;59601:314::-;10575:6;;-1:-1:-1;;;;;10575:6:0;59677:10;:21;;:38;;-1:-1:-1;59702:13:0;;;;59677:38;59655:119;;;;-1:-1:-1;;;59655:119:0;;18591:2:1;59655:119:0;;;18573:21:1;18630:2;18610:18;;;18603:30;18669:33;18649:18;;;18642:61;18720:18;;59655:119:0;18389:355:1;59655:119:0;59809:1;59793:13;;:17;59785:56;;;;-1:-1:-1;;;59785:56:0;;8927:2:1;59785:56:0;;;8909:21:1;8966:2;8946:18;;;8939:30;9005:28;8985:18;;;8978:56;9051:18;;59785:56:0;8725:350:1;59785:56:0;59852:27;59865:13;;59852:12;:27::i;:::-;59906:1;59890:13;:17;59601:314::o;61541:107::-;10388:13;:11;:13::i;:::-;61603:5:::1;:12:::0;;;61626:14:::1;:12;:14::i;60348:178::-:0;60388:7;60408:26;60455:10;;60437:15;:28;;;;:::i;:::-;60408:57;-1:-1:-1;60488:29:0;43386:7;60408:57;60488:29;:::i;:::-;60483:35;;:1;:35;:::i;:::-;60476:42;;;60348:178;:::o;64161:177::-;10388:13;:11;:13::i;:::-;64247:24:::1;64269:2;43447:4;64247:24;:::i;:::-;64238:5;:33;;64230:69;;;::::0;-1:-1:-1;;;64230:69:0;;23037:2:1;64230:69:0::1;::::0;::::1;23019:21:1::0;23076:2;23056:18;;;23049:30;23115:25;23095:18;;;23088:53;23158:18;;64230:69:0::1;22835:347:1::0;64230:69:0::1;64310:12;:20:::0;64161:177::o;21200:151::-;-1:-1:-1;;;;;21316:18:0;;;21289:7;21316:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;21200:151::o;51153:188::-;10388:13;:11;:13::i;:::-;51291:42:::1;51307:9;51318:11;51330:1;51318:14;;;;;;;;:::i;:::-;;;;;;;51291:15;:42::i;64605:100::-:0;10388:13;:11;:13::i;:::-;64674:12:::1;:23:::0;;-1:-1:-1;;64674:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;64605:100::o;64713:195::-;10388:13;:11;:13::i;:::-;43447:4:::1;64800:8;:31;;64792:68;;;::::0;-1:-1:-1;;;64792:68:0;;17532:2:1;64792:68:0::1;::::0;::::1;17514:21:1::0;17571:2;17551:18;;;17544:30;-1:-1:-1;;;17590:18:1;;;17583:54;17654:18;;64792:68:0::1;17330:348:1::0;64792:68:0::1;64871:18;:29:::0;64713:195::o;59923:233::-;10388:13;:11;:13::i;:::-;60019:3:::1;60007:8;:15;;59999:65;;;::::0;-1:-1:-1;;;59999:65:0;;11188:2:1;59999:65:0::1;::::0;::::1;11170:21:1::0;11227:2;11207:18;;;11200:30;11266:34;11246:18;;;11239:62;-1:-1:-1;;;11317:18:1;;;11310:35;11362:19;;59999:65:0::1;10986:401:1::0;59999:65:0::1;60099:13;::::0;60075:73:::1;::::0;43447:4:::1;::::0;60116:8;;60089:24:::1;::::0;-1:-1:-1;;;;;60099:13:0::1;60089:9;:24::i;:::-;:35;;;;:::i;:::-;60088:59;;;;:::i;:::-;60075:12;:73::i;65743:110::-:0;10388:13;:11;:13::i;:::-;65818:18:::1;:27:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;;65818:27:0::1;-1:-1:-1::0;;;;65818:27:0;;::::1;::::0;;;::::1;::::0;;65743:110::o;15608:107::-;10388:13;:11;:13::i;:::-;15678:8:::1;:29:::0;;-1:-1:-1;;;;;;15678:29:0::1;-1:-1:-1::0;;;;;15678:29:0;;;::::1;::::0;;;::::1;::::0;;15608:107::o;16196:201::-;10388:13;:11;:13::i;:::-;16280:15;;:52:::1;;16322:10;16280:52;;;16298:21;16280:52;16267:65;;16351:7;10575:6:::0;;-1:-1:-1;;;;;10575:6:0;;10502:87;16351:7:::1;-1:-1:-1::0;;;;;16343:21:0::1;16373:10;16343:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11408:201:::0;10388:13;:11;:13::i;:::-;-1:-1:-1;;;;;11497:22:0;::::1;11489:73;;;::::0;-1:-1:-1;;;11489:73:0;;12298:2:1;11489:73:0::1;::::0;::::1;12280:21:1::0;12337:2;12317:18;;;12310:30;12376:34;12356:18;;;12349:62;-1:-1:-1;;;12427:18:1;;;12420:36;12473:19;;11489:73:0::1;12096:402:1::0;11489:73:0::1;11573:28;11592:8;11573:18;:28::i;65031:211::-:0;10388:13;:11;:13::i;:::-;43447:4:::1;65126:8;:31;;65118:68;;;::::0;-1:-1:-1;;;65118:68:0;;17532:2:1;65118:68:0::1;::::0;::::1;17514:21:1::0;17571:2;17551:18;;;17544:30;-1:-1:-1;;;17590:18:1;;;17583:54;17654:18;;65118:68:0::1;17330:348:1::0;65118:68:0::1;65197:26;:37:::0;65031:211::o;64346:151::-;10388:13;:11;:13::i;:::-;-1:-1:-1;;;;;64452:23:0;;;::::1;;::::0;;;:14:::1;:23;::::0;;;;:37;;-1:-1:-1;;64452:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;64346:151::o;10667:132::-;10575:6;;-1:-1:-1;;;;;10575:6:0;9133:10;10731:23;10723:68;;;;-1:-1:-1;;;10723:68:0;;18951:2:1;10723:68:0;;;18933:21:1;;;18970:18;;;18963:30;19029:34;19009:18;;;19002:62;19081:18;;10723:68:0;18749:356:1;27522:380:0;-1:-1:-1;;;;;27658:19:0;;27650:68;;;;-1:-1:-1;;;27650:68:0;;23389:2:1;27650:68:0;;;23371:21:1;23428:2;23408:18;;;23401:30;23467:34;23447:18;;;23440:62;-1:-1:-1;;;23518:18:1;;;23511:34;23562:19;;27650:68:0;23187:400:1;27650:68:0;-1:-1:-1;;;;;27737:21:0;;27729:68;;;;-1:-1:-1;;;27729:68:0;;12705:2:1;27729:68:0;;;12687:21:1;12744:2;12724:18;;;12717:30;12783:34;12763:18;;;12756:62;-1:-1:-1;;;12834:18:1;;;12827:32;12876:19;;27729:68:0;12503:398:1;27729:68:0;-1:-1:-1;;;;;27810:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;27862:32;;26339:25:1;;;27862:32:0;;26312:18:1;27862:32:0;26193:177:1;57349:398:0;57456:15;;57424:62;;57441:4;;-1:-1:-1;;;;;57456:15:0;57474:11;57424:8;:62::i;:::-;57497:15;;57649:11;;-1:-1:-1;;;;;57497:15:0;;;;:31;;57537:9;;57571:4;;57591:11;;57497:15;;;;57649:11;:25;:49;;57687:11;;-1:-1:-1;;;;;57687:11:0;57649:49;;;10575:6;;-1:-1:-1;;;;;10575:6:0;57677:7;57497:242;;;;;;-1:-1:-1;;;;;;57497:242:0;;;-1:-1:-1;;;;;6899:15:1;;;57497:242:0;;;6881:34:1;6931:18;;;6924:34;;;;6974:18;;;6967:34;;;;7017:18;;;7010:34;7081:15;;;7060:19;;;7053:44;57713:15:0;7113:19:1;;;7106:35;6815:19;;57497:242:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;57349:398;;:::o;52714:3718::-;52855:13;52881:7;10575:6;;-1:-1:-1;;;;;10575:6:0;;10502:87;52881:7;-1:-1:-1;;;;;52871:17:0;:6;-1:-1:-1;;;;;52871:17:0;;:41;;;-1:-1:-1;10575:6:0;;-1:-1:-1;;;;;52892:20:0;;;10575:6;;52892:20;52871:41;52855:57;;52923:28;52981:13;;52954:24;52972:4;52954:9;:24::i;:::-;:40;;;;:::i;:::-;52923:71;-1:-1:-1;53007:16:0;-1:-1:-1;;;;;53026:23:0;;53044:4;53026:23;;:53;;-1:-1:-1;;;;;;53053:26:0;;53074:4;53053:26;53026:53;53114:13;;53007:72;;-1:-1:-1;53090:11:0;;-1:-1:-1;;;;;53104:23:0;;;53114:13;;53104:23;:64;;;;-1:-1:-1;53152:15:0;;-1:-1:-1;;;;;53131:37:0;;;53152:15;;53131:37;;53104:64;53207:13;;53090:78;;-1:-1:-1;;;;;;53194:26:0;;;53207:13;;53194:26;53179:12;53090:78;;53246:17;;;53256:7;53246:17;-1:-1:-1;;;;;53297:31:0;;53274:19;53297:31;;;:23;:31;;;;;;53231:32;;-1:-1:-1;53297:31:0;;;;53296:32;;53366:9;:7;:9::i;:::-;53339:36;;53392:7;:23;;;;-1:-1:-1;53403:12:0;;;;53392:23;53388:539;;;53450:9;;53432:15;;53450:9;;;:36;;-1:-1:-1;;;;;;53463:23:0;;;;;;:12;:23;;;;;;;;53450:36;:60;;;-1:-1:-1;;;;;;53490:20:0;;;;;;:12;:20;;;;;;;;53450:60;53432:78;;53525:14;43447:4;53558:5;;53542:13;20528:12;;;20440:108;53542:13;:21;;;;:::i;:::-;:43;;;;:::i;:::-;53525:60;;53618:6;53608;:16;;:30;;;;53628:10;53608:30;53600:65;;;;-1:-1:-1;;;53600:65:0;;15341:2:1;53600:65:0;;;15323:21:1;15380:2;15360:18;;;15353:30;-1:-1:-1;;;15399:18:1;;;15392:52;15461:18;;53600:65:0;15139:346:1;53600:65:0;53684:6;53680:236;;;53711:18;43447:4;53748:9;;53732:13;20528:12;;;20440:108;53732:13;:25;;;;:::i;:::-;:47;;;;:::i;:::-;53711:68;;53843:6;53820:20;53830:9;53820;:20::i;:::-;:29;;;;:::i;:::-;53806:10;:43;;:57;;;;53853:10;53806:57;53798:102;;;;-1:-1:-1;;;53798:102:0;;17171:2:1;53798:102:0;;;17153:21:1;;;17190:18;;;17183:30;17249:34;17229:18;;;17222:62;17301:18;;53798:102:0;16969:356:1;53798:102:0;53692:224;53680:236;53417:510;;53388:539;53941:6;53937:979;;;-1:-1:-1;;;;;53964:34:0;;54001:5;53964:34;;;:23;:34;;;;;:42;;-1:-1:-1;;53964:42:0;;;54056:10;;54041:12;;:25;;54056:10;;;54041:25;:::i;:::-;54025:12;:41;54021:304;;-1:-1:-1;;;;;54087:17:0;;;;;;:6;:17;;;;;:24;;-1:-1:-1;;54087:24:0;54107:4;54087:24;;;53937:979;;54021:304;54146:36;;;;:18;:36;;;;;;54137:45;;54133:192;;;54203:30;;;;:12;:30;;;;;;;;:42;;-1:-1:-1;;;;;;54203:42:0;-1:-1:-1;;;;;54203:42:0;;;;;54264:18;:36;;;;;:45;;;54133:192;53937:979;;;-1:-1:-1;;;;;54366:17:0;;;;;;:6;:17;;;;;;;;54365:18;54357:44;;;;-1:-1:-1;;;54357:44:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;54425:14:0;;;;;;:6;:14;;;;;;;;54424:15;54416:41;;;;-1:-1:-1;;;54416:41:0;;;;;;;:::i;:::-;9133:10;54481:20;;;;:6;:20;;;;;;;;54480:21;54472:47;;;;-1:-1:-1;;;54472:47:0;;;;;;;:::i;:::-;54559:7;54558:8;:37;;;;;54584:11;54583:12;54558:37;:99;;;;;54621:36;;54612:6;:45;54558:99;54536:369;;;-1:-1:-1;;;;;54692:34:0;;;54729:5;54692:34;;;:23;:34;;;;;;;;:42;;-1:-1:-1;;54692:42:0;;;54782:19;;;;;:11;:19;;;;;;54757:22;;;;;;;;:44;54753:137;;;-1:-1:-1;;;;;54851:19:0;;;;;;;:11;:19;;;;;;;54826:22;;;;;;;:44;54753:137;54928:42;54953:16;54928:24;:42::i;:::-;55030:12;;55013:13;;54983:16;;43447:4;;55003:24;;-1:-1:-1;;;;;55013:13:0;55003:9;:24::i;:::-;:39;;;;:::i;:::-;55002:72;;;;:::i;:::-;55162:12;;54983:91;;-1:-1:-1;55101:32:0;;;;;55162:12;;:39;;;;-1:-1:-1;55192:9:0;;;;;;;55191:10;55162:39;:65;;;;;55219:8;55218:9;55162:65;:90;;;;;55244:8;55162:90;:122;;;;-1:-1:-1;55269:10:0;;:15;;55162:122;:162;;;;-1:-1:-1;55311:13:0;;-1:-1:-1;;;;;55301:23:0;;;55311:13;;55301:23;;55162:162;55144:234;;;55351:15;55357:8;55351:5;:15::i;:::-;55390:11;55434:10;;55448:1;55434:15;;:39;;;;;55466:7;55434:39;:66;;;;-1:-1:-1;55491:9:0;;;;55490:10;55434:66;:137;;;;-1:-1:-1;;;;;;55519:22:0;;;;;;:14;:22;;;;;;;;;:51;;-1:-1:-1;;;;;;55545:25:0;;;;;;:14;:25;;;;;;;;55519:51;55517:54;55434:137;55416:767;;;43447:4;55614:9;;55605:6;:18;;;;:::i;:::-;55604:42;;;;:::i;:::-;55598:48;-1:-1:-1;55665:7:0;;55661:511;;55697:7;55693:402;;;55827:29;;-1:-1:-1;;;;;55802:22:0;;;;;;:11;:22;;;;;;:54;;55827:29;55802:54;:::i;:::-;55759:15;:97;55729:347;;;55914:28;;55907:35;;;;:::i;:::-;;;55729:347;;;55976:14;55972:104;;;56026:26;;56019:33;;;;:::i;:::-;;;55972:104;56113:43;56129:6;56145:4;56152:3;56113:15;:43::i;:::-;56195:48;56211:6;56219:9;56239:3;56230:6;:12;;;;:::i;:::-;56195:15;:48::i;:::-;56260:7;:34;;;;-1:-1:-1;;;;;;56271:23:0;;56289:4;56271:23;;56260:34;56256:169;;;56359:18;;43447:4;;56343:12;56352:3;56343:6;:12;:::i;:::-;56342:35;;;;:::i;:::-;56341:72;;;;:::i;:::-;56311:13;;:102;;;;;;;:::i;:::-;;;;-1:-1:-1;;56256:169:0;52844:3588;;;;;;;;;;;52714:3718;;;:::o;28193:453::-;28328:24;28355:25;28365:5;28372:7;28355:9;:25::i;:::-;28328:52;;-1:-1:-1;;28395:16:0;:37;28391:248;;28477:6;28457:16;:26;;28449:68;;;;-1:-1:-1;;;28449:68:0;;14220:2:1;28449:68:0;;;14202:21:1;14259:2;14239:18;;;14232:30;14298:31;14278:18;;;14271:59;14347:18;;28449:68:0;14018:353:1;28449:68:0;28561:51;28570:5;28577:7;28605:6;28586:16;:25;28561:8;:51::i;26493:591::-;-1:-1:-1;;;;;26577:21:0;;26569:67;;;;-1:-1:-1;;;26569:67:0;;20817:2:1;26569:67:0;;;20799:21:1;20856:2;20836:18;;;20829:30;20895:34;20875:18;;;20868:62;-1:-1:-1;;;20946:18:1;;;20939:31;20987:19;;26569:67:0;20615:397:1;26569:67:0;-1:-1:-1;;;;;26736:18:0;;26711:22;26736:18;;;;;;;;;;;26773:24;;;;26765:71;;;;-1:-1:-1;;;26765:71:0;;10785:2:1;26765:71:0;;;10767:21:1;10824:2;10804:18;;;10797:30;10863:34;10843:18;;;10836:62;-1:-1:-1;;;10914:18:1;;;10907:32;10956:19;;26765:71:0;10583:398:1;26765:71:0;-1:-1:-1;;;;;26872:18:0;;:9;:18;;;;;;;;;;26893:23;;;26872:44;;26938:12;:22;;26910:6;;26872:9;26938:22;;26910:6;;26938:22;:::i;:::-;;;;-1:-1:-1;;26978:37:0;;26339:25:1;;;27004:1:0;;-1:-1:-1;;;;;26978:37:0;;;;;26327:2:1;26312:18;26978:37:0;26193:177:1;27028:48:0;26558:526;26493:591;;:::o;61148:385::-;61211:8;;61203:5;;:16;;;;:::i;:::-;61191:9;:28;61294:3;61266:24;43447:4;61288:2;61266:24;:::i;:::-;61265:32;;;;:::i;:::-;61252:9;;:45;;61230:118;;;;-1:-1:-1;;;61230:118:0;;15692:2:1;61230:118:0;;;15674:21:1;15731:2;15711:18;;;15704:30;15770:25;15750:18;;;15743:53;15813:18;;61230:118:0;15490:347:1;61230:118:0;61465:3;61437:24;43447:4;61459:2;61437:24;:::i;:::-;61436:32;;;;:::i;:::-;61393:26;;61381:9;;:38;;;;:::i;:::-;:87;;61359:166;;;;-1:-1:-1;;;61359:166:0;;22679:2:1;61359:166:0;;;22661:21:1;22718:2;22698:18;;;22691:30;22757:31;22737:18;;;22730:59;22806:18;;61359:166:0;22477:353:1;58502:802:0;58577:17;58597:16;58612:1;58597:12;:16;:::i;:::-;58577:36;;58657:1;58642:12;:16;:66;;;;-1:-1:-1;58707:1:0;58675:29;;;:18;:29;;;;;;:33;;58642:66;:115;;;;-1:-1:-1;58725:27:0;;;;:16;:27;;;;;;:32;58642:115;58624:673;;;58802:21;58842:11;;58838:448;;58874:20;43447:4;58908:26;;58898:7;:36;;;;:::i;:::-;58897:77;;;;:::i;:::-;58993:27;;;;:16;:27;;;;;;;;:42;;;59062:12;:23;;;;;;;59054:64;;58993:42;;-1:-1:-1;;;;;;59062:23:0;;58993:42;;59054:64;58993:27;59054:64;58993:42;59062:23;59054:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;59202:12;59192:7;:22;;;;:::i;:::-;59167:21;:47;;59137:133;;;;-1:-1:-1;;;59137:133:0;;13879:2:1;59137:133:0;;;13861:21:1;13918:2;13898:18;;;13891:30;-1:-1:-1;;;13937:18:1;;;13930:42;13989:18;;59137:133:0;13677:336:1;25761:399:0;-1:-1:-1;;;;;25845:21:0;;25837:65;;;;-1:-1:-1;;;25837:65:0;;26035:2:1;25837:65:0;;;26017:21:1;26074:2;26054:18;;;26047:30;26113:33;26093:18;;;26086:61;26164:18;;25837:65:0;25833:355:1;25837:65:0;25993:6;25977:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;26010:18:0;;:9;:18;;;;;;;;;;:28;;26032:6;;26010:9;:28;;26032:6;;26010:28;:::i;:::-;;;;-1:-1:-1;;26054:37:0;;26339:25:1;;;-1:-1:-1;;;;;26054:37:0;;;26071:1;;26054:37;;26327:2:1;26312:18;26054:37:0;;;;;;;36883:261;;:::o;11769:191::-;11862:6;;;-1:-1:-1;;;;;11879:17:0;;;-1:-1:-1;;;;;;11879:17:0;;;;;;;11912:40;;11862:6;;;11879:17;11862:6;;11912:40;;11843:16;;11912:40;11832:128;11769:191;:::o;15174:426::-;15224:13;;:17;15220:373;;15279:13;;15266:9;:26;;15258:66;;;;-1:-1:-1;;;15258:66:0;;16815:2:1;15258:66:0;;;16797:21:1;16854:2;16834:18;;;16827:30;16893:29;16873:18;;;16866:57;16940:18;;15258:66:0;16613:351:1;15258:66:0;15367:8;;15339:25;;-1:-1:-1;;;;;15367:8:0;:22;:78;;15437:8;;-1:-1:-1;;;;;15437:8:0;15367:78;;;10575:6;;-1:-1:-1;;;;;10575:6:0;15413:7;15339:106;;15461:12;15479:9;-1:-1:-1;;;;;15479:14:0;15502:13;;15479:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15460:61;;;15544:7;15536:45;;;;-1:-1:-1;;;15536:45:0;;24563:2:1;15536:45:0;;;24545:21:1;24602:2;24582:18;;;24575:30;24641:27;24621:18;;;24614:55;24686:18;;15536:45:0;24361:349:1;57992:502:0;58126:1;58116:7;:11;:63;;;;-1:-1:-1;58153:13:0;;58176:3;;58143:24;;-1:-1:-1;;;;;58153:13:0;58143:9;:24::i;:::-;:29;;58170:2;58143:29;:::i;:::-;58142:37;;;;:::i;:::-;58131:7;:48;;58116:63;58112:375;;;58200:14;;-1:-1:-1;;;;;58200:14:0;43498:6;58200:22;58196:188;;;58249:13;;58243:29;;-1:-1:-1;;;;;58249:13:0;58264:7;58243:5;:29::i;:::-;58196:188;;;58329:13;;58344:14;;58313:55;;-1:-1:-1;;;;;58329:13:0;;;;58344:14;58360:7;58313:15;:55::i;:::-;58435:13;;58464:11;;;-1:-1:-1;;;;;;58464:11:0;;;;-1:-1:-1;;;;;58435:13:0;;;;;;58464:9;;:11;;;;;58398:19;;58464:11;;;;;;;58398:19;58435:13;58464:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58181:306;57992:502;:::o;51349:1357::-;51434:13;51450:21;;;:10;:21;;;;;;-1:-1:-1;;;;;51450:21:0;51490:19;51482:63;;;;-1:-1:-1;;;51482:63:0;;24917:2:1;51482:63:0;;;24899:21:1;24956:2;24936:18;;;24929:30;24995:33;24975:18;;;24968:61;25046:18;;51482:63:0;24715:355:1;51482:63:0;-1:-1:-1;;;;;51583:23:0;;51558:22;51583:23;;;:16;:23;;;;;;51658:21;;51583:23;;51558:22;43447:4;;51641:38;;51583:23;51641:38;:::i;:::-;51640:71;;;;:::i;:::-;51617:94;-1:-1:-1;51722:16:0;51741;51756:1;51741:12;:16;:::i;:::-;:21;;-1:-1:-1;51775:650:0;;;;51807:47;51825:4;51832:5;51839:14;51807:9;:47::i;:::-;51869:26;51875:5;51882:12;51869:5;:26::i;:::-;51910:12;:14;;;:12;:14;;;:::i;:::-;;;;;;51960:12;51939:17;;:33;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;51987:23:0;;;;;;:16;:23;;;;;:25;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;52027:28:0;;;;;;:21;:28;;;;;:44;;52059:12;;52027:28;:44;;52059:12;;52027:44;:::i;:::-;;;;-1:-1:-1;;;;;;;52086:22:0;;;;;;:15;:22;;;;;:29;;-1:-1:-1;;52086:29:0;52111:4;52086:29;;;51775:650;;;52148:36;52162:4;52169:14;52148:5;:36::i;:::-;52199:13;:15;;;:13;:15;;;:::i;:::-;;;;;;52251:14;52229:18;;:36;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;52280:24:0;;;;;;:17;:24;;;;;:26;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;52321:29:0;;;;;;:22;:29;;;;;:47;;52354:14;;52321:29;:47;;52354:14;;52321:47;:::i;:::-;;;;-1:-1:-1;;;;;;;52383:22:0;;52408:5;52383:22;;;:15;:22;;;;;:30;;-1:-1:-1;;52383:30:0;;;51775:650;52452:14;52435:13;;:31;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;52519:23:0;;52545:1;52519:23;;;:16;:23;;;;;;;;:27;;;52665:15;:22;;;;;;;52562:136;;26543:25:1;;;52665:22:0;;;;26611:14:1;26604:22;26584:18;;;26577:50;;;;52612:9:0;;52519:23;52562:136;;26516:18:1;52562:136:0;;;;;;;51423:1283;;;;51349:1357;;:::o;56440:901::-;47094:9;:16;;-1:-1:-1;;47094:16:0;;;;;56610:9:::1;::::0;56601:5:::1;::::0;56526:21:::1;::::0;47094:16;;56622:1:::1;::::0;56610:9;56585:21:::1;::::0;:13;:21:::1;:::i;:::-;56584:35;;;;:::i;:::-;:39;;;;:::i;:::-;56558:65:::0;-1:-1:-1;56634:20:0::1;56657:31;56558:65:::0;56657:13;:31:::1;:::i;:::-;56785:16;::::0;;56799:1:::1;56785:16:::0;;;;;::::1;::::0;;56634:54;;-1:-1:-1;56761:21:0::1;::::0;56785:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;56785:16:0::1;56761:40;;56830:4;56812;56817:1;56812:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;56812:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;56856:15:::1;::::0;:22:::1;::::0;;-1:-1:-1;;;56856:22:0;;;;:15;;;::::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;56812:7;;56856:22;;;;;:15;:22;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;56846:4;56851:1;56846:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;56846:32:0;;::::1;:7;::::0;;::::1;::::0;;;;;:32;56923:15:::1;::::0;56891:63:::1;::::0;56908:4:::1;::::0;56923:15:::1;56941:12:::0;56891:8:::1;:63::i;:::-;56965:15;::::0;:197:::1;::::0;-1:-1:-1;;;56965:197:0;;-1:-1:-1;;;;;56965:15:0;;::::1;::::0;:66:::1;::::0;:197:::1;::::0;57046:12;;56965:15:::1;::::0;57089:4;;57116::::1;::::0;57136:15:::1;::::0;56965:197:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;57175:20;57222:9;57198:21;:33;;;;:::i;:::-;57175:56:::0;-1:-1:-1;57246:16:0;;57242:92:::1;;57279:43;57292:12;57306:15;57279:12;:43::i;:::-;-1:-1:-1::0;;47133:9:0;:17;;-1:-1:-1;;47133:17:0;;;-1:-1:-1;;;;56440:901:0:o;24803:671::-;-1:-1:-1;;;;;24934:18:0;;24926:68;;;;-1:-1:-1;;;24926:68:0;;22273:2:1;24926:68:0;;;22255:21:1;22312:2;22292:18;;;22285:30;22351:34;22331:18;;;22324:62;-1:-1:-1;;;22402:18:1;;;22395:35;22447:19;;24926:68:0;22071:401:1;24926:68:0;-1:-1:-1;;;;;25013:16:0;;25005:64;;;;-1:-1:-1;;;25005:64:0;;9629:2:1;25005:64:0;;;9611:21:1;9668:2;9648:18;;;9641:30;9707:34;9687:18;;;9680:62;-1:-1:-1;;;9758:18:1;;;9751:33;9801:19;;25005:64:0;9427:399:1;25005:64:0;-1:-1:-1;;;;;25155:15:0;;25133:19;25155:15;;;;;;;;;;;25189:21;;;;25181:72;;;;-1:-1:-1;;;25181:72:0;;14934:2:1;25181:72:0;;;14916:21:1;14973:2;14953:18;;;14946:30;15012:34;14992:18;;;14985:62;-1:-1:-1;;;15063:18:1;;;15056:36;15109:19;;25181:72:0;14732:402:1;25181:72:0;-1:-1:-1;;;;;25289:15:0;;;:9;:15;;;;;;;;;;;25307:20;;;25289:38;;25349:13;;;;;;;;:23;;25321:6;;25289:9;25349:23;;25321:6;;25349:23;:::i;:::-;;;;;;;;25405:2;-1:-1:-1;;;;;25390:26:0;25399:4;-1:-1:-1;;;;;25390:26:0;;25409:6;25390:26;;;;26339:25:1;;26327:2;26312:18;;26193:177;25390:26:0;;;;;;;;25429:37;26493:591;57755:229;57839:13;57877:9;;57868:5;;57856:9;:17;;;;:::i;:::-;57855:31;;;;:::i;:::-;57839:47;-1:-1:-1;57901:18:0;;57897:80;;57936:29;57943:14;57959:5;57936:6;:29::i;14:247:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;181:9;168:23;200:31;225:5;200:31;:::i;:::-;250:5;14:247;-1:-1:-1;;;14:247:1:o;266:251::-;336:6;389:2;377:9;368:7;364:23;360:32;357:52;;;405:1;402;395:12;357:52;437:9;431:16;456:31;481:5;456:31;:::i;522:388::-;590:6;598;651:2;639:9;630:7;626:23;622:32;619:52;;;667:1;664;657:12;619:52;706:9;693:23;725:31;750:5;725:31;:::i;:::-;775:5;-1:-1:-1;832:2:1;817:18;;804:32;845:33;804:32;845:33;:::i;:::-;897:7;887:17;;;522:388;;;;;:::o;915:456::-;992:6;1000;1008;1061:2;1049:9;1040:7;1036:23;1032:32;1029:52;;;1077:1;1074;1067:12;1029:52;1116:9;1103:23;1135:31;1160:5;1135:31;:::i;:::-;1185:5;-1:-1:-1;1242:2:1;1227:18;;1214:32;1255:33;1214:32;1255:33;:::i;:::-;915:456;;1307:7;;-1:-1:-1;;;1361:2:1;1346:18;;;;1333:32;;915:456::o;1376:382::-;1441:6;1449;1502:2;1490:9;1481:7;1477:23;1473:32;1470:52;;;1518:1;1515;1508:12;1470:52;1557:9;1544:23;1576:31;1601:5;1576:31;:::i;:::-;1626:5;-1:-1:-1;1683:2:1;1668:18;;1655:32;1696:30;1655:32;1696:30;:::i;1763:315::-;1831:6;1839;1892:2;1880:9;1871:7;1867:23;1863:32;1860:52;;;1908:1;1905;1898:12;1860:52;1947:9;1934:23;1966:31;1991:5;1966:31;:::i;:::-;2016:5;2068:2;2053:18;;;;2040:32;;-1:-1:-1;;;1763:315:1:o;2083:241::-;2139:6;2192:2;2180:9;2171:7;2167:23;2163:32;2160:52;;;2208:1;2205;2198:12;2160:52;2247:9;2234:23;2266:28;2288:5;2266:28;:::i;2329:245::-;2396:6;2449:2;2437:9;2428:7;2424:23;2420:32;2417:52;;;2465:1;2462;2455:12;2417:52;2497:9;2491:16;2516:28;2538:5;2516:28;:::i;2579:272::-;2637:6;2690:2;2678:9;2669:7;2665:23;2661:32;2658:52;;;2706:1;2703;2696:12;2658:52;2745:9;2732:23;2795:6;2788:5;2784:18;2777:5;2774:29;2764:57;;2817:1;2814;2807:12;2856:180;2915:6;2968:2;2956:9;2947:7;2943:23;2939:32;2936:52;;;2984:1;2981;2974:12;2936:52;-1:-1:-1;3007:23:1;;2856:180;-1:-1:-1;2856:180:1:o;3041:184::-;3111:6;3164:2;3152:9;3143:7;3139:23;3135:32;3132:52;;;3180:1;3177;3170:12;3132:52;-1:-1:-1;3203:16:1;;3041:184;-1:-1:-1;3041:184:1:o;3230:1194::-;3323:6;3331;3384:2;3372:9;3363:7;3359:23;3355:32;3352:52;;;3400:1;3397;3390:12;3352:52;3436:9;3423:23;3413:33;;3465:2;3518;3507:9;3503:18;3490:32;3541:18;3582:2;3574:6;3571:14;3568:34;;;3598:1;3595;3588:12;3568:34;3636:6;3625:9;3621:22;3611:32;;3681:7;3674:4;3670:2;3666:13;3662:27;3652:55;;3703:1;3700;3693:12;3652:55;3739:2;3726:16;3761:2;3757;3754:10;3751:36;;;3767:18;;:::i;:::-;3813:2;3810:1;3806:10;3845:2;3839:9;3908:2;3904:7;3899:2;3895;3891:11;3887:25;3879:6;3875:38;3963:6;3951:10;3948:22;3943:2;3931:10;3928:18;3925:46;3922:72;;;3974:18;;:::i;:::-;4010:2;4003:22;4060:18;;;4094:15;;;;-1:-1:-1;4129:11:1;;;4159;;;4155:20;;4152:33;-1:-1:-1;4149:53:1;;;4198:1;4195;4188:12;4149:53;4220:1;4211:10;;4230:163;4244:2;4241:1;4238:9;4230:163;;;4301:17;;4289:30;;4262:1;4255:9;;;;;4339:12;;;;4371;;4230:163;;;4234:3;4412:6;4402:16;;;;;;;;3230:1194;;;;;:::o;4429:306::-;4517:6;4525;4533;4586:2;4574:9;4565:7;4561:23;4557:32;4554:52;;;4602:1;4599;4592:12;4554:52;4631:9;4625:16;4615:26;;4681:2;4670:9;4666:18;4660:25;4650:35;;4725:2;4714:9;4710:18;4704:25;4694:35;;4429:306;;;;;:::o;4740:276::-;4798:6;4851:2;4839:9;4830:7;4826:23;4822:32;4819:52;;;4867:1;4864;4857:12;4819:52;4906:9;4893:23;4956:10;4949:5;4945:22;4938:5;4935:33;4925:61;;4982:1;4979;4972:12;5021:284;5079:6;5132:2;5120:9;5111:7;5107:23;5103:32;5100:52;;;5148:1;5145;5138:12;5100:52;5187:9;5174:23;5237:18;5230:5;5226:30;5219:5;5216:41;5206:69;;5271:1;5268;5261:12;8123:597;8235:4;8264:2;8293;8282:9;8275:21;8325:6;8319:13;8368:6;8363:2;8352:9;8348:18;8341:34;8393:1;8403:140;8417:6;8414:1;8411:13;8403:140;;;8512:14;;;8508:23;;8502:30;8478:17;;;8497:2;8474:26;8467:66;8432:10;;8403:140;;;8561:6;8558:1;8555:13;8552:91;;;8631:1;8626:2;8617:6;8606:9;8602:22;8598:31;8591:42;8552:91;-1:-1:-1;8704:2:1;8683:15;-1:-1:-1;;8679:29:1;8664:45;;;;8711:2;8660:54;;8123:597;-1:-1:-1;;;8123:597:1:o;10241:337::-;10443:2;10425:21;;;10482:2;10462:18;;;10455:30;-1:-1:-1;;;10516:2:1;10501:18;;10494:43;10569:2;10554:18;;10241:337::o;26638:980::-;26900:4;26948:3;26937:9;26933:19;26979:6;26968:9;26961:25;27005:2;27043:6;27038:2;27027:9;27023:18;27016:34;27086:3;27081:2;27070:9;27066:18;27059:31;27110:6;27145;27139:13;27176:6;27168;27161:22;27214:3;27203:9;27199:19;27192:26;;27253:2;27245:6;27241:15;27227:29;;27274:1;27284:195;27298:6;27295:1;27292:13;27284:195;;;27363:13;;-1:-1:-1;;;;;27359:39:1;27347:52;;27454:15;;;;27419:12;;;;27395:1;27313:9;27284:195;;;-1:-1:-1;;;;;;;27535:32:1;;;;27530:2;27515:18;;27508:60;-1:-1:-1;;;27599:3:1;27584:19;27577:35;27496:3;26638:980;-1:-1:-1;;;26638:980:1:o;28017:128::-;28057:3;28088:1;28084:6;28081:1;28078:13;28075:39;;;28094:18;;:::i;:::-;-1:-1:-1;28130:9:1;;28017:128::o;28150:120::-;28190:1;28216;28206:35;;28221:18;;:::i;:::-;-1:-1:-1;28255:9:1;;28150:120::o;28275:168::-;28315:7;28381:1;28377;28373:6;28369:14;28366:1;28363:21;28358:1;28351:9;28344:17;28340:45;28337:71;;;28388:18;;:::i;:::-;-1:-1:-1;28428:9:1;;28275:168::o;28448:125::-;28488:4;28516:1;28513;28510:8;28507:34;;;28521:18;;:::i;:::-;-1:-1:-1;28558:9:1;;28448:125::o;28578:380::-;28657:1;28653:12;;;;28700;;;28721:61;;28775:4;28767:6;28763:17;28753:27;;28721:61;28828:2;28820:6;28817:14;28797:18;28794:38;28791:161;;;28874:10;28869:3;28865:20;28862:1;28855:31;28909:4;28906:1;28899:15;28937:4;28934:1;28927:15;28791:161;;28578:380;;;:::o;28963:135::-;29002:3;-1:-1:-1;;29023:17:1;;29020:43;;;29043:18;;:::i;:::-;-1:-1:-1;29090:1:1;29079:13;;28963:135::o;29103:112::-;29135:1;29161;29151:35;;29166:18;;:::i;:::-;-1:-1:-1;29200:9:1;;29103:112::o;29220:127::-;29281:10;29276:3;29272:20;29269:1;29262:31;29312:4;29309:1;29302:15;29336:4;29333:1;29326:15;29352:127;29413:10;29408:3;29404:20;29401:1;29394:31;29444:4;29441:1;29434:15;29468:4;29465:1;29458:15;29484:127;29545:10;29540:3;29536:20;29533:1;29526:31;29576:4;29573:1;29566:15;29600:4;29597:1;29590:15;29616:127;29677:10;29672:3;29668:20;29665:1;29658:31;29708:4;29705:1;29698:15;29732:4;29729:1;29722:15;29748:131;-1:-1:-1;;;;;29823:31:1;;29813:42;;29803:70;;29869:1;29866;29859:12;29884:118;29970:5;29963:13;29956:21;29949:5;29946:32;29936:60;;29992:1;29989;29982:12

Swarm Source

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