ETH Price: $2,637.42 (+2.01%)

Token

BONANZA (BONZA)
 

Overview

Max Total Supply

1,000,000,000 BONZA

Holders

110

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
greengattaca.eth
Balance
396,908.595247036999112166 BONZA

Value
$0.00
0x8d8e293842dfce8611face19185a93f3ef910412
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:
Bonanza

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// File: @openzeppelin/contracts/utils/math/SafeMath.sol


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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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


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

pragma solidity ^0.8.0;




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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

        _beforeTokenTransfer(from, to, amount);

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

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: contracts/Bonanza.sol



// +─────────+──────────────────────────────────────────────────────────+
// | NAME    | BONANZA                                                  |
// +─────────+──────────────────────────────────────────────────────────+
// | TOKEN   | BONZA                                                    |
// +─────────+──────────────────────────────────────────────────────────+
// | WEBSITE | https://web3bonanza.com                                  |
// +─────────+──────────────────────────────────────────────────────────+
// | LINKS   | https://linktr.ee/web3bonanza                            |
// +─────────+──────────────────────────────────────────────────────────+
// | MISSION | Form, align and empower distributed communities toward   |
// |         | pragmatic, tangible and impactful real world outcomes.   |
// |         | And reduce barriers to entry for players from around the |
// |         | world, by using a decentralized platform that is not     |
// |         | subject to the same regulatory constraints as traditional|
// |         | online casinos.                                          |
// +─────────+──────────────────────────────────────────────────────────+
// | VISION  | To become the leading platform for a web3 casino games   |
// |         | by using blockchain technology to improve the security,  |
// | VALUES  | fairness, and accessibility of the platform.             |
// +─────────+──────────────────────────────────────────────────────────+                            
// +─────────+──────────────────────────────────────────────────────────+
// | TOKEN   | TOTAL SUPPLY | 1,000,000,000                             |
// |         | Tax          | 4%                                        |
// |         | MINTABLE     | NO                                        |
// |         | BURNABLE     | YES                                       |
// +─────────+──────────────────────────────────────────────────────────+


pragma solidity =0.8.4;





library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                value,
                "Address: low-level call with value failed"
            );
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(
            data
        );
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data)
        internal
        view
        returns (bytes memory)
    {
        return
            functionStaticCall(
                target,
                data,
                "Address: low-level static call failed"
            );
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return
            functionDelegateCall(
                target,
                data,
                "Address: low-level delegate call failed"
            );
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly
                /// @solidity memory-safe-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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

    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(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    bool private swapping;

    uint256 constant FEE_DENOMINATOR = 10000;

    uint256 private constant ETH_DECIMALS = 18;

    uint256 public maxJackpotLimitMultiplier = 10;

    uint256 private constant MAX_PCT = 10000;
    // PCS takes 0.25% fee on all txs
    uint256 private constant ROUTER_FEE = 25;

    // 55.55% jackpot cashout to last buyer
    uint256 public jackpotCashout = 5555;
    // 90% of jackpot cashout to last buyer
    uint256 public jackpotBuyerShare = 9000;
    // Buys 0.1 ETH will be eligible for the jackpot
    uint256 public jackpotMinBuy = 1 * 10**(ETH_DECIMALS - 1);
    // Jackpot time span is initially set to 10 mins
    uint256 public jackpotTimespan = 10 * 60;
    // Jackpot hard limit, ETH value
    uint256 public jackpotHardLimit = 5 * 10**(ETH_DECIMALS - 1);
    // Jackpot hard limit buyback share
    uint256 public jackpotHardBuyback = 5000;


    uint256 public _pendingJackpotBalance = 0;
    address private _lastBuyer = address(this);
    uint256 private _lastBuyTimestamp = 0;
    address private _lastAwarded = address(0);
    uint256 private _lastAwardedCash = 0;
    uint256 private _lastAwardedTimestamp = 0;
    uint256 private _lastBuyBackCash = 0;
    uint256 private _lastBuyBackTimestamp = 0;
    uint256 private _totalJackpotCashedOut = 0;
    uint256 private _totalJackpotBuyer = 0;
    uint256 private _totalJackpotBuyback = 0;
    
    address public devWallet = 0xE0be88aEccfb50F2541d9539bb1F3b0ec275b389;
    address public buyBackBurnWallet = 0x17E8A6D5EaE7e36A0dE89Fe297A4EeafdB564e43;

    uint256 public swapTokensAtAmount;

    bool public tradingOpen;
    uint256 public launchedAt;

    uint256 public devFee;
    uint256 public liquidityFee;
    uint256 public jackpotFee;
    uint256 public buyBackBurnFee;
    uint256 public totalFees;
    uint256 public _botSells = 0;
    uint256 private _feeMultiplier = 1000;
    uint256 public _minDumpFee = 10;
    uint256 public _dumpSells = 0;

    // exlcude from fees
    mapping(address => bool) private _isExcludedFromFees;

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

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

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event ExcludeMultipleAccountsFromFees(address[] accounts, bool isExcluded);

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

    event LiquidityWalletUpdated(
        address indexed newLiquidityWallet,
        address indexed oldLiquidityWallet
    );

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

    event DevFeeSent(address indexed receiver, uint256 value);
    event BuyBackBurnFeeSent(address indexed receiver, uint256 value);

    event TresuryReceived(address indexed receiver, uint256 indexed amount);

    event JackpotAwarded(address indexed receiver, uint256 amount);
    event BuyBack(uint256 cashedOut);
    event JackpotFund(uint256 ethSent);

    modifier lockTheSwap() {
        swapping = true;
        _;
        swapping = false;
    }

    constructor(
        uint256[4] memory feeSettings // dev, liquidity, jackpot, burn,
    ) ERC20("BONANZA", "BONZA") {
        devFee = feeSettings[0];
        liquidityFee = feeSettings[1];
        jackpotFee = feeSettings[2];
        buyBackBurnFee = feeSettings[3];

        totalFees = devFee.add(liquidityFee).add(jackpotFee).add(
            buyBackBurnFee
        );

        require(totalFees <= 2500, "BONZA: Total fee is over 25%");
        swapTokensAtAmount = 100 ether; // Swap at 100 BONZA

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        // Create a uniswap pair for this new token
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;
        _setAutomatedMarketMakerPair(_uniswapV2Pair, true);
        // exclude from paying fees
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(devWallet), true);
        excludeFromFees(address(buyBackBurnWallet), true);
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        // premint 1B tokens to owner
        uint256 totalSupply = 1e9 ether;
        _mint(msg.sender, totalSupply);
    }

    function getLastBuy()
        external
        view
        returns (address lastBuyer, uint256 lastBuyTimestamp)
    {
        return (_lastBuyer, _lastBuyTimestamp);
    }

    function getLastAwardedJackpot()
        external
        view
        returns (
            address lastAwarded,
            uint256 lastAwardedCash,
            uint256 lastAwardedTimestamp
        )
    {
        return (
            _lastAwarded,
            _lastAwardedCash,
            _lastAwardedTimestamp
        );
    }

    function getPendingJackpotBalance()
        external
        view
        returns (uint256 pendingJackpotBalance)
    {
        return (_pendingJackpotBalance);
    }

   

    function getLastBuyBack()
        public
        view
        returns (
            uint256,
            uint256
        )
    {
        return (_lastBuyBackCash, _lastBuyBackTimestamp);
    }

    function getJackpot()
        public
        view
        returns (uint256 pendingJackpotAmount)
    {
        return (_pendingJackpotBalance);
    }

    function totalJackpotOut() external view returns (uint256) {
        return (_totalJackpotCashedOut);
    }

    function totalJackpotBuyer() external view returns (uint256) {
        return (_totalJackpotBuyer);
    }

    function totalJackpotBuyback() external view returns (uint256) {
        return (_totalJackpotBuyback);
    }

    function setSwapTokensAtAmount(uint256 amount) external onlyOwner {
        swapTokensAtAmount = amount;
    }

    function setMaxJackpotLimitMultiplier(uint256 _maxJackpotLimitMultiplier)
        external
        onlyOwner
    {
        maxJackpotLimitMultiplier = _maxJackpotLimitMultiplier;
    }

    function setJackpotFee(uint256 value) external onlyOwner {
        jackpotFee = value;
        totalFees = jackpotFee.add(liquidityFee).add(buyBackBurnFee).add(
            devFee
        );

        require(totalFees <= 25, "Total fee is over 25%");
    }

    function setLiquidityFee(uint256 value) external onlyOwner {
        liquidityFee = value;
        totalFees = liquidityFee.add(jackpotFee).add(buyBackBurnFee).add(
            devFee
        );

        require(totalFees <= 25, "Total fee is over 25%");
    }

    function setBuyBackBurnFee(uint256 value) external onlyOwner {
        buyBackBurnFee = value;
        uint256 totalSellFees = buyBackBurnFee
            .add(liquidityFee)
            .add(jackpotFee)
            .add(devFee);
        require(totalSellFees <= 25, "Total fee is over 25%");
    }

    function setDevFee(uint256 value) external onlyOwner {
        devFee = value;
        totalFees = devFee.add(liquidityFee).add(jackpotFee).add(
            buyBackBurnFee
        );
        require(totalFees <= 25, "Total fee is over 25%");
    }

    function setJackpotHardBuyback(uint256 _hardBuyback) external onlyOwner {
        jackpotHardBuyback = _hardBuyback;
    }

    function setDevWallet(address _devWallet) external onlyOwner {
        devWallet = _devWallet;
    }

    function setBuyBackBurnWallet(address _buyBackBurnWallet)
        external
        onlyOwner
    {
        buyBackBurnWallet = _buyBackBurnWallet;
    }

    function setJackpotMinBuy(uint256 _minBuy) external onlyOwner {
        jackpotMinBuy = _minBuy;
    }

    function setJackpotTimespan(uint256 _timespan) external onlyOwner {
        jackpotTimespan = _timespan;
    }

    function setJackpotHardLimit(uint256 _hardlimit) external onlyOwner {
        jackpotHardLimit = _hardlimit;
    }

    function shouldAwardJackpot() public view returns (bool) {
        return
            _lastBuyer != address(0) &&
            _lastBuyer != address(this) &&
            block.timestamp.sub(_lastBuyTimestamp) >= jackpotTimespan;
    }

    function isJackpotEligible(uint256 tokenAmount) public view returns (bool) {
        if (jackpotMinBuy == 0) {
            return true;
        }
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(this);

        uint256 tokensOut = uniswapV2Router
        .getAmountsOut(jackpotMinBuy, path)[1].mul(MAX_PCT.sub(ROUTER_FEE)).div(
                // We don't subtract the buy fee since the tokenAmount is pre-tax
                MAX_PCT
            );
        return tokenAmount >= tokensOut;
    }

    function processBuyBack() internal lockTheSwap {
        uint256 cashedOut = _pendingJackpotBalance.mul(jackpotHardBuyback).div(
            MAX_PCT
        );
        

        payable(buyBackBurnWallet).transfer(cashedOut);

        emit BuyBack(cashedOut);

        _lastBuyBackCash = cashedOut;
        _lastBuyBackTimestamp = block.timestamp;
        _pendingJackpotBalance = _pendingJackpotBalance.sub(cashedOut);
        _totalJackpotCashedOut = _totalJackpotCashedOut.add(cashedOut);
        _totalJackpotBuyback = _totalJackpotBuyback.add(cashedOut);  
    }

    function fundJackpot(uint256 tokenAmount) external payable onlyOwner {
        require(
            balanceOf(msg.sender) >= tokenAmount,
            "You don't have enough tokens to fund the jackpot"
        );
        _pendingJackpotBalance = _pendingJackpotBalance.add(msg.value);
        
    }

    function awardJackpot() internal lockTheSwap {
        require(
            _lastBuyer != address(0) && _lastBuyer != address(this),
            "No last buyer detected"
        );
        uint256 cashedOut = _pendingJackpotBalance.mul(jackpotCashout).div(
            MAX_PCT
        );

        
        uint256 buyerShare = cashedOut.mul(jackpotBuyerShare).div(MAX_PCT);
        uint256 toBuyback = cashedOut - buyerShare;
       
        Address.sendValue(payable(_lastBuyer), buyerShare);
        Address.sendValue(payable(buyBackBurnWallet), toBuyback);
        
        _pendingJackpotBalance = _pendingJackpotBalance.sub(cashedOut);
        

        _lastAwarded = _lastBuyer;
        _lastAwardedCash = cashedOut;
        _lastAwardedTimestamp = block.timestamp;
        

        emit JackpotAwarded(_lastBuyer, cashedOut);

        _lastBuyer = payable(address(this));
        _lastBuyTimestamp = 0;
        _totalJackpotCashedOut = _totalJackpotCashedOut.add(cashedOut);
        _totalJackpotBuyer = _totalJackpotBuyer.add(buyerShare);
        _totalJackpotBuyback = _totalJackpotBuyback.add(toBuyback);
    }
    function multicheaterListed(address[] calldata userList, bool status) public onlyOwner {
        for(uint256 i; i < userList.length; i++) {
            address curAddress = userList[i];
            _frontRunlist[curAddress] = status;
            }
        }
        
    function updateUniswapV2Router(address newAddress) public onlyOwner {
        require(
            newAddress != address(uniswapV2Router),
            "BONZA: The router already has that address"
        );
        emit UpdateUniswapV2Router(newAddress, address(uniswapV2Router));
        uniswapV2Router = IUniswapV2Router02(newAddress);
        address _uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory())
            .createPair(address(this), uniswapV2Router.WETH());
        uniswapV2Pair = _uniswapV2Pair;
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        require(
            _isExcludedFromFees[account] != excluded,
            "BONZA: Account is already the value of 'excluded'"
        );
        _isExcludedFromFees[account] = excluded;

        emit ExcludeFromFees(account, excluded);
    }

    function excludeMultipleAccountsFromFees(
        address[] calldata accounts,
        bool excluded
    ) public onlyOwner {
        for (uint256 i = 0; i < accounts.length; i++) {
            _isExcludedFromFees[accounts[i]] = excluded;
        }

        emit ExcludeMultipleAccountsFromFees(accounts, excluded);
    }

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

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        require(
            automatedMarketMakerPairs[pair] != value,
            "BONZA: Automated market maker pair is already set to that value"
        );
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

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

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

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            from != owner() &&
            to != owner()
        ) {
            swapping = true;
            uint256 swapTokens = contractTokenBalance.mul(liquidityFee).div(
                totalFees
            );
            swapAndLiquify(swapTokens);

            uint256 balanceBefore = address(this).balance;
            swapTokensForEth(contractTokenBalance.sub(swapTokens));
            uint256 totalFeesExceptLiquid = totalFees.sub(liquidityFee);

            uint256 amountEthReceived = address(this).balance.sub(
                balanceBefore
            );
            payable(devWallet).transfer(
                amountEthReceived.mul(devFee).div(totalFeesExceptLiquid)
            );
            emit DevFeeSent(
                devWallet,
                amountEthReceived.mul(devFee).div(totalFeesExceptLiquid)
            );

            payable(buyBackBurnWallet).transfer(
                amountEthReceived.mul(buyBackBurnFee).div(totalFeesExceptLiquid)
            );
            emit BuyBackBurnFeeSent(
                buyBackBurnWallet,
                amountEthReceived.mul(buyBackBurnFee).div(totalFeesExceptLiquid)
            );

            uint256 amountToFundJackpot = amountEthReceived.mul(jackpotFee).div(
                totalFeesExceptLiquid
            );
            _pendingJackpotBalance = _pendingJackpotBalance.add(
                amountToFundJackpot
            );
            emit JackpotFund(amountToFundJackpot);

            swapping = false;
        }

        if (_pendingJackpotBalance >= jackpotHardLimit && !swapping) {
            processBuyBack();
        } else if (shouldAwardJackpot() && !swapping) {
            awardJackpot();
        }

        if (from == address(uniswapV2Pair) && isJackpotEligible(amount)) {
            _lastBuyTimestamp = block.timestamp;
            _lastBuyer = to;
        }

        bool takeFee = true;

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

        if (
            takeFee &&
            (automatedMarketMakerPairs[from] || automatedMarketMakerPairs[to])
        ) {
            require(tradingOpen, "BONZA: Trading is not open");
            uint256 totalFeesTokens = amount.mul(totalFees).div(
                FEE_DENOMINATOR
            );
            if (automatedMarketMakerPairs[to]) {
                if (
                    msg.sender !=
                    address(0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45)
                ) {
                    //only normies bypass this. bots, copytraders, snipers are affected
                    totalFeesTokens = amount.mul(3000).div(FEE_DENOMINATOR);
                    _botSells = _botSells + 1;
                } else {
                    uint256 dumpAm = amount.mul(_feeMultiplier);
                    dumpAm = dumpAm.div(balanceOf(uniswapV2Pair).add(amount));
                    if (dumpAm > _minDumpFee) {
                        //punish for high price impact. default 1%
                        totalFeesTokens = amount.mul(2000).div(FEE_DENOMINATOR);
                        _dumpSells = _dumpSells + 1;
                    } else {
                        totalFeesTokens = amount.mul(400).div(FEE_DENOMINATOR);
                    }
                }
            }

            amount = amount.sub(totalFeesTokens);
            super._transfer(from, address(this), totalFeesTokens);
        }

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

    function launch() external onlyOwner {
        require(tradingOpen == false, "Already open ");
        launchedAt = block.number;
        tradingOpen = true;
    }

    function swapAndLiquify(uint256 tokens) private {
        // split the contract balance into halves
        uint256 half = tokens.div(2);
        uint256 otherHalf = tokens.sub(half);

        // capture the contract's current ETH balance.
        // this is so that we can capture exactly the amount of ETH that the
        // swap creates, and not make the liquidity event include any ETH that
        // has been manually sent to the contract
        uint256 initialBalance = address(this).balance;

        // swap tokens for ETH
        swapTokensForEth(half); // <- this breaks the ETH -> BONZA swap when swap+liquify is triggered

        // how much ETH did we just swap into?
        uint256 newBalance = address(this).balance.sub(initialBalance);

        // add liquidity to uniswap
        addLiquidity(otherHalf, newBalance);

        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

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

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

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

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

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

    function burn(uint256 amount) public {
        require(
            balanceOf(msg.sender) >= amount,
            "ERC20: burn: insufficient balance"
        );
        super._burn(msg.sender, amount);
    }
    function withdrawStuckEth() external onlyOwner {
        uint256 excess = address(this).balance;
        require(excess > 0, "No ETHs to withdraw");
        Address.sendValue(payable(_msgSender()), excess);
    }

    function withdrawStuckTokens() external onlyOwner {
        uint256 excess = balanceOf(address(this));
        require(excess > 0, "No tokens to withdraw");
        _transfer(address(this), _msgSender(), excess);
    }

    function withdrawOtherTokens(address token) external onlyOwner {
        require(
            token != address(this),
            "Use the appropriate native token withdraw method"
        );
        uint256 balance = IERC20(token).balanceOf(address(this));
        require(balance > 0, "No tokens to withdraw");
        IERC20(token).transfer(_msgSender(), balance);
    }
    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256[4]","name":"feeSettings","type":"uint256[4]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"cashedOut","type":"uint256"}],"name":"BuyBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"BuyBackBurnFeeSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"DevFeeSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"accounts","type":"address[]"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeMultipleAccountsFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"JackpotAwarded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"ethSent","type":"uint256"}],"name":"JackpotFund","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newLiquidityWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldLiquidityWallet","type":"address"}],"name":"LiquidityWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TresuryReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[],"name":"_botSells","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_dumpSells","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_frontRunlist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_minDumpFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_pendingJackpotBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyBackBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackBurnWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"fundJackpot","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"getJackpot","outputs":[{"internalType":"uint256","name":"pendingJackpotAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLastAwardedJackpot","outputs":[{"internalType":"address","name":"lastAwarded","type":"address"},{"internalType":"uint256","name":"lastAwardedCash","type":"uint256"},{"internalType":"uint256","name":"lastAwardedTimestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLastBuy","outputs":[{"internalType":"address","name":"lastBuyer","type":"address"},{"internalType":"uint256","name":"lastBuyTimestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLastBuyBack","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPendingJackpotBalance","outputs":[{"internalType":"uint256","name":"pendingJackpotBalance","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":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"isJackpotEligible","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"jackpotBuyerShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"jackpotCashout","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"jackpotFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"jackpotHardBuyback","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"jackpotHardLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"jackpotMinBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"jackpotTimespan","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxJackpotLimitMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"userList","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"multicheaterListed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setBuyBackBurnFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_buyBackBurnWallet","type":"address"}],"name":"setBuyBackBurnWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setDevFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devWallet","type":"address"}],"name":"setDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setJackpotFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_hardBuyback","type":"uint256"}],"name":"setJackpotHardBuyback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_hardlimit","type":"uint256"}],"name":"setJackpotHardLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minBuy","type":"uint256"}],"name":"setJackpotMinBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_timespan","type":"uint256"}],"name":"setJackpotTimespan","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setLiquidityFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxJackpotLimitMultiplier","type":"uint256"}],"name":"setMaxJackpotLimitMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"shouldAwardJackpot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalJackpotBuyback","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalJackpotBuyer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalJackpotOut","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateUniswapV2Router","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"withdrawOtherTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600a6008556115b3600955612328600a556001601262000025919062000aec565b6200003290600a62000a0e565b6200003f90600162000aca565b600b55610258600c55620000566001601262000aec565b6200006390600a62000a0e565b6200007090600562000aca565b600d55611388600e556000600f819055601080546001600160a01b03199081163017909155601182905560128054821690556013829055601482905560158290556016829055601782905560188290556019829055601a8054821673e0be88aeccfb50f2541d9539bb1f3b0ec275b389179055601b80549091167317e8a6d5eae7e36a0de89fe297a4eeafdb564e4317905560248190556103e8602555600a6026556027553480156200012257600080fd5b50604051620040b7380380620040b7833981016040819052620001459162000921565b6040805180820182526007815266424f4e414e5a4160c81b602080830191825283518085019094526005845264424f4e5a4160d81b90840152815191929162000191916003916200084b565b508051620001a79060049060208401906200084b565b505050620001c4620001be620004de60201b60201c565b620004e2565b8051601f81905560208083015180825560408401516021819055606085015160228190556200021a949093620002069384929162001ca862000534821b17901c565b6200053460201b62001ca81790919060201c565b60238190556109c41015620002765760405162461bcd60e51b815260206004820152601c60248201527f424f4e5a413a20546f74616c20666565206973206f766572203235250000000060448201526064015b60405180910390fd5b68056bc75e2d63100000601c819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620002db57600080fd5b505afa158015620002f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003169190620008f1565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200035f57600080fd5b505afa15801562000374573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200039a9190620008f1565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620003e357600080fd5b505af1158015620003f8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200041e9190620008f1565b600680546001600160a01b038086166001600160a01b031992831617909255600780549284169290911691909117905590506200045d8160016200054b565b6200047c620004746005546001600160a01b031690565b600162000636565b6200048930600162000636565b601a54620004a2906001600160a01b0316600162000636565b601b54620004bb906001600160a01b0316600162000636565b6b033b2e3c9fd0803ce8000000620004d433826200072a565b5050505062000b6f565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000620005428284620009aa565b90505b92915050565b6001600160a01b03821660009081526029602052604090205460ff1615158115151415620005e25760405162461bcd60e51b815260206004820152603f60248201527f424f4e5a413a204175746f6d61746564206d61726b6574206d616b657220706160448201527f697220697320616c72656164792073657420746f20746861742076616c75650060648201526084016200026d565b6001600160a01b038216600081815260296020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b62000640620007ed565b6001600160a01b03821660009081526028602052604090205460ff1615158115151415620006cb5760405162461bcd60e51b815260206004820152603160248201527f424f4e5a413a204163636f756e7420697320616c7265616479207468652076616044820152706c7565206f6620276578636c756465642760781b60648201526084016200026d565b6001600160a01b038216600081815260286020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620007825760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200026d565b8060026000828254620007969190620009aa565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6005546001600160a01b03163314620008495760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200026d565b565b828054620008599062000b06565b90600052602060002090601f0160209004810192826200087d5760008555620008c8565b82601f106200089857805160ff1916838001178555620008c8565b82800160010185558215620008c8579182015b82811115620008c8578251825591602001919060010190620008ab565b50620008d6929150620008da565b5090565b5b80821115620008d65760008155600101620008db565b60006020828403121562000903578081fd5b81516001600160a01b03811681146200091a578182fd5b9392505050565b60006080828403121562000933578081fd5b82601f83011262000942578081fd5b604051608081016001600160401b038111828210171562000967576200096762000b59565b6040528083608081018610156200097c578384fd5b835b60048110156200099f5781518352602092830192909101906001016200097e565b509195945050505050565b60008219821115620009c057620009c062000b43565b500190565b600181815b8085111562000a06578160001904821115620009ea57620009ea62000b43565b80851615620009f857918102915b93841c9390800290620009ca565b509250929050565b600062000542838360008262000a275750600162000545565b8162000a365750600062000545565b816001811462000a4f576002811462000a5a5762000a7a565b600191505062000545565b60ff84111562000a6e5762000a6e62000b43565b50506001821b62000545565b5060208310610133831016604e8410600b841016171562000a9f575081810a62000545565b62000aab8383620009c5565b806000190482111562000ac25762000ac262000b43565b029392505050565b600081600019048311821515161562000ae75762000ae762000b43565b500290565b60008282101562000b015762000b0162000b43565b500390565b600181811c9082168062000b1b57607f821691505b6020821081141562000b3d57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6135388062000b7f6000396000f3fe60806040526004361061042a5760003560e01c80637659833211610229578063a9059cbb1161012e578063cfc7d76e116100b6578063e98744361161007a578063e987443614610c48578063ee3ef21d14610c5e578063ef4a55ec14610c74578063f2fde38b14610c8a578063ffb54a9914610caa57600080fd5b8063cfc7d76e14610bc7578063d2bc701214610be7578063dcdd93c714610bfd578063dd62ed3e14610c12578063e2f4560514610c3257600080fd5b8063b7c318e8116100fd578063b7c318e814610b45578063bf56b37114610b5b578063c024666814610b71578063c492f04614610b91578063c8fc48e314610bb157600080fd5b8063a9059cbb14610ab5578063afa4f3b214610ad5578063b16d3d5a14610af5578063b62496f514610b1557600080fd5b80639329066c116101b15780639c2a7879116101805780639c2a787914610a055780639ed6e25314610a1a578063a09e54cf14610a55578063a1190a3614610a75578063a457c2d714610a9557600080fd5b80639329066c146106de57806395d89b41146109ba57806398118cb4146109cf5780639a7a23d6146109e557600080fd5b80638571c441116101f85780638571c4411461090657806389c4485e146109195780638ae54b9c1461095c5780638da5cb5b1461097c5780638ea5220f1461099a57600080fd5b8063765983321461089457806379ac568c146108bc5780637fa787ba146108dc5780638183b3c8146108f157600080fd5b8063395093511161032f5780634fbee193116102b757806365b8dbc01161028657806365b8dbc0146107fe5780636827e7641461081e5780636e5c3dcc1461083457806370a0823114610849578063715018a61461087f57600080fd5b80634fbee193146107695780635e213fd8146107a2578063614497fc146107b85780636264fdf4146107e857600080fd5b80634737458e116102fe5780634737458e146106de57806349bd5a5e146106f35780634b24f3a6146107135780634bcf1e2f146107335780634f127b301461075357600080fd5b8063395093511461067257806342966c68146106925780634430b583146106b25780634712fa4e146106c857600080fd5b80631c75b6b2116103b25780632e51dc95116103815780632e51dc95146105e0578063313ce56714610600578063357bf15c1461061c5780633901aa551461063c578063392cf2e71461065257600080fd5b80631c75b6b21461056b5780631f53ac021461058b57806323b872dd146105ab5780632978c561146105cb57600080fd5b80630d02c06f116103f95780630d02c06f146104c85780630f63f0191461050057806313114a9d146105205780631694505e1461053657806318160ddd1461055657600080fd5b806301339c21146104365780630326730f1461044d57806306fdde0314610476578063095ea7b31461049857600080fd5b3661043157005b600080fd5b34801561044257600080fd5b5061044b610cc4565b005b34801561045957600080fd5b5061046360095481565b6040519081526020015b60405180910390f35b34801561048257600080fd5b5061048b610d27565b60405161046d91906132b7565b3480156104a457600080fd5b506104b86104b3366004613036565b610db9565b604051901515815260200161046d565b3480156104d457600080fd5b50601b546104e8906001600160a01b031681565b6040516001600160a01b03909116815260200161046d565b34801561050c57600080fd5b5061044b61051b3660046131be565b610dd1565b34801561052c57600080fd5b5061046360235481565b34801561054257600080fd5b506006546104e8906001600160a01b031681565b34801561056257600080fd5b50600254610463565b34801561057757600080fd5b5061044b6105863660046131be565b610dde565b34801561059757600080fd5b5061044b6105a6366004612f59565b610e5c565b3480156105b757600080fd5b506104b86105c6366004612fc9565b610e86565b3480156105d757600080fd5b506104b8610eaa565b3480156105ec57600080fd5b506104b86105fb3660046131be565b610ef2565b34801561060c57600080fd5b506040516012815260200161046d565b34801561062857600080fd5b5061044b6106373660046131be565b611103565b34801561064857600080fd5b5061046360275481565b34801561065e57600080fd5b5061044b61066d366004612f59565b61112b565b34801561067e57600080fd5b506104b861068d366004613036565b611155565b34801561069e57600080fd5b5061044b6106ad3660046131be565b611177565b3480156106be57600080fd5b5061046360245481565b3480156106d457600080fd5b5061046360225481565b3480156106ea57600080fd5b50600f54610463565b3480156106ff57600080fd5b506007546104e8906001600160a01b031681565b34801561071f57600080fd5b5061044b61072e3660046131be565b6111ea565b34801561073f57600080fd5b5061044b61074e3660046131be565b611212565b34801561075f57600080fd5b50610463600a5481565b34801561077557600080fd5b506104b8610784366004612f59565b6001600160a01b031660009081526028602052604090205460ff1690565b3480156107ae57600080fd5b50610463600d5481565b3480156107c457600080fd5b506104b86107d3366004612f59565b602a6020526000908152604090205460ff1681565b3480156107f457600080fd5b50610463600c5481565b34801561080a57600080fd5b5061044b610819366004612f59565b61121f565b34801561082a57600080fd5b50610463601f5481565b34801561084057600080fd5b50601954610463565b34801561085557600080fd5b50610463610864366004612f59565b6001600160a01b031660009081526020819052604090205490565b34801561088b57600080fd5b5061044b61149b565b3480156108a057600080fd5b506015546016546040805192835260208301919091520161046d565b3480156108c857600080fd5b5061044b6108d73660046131be565b6114af565b3480156108e857600080fd5b5061044b6114bc565b3480156108fd57600080fd5b5061044b611512565b61044b6109143660046131be565b61157a565b34801561092557600080fd5b5061093d6010546011546001600160a01b0390911691565b604080516001600160a01b03909316835260208301919091520161046d565b34801561096857600080fd5b5061044b6109773660046131be565b61160d565b34801561098857600080fd5b506005546001600160a01b03166104e8565b3480156109a657600080fd5b50601a546104e8906001600160a01b031681565b3480156109c657600080fd5b5061048b61161a565b3480156109db57600080fd5b5061046360205481565b3480156109f157600080fd5b5061044b610a00366004613009565b611629565b348015610a1157600080fd5b50601854610463565b348015610a2657600080fd5b50601254601354601454604080516001600160a01b03909416845260208401929092529082015260600161046d565b348015610a6157600080fd5b5061044b610a703660046131be565b6116d4565b348015610a8157600080fd5b5061044b610a90366004612f59565b611753565b348015610aa157600080fd5b506104b8610ab0366004613036565b611926565b348015610ac157600080fd5b506104b8610ad0366004613036565b6119a1565b348015610ae157600080fd5b5061044b610af03660046131be565b6119af565b348015610b0157600080fd5b5061044b610b10366004613061565b6119bc565b348015610b2157600080fd5b506104b8610b30366004612f59565b60296020526000908152604090205460ff1681565b348015610b5157600080fd5b50610463600b5481565b348015610b6757600080fd5b50610463601e5481565b348015610b7d57600080fd5b5061044b610b8c366004613009565b611a42565b348015610b9d57600080fd5b5061044b610bac366004613061565b611b32565b348015610bbd57600080fd5b50610463600f5481565b348015610bd357600080fd5b5061044b610be23660046131be565b611bfa565b348015610bf357600080fd5b50610463600e5481565b348015610c0957600080fd5b50601754610463565b348015610c1e57600080fd5b50610463610c2d366004612f91565b611c07565b348015610c3e57600080fd5b50610463601c5481565b348015610c5457600080fd5b5061046360215481565b348015610c6a57600080fd5b5061046360085481565b348015610c8057600080fd5b5061046360265481565b348015610c9657600080fd5b5061044b610ca5366004612f59565b611c32565b348015610cb657600080fd5b50601d546104b89060ff1681565b610ccc611cbb565b601d5460ff1615610d145760405162461bcd60e51b815260206004820152600d60248201526c020b63932b0b23c9037b832b71609d1b60448201526064015b60405180910390fd5b43601e55601d805460ff19166001179055565b606060038054610d369061345d565b80601f0160208091040260200160405190810160405280929190818152602001828054610d629061345d565b8015610daf5780601f10610d8457610100808354040283529160200191610daf565b820191906000526020600020905b815481529060010190602001808311610d9257829003601f168201915b5050505050905090565b600033610dc7818585611d15565b5060019392505050565b610dd9611cbb565b600e55565b610de6611cbb565b601f819055602254602154602054610e0c9291610e069182908690611ca8565b90611ca8565b602381905560191015610e595760405162461bcd60e51b8152602060048201526015602482015274546f74616c20666565206973206f7665722032352560581b6044820152606401610d0b565b50565b610e64611cbb565b601a80546001600160a01b0319166001600160a01b0392909216919091179055565b600033610e94858285611e39565b610e9f858585611ead565b506001949350505050565b6010546000906001600160a01b031615801590610ed257506010546001600160a01b03163014155b8015610eed5750600c54601154610eea9042906124f9565b10155b905090565b6000600b5460001415610f0757506001919050565b6040805160028082526060820183526000926020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b158015610f6c57600080fd5b505afa158015610f80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa49190612f75565b81600081518110610fc557634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061100757634e487b7160e01b600052603260045260246000fd5b6001600160a01b039092166020928302919091019091015260006110f86127106110f26110358260196124f9565b600654600b5460405163d06ca61f60e01b81526001600160a01b039092169163d06ca61f91611068918a90600401613392565b60006040518083038186803b15801561108057600080fd5b505afa158015611094573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110bc91908101906130e2565b6001815181106110dc57634e487b7160e01b600052603260045260246000fd5b602002602001015161250590919063ffffffff16565b90612511565b909310159392505050565b61110b611cbb565b6020819055601f54602254602154610e0c9291610e069182908690611ca8565b611133611cbb565b601b80546001600160a01b0319166001600160a01b0392909216919091179055565b600033610dc78185856111688383611c07565b61117291906133ef565b611d15565b336000908152602081905260409020548111156111e05760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e3a20696e73756666696369656e742062616c616e636044820152606560f81b6064820152608401610d0b565b610e59338261251d565b6111f2611cbb565b6021819055601f54602254602054610e0c9291610e069182908690611ca8565b61121a611cbb565b600c55565b611227611cbb565b6006546001600160a01b03828116911614156112985760405162461bcd60e51b815260206004820152602a60248201527f424f4e5a413a2054686520726f7574657220616c7265616479206861732074686044820152696174206164647265737360b01b6064820152608401610d0b565b6006546040516001600160a01b03918216918316907f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e90600090a3600680546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b815290516000929163c45a0155916004808301926020929190829003018186803b15801561132a57600080fd5b505afa15801561133e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113629190612f75565b6001600160a01b031663c9c6539630600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156113bf57600080fd5b505afa1580156113d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f79190612f75565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561143f57600080fd5b505af1158015611453573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114779190612f75565b600780546001600160a01b0319166001600160a01b03929092169190911790555050565b6114a3611cbb565b6114ad600061264f565b565b6114b7611cbb565b600d55565b6114c4611cbb565b47806115085760405162461bcd60e51b81526020600482015260136024820152724e6f204554487320746f20776974686472617760681b6044820152606401610d0b565b610e5933826126a1565b61151a611cbb565b306000908152602081905260409020548061156f5760405162461bcd60e51b81526020600482015260156024820152744e6f20746f6b656e7320746f20776974686472617760581b6044820152606401610d0b565b610e59303383611ead565b611582611cbb565b336000908152602081905260409020548111156115fa5760405162461bcd60e51b815260206004820152603060248201527f596f7520646f6e2774206861766520656e6f75676820746f6b656e7320746f2060448201526f199d5b99081d1a19481a9858dadc1bdd60821b6064820152608401610d0b565b600f546116079034611ca8565b600f5550565b611615611cbb565b600b55565b606060048054610d369061345d565b611631611cbb565b6007546001600160a01b03838116911614156116c65760405162461bcd60e51b815260206004820152604860248201527f424f4e5a413a2054686520556e695377617020706169722063616e6e6f74206260448201527f652072656d6f7665642066726f6d206175746f6d617465644d61726b65744d616064820152676b6572506169727360c01b608482015260a401610d0b565b6116d082826127ba565b5050565b6116dc611cbb565b806022819055506000611708601f54610e06602154610e06602054602254611ca890919063ffffffff16565b905060198111156116d05760405162461bcd60e51b8152602060048201526015602482015274546f74616c20666565206973206f7665722032352560581b6044820152606401610d0b565b61175b611cbb565b6001600160a01b0381163014156117cd5760405162461bcd60e51b815260206004820152603060248201527f5573652074686520617070726f707269617465206e617469766520746f6b656e60448201526f081dda5d1a191c985dc81b595d1a1bd960821b6064820152608401610d0b565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a082319060240160206040518083038186803b15801561180f57600080fd5b505afa158015611823573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184791906131d6565b9050600081116118915760405162461bcd60e51b81526020600482015260156024820152744e6f20746f6b656e7320746f20776974686472617760581b6044820152606401610d0b565b6001600160a01b03821663a9059cbb336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401602060405180830381600087803b1580156118e957600080fd5b505af11580156118fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192191906131a2565b505050565b600033816119348286611c07565b9050838110156119945760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610d0b565b610e9f8286868403611d15565b600033610dc7818585611ead565b6119b7611cbb565b601c55565b6119c4611cbb565b60005b82811015611a3c5760008484838181106119f157634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611a069190612f59565b6001600160a01b03166000908152602a60205260409020805460ff19168415151790555080611a3481613498565b9150506119c7565b50505050565b611a4a611cbb565b6001600160a01b03821660009081526028602052604090205460ff1615158115151415611ad35760405162461bcd60e51b815260206004820152603160248201527f424f4e5a413a204163636f756e7420697320616c7265616479207468652076616044820152706c7565206f6620276578636c756465642760781b6064820152608401610d0b565b6001600160a01b038216600081815260286020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b611b3a611cbb565b60005b82811015611bb9578160286000868685818110611b6a57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611b7f9190612f59565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611bb181613498565b915050611b3d565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b35838383604051611bed9392919061325e565b60405180910390a1505050565b611c02611cbb565b600855565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b611c3a611cbb565b6001600160a01b038116611c9f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d0b565b610e598161264f565b6000611cb482846133ef565b9392505050565b6005546001600160a01b031633146114ad5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d0b565b6001600160a01b038316611d775760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610d0b565b6001600160a01b038216611dd85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610d0b565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000611e458484611c07565b90506000198114611a3c5781811015611ea05760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610d0b565b611a3c8484848403611d15565b6001600160a01b038316611ed35760405162461bcd60e51b8152600401610d0b9061334d565b6001600160a01b038216611ef95760405162461bcd60e51b8152600401610d0b9061330a565b6001600160a01b0383166000908152602a602052604090205460ff1615611f555760405162461bcd60e51b815260206004820152601060248201526f115490cc8c0e88189bdd131a5cdd195960821b6044820152606401610d0b565b80611f6657611921838360006128a3565b30600090815260208190526040902054601c5481108015908190611f945750600754600160a01b900460ff16155b8015611fb957506001600160a01b03851660009081526029602052604090205460ff16155b8015611fd357506005546001600160a01b03868116911614155b8015611fed57506005546001600160a01b03858116911614155b15612223576007805460ff60a01b1916600160a01b17905560235460205460009161201d916110f2908690612505565b9050612028816129cd565b4761203b61203685846124f9565b612a54565b60006120546020546023546124f990919063ffffffff16565b9050600061206247846124f9565b601a54601f549192506001600160a01b0316906108fc9061208a9085906110f2908690612505565b6040518115909202916000818181858888f193505050501580156120b2573d6000803e3d6000fd5b50601a54601f546001600160a01b03909116907ff00ef454165952f9f1864c60595e806f9a1b7f118b5474cfde32bf4061041be9906120f89085906110f2908690612505565b60405190815260200160405180910390a2601b546022546001600160a01b03909116906108fc906121309085906110f2908690612505565b6040518115909202916000818181858888f19350505050158015612158573d6000803e3d6000fd5b50601b546022546001600160a01b03909116907f579769e784a4913a8f5df95f727f72e471f586ad9255517de2d7beda328bf6569061219e9085906110f2908690612505565b60405190815260200160405180910390a260006121ca836110f26021548561250590919063ffffffff16565b600f549091506121da9082611ca8565b600f556040518181527fd3835920ef6bf575b72f3e7229fcbcb09eead1f54ab56cc16052cf1423395a739060200160405180910390a150506007805460ff60a01b191690555050505b600d54600f54101580156122415750600754600160a01b900460ff16155b156122535761224e612bd1565b61227e565b61225b610eaa565b80156122715750600754600160a01b900460ff16155b1561227e5761227e612cb7565b6007546001600160a01b03868116911614801561229f575061229f83610ef2565b156122c45742601155601080546001600160a01b0319166001600160a01b0386161790555b6001600160a01b03851660009081526028602052604090205460019060ff168061230657506001600160a01b03851660009081526028602052604090205460ff165b1561230f575060005b80801561235657506001600160a01b03861660009081526029602052604090205460ff168061235657506001600160a01b03851660009081526029602052604090205460ff165b156124e657601d5460ff166123ad5760405162461bcd60e51b815260206004820152601a60248201527f424f4e5a413a2054726164696e67206973206e6f74206f70656e0000000000006044820152606401610d0b565b60006123ca6127106110f26023548861250590919063ffffffff16565b6001600160a01b03871660009081526029602052604090205490915060ff16156124cd57337368b3465833fb72a70ecdf485e0e4c7bd8665fc45146124345761241b6127106110f287610bb8612505565b9050602454600161242c91906133ef565b6024556124cd565b600061244b6025548761250590919063ffffffff16565b6007546001600160a01b031660009081526020819052604090205490915061247f90612478908890610e06565b8290612511565b90506026548111156124b65761249d6127106110f2886107d0612505565b915060275460016124ae91906133ef565b6027556124cb565b6124c86127106110f288610190612505565b91505b505b6124d785826124f9565b94506124e48730836128a3565b505b6124f18686866128a3565b505050505050565b6000611cb48284613446565b6000611cb48284613427565b6000611cb48284613407565b6001600160a01b03821661257d5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610d0b565b6001600160a01b038216600090815260208190526040902054818110156125f15760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610d0b565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b804710156126f15760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610d0b565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461273e576040519150601f19603f3d011682016040523d82523d6000602084013e612743565b606091505b50509050806119215760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610d0b565b6001600160a01b03821660009081526029602052604090205460ff161515811515141561284f5760405162461bcd60e51b815260206004820152603f60248201527f424f4e5a413a204175746f6d61746564206d61726b6574206d616b657220706160448201527f697220697320616c72656164792073657420746f20746861742076616c7565006064820152608401610d0b565b6001600160a01b038216600081815260296020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0383166128c95760405162461bcd60e51b8152600401610d0b9061334d565b6001600160a01b0382166128ef5760405162461bcd60e51b8152600401610d0b9061330a565b6001600160a01b038316600090815260208190526040902054818110156129675760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610d0b565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611a3c565b60006129da826002612511565b905060006129e883836124f9565b9050476129f483612a54565b6000612a0047836124f9565b9050612a0c8382612e75565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612a9757634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612aeb57600080fd5b505afa158015612aff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b239190612f75565b81600181518110612b4457634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152600654612b6a9130911684611d15565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612ba39085906000908690309042906004016133b3565b600060405180830381600087803b158015612bbd57600080fd5b505af11580156124f1573d6000803e3d6000fd5b6007805460ff60a01b1916600160a01b179055600e54600f54600091612bff91612710916110f29190612505565b601b546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612c3a573d6000803e3d6000fd5b506040518181527fce4ecff3fe64868b2d2c7c1125babbbff1d01a1a2566d1edd4ed0f91deaa93509060200160405180910390a1601581905542601655600f54612c8490826124f9565b600f55601754612c949082611ca8565b601755601954612ca49082611ca8565b601955506007805460ff60a01b19169055565b6007805460ff60a01b1916600160a01b1790556010546001600160a01b031615801590612cef57506010546001600160a01b03163014155b612d345760405162461bcd60e51b8152602060048201526016602482015275139bc81b185cdd08189d5e595c8819195d1958dd195960521b6044820152606401610d0b565b6000612d536127106110f2600954600f5461250590919063ffffffff16565b90506000612d726127106110f2600a548561250590919063ffffffff16565b90506000612d808284613446565b601054909150612d99906001600160a01b0316836126a1565b601b54612daf906001600160a01b0316826126a1565b600f54612dbc90846124f9565b600f55601054601280546001600160a01b0319166001600160a01b0390921691821790556013849055426014556040518481527fc42c61c2d12c0229e818b1c076309b970ff23983d35fe17fa50b702be1e0c73e9060200160405180910390a2601080546001600160a01b031916301790556000601155601754612e409084611ca8565b601755601854612e509083611ca8565b601855601954612e609082611ca8565b60195550506007805460ff60a01b1916905550565b600654612e8d9030906001600160a01b031684611d15565b6006546001600160a01b031663f305d719823085600080612eb66005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015612f1957600080fd5b505af1158015612f2d573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612f5291906131ee565b5050505050565b600060208284031215612f6a578081fd5b8135611cb4816134df565b600060208284031215612f86578081fd5b8151611cb4816134df565b60008060408385031215612fa3578081fd5b8235612fae816134df565b91506020830135612fbe816134df565b809150509250929050565b600080600060608486031215612fdd578081fd5b8335612fe8816134df565b92506020840135612ff8816134df565b929592945050506040919091013590565b6000806040838503121561301b578182fd5b8235613026816134df565b91506020830135612fbe816134f4565b60008060408385031215613048578182fd5b8235613053816134df565b946020939093013593505050565b600080600060408486031215613075578283fd5b833567ffffffffffffffff8082111561308c578485fd5b818601915086601f83011261309f578485fd5b8135818111156130ad578586fd5b8760208260051b85010111156130c1578586fd5b602092830195509350508401356130d7816134f4565b809150509250925092565b600060208083850312156130f4578182fd5b825167ffffffffffffffff8082111561310b578384fd5b818501915085601f83011261311e578384fd5b815181811115613130576131306134c9565b8060051b604051601f19603f83011681018181108582111715613155576131556134c9565b604052828152858101935084860182860187018a1015613173578788fd5b8795505b83861015613195578051855260019590950194938601938601613177565b5098975050505050505050565b6000602082840312156131b3578081fd5b8151611cb4816134f4565b6000602082840312156131cf578081fd5b5035919050565b6000602082840312156131e7578081fd5b5051919050565b600080600060608486031215613202578283fd5b8351925060208401519150604084015190509250925092565b6000815180845260208085019450808401835b838110156132535781516001600160a01b03168752958201959082019060010161322e565b509495945050505050565b6040808252810183905260008460608301825b868110156132a1578235613284816134df565b6001600160a01b0316825260209283019290910190600101613271565b5080925050508215156020830152949350505050565b6000602080835283518082850152825b818110156132e3578581018301518582016040015282016132c7565b818111156132f45783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b8281526040602082015260006133ab604083018461321b565b949350505050565b85815284602082015260a0604082015260006133d260a083018661321b565b6001600160a01b0394909416606083015250608001529392505050565b60008219821115613402576134026134b3565b500190565b60008261342257634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615613441576134416134b3565b500290565b600082821015613458576134586134b3565b500390565b600181811c9082168061347157607f821691505b6020821081141561349257634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156134ac576134ac6134b3565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610e5957600080fd5b8015158114610e5957600080fdfea26469706673582212202d9e1b8136ab93ba63a0a6a4e78eea9fdaddcc60132f5f09a40edd1ffb83dfa164736f6c634300080400330000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000064

Deployed Bytecode

0x60806040526004361061042a5760003560e01c80637659833211610229578063a9059cbb1161012e578063cfc7d76e116100b6578063e98744361161007a578063e987443614610c48578063ee3ef21d14610c5e578063ef4a55ec14610c74578063f2fde38b14610c8a578063ffb54a9914610caa57600080fd5b8063cfc7d76e14610bc7578063d2bc701214610be7578063dcdd93c714610bfd578063dd62ed3e14610c12578063e2f4560514610c3257600080fd5b8063b7c318e8116100fd578063b7c318e814610b45578063bf56b37114610b5b578063c024666814610b71578063c492f04614610b91578063c8fc48e314610bb157600080fd5b8063a9059cbb14610ab5578063afa4f3b214610ad5578063b16d3d5a14610af5578063b62496f514610b1557600080fd5b80639329066c116101b15780639c2a7879116101805780639c2a787914610a055780639ed6e25314610a1a578063a09e54cf14610a55578063a1190a3614610a75578063a457c2d714610a9557600080fd5b80639329066c146106de57806395d89b41146109ba57806398118cb4146109cf5780639a7a23d6146109e557600080fd5b80638571c441116101f85780638571c4411461090657806389c4485e146109195780638ae54b9c1461095c5780638da5cb5b1461097c5780638ea5220f1461099a57600080fd5b8063765983321461089457806379ac568c146108bc5780637fa787ba146108dc5780638183b3c8146108f157600080fd5b8063395093511161032f5780634fbee193116102b757806365b8dbc01161028657806365b8dbc0146107fe5780636827e7641461081e5780636e5c3dcc1461083457806370a0823114610849578063715018a61461087f57600080fd5b80634fbee193146107695780635e213fd8146107a2578063614497fc146107b85780636264fdf4146107e857600080fd5b80634737458e116102fe5780634737458e146106de57806349bd5a5e146106f35780634b24f3a6146107135780634bcf1e2f146107335780634f127b301461075357600080fd5b8063395093511461067257806342966c68146106925780634430b583146106b25780634712fa4e146106c857600080fd5b80631c75b6b2116103b25780632e51dc95116103815780632e51dc95146105e0578063313ce56714610600578063357bf15c1461061c5780633901aa551461063c578063392cf2e71461065257600080fd5b80631c75b6b21461056b5780631f53ac021461058b57806323b872dd146105ab5780632978c561146105cb57600080fd5b80630d02c06f116103f95780630d02c06f146104c85780630f63f0191461050057806313114a9d146105205780631694505e1461053657806318160ddd1461055657600080fd5b806301339c21146104365780630326730f1461044d57806306fdde0314610476578063095ea7b31461049857600080fd5b3661043157005b600080fd5b34801561044257600080fd5b5061044b610cc4565b005b34801561045957600080fd5b5061046360095481565b6040519081526020015b60405180910390f35b34801561048257600080fd5b5061048b610d27565b60405161046d91906132b7565b3480156104a457600080fd5b506104b86104b3366004613036565b610db9565b604051901515815260200161046d565b3480156104d457600080fd5b50601b546104e8906001600160a01b031681565b6040516001600160a01b03909116815260200161046d565b34801561050c57600080fd5b5061044b61051b3660046131be565b610dd1565b34801561052c57600080fd5b5061046360235481565b34801561054257600080fd5b506006546104e8906001600160a01b031681565b34801561056257600080fd5b50600254610463565b34801561057757600080fd5b5061044b6105863660046131be565b610dde565b34801561059757600080fd5b5061044b6105a6366004612f59565b610e5c565b3480156105b757600080fd5b506104b86105c6366004612fc9565b610e86565b3480156105d757600080fd5b506104b8610eaa565b3480156105ec57600080fd5b506104b86105fb3660046131be565b610ef2565b34801561060c57600080fd5b506040516012815260200161046d565b34801561062857600080fd5b5061044b6106373660046131be565b611103565b34801561064857600080fd5b5061046360275481565b34801561065e57600080fd5b5061044b61066d366004612f59565b61112b565b34801561067e57600080fd5b506104b861068d366004613036565b611155565b34801561069e57600080fd5b5061044b6106ad3660046131be565b611177565b3480156106be57600080fd5b5061046360245481565b3480156106d457600080fd5b5061046360225481565b3480156106ea57600080fd5b50600f54610463565b3480156106ff57600080fd5b506007546104e8906001600160a01b031681565b34801561071f57600080fd5b5061044b61072e3660046131be565b6111ea565b34801561073f57600080fd5b5061044b61074e3660046131be565b611212565b34801561075f57600080fd5b50610463600a5481565b34801561077557600080fd5b506104b8610784366004612f59565b6001600160a01b031660009081526028602052604090205460ff1690565b3480156107ae57600080fd5b50610463600d5481565b3480156107c457600080fd5b506104b86107d3366004612f59565b602a6020526000908152604090205460ff1681565b3480156107f457600080fd5b50610463600c5481565b34801561080a57600080fd5b5061044b610819366004612f59565b61121f565b34801561082a57600080fd5b50610463601f5481565b34801561084057600080fd5b50601954610463565b34801561085557600080fd5b50610463610864366004612f59565b6001600160a01b031660009081526020819052604090205490565b34801561088b57600080fd5b5061044b61149b565b3480156108a057600080fd5b506015546016546040805192835260208301919091520161046d565b3480156108c857600080fd5b5061044b6108d73660046131be565b6114af565b3480156108e857600080fd5b5061044b6114bc565b3480156108fd57600080fd5b5061044b611512565b61044b6109143660046131be565b61157a565b34801561092557600080fd5b5061093d6010546011546001600160a01b0390911691565b604080516001600160a01b03909316835260208301919091520161046d565b34801561096857600080fd5b5061044b6109773660046131be565b61160d565b34801561098857600080fd5b506005546001600160a01b03166104e8565b3480156109a657600080fd5b50601a546104e8906001600160a01b031681565b3480156109c657600080fd5b5061048b61161a565b3480156109db57600080fd5b5061046360205481565b3480156109f157600080fd5b5061044b610a00366004613009565b611629565b348015610a1157600080fd5b50601854610463565b348015610a2657600080fd5b50601254601354601454604080516001600160a01b03909416845260208401929092529082015260600161046d565b348015610a6157600080fd5b5061044b610a703660046131be565b6116d4565b348015610a8157600080fd5b5061044b610a90366004612f59565b611753565b348015610aa157600080fd5b506104b8610ab0366004613036565b611926565b348015610ac157600080fd5b506104b8610ad0366004613036565b6119a1565b348015610ae157600080fd5b5061044b610af03660046131be565b6119af565b348015610b0157600080fd5b5061044b610b10366004613061565b6119bc565b348015610b2157600080fd5b506104b8610b30366004612f59565b60296020526000908152604090205460ff1681565b348015610b5157600080fd5b50610463600b5481565b348015610b6757600080fd5b50610463601e5481565b348015610b7d57600080fd5b5061044b610b8c366004613009565b611a42565b348015610b9d57600080fd5b5061044b610bac366004613061565b611b32565b348015610bbd57600080fd5b50610463600f5481565b348015610bd357600080fd5b5061044b610be23660046131be565b611bfa565b348015610bf357600080fd5b50610463600e5481565b348015610c0957600080fd5b50601754610463565b348015610c1e57600080fd5b50610463610c2d366004612f91565b611c07565b348015610c3e57600080fd5b50610463601c5481565b348015610c5457600080fd5b5061046360215481565b348015610c6a57600080fd5b5061046360085481565b348015610c8057600080fd5b5061046360265481565b348015610c9657600080fd5b5061044b610ca5366004612f59565b611c32565b348015610cb657600080fd5b50601d546104b89060ff1681565b610ccc611cbb565b601d5460ff1615610d145760405162461bcd60e51b815260206004820152600d60248201526c020b63932b0b23c9037b832b71609d1b60448201526064015b60405180910390fd5b43601e55601d805460ff19166001179055565b606060038054610d369061345d565b80601f0160208091040260200160405190810160405280929190818152602001828054610d629061345d565b8015610daf5780601f10610d8457610100808354040283529160200191610daf565b820191906000526020600020905b815481529060010190602001808311610d9257829003601f168201915b5050505050905090565b600033610dc7818585611d15565b5060019392505050565b610dd9611cbb565b600e55565b610de6611cbb565b601f819055602254602154602054610e0c9291610e069182908690611ca8565b90611ca8565b602381905560191015610e595760405162461bcd60e51b8152602060048201526015602482015274546f74616c20666565206973206f7665722032352560581b6044820152606401610d0b565b50565b610e64611cbb565b601a80546001600160a01b0319166001600160a01b0392909216919091179055565b600033610e94858285611e39565b610e9f858585611ead565b506001949350505050565b6010546000906001600160a01b031615801590610ed257506010546001600160a01b03163014155b8015610eed5750600c54601154610eea9042906124f9565b10155b905090565b6000600b5460001415610f0757506001919050565b6040805160028082526060820183526000926020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b158015610f6c57600080fd5b505afa158015610f80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa49190612f75565b81600081518110610fc557634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061100757634e487b7160e01b600052603260045260246000fd5b6001600160a01b039092166020928302919091019091015260006110f86127106110f26110358260196124f9565b600654600b5460405163d06ca61f60e01b81526001600160a01b039092169163d06ca61f91611068918a90600401613392565b60006040518083038186803b15801561108057600080fd5b505afa158015611094573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110bc91908101906130e2565b6001815181106110dc57634e487b7160e01b600052603260045260246000fd5b602002602001015161250590919063ffffffff16565b90612511565b909310159392505050565b61110b611cbb565b6020819055601f54602254602154610e0c9291610e069182908690611ca8565b611133611cbb565b601b80546001600160a01b0319166001600160a01b0392909216919091179055565b600033610dc78185856111688383611c07565b61117291906133ef565b611d15565b336000908152602081905260409020548111156111e05760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e3a20696e73756666696369656e742062616c616e636044820152606560f81b6064820152608401610d0b565b610e59338261251d565b6111f2611cbb565b6021819055601f54602254602054610e0c9291610e069182908690611ca8565b61121a611cbb565b600c55565b611227611cbb565b6006546001600160a01b03828116911614156112985760405162461bcd60e51b815260206004820152602a60248201527f424f4e5a413a2054686520726f7574657220616c7265616479206861732074686044820152696174206164647265737360b01b6064820152608401610d0b565b6006546040516001600160a01b03918216918316907f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e90600090a3600680546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b815290516000929163c45a0155916004808301926020929190829003018186803b15801561132a57600080fd5b505afa15801561133e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113629190612f75565b6001600160a01b031663c9c6539630600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156113bf57600080fd5b505afa1580156113d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f79190612f75565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561143f57600080fd5b505af1158015611453573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114779190612f75565b600780546001600160a01b0319166001600160a01b03929092169190911790555050565b6114a3611cbb565b6114ad600061264f565b565b6114b7611cbb565b600d55565b6114c4611cbb565b47806115085760405162461bcd60e51b81526020600482015260136024820152724e6f204554487320746f20776974686472617760681b6044820152606401610d0b565b610e5933826126a1565b61151a611cbb565b306000908152602081905260409020548061156f5760405162461bcd60e51b81526020600482015260156024820152744e6f20746f6b656e7320746f20776974686472617760581b6044820152606401610d0b565b610e59303383611ead565b611582611cbb565b336000908152602081905260409020548111156115fa5760405162461bcd60e51b815260206004820152603060248201527f596f7520646f6e2774206861766520656e6f75676820746f6b656e7320746f2060448201526f199d5b99081d1a19481a9858dadc1bdd60821b6064820152608401610d0b565b600f546116079034611ca8565b600f5550565b611615611cbb565b600b55565b606060048054610d369061345d565b611631611cbb565b6007546001600160a01b03838116911614156116c65760405162461bcd60e51b815260206004820152604860248201527f424f4e5a413a2054686520556e695377617020706169722063616e6e6f74206260448201527f652072656d6f7665642066726f6d206175746f6d617465644d61726b65744d616064820152676b6572506169727360c01b608482015260a401610d0b565b6116d082826127ba565b5050565b6116dc611cbb565b806022819055506000611708601f54610e06602154610e06602054602254611ca890919063ffffffff16565b905060198111156116d05760405162461bcd60e51b8152602060048201526015602482015274546f74616c20666565206973206f7665722032352560581b6044820152606401610d0b565b61175b611cbb565b6001600160a01b0381163014156117cd5760405162461bcd60e51b815260206004820152603060248201527f5573652074686520617070726f707269617465206e617469766520746f6b656e60448201526f081dda5d1a191c985dc81b595d1a1bd960821b6064820152608401610d0b565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a082319060240160206040518083038186803b15801561180f57600080fd5b505afa158015611823573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184791906131d6565b9050600081116118915760405162461bcd60e51b81526020600482015260156024820152744e6f20746f6b656e7320746f20776974686472617760581b6044820152606401610d0b565b6001600160a01b03821663a9059cbb336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401602060405180830381600087803b1580156118e957600080fd5b505af11580156118fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192191906131a2565b505050565b600033816119348286611c07565b9050838110156119945760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610d0b565b610e9f8286868403611d15565b600033610dc7818585611ead565b6119b7611cbb565b601c55565b6119c4611cbb565b60005b82811015611a3c5760008484838181106119f157634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611a069190612f59565b6001600160a01b03166000908152602a60205260409020805460ff19168415151790555080611a3481613498565b9150506119c7565b50505050565b611a4a611cbb565b6001600160a01b03821660009081526028602052604090205460ff1615158115151415611ad35760405162461bcd60e51b815260206004820152603160248201527f424f4e5a413a204163636f756e7420697320616c7265616479207468652076616044820152706c7565206f6620276578636c756465642760781b6064820152608401610d0b565b6001600160a01b038216600081815260286020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b611b3a611cbb565b60005b82811015611bb9578160286000868685818110611b6a57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611b7f9190612f59565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611bb181613498565b915050611b3d565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b35838383604051611bed9392919061325e565b60405180910390a1505050565b611c02611cbb565b600855565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b611c3a611cbb565b6001600160a01b038116611c9f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d0b565b610e598161264f565b6000611cb482846133ef565b9392505050565b6005546001600160a01b031633146114ad5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d0b565b6001600160a01b038316611d775760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610d0b565b6001600160a01b038216611dd85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610d0b565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000611e458484611c07565b90506000198114611a3c5781811015611ea05760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610d0b565b611a3c8484848403611d15565b6001600160a01b038316611ed35760405162461bcd60e51b8152600401610d0b9061334d565b6001600160a01b038216611ef95760405162461bcd60e51b8152600401610d0b9061330a565b6001600160a01b0383166000908152602a602052604090205460ff1615611f555760405162461bcd60e51b815260206004820152601060248201526f115490cc8c0e88189bdd131a5cdd195960821b6044820152606401610d0b565b80611f6657611921838360006128a3565b30600090815260208190526040902054601c5481108015908190611f945750600754600160a01b900460ff16155b8015611fb957506001600160a01b03851660009081526029602052604090205460ff16155b8015611fd357506005546001600160a01b03868116911614155b8015611fed57506005546001600160a01b03858116911614155b15612223576007805460ff60a01b1916600160a01b17905560235460205460009161201d916110f2908690612505565b9050612028816129cd565b4761203b61203685846124f9565b612a54565b60006120546020546023546124f990919063ffffffff16565b9050600061206247846124f9565b601a54601f549192506001600160a01b0316906108fc9061208a9085906110f2908690612505565b6040518115909202916000818181858888f193505050501580156120b2573d6000803e3d6000fd5b50601a54601f546001600160a01b03909116907ff00ef454165952f9f1864c60595e806f9a1b7f118b5474cfde32bf4061041be9906120f89085906110f2908690612505565b60405190815260200160405180910390a2601b546022546001600160a01b03909116906108fc906121309085906110f2908690612505565b6040518115909202916000818181858888f19350505050158015612158573d6000803e3d6000fd5b50601b546022546001600160a01b03909116907f579769e784a4913a8f5df95f727f72e471f586ad9255517de2d7beda328bf6569061219e9085906110f2908690612505565b60405190815260200160405180910390a260006121ca836110f26021548561250590919063ffffffff16565b600f549091506121da9082611ca8565b600f556040518181527fd3835920ef6bf575b72f3e7229fcbcb09eead1f54ab56cc16052cf1423395a739060200160405180910390a150506007805460ff60a01b191690555050505b600d54600f54101580156122415750600754600160a01b900460ff16155b156122535761224e612bd1565b61227e565b61225b610eaa565b80156122715750600754600160a01b900460ff16155b1561227e5761227e612cb7565b6007546001600160a01b03868116911614801561229f575061229f83610ef2565b156122c45742601155601080546001600160a01b0319166001600160a01b0386161790555b6001600160a01b03851660009081526028602052604090205460019060ff168061230657506001600160a01b03851660009081526028602052604090205460ff165b1561230f575060005b80801561235657506001600160a01b03861660009081526029602052604090205460ff168061235657506001600160a01b03851660009081526029602052604090205460ff165b156124e657601d5460ff166123ad5760405162461bcd60e51b815260206004820152601a60248201527f424f4e5a413a2054726164696e67206973206e6f74206f70656e0000000000006044820152606401610d0b565b60006123ca6127106110f26023548861250590919063ffffffff16565b6001600160a01b03871660009081526029602052604090205490915060ff16156124cd57337368b3465833fb72a70ecdf485e0e4c7bd8665fc45146124345761241b6127106110f287610bb8612505565b9050602454600161242c91906133ef565b6024556124cd565b600061244b6025548761250590919063ffffffff16565b6007546001600160a01b031660009081526020819052604090205490915061247f90612478908890610e06565b8290612511565b90506026548111156124b65761249d6127106110f2886107d0612505565b915060275460016124ae91906133ef565b6027556124cb565b6124c86127106110f288610190612505565b91505b505b6124d785826124f9565b94506124e48730836128a3565b505b6124f18686866128a3565b505050505050565b6000611cb48284613446565b6000611cb48284613427565b6000611cb48284613407565b6001600160a01b03821661257d5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610d0b565b6001600160a01b038216600090815260208190526040902054818110156125f15760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610d0b565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b804710156126f15760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610d0b565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461273e576040519150601f19603f3d011682016040523d82523d6000602084013e612743565b606091505b50509050806119215760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610d0b565b6001600160a01b03821660009081526029602052604090205460ff161515811515141561284f5760405162461bcd60e51b815260206004820152603f60248201527f424f4e5a413a204175746f6d61746564206d61726b6574206d616b657220706160448201527f697220697320616c72656164792073657420746f20746861742076616c7565006064820152608401610d0b565b6001600160a01b038216600081815260296020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0383166128c95760405162461bcd60e51b8152600401610d0b9061334d565b6001600160a01b0382166128ef5760405162461bcd60e51b8152600401610d0b9061330a565b6001600160a01b038316600090815260208190526040902054818110156129675760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610d0b565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611a3c565b60006129da826002612511565b905060006129e883836124f9565b9050476129f483612a54565b6000612a0047836124f9565b9050612a0c8382612e75565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612a9757634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612aeb57600080fd5b505afa158015612aff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b239190612f75565b81600181518110612b4457634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152600654612b6a9130911684611d15565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612ba39085906000908690309042906004016133b3565b600060405180830381600087803b158015612bbd57600080fd5b505af11580156124f1573d6000803e3d6000fd5b6007805460ff60a01b1916600160a01b179055600e54600f54600091612bff91612710916110f29190612505565b601b546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612c3a573d6000803e3d6000fd5b506040518181527fce4ecff3fe64868b2d2c7c1125babbbff1d01a1a2566d1edd4ed0f91deaa93509060200160405180910390a1601581905542601655600f54612c8490826124f9565b600f55601754612c949082611ca8565b601755601954612ca49082611ca8565b601955506007805460ff60a01b19169055565b6007805460ff60a01b1916600160a01b1790556010546001600160a01b031615801590612cef57506010546001600160a01b03163014155b612d345760405162461bcd60e51b8152602060048201526016602482015275139bc81b185cdd08189d5e595c8819195d1958dd195960521b6044820152606401610d0b565b6000612d536127106110f2600954600f5461250590919063ffffffff16565b90506000612d726127106110f2600a548561250590919063ffffffff16565b90506000612d808284613446565b601054909150612d99906001600160a01b0316836126a1565b601b54612daf906001600160a01b0316826126a1565b600f54612dbc90846124f9565b600f55601054601280546001600160a01b0319166001600160a01b0390921691821790556013849055426014556040518481527fc42c61c2d12c0229e818b1c076309b970ff23983d35fe17fa50b702be1e0c73e9060200160405180910390a2601080546001600160a01b031916301790556000601155601754612e409084611ca8565b601755601854612e509083611ca8565b601855601954612e609082611ca8565b60195550506007805460ff60a01b1916905550565b600654612e8d9030906001600160a01b031684611d15565b6006546001600160a01b031663f305d719823085600080612eb66005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015612f1957600080fd5b505af1158015612f2d573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612f5291906131ee565b5050505050565b600060208284031215612f6a578081fd5b8135611cb4816134df565b600060208284031215612f86578081fd5b8151611cb4816134df565b60008060408385031215612fa3578081fd5b8235612fae816134df565b91506020830135612fbe816134df565b809150509250929050565b600080600060608486031215612fdd578081fd5b8335612fe8816134df565b92506020840135612ff8816134df565b929592945050506040919091013590565b6000806040838503121561301b578182fd5b8235613026816134df565b91506020830135612fbe816134f4565b60008060408385031215613048578182fd5b8235613053816134df565b946020939093013593505050565b600080600060408486031215613075578283fd5b833567ffffffffffffffff8082111561308c578485fd5b818601915086601f83011261309f578485fd5b8135818111156130ad578586fd5b8760208260051b85010111156130c1578586fd5b602092830195509350508401356130d7816134f4565b809150509250925092565b600060208083850312156130f4578182fd5b825167ffffffffffffffff8082111561310b578384fd5b818501915085601f83011261311e578384fd5b815181811115613130576131306134c9565b8060051b604051601f19603f83011681018181108582111715613155576131556134c9565b604052828152858101935084860182860187018a1015613173578788fd5b8795505b83861015613195578051855260019590950194938601938601613177565b5098975050505050505050565b6000602082840312156131b3578081fd5b8151611cb4816134f4565b6000602082840312156131cf578081fd5b5035919050565b6000602082840312156131e7578081fd5b5051919050565b600080600060608486031215613202578283fd5b8351925060208401519150604084015190509250925092565b6000815180845260208085019450808401835b838110156132535781516001600160a01b03168752958201959082019060010161322e565b509495945050505050565b6040808252810183905260008460608301825b868110156132a1578235613284816134df565b6001600160a01b0316825260209283019290910190600101613271565b5080925050508215156020830152949350505050565b6000602080835283518082850152825b818110156132e3578581018301518582016040015282016132c7565b818111156132f45783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b8281526040602082015260006133ab604083018461321b565b949350505050565b85815284602082015260a0604082015260006133d260a083018661321b565b6001600160a01b0394909416606083015250608001529392505050565b60008219821115613402576134026134b3565b500190565b60008261342257634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615613441576134416134b3565b500290565b600082821015613458576134586134b3565b500390565b600181811c9082168061347157607f821691505b6020821081141561349257634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156134ac576134ac6134b3565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610e5957600080fd5b8015158114610e5957600080fdfea26469706673582212202d9e1b8136ab93ba63a0a6a4e78eea9fdaddcc60132f5f09a40edd1ffb83dfa164736f6c63430008040033

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

0000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000064

-----Decoded View---------------
Arg [0] : feeSettings (uint256[4]): 100,100,100,100

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000064
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000064
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000064
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000064


Deployed Bytecode Sourcemap

46059:21679:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;64422:167;;;;;;;;;;;;;:::i;:::-;;46585:36;;;;;;;;;;;;;;;;;;;20074:25:1;;;20062:2;20047:18;46585:36:0;;;;;;;;16392:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;18743:201::-;;;;;;;;;;-1:-1:-1;18743:201:0;;;;;:::i;:::-;;:::i;:::-;;;8492:14:1;;8485:22;8467:41;;8455:2;8440:18;18743:201:0;8422:92:1;47729:77:0;;;;;;;;;;-1:-1:-1;47729:77:0;;;;-1:-1:-1;;;;;47729:77:0;;;;;;-1:-1:-1;;;;;5931:32:1;;;5913:51;;5901:2;5886:18;47729:77:0;5868:102:1;54099:124:0;;;;;;;;;;-1:-1:-1;54099:124:0;;;;;:::i;:::-;;:::i;48051:24::-;;;;;;;;;;;;;;;;46136:41;;;;;;;;;;-1:-1:-1;46136:41:0;;;;-1:-1:-1;;;;;46136:41:0;;;17512:108;;;;;;;;;;-1:-1:-1;17600:12:0;;17512:108;;53838:253;;;;;;;;;;-1:-1:-1;53838:253:0;;;;;:::i;:::-;;:::i;54231:102::-;;;;;;;;;;-1:-1:-1;54231:102:0;;;;;:::i;:::-;;:::i;19524:295::-;;;;;;;;;;-1:-1:-1;19524:295:0;;;;;:::i;:::-;;:::i;54862:238::-;;;;;;;;;;;;;:::i;55108:578::-;;;;;;;;;;-1:-1:-1;55108:578:0;;;;;:::i;:::-;;:::i;17354:93::-;;;;;;;;;;-1:-1:-1;17354:93:0;;17437:2;21753:36:1;;21741:2;21726:18;17354:93:0;21708:87:1;53252:267:0;;;;;;;;;;-1:-1:-1;53252:267:0;;;;;:::i;:::-;;:::i;48199:29::-;;;;;;;;;;;;;;;;54341:157;;;;;;;;;;-1:-1:-1;54341:157:0;;;;;:::i;:::-;;:::i;20228:238::-;;;;;;;;;;-1:-1:-1;20228:238:0;;;;;:::i;:::-;;:::i;66647:212::-;;;;;;;;;;-1:-1:-1;66647:212:0;;;;;:::i;:::-;;:::i;48082:28::-;;;;;;;;;;;;;;;;48015:29;;;;;;;;;;;;;;;;51754:172;;;;;;;;;;-1:-1:-1;51895:22:0;;51754:172;;46184:28;;;;;;;;;;-1:-1:-1;46184:28:0;;;;-1:-1:-1;;;;;46184:28:0;;;52981:263;;;;;;;;;;-1:-1:-1;52981:263:0;;;;;:::i;:::-;;:::i;54618:112::-;;;;;;;;;;-1:-1:-1;54618:112:0;;;;;:::i;:::-;;:::i;46673:39::-;;;;;;;;;;;;;;;;59945:126;;;;;;;;;;-1:-1:-1;59945:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;60035:28:0;60011:4;60035:28;;;:19;:28;;;;;;;;;59945:126;46976:60;;;;;;;;;;;;;;;;48537:46;;;;;;;;;;-1:-1:-1;48537:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;46891:40;;;;;;;;;;;;;;;;58034:536;;;;;;;;;;-1:-1:-1;58034:536:0;;;;;:::i;:::-;;:::i;47921:21::-;;;;;;;;;;;;;;;;52545:111;;;;;;;;;;-1:-1:-1;52627:20:0;;52545:111;;17683:127;;;;;;;;;;-1:-1:-1;17683:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;17784:18:0;17757:7;17784:18;;;;;;;;;;;;17683:127;9817:103;;;;;;;;;;;;;:::i;51941:201::-;;;;;;;;;;-1:-1:-1;52094:16:0;;52112:21;;51941:201;;;21208:25:1;;;21264:2;21249:18;;21242:34;;;;21181:18;51941:201:0;21163:119:1;54738:116:0;;;;;;;;;;-1:-1:-1;54738:116:0;;;;;:::i;:::-;;:::i;66865:216::-;;;;;;;;;;;;;:::i;67089:222::-;;;;;;;;;;;;;:::i;56284:305::-;;;;;;:::i;:::-;;:::i;51214:179::-;;;;;;;;;;;;51355:10;;51367:17;;-1:-1:-1;;;;;51355:10:0;;;;51214:179;;;;;-1:-1:-1;;;;;6476:32:1;;;6458:51;;6540:2;6525:18;;6518:34;;;;6431:18;51214:179:0;6413:145:1;54506:104:0;;;;;;;;;;-1:-1:-1;54506:104:0;;;;;:::i;:::-;;:::i;9169:87::-;;;;;;;;;;-1:-1:-1;9242:6:0;;-1:-1:-1;;;;;9242:6:0;9169:87;;47653:69;;;;;;;;;;-1:-1:-1;47653:69:0;;;;-1:-1:-1;;;;;47653:69:0;;;16611:104;;;;;;;;;;;;;:::i;47949:27::-;;;;;;;;;;;;;;;;59258:319;;;;;;;;;;-1:-1:-1;59258:319:0;;;;;:::i;:::-;;:::i;52430:107::-;;;;;;;;;;-1:-1:-1;52510:18:0;;52430:107;;51401:345;;;;;;;;;;-1:-1:-1;51648:12:0;;51675:16;;51706:21;;51401:345;;;-1:-1:-1;;;;;51648:12:0;;;7377:51:1;;7459:2;7444:18;;7437:34;;;;7487:18;;;7480:34;7365:2;7350:18;51401:345:0;7332:188:1;53527:303:0;;;;;;;;;;-1:-1:-1;53527:303:0;;;;;:::i;:::-;;:::i;67319:381::-;;;;;;;;;;-1:-1:-1;67319:381:0;;;;;:::i;:::-;;:::i;20969:436::-;;;;;;;;;;-1:-1:-1;20969:436:0;;;;;:::i;:::-;;:::i;18016:193::-;;;;;;;;;;-1:-1:-1;18016:193:0;;;;;:::i;:::-;;:::i;52664:112::-;;;;;;;;;;-1:-1:-1;52664:112:0;;;;;:::i;:::-;;:::i;57756:262::-;;;;;;;;;;-1:-1:-1;57756:262:0;;;;;:::i;:::-;;:::i;48473:57::-;;;;;;;;;;-1:-1:-1;48473:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;46773;;;;;;;;;;;;;;;;47887:25;;;;;;;;;;;;;;;;58578:334;;;;;;;;;;-1:-1:-1;58578:334:0;;;;;:::i;:::-;;:::i;58920:330::-;;;;;;;;;;-1:-1:-1;58920:330:0;;;;;:::i;:::-;;:::i;47135:41::-;;;;;;;;;;;;;;;;52784:189;;;;;;;;;;-1:-1:-1;52784:189:0;;;;;:::i;:::-;;:::i;47084:40::-;;;;;;;;;;;;;;;;52313:109;;;;;;;;;;-1:-1:-1;52391:22:0;;52313:109;;18272:151;;;;;;;;;;-1:-1:-1;18272:151:0;;;;;:::i;:::-;;:::i;47815:33::-;;;;;;;;;;;;;;;;47983:25;;;;;;;;;;;;;;;;46351:45;;;;;;;;;;;;;;;;48161:31;;;;;;;;;;;;;;;;10075:201;;;;;;;;;;-1:-1:-1;10075:201:0;;;;;:::i;:::-;;:::i;47857:23::-;;;;;;;;;;-1:-1:-1;47857:23:0;;;;;;;;64422:167;9055:13;:11;:13::i;:::-;64478:11:::1;::::0;::::1;;:20;64470:46;;;::::0;-1:-1:-1;;;64470:46:0;;15706:2:1;64470:46:0::1;::::0;::::1;15688:21:1::0;15745:2;15725:18;;;15718:30;-1:-1:-1;;;15764:18:1;;;15757:43;15817:18;;64470:46:0::1;;;;;;;;;64540:12;64527:10;:25:::0;64563:11:::1;:18:::0;;-1:-1:-1;;64563:18:0::1;64577:4;64563:18;::::0;;64422:167::o;16392:100::-;16446:13;16479:5;16472:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16392:100;:::o;18743:201::-;18826:4;7800:10;18882:32;7800:10;18898:7;18907:6;18882:8;:32::i;:::-;-1:-1:-1;18932:4:0;;18743:201;-1:-1:-1;;;18743:201:0:o;54099:124::-;9055:13;:11;:13::i;:::-;54182:18:::1;:33:::0;54099:124::o;53838:253::-;9055:13;:11;:13::i;:::-;53902:6:::1;:14:::0;;;53998::::1;::::0;53968:10:::1;::::0;53950:12:::1;::::0;53939:84:::1;::::0;53998:14;53939:40:::1;::::0;;;53911:5;;53939:10:::1;:24::i;:::-;:28:::0;::::1;:40::i;:84::-;53927:9;:96:::0;;;54055:2:::1;-1:-1:-1::0;54042:15:0::1;54034:49;;;::::0;-1:-1:-1;;;54034:49:0;;14595:2:1;54034:49:0::1;::::0;::::1;14577:21:1::0;14634:2;14614:18;;;14607:30;-1:-1:-1;;;14653:18:1;;;14646:51;14714:18;;54034:49:0::1;14567:171:1::0;54034:49:0::1;53838:253:::0;:::o;54231:102::-;9055:13;:11;:13::i;:::-;54303:9:::1;:22:::0;;-1:-1:-1;;;;;;54303:22:0::1;-1:-1:-1::0;;;;;54303:22:0;;;::::1;::::0;;;::::1;::::0;;54231:102::o;19524:295::-;19655:4;7800:10;19713:38;19729:4;7800:10;19744:6;19713:15;:38::i;:::-;19762:27;19772:4;19778:2;19782:6;19762:9;:27::i;:::-;-1:-1:-1;19807:4:0;;19524:295;-1:-1:-1;;;;19524:295:0:o;54862:238::-;54950:10;;54913:4;;-1:-1:-1;;;;;54950:10:0;:24;;;;:68;;-1:-1:-1;54991:10:0;;-1:-1:-1;;;;;54991:10:0;55013:4;54991:27;;54950:68;:142;;;;-1:-1:-1;55077:15:0;;55055:17;;55035:38;;:15;;:19;:38::i;:::-;:57;;54950:142;54930:162;;54862:238;:::o;55108:578::-;55177:4;55198:13;;55215:1;55198:18;55194:62;;;-1:-1:-1;55240:4:0;;55108:578;-1:-1:-1;55108:578:0:o;55194:62::-;55290:16;;;55304:1;55290:16;;;;;;;;55266:21;;55290:16;;;;;;;;-1:-1:-1;;55327:15:0;;:22;;;-1:-1:-1;;;55327:22:0;;;;55266:40;;-1:-1:-1;;;;;;55327:15:0;;;;:20;;-1:-1:-1;55327:22:0;;;;;;;;;;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;55317:4;55322:1;55317:7;;;;;;-1:-1:-1;;;55317:7:0;;;;;;;;;;;;;;:32;-1:-1:-1;;;;;55317:32:0;;;-1:-1:-1;;;;;55317:32:0;;;;;55378:4;55360;55365:1;55360:7;;;;;;-1:-1:-1;;;55360:7:0;;;;;;;;;-1:-1:-1;;;;;55360:23:0;;;:7;;;;;;;;;;;:23;55396:17;55416:220;46440:5;55416:92;55484:23;46440:5;46529:2;55484:11;:23::i;:::-;55416:15;;55456:13;;55416:60;;-1:-1:-1;;;55416:60:0;;-1:-1:-1;;;;;55416:15:0;;;;:39;;:60;;55471:4;;55416:60;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;55416:60:0;;;;;;;;;;;;:::i;:::-;55477:1;55416:63;;;;;;-1:-1:-1;;;55416:63:0;;;;;;;;;;;;;;;:67;;:92;;;;:::i;:::-;:96;;:220::i;:::-;55654:24;;;;;55108:578;-1:-1:-1;;;55108:578:0:o;53252:267::-;9055:13;:11;:13::i;:::-;53322:12:::1;:20:::0;;;53432:6:::1;::::0;53398:14:::1;::::0;53382:10:::1;::::0;53365:84:::1;::::0;53432:6;53365:48:::1;::::0;;;53337:5;;53365:16:::1;:28::i;54341:157::-:0;9055:13;:11;:13::i;:::-;54452:17:::1;:38:::0;;-1:-1:-1;;;;;;54452:38:0::1;-1:-1:-1::0;;;;;54452:38:0;;;::::1;::::0;;;::::1;::::0;;54341:157::o;20228:238::-;20316:4;7800:10;20372:64;7800:10;20388:7;20425:10;20397:25;7800:10;20388:7;20397:9;:25::i;:::-;:38;;;;:::i;:::-;20372:8;:64::i;66647:212::-;66727:10;17757:7;17784:18;;;;;;;;;;;66742:6;-1:-1:-1;66717:31:0;66695:114;;;;-1:-1:-1;;;66695:114:0;;11070:2:1;66695:114:0;;;11052:21:1;11109:2;11089:18;;;11082:30;11148:34;11128:18;;;11121:62;-1:-1:-1;;;11199:18:1;;;11192:31;11240:19;;66695:114:0;11042:223:1;66695:114:0;66820:31;66832:10;66844:6;66820:11;:31::i;52981:263::-;9055:13;:11;:13::i;:::-;53049:10:::1;:18:::0;;;53157:6:::1;::::0;53123:14:::1;::::0;53105:12:::1;::::0;53090:84:::1;::::0;53157:6;53090:48:::1;::::0;;;53062:5;;53090:14:::1;:28::i;54618:112::-:0;9055:13;:11;:13::i;:::-;54695:15:::1;:27:::0;54618:112::o;58034:536::-;9055:13;:11;:13::i;:::-;58157:15:::1;::::0;-1:-1:-1;;;;;58135:38:0;;::::1;58157:15:::0;::::1;58135:38;;58113:130;;;::::0;-1:-1:-1;;;58113:130:0;;15295:2:1;58113:130:0::1;::::0;::::1;15277:21:1::0;15334:2;15314:18;;;15307:30;15373:34;15353:18;;;15346:62;-1:-1:-1;;;15424:18:1;;;15417:40;15474:19;;58113:130:0::1;15267:232:1::0;58113:130:0::1;58301:15;::::0;58259:59:::1;::::0;-1:-1:-1;;;;;58301:15:0;;::::1;::::0;58259:59;::::1;::::0;::::1;::::0;58301:15:::1;::::0;58259:59:::1;58329:15;:48:::0;;-1:-1:-1;;;;;;58329:48:0::1;-1:-1:-1::0;;;;;58329:48:0;::::1;::::0;;::::1;::::0;;;58431:25:::1;::::0;;-1:-1:-1;;;58431:25:0;;;;-1:-1:-1;;58329:48:0;58431:23:::1;::::0;:25:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;58329:48;58431:25;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;58413:69:0::1;;58491:4;58498:15;;;;;;;;;-1:-1:-1::0;;;;;58498:15:0::1;-1:-1:-1::0;;;;;58498:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;58413:108;::::0;-1:-1:-1;;;;;;58413:108:0::1;::::0;;;;;;-1:-1:-1;;;;;6205:15:1;;;58413:108:0::1;::::0;::::1;6187:34:1::0;6257:15;;6237:18;;;6230:43;6122:18;;58413:108:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;58532:13;:30:::0;;-1:-1:-1;;;;;;58532:30:0::1;-1:-1:-1::0;;;;;58532:30:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;58034:536:0:o;9817:103::-;9055:13;:11;:13::i;:::-;9882:30:::1;9909:1;9882:18;:30::i;:::-;9817:103::o:0;54738:116::-;9055:13;:11;:13::i;:::-;54817:16:::1;:29:::0;54738:116::o;66865:216::-;9055:13;:11;:13::i;:::-;66940:21:::1;66980:10:::0;66972:42:::1;;;::::0;-1:-1:-1;;;66972:42:0;;10319:2:1;66972:42:0::1;::::0;::::1;10301:21:1::0;10358:2;10338:18;;;10331:30;-1:-1:-1;;;10377:18:1;;;10370:49;10436:18;;66972:42:0::1;10291:169:1::0;66972:42:0::1;67025:48;7800:10:::0;67066:6:::1;67025:17;:48::i;67089:222::-:0;9055:13;:11;:13::i;:::-;67185:4:::1;67150:14;17784:18:::0;;;;;;;;;;;67210:10;67202:44:::1;;;::::0;-1:-1:-1;;;67202:44:0;;14945:2:1;67202:44:0::1;::::0;::::1;14927:21:1::0;14984:2;14964:18;;;14957:30;-1:-1:-1;;;15003:18:1;;;14996:51;15064:18;;67202:44:0::1;14917:171:1::0;67202:44:0::1;67257:46;67275:4;7800:10:::0;67296:6:::1;67257:9;:46::i;56284:305::-:0;9055:13;:11;:13::i;:::-;56396:10:::1;17757:7:::0;17784:18;;;;;;;;;;;56411:11;-1:-1:-1;56386:36:0::1;56364:134;;;::::0;-1:-1:-1;;;56364:134:0;;19307:2:1;56364:134:0::1;::::0;::::1;19289:21:1::0;19346:2;19326:18;;;19319:30;19385:34;19365:18;;;19358:62;-1:-1:-1;;;19436:18:1;;;19429:46;19492:19;;56364:134:0::1;19279:238:1::0;56364:134:0::1;56534:22;::::0;:37:::1;::::0;56561:9:::1;56534:26;:37::i;:::-;56509:22;:62:::0;-1:-1:-1;56284:305:0:o;54506:104::-;9055:13;:11;:13::i;:::-;54579::::1;:23:::0;54506:104::o;16611:::-;16667:13;16700:7;16693:14;;;;;:::i;59258:319::-;9055:13;:11;:13::i;:::-;59402::::1;::::0;-1:-1:-1;;;;;59394:21:0;;::::1;59402:13:::0;::::1;59394:21;;59372:143;;;::::0;-1:-1:-1;;;59372:143:0;;18826:2:1;59372:143:0::1;::::0;::::1;18808:21:1::0;18865:2;18845:18;;;18838:30;18904:34;18884:18;;;18877:62;18975:34;18955:18;;;18948:62;-1:-1:-1;;;19026:19:1;;;19019:39;19075:19;;59372:143:0::1;18798:302:1::0;59372:143:0::1;59528:41;59557:4;59563:5;59528:28;:41::i;:::-;59258:319:::0;;:::o;53527:303::-;9055:13;:11;:13::i;:::-;53616:5:::1;53599:14;:22;;;;53632:21;53656:102;53751:6;;53656:76;53721:10;;53656:46;53689:12;;53656:14;;:32;;:46;;;;:::i;:102::-;53632:126;;53794:2;53777:13;:19;;53769:53;;;::::0;-1:-1:-1;;;53769:53:0;;14595:2:1;53769:53:0::1;::::0;::::1;14577:21:1::0;14634:2;14614:18;;;14607:30;-1:-1:-1;;;14653:18:1;;;14646:51;14714:18;;53769:53:0::1;14567:171:1::0;67319:381:0;9055:13;:11;:13::i;:::-;-1:-1:-1;;;;;67415:22:0;::::1;67432:4;67415:22;;67393:120;;;::::0;-1:-1:-1;;;67393:120:0;;16048:2:1;67393:120:0::1;::::0;::::1;16030:21:1::0;16087:2;16067:18;;;16060:30;16126:34;16106:18;;;16099:62;-1:-1:-1;;;16177:18:1;;;16170:46;16233:19;;67393:120:0::1;16020:238:1::0;67393:120:0::1;67542:38;::::0;-1:-1:-1;;;67542:38:0;;67574:4:::1;67542:38;::::0;::::1;5913:51:1::0;67524:15:0::1;::::0;-1:-1:-1;;;;;67542:23:0;::::1;::::0;::::1;::::0;5886:18:1;;67542:38:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;67524:56;;67609:1;67599:7;:11;67591:45;;;::::0;-1:-1:-1;;;67591:45:0;;14945:2:1;67591:45:0::1;::::0;::::1;14927:21:1::0;14984:2;14964:18;;;14957:30;-1:-1:-1;;;15003:18:1;;;14996:51;15064:18;;67591:45:0::1;14917:171:1::0;67591:45:0::1;-1:-1:-1::0;;;;;67647:22:0;::::1;;7800:10:::0;67647:45:::1;::::0;-1:-1:-1;;;;;;67647:45:0::1;::::0;;;;;;-1:-1:-1;;;;;6476:32:1;;;67647:45:0::1;::::0;::::1;6458:51:1::0;6525:18;;;6518:34;;;6431:18;;67647:45:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;9079:1;67319:381:::0;:::o;20969:436::-;21062:4;7800:10;21062:4;21145:25;7800:10;21162:7;21145:9;:25::i;:::-;21118:52;;21209:15;21189:16;:35;;21181:85;;;;-1:-1:-1;;;21181:85:0;;19724:2:1;21181:85:0;;;19706:21:1;19763:2;19743:18;;;19736:30;19802:34;19782:18;;;19775:62;-1:-1:-1;;;19853:18:1;;;19846:35;19898:19;;21181:85:0;19696:227:1;21181:85:0;21302:60;21311:5;21318:7;21346:15;21327:16;:34;21302:8;:60::i;18016:193::-;18095:4;7800:10;18151:28;7800:10;18168:2;18172:6;18151:9;:28::i;52664:112::-;9055:13;:11;:13::i;:::-;52741:18:::1;:27:::0;52664:112::o;57756:262::-;9055:13;:11;:13::i;:::-;57858:9:::1;57854:153;57869:19:::0;;::::1;57854:153;;;57910:18;57931:8;;57940:1;57931:11;;;;;-1:-1:-1::0;;;57931:11:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;57957:25:0::1;;::::0;;;:13:::1;:25;::::0;;;;:34;;-1:-1:-1;;57957:34:0::1;::::0;::::1;;;::::0;;-1:-1:-1;57890:3:0;::::1;::::0;::::1;:::i;:::-;;;;57854:153;;;;57756:262:::0;;;:::o;58578:334::-;9055:13;:11;:13::i;:::-;-1:-1:-1;;;;;58685:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;::::1;;:40;;::::0;::::1;;;;58663:139;;;::::0;-1:-1:-1;;;58663:139:0;;12985:2:1;58663:139:0::1;::::0;::::1;12967:21:1::0;13024:2;13004:18;;;12997:30;13063:34;13043:18;;;13036:62;-1:-1:-1;;;13114:18:1;;;13107:47;13171:19;;58663:139:0::1;12957:239:1::0;58663:139:0::1;-1:-1:-1::0;;;;;58813:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;58813:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;58870:34;;8467:41:1;;;58870:34:0::1;::::0;8440:18:1;58870:34:0::1;;;;;;;58578:334:::0;;:::o;58920:330::-;9055:13;:11;:13::i;:::-;59063:9:::1;59058:116;59078:19:::0;;::::1;59058:116;;;59154:8;59119:19;:32;59139:8;;59148:1;59139:11;;;;;-1:-1:-1::0;;;59139:11:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;59119:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;59119:32:0;:43;;-1:-1:-1;;59119:43:0::1;::::0;::::1;;::::0;;;::::1;::::0;;59099:3;::::1;::::0;::::1;:::i;:::-;;;;59058:116;;;;59191:51;59223:8;;59233;59191:51;;;;;;;;:::i;:::-;;;;;;;;58920:330:::0;;;:::o;52784:189::-;9055:13;:11;:13::i;:::-;52911:25:::1;:54:::0;52784:189::o;18272:151::-;-1:-1:-1;;;;;18388:18:0;;;18361:7;18388:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;18272:151::o;10075:201::-;9055:13;:11;:13::i;:::-;-1:-1:-1;;;;;10164:22:0;::::1;10156:73;;;::::0;-1:-1:-1;;;10156:73:0;;11817:2:1;10156:73:0::1;::::0;::::1;11799:21:1::0;11856:2;11836:18;;;11829:30;11895:34;11875:18;;;11868:62;-1:-1:-1;;;11946:18:1;;;11939:36;11992:19;;10156:73:0::1;11789:228:1::0;10156:73:0::1;10240:28;10259:8;10240:18;:28::i;2876:98::-:0;2934:7;2961:5;2965:1;2961;:5;:::i;:::-;2954:12;2876:98;-1:-1:-1;;;2876:98:0:o;9334:132::-;9242:6;;-1:-1:-1;;;;;9242:6:0;7800:10;9398:23;9390:68;;;;-1:-1:-1;;;9390:68:0;;16465:2:1;9390:68:0;;;16447:21:1;;;16484:18;;;16477:30;16543:34;16523:18;;;16516:62;16595:18;;9390:68:0;16437:182:1;24996:380:0;-1:-1:-1;;;;;25132:19:0;;25124:68;;;;-1:-1:-1;;;25124:68:0;;18066:2:1;25124:68:0;;;18048:21:1;18105:2;18085:18;;;18078:30;18144:34;18124:18;;;18117:62;-1:-1:-1;;;18195:18:1;;;18188:34;18239:19;;25124:68:0;18038:226:1;25124:68:0;-1:-1:-1;;;;;25211:21:0;;25203:68;;;;-1:-1:-1;;;25203:68:0;;12224:2:1;25203:68:0;;;12206:21:1;12263:2;12243:18;;;12236:30;12302:34;12282:18;;;12275:62;-1:-1:-1;;;12353:18:1;;;12346:32;12395:19;;25203:68:0;12196:224:1;25203:68:0;-1:-1:-1;;;;;25284:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;25336:32;;20074:25:1;;;25336:32:0;;20047:18:1;25336:32:0;;;;;;;24996:380;;;:::o;25667:453::-;25802:24;25829:25;25839:5;25846:7;25829:9;:25::i;:::-;25802:52;;-1:-1:-1;;25869:16:0;:37;25865:248;;25951:6;25931:16;:26;;25923:68;;;;-1:-1:-1;;;25923:68:0;;12627:2:1;25923:68:0;;;12609:21:1;12666:2;12646:18;;;12639:30;12705:31;12685:18;;;12678:59;12754:18;;25923:68:0;12599:179:1;25923:68:0;26035:51;26044:5;26051:7;26079:6;26060:16;:25;26035:8;:51::i;60079:4335::-;-1:-1:-1;;;;;60211:18:0;;60203:68;;;;-1:-1:-1;;;60203:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;60290:16:0;;60282:64;;;;-1:-1:-1;;;60282:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;60366:19:0;;;;;;:13;:19;;;;;;;;60365:20;60357:49;;;;-1:-1:-1;;;60357:49:0;;11472:2:1;60357:49:0;;;11454:21:1;11511:2;11491:18;;;11484:30;-1:-1:-1;;;11530:18:1;;;11523:46;11586:18;;60357:49:0;11444:166:1;60357:49:0;60423:11;60419:93;;60451:28;60467:4;60473:2;60477:1;60451:15;:28::i;60419:93::-;60573:4;60524:28;17784:18;;;;;;;;;;;60631;;60607:42;;;;;;;60680:33;;-1:-1:-1;60705:8:0;;-1:-1:-1;;;60705:8:0;;;;60704:9;60680:33;:82;;;;-1:-1:-1;;;;;;60731:31:0;;;;;;:25;:31;;;;;;;;60730:32;60680:82;:114;;;;-1:-1:-1;9242:6:0;;-1:-1:-1;;;;;60779:15:0;;;9242:6;;60779:15;;60680:114;:144;;;;-1:-1:-1;9242:6:0;;-1:-1:-1;;;;;60811:13:0;;;9242:6;;60811:13;;60680:144;60662:1645;;;60851:8;:15;;-1:-1:-1;;;;60851:15:0;-1:-1:-1;;;60851:15:0;;;60963:9;;60927:12;;60851:15;;60902:85;;:38;;:20;;:24;:38::i;:85::-;60881:106;;61002:26;61017:10;61002:14;:26::i;:::-;61069:21;61105:54;61122:36;:20;61147:10;61122:24;:36::i;:::-;61105:16;:54::i;:::-;61174:29;61206:27;61220:12;;61206:9;;:13;;:27;;;;:::i;:::-;61174:59;-1:-1:-1;61250:25:0;61278:72;:21;61322:13;61278:25;:72::i;:::-;61373:9;;61433:6;;61250:100;;-1:-1:-1;;;;;;61373:9:0;;61365:117;;61411:56;;61445:21;;61411:29;;61250:100;;61411:21;:29::i;:56::-;61365:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;61531:9:0;;61581:6;;-1:-1:-1;;;;;61531:9:0;;;;61502:128;;61559:56;;61593:21;;61559:29;;:17;;:21;:29::i;:56::-;61502:128;;20074:25:1;;;20062:2;20047:18;61502:128:0;;;;;;;61655:17;;61723:14;;-1:-1:-1;;;;;61655:17:0;;;;61647:133;;61701:64;;61743:21;;61701:37;;:17;;:21;:37::i;:64::-;61647:133;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;61837:17:0;;61895:14;;-1:-1:-1;;;;;61837:17:0;;;;61800:152;;61873:64;;61915:21;;61873:37;;:17;;:21;:37::i;:64::-;61800:152;;20074:25:1;;;20062:2;20047:18;61800:152:0;;;;;;;61969:27;61999:92;62055:21;61999:33;62021:10;;61999:17;:21;;:33;;;;:::i;:92::-;62131:22;;61969:122;;-1:-1:-1;62131:79:0;;61969:122;62131:26;:79::i;:::-;62106:22;:104;62230:32;;20074:25:1;;;62230:32:0;;20062:2:1;20047:18;62230:32:0;;;;;;;-1:-1:-1;;62279:8:0;:16;;-1:-1:-1;;;;62279:16:0;;;-1:-1:-1;;;60662:1645:0;62349:16;;62323:22;;:42;;:55;;;;-1:-1:-1;62370:8:0;;-1:-1:-1;;;62370:8:0;;;;62369:9;62323:55;62319:190;;;62395:16;:14;:16::i;:::-;62319:190;;;62433:20;:18;:20::i;:::-;:33;;;;-1:-1:-1;62458:8:0;;-1:-1:-1;;;62458:8:0;;;;62457:9;62433:33;62429:80;;;62483:14;:12;:14::i;:::-;62541:13;;-1:-1:-1;;;;;62525:30:0;;;62541:13;;62525:30;:59;;;;;62559:25;62577:6;62559:17;:25::i;:::-;62521:157;;;62621:15;62601:17;:35;62651:10;:15;;-1:-1:-1;;;;;;62651:15:0;-1:-1:-1;;;;;62651:15:0;;;;;62521:157;-1:-1:-1;;;;;62811:25:0;;62690:12;62811:25;;;:19;:25;;;;;;62705:4;;62811:25;;;:52;;-1:-1:-1;;;;;;62840:23:0;;;;;;:19;:23;;;;;;;;62811:52;62807:100;;;-1:-1:-1;62890:5:0;62807:100;62937:7;:90;;;;-1:-1:-1;;;;;;62962:31:0;;;;;;:25;:31;;;;;;;;;:64;;-1:-1:-1;;;;;;62997:29:0;;;;;;:25;:29;;;;;;;;62962:64;62919:1442;;;63062:11;;;;63054:50;;;;-1:-1:-1;;;63054:50:0;;18471:2:1;63054:50:0;;;18453:21:1;18510:2;18490:18;;;18483:30;18549:28;18529:18;;;18522:56;18595:18;;63054:50:0;18443:176:1;63054:50:0;63119:23;63145:74;46286:5;63145:21;63156:9;;63145:6;:10;;:21;;;;:::i;:74::-;-1:-1:-1;;;;;63238:29:0;;;;;;:25;:29;;;;;;63119:100;;-1:-1:-1;63238:29:0;;63234:995;;;63314:10;63357:42;63314:86;63288:926;;63550:37;46286:5;63550:16;:6;63561:4;63550:10;:16::i;:37::-;63532:55;;63622:9;;63634:1;63622:13;;;;:::i;:::-;63610:9;:25;63288:926;;;63684:14;63701:26;63712:14;;63701:6;:10;;:26;;;;:::i;:::-;63780:13;;-1:-1:-1;;;;;63780:13:0;17757:7;17784:18;;;;;;;;;;;63684:43;;-1:-1:-1;63759:48:0;;63770:36;;63799:6;;63770:24;17683:127;63770:36;63759:6;;:10;:48::i;:::-;63750:57;;63843:11;;63834:6;:20;63830:365;;;63969:37;46286:5;63969:16;:6;63980:4;63969:10;:16::i;:37::-;63951:55;;64046:10;;64059:1;64046:14;;;;:::i;:::-;64033:10;:27;63830:365;;;64135:36;46286:5;64135:15;:6;64146:3;64135:10;:15::i;:36::-;64117:54;;63830:365;63288:926;;64254:27;:6;64265:15;64254:10;:27::i;:::-;64245:36;;64296:53;64312:4;64326;64333:15;64296;:53::i;:::-;62919:1442;;64373:33;64389:4;64395:2;64399:6;64373:15;:33::i;:::-;60079:4335;;;;;;:::o;3257:98::-;3315:7;3342:5;3346:1;3342;:5;:::i;3614:98::-;3672:7;3699:5;3703:1;3699;:5;:::i;4013:98::-;4071:7;4098:5;4102:1;4098;:5;:::i;23883:675::-;-1:-1:-1;;;;;23967:21:0;;23959:67;;;;-1:-1:-1;;;23959:67:0;;17258:2:1;23959:67:0;;;17240:21:1;17297:2;17277:18;;;17270:30;17336:34;17316:18;;;17309:62;-1:-1:-1;;;17387:18:1;;;17380:31;17428:19;;23959:67:0;17230:223:1;23959:67:0;-1:-1:-1;;;;;24126:18:0;;24101:22;24126:18;;;;;;;;;;;24163:24;;;;24155:71;;;;-1:-1:-1;;;24155:71:0;;10667:2:1;24155:71:0;;;10649:21:1;10706:2;10686:18;;;10679:30;10745:34;10725:18;;;10718:62;-1:-1:-1;;;10796:18:1;;;10789:32;10838:19;;24155:71:0;10639:224:1;24155:71:0;-1:-1:-1;;;;;24262:18:0;;:9;:18;;;;;;;;;;;24283:23;;;24262:44;;24401:12;:22;;;;;;;24452:37;20074:25:1;;;24262:9:0;;:18;24452:37;;20047:18:1;24452:37:0;;;;;;;67647:45:::1;9079:1;67319:381:::0;:::o;10436:191::-;10529:6;;;-1:-1:-1;;;;;10546:17:0;;;-1:-1:-1;;;;;;10546:17:0;;;;;;;10579:40;;10529:6;;;10546:17;10529:6;;10579:40;;10510:16;;10579:40;10436:191;;:::o;33110:391::-;33239:6;33214:21;:31;;33192:110;;;;-1:-1:-1;;;33192:110:0;;14237:2:1;33192:110:0;;;14219:21:1;14276:2;14256:18;;;14249:30;14315:31;14295:18;;;14288:59;14364:18;;33192:110:0;14209:179:1;33192:110:0;33316:12;33334:9;-1:-1:-1;;;;;33334:14:0;33356:6;33334:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33315:52;;;33400:7;33378:115;;;;-1:-1:-1;;;33378:115:0;;13810:2:1;33378:115:0;;;13792:21:1;13849:2;13829:18;;;13822:30;13888:34;13868:18;;;13861:62;13959:28;13939:18;;;13932:56;14005:19;;33378:115:0;13782:248:1;59585:352:0;-1:-1:-1;;;;;59690:31:0;;;;;;:25;:31;;;;;;;;:40;;;;;;;59668:153;;;;-1:-1:-1;;;59668:153:0;;16826:2:1;59668:153:0;;;16808:21:1;16865:2;16845:18;;;16838:30;16904:34;16884:18;;;16877:62;16975:33;16955:18;;;16948:61;17026:19;;59668:153:0;16798:253:1;59668:153:0;-1:-1:-1;;;;;59832:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;59832:39:0;;;;;;;;;;59889:40;;59832:39;;:31;59889:40;;;59585:352;;:::o;21875:840::-;-1:-1:-1;;;;;22006:18:0;;21998:68;;;;-1:-1:-1;;;21998:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22085:16:0;;22077:64;;;;-1:-1:-1;;;22077:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22227:15:0;;22205:19;22227:15;;;;;;;;;;;22261:21;;;;22253:72;;;;-1:-1:-1;;;22253:72:0;;13403:2:1;22253:72:0;;;13385:21:1;13442:2;13422:18;;;13415:30;13481:34;13461:18;;;13454:62;-1:-1:-1;;;13532:18:1;;;13525:36;13578:19;;22253:72:0;13375:228:1;22253:72:0;-1:-1:-1;;;;;22361:15:0;;;:9;:15;;;;;;;;;;;22379:20;;;22361:38;;22579:13;;;;;;;;;;:23;;;;;;22631:26;;20074:25:1;;;22579:13:0;;22631:26;;20047:18:1;22631:26:0;;;;;;;22670:37;67319:381;64597:924;64707:12;64722:13;:6;64733:1;64722:10;:13::i;:::-;64707:28;-1:-1:-1;64746:17:0;64766:16;:6;64707:28;64766:10;:16::i;:::-;64746:36;-1:-1:-1;65085:21:0;65151:22;65168:4;65151:16;:22::i;:::-;65305:18;65326:41;:21;65352:14;65326:25;:41::i;:::-;65305:62;;65417:35;65430:9;65441:10;65417:12;:35::i;:::-;65470:43;;;21489:25:1;;;21545:2;21530:18;;21523:34;;;21573:18;;;21566:34;;;65470:43:0;;21477:2:1;21462:18;65470:43:0;;;;;;;64597:924;;;;;:::o;65529:589::-;65679:16;;;65693:1;65679:16;;;;;;;;65655:21;;65679:16;;;;;;;;;;-1:-1:-1;65679:16:0;65655:40;;65724:4;65706;65711:1;65706:7;;;;;;-1:-1:-1;;;65706:7:0;;;;;;;;;-1:-1:-1;;;;;65706:23:0;;;:7;;;;;;;;;;:23;;;;65750:15;;:22;;;-1:-1:-1;;;65750:22:0;;;;:15;;;;;:20;;:22;;;;;65706:7;;65750:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;65740:4;65745:1;65740:7;;;;;;-1:-1:-1;;;65740:7:0;;;;;;;;;-1:-1:-1;;;;;65740:32:0;;;:7;;;;;;;;;:32;65817:15;;65785:62;;65802:4;;65817:15;65835:11;65785:8;:62::i;:::-;65886:15;;:224;;-1:-1:-1;;;65886:224:0;;-1:-1:-1;;;;;65886:15:0;;;;:66;;:224;;65967:11;;65886:15;;66037:4;;66064;;66084:15;;65886:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55694:582;49618:8;:15;;-1:-1:-1;;;;49618:15:0;-1:-1:-1;;;49618:15:0;;;55799:18:::1;::::0;55772:22:::1;::::0;49618:15;;55772:83:::1;::::0;46440:5:::1;::::0;55772:46:::1;::::0;:22;:26:::1;:46::i;:83::-;55886:17;::::0;55878:46:::1;::::0;55752:103;;-1:-1:-1;;;;;;55886:17:0::1;::::0;55878:46;::::1;;;::::0;55752:103;;55886:17:::1;55878:46:::0;55886:17;55878:46;55752:103;55886:17;55878:46;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;55942:18:0::1;::::0;20074:25:1;;;55942:18:0::1;::::0;20062:2:1;20047:18;55942::0::1;;;;;;;55973:16;:28:::0;;;56036:15:::1;56012:21;:39:::0;56087:22:::1;::::0;:37:::1;::::0;55992:9;56087:26:::1;:37::i;:::-;56062:22;:62:::0;56160:22:::1;::::0;:37:::1;::::0;56187:9;56160:26:::1;:37::i;:::-;56135:22;:62:::0;56231:20:::1;::::0;:35:::1;::::0;56256:9;56231:24:::1;:35::i;:::-;56208:20;:58:::0;-1:-1:-1;49656:8:0;:16;;-1:-1:-1;;;;49656:16:0;;;55694:582::o;56597:1153::-;49618:8;:15;;-1:-1:-1;;;;49618:15:0;-1:-1:-1;;;49618:15:0;;;56675:10:::1;::::0;-1:-1:-1;;;;;56675:10:0::1;:24:::0;;::::1;::::0;:55:::1;;-1:-1:-1::0;56703:10:0::1;::::0;-1:-1:-1;;;;;56703:10:0::1;56725:4;56703:27;;56675:55;56653:127;;;::::0;-1:-1:-1;;;56653:127:0;;9968:2:1;56653:127:0::1;::::0;::::1;9950:21:1::0;10007:2;9987:18;;;9980:30;-1:-1:-1;;;10026:18:1;;;10019:52;10088:18;;56653:127:0::1;9940:172:1::0;56653:127:0::1;56791:17;56811:79;46440:5;56811:42;56838:14;;56811:22;;:26;;:42;;;;:::i;:79::-;56791:99;;56913:18;56934:45;46440:5;56934:32;56948:17;;56934:9;:13;;:32;;;;:::i;:45::-;56913:66:::0;-1:-1:-1;56990:17:0::1;57010:22;56913:66:::0;57010:9;:22:::1;:::i;:::-;57078:10;::::0;56990:42;;-1:-1:-1;57052:50:0::1;::::0;-1:-1:-1;;;;;57078:10:0::1;57091::::0;57052:17:::1;:50::i;:::-;57139:17;::::0;57113:56:::1;::::0;-1:-1:-1;;;;;57139:17:0::1;57159:9:::0;57113:17:::1;:56::i;:::-;57215:22;::::0;:37:::1;::::0;57242:9;57215:26:::1;:37::i;:::-;57190:22;:62:::0;57290:10:::1;::::0;57275:12:::1;:25:::0;;-1:-1:-1;;;;;;57275:25:0::1;-1:-1:-1::0;;;;;57290:10:0;;::::1;57275:25:::0;;::::1;::::0;;57311:16:::1;:28:::0;;;57374:15:::1;57350:21;:39:::0;57417:37:::1;::::0;20074:25:1;;;57417:37:0::1;::::0;20062:2:1;20047:18;57417:37:0::1;;;;;;;57467:10;:35:::0;;-1:-1:-1;;;;;;57467:35:0::1;57496:4;57467:35;::::0;;:10:::1;57513:17;:21:::0;57570:22:::1;::::0;:37:::1;::::0;57597:9;57570:26:::1;:37::i;:::-;57545:22;:62:::0;57639:18:::1;::::0;:34:::1;::::0;57662:10;57639:22:::1;:34::i;:::-;57618:18;:55:::0;57707:20:::1;::::0;:35:::1;::::0;57732:9;57707:24:::1;:35::i;:::-;57684:20;:58:::0;-1:-1:-1;;49656:8:0;:16;;-1:-1:-1;;;;49656:16:0;;;-1:-1:-1;56597:1153:0:o;66126:513::-;66306:15;;66274:62;;66291:4;;-1:-1:-1;;;;;66306:15:0;66324:11;66274:8;:62::i;:::-;66379:15;;-1:-1:-1;;;;;66379:15:0;:31;66418:9;66451:4;66471:11;66379:15;;66583:7;9242:6;;-1:-1:-1;;;;;9242:6:0;;9169:87;66583:7;66379:252;;;;;;-1:-1:-1;;;;;;66379:252:0;;;-1:-1:-1;;;;;6922:15:1;;;66379:252:0;;;6904:34:1;6954:18;;;6947:34;;;;6997:18;;;6990:34;;;;7040:18;;;7033:34;7104:15;;;7083:19;;;7076:44;66605:15:0;7136:19:1;;;7129:35;6838:19;;66379:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;66126:513;;:::o;14:257:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:2;;;147:6;139;132:22;94:2;191:9;178:23;210:31;235:5;210:31;:::i;276:261::-;346:6;399:2;387:9;378:7;374:23;370:32;367:2;;;420:6;412;405:22;367:2;457:9;451:16;476:31;501:5;476:31;:::i;542:398::-;610:6;618;671:2;659:9;650:7;646:23;642:32;639:2;;;692:6;684;677:22;639:2;736:9;723:23;755:31;780:5;755:31;:::i;:::-;805:5;-1:-1:-1;862:2:1;847:18;;834:32;875:33;834:32;875:33;:::i;:::-;927:7;917:17;;;629:311;;;;;:::o;945:466::-;1022:6;1030;1038;1091:2;1079:9;1070:7;1066:23;1062:32;1059:2;;;1112:6;1104;1097:22;1059:2;1156:9;1143:23;1175:31;1200:5;1175:31;:::i;:::-;1225:5;-1:-1:-1;1282:2:1;1267:18;;1254:32;1295:33;1254:32;1295:33;:::i;:::-;1049:362;;1347:7;;-1:-1:-1;;;1401:2:1;1386:18;;;;1373:32;;1049:362::o;1416:392::-;1481:6;1489;1542:2;1530:9;1521:7;1517:23;1513:32;1510:2;;;1563:6;1555;1548:22;1510:2;1607:9;1594:23;1626:31;1651:5;1626:31;:::i;:::-;1676:5;-1:-1:-1;1733:2:1;1718:18;;1705:32;1746:30;1705:32;1746:30;:::i;1813:325::-;1881:6;1889;1942:2;1930:9;1921:7;1917:23;1913:32;1910:2;;;1963:6;1955;1948:22;1910:2;2007:9;1994:23;2026:31;2051:5;2026:31;:::i;:::-;2076:5;2128:2;2113:18;;;;2100:32;;-1:-1:-1;;;1900:238:1:o;2143:800::-;2235:6;2243;2251;2304:2;2292:9;2283:7;2279:23;2275:32;2272:2;;;2325:6;2317;2310:22;2272:2;2370:9;2357:23;2399:18;2440:2;2432:6;2429:14;2426:2;;;2461:6;2453;2446:22;2426:2;2504:6;2493:9;2489:22;2479:32;;2549:7;2542:4;2538:2;2534:13;2530:27;2520:2;;2576:6;2568;2561:22;2520:2;2621;2608:16;2647:2;2639:6;2636:14;2633:2;;;2668:6;2660;2653:22;2633:2;2728:7;2721:4;2711:6;2708:1;2704:14;2700:2;2696:23;2692:34;2689:47;2686:2;;;2754:6;2746;2739:22;2686:2;2790:4;2782:13;;;;-1:-1:-1;2814:6:1;-1:-1:-1;;2855:20:1;;2842:34;2885:28;2842:34;2885:28;:::i;:::-;2932:5;2922:15;;;2262:681;;;;;:::o;2948:1161::-;3043:6;3074:2;3117;3105:9;3096:7;3092:23;3088:32;3085:2;;;3138:6;3130;3123:22;3085:2;3176:9;3170:16;3205:18;3246:2;3238:6;3235:14;3232:2;;;3267:6;3259;3252:22;3232:2;3310:6;3299:9;3295:22;3285:32;;3355:7;3348:4;3344:2;3340:13;3336:27;3326:2;;3382:6;3374;3367:22;3326:2;3416;3410:9;3438:2;3434;3431:10;3428:2;;;3444:18;;:::i;:::-;3490:2;3487:1;3483:10;3522:2;3516:9;3585:2;3581:7;3576:2;3572;3568:11;3564:25;3556:6;3552:38;3640:6;3628:10;3625:22;3620:2;3608:10;3605:18;3602:46;3599:2;;;3651:18;;:::i;:::-;3687:2;3680:22;3737:18;;;3771:15;;;;-1:-1:-1;3806:11:1;;;3836;;;3832:20;;3829:33;-1:-1:-1;3826:2:1;;;3880:6;3872;3865:22;3826:2;3907:6;3898:15;;3922:156;3936:2;3933:1;3930:9;3922:156;;;3993:10;;3981:23;;3954:1;3947:9;;;;;4024:12;;;;4056;;3922:156;;;-1:-1:-1;4097:6:1;3054:1055;-1:-1:-1;;;;;;;;3054:1055:1:o;4114:255::-;4181:6;4234:2;4222:9;4213:7;4209:23;4205:32;4202:2;;;4255:6;4247;4240:22;4202:2;4292:9;4286:16;4311:28;4333:5;4311:28;:::i;4374:190::-;4433:6;4486:2;4474:9;4465:7;4461:23;4457:32;4454:2;;;4507:6;4499;4492:22;4454:2;-1:-1:-1;4535:23:1;;4444:120;-1:-1:-1;4444:120:1:o;4569:194::-;4639:6;4692:2;4680:9;4671:7;4667:23;4663:32;4660:2;;;4713:6;4705;4698:22;4660:2;-1:-1:-1;4741:16:1;;4650:113;-1:-1:-1;4650:113:1:o;4768:316::-;4856:6;4864;4872;4925:2;4913:9;4904:7;4900:23;4896:32;4893:2;;;4946:6;4938;4931:22;4893:2;4980:9;4974:16;4964:26;;5030:2;5019:9;5015:18;5009:25;4999:35;;5074:2;5063:9;5059:18;5053:25;5043:35;;4883:201;;;;;:::o;5089:463::-;5142:3;5180:5;5174:12;5207:6;5202:3;5195:19;5233:4;5262:2;5257:3;5253:12;5246:19;;5299:2;5292:5;5288:14;5320:3;5332:195;5346:6;5343:1;5340:13;5332:195;;;5411:13;;-1:-1:-1;;;;;5407:39:1;5395:52;;5467:12;;;;5502:15;;;;5443:1;5361:9;5332:195;;;-1:-1:-1;5543:3:1;;5150:402;-1:-1:-1;;;;;5150:402:1:o;7525:797::-;7747:2;7759:21;;;7732:18;;7815:22;;;7699:4;7894:6;7868:2;7853:18;;7699:4;7931:304;7945:6;7942:1;7939:13;7931:304;;;8020:6;8007:20;8040:31;8065:5;8040:31;:::i;:::-;-1:-1:-1;;;;;8096:31:1;8084:44;;8151:4;8210:15;;;;8175:12;;;;8124:1;7960:9;7931:304;;;7935:3;8252;8244:11;;;;8307:6;8300:14;8293:22;8286:4;8275:9;8271:20;8264:52;7708:614;;;;;;:::o;8754:603::-;8866:4;8895:2;8924;8913:9;8906:21;8956:6;8950:13;8999:6;8994:2;8983:9;8979:18;8972:34;9024:4;9037:140;9051:6;9048:1;9045:13;9037:140;;;9146:14;;;9142:23;;9136:30;9112:17;;;9131:2;9108:26;9101:66;9066:10;;9037:140;;;9195:6;9192:1;9189:13;9186:2;;;9265:4;9260:2;9251:6;9240:9;9236:22;9232:31;9225:45;9186:2;-1:-1:-1;9341:2:1;9320:15;-1:-1:-1;;9316:29:1;9301:45;;;;9348:2;9297:54;;8875:482;-1:-1:-1;;;8875:482:1:o;9362:399::-;9564:2;9546:21;;;9603:2;9583:18;;;9576:30;9642:34;9637:2;9622:18;;9615:62;-1:-1:-1;;;9708:2:1;9693:18;;9686:33;9751:3;9736:19;;9536:225::o;17458:401::-;17660:2;17642:21;;;17699:2;17679:18;;;17672:30;17738:34;17733:2;17718:18;;17711:62;-1:-1:-1;;;17804:2:1;17789:18;;17782:35;17849:3;17834:19;;17632:227::o;20110:332::-;20317:6;20306:9;20299:25;20360:2;20355;20344:9;20340:18;20333:30;20280:4;20380:56;20432:2;20421:9;20417:18;20409:6;20380:56;:::i;:::-;20372:64;20289:153;-1:-1:-1;;;;20289:153:1:o;20447:582::-;20746:6;20735:9;20728:25;20789:6;20784:2;20773:9;20769:18;20762:34;20832:3;20827:2;20816:9;20812:18;20805:31;20709:4;20853:57;20905:3;20894:9;20890:19;20882:6;20853:57;:::i;:::-;-1:-1:-1;;;;;20946:32:1;;;;20941:2;20926:18;;20919:60;-1:-1:-1;21010:3:1;20995:19;20988:35;20845:65;20718:311;-1:-1:-1;;;20718:311:1:o;21800:128::-;21840:3;21871:1;21867:6;21864:1;21861:13;21858:2;;;21877:18;;:::i;:::-;-1:-1:-1;21913:9:1;;21848:80::o;21933:217::-;21973:1;21999;21989:2;;-1:-1:-1;;;22024:31:1;;22078:4;22075:1;22068:15;22106:4;22031:1;22096:15;21989:2;-1:-1:-1;22135:9:1;;21979:171::o;22155:168::-;22195:7;22261:1;22257;22253:6;22249:14;22246:1;22243:21;22238:1;22231:9;22224:17;22220:45;22217:2;;;22268:18;;:::i;:::-;-1:-1:-1;22308:9:1;;22207:116::o;22328:125::-;22368:4;22396:1;22393;22390:8;22387:2;;;22401:18;;:::i;:::-;-1:-1:-1;22438:9:1;;22377:76::o;22458:380::-;22537:1;22533:12;;;;22580;;;22601:2;;22655:4;22647:6;22643:17;22633:27;;22601:2;22708;22700:6;22697:14;22677:18;22674:38;22671:2;;;22754:10;22749:3;22745:20;22742:1;22735:31;22789:4;22786:1;22779:15;22817:4;22814:1;22807:15;22671:2;;22513:325;;;:::o;22843:135::-;22882:3;-1:-1:-1;;22903:17:1;;22900:2;;;22923:18;;:::i;:::-;-1:-1:-1;22970:1:1;22959:13;;22890:88::o;22983:127::-;23044:10;23039:3;23035:20;23032:1;23025:31;23075:4;23072:1;23065:15;23099:4;23096:1;23089:15;23115:127;23176:10;23171:3;23167:20;23164:1;23157:31;23207:4;23204:1;23197:15;23231:4;23228:1;23221:15;23247:131;-1:-1:-1;;;;;23322:31:1;;23312:42;;23302:2;;23368:1;23365;23358:12;23383:118;23469:5;23462:13;23455:21;23448:5;23445:32;23435:2;;23491:1;23488;23481:12

Swarm Source

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