ETH Price: $2,960.30 (+0.78%)

Token

Arb Egg (AREG)

Overview

Max Total Supply

110,991 AREG

Holders

108,878

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 AREG
0x741062d8DEaF764aa1c295b7Acf1eFF49de2dFEF
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
ArbEgg

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 1 of 7: ArbEgg.sol
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.10;
/**
                       &GJ7P         P7JG&        
                &    &57JG&           &GJ75&    & 
               J7B  B77B                 B77B  B7J
               ?7P &77&                   &77& 57J
               &Y75J75    &#         #&    Y7JY7Y&
                 &PY7?&  P7J&       &J7P  &?7YP&  
                    B?7G&?7G         G7?&G7?B     
                      BY777?J???????J?777YB       
                 &#BBB#G7777777777777777?G#BBB#   
                P777777777???7777777???777777777G 
                Y77777777?!.~???????~.!?77777777Y 
                 #BP77777?~ ^?7!~!7?^ ~?77777PB&  
                   B777777777:     :777777777G    
                   Y7777777?~  :~:  ~?7777777J    
                   J777777777.  .  :777777777?    
                   J77777777??7~^~7?777777777?    
                   Y7777777777?????7777777777J    
                   P7???????????????????????75        

    website : https://arbswap.io
    twitter : https://twitter.com/arbswapofficial
 */

import "./ERC721.sol";
import "./Strings.sol";
import "./Ownable.sol";
import "./IERC20.sol";

error NonExistentTokenURI();
error WithdrawTransfer();
error NoContract();
error Minted();

contract ArbEgg is ERC721, Ownable {
    using Strings for uint256;
    string public baseURI;
    uint256 public currentTokenId;
    mapping(address => bool) public minted;

    event RevokeToken(address, address, uint256);
    event UpdateURI();

    constructor(string memory _baseURI) ERC721("Arb Egg", "AREG") {
        baseURI = _baseURI;
    }

    function claim() external returns (uint256) {
        if (minted[msg.sender]) {
            revert Minted();
        }
        if (tx.origin != msg.sender) {
            revert NoContract();
        }
        uint256 newTokenId = ++currentTokenId;
        minted[msg.sender] = true;
        _safeMint(msg.sender, newTokenId);
        return newTokenId;
    }

    function tokenURI(
        uint256 tokenId
    ) public view virtual override returns (string memory) {
        if (ownerOf(tokenId) == address(0)) {
            revert NonExistentTokenURI();
        }
        return bytes(baseURI).length > 0 ? baseURI : "";
    }

    function updateURI(string memory newURI) external onlyOwner {
        baseURI = newURI;
        emit UpdateURI();
    }

    function totalSupply() public view returns (uint256) {
        return currentTokenId;
    }

    function withdrawPayments(address payable payee) external onlyOwner {
        uint256 balance = address(this).balance;
        (bool transferTx, ) = payee.call{value: balance}("");
        if (!transferTx) {
            revert WithdrawTransfer();
        }
    }

    function revokeWrongToken(address token_) external onlyOwner {
        if (token_ == address(0x0)) {
            (bool sent, ) = msg.sender.call{value: address(this).balance}(
                new bytes(0)
            );
            require(sent, "Failed to send VS");
            return;
        }
        IERC20 token = IERC20(token_);
        uint256 amount = token.balanceOf(address(this));
        token.transfer(msg.sender, amount);

        emit RevokeToken(msg.sender, token_, amount);
    }
}

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

pragma solidity ^0.8.0;

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

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

File 3 of 7: ERC721.sol
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.8.0;

/// @notice Modern, minimalist, and gas efficient ERC-721 implementation.
/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC721.sol)
abstract contract ERC721 {
    /*//////////////////////////////////////////////////////////////
                                 EVENTS
    //////////////////////////////////////////////////////////////*/

    event Transfer(address indexed from, address indexed to, uint256 indexed id);

    event Approval(address indexed owner, address indexed spender, uint256 indexed id);

    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /*//////////////////////////////////////////////////////////////
                         METADATA STORAGE/LOGIC
    //////////////////////////////////////////////////////////////*/

    string public name;

    string public symbol;

    function tokenURI(uint256 id) public view virtual returns (string memory);

    /*//////////////////////////////////////////////////////////////
                      ERC721 BALANCE/OWNER STORAGE
    //////////////////////////////////////////////////////////////*/

    mapping(uint256 => address) internal _ownerOf;

    mapping(address => uint256) internal _balanceOf;

    function ownerOf(uint256 id) public view virtual returns (address owner) {
        require((owner = _ownerOf[id]) != address(0), "NOT_MINTED");
    }

    function balanceOf(address owner) public view virtual returns (uint256) {
        require(owner != address(0), "ZERO_ADDRESS");

        return _balanceOf[owner];
    }

    /*//////////////////////////////////////////////////////////////
                         ERC721 APPROVAL STORAGE
    //////////////////////////////////////////////////////////////*/

    mapping(uint256 => address) public getApproved;

    mapping(address => mapping(address => bool)) public isApprovedForAll;

    /*//////////////////////////////////////////////////////////////
                               CONSTRUCTOR
    //////////////////////////////////////////////////////////////*/

    constructor(string memory _name, string memory _symbol) {
        name = _name;
        symbol = _symbol;
    }

    /*//////////////////////////////////////////////////////////////
                              ERC721 LOGIC
    //////////////////////////////////////////////////////////////*/

    function approve(address spender, uint256 id) public virtual {
        address owner = _ownerOf[id];

        require(msg.sender == owner || isApprovedForAll[owner][msg.sender], "NOT_AUTHORIZED");

        getApproved[id] = spender;

        emit Approval(owner, spender, id);
    }

    function setApprovalForAll(address operator, bool approved) public virtual {
        isApprovedForAll[msg.sender][operator] = approved;

        emit ApprovalForAll(msg.sender, operator, approved);
    }

    function transferFrom(
        address from,
        address to,
        uint256 id
    ) public virtual {
        require(from == _ownerOf[id], "WRONG_FROM");

        require(to != address(0), "INVALID_RECIPIENT");

        require(
            msg.sender == from || isApprovedForAll[from][msg.sender] || msg.sender == getApproved[id],
            "NOT_AUTHORIZED"
        );

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        unchecked {
            _balanceOf[from]--;

            _balanceOf[to]++;
        }

        _ownerOf[id] = to;

        delete getApproved[id];

        emit Transfer(from, to, id);
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 id
    ) public virtual {
        transferFrom(from, to, id);

        require(
            to.code.length == 0 ||
                ERC721TokenReceiver(to).onERC721Received(msg.sender, from, id, "") ==
                ERC721TokenReceiver.onERC721Received.selector,
            "UNSAFE_RECIPIENT"
        );
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        bytes calldata data
    ) public virtual {
        transferFrom(from, to, id);

        require(
            to.code.length == 0 ||
                ERC721TokenReceiver(to).onERC721Received(msg.sender, from, id, data) ==
                ERC721TokenReceiver.onERC721Received.selector,
            "UNSAFE_RECIPIENT"
        );
    }

    /*//////////////////////////////////////////////////////////////
                              ERC165 LOGIC
    //////////////////////////////////////////////////////////////*/

    function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) {
        return
            interfaceId == 0x01ffc9a7 || // ERC165 Interface ID for ERC165
            interfaceId == 0x80ac58cd || // ERC165 Interface ID for ERC721
            interfaceId == 0x5b5e139f; // ERC165 Interface ID for ERC721Metadata
    }

    /*//////////////////////////////////////////////////////////////
                        INTERNAL MINT/BURN LOGIC
    //////////////////////////////////////////////////////////////*/

    function _mint(address to, uint256 id) internal virtual {
        require(to != address(0), "INVALID_RECIPIENT");

        require(_ownerOf[id] == address(0), "ALREADY_MINTED");

        // Counter overflow is incredibly unrealistic.
        unchecked {
            _balanceOf[to]++;
        }

        _ownerOf[id] = to;

        emit Transfer(address(0), to, id);
    }

    function _burn(uint256 id) internal virtual {
        address owner = _ownerOf[id];

        require(owner != address(0), "NOT_MINTED");

        // Ownership check above ensures no underflow.
        unchecked {
            _balanceOf[owner]--;
        }

        delete _ownerOf[id];

        delete getApproved[id];

        emit Transfer(owner, address(0), id);
    }

    /*//////////////////////////////////////////////////////////////
                        INTERNAL SAFE MINT LOGIC
    //////////////////////////////////////////////////////////////*/

    function _safeMint(address to, uint256 id) internal virtual {
        _mint(to, id);

        require(
            to.code.length == 0 ||
                ERC721TokenReceiver(to).onERC721Received(msg.sender, address(0), id, "") ==
                ERC721TokenReceiver.onERC721Received.selector,
            "UNSAFE_RECIPIENT"
        );
    }

    function _safeMint(
        address to,
        uint256 id,
        bytes memory data
    ) internal virtual {
        _mint(to, id);

        require(
            to.code.length == 0 ||
                ERC721TokenReceiver(to).onERC721Received(msg.sender, address(0), id, data) ==
                ERC721TokenReceiver.onERC721Received.selector,
            "UNSAFE_RECIPIENT"
        );
    }
}

/// @notice A generic interface for a contract which properly accepts ERC721 tokens.
/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC721.sol)
abstract contract ERC721TokenReceiver {
    function onERC721Received(
        address,
        address,
        uint256,
        bytes calldata
    ) external virtual returns (bytes4) {
        return ERC721TokenReceiver.onERC721Received.selector;
    }
}

File 4 of 7: IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

File 5 of 7: Math.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)

pragma solidity ^0.8.0;

/**
 * @dev Standard math utilities missing in the Solidity language.
 */
library Math {
    enum Rounding {
        Down, // Toward negative infinity
        Up, // Toward infinity
        Zero // Toward zero
    }

    /**
     * @dev Returns the largest of two numbers.
     */
    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        return a > b ? a : b;
    }

    /**
     * @dev Returns the smallest of two numbers.
     */
    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        return a < b ? a : b;
    }

    /**
     * @dev Returns the average of two numbers. The result is rounded towards
     * zero.
     */
    function average(uint256 a, uint256 b) internal pure returns (uint256) {
        // (a + b) / 2 can overflow.
        return (a & b) + (a ^ b) / 2;
    }

    /**
     * @dev Returns the ceiling of the division of two numbers.
     *
     * This differs from standard division with `/` in that it rounds up instead
     * of rounding down.
     */
    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {
        // (a + b - 1) / b can overflow on addition, so we distribute.
        return a == 0 ? 0 : (a - 1) / b + 1;
    }

    /**
     * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0
     * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)
     * with further edits by Uniswap Labs also under MIT license.
     */
    function mulDiv(
        uint256 x,
        uint256 y,
        uint256 denominator
    ) internal pure returns (uint256 result) {
        unchecked {
            // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use
            // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256
            // variables such that product = prod1 * 2^256 + prod0.
            uint256 prod0; // Least significant 256 bits of the product
            uint256 prod1; // Most significant 256 bits of the product
            assembly {
                let mm := mulmod(x, y, not(0))
                prod0 := mul(x, y)
                prod1 := sub(sub(mm, prod0), lt(mm, prod0))
            }

            // Handle non-overflow cases, 256 by 256 division.
            if (prod1 == 0) {
                return prod0 / denominator;
            }

            // Make sure the result is less than 2^256. Also prevents denominator == 0.
            require(denominator > prod1);

            ///////////////////////////////////////////////
            // 512 by 256 division.
            ///////////////////////////////////////////////

            // Make division exact by subtracting the remainder from [prod1 prod0].
            uint256 remainder;
            assembly {
                // Compute remainder using mulmod.
                remainder := mulmod(x, y, denominator)

                // Subtract 256 bit number from 512 bit number.
                prod1 := sub(prod1, gt(remainder, prod0))
                prod0 := sub(prod0, remainder)
            }

            // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.
            // See https://cs.stackexchange.com/q/138556/92363.

            // Does not overflow because the denominator cannot be zero at this stage in the function.
            uint256 twos = denominator & (~denominator + 1);
            assembly {
                // Divide denominator by twos.
                denominator := div(denominator, twos)

                // Divide [prod1 prod0] by twos.
                prod0 := div(prod0, twos)

                // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.
                twos := add(div(sub(0, twos), twos), 1)
            }

            // Shift in bits from prod1 into prod0.
            prod0 |= prod1 * twos;

            // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such
            // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for
            // four bits. That is, denominator * inv = 1 mod 2^4.
            uint256 inverse = (3 * denominator) ^ 2;

            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works
            // in modular arithmetic, doubling the correct bits in each step.
            inverse *= 2 - denominator * inverse; // inverse mod 2^8
            inverse *= 2 - denominator * inverse; // inverse mod 2^16
            inverse *= 2 - denominator * inverse; // inverse mod 2^32
            inverse *= 2 - denominator * inverse; // inverse mod 2^64
            inverse *= 2 - denominator * inverse; // inverse mod 2^128
            inverse *= 2 - denominator * inverse; // inverse mod 2^256

            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.
            // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is
            // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1
            // is no longer required.
            result = prod0 * inverse;
            return result;
        }
    }

    /**
     * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.
     */
    function mulDiv(
        uint256 x,
        uint256 y,
        uint256 denominator,
        Rounding rounding
    ) internal pure returns (uint256) {
        uint256 result = mulDiv(x, y, denominator);
        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {
            result += 1;
        }
        return result;
    }

    /**
     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.
     *
     * Inspired by Henry S. Warren, Jr.'s "Hacker's Delight" (Chapter 11).
     */
    function sqrt(uint256 a) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.
        //
        // We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have
        // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.
        //
        // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`
        // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`
        // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`
        //
        // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.
        uint256 result = 1 << (log2(a) >> 1);

        // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,
        // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at
        // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision
        // into the expected uint128 result.
        unchecked {
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            return min(result, a / result);
        }
    }

    /**
     * @notice Calculates sqrt(a), following the selected rounding direction.
     */
    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = sqrt(a);
            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);
        }
    }

    /**
     * @dev Return the log in base 2, rounded down, of a positive value.
     * Returns 0 if given 0.
     */
    function log2(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
        unchecked {
            if (value >> 128 > 0) {
                value >>= 128;
                result += 128;
            }
            if (value >> 64 > 0) {
                value >>= 64;
                result += 64;
            }
            if (value >> 32 > 0) {
                value >>= 32;
                result += 32;
            }
            if (value >> 16 > 0) {
                value >>= 16;
                result += 16;
            }
            if (value >> 8 > 0) {
                value >>= 8;
                result += 8;
            }
            if (value >> 4 > 0) {
                value >>= 4;
                result += 4;
            }
            if (value >> 2 > 0) {
                value >>= 2;
                result += 2;
            }
            if (value >> 1 > 0) {
                result += 1;
            }
        }
        return result;
    }

    /**
     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.
     * Returns 0 if given 0.
     */
    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = log2(value);
            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);
        }
    }

    /**
     * @dev Return the log in base 10, rounded down, of a positive value.
     * Returns 0 if given 0.
     */
    function log10(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
        unchecked {
            if (value >= 10**64) {
                value /= 10**64;
                result += 64;
            }
            if (value >= 10**32) {
                value /= 10**32;
                result += 32;
            }
            if (value >= 10**16) {
                value /= 10**16;
                result += 16;
            }
            if (value >= 10**8) {
                value /= 10**8;
                result += 8;
            }
            if (value >= 10**4) {
                value /= 10**4;
                result += 4;
            }
            if (value >= 10**2) {
                value /= 10**2;
                result += 2;
            }
            if (value >= 10**1) {
                result += 1;
            }
        }
        return result;
    }

    /**
     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.
     * Returns 0 if given 0.
     */
    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = log10(value);
            return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);
        }
    }

    /**
     * @dev Return the log in base 256, rounded down, of a positive value.
     * Returns 0 if given 0.
     *
     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.
     */
    function log256(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
        unchecked {
            if (value >> 128 > 0) {
                value >>= 128;
                result += 16;
            }
            if (value >> 64 > 0) {
                value >>= 64;
                result += 8;
            }
            if (value >> 32 > 0) {
                value >>= 32;
                result += 4;
            }
            if (value >> 16 > 0) {
                value >>= 16;
                result += 2;
            }
            if (value >> 8 > 0) {
                result += 1;
            }
        }
        return result;
    }

    /**
     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.
     * Returns 0 if given 0.
     */
    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = log256(value);
            return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);
        }
    }
}

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

pragma solidity ^0.8.0;

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() {
        _transferOwnership(_msgSender());
    }

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

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

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

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

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

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

File 7 of 7: Strings.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)

pragma solidity ^0.8.0;

import "./Math.sol";

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _SYMBOLS = "0123456789abcdef";
    uint8 private constant _ADDRESS_LENGTH = 20;

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        unchecked {
            uint256 length = Math.log10(value) + 1;
            string memory buffer = new string(length);
            uint256 ptr;
            /// @solidity memory-safe-assembly
            assembly {
                ptr := add(buffer, add(32, length))
            }
            while (true) {
                ptr--;
                /// @solidity memory-safe-assembly
                assembly {
                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))
                }
                value /= 10;
                if (value == 0) break;
            }
            return buffer;
        }
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        unchecked {
            return toHexString(value, Math.log256(value) + 1);
        }
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(
        uint256 value,
        uint256 length
    ) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }

    /**
     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.
     */
    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"string","name":"_baseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"Minted","type":"error"},{"inputs":[],"name":"NoContract","type":"error"},{"inputs":[],"name":"NonExistentTokenURI","type":"error"},{"inputs":[],"name":"WithdrawTransfer","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"RevokeToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[],"name":"UpdateURI","type":"event"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"minted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token_","type":"address"}],"name":"revokeWrongToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","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":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newURI","type":"string"}],"name":"updateURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"payee","type":"address"}],"name":"withdrawPayments","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b50604051620035e6380380620035e6833981810160405281019062000037919062000363565b6040518060400160405280600781526020017f41726220456767000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f41524547000000000000000000000000000000000000000000000000000000008152508160009081620000b49190620005ff565b508060019081620000c69190620005ff565b505050620000e9620000dd6200010260201b60201c565b6200010a60201b60201c565b8060079081620000fa9190620005ff565b5050620006e6565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200023982620001ee565b810181811067ffffffffffffffff821117156200025b576200025a620001ff565b5b80604052505050565b600062000270620001d0565b90506200027e82826200022e565b919050565b600067ffffffffffffffff821115620002a157620002a0620001ff565b5b620002ac82620001ee565b9050602081019050919050565b60005b83811015620002d9578082015181840152602081019050620002bc565b60008484015250505050565b6000620002fc620002f68462000283565b62000264565b9050828152602081018484840111156200031b576200031a620001e9565b5b62000328848285620002b9565b509392505050565b600082601f830112620003485762000347620001e4565b5b81516200035a848260208601620002e5565b91505092915050565b6000602082840312156200037c576200037b620001da565b5b600082015167ffffffffffffffff8111156200039d576200039c620001df565b5b620003ab8482850162000330565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200040757607f821691505b6020821081036200041d576200041c620003bf565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620004877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000448565b62000493868362000448565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620004e0620004da620004d484620004ab565b620004b5565b620004ab565b9050919050565b6000819050919050565b620004fc83620004bf565b620005146200050b82620004e7565b84845462000455565b825550505050565b600090565b6200052b6200051c565b62000538818484620004f1565b505050565b5b8181101562000560576200055460008262000521565b6001810190506200053e565b5050565b601f821115620005af57620005798162000423565b620005848462000438565b8101602085101562000594578190505b620005ac620005a38562000438565b8301826200053d565b50505b505050565b600082821c905092915050565b6000620005d460001984600802620005b4565b1980831691505092915050565b6000620005ef8383620005c1565b9150826002028217905092915050565b6200060a82620003b4565b67ffffffffffffffff811115620006265762000625620001ff565b5b620006328254620003ee565b6200063f82828562000564565b600060209050601f83116001811462000677576000841562000662578287015190505b6200066e8582620005e1565b865550620006de565b601f198416620006878662000423565b60005b82811015620006b1578489015182556001820191506020850194506020810190506200068a565b86831015620006d15784890151620006cd601f891682620005c1565b8355505b6001600288020188555050505b505050505050565b612ef080620006f66000396000f3fe608060405234801561001057600080fd5b50600436106101575760003560e01c80636c0360eb116100c3578063b88d4fde1161007c578063b88d4fde146103b4578063c30f4a5a146103d0578063c87b56dd146103ec578063db8142251461041c578063e985e9c514610438578063f2fde38b1461046857610157565b80636c0360eb1461030457806370a0823114610322578063715018a6146103525780638da5cb5b1461035c57806395d89b411461037a578063a22cb4651461039857610157565b80631e7269c5116101155780631e7269c51461023257806323b872dd1461026257806331b3eb941461027e57806342842e0e1461029a5780634e71d92d146102b65780636352211e146102d457610157565b80629a9b7b1461015c57806301ffc9a71461017a57806306fdde03146101aa578063081812fc146101c8578063095ea7b3146101f857806318160ddd14610214575b600080fd5b610164610484565b6040516101719190611d95565b60405180910390f35b610194600480360381019061018f9190611e1c565b61048a565b6040516101a19190611e64565b60405180910390f35b6101b261051c565b6040516101bf9190611f0f565b60405180910390f35b6101e260048036038101906101dd9190611f5d565b6105aa565b6040516101ef9190611fcb565b60405180910390f35b610212600480360381019061020d9190612012565b6105dd565b005b61021c6107c6565b6040516102299190611d95565b60405180910390f35b61024c60048036038101906102479190612052565b6107d0565b6040516102599190611e64565b60405180910390f35b61027c6004803603810190610277919061207f565b6107f0565b005b61029860048036038101906102939190612110565b610bef565b005b6102b460048036038101906102af919061207f565b610ca4565b005b6102be610ddc565b6040516102cb9190611d95565b60405180910390f35b6102ee60048036038101906102e99190611f5d565b610f49565b6040516102fb9190611fcb565b60405180910390f35b61030c610ff4565b6040516103199190611f0f565b60405180910390f35b61033c60048036038101906103379190612052565b611082565b6040516103499190611d95565b60405180910390f35b61035a611139565b005b61036461114d565b6040516103719190611fcb565b60405180910390f35b610382611177565b60405161038f9190611f0f565b60405180910390f35b6103b260048036038101906103ad9190612169565b611205565b005b6103ce60048036038101906103c9919061220e565b611302565b005b6103ea60048036038101906103e591906123c6565b611440565b005b61040660048036038101906104019190611f5d565b611487565b6040516104139190611f0f565b60405180910390f35b61043660048036038101906104319190612052565b6115b5565b005b610452600480360381019061044d919061240f565b611835565b60405161045f9190611e64565b60405180910390f35b610482600480360381019061047d9190612052565b611864565b005b60085481565b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104e557506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105155750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b600080546105299061247e565b80601f01602080910402602001604051908101604052809291908181526020018280546105559061247e565b80156105a25780601f10610577576101008083540402835291602001916105a2565b820191906000526020600020905b81548152906001019060200180831161058557829003601f168201915b505050505081565b60046020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806106d55750600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610714576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070b906124fb565b60405180910390fd5b826004600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000600854905090565b60096020528060005260406000206000915054906101000a900460ff1681565b6002600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610891576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088890612567565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610900576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f7906125d3565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806109c05750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80610a2957506004600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610a68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5f906124fb565b60405180910390fd5b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600190039190505550600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001019190505550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b610bf76118e7565b600047905060008273ffffffffffffffffffffffffffffffffffffffff1682604051610c2290612624565b60006040518083038185875af1925050503d8060008114610c5f576040519150601f19603f3d011682016040523d82523d6000602084013e610c64565b606091505b5050905080610c9f576040517fd23a9e8900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b610caf8383836107f0565b60008273ffffffffffffffffffffffffffffffffffffffff163b1480610d98575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168273ffffffffffffffffffffffffffffffffffffffff1663150b7a023386856040518463ffffffff1660e01b8152600401610d349392919061266d565b6020604051808303816000875af1158015610d53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d7791906126cc565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b610dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dce90612745565b60405180910390fd5b505050565b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610e62576040517fe923f1ae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610ec7576040517f0c3b563c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600860008154610ed890612794565b91905081905590506001600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610f423382611965565b8091505090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691508173ffffffffffffffffffffffffffffffffffffffff1603610fef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe690612828565b60405180910390fd5b919050565b600780546110019061247e565b80601f016020809104026020016040519081016040528092919081815260200182805461102d9061247e565b801561107a5780601f1061104f5761010080835404028352916020019161107a565b820191906000526020600020905b81548152906001019060200180831161105d57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e990612894565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111416118e7565b61114b6000611a9c565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600180546111849061247e565b80601f01602080910402602001604051908101604052809291908181526020018280546111b09061247e565b80156111fd5780601f106111d2576101008083540402835291602001916111fd565b820191906000526020600020905b8154815290600101906020018083116111e057829003601f168201915b505050505081565b80600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516112f69190611e64565b60405180910390a35050565b61130d8585856107f0565b60008473ffffffffffffffffffffffffffffffffffffffff163b14806113fa575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff1663150b7a0233888787876040518663ffffffff1660e01b81526004016113969594939291906128e1565b6020604051808303816000875af11580156113b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d991906126cc565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b611439576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143090612745565b60405180910390fd5b5050505050565b6114486118e7565b80600790816114579190612adb565b507f4b10f5e82c09c1fc02be10abafd0b5788f4035d7cc18e850970caa22851f168560405160405180910390a150565b6060600073ffffffffffffffffffffffffffffffffffffffff166114aa83610f49565b73ffffffffffffffffffffffffffffffffffffffff16036114f7576040517fd872946b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600780546115069061247e565b90501161152257604051806020016040528060008152506115ae565b6007805461152f9061247e565b80601f016020809104026020016040519081016040528092919081815260200182805461155b9061247e565b80156115a85780601f1061157d576101008083540402835291602001916115a8565b820191906000526020600020905b81548152906001019060200180831161158b57829003601f168201915b50505050505b9050919050565b6115bd6118e7565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036116f25760003373ffffffffffffffffffffffffffffffffffffffff1647600067ffffffffffffffff8111156116265761162561229b565b5b6040519080825280601f01601f1916602001820160405280156116585781602001600182028036833780820191505090505b506040516116669190612be9565b60006040518083038185875af1925050503d80600081146116a3576040519150601f19603f3d011682016040523d82523d6000602084013e6116a8565b606091505b50509050806116ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e390612c4c565b60405180910390fd5b50611832565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016117329190611fcb565b602060405180830381865afa15801561174f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117739190612c81565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016117b0929190612cae565b6020604051808303816000875af11580156117cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117f39190612cec565b507f795581b3b362ec032883127a65f2a0eb7c0ef1fd994d055c82f69203fabc985833848360405161182793929190612d19565b60405180910390a150505b50565b60056020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b61186c6118e7565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036118db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d290612dc2565b60405180910390fd5b6118e481611a9c565b50565b6118ef611b62565b73ffffffffffffffffffffffffffffffffffffffff1661190d61114d565b73ffffffffffffffffffffffffffffffffffffffff1614611963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195a90612e2e565b60405180910390fd5b565b61196f8282611b6a565b60008273ffffffffffffffffffffffffffffffffffffffff163b1480611a59575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168273ffffffffffffffffffffffffffffffffffffffff1663150b7a02336000856040518463ffffffff1660e01b81526004016119f59392919061266d565b6020604051808303816000875af1158015611a14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a3891906126cc565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b611a98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8f90612745565b60405180910390fd5b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd0906125d3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7290612e9a565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001019190505550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000819050919050565b611d8f81611d7c565b82525050565b6000602082019050611daa6000830184611d86565b92915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611df981611dc4565b8114611e0457600080fd5b50565b600081359050611e1681611df0565b92915050565b600060208284031215611e3257611e31611dba565b5b6000611e4084828501611e07565b91505092915050565b60008115159050919050565b611e5e81611e49565b82525050565b6000602082019050611e796000830184611e55565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611eb9578082015181840152602081019050611e9e565b60008484015250505050565b6000601f19601f8301169050919050565b6000611ee182611e7f565b611eeb8185611e8a565b9350611efb818560208601611e9b565b611f0481611ec5565b840191505092915050565b60006020820190508181036000830152611f298184611ed6565b905092915050565b611f3a81611d7c565b8114611f4557600080fd5b50565b600081359050611f5781611f31565b92915050565b600060208284031215611f7357611f72611dba565b5b6000611f8184828501611f48565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611fb582611f8a565b9050919050565b611fc581611faa565b82525050565b6000602082019050611fe06000830184611fbc565b92915050565b611fef81611faa565b8114611ffa57600080fd5b50565b60008135905061200c81611fe6565b92915050565b6000806040838503121561202957612028611dba565b5b600061203785828601611ffd565b925050602061204885828601611f48565b9150509250929050565b60006020828403121561206857612067611dba565b5b600061207684828501611ffd565b91505092915050565b60008060006060848603121561209857612097611dba565b5b60006120a686828701611ffd565b93505060206120b786828701611ffd565b92505060406120c886828701611f48565b9150509250925092565b60006120dd82611f8a565b9050919050565b6120ed816120d2565b81146120f857600080fd5b50565b60008135905061210a816120e4565b92915050565b60006020828403121561212657612125611dba565b5b6000612134848285016120fb565b91505092915050565b61214681611e49565b811461215157600080fd5b50565b6000813590506121638161213d565b92915050565b600080604083850312156121805761217f611dba565b5b600061218e85828601611ffd565b925050602061219f85828601612154565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f8401126121ce576121cd6121a9565b5b8235905067ffffffffffffffff8111156121eb576121ea6121ae565b5b602083019150836001820283011115612207576122066121b3565b5b9250929050565b60008060008060006080868803121561222a57612229611dba565b5b600061223888828901611ffd565b955050602061224988828901611ffd565b945050604061225a88828901611f48565b935050606086013567ffffffffffffffff81111561227b5761227a611dbf565b5b612287888289016121b8565b92509250509295509295909350565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6122d382611ec5565b810181811067ffffffffffffffff821117156122f2576122f161229b565b5b80604052505050565b6000612305611db0565b905061231182826122ca565b919050565b600067ffffffffffffffff8211156123315761233061229b565b5b61233a82611ec5565b9050602081019050919050565b82818337600083830152505050565b600061236961236484612316565b6122fb565b90508281526020810184848401111561238557612384612296565b5b612390848285612347565b509392505050565b600082601f8301126123ad576123ac6121a9565b5b81356123bd848260208601612356565b91505092915050565b6000602082840312156123dc576123db611dba565b5b600082013567ffffffffffffffff8111156123fa576123f9611dbf565b5b61240684828501612398565b91505092915050565b6000806040838503121561242657612425611dba565b5b600061243485828601611ffd565b925050602061244585828601611ffd565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061249657607f821691505b6020821081036124a9576124a861244f565b5b50919050565b7f4e4f545f415554484f52495a4544000000000000000000000000000000000000600082015250565b60006124e5600e83611e8a565b91506124f0826124af565b602082019050919050565b60006020820190508181036000830152612514816124d8565b9050919050565b7f57524f4e475f46524f4d00000000000000000000000000000000000000000000600082015250565b6000612551600a83611e8a565b915061255c8261251b565b602082019050919050565b6000602082019050818103600083015261258081612544565b9050919050565b7f494e56414c49445f524543495049454e54000000000000000000000000000000600082015250565b60006125bd601183611e8a565b91506125c882612587565b602082019050919050565b600060208201905081810360008301526125ec816125b0565b9050919050565b600081905092915050565b50565b600061260e6000836125f3565b9150612619826125fe565b600082019050919050565b600061262f82612601565b9150819050919050565b600082825260208201905092915050565b6000612657600083612639565b9150612662826125fe565b600082019050919050565b60006080820190506126826000830186611fbc565b61268f6020830185611fbc565b61269c6040830184611d86565b81810360608301526126ad8161264a565b9050949350505050565b6000815190506126c681611df0565b92915050565b6000602082840312156126e2576126e1611dba565b5b60006126f0848285016126b7565b91505092915050565b7f554e534146455f524543495049454e5400000000000000000000000000000000600082015250565b600061272f601083611e8a565b915061273a826126f9565b602082019050919050565b6000602082019050818103600083015261275e81612722565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061279f82611d7c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036127d1576127d0612765565b5b600182019050919050565b7f4e4f545f4d494e54454400000000000000000000000000000000000000000000600082015250565b6000612812600a83611e8a565b915061281d826127dc565b602082019050919050565b6000602082019050818103600083015261284181612805565b9050919050565b7f5a45524f5f414444524553530000000000000000000000000000000000000000600082015250565b600061287e600c83611e8a565b915061288982612848565b602082019050919050565b600060208201905081810360008301526128ad81612871565b9050919050565b60006128c08385612639565b93506128cd838584612347565b6128d683611ec5565b840190509392505050565b60006080820190506128f66000830188611fbc565b6129036020830187611fbc565b6129106040830186611d86565b81810360608301526129238184866128b4565b90509695505050505050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026129917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612954565b61299b8683612954565b95508019841693508086168417925050509392505050565b6000819050919050565b60006129d86129d36129ce84611d7c565b6129b3565b611d7c565b9050919050565b6000819050919050565b6129f2836129bd565b612a066129fe826129df565b848454612961565b825550505050565b600090565b612a1b612a0e565b612a268184846129e9565b505050565b5b81811015612a4a57612a3f600082612a13565b600181019050612a2c565b5050565b601f821115612a8f57612a608161292f565b612a6984612944565b81016020851015612a78578190505b612a8c612a8485612944565b830182612a2b565b50505b505050565b600082821c905092915050565b6000612ab260001984600802612a94565b1980831691505092915050565b6000612acb8383612aa1565b9150826002028217905092915050565b612ae482611e7f565b67ffffffffffffffff811115612afd57612afc61229b565b5b612b07825461247e565b612b12828285612a4e565b600060209050601f831160018114612b455760008415612b33578287015190505b612b3d8582612abf565b865550612ba5565b601f198416612b538661292f565b60005b82811015612b7b57848901518255600182019150602085019450602081019050612b56565b86831015612b985784890151612b94601f891682612aa1565b8355505b6001600288020188555050505b505050505050565b600081519050919050565b6000612bc382612bad565b612bcd81856125f3565b9350612bdd818560208601611e9b565b80840191505092915050565b6000612bf58284612bb8565b915081905092915050565b7f4661696c656420746f2073656e64205653000000000000000000000000000000600082015250565b6000612c36601183611e8a565b9150612c4182612c00565b602082019050919050565b60006020820190508181036000830152612c6581612c29565b9050919050565b600081519050612c7b81611f31565b92915050565b600060208284031215612c9757612c96611dba565b5b6000612ca584828501612c6c565b91505092915050565b6000604082019050612cc36000830185611fbc565b612cd06020830184611d86565b9392505050565b600081519050612ce68161213d565b92915050565b600060208284031215612d0257612d01611dba565b5b6000612d1084828501612cd7565b91505092915050565b6000606082019050612d2e6000830186611fbc565b612d3b6020830185611fbc565b612d486040830184611d86565b949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612dac602683611e8a565b9150612db782612d50565b604082019050919050565b60006020820190508181036000830152612ddb81612d9f565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612e18602083611e8a565b9150612e2382612de2565b602082019050919050565b60006020820190508181036000830152612e4781612e0b565b9050919050565b7f414c52454144595f4d494e544544000000000000000000000000000000000000600082015250565b6000612e84600e83611e8a565b9150612e8f82612e4e565b602082019050919050565b60006020820190508181036000830152612eb381612e77565b905091905056fea26469706673582212209447a7d8c6af3b9cf3a4e4b91c0425176f89c4eda463085a69039236e3d2fe7e64736f6c6343000812003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d52666f46746b7a4a656d57374d713566766242544b3334445a465874383651656478446e4a334b646f4642420000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101575760003560e01c80636c0360eb116100c3578063b88d4fde1161007c578063b88d4fde146103b4578063c30f4a5a146103d0578063c87b56dd146103ec578063db8142251461041c578063e985e9c514610438578063f2fde38b1461046857610157565b80636c0360eb1461030457806370a0823114610322578063715018a6146103525780638da5cb5b1461035c57806395d89b411461037a578063a22cb4651461039857610157565b80631e7269c5116101155780631e7269c51461023257806323b872dd1461026257806331b3eb941461027e57806342842e0e1461029a5780634e71d92d146102b65780636352211e146102d457610157565b80629a9b7b1461015c57806301ffc9a71461017a57806306fdde03146101aa578063081812fc146101c8578063095ea7b3146101f857806318160ddd14610214575b600080fd5b610164610484565b6040516101719190611d95565b60405180910390f35b610194600480360381019061018f9190611e1c565b61048a565b6040516101a19190611e64565b60405180910390f35b6101b261051c565b6040516101bf9190611f0f565b60405180910390f35b6101e260048036038101906101dd9190611f5d565b6105aa565b6040516101ef9190611fcb565b60405180910390f35b610212600480360381019061020d9190612012565b6105dd565b005b61021c6107c6565b6040516102299190611d95565b60405180910390f35b61024c60048036038101906102479190612052565b6107d0565b6040516102599190611e64565b60405180910390f35b61027c6004803603810190610277919061207f565b6107f0565b005b61029860048036038101906102939190612110565b610bef565b005b6102b460048036038101906102af919061207f565b610ca4565b005b6102be610ddc565b6040516102cb9190611d95565b60405180910390f35b6102ee60048036038101906102e99190611f5d565b610f49565b6040516102fb9190611fcb565b60405180910390f35b61030c610ff4565b6040516103199190611f0f565b60405180910390f35b61033c60048036038101906103379190612052565b611082565b6040516103499190611d95565b60405180910390f35b61035a611139565b005b61036461114d565b6040516103719190611fcb565b60405180910390f35b610382611177565b60405161038f9190611f0f565b60405180910390f35b6103b260048036038101906103ad9190612169565b611205565b005b6103ce60048036038101906103c9919061220e565b611302565b005b6103ea60048036038101906103e591906123c6565b611440565b005b61040660048036038101906104019190611f5d565b611487565b6040516104139190611f0f565b60405180910390f35b61043660048036038101906104319190612052565b6115b5565b005b610452600480360381019061044d919061240f565b611835565b60405161045f9190611e64565b60405180910390f35b610482600480360381019061047d9190612052565b611864565b005b60085481565b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104e557506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105155750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b600080546105299061247e565b80601f01602080910402602001604051908101604052809291908181526020018280546105559061247e565b80156105a25780601f10610577576101008083540402835291602001916105a2565b820191906000526020600020905b81548152906001019060200180831161058557829003601f168201915b505050505081565b60046020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806106d55750600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610714576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070b906124fb565b60405180910390fd5b826004600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000600854905090565b60096020528060005260406000206000915054906101000a900460ff1681565b6002600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610891576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088890612567565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610900576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f7906125d3565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806109c05750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80610a2957506004600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610a68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5f906124fb565b60405180910390fd5b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600190039190505550600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001019190505550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b610bf76118e7565b600047905060008273ffffffffffffffffffffffffffffffffffffffff1682604051610c2290612624565b60006040518083038185875af1925050503d8060008114610c5f576040519150601f19603f3d011682016040523d82523d6000602084013e610c64565b606091505b5050905080610c9f576040517fd23a9e8900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b610caf8383836107f0565b60008273ffffffffffffffffffffffffffffffffffffffff163b1480610d98575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168273ffffffffffffffffffffffffffffffffffffffff1663150b7a023386856040518463ffffffff1660e01b8152600401610d349392919061266d565b6020604051808303816000875af1158015610d53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d7791906126cc565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b610dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dce90612745565b60405180910390fd5b505050565b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610e62576040517fe923f1ae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610ec7576040517f0c3b563c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600860008154610ed890612794565b91905081905590506001600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610f423382611965565b8091505090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691508173ffffffffffffffffffffffffffffffffffffffff1603610fef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe690612828565b60405180910390fd5b919050565b600780546110019061247e565b80601f016020809104026020016040519081016040528092919081815260200182805461102d9061247e565b801561107a5780601f1061104f5761010080835404028352916020019161107a565b820191906000526020600020905b81548152906001019060200180831161105d57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e990612894565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111416118e7565b61114b6000611a9c565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600180546111849061247e565b80601f01602080910402602001604051908101604052809291908181526020018280546111b09061247e565b80156111fd5780601f106111d2576101008083540402835291602001916111fd565b820191906000526020600020905b8154815290600101906020018083116111e057829003601f168201915b505050505081565b80600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516112f69190611e64565b60405180910390a35050565b61130d8585856107f0565b60008473ffffffffffffffffffffffffffffffffffffffff163b14806113fa575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff1663150b7a0233888787876040518663ffffffff1660e01b81526004016113969594939291906128e1565b6020604051808303816000875af11580156113b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d991906126cc565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b611439576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143090612745565b60405180910390fd5b5050505050565b6114486118e7565b80600790816114579190612adb565b507f4b10f5e82c09c1fc02be10abafd0b5788f4035d7cc18e850970caa22851f168560405160405180910390a150565b6060600073ffffffffffffffffffffffffffffffffffffffff166114aa83610f49565b73ffffffffffffffffffffffffffffffffffffffff16036114f7576040517fd872946b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600780546115069061247e565b90501161152257604051806020016040528060008152506115ae565b6007805461152f9061247e565b80601f016020809104026020016040519081016040528092919081815260200182805461155b9061247e565b80156115a85780601f1061157d576101008083540402835291602001916115a8565b820191906000526020600020905b81548152906001019060200180831161158b57829003601f168201915b50505050505b9050919050565b6115bd6118e7565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036116f25760003373ffffffffffffffffffffffffffffffffffffffff1647600067ffffffffffffffff8111156116265761162561229b565b5b6040519080825280601f01601f1916602001820160405280156116585781602001600182028036833780820191505090505b506040516116669190612be9565b60006040518083038185875af1925050503d80600081146116a3576040519150601f19603f3d011682016040523d82523d6000602084013e6116a8565b606091505b50509050806116ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e390612c4c565b60405180910390fd5b50611832565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016117329190611fcb565b602060405180830381865afa15801561174f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117739190612c81565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016117b0929190612cae565b6020604051808303816000875af11580156117cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117f39190612cec565b507f795581b3b362ec032883127a65f2a0eb7c0ef1fd994d055c82f69203fabc985833848360405161182793929190612d19565b60405180910390a150505b50565b60056020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b61186c6118e7565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036118db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d290612dc2565b60405180910390fd5b6118e481611a9c565b50565b6118ef611b62565b73ffffffffffffffffffffffffffffffffffffffff1661190d61114d565b73ffffffffffffffffffffffffffffffffffffffff1614611963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195a90612e2e565b60405180910390fd5b565b61196f8282611b6a565b60008273ffffffffffffffffffffffffffffffffffffffff163b1480611a59575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168273ffffffffffffffffffffffffffffffffffffffff1663150b7a02336000856040518463ffffffff1660e01b81526004016119f59392919061266d565b6020604051808303816000875af1158015611a14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a3891906126cc565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b611a98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8f90612745565b60405180910390fd5b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd0906125d3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7290612e9a565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001019190505550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000819050919050565b611d8f81611d7c565b82525050565b6000602082019050611daa6000830184611d86565b92915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611df981611dc4565b8114611e0457600080fd5b50565b600081359050611e1681611df0565b92915050565b600060208284031215611e3257611e31611dba565b5b6000611e4084828501611e07565b91505092915050565b60008115159050919050565b611e5e81611e49565b82525050565b6000602082019050611e796000830184611e55565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611eb9578082015181840152602081019050611e9e565b60008484015250505050565b6000601f19601f8301169050919050565b6000611ee182611e7f565b611eeb8185611e8a565b9350611efb818560208601611e9b565b611f0481611ec5565b840191505092915050565b60006020820190508181036000830152611f298184611ed6565b905092915050565b611f3a81611d7c565b8114611f4557600080fd5b50565b600081359050611f5781611f31565b92915050565b600060208284031215611f7357611f72611dba565b5b6000611f8184828501611f48565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611fb582611f8a565b9050919050565b611fc581611faa565b82525050565b6000602082019050611fe06000830184611fbc565b92915050565b611fef81611faa565b8114611ffa57600080fd5b50565b60008135905061200c81611fe6565b92915050565b6000806040838503121561202957612028611dba565b5b600061203785828601611ffd565b925050602061204885828601611f48565b9150509250929050565b60006020828403121561206857612067611dba565b5b600061207684828501611ffd565b91505092915050565b60008060006060848603121561209857612097611dba565b5b60006120a686828701611ffd565b93505060206120b786828701611ffd565b92505060406120c886828701611f48565b9150509250925092565b60006120dd82611f8a565b9050919050565b6120ed816120d2565b81146120f857600080fd5b50565b60008135905061210a816120e4565b92915050565b60006020828403121561212657612125611dba565b5b6000612134848285016120fb565b91505092915050565b61214681611e49565b811461215157600080fd5b50565b6000813590506121638161213d565b92915050565b600080604083850312156121805761217f611dba565b5b600061218e85828601611ffd565b925050602061219f85828601612154565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f8401126121ce576121cd6121a9565b5b8235905067ffffffffffffffff8111156121eb576121ea6121ae565b5b602083019150836001820283011115612207576122066121b3565b5b9250929050565b60008060008060006080868803121561222a57612229611dba565b5b600061223888828901611ffd565b955050602061224988828901611ffd565b945050604061225a88828901611f48565b935050606086013567ffffffffffffffff81111561227b5761227a611dbf565b5b612287888289016121b8565b92509250509295509295909350565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6122d382611ec5565b810181811067ffffffffffffffff821117156122f2576122f161229b565b5b80604052505050565b6000612305611db0565b905061231182826122ca565b919050565b600067ffffffffffffffff8211156123315761233061229b565b5b61233a82611ec5565b9050602081019050919050565b82818337600083830152505050565b600061236961236484612316565b6122fb565b90508281526020810184848401111561238557612384612296565b5b612390848285612347565b509392505050565b600082601f8301126123ad576123ac6121a9565b5b81356123bd848260208601612356565b91505092915050565b6000602082840312156123dc576123db611dba565b5b600082013567ffffffffffffffff8111156123fa576123f9611dbf565b5b61240684828501612398565b91505092915050565b6000806040838503121561242657612425611dba565b5b600061243485828601611ffd565b925050602061244585828601611ffd565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061249657607f821691505b6020821081036124a9576124a861244f565b5b50919050565b7f4e4f545f415554484f52495a4544000000000000000000000000000000000000600082015250565b60006124e5600e83611e8a565b91506124f0826124af565b602082019050919050565b60006020820190508181036000830152612514816124d8565b9050919050565b7f57524f4e475f46524f4d00000000000000000000000000000000000000000000600082015250565b6000612551600a83611e8a565b915061255c8261251b565b602082019050919050565b6000602082019050818103600083015261258081612544565b9050919050565b7f494e56414c49445f524543495049454e54000000000000000000000000000000600082015250565b60006125bd601183611e8a565b91506125c882612587565b602082019050919050565b600060208201905081810360008301526125ec816125b0565b9050919050565b600081905092915050565b50565b600061260e6000836125f3565b9150612619826125fe565b600082019050919050565b600061262f82612601565b9150819050919050565b600082825260208201905092915050565b6000612657600083612639565b9150612662826125fe565b600082019050919050565b60006080820190506126826000830186611fbc565b61268f6020830185611fbc565b61269c6040830184611d86565b81810360608301526126ad8161264a565b9050949350505050565b6000815190506126c681611df0565b92915050565b6000602082840312156126e2576126e1611dba565b5b60006126f0848285016126b7565b91505092915050565b7f554e534146455f524543495049454e5400000000000000000000000000000000600082015250565b600061272f601083611e8a565b915061273a826126f9565b602082019050919050565b6000602082019050818103600083015261275e81612722565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061279f82611d7c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036127d1576127d0612765565b5b600182019050919050565b7f4e4f545f4d494e54454400000000000000000000000000000000000000000000600082015250565b6000612812600a83611e8a565b915061281d826127dc565b602082019050919050565b6000602082019050818103600083015261284181612805565b9050919050565b7f5a45524f5f414444524553530000000000000000000000000000000000000000600082015250565b600061287e600c83611e8a565b915061288982612848565b602082019050919050565b600060208201905081810360008301526128ad81612871565b9050919050565b60006128c08385612639565b93506128cd838584612347565b6128d683611ec5565b840190509392505050565b60006080820190506128f66000830188611fbc565b6129036020830187611fbc565b6129106040830186611d86565b81810360608301526129238184866128b4565b90509695505050505050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026129917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612954565b61299b8683612954565b95508019841693508086168417925050509392505050565b6000819050919050565b60006129d86129d36129ce84611d7c565b6129b3565b611d7c565b9050919050565b6000819050919050565b6129f2836129bd565b612a066129fe826129df565b848454612961565b825550505050565b600090565b612a1b612a0e565b612a268184846129e9565b505050565b5b81811015612a4a57612a3f600082612a13565b600181019050612a2c565b5050565b601f821115612a8f57612a608161292f565b612a6984612944565b81016020851015612a78578190505b612a8c612a8485612944565b830182612a2b565b50505b505050565b600082821c905092915050565b6000612ab260001984600802612a94565b1980831691505092915050565b6000612acb8383612aa1565b9150826002028217905092915050565b612ae482611e7f565b67ffffffffffffffff811115612afd57612afc61229b565b5b612b07825461247e565b612b12828285612a4e565b600060209050601f831160018114612b455760008415612b33578287015190505b612b3d8582612abf565b865550612ba5565b601f198416612b538661292f565b60005b82811015612b7b57848901518255600182019150602085019450602081019050612b56565b86831015612b985784890151612b94601f891682612aa1565b8355505b6001600288020188555050505b505050505050565b600081519050919050565b6000612bc382612bad565b612bcd81856125f3565b9350612bdd818560208601611e9b565b80840191505092915050565b6000612bf58284612bb8565b915081905092915050565b7f4661696c656420746f2073656e64205653000000000000000000000000000000600082015250565b6000612c36601183611e8a565b9150612c4182612c00565b602082019050919050565b60006020820190508181036000830152612c6581612c29565b9050919050565b600081519050612c7b81611f31565b92915050565b600060208284031215612c9757612c96611dba565b5b6000612ca584828501612c6c565b91505092915050565b6000604082019050612cc36000830185611fbc565b612cd06020830184611d86565b9392505050565b600081519050612ce68161213d565b92915050565b600060208284031215612d0257612d01611dba565b5b6000612d1084828501612cd7565b91505092915050565b6000606082019050612d2e6000830186611fbc565b612d3b6020830185611fbc565b612d486040830184611d86565b949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612dac602683611e8a565b9150612db782612d50565b604082019050919050565b60006020820190508181036000830152612ddb81612d9f565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612e18602083611e8a565b9150612e2382612de2565b602082019050919050565b60006020820190508181036000830152612e4781612e0b565b9050919050565b7f414c52454144595f4d494e544544000000000000000000000000000000000000600082015250565b6000612e84600e83611e8a565b9150612e8f82612e4e565b602082019050919050565b60006020820190508181036000830152612eb381612e77565b905091905056fea26469706673582212209447a7d8c6af3b9cf3a4e4b91c0425176f89c4eda463085a69039236e3d2fe7e64736f6c63430008120033

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

00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d52666f46746b7a4a656d57374d713566766242544b3334445a465874383651656478446e4a334b646f4642420000000000000000000000

-----Decoded View---------------
Arg [0] : _baseURI (string): ipfs://QmRfoFtkzJemW7Mq5fvbBTK34DZFXt86QedxDnJ3KdoFBB

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000035
Arg [2] : 697066733a2f2f516d52666f46746b7a4a656d57374d713566766242544b3334
Arg [3] : 445a465874383651656478446e4a334b646f4642420000000000000000000000


Deployed Bytecode Sourcemap

1302:2046:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1404:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4859:340:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;919:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1892:46;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2518:290;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2457:93:0;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1440:38;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3031:768:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2558:268:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3807:409:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1671:369:0;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1361:151:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1376:21:0;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1520:172:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1909:103:5;;;:::i;:::-;;1261:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;946:20:2;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2816:207;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4224:441;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2327:122:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2048:271;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2834:511;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1947:68:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2167:238:5;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1404:29:0;;;;:::o;4859:340:2:-;4935:4;4987:10;4972:25;;:11;:25;;;;:101;;;;5063:10;5048:25;;:11;:25;;;;4972:101;:177;;;;5139:10;5124:25;;:11;:25;;;;4972:177;4952:197;;4859:340;;;:::o;919:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1892:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;2518:290::-;2590:13;2606:8;:12;2615:2;2606:12;;;;;;;;;;;;;;;;;;;;;2590:28;;2653:5;2639:19;;:10;:19;;;:58;;;;2662:16;:23;2679:5;2662:23;;;;;;;;;;;;;;;:35;2686:10;2662:35;;;;;;;;;;;;;;;;;;;;;;;;;2639:58;2631:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;2747:7;2729:11;:15;2741:2;2729:15;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;2797:2;2788:7;2772:28;;2781:5;2772:28;;;;;;;;;;;;2579:229;2518:290;;:::o;2457:93:0:-;2501:7;2528:14;;2521:21;;2457:93;:::o;1440:38::-;;;;;;;;;;;;;;;;;;;;;;:::o;3031:768:2:-;3167:8;:12;3176:2;3167:12;;;;;;;;;;;;;;;;;;;;;3159:20;;:4;:20;;;3151:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;3229:1;3215:16;;:2;:16;;;3207:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;3302:4;3288:18;;:10;:18;;;:56;;;;3310:16;:22;3327:4;3310:22;;;;;;;;;;;;;;;:34;3333:10;3310:34;;;;;;;;;;;;;;;;;;;;;;;;;3288:56;:89;;;;3362:11;:15;3374:2;3362:15;;;;;;;;;;;;;;;;;;;;;3348:29;;:10;:29;;;3288:89;3266:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;3624:10;:16;3635:4;3624:16;;;;;;;;;;;;;;;;:18;;;;;;;;;;;;;;3659:10;:14;3670:2;3659:14;;;;;;;;;;;;;;;;:16;;;;;;;;;;;;;3714:2;3699:8;:12;3708:2;3699:12;;;;;;;;;;;;:17;;;;;;;;;;;;;;;;;;3736:11;:15;3748:2;3736:15;;;;;;;;;;;;3729:22;;;;;;;;;;;3788:2;3784;3769:22;;3778:4;3769:22;;;;;;;;;;;;3031:768;;;:::o;2558:268:0:-;1147:13:5;:11;:13::i;:::-;2637:15:0::1;2655:21;2637:39;;2688:15;2709:5;:10;;2727:7;2709:30;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2687:52;;;2755:10;2750:69;;2789:18;;;;;;;;;;;;;;2750:69;2626:200;;2558:268:::0;:::o;3807:409:2:-;3931:26;3944:4;3950:2;3954;3931:12;:26::i;:::-;4010:1;3992:2;:14;;;:19;:172;;;;4119:45;;;4032:132;;;4052:2;4032:40;;;4073:10;4085:4;4091:2;4032:66;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:132;;;;3992:172;3970:238;;;;;;;;;;;;:::i;:::-;;;;;;;;;3807:409;;;:::o;1671:369:0:-;1706:7;1730:6;:18;1737:10;1730:18;;;;;;;;;;;;;;;;;;;;;;;;;1726:66;;;1772:8;;;;;;;;;;;;;;1726:66;1819:10;1806:23;;:9;:23;;;1802:75;;1853:12;;;;;;;;;;;;;;1802:75;1887:18;1910:14;;1908:16;;;;;:::i;:::-;;;;;;;1887:37;;1956:4;1935:6;:18;1942:10;1935:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;1971:33;1981:10;1993;1971:9;:33::i;:::-;2022:10;2015:17;;;1671:369;:::o;1361:151:2:-;1419:13;1487:1;1453:36;;1462:8;:12;1471:2;1462:12;;;;;;;;;;;;;;;;;;;;;1454:20;;;1453:36;;;1445:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;1361:151;;;:::o;1376:21:0:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1520:172:2:-;1583:7;1628:1;1611:19;;:5;:19;;;1603:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;1667:10;:17;1678:5;1667:17;;;;;;;;;;;;;;;;1660:24;;1520:172;;;:::o;1909:103:5:-;1147:13;:11;:13::i;:::-;1974:30:::1;2001:1;1974:18;:30::i;:::-;1909:103::o:0;1261:87::-;1307:7;1334:6;;;;;;;;;;;1327:13;;1261:87;:::o;946:20:2:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2816:207::-;2943:8;2902:16;:28;2919:10;2902:28;;;;;;;;;;;;;;;:38;2931:8;2902:38;;;;;;;;;;;;;;;;:49;;;;;;;;;;;;;;;;;;2996:8;2969:46;;2984:10;2969:46;;;3006:8;2969:46;;;;;;:::i;:::-;;;;;;;;2816:207;;:::o;4224:441::-;4378:26;4391:4;4397:2;4401;4378:12;:26::i;:::-;4457:1;4439:2;:14;;;:19;:174;;;;4568:45;;;4479:134;;;4499:2;4479:40;;;4520:10;4532:4;4538:2;4542:4;;4479:68;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:134;;;;4439:174;4417:240;;;;;;;;;;;;:::i;:::-;;;;;;;;;4224:441;;;;;:::o;2327:122:0:-;1147:13:5;:11;:13::i;:::-;2408:6:0::1;2398:7;:16;;;;;;:::i;:::-;;2430:11;;;;;;;;;;2327:122:::0;:::o;2048:271::-;2137:13;2195:1;2167:30;;:16;2175:7;2167;:16::i;:::-;:30;;;2163:91;;2221:21;;;;;;;;;;;;;;2163:91;2295:1;2277:7;2271:21;;;;;:::i;:::-;;;:25;:40;;;;;;;;;;;;;;;;;2299:7;2271:40;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2264:47;;2048:271;;;:::o;2834:511::-;1147:13:5;:11;:13::i;:::-;2928:3:0::1;2910:22;;:6;:22;;::::0;2906:232:::1;;2950:9;2965:10;:15;;2988:21;3039:1;3029:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2965:91;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2949:107;;;3079:4;3071:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;3120:7;;;2906:232;3148:12;3170:6;3148:29;;3188:14;3205:5;:15;;;3229:4;3205:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3188:47;;3246:5;:14;;;3261:10;3273:6;3246:34;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3298:39;3310:10;3322:6;3330;3298:39;;;;;;;;:::i;:::-;;;;;;;;2895:450;;1171:1:5;2834:511:0::0;:::o;1947:68:2:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2167:238:5:-;1147:13;:11;:13::i;:::-;2290:1:::1;2270:22;;:8;:22;;::::0;2248:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2369:28;2388:8;2369:18;:28::i;:::-;2167:238:::0;:::o;1426:132::-;1501:12;:10;:12::i;:::-;1490:23;;:7;:5;:7::i;:::-;:23;;;1482:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1426:132::o;6377:349:2:-;6448:13;6454:2;6458;6448:5;:13::i;:::-;6514:1;6496:2;:14;;;:19;:178;;;;6629:45;;;6536:138;;;6556:2;6536:40;;;6577:10;6597:1;6601:2;6536:72;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:138;;;;6496:178;6474:244;;;;;;;;;;;;:::i;:::-;;;;;;;;;6377:349;;:::o;2565:191:5:-;2639:16;2658:6;;;;;;;;;;;2639:25;;2684:8;2675:6;;:17;;;;;;;;;;;;;;;;;;2739:8;2708:40;;2729:8;2708:40;;;;;;;;;;;;2628:128;2565:191;:::o;656:98:1:-;709:7;736:10;729:17;;656:98;:::o;5399:384:2:-;5488:1;5474:16;;:2;:16;;;5466:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;5557:1;5533:26;;:8;:12;5542:2;5533:12;;;;;;;;;;;;;;;;;;;;;:26;;;5525:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;5672:10;:14;5683:2;5672:14;;;;;;;;;;;;;;;;:16;;;;;;;;;;;;;5727:2;5712:8;:12;5721:2;5712:12;;;;;;;;;;;;:17;;;;;;;;;;;;;;;;;;5772:2;5768;5747:28;;5764:1;5747:28;;;;;;;;;;;;5399:384;;:::o;7:77:7:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:75::-;475:6;508:2;502:9;492:19;;442:75;:::o;523:117::-;632:1;629;622:12;646:117;755:1;752;745:12;769:149;805:7;845:66;838:5;834:78;823:89;;769:149;;;:::o;924:120::-;996:23;1013:5;996:23;:::i;:::-;989:5;986:34;976:62;;1034:1;1031;1024:12;976:62;924:120;:::o;1050:137::-;1095:5;1133:6;1120:20;1111:29;;1149:32;1175:5;1149:32;:::i;:::-;1050:137;;;;:::o;1193:327::-;1251:6;1300:2;1288:9;1279:7;1275:23;1271:32;1268:119;;;1306:79;;:::i;:::-;1268:119;1426:1;1451:52;1495:7;1486:6;1475:9;1471:22;1451:52;:::i;:::-;1441:62;;1397:116;1193:327;;;;:::o;1526:90::-;1560:7;1603:5;1596:13;1589:21;1578:32;;1526:90;;;:::o;1622:109::-;1703:21;1718:5;1703:21;:::i;:::-;1698:3;1691:34;1622:109;;:::o;1737:210::-;1824:4;1862:2;1851:9;1847:18;1839:26;;1875:65;1937:1;1926:9;1922:17;1913:6;1875:65;:::i;:::-;1737:210;;;;:::o;1953:99::-;2005:6;2039:5;2033:12;2023:22;;1953:99;;;:::o;2058:169::-;2142:11;2176:6;2171:3;2164:19;2216:4;2211:3;2207:14;2192:29;;2058:169;;;;:::o;2233:246::-;2314:1;2324:113;2338:6;2335:1;2332:13;2324:113;;;2423:1;2418:3;2414:11;2408:18;2404:1;2399:3;2395:11;2388:39;2360:2;2357:1;2353:10;2348:15;;2324:113;;;2471:1;2462:6;2457:3;2453:16;2446:27;2295:184;2233:246;;;:::o;2485:102::-;2526:6;2577:2;2573:7;2568:2;2561:5;2557:14;2553:28;2543:38;;2485:102;;;:::o;2593:377::-;2681:3;2709:39;2742:5;2709:39;:::i;:::-;2764:71;2828:6;2823:3;2764:71;:::i;:::-;2757:78;;2844:65;2902:6;2897:3;2890:4;2883:5;2879:16;2844:65;:::i;:::-;2934:29;2956:6;2934:29;:::i;:::-;2929:3;2925:39;2918:46;;2685:285;2593:377;;;;:::o;2976:313::-;3089:4;3127:2;3116:9;3112:18;3104:26;;3176:9;3170:4;3166:20;3162:1;3151:9;3147:17;3140:47;3204:78;3277:4;3268:6;3204:78;:::i;:::-;3196:86;;2976:313;;;;:::o;3295:122::-;3368:24;3386:5;3368:24;:::i;:::-;3361:5;3358:35;3348:63;;3407:1;3404;3397:12;3348:63;3295:122;:::o;3423:139::-;3469:5;3507:6;3494:20;3485:29;;3523:33;3550:5;3523:33;:::i;:::-;3423:139;;;;:::o;3568:329::-;3627:6;3676:2;3664:9;3655:7;3651:23;3647:32;3644:119;;;3682:79;;:::i;:::-;3644:119;3802:1;3827:53;3872:7;3863:6;3852:9;3848:22;3827:53;:::i;:::-;3817:63;;3773:117;3568:329;;;;:::o;3903:126::-;3940:7;3980:42;3973:5;3969:54;3958:65;;3903:126;;;:::o;4035:96::-;4072:7;4101:24;4119:5;4101:24;:::i;:::-;4090:35;;4035:96;;;:::o;4137:118::-;4224:24;4242:5;4224:24;:::i;:::-;4219:3;4212:37;4137:118;;:::o;4261:222::-;4354:4;4392:2;4381:9;4377:18;4369:26;;4405:71;4473:1;4462:9;4458:17;4449:6;4405:71;:::i;:::-;4261:222;;;;:::o;4489:122::-;4562:24;4580:5;4562:24;:::i;:::-;4555:5;4552:35;4542:63;;4601:1;4598;4591:12;4542:63;4489:122;:::o;4617:139::-;4663:5;4701:6;4688:20;4679:29;;4717:33;4744:5;4717:33;:::i;:::-;4617:139;;;;:::o;4762:474::-;4830:6;4838;4887:2;4875:9;4866:7;4862:23;4858:32;4855:119;;;4893:79;;:::i;:::-;4855:119;5013:1;5038:53;5083:7;5074:6;5063:9;5059:22;5038:53;:::i;:::-;5028:63;;4984:117;5140:2;5166:53;5211:7;5202:6;5191:9;5187:22;5166:53;:::i;:::-;5156:63;;5111:118;4762:474;;;;;:::o;5242:329::-;5301:6;5350:2;5338:9;5329:7;5325:23;5321:32;5318:119;;;5356:79;;:::i;:::-;5318:119;5476:1;5501:53;5546:7;5537:6;5526:9;5522:22;5501:53;:::i;:::-;5491:63;;5447:117;5242:329;;;;:::o;5577:619::-;5654:6;5662;5670;5719:2;5707:9;5698:7;5694:23;5690:32;5687:119;;;5725:79;;:::i;:::-;5687:119;5845:1;5870:53;5915:7;5906:6;5895:9;5891:22;5870:53;:::i;:::-;5860:63;;5816:117;5972:2;5998:53;6043:7;6034:6;6023:9;6019:22;5998:53;:::i;:::-;5988:63;;5943:118;6100:2;6126:53;6171:7;6162:6;6151:9;6147:22;6126:53;:::i;:::-;6116:63;;6071:118;5577:619;;;;;:::o;6202:104::-;6247:7;6276:24;6294:5;6276:24;:::i;:::-;6265:35;;6202:104;;;:::o;6312:138::-;6393:32;6419:5;6393:32;:::i;:::-;6386:5;6383:43;6373:71;;6440:1;6437;6430:12;6373:71;6312:138;:::o;6456:155::-;6510:5;6548:6;6535:20;6526:29;;6564:41;6599:5;6564:41;:::i;:::-;6456:155;;;;:::o;6617:345::-;6684:6;6733:2;6721:9;6712:7;6708:23;6704:32;6701:119;;;6739:79;;:::i;:::-;6701:119;6859:1;6884:61;6937:7;6928:6;6917:9;6913:22;6884:61;:::i;:::-;6874:71;;6830:125;6617:345;;;;:::o;6968:116::-;7038:21;7053:5;7038:21;:::i;:::-;7031:5;7028:32;7018:60;;7074:1;7071;7064:12;7018:60;6968:116;:::o;7090:133::-;7133:5;7171:6;7158:20;7149:29;;7187:30;7211:5;7187:30;:::i;:::-;7090:133;;;;:::o;7229:468::-;7294:6;7302;7351:2;7339:9;7330:7;7326:23;7322:32;7319:119;;;7357:79;;:::i;:::-;7319:119;7477:1;7502:53;7547:7;7538:6;7527:9;7523:22;7502:53;:::i;:::-;7492:63;;7448:117;7604:2;7630:50;7672:7;7663:6;7652:9;7648:22;7630:50;:::i;:::-;7620:60;;7575:115;7229:468;;;;;:::o;7703:117::-;7812:1;7809;7802:12;7826:117;7935:1;7932;7925:12;7949:117;8058:1;8055;8048:12;8085:552;8142:8;8152:6;8202:3;8195:4;8187:6;8183:17;8179:27;8169:122;;8210:79;;:::i;:::-;8169:122;8323:6;8310:20;8300:30;;8353:18;8345:6;8342:30;8339:117;;;8375:79;;:::i;:::-;8339:117;8489:4;8481:6;8477:17;8465:29;;8543:3;8535:4;8527:6;8523:17;8513:8;8509:32;8506:41;8503:128;;;8550:79;;:::i;:::-;8503:128;8085:552;;;;;:::o;8643:963::-;8740:6;8748;8756;8764;8772;8821:3;8809:9;8800:7;8796:23;8792:33;8789:120;;;8828:79;;:::i;:::-;8789:120;8948:1;8973:53;9018:7;9009:6;8998:9;8994:22;8973:53;:::i;:::-;8963:63;;8919:117;9075:2;9101:53;9146:7;9137:6;9126:9;9122:22;9101:53;:::i;:::-;9091:63;;9046:118;9203:2;9229:53;9274:7;9265:6;9254:9;9250:22;9229:53;:::i;:::-;9219:63;;9174:118;9359:2;9348:9;9344:18;9331:32;9390:18;9382:6;9379:30;9376:117;;;9412:79;;:::i;:::-;9376:117;9525:64;9581:7;9572:6;9561:9;9557:22;9525:64;:::i;:::-;9507:82;;;;9302:297;8643:963;;;;;;;;:::o;9612:117::-;9721:1;9718;9711:12;9735:180;9783:77;9780:1;9773:88;9880:4;9877:1;9870:15;9904:4;9901:1;9894:15;9921:281;10004:27;10026:4;10004:27;:::i;:::-;9996:6;9992:40;10134:6;10122:10;10119:22;10098:18;10086:10;10083:34;10080:62;10077:88;;;10145:18;;:::i;:::-;10077:88;10185:10;10181:2;10174:22;9964:238;9921:281;;:::o;10208:129::-;10242:6;10269:20;;:::i;:::-;10259:30;;10298:33;10326:4;10318:6;10298:33;:::i;:::-;10208:129;;;:::o;10343:308::-;10405:4;10495:18;10487:6;10484:30;10481:56;;;10517:18;;:::i;:::-;10481:56;10555:29;10577:6;10555:29;:::i;:::-;10547:37;;10639:4;10633;10629:15;10621:23;;10343:308;;;:::o;10657:146::-;10754:6;10749:3;10744;10731:30;10795:1;10786:6;10781:3;10777:16;10770:27;10657:146;;;:::o;10809:425::-;10887:5;10912:66;10928:49;10970:6;10928:49;:::i;:::-;10912:66;:::i;:::-;10903:75;;11001:6;10994:5;10987:21;11039:4;11032:5;11028:16;11077:3;11068:6;11063:3;11059:16;11056:25;11053:112;;;11084:79;;:::i;:::-;11053:112;11174:54;11221:6;11216:3;11211;11174:54;:::i;:::-;10893:341;10809:425;;;;;:::o;11254:340::-;11310:5;11359:3;11352:4;11344:6;11340:17;11336:27;11326:122;;11367:79;;:::i;:::-;11326:122;11484:6;11471:20;11509:79;11584:3;11576:6;11569:4;11561:6;11557:17;11509:79;:::i;:::-;11500:88;;11316:278;11254:340;;;;:::o;11600:509::-;11669:6;11718:2;11706:9;11697:7;11693:23;11689:32;11686:119;;;11724:79;;:::i;:::-;11686:119;11872:1;11861:9;11857:17;11844:31;11902:18;11894:6;11891:30;11888:117;;;11924:79;;:::i;:::-;11888:117;12029:63;12084:7;12075:6;12064:9;12060:22;12029:63;:::i;:::-;12019:73;;11815:287;11600:509;;;;:::o;12115:474::-;12183:6;12191;12240:2;12228:9;12219:7;12215:23;12211:32;12208:119;;;12246:79;;:::i;:::-;12208:119;12366:1;12391:53;12436:7;12427:6;12416:9;12412:22;12391:53;:::i;:::-;12381:63;;12337:117;12493:2;12519:53;12564:7;12555:6;12544:9;12540:22;12519:53;:::i;:::-;12509:63;;12464:118;12115:474;;;;;:::o;12595:180::-;12643:77;12640:1;12633:88;12740:4;12737:1;12730:15;12764:4;12761:1;12754:15;12781:320;12825:6;12862:1;12856:4;12852:12;12842:22;;12909:1;12903:4;12899:12;12930:18;12920:81;;12986:4;12978:6;12974:17;12964:27;;12920:81;13048:2;13040:6;13037:14;13017:18;13014:38;13011:84;;13067:18;;:::i;:::-;13011:84;12832:269;12781:320;;;:::o;13107:164::-;13247:16;13243:1;13235:6;13231:14;13224:40;13107:164;:::o;13277:366::-;13419:3;13440:67;13504:2;13499:3;13440:67;:::i;:::-;13433:74;;13516:93;13605:3;13516:93;:::i;:::-;13634:2;13629:3;13625:12;13618:19;;13277:366;;;:::o;13649:419::-;13815:4;13853:2;13842:9;13838:18;13830:26;;13902:9;13896:4;13892:20;13888:1;13877:9;13873:17;13866:47;13930:131;14056:4;13930:131;:::i;:::-;13922:139;;13649:419;;;:::o;14074:160::-;14214:12;14210:1;14202:6;14198:14;14191:36;14074:160;:::o;14240:366::-;14382:3;14403:67;14467:2;14462:3;14403:67;:::i;:::-;14396:74;;14479:93;14568:3;14479:93;:::i;:::-;14597:2;14592:3;14588:12;14581:19;;14240:366;;;:::o;14612:419::-;14778:4;14816:2;14805:9;14801:18;14793:26;;14865:9;14859:4;14855:20;14851:1;14840:9;14836:17;14829:47;14893:131;15019:4;14893:131;:::i;:::-;14885:139;;14612:419;;;:::o;15037:167::-;15177:19;15173:1;15165:6;15161:14;15154:43;15037:167;:::o;15210:366::-;15352:3;15373:67;15437:2;15432:3;15373:67;:::i;:::-;15366:74;;15449:93;15538:3;15449:93;:::i;:::-;15567:2;15562:3;15558:12;15551:19;;15210:366;;;:::o;15582:419::-;15748:4;15786:2;15775:9;15771:18;15763:26;;15835:9;15829:4;15825:20;15821:1;15810:9;15806:17;15799:47;15863:131;15989:4;15863:131;:::i;:::-;15855:139;;15582:419;;;:::o;16007:147::-;16108:11;16145:3;16130:18;;16007:147;;;;:::o;16160:114::-;;:::o;16280:398::-;16439:3;16460:83;16541:1;16536:3;16460:83;:::i;:::-;16453:90;;16552:93;16641:3;16552:93;:::i;:::-;16670:1;16665:3;16661:11;16654:18;;16280:398;;;:::o;16684:379::-;16868:3;16890:147;17033:3;16890:147;:::i;:::-;16883:154;;17054:3;17047:10;;16684:379;;;:::o;17069:168::-;17152:11;17186:6;17181:3;17174:19;17226:4;17221:3;17217:14;17202:29;;17069:168;;;;:::o;17243:362::-;17384:3;17405:65;17468:1;17463:3;17405:65;:::i;:::-;17398:72;;17479:93;17568:3;17479:93;:::i;:::-;17597:1;17592:3;17588:11;17581:18;;17243:362;;;:::o;17611:748::-;17860:4;17898:3;17887:9;17883:19;17875:27;;17912:71;17980:1;17969:9;17965:17;17956:6;17912:71;:::i;:::-;17993:72;18061:2;18050:9;18046:18;18037:6;17993:72;:::i;:::-;18075;18143:2;18132:9;18128:18;18119:6;18075:72;:::i;:::-;18194:9;18188:4;18184:20;18179:2;18168:9;18164:18;18157:48;18222:130;18347:4;18222:130;:::i;:::-;18214:138;;17611:748;;;;;;:::o;18365:141::-;18421:5;18452:6;18446:13;18437:22;;18468:32;18494:5;18468:32;:::i;:::-;18365:141;;;;:::o;18512:349::-;18581:6;18630:2;18618:9;18609:7;18605:23;18601:32;18598:119;;;18636:79;;:::i;:::-;18598:119;18756:1;18781:63;18836:7;18827:6;18816:9;18812:22;18781:63;:::i;:::-;18771:73;;18727:127;18512:349;;;;:::o;18867:166::-;19007:18;19003:1;18995:6;18991:14;18984:42;18867:166;:::o;19039:366::-;19181:3;19202:67;19266:2;19261:3;19202:67;:::i;:::-;19195:74;;19278:93;19367:3;19278:93;:::i;:::-;19396:2;19391:3;19387:12;19380:19;;19039:366;;;:::o;19411:419::-;19577:4;19615:2;19604:9;19600:18;19592:26;;19664:9;19658:4;19654:20;19650:1;19639:9;19635:17;19628:47;19692:131;19818:4;19692:131;:::i;:::-;19684:139;;19411:419;;;:::o;19836:180::-;19884:77;19881:1;19874:88;19981:4;19978:1;19971:15;20005:4;20002:1;19995:15;20022:233;20061:3;20084:24;20102:5;20084:24;:::i;:::-;20075:33;;20130:66;20123:5;20120:77;20117:103;;20200:18;;:::i;:::-;20117:103;20247:1;20240:5;20236:13;20229:20;;20022:233;;;:::o;20261:160::-;20401:12;20397:1;20389:6;20385:14;20378:36;20261:160;:::o;20427:366::-;20569:3;20590:67;20654:2;20649:3;20590:67;:::i;:::-;20583:74;;20666:93;20755:3;20666:93;:::i;:::-;20784:2;20779:3;20775:12;20768:19;;20427:366;;;:::o;20799:419::-;20965:4;21003:2;20992:9;20988:18;20980:26;;21052:9;21046:4;21042:20;21038:1;21027:9;21023:17;21016:47;21080:131;21206:4;21080:131;:::i;:::-;21072:139;;20799:419;;;:::o;21224:162::-;21364:14;21360:1;21352:6;21348:14;21341:38;21224:162;:::o;21392:366::-;21534:3;21555:67;21619:2;21614:3;21555:67;:::i;:::-;21548:74;;21631:93;21720:3;21631:93;:::i;:::-;21749:2;21744:3;21740:12;21733:19;;21392:366;;;:::o;21764:419::-;21930:4;21968:2;21957:9;21953:18;21945:26;;22017:9;22011:4;22007:20;22003:1;21992:9;21988:17;21981:47;22045:131;22171:4;22045:131;:::i;:::-;22037:139;;21764:419;;;:::o;22211:314::-;22307:3;22328:70;22391:6;22386:3;22328:70;:::i;:::-;22321:77;;22408:56;22457:6;22452:3;22445:5;22408:56;:::i;:::-;22489:29;22511:6;22489:29;:::i;:::-;22484:3;22480:39;22473:46;;22211:314;;;;;:::o;22531:660::-;22736:4;22774:3;22763:9;22759:19;22751:27;;22788:71;22856:1;22845:9;22841:17;22832:6;22788:71;:::i;:::-;22869:72;22937:2;22926:9;22922:18;22913:6;22869:72;:::i;:::-;22951;23019:2;23008:9;23004:18;22995:6;22951:72;:::i;:::-;23070:9;23064:4;23060:20;23055:2;23044:9;23040:18;23033:48;23098:86;23179:4;23170:6;23162;23098:86;:::i;:::-;23090:94;;22531:660;;;;;;;;:::o;23197:141::-;23246:4;23269:3;23261:11;;23292:3;23289:1;23282:14;23326:4;23323:1;23313:18;23305:26;;23197:141;;;:::o;23344:93::-;23381:6;23428:2;23423;23416:5;23412:14;23408:23;23398:33;;23344:93;;;:::o;23443:107::-;23487:8;23537:5;23531:4;23527:16;23506:37;;23443:107;;;;:::o;23556:393::-;23625:6;23675:1;23663:10;23659:18;23698:97;23728:66;23717:9;23698:97;:::i;:::-;23816:39;23846:8;23835:9;23816:39;:::i;:::-;23804:51;;23888:4;23884:9;23877:5;23873:21;23864:30;;23937:4;23927:8;23923:19;23916:5;23913:30;23903:40;;23632:317;;23556:393;;;;;:::o;23955:60::-;23983:3;24004:5;23997:12;;23955:60;;;:::o;24021:142::-;24071:9;24104:53;24122:34;24131:24;24149:5;24131:24;:::i;:::-;24122:34;:::i;:::-;24104:53;:::i;:::-;24091:66;;24021:142;;;:::o;24169:75::-;24212:3;24233:5;24226:12;;24169:75;;;:::o;24250:269::-;24360:39;24391:7;24360:39;:::i;:::-;24421:91;24470:41;24494:16;24470:41;:::i;:::-;24462:6;24455:4;24449:11;24421:91;:::i;:::-;24415:4;24408:105;24326:193;24250:269;;;:::o;24525:73::-;24570:3;24525:73;:::o;24604:189::-;24681:32;;:::i;:::-;24722:65;24780:6;24772;24766:4;24722:65;:::i;:::-;24657:136;24604:189;;:::o;24799:186::-;24859:120;24876:3;24869:5;24866:14;24859:120;;;24930:39;24967:1;24960:5;24930:39;:::i;:::-;24903:1;24896:5;24892:13;24883:22;;24859:120;;;24799:186;;:::o;24991:543::-;25092:2;25087:3;25084:11;25081:446;;;25126:38;25158:5;25126:38;:::i;:::-;25210:29;25228:10;25210:29;:::i;:::-;25200:8;25196:44;25393:2;25381:10;25378:18;25375:49;;;25414:8;25399:23;;25375:49;25437:80;25493:22;25511:3;25493:22;:::i;:::-;25483:8;25479:37;25466:11;25437:80;:::i;:::-;25096:431;;25081:446;24991:543;;;:::o;25540:117::-;25594:8;25644:5;25638:4;25634:16;25613:37;;25540:117;;;;:::o;25663:169::-;25707:6;25740:51;25788:1;25784:6;25776:5;25773:1;25769:13;25740:51;:::i;:::-;25736:56;25821:4;25815;25811:15;25801:25;;25714:118;25663:169;;;;:::o;25837:295::-;25913:4;26059:29;26084:3;26078:4;26059:29;:::i;:::-;26051:37;;26121:3;26118:1;26114:11;26108:4;26105:21;26097:29;;25837:295;;;;:::o;26137:1395::-;26254:37;26287:3;26254:37;:::i;:::-;26356:18;26348:6;26345:30;26342:56;;;26378:18;;:::i;:::-;26342:56;26422:38;26454:4;26448:11;26422:38;:::i;:::-;26507:67;26567:6;26559;26553:4;26507:67;:::i;:::-;26601:1;26625:4;26612:17;;26657:2;26649:6;26646:14;26674:1;26669:618;;;;27331:1;27348:6;27345:77;;;27397:9;27392:3;27388:19;27382:26;27373:35;;27345:77;27448:67;27508:6;27501:5;27448:67;:::i;:::-;27442:4;27435:81;27304:222;26639:887;;26669:618;26721:4;26717:9;26709:6;26705:22;26755:37;26787:4;26755:37;:::i;:::-;26814:1;26828:208;26842:7;26839:1;26836:14;26828:208;;;26921:9;26916:3;26912:19;26906:26;26898:6;26891:42;26972:1;26964:6;26960:14;26950:24;;27019:2;27008:9;27004:18;26991:31;;26865:4;26862:1;26858:12;26853:17;;26828:208;;;27064:6;27055:7;27052:19;27049:179;;;27122:9;27117:3;27113:19;27107:26;27165:48;27207:4;27199:6;27195:17;27184:9;27165:48;:::i;:::-;27157:6;27150:64;27072:156;27049:179;27274:1;27270;27262:6;27258:14;27254:22;27248:4;27241:36;26676:611;;;26639:887;;26229:1303;;;26137:1395;;:::o;27538:98::-;27589:6;27623:5;27617:12;27607:22;;27538:98;;;:::o;27642:386::-;27746:3;27774:38;27806:5;27774:38;:::i;:::-;27828:88;27909:6;27904:3;27828:88;:::i;:::-;27821:95;;27925:65;27983:6;27978:3;27971:4;27964:5;27960:16;27925:65;:::i;:::-;28015:6;28010:3;28006:16;27999:23;;27750:278;27642:386;;;;:::o;28034:271::-;28164:3;28186:93;28275:3;28266:6;28186:93;:::i;:::-;28179:100;;28296:3;28289:10;;28034:271;;;;:::o;28311:167::-;28451:19;28447:1;28439:6;28435:14;28428:43;28311:167;:::o;28484:366::-;28626:3;28647:67;28711:2;28706:3;28647:67;:::i;:::-;28640:74;;28723:93;28812:3;28723:93;:::i;:::-;28841:2;28836:3;28832:12;28825:19;;28484:366;;;:::o;28856:419::-;29022:4;29060:2;29049:9;29045:18;29037:26;;29109:9;29103:4;29099:20;29095:1;29084:9;29080:17;29073:47;29137:131;29263:4;29137:131;:::i;:::-;29129:139;;28856:419;;;:::o;29281:143::-;29338:5;29369:6;29363:13;29354:22;;29385:33;29412:5;29385:33;:::i;:::-;29281:143;;;;:::o;29430:351::-;29500:6;29549:2;29537:9;29528:7;29524:23;29520:32;29517:119;;;29555:79;;:::i;:::-;29517:119;29675:1;29700:64;29756:7;29747:6;29736:9;29732:22;29700:64;:::i;:::-;29690:74;;29646:128;29430:351;;;;:::o;29787:332::-;29908:4;29946:2;29935:9;29931:18;29923:26;;29959:71;30027:1;30016:9;30012:17;30003:6;29959:71;:::i;:::-;30040:72;30108:2;30097:9;30093:18;30084:6;30040:72;:::i;:::-;29787:332;;;;;:::o;30125:137::-;30179:5;30210:6;30204:13;30195:22;;30226:30;30250:5;30226:30;:::i;:::-;30125:137;;;;:::o;30268:345::-;30335:6;30384:2;30372:9;30363:7;30359:23;30355:32;30352:119;;;30390:79;;:::i;:::-;30352:119;30510:1;30535:61;30588:7;30579:6;30568:9;30564:22;30535:61;:::i;:::-;30525:71;;30481:125;30268:345;;;;:::o;30619:442::-;30768:4;30806:2;30795:9;30791:18;30783:26;;30819:71;30887:1;30876:9;30872:17;30863:6;30819:71;:::i;:::-;30900:72;30968:2;30957:9;30953:18;30944:6;30900:72;:::i;:::-;30982;31050:2;31039:9;31035:18;31026:6;30982:72;:::i;:::-;30619:442;;;;;;:::o;31067:225::-;31207:34;31203:1;31195:6;31191:14;31184:58;31276:8;31271:2;31263:6;31259:15;31252:33;31067:225;:::o;31298:366::-;31440:3;31461:67;31525:2;31520:3;31461:67;:::i;:::-;31454:74;;31537:93;31626:3;31537:93;:::i;:::-;31655:2;31650:3;31646:12;31639:19;;31298:366;;;:::o;31670:419::-;31836:4;31874:2;31863:9;31859:18;31851:26;;31923:9;31917:4;31913:20;31909:1;31898:9;31894:17;31887:47;31951:131;32077:4;31951:131;:::i;:::-;31943:139;;31670:419;;;:::o;32095:182::-;32235:34;32231:1;32223:6;32219:14;32212:58;32095:182;:::o;32283:366::-;32425:3;32446:67;32510:2;32505:3;32446:67;:::i;:::-;32439:74;;32522:93;32611:3;32522:93;:::i;:::-;32640:2;32635:3;32631:12;32624:19;;32283:366;;;:::o;32655:419::-;32821:4;32859:2;32848:9;32844:18;32836:26;;32908:9;32902:4;32898:20;32894:1;32883:9;32879:17;32872:47;32936:131;33062:4;32936:131;:::i;:::-;32928:139;;32655:419;;;:::o;33080:164::-;33220:16;33216:1;33208:6;33204:14;33197:40;33080:164;:::o;33250:366::-;33392:3;33413:67;33477:2;33472:3;33413:67;:::i;:::-;33406:74;;33489:93;33578:3;33489:93;:::i;:::-;33607:2;33602:3;33598:12;33591:19;;33250:366;;;:::o;33622:419::-;33788:4;33826:2;33815:9;33811:18;33803:26;;33875:9;33869:4;33865:20;33861:1;33850:9;33846:17;33839:47;33903:131;34029:4;33903:131;:::i;:::-;33895:139;;33622:419;;;:::o

Swarm Source

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