ETH Price: $2,436.72 (-2.33%)

Token

bearn.finance (BFI)
 

Overview

Max Total Supply

45,472.532717665 BFI

Holders

77

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
wlasrc.eth
Balance
928.70922375 BFI

Value
$0.00
0x4F2C5C182C3b3078F2Cf3429c6dc177e7Be4A145
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:
bearnfinance

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: GPL-3.0
// File: @openzeppelin/contracts/utils/Strings.sol

pragma solidity ^0.8.0;


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


// OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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


// OpenZeppelin Contracts v4.4.0 (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/utils/Context.sol


// OpenZeppelin Contracts v4.4.0 (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 v4.4.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 Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

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

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

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

// File: raribots.sol


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

pragma solidity ^0.8.0;






/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    function transferToStakingPool(
        address from,
        address to,
        uint256 tokenId
    ) external;  

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);

}

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 9;
    }

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @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) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @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 sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

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

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts 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 mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message 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, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

interface AggregatorV3Interface {
  function decimals() external view returns (uint8);

  function description() external view returns (string memory);

  function version() external view returns (uint256);

  // getRoundData and latestRoundData should both raise "No data present"
  // if they do not have data to report, instead of returning unset values
  // which could be misinterpreted as actual reported values.
  function getRoundData(uint80 _roundId)
    external
    view
    returns (
      uint80 roundId,
      int256 answer,
      uint256 startedAt,
      uint256 updatedAt,
      uint80 answeredInRound
    );

  function latestRoundData()
    external
    view
    returns (
      uint80 roundId,
      int256 answer,
      uint256 startedAt,
      uint256 updatedAt,
      uint80 answeredInRound
    );
}


contract bearnfinance is ERC20, Ownable {

    //cost of each token
    uint256 private pricePerToken = 100000000; //1 dollar per token

    //controls max supply of tokens
    uint256 maxSupply;
    //controls the current supply that has been minted
    uint256 currentSupply;

    AggregatorV3Interface internal priceFeed;

    constructor() ERC20("bearn.finance", "BFI") {
        priceFeed = AggregatorV3Interface(0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419); 
        maxSupply = 10000000000000000; //10 million supply
    }

    //change price feed interface
    function changePriceFeed(address newFeed) public onlyOwner {
        priceFeed = AggregatorV3Interface(newFeed);
    }

    function getTokentoUSD() public view returns(int) {
          (,int price,,,) = priceFeed.latestRoundData();
          return price;
    }

    function getPriceToken() public view returns(uint256) {
          int price = getTokentoUSD();
          return (pricePerToken * 1000000000000000000) / uint256(price);
    }

    function getPriceUSD() public view returns(uint256) {
          return pricePerToken;
    }

    function accountBalance() public view returns(uint256) {
        return address(this).balance;
    }

    function buyTokens(uint256 amount) public payable {
        require(currentSupply + amount <= maxSupply, "Max Supply Reached!");
        uint256 price = getPriceToken();
        require(msg.value >= price * amount / 1000000000, "Insufficient funds sent to buy this amount of Tokens!");


        _mint(msg.sender, amount);
        _withdraw(payable(owner()), msg.value);
        currentSupply += amount;
    }

    function withdrawAll() public onlyOwner {
        require(accountBalance() > 0, "No funds to withdraw!");
        _withdraw(payable(owner()), accountBalance());
    }
    
    //send the percentage of funds to a shareholder´s wallet
    function _withdraw(address payable account, uint256 amount) internal {
        (bool sent, ) = account.call{value: amount}("");
        require(sent, "Failed to send Ether");
    }

    //allows owner to expand the supply that can be bought
    function addSupplyToBeBought(uint256 toBeAdded) public onlyOwner {
        maxSupply += toBeAdded;
    }

    function amountOfTokensLeft() public view returns(uint256) {
        return maxSupply - currentSupply;
    }

    
    
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"accountBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"toBeAdded","type":"uint256"}],"name":"addSupplyToBeBought","outputs":[],"stateMutability":"nonpayable","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":[],"name":"amountOfTokensLeft","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"buyTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newFeed","type":"address"}],"name":"changePriceFeed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getPriceToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPriceUSD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokentoUSD","outputs":[{"internalType":"int256","name":"","type":"int256"}],"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":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526305f5e1006006553480156200001957600080fd5b506040518060400160405280600d81526020017f626561726e2e66696e616e6365000000000000000000000000000000000000008152506040518060400160405280600381526020017f424649000000000000000000000000000000000000000000000000000000000081525081600390805190602001906200009e92919062000211565b508060049080519060200190620000b792919062000211565b505050620000da620000ce6200014360201b60201c565b6200014b60201b60201c565b735f4ec3df9cbd43714fe2740f5e3616155c5b8419600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550662386f26fc1000060078190555062000326565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200021f90620002f0565b90600052602060002090601f0160209004810192826200024357600085556200028f565b82601f106200025e57805160ff19168380011785556200028f565b828001600101855582156200028f579182015b828111156200028e57825182559160200191906001019062000271565b5b5090506200029e9190620002a2565b5090565b5b80821115620002bd576000816000905550600101620002a3565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200030957607f821691505b6020821081141562000320576200031f620002c1565b5b50919050565b61254d80620003366000396000f3fe6080604052600436106101405760003560e01c806372f0424f116100b6578063a9059cbb1161006f578063a9059cbb14610441578063b0a1c1c41461047e578063c58195bf146104a9578063cbd3df38146104d4578063dd62ed3e146104fd578063f2fde38b1461053a57610140565b806372f0424f14610343578063853828b61461036e578063864f241a146103855780638da5cb5b146103ae57806395d89b41146103d9578063a457c2d71461040457610140565b8063313ce56711610108578063313ce567146102405780633610724e1461026b578063395093511461028757806357a9579e146102c457806370a08231146102ef578063715018a61461032c57610140565b806306fdde0314610145578063086b74b914610170578063095ea7b31461019b57806318160ddd146101d857806323b872dd14610203575b600080fd5b34801561015157600080fd5b5061015a610563565b60405161016791906117e4565b60405180910390f35b34801561017c57600080fd5b506101856105f5565b604051610192919061181f565b60405180910390f35b3480156101a757600080fd5b506101c260048036038101906101bd91906118d3565b6106a5565b6040516101cf919061192e565b60405180910390f35b3480156101e457600080fd5b506101ed6106c3565b6040516101fa9190611958565b60405180910390f35b34801561020f57600080fd5b5061022a60048036038101906102259190611973565b6106cd565b604051610237919061192e565b60405180910390f35b34801561024c57600080fd5b506102556107c5565b60405161026291906119e2565b60405180910390f35b610285600480360381019061028091906119fd565b6107ce565b005b34801561029357600080fd5b506102ae60048036038101906102a991906118d3565b6108c1565b6040516102bb919061192e565b60405180910390f35b3480156102d057600080fd5b506102d961096d565b6040516102e69190611958565b60405180910390f35b3480156102fb57600080fd5b5061031660048036038101906103119190611a2a565b610977565b6040516103239190611958565b60405180910390f35b34801561033857600080fd5b506103416109bf565b005b34801561034f57600080fd5b50610358610a47565b6040516103659190611958565b60405180910390f35b34801561037a57600080fd5b50610383610a7b565b005b34801561039157600080fd5b506103ac60048036038101906103a791906119fd565b610b5b565b005b3480156103ba57600080fd5b506103c3610bf3565b6040516103d09190611a66565b60405180910390f35b3480156103e557600080fd5b506103ee610c1d565b6040516103fb91906117e4565b60405180910390f35b34801561041057600080fd5b5061042b600480360381019061042691906118d3565b610caf565b604051610438919061192e565b60405180910390f35b34801561044d57600080fd5b50610468600480360381019061046391906118d3565b610d9a565b604051610475919061192e565b60405180910390f35b34801561048a57600080fd5b50610493610db8565b6040516104a09190611958565b60405180910390f35b3480156104b557600080fd5b506104be610dc0565b6040516104cb9190611958565b60405180910390f35b3480156104e057600080fd5b506104fb60048036038101906104f69190611a2a565b610dd7565b005b34801561050957600080fd5b50610524600480360381019061051f9190611a81565b610e97565b6040516105319190611958565b60405180910390f35b34801561054657600080fd5b50610561600480360381019061055c9190611a2a565b610f1e565b005b60606003805461057290611af0565b80601f016020809104026020016040519081016040528092919081815260200182805461059e90611af0565b80156105eb5780601f106105c0576101008083540402835291602001916105eb565b820191906000526020600020905b8154815290600101906020018083116105ce57829003601f168201915b5050505050905090565b600080600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a06040518083038186803b15801561066057600080fd5b505afa158015610674573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106989190611ba5565b5050509150508091505090565b60006106b96106b2611016565b848461101e565b6001905092915050565b6000600254905090565b60006106da8484846111e9565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610725611016565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156107a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079c90611c92565b60405180910390fd5b6107b9856107b1611016565b85840361101e565b60019150509392505050565b60006009905090565b600754816008546107df9190611ce1565b1115610820576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081790611d83565b60405180910390fd5b600061082a610a47565b9050633b9aca00828261083d9190611da3565b6108479190611e2c565b341015610889576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088090611ecf565b60405180910390fd5b610893338361146a565b6108a461089e610bf3565b346115ca565b81600860008282546108b69190611ce1565b925050819055505050565b60006109636108ce611016565b8484600160006108dc611016565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461095e9190611ce1565b61101e565b6001905092915050565b6000600654905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6109c7611016565b73ffffffffffffffffffffffffffffffffffffffff166109e5610bf3565b73ffffffffffffffffffffffffffffffffffffffff1614610a3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3290611f3b565b60405180910390fd5b610a45600061167b565b565b600080610a526105f5565b905080670de0b6b3a7640000600654610a6b9190611da3565b610a759190611e2c565b91505090565b610a83611016565b73ffffffffffffffffffffffffffffffffffffffff16610aa1610bf3565b73ffffffffffffffffffffffffffffffffffffffff1614610af7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aee90611f3b565b60405180910390fd5b6000610b01610db8565b11610b41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3890611fa7565b60405180910390fd5b610b59610b4c610bf3565b610b54610db8565b6115ca565b565b610b63611016565b73ffffffffffffffffffffffffffffffffffffffff16610b81610bf3565b73ffffffffffffffffffffffffffffffffffffffff1614610bd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bce90611f3b565b60405180910390fd5b8060076000828254610be99190611ce1565b9250508190555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610c2c90611af0565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5890611af0565b8015610ca55780601f10610c7a57610100808354040283529160200191610ca5565b820191906000526020600020905b815481529060010190602001808311610c8857829003601f168201915b5050505050905090565b60008060016000610cbe611016565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610d7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7290612039565b60405180910390fd5b610d8f610d86611016565b8585840361101e565b600191505092915050565b6000610dae610da7611016565b84846111e9565b6001905092915050565b600047905090565b6000600854600754610dd29190612059565b905090565b610ddf611016565b73ffffffffffffffffffffffffffffffffffffffff16610dfd610bf3565b73ffffffffffffffffffffffffffffffffffffffff1614610e53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4a90611f3b565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610f26611016565b73ffffffffffffffffffffffffffffffffffffffff16610f44610bf3565b73ffffffffffffffffffffffffffffffffffffffff1614610f9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9190611f3b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561100a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611001906120ff565b60405180910390fd5b6110138161167b565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561108e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108590612191565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f590612223565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516111dc9190611958565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611259576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611250906122b5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c090612347565b60405180910390fd5b6112d4838383611741565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561135a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611351906123d9565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113ed9190611ce1565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516114519190611958565b60405180910390a3611464848484611746565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d190612445565b60405180910390fd5b6114e660008383611741565b80600260008282546114f89190611ce1565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461154d9190611ce1565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516115b29190611958565b60405180910390a36115c660008383611746565b5050565b60008273ffffffffffffffffffffffffffffffffffffffff16826040516115f090612496565b60006040518083038185875af1925050503d806000811461162d576040519150601f19603f3d011682016040523d82523d6000602084013e611632565b606091505b5050905080611676576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166d906124f7565b60405180910390fd5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561178557808201518184015260208101905061176a565b83811115611794576000848401525b50505050565b6000601f19601f8301169050919050565b60006117b68261174b565b6117c08185611756565b93506117d0818560208601611767565b6117d98161179a565b840191505092915050565b600060208201905081810360008301526117fe81846117ab565b905092915050565b6000819050919050565b61181981611806565b82525050565b60006020820190506118346000830184611810565b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061186a8261183f565b9050919050565b61187a8161185f565b811461188557600080fd5b50565b60008135905061189781611871565b92915050565b6000819050919050565b6118b08161189d565b81146118bb57600080fd5b50565b6000813590506118cd816118a7565b92915050565b600080604083850312156118ea576118e961183a565b5b60006118f885828601611888565b9250506020611909858286016118be565b9150509250929050565b60008115159050919050565b61192881611913565b82525050565b6000602082019050611943600083018461191f565b92915050565b6119528161189d565b82525050565b600060208201905061196d6000830184611949565b92915050565b60008060006060848603121561198c5761198b61183a565b5b600061199a86828701611888565b93505060206119ab86828701611888565b92505060406119bc868287016118be565b9150509250925092565b600060ff82169050919050565b6119dc816119c6565b82525050565b60006020820190506119f760008301846119d3565b92915050565b600060208284031215611a1357611a1261183a565b5b6000611a21848285016118be565b91505092915050565b600060208284031215611a4057611a3f61183a565b5b6000611a4e84828501611888565b91505092915050565b611a608161185f565b82525050565b6000602082019050611a7b6000830184611a57565b92915050565b60008060408385031215611a9857611a9761183a565b5b6000611aa685828601611888565b9250506020611ab785828601611888565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611b0857607f821691505b60208210811415611b1c57611b1b611ac1565b5b50919050565b600069ffffffffffffffffffff82169050919050565b611b4181611b22565b8114611b4c57600080fd5b50565b600081519050611b5e81611b38565b92915050565b611b6d81611806565b8114611b7857600080fd5b50565b600081519050611b8a81611b64565b92915050565b600081519050611b9f816118a7565b92915050565b600080600080600060a08688031215611bc157611bc061183a565b5b6000611bcf88828901611b4f565b9550506020611be088828901611b7b565b9450506040611bf188828901611b90565b9350506060611c0288828901611b90565b9250506080611c1388828901611b4f565b9150509295509295909350565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000611c7c602883611756565b9150611c8782611c20565b604082019050919050565b60006020820190508181036000830152611cab81611c6f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611cec8261189d565b9150611cf78361189d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611d2c57611d2b611cb2565b5b828201905092915050565b7f4d617820537570706c7920526561636865642100000000000000000000000000600082015250565b6000611d6d601383611756565b9150611d7882611d37565b602082019050919050565b60006020820190508181036000830152611d9c81611d60565b9050919050565b6000611dae8261189d565b9150611db98361189d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611df257611df1611cb2565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611e378261189d565b9150611e428361189d565b925082611e5257611e51611dfd565b5b828204905092915050565b7f496e73756666696369656e742066756e64732073656e7420746f20627579207460008201527f68697320616d6f756e74206f6620546f6b656e73210000000000000000000000602082015250565b6000611eb9603583611756565b9150611ec482611e5d565b604082019050919050565b60006020820190508181036000830152611ee881611eac565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611f25602083611756565b9150611f3082611eef565b602082019050919050565b60006020820190508181036000830152611f5481611f18565b9050919050565b7f4e6f2066756e647320746f207769746864726177210000000000000000000000600082015250565b6000611f91601583611756565b9150611f9c82611f5b565b602082019050919050565b60006020820190508181036000830152611fc081611f84565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612023602583611756565b915061202e82611fc7565b604082019050919050565b6000602082019050818103600083015261205281612016565b9050919050565b60006120648261189d565b915061206f8361189d565b92508282101561208257612081611cb2565b5b828203905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006120e9602683611756565b91506120f48261208d565b604082019050919050565b60006020820190508181036000830152612118816120dc565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061217b602483611756565b91506121868261211f565b604082019050919050565b600060208201905081810360008301526121aa8161216e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061220d602283611756565b9150612218826121b1565b604082019050919050565b6000602082019050818103600083015261223c81612200565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061229f602583611756565b91506122aa82612243565b604082019050919050565b600060208201905081810360008301526122ce81612292565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612331602383611756565b915061233c826122d5565b604082019050919050565b6000602082019050818103600083015261236081612324565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006123c3602683611756565b91506123ce82612367565b604082019050919050565b600060208201905081810360008301526123f2816123b6565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600061242f601f83611756565b915061243a826123f9565b602082019050919050565b6000602082019050818103600083015261245e81612422565b9050919050565b600081905092915050565b50565b6000612480600083612465565b915061248b82612470565b600082019050919050565b60006124a182612473565b9150819050919050565b7f4661696c656420746f2073656e64204574686572000000000000000000000000600082015250565b60006124e1601483611756565b91506124ec826124ab565b602082019050919050565b60006020820190508181036000830152612510816124d4565b905091905056fea2646970667358221220afb418a9d66da5682ca34e882d325da9493a103f2c8f4d8d34763315fe8f397864736f6c63430008090033

Deployed Bytecode

0x6080604052600436106101405760003560e01c806372f0424f116100b6578063a9059cbb1161006f578063a9059cbb14610441578063b0a1c1c41461047e578063c58195bf146104a9578063cbd3df38146104d4578063dd62ed3e146104fd578063f2fde38b1461053a57610140565b806372f0424f14610343578063853828b61461036e578063864f241a146103855780638da5cb5b146103ae57806395d89b41146103d9578063a457c2d71461040457610140565b8063313ce56711610108578063313ce567146102405780633610724e1461026b578063395093511461028757806357a9579e146102c457806370a08231146102ef578063715018a61461032c57610140565b806306fdde0314610145578063086b74b914610170578063095ea7b31461019b57806318160ddd146101d857806323b872dd14610203575b600080fd5b34801561015157600080fd5b5061015a610563565b60405161016791906117e4565b60405180910390f35b34801561017c57600080fd5b506101856105f5565b604051610192919061181f565b60405180910390f35b3480156101a757600080fd5b506101c260048036038101906101bd91906118d3565b6106a5565b6040516101cf919061192e565b60405180910390f35b3480156101e457600080fd5b506101ed6106c3565b6040516101fa9190611958565b60405180910390f35b34801561020f57600080fd5b5061022a60048036038101906102259190611973565b6106cd565b604051610237919061192e565b60405180910390f35b34801561024c57600080fd5b506102556107c5565b60405161026291906119e2565b60405180910390f35b610285600480360381019061028091906119fd565b6107ce565b005b34801561029357600080fd5b506102ae60048036038101906102a991906118d3565b6108c1565b6040516102bb919061192e565b60405180910390f35b3480156102d057600080fd5b506102d961096d565b6040516102e69190611958565b60405180910390f35b3480156102fb57600080fd5b5061031660048036038101906103119190611a2a565b610977565b6040516103239190611958565b60405180910390f35b34801561033857600080fd5b506103416109bf565b005b34801561034f57600080fd5b50610358610a47565b6040516103659190611958565b60405180910390f35b34801561037a57600080fd5b50610383610a7b565b005b34801561039157600080fd5b506103ac60048036038101906103a791906119fd565b610b5b565b005b3480156103ba57600080fd5b506103c3610bf3565b6040516103d09190611a66565b60405180910390f35b3480156103e557600080fd5b506103ee610c1d565b6040516103fb91906117e4565b60405180910390f35b34801561041057600080fd5b5061042b600480360381019061042691906118d3565b610caf565b604051610438919061192e565b60405180910390f35b34801561044d57600080fd5b50610468600480360381019061046391906118d3565b610d9a565b604051610475919061192e565b60405180910390f35b34801561048a57600080fd5b50610493610db8565b6040516104a09190611958565b60405180910390f35b3480156104b557600080fd5b506104be610dc0565b6040516104cb9190611958565b60405180910390f35b3480156104e057600080fd5b506104fb60048036038101906104f69190611a2a565b610dd7565b005b34801561050957600080fd5b50610524600480360381019061051f9190611a81565b610e97565b6040516105319190611958565b60405180910390f35b34801561054657600080fd5b50610561600480360381019061055c9190611a2a565b610f1e565b005b60606003805461057290611af0565b80601f016020809104026020016040519081016040528092919081815260200182805461059e90611af0565b80156105eb5780601f106105c0576101008083540402835291602001916105eb565b820191906000526020600020905b8154815290600101906020018083116105ce57829003601f168201915b5050505050905090565b600080600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a06040518083038186803b15801561066057600080fd5b505afa158015610674573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106989190611ba5565b5050509150508091505090565b60006106b96106b2611016565b848461101e565b6001905092915050565b6000600254905090565b60006106da8484846111e9565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610725611016565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156107a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079c90611c92565b60405180910390fd5b6107b9856107b1611016565b85840361101e565b60019150509392505050565b60006009905090565b600754816008546107df9190611ce1565b1115610820576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081790611d83565b60405180910390fd5b600061082a610a47565b9050633b9aca00828261083d9190611da3565b6108479190611e2c565b341015610889576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088090611ecf565b60405180910390fd5b610893338361146a565b6108a461089e610bf3565b346115ca565b81600860008282546108b69190611ce1565b925050819055505050565b60006109636108ce611016565b8484600160006108dc611016565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461095e9190611ce1565b61101e565b6001905092915050565b6000600654905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6109c7611016565b73ffffffffffffffffffffffffffffffffffffffff166109e5610bf3565b73ffffffffffffffffffffffffffffffffffffffff1614610a3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3290611f3b565b60405180910390fd5b610a45600061167b565b565b600080610a526105f5565b905080670de0b6b3a7640000600654610a6b9190611da3565b610a759190611e2c565b91505090565b610a83611016565b73ffffffffffffffffffffffffffffffffffffffff16610aa1610bf3565b73ffffffffffffffffffffffffffffffffffffffff1614610af7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aee90611f3b565b60405180910390fd5b6000610b01610db8565b11610b41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3890611fa7565b60405180910390fd5b610b59610b4c610bf3565b610b54610db8565b6115ca565b565b610b63611016565b73ffffffffffffffffffffffffffffffffffffffff16610b81610bf3565b73ffffffffffffffffffffffffffffffffffffffff1614610bd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bce90611f3b565b60405180910390fd5b8060076000828254610be99190611ce1565b9250508190555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610c2c90611af0565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5890611af0565b8015610ca55780601f10610c7a57610100808354040283529160200191610ca5565b820191906000526020600020905b815481529060010190602001808311610c8857829003601f168201915b5050505050905090565b60008060016000610cbe611016565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610d7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7290612039565b60405180910390fd5b610d8f610d86611016565b8585840361101e565b600191505092915050565b6000610dae610da7611016565b84846111e9565b6001905092915050565b600047905090565b6000600854600754610dd29190612059565b905090565b610ddf611016565b73ffffffffffffffffffffffffffffffffffffffff16610dfd610bf3565b73ffffffffffffffffffffffffffffffffffffffff1614610e53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4a90611f3b565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610f26611016565b73ffffffffffffffffffffffffffffffffffffffff16610f44610bf3565b73ffffffffffffffffffffffffffffffffffffffff1614610f9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9190611f3b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561100a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611001906120ff565b60405180910390fd5b6110138161167b565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561108e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108590612191565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f590612223565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516111dc9190611958565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611259576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611250906122b5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c090612347565b60405180910390fd5b6112d4838383611741565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561135a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611351906123d9565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113ed9190611ce1565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516114519190611958565b60405180910390a3611464848484611746565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d190612445565b60405180910390fd5b6114e660008383611741565b80600260008282546114f89190611ce1565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461154d9190611ce1565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516115b29190611958565b60405180910390a36115c660008383611746565b5050565b60008273ffffffffffffffffffffffffffffffffffffffff16826040516115f090612496565b60006040518083038185875af1925050503d806000811461162d576040519150601f19603f3d011682016040523d82523d6000602084013e611632565b606091505b5050905080611676576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166d906124f7565b60405180910390fd5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561178557808201518184015260208101905061176a565b83811115611794576000848401525b50505050565b6000601f19601f8301169050919050565b60006117b68261174b565b6117c08185611756565b93506117d0818560208601611767565b6117d98161179a565b840191505092915050565b600060208201905081810360008301526117fe81846117ab565b905092915050565b6000819050919050565b61181981611806565b82525050565b60006020820190506118346000830184611810565b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061186a8261183f565b9050919050565b61187a8161185f565b811461188557600080fd5b50565b60008135905061189781611871565b92915050565b6000819050919050565b6118b08161189d565b81146118bb57600080fd5b50565b6000813590506118cd816118a7565b92915050565b600080604083850312156118ea576118e961183a565b5b60006118f885828601611888565b9250506020611909858286016118be565b9150509250929050565b60008115159050919050565b61192881611913565b82525050565b6000602082019050611943600083018461191f565b92915050565b6119528161189d565b82525050565b600060208201905061196d6000830184611949565b92915050565b60008060006060848603121561198c5761198b61183a565b5b600061199a86828701611888565b93505060206119ab86828701611888565b92505060406119bc868287016118be565b9150509250925092565b600060ff82169050919050565b6119dc816119c6565b82525050565b60006020820190506119f760008301846119d3565b92915050565b600060208284031215611a1357611a1261183a565b5b6000611a21848285016118be565b91505092915050565b600060208284031215611a4057611a3f61183a565b5b6000611a4e84828501611888565b91505092915050565b611a608161185f565b82525050565b6000602082019050611a7b6000830184611a57565b92915050565b60008060408385031215611a9857611a9761183a565b5b6000611aa685828601611888565b9250506020611ab785828601611888565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611b0857607f821691505b60208210811415611b1c57611b1b611ac1565b5b50919050565b600069ffffffffffffffffffff82169050919050565b611b4181611b22565b8114611b4c57600080fd5b50565b600081519050611b5e81611b38565b92915050565b611b6d81611806565b8114611b7857600080fd5b50565b600081519050611b8a81611b64565b92915050565b600081519050611b9f816118a7565b92915050565b600080600080600060a08688031215611bc157611bc061183a565b5b6000611bcf88828901611b4f565b9550506020611be088828901611b7b565b9450506040611bf188828901611b90565b9350506060611c0288828901611b90565b9250506080611c1388828901611b4f565b9150509295509295909350565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000611c7c602883611756565b9150611c8782611c20565b604082019050919050565b60006020820190508181036000830152611cab81611c6f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611cec8261189d565b9150611cf78361189d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611d2c57611d2b611cb2565b5b828201905092915050565b7f4d617820537570706c7920526561636865642100000000000000000000000000600082015250565b6000611d6d601383611756565b9150611d7882611d37565b602082019050919050565b60006020820190508181036000830152611d9c81611d60565b9050919050565b6000611dae8261189d565b9150611db98361189d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611df257611df1611cb2565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611e378261189d565b9150611e428361189d565b925082611e5257611e51611dfd565b5b828204905092915050565b7f496e73756666696369656e742066756e64732073656e7420746f20627579207460008201527f68697320616d6f756e74206f6620546f6b656e73210000000000000000000000602082015250565b6000611eb9603583611756565b9150611ec482611e5d565b604082019050919050565b60006020820190508181036000830152611ee881611eac565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611f25602083611756565b9150611f3082611eef565b602082019050919050565b60006020820190508181036000830152611f5481611f18565b9050919050565b7f4e6f2066756e647320746f207769746864726177210000000000000000000000600082015250565b6000611f91601583611756565b9150611f9c82611f5b565b602082019050919050565b60006020820190508181036000830152611fc081611f84565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612023602583611756565b915061202e82611fc7565b604082019050919050565b6000602082019050818103600083015261205281612016565b9050919050565b60006120648261189d565b915061206f8361189d565b92508282101561208257612081611cb2565b5b828203905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006120e9602683611756565b91506120f48261208d565b604082019050919050565b60006020820190508181036000830152612118816120dc565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061217b602483611756565b91506121868261211f565b604082019050919050565b600060208201905081810360008301526121aa8161216e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061220d602283611756565b9150612218826121b1565b604082019050919050565b6000602082019050818103600083015261223c81612200565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061229f602583611756565b91506122aa82612243565b604082019050919050565b600060208201905081810360008301526122ce81612292565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612331602383611756565b915061233c826122d5565b604082019050919050565b6000602082019050818103600083015261236081612324565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006123c3602683611756565b91506123ce82612367565b604082019050919050565b600060208201905081810360008301526123f2816123b6565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600061242f601f83611756565b915061243a826123f9565b602082019050919050565b6000602082019050818103600083015261245e81612422565b9050919050565b600081905092915050565b50565b6000612480600083612465565b915061248b82612470565b600082019050919050565b60006124a182612473565b9150819050919050565b7f4661696c656420746f2073656e64204574686572000000000000000000000000600082015250565b60006124e1601483611756565b91506124ec826124ab565b602082019050919050565b60006020820190508181036000830152612510816124d4565b905091905056fea2646970667358221220afb418a9d66da5682ca34e882d325da9493a103f2c8f4d8d34763315fe8f397864736f6c63430008090033

Deployed Bytecode Sourcemap

30511:2420:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14393:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31225:141;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16559:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15512:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17210:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15355:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31769:418;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18111:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31558:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15683:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6357:103;;;;;;;;;;;;;:::i;:::-;;31374:176;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32195:169;;;;;;;;;;;;;:::i;:::-;;32690:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5706:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14612:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18829:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16023:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31659:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32804:110;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31097:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16261:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6615:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14393:100;14447:13;14480:5;14473:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14393:100;:::o;31225:141::-;31270:3;31290:9;31306;;;;;;;;;;;:25;;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31288:45;;;;;;31353:5;31346:12;;;31225:141;:::o;16559:169::-;16642:4;16659:39;16668:12;:10;:12::i;:::-;16682:7;16691:6;16659:8;:39::i;:::-;16716:4;16709:11;;16559:169;;;;:::o;15512:108::-;15573:7;15600:12;;15593:19;;15512:108;:::o;17210:492::-;17350:4;17367:36;17377:6;17385:9;17396:6;17367:9;:36::i;:::-;17416:24;17443:11;:19;17455:6;17443:19;;;;;;;;;;;;;;;:33;17463:12;:10;:12::i;:::-;17443:33;;;;;;;;;;;;;;;;17416:60;;17515:6;17495:16;:26;;17487:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;17602:57;17611:6;17619:12;:10;:12::i;:::-;17652:6;17633:16;:25;17602:8;:57::i;:::-;17690:4;17683:11;;;17210:492;;;;;:::o;15355:92::-;15413:5;15438:1;15431:8;;15355:92;:::o;31769:418::-;31864:9;;31854:6;31838:13;;:22;;;;:::i;:::-;:35;;31830:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31908:13;31924:15;:13;:15::i;:::-;31908:31;;31988:10;31979:6;31971:5;:14;;;;:::i;:::-;:27;;;;:::i;:::-;31958:9;:40;;31950:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;32071:25;32077:10;32089:6;32071:5;:25::i;:::-;32107:38;32125:7;:5;:7::i;:::-;32135:9;32107;:38::i;:::-;32173:6;32156:13;;:23;;;;;;;:::i;:::-;;;;;;;;31819:368;31769:418;:::o;18111:215::-;18199:4;18216:80;18225:12;:10;:12::i;:::-;18239:7;18285:10;18248:11;:25;18260:12;:10;:12::i;:::-;18248:25;;;;;;;;;;;;;;;:34;18274:7;18248:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;18216:8;:80::i;:::-;18314:4;18307:11;;18111:215;;;;:::o;31558:93::-;31601:7;31630:13;;31623:20;;31558:93;:::o;15683:127::-;15757:7;15784:9;:18;15794:7;15784:18;;;;;;;;;;;;;;;;15777:25;;15683:127;;;:::o;6357:103::-;5937:12;:10;:12::i;:::-;5926:23;;:7;:5;:7::i;:::-;:23;;;5918:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6422:30:::1;6449:1;6422:18;:30::i;:::-;6357:103::o:0;31374:176::-;31419:7;31441:9;31453:15;:13;:15::i;:::-;31441:27;;31536:5;31505:19;31489:13;;:35;;;;:::i;:::-;31488:54;;;;:::i;:::-;31481:61;;;31374:176;:::o;32195:169::-;5937:12;:10;:12::i;:::-;5926:23;;:7;:5;:7::i;:::-;:23;;;5918:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32273:1:::1;32254:16;:14;:16::i;:::-;:20;32246:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;32311:45;32329:7;:5;:7::i;:::-;32339:16;:14;:16::i;:::-;32311:9;:45::i;:::-;32195:169::o:0;32690:106::-;5937:12;:10;:12::i;:::-;5926:23;;:7;:5;:7::i;:::-;:23;;;5918:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32779:9:::1;32766;;:22;;;;;;;:::i;:::-;;;;;;;;32690:106:::0;:::o;5706:87::-;5752:7;5779:6;;;;;;;;;;;5772:13;;5706:87;:::o;14612:104::-;14668:13;14701:7;14694:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14612:104;:::o;18829:413::-;18922:4;18939:24;18966:11;:25;18978:12;:10;:12::i;:::-;18966:25;;;;;;;;;;;;;;;:34;18992:7;18966:34;;;;;;;;;;;;;;;;18939:61;;19039:15;19019:16;:35;;19011:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;19132:67;19141:12;:10;:12::i;:::-;19155:7;19183:15;19164:16;:34;19132:8;:67::i;:::-;19230:4;19223:11;;;18829:413;;;;:::o;16023:175::-;16109:4;16126:42;16136:12;:10;:12::i;:::-;16150:9;16161:6;16126:9;:42::i;:::-;16186:4;16179:11;;16023:175;;;;:::o;31659:102::-;31705:7;31732:21;31725:28;;31659:102;:::o;32804:110::-;32854:7;32893:13;;32881:9;;:25;;;;:::i;:::-;32874:32;;32804:110;:::o;31097:120::-;5937:12;:10;:12::i;:::-;5926:23;;:7;:5;:7::i;:::-;:23;;;5918:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31201:7:::1;31167:9;;:42;;;;;;;;;;;;;;;;;;31097:120:::0;:::o;16261:151::-;16350:7;16377:11;:18;16389:5;16377:18;;;;;;;;;;;;;;;:27;16396:7;16377:27;;;;;;;;;;;;;;;;16370:34;;16261:151;;;;:::o;6615:201::-;5937:12;:10;:12::i;:::-;5926:23;;:7;:5;:7::i;:::-;:23;;;5918:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6724:1:::1;6704:22;;:8;:22;;;;6696:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6780:28;6799:8;6780:18;:28::i;:::-;6615:201:::0;:::o;4430:98::-;4483:7;4510:10;4503:17;;4430:98;:::o;22513:380::-;22666:1;22649:19;;:5;:19;;;;22641:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22747:1;22728:21;;:7;:21;;;;22720:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22831:6;22801:11;:18;22813:5;22801:18;;;;;;;;;;;;;;;:27;22820:7;22801:27;;;;;;;;;;;;;;;:36;;;;22869:7;22853:32;;22862:5;22853:32;;;22878:6;22853:32;;;;;;:::i;:::-;;;;;;;;22513:380;;;:::o;19732:733::-;19890:1;19872:20;;:6;:20;;;;19864:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;19974:1;19953:23;;:9;:23;;;;19945:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;20029:47;20050:6;20058:9;20069:6;20029:20;:47::i;:::-;20089:21;20113:9;:17;20123:6;20113:17;;;;;;;;;;;;;;;;20089:41;;20166:6;20149:13;:23;;20141:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;20287:6;20271:13;:22;20251:9;:17;20261:6;20251:17;;;;;;;;;;;;;;;:42;;;;20339:6;20315:9;:20;20325:9;20315:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;20380:9;20363:35;;20372:6;20363:35;;;20391:6;20363:35;;;;;;:::i;:::-;;;;;;;;20411:46;20431:6;20439:9;20450:6;20411:19;:46::i;:::-;19853:612;19732:733;;;:::o;20752:399::-;20855:1;20836:21;;:7;:21;;;;20828:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;20906:49;20935:1;20939:7;20948:6;20906:20;:49::i;:::-;20984:6;20968:12;;:22;;;;;;;:::i;:::-;;;;;;;;21023:6;21001:9;:18;21011:7;21001:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;21066:7;21045:37;;21062:1;21045:37;;;21075:6;21045:37;;;;;;:::i;:::-;;;;;;;;21095:48;21123:1;21127:7;21136:6;21095:19;:48::i;:::-;20752:399;;:::o;32439:183::-;32520:9;32535:7;:12;;32555:6;32535:31;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32519:47;;;32585:4;32577:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;32508:114;32439:183;;:::o;6976:191::-;7050:16;7069:6;;;;;;;;;;;7050:25;;7095:8;7086:6;;:17;;;;;;;;;;;;;;;;;;7150:8;7119:40;;7140:8;7119:40;;;;;;;;;;;;7039:128;6976:191;:::o;23493:125::-;;;;:::o;24222:124::-;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1397:76::-;1433:7;1462:5;1451:16;;1397:76;;;:::o;1479:115::-;1564:23;1581:5;1564:23;:::i;:::-;1559:3;1552:36;1479:115;;:::o;1600:218::-;1691:4;1729:2;1718:9;1714:18;1706:26;;1742:69;1808:1;1797:9;1793:17;1784:6;1742:69;:::i;:::-;1600:218;;;;:::o;1905:117::-;2014:1;2011;2004:12;2151:126;2188:7;2228:42;2221:5;2217:54;2206:65;;2151:126;;;:::o;2283:96::-;2320:7;2349:24;2367:5;2349:24;:::i;:::-;2338:35;;2283:96;;;:::o;2385:122::-;2458:24;2476:5;2458:24;:::i;:::-;2451:5;2448:35;2438:63;;2497:1;2494;2487:12;2438:63;2385:122;:::o;2513:139::-;2559:5;2597:6;2584:20;2575:29;;2613:33;2640:5;2613:33;:::i;:::-;2513:139;;;;:::o;2658:77::-;2695:7;2724:5;2713:16;;2658:77;;;:::o;2741:122::-;2814:24;2832:5;2814:24;:::i;:::-;2807:5;2804:35;2794:63;;2853:1;2850;2843:12;2794:63;2741:122;:::o;2869:139::-;2915:5;2953:6;2940:20;2931:29;;2969:33;2996:5;2969:33;:::i;:::-;2869:139;;;;:::o;3014:474::-;3082:6;3090;3139:2;3127:9;3118:7;3114:23;3110:32;3107:119;;;3145:79;;:::i;:::-;3107:119;3265:1;3290:53;3335:7;3326:6;3315:9;3311:22;3290:53;:::i;:::-;3280:63;;3236:117;3392:2;3418:53;3463:7;3454:6;3443:9;3439:22;3418:53;:::i;:::-;3408:63;;3363:118;3014:474;;;;;:::o;3494:90::-;3528:7;3571:5;3564:13;3557:21;3546:32;;3494:90;;;:::o;3590:109::-;3671:21;3686:5;3671:21;:::i;:::-;3666:3;3659:34;3590:109;;:::o;3705:210::-;3792:4;3830:2;3819:9;3815:18;3807:26;;3843:65;3905:1;3894:9;3890:17;3881:6;3843:65;:::i;:::-;3705:210;;;;:::o;3921:118::-;4008:24;4026:5;4008:24;:::i;:::-;4003:3;3996:37;3921:118;;:::o;4045:222::-;4138:4;4176:2;4165:9;4161:18;4153:26;;4189:71;4257:1;4246:9;4242:17;4233:6;4189:71;:::i;:::-;4045:222;;;;:::o;4273:619::-;4350:6;4358;4366;4415:2;4403:9;4394:7;4390:23;4386:32;4383:119;;;4421:79;;:::i;:::-;4383:119;4541:1;4566:53;4611:7;4602:6;4591:9;4587:22;4566:53;:::i;:::-;4556:63;;4512:117;4668:2;4694:53;4739:7;4730:6;4719:9;4715:22;4694:53;:::i;:::-;4684:63;;4639:118;4796:2;4822:53;4867:7;4858:6;4847:9;4843:22;4822:53;:::i;:::-;4812:63;;4767:118;4273:619;;;;;:::o;4898:86::-;4933:7;4973:4;4966:5;4962:16;4951:27;;4898:86;;;:::o;4990:112::-;5073:22;5089:5;5073:22;:::i;:::-;5068:3;5061:35;4990:112;;:::o;5108:214::-;5197:4;5235:2;5224:9;5220:18;5212:26;;5248:67;5312:1;5301:9;5297:17;5288:6;5248:67;:::i;:::-;5108:214;;;;:::o;5328:329::-;5387:6;5436:2;5424:9;5415:7;5411:23;5407:32;5404:119;;;5442:79;;:::i;:::-;5404:119;5562:1;5587:53;5632:7;5623:6;5612:9;5608:22;5587:53;:::i;:::-;5577:63;;5533:117;5328:329;;;;:::o;5663:::-;5722:6;5771:2;5759:9;5750:7;5746:23;5742:32;5739:119;;;5777:79;;:::i;:::-;5739:119;5897:1;5922:53;5967:7;5958:6;5947:9;5943:22;5922:53;:::i;:::-;5912:63;;5868:117;5663:329;;;;:::o;5998:118::-;6085:24;6103:5;6085:24;:::i;:::-;6080:3;6073:37;5998:118;;:::o;6122:222::-;6215:4;6253:2;6242:9;6238:18;6230:26;;6266:71;6334:1;6323:9;6319:17;6310:6;6266:71;:::i;:::-;6122:222;;;;:::o;6350:474::-;6418:6;6426;6475:2;6463:9;6454:7;6450:23;6446:32;6443:119;;;6481:79;;:::i;:::-;6443:119;6601:1;6626:53;6671:7;6662:6;6651:9;6647:22;6626:53;:::i;:::-;6616:63;;6572:117;6728:2;6754:53;6799:7;6790:6;6779:9;6775:22;6754:53;:::i;:::-;6744:63;;6699:118;6350:474;;;;;:::o;6830:180::-;6878:77;6875:1;6868:88;6975:4;6972:1;6965:15;6999:4;6996:1;6989:15;7016:320;7060:6;7097:1;7091:4;7087:12;7077:22;;7144:1;7138:4;7134:12;7165:18;7155:81;;7221:4;7213:6;7209:17;7199:27;;7155:81;7283:2;7275:6;7272:14;7252:18;7249:38;7246:84;;;7302:18;;:::i;:::-;7246:84;7067:269;7016:320;;;:::o;7342:105::-;7378:7;7418:22;7411:5;7407:34;7396:45;;7342:105;;;:::o;7453:120::-;7525:23;7542:5;7525:23;:::i;:::-;7518:5;7515:34;7505:62;;7563:1;7560;7553:12;7505:62;7453:120;:::o;7579:141::-;7635:5;7666:6;7660:13;7651:22;;7682:32;7708:5;7682:32;:::i;:::-;7579:141;;;;:::o;7726:120::-;7798:23;7815:5;7798:23;:::i;:::-;7791:5;7788:34;7778:62;;7836:1;7833;7826:12;7778:62;7726:120;:::o;7852:141::-;7908:5;7939:6;7933:13;7924:22;;7955:32;7981:5;7955:32;:::i;:::-;7852:141;;;;:::o;7999:143::-;8056:5;8087:6;8081:13;8072:22;;8103:33;8130:5;8103:33;:::i;:::-;7999:143;;;;:::o;8148:971::-;8251:6;8259;8267;8275;8283;8332:3;8320:9;8311:7;8307:23;8303:33;8300:120;;;8339:79;;:::i;:::-;8300:120;8459:1;8484:63;8539:7;8530:6;8519:9;8515:22;8484:63;:::i;:::-;8474:73;;8430:127;8596:2;8622:63;8677:7;8668:6;8657:9;8653:22;8622:63;:::i;:::-;8612:73;;8567:128;8734:2;8760:64;8816:7;8807:6;8796:9;8792:22;8760:64;:::i;:::-;8750:74;;8705:129;8873:2;8899:64;8955:7;8946:6;8935:9;8931:22;8899:64;:::i;:::-;8889:74;;8844:129;9012:3;9039:63;9094:7;9085:6;9074:9;9070:22;9039:63;:::i;:::-;9029:73;;8983:129;8148:971;;;;;;;;:::o;9125:227::-;9265:34;9261:1;9253:6;9249:14;9242:58;9334:10;9329:2;9321:6;9317:15;9310:35;9125:227;:::o;9358:366::-;9500:3;9521:67;9585:2;9580:3;9521:67;:::i;:::-;9514:74;;9597:93;9686:3;9597:93;:::i;:::-;9715:2;9710:3;9706:12;9699:19;;9358:366;;;:::o;9730:419::-;9896:4;9934:2;9923:9;9919:18;9911:26;;9983:9;9977:4;9973:20;9969:1;9958:9;9954:17;9947:47;10011:131;10137:4;10011:131;:::i;:::-;10003:139;;9730:419;;;:::o;10155:180::-;10203:77;10200:1;10193:88;10300:4;10297:1;10290:15;10324:4;10321:1;10314:15;10341:305;10381:3;10400:20;10418:1;10400:20;:::i;:::-;10395:25;;10434:20;10452:1;10434:20;:::i;:::-;10429:25;;10588:1;10520:66;10516:74;10513:1;10510:81;10507:107;;;10594:18;;:::i;:::-;10507:107;10638:1;10635;10631:9;10624:16;;10341:305;;;;:::o;10652:169::-;10792:21;10788:1;10780:6;10776:14;10769:45;10652:169;:::o;10827:366::-;10969:3;10990:67;11054:2;11049:3;10990:67;:::i;:::-;10983:74;;11066:93;11155:3;11066:93;:::i;:::-;11184:2;11179:3;11175:12;11168:19;;10827:366;;;:::o;11199:419::-;11365:4;11403:2;11392:9;11388:18;11380:26;;11452:9;11446:4;11442:20;11438:1;11427:9;11423:17;11416:47;11480:131;11606:4;11480:131;:::i;:::-;11472:139;;11199:419;;;:::o;11624:348::-;11664:7;11687:20;11705:1;11687:20;:::i;:::-;11682:25;;11721:20;11739:1;11721:20;:::i;:::-;11716:25;;11909:1;11841:66;11837:74;11834:1;11831:81;11826:1;11819:9;11812:17;11808:105;11805:131;;;11916:18;;:::i;:::-;11805:131;11964:1;11961;11957:9;11946:20;;11624:348;;;;:::o;11978:180::-;12026:77;12023:1;12016:88;12123:4;12120:1;12113:15;12147:4;12144:1;12137:15;12164:185;12204:1;12221:20;12239:1;12221:20;:::i;:::-;12216:25;;12255:20;12273:1;12255:20;:::i;:::-;12250:25;;12294:1;12284:35;;12299:18;;:::i;:::-;12284:35;12341:1;12338;12334:9;12329:14;;12164:185;;;;:::o;12355:240::-;12495:34;12491:1;12483:6;12479:14;12472:58;12564:23;12559:2;12551:6;12547:15;12540:48;12355:240;:::o;12601:366::-;12743:3;12764:67;12828:2;12823:3;12764:67;:::i;:::-;12757:74;;12840:93;12929:3;12840:93;:::i;:::-;12958:2;12953:3;12949:12;12942:19;;12601:366;;;:::o;12973:419::-;13139:4;13177:2;13166:9;13162:18;13154:26;;13226:9;13220:4;13216:20;13212:1;13201:9;13197:17;13190:47;13254:131;13380:4;13254:131;:::i;:::-;13246:139;;12973:419;;;:::o;13398:182::-;13538:34;13534:1;13526:6;13522:14;13515:58;13398:182;:::o;13586:366::-;13728:3;13749:67;13813:2;13808:3;13749:67;:::i;:::-;13742:74;;13825:93;13914:3;13825:93;:::i;:::-;13943:2;13938:3;13934:12;13927:19;;13586:366;;;:::o;13958:419::-;14124:4;14162:2;14151:9;14147:18;14139:26;;14211:9;14205:4;14201:20;14197:1;14186:9;14182:17;14175:47;14239:131;14365:4;14239:131;:::i;:::-;14231:139;;13958:419;;;:::o;14383:171::-;14523:23;14519:1;14511:6;14507:14;14500:47;14383:171;:::o;14560:366::-;14702:3;14723:67;14787:2;14782:3;14723:67;:::i;:::-;14716:74;;14799:93;14888:3;14799:93;:::i;:::-;14917:2;14912:3;14908:12;14901:19;;14560:366;;;:::o;14932:419::-;15098:4;15136:2;15125:9;15121:18;15113:26;;15185:9;15179:4;15175:20;15171:1;15160:9;15156:17;15149:47;15213:131;15339:4;15213:131;:::i;:::-;15205:139;;14932:419;;;:::o;15357:224::-;15497:34;15493:1;15485:6;15481:14;15474:58;15566:7;15561:2;15553:6;15549:15;15542:32;15357:224;:::o;15587:366::-;15729:3;15750:67;15814:2;15809:3;15750:67;:::i;:::-;15743:74;;15826:93;15915:3;15826:93;:::i;:::-;15944:2;15939:3;15935:12;15928:19;;15587:366;;;:::o;15959:419::-;16125:4;16163:2;16152:9;16148:18;16140:26;;16212:9;16206:4;16202:20;16198:1;16187:9;16183:17;16176:47;16240:131;16366:4;16240:131;:::i;:::-;16232:139;;15959:419;;;:::o;16384:191::-;16424:4;16444:20;16462:1;16444:20;:::i;:::-;16439:25;;16478:20;16496:1;16478:20;:::i;:::-;16473:25;;16517:1;16514;16511:8;16508:34;;;16522:18;;:::i;:::-;16508:34;16567:1;16564;16560:9;16552:17;;16384:191;;;;:::o;16581:225::-;16721:34;16717:1;16709:6;16705:14;16698:58;16790:8;16785:2;16777:6;16773:15;16766:33;16581:225;:::o;16812:366::-;16954:3;16975:67;17039:2;17034:3;16975:67;:::i;:::-;16968:74;;17051:93;17140:3;17051:93;:::i;:::-;17169:2;17164:3;17160:12;17153:19;;16812:366;;;:::o;17184:419::-;17350:4;17388:2;17377:9;17373:18;17365:26;;17437:9;17431:4;17427:20;17423:1;17412:9;17408:17;17401:47;17465:131;17591:4;17465:131;:::i;:::-;17457:139;;17184:419;;;:::o;17609:223::-;17749:34;17745:1;17737:6;17733:14;17726:58;17818:6;17813:2;17805:6;17801:15;17794:31;17609:223;:::o;17838:366::-;17980:3;18001:67;18065:2;18060:3;18001:67;:::i;:::-;17994:74;;18077:93;18166:3;18077:93;:::i;:::-;18195:2;18190:3;18186:12;18179:19;;17838:366;;;:::o;18210:419::-;18376:4;18414:2;18403:9;18399:18;18391:26;;18463:9;18457:4;18453:20;18449:1;18438:9;18434:17;18427:47;18491:131;18617:4;18491:131;:::i;:::-;18483:139;;18210:419;;;:::o;18635:221::-;18775:34;18771:1;18763:6;18759:14;18752:58;18844:4;18839:2;18831:6;18827:15;18820:29;18635:221;:::o;18862:366::-;19004:3;19025:67;19089:2;19084:3;19025:67;:::i;:::-;19018:74;;19101:93;19190:3;19101:93;:::i;:::-;19219:2;19214:3;19210:12;19203:19;;18862:366;;;:::o;19234:419::-;19400:4;19438:2;19427:9;19423:18;19415:26;;19487:9;19481:4;19477:20;19473:1;19462:9;19458:17;19451:47;19515:131;19641:4;19515:131;:::i;:::-;19507:139;;19234:419;;;:::o;19659:224::-;19799:34;19795:1;19787:6;19783:14;19776:58;19868:7;19863:2;19855:6;19851:15;19844:32;19659:224;:::o;19889:366::-;20031:3;20052:67;20116:2;20111:3;20052:67;:::i;:::-;20045:74;;20128:93;20217:3;20128:93;:::i;:::-;20246:2;20241:3;20237:12;20230:19;;19889:366;;;:::o;20261:419::-;20427:4;20465:2;20454:9;20450:18;20442:26;;20514:9;20508:4;20504:20;20500:1;20489:9;20485:17;20478:47;20542:131;20668:4;20542:131;:::i;:::-;20534:139;;20261:419;;;:::o;20686:222::-;20826:34;20822:1;20814:6;20810:14;20803:58;20895:5;20890:2;20882:6;20878:15;20871:30;20686:222;:::o;20914:366::-;21056:3;21077:67;21141:2;21136:3;21077:67;:::i;:::-;21070:74;;21153:93;21242:3;21153:93;:::i;:::-;21271:2;21266:3;21262:12;21255:19;;20914:366;;;:::o;21286:419::-;21452:4;21490:2;21479:9;21475:18;21467:26;;21539:9;21533:4;21529:20;21525:1;21514:9;21510:17;21503:47;21567:131;21693:4;21567:131;:::i;:::-;21559:139;;21286:419;;;:::o;21711:225::-;21851:34;21847:1;21839:6;21835:14;21828:58;21920:8;21915:2;21907:6;21903:15;21896:33;21711:225;:::o;21942:366::-;22084:3;22105:67;22169:2;22164:3;22105:67;:::i;:::-;22098:74;;22181:93;22270:3;22181:93;:::i;:::-;22299:2;22294:3;22290:12;22283:19;;21942:366;;;:::o;22314:419::-;22480:4;22518:2;22507:9;22503:18;22495:26;;22567:9;22561:4;22557:20;22553:1;22542:9;22538:17;22531:47;22595:131;22721:4;22595:131;:::i;:::-;22587:139;;22314:419;;;:::o;22739:181::-;22879:33;22875:1;22867:6;22863:14;22856:57;22739:181;:::o;22926:366::-;23068:3;23089:67;23153:2;23148:3;23089:67;:::i;:::-;23082:74;;23165:93;23254:3;23165:93;:::i;:::-;23283:2;23278:3;23274:12;23267:19;;22926:366;;;:::o;23298:419::-;23464:4;23502:2;23491:9;23487:18;23479:26;;23551:9;23545:4;23541:20;23537:1;23526:9;23522:17;23515:47;23579:131;23705:4;23579:131;:::i;:::-;23571:139;;23298:419;;;:::o;23723:147::-;23824:11;23861:3;23846:18;;23723:147;;;;:::o;23876:114::-;;:::o;23996:398::-;24155:3;24176:83;24257:1;24252:3;24176:83;:::i;:::-;24169:90;;24268:93;24357:3;24268:93;:::i;:::-;24386:1;24381:3;24377:11;24370:18;;23996:398;;;:::o;24400:379::-;24584:3;24606:147;24749:3;24606:147;:::i;:::-;24599:154;;24770:3;24763:10;;24400:379;;;:::o;24785:170::-;24925:22;24921:1;24913:6;24909:14;24902:46;24785:170;:::o;24961:366::-;25103:3;25124:67;25188:2;25183:3;25124:67;:::i;:::-;25117:74;;25200:93;25289:3;25200:93;:::i;:::-;25318:2;25313:3;25309:12;25302:19;;24961:366;;;:::o;25333:419::-;25499:4;25537:2;25526:9;25522:18;25514:26;;25586:9;25580:4;25576:20;25572:1;25561:9;25557:17;25550:47;25614:131;25740:4;25614:131;:::i;:::-;25606:139;;25333:419;;;:::o

Swarm Source

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