ETH Price: $3,486.46 (+0.46%)

LAGO Pass Official (LAGO)
 

Overview

TokenID

184

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Drop

Compiler Version
v0.8.14+commit.80d49f37

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 12 : Drop.sol
// SPDX-License-Identifier: Unlicense

//  .----------------.  .----------------.  .----------------.  .----------------. 
// | .--------------. || .--------------. || .--------------. || .--------------. |
// | |   _____      | || |      __      | || |    ______    | || |     ____     | |
// | |  |_   _|     | || |     /  \     | || |  .' ___  |   | || |   .'    `.   | |
// | |    | |       | || |    / /\ \    | || | / .'   \_|   | || |  /  .--.  \  | |
// | |    | |   _   | || |   / ____ \   | || | | |    ____  | || |  | |    | |  | |
// | |   _| |__/ |  | || | _/ /    \ \_ | || | \ `.___]  _| | || |  \  `--'  /  | |
// | |  |________|  | || ||____|  |____|| || |  `._____.'   | || |   `.____.'   | |
// | |              | || |              | || |              | || |              | |
// | '--------------' || '--------------' || '--------------' || '--------------' |
//  '----------------'  '----------------'  '----------------'  '----------------' 

pragma solidity ^0.8.14;

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/utils/Strings.sol";
import "@openzeppelin/contracts/utils/Address.sol";
import "base64-sol/base64.sol";

contract Drop is ERC721, Ownable {
    string public nftName;
    string public description;
    uint256 public tokenIdCounter = 0;
    uint256 public tokenPrice;
    uint256 public maxSupply;
    string public imageUrl;
    string public animationUrl;
    string public nftUrl;
    bool public publicMintEnabled;
    uint256 private randomWord;

    string[] private choosableTraits;
    string[][] private choosableValues;
    string[] private randomTraits;
    string[][] private randomValues;
    uint16[] private traitsChance;
    uint256[] private dynamicChance;
    uint16[][] private valuesChance;
    mapping (uint => uint[]) private chosenTraits;
    mapping (uint => uint16[]) private traitIndexes;
    mapping (uint => uint8) private foundersArts;
    mapping (uint => bool) private hasDynamicTrait;
    mapping (uint => uint8) private dynamicTraits;
    uint256[] private dynamicTraitTokens;

    constructor(
        string memory _name,
        string memory _description,
        string memory _imageUrl,
        string memory _animationUrl,
        string memory _nftUrl,
        string memory _symbol,
        uint _tokenPrice,
        uint _maxSupply,
        string[][][] memory traits,
        uint16[][][] memory chances
    ) ERC721(_name, _symbol) {
        require(traits[0][0].length == traits[1].length &&
                traits[2][0].length == traits[3].length &&
                traits[3].length == chances[0][0].length &&
                traits[3].length == chances[2].length, "Invalid metadata");
        publicMintEnabled = false;
        maxSupply = _maxSupply;
        tokenPrice = _tokenPrice;
        nftName = _name;
        description = _description;
        imageUrl = _imageUrl;
        animationUrl = _animationUrl;
        nftUrl = _nftUrl;
        randomWord = uint(keccak256(
            abi.encodePacked(block.difficulty, block.timestamp, uint(blockhash(block.number-1)), uint(blockhash(block.number-2)))
        ));
        dynamicTraitTokens = new uint256[](0);
        choosableTraits = traits[0][0];
        choosableValues = traits[1];
        randomTraits = traits[2][0];
        randomValues = traits[3];
        traitsChance = chances[0][0];
        dynamicChance = chances[1][0];
        valuesChance = chances[2];
    }

    function tokensOfOwner(address _owner) external view returns(uint256[] memory ownerTokens) {
        uint256 tokenCount = balanceOf(_owner);
        if (tokenCount == 0) {
        return new uint256[](1);
        } else {
        uint256[] memory result = new uint256[](tokenCount);
        uint256 resultIndex = 0;

        for (uint256 i = 1; i < tokenIdCounter + 1;) {
            if (ownerOf(i) == _owner) {
                result[resultIndex] = i;
                resultIndex++;
            }
            unchecked { ++i; }
        }
        return result;
        }
    }

    function totalSupply() public view returns (uint) {
        return tokenIdCounter;
    }

    function setName(string memory _name) external onlyOwner {
        nftName = _name;
    }

    function setDescription(string memory _description) external onlyOwner {
        description = _description;
    }

    function setImageUrl(string memory _imageUrl) external onlyOwner {
        imageUrl = _imageUrl;
    }

    function setAnimationUrl(string memory _animationUrl) external onlyOwner {
        animationUrl = _animationUrl;
    }

    function setNftUrl(string memory _nftUrl) external onlyOwner {
        nftUrl = _nftUrl;
    }

    function setTokenPrice(uint _tokenPrice) external onlyOwner {
        tokenPrice = _tokenPrice;
    }

    function setMaxSupply(uint _maxSupply) external onlyOwner {
        maxSupply = _maxSupply;
    }

    function setPublicMintEnabled(bool _publicMintEnabled) external onlyOwner {
        publicMintEnabled = _publicMintEnabled;
    }

    function randomMetadata(uint tokenId) private {
        foundersArts[tokenId] = uint8(randomWord % 10);
        for (uint16 i; i < traitsChance.length;) {
            if (uint(keccak256(
                    abi.encodePacked(block.difficulty, block.timestamp, randomWord, i, uint(blockhash(block.number-1))
                ))) % 10000 < traitsChance[i]) {
                if (valuesChance[i].length == 1) {
                    traitIndexes[tokenId].push(i<<8);
                } else {
                    randomWord = uint(keccak256(
                        abi.encodePacked(uint(blockhash(block.number-1)), randomWord, block.difficulty, block.timestamp, i
                    ))) % 10000;
                    for (uint16 j; j < valuesChance[i].length;) {
                        if (randomWord <= valuesChance[i][j]) {
                            uint16 trait = uint16(j);
                            trait |= i<<8;
                            traitIndexes[tokenId].push(trait);
                            break;
                        }
                        unchecked { ++j; }
                    }
                }
                
            }
            unchecked { ++i; }
        }
    }

    function clearMonthlyTraits() public onlyOwner {
        for (uint256 i; i < dynamicTraitTokens.length;) {
            hasDynamicTrait[dynamicTraitTokens[i]] = false;
            unchecked { ++i; }
        }
        dynamicTraitTokens = new uint256[](0);
    }

    function randomizeMonthlyTraits(uint percentNumerator, uint percentDenominator) public onlyOwner {
        for (uint i; i < dynamicChance.length;) {
            uint256 expectation = uint(uint(dynamicChance[i] * tokenIdCounter) / uint(10000));
            expectation = (expectation * percentNumerator) / percentDenominator;
            for (uint j; j < expectation;) {
                uint tokenId = (uint(keccak256(
                    abi.encodePacked(block.difficulty, block.timestamp, randomWord, i, j)
                )) % tokenIdCounter) + 1;
                if (!hasDynamicTrait[tokenId]) {
                    hasDynamicTrait[tokenId] = true;
                    dynamicTraits[tokenId] = uint8(i);
                    dynamicTraitTokens.push(tokenId);
                }
                unchecked { ++j; }
            }
            unchecked { ++i; }
        }
    }

    function publicMint(uint16[] calldata traits) external payable {
        require(publicMintEnabled, "Public minting is disabled");
        require(msg.sender == tx.origin, "Contracts cannot mint");
        require(tokenIdCounter < maxSupply, "Total supply reached");
        require(tokenPrice <= msg.value, "Not enough funds");
        tokenIdCounter += 1;
        chosenTraits[tokenIdCounter] = traits;
        randomMetadata(tokenIdCounter);
        _mint(_msgSender(), tokenIdCounter);
    }

    function ownersMint(uint16[] calldata traits, address _address) external onlyOwner {
        require(tokenIdCounter < maxSupply, "Total supply reached");
        tokenIdCounter += 1;
        chosenTraits[tokenIdCounter] = traits;
        randomMetadata(tokenIdCounter);
        _mint(_address, tokenIdCounter);
    }

    function tokenURI(uint256 tokenId) public view virtual override(ERC721) returns (string memory) {
        string memory encodedMetadata = '';

        for (uint i; i < traitIndexes[tokenId].length;) {
            encodedMetadata = string(abi.encodePacked(
                encodedMetadata,
                '{"trait_type":"',
                randomTraits[uint8(traitIndexes[tokenId][i]>>8)],
                '", "value":"',
                randomValues[uint8(traitIndexes[tokenId][i]>>8)][uint8(traitIndexes[tokenId][i])],
                '"}',
                i == traitIndexes[tokenId].length ? '' : ',')
            );
            unchecked { ++i; }
        }

        for (uint i; i < choosableTraits.length;) {
            encodedMetadata = string(abi.encodePacked(
                encodedMetadata,
                '{"trait_type":"',
                choosableTraits[i],
                '", "value":"',
                choosableValues[i][chosenTraits[tokenId][i]],
                '"}',
                i == choosableTraits.length - 1 ? '' : ',')
            );
            unchecked { ++i; }
        }

        if (hasDynamicTrait[tokenId]) {
            encodedMetadata = string(abi.encodePacked(
                encodedMetadata,
                ',{"trait_type":"',
                "Dynamic Monthly Trait",
                '", "value":"',
                randomTraits[dynamicTraits[tokenId]],
                '"}')
            );
        }

        encodedMetadata = string(abi.encodePacked(
            encodedMetadata,
            ',{"trait_type":"',
            "Founders Art",
            '", "value":"',
            Strings.toString(foundersArts[tokenId]),
            '"}')
        );

        string memory encodedUris = string(abi.encodePacked(
            '", "nft_url": "',
            nftUrl,
            Strings.toString(tokenId),
            '", "image": "',
            imageUrl,
            '", "animation_url": "',
            animationUrl)
        );

        string memory encoded = string(
            abi.encodePacked(
            'data:application/json;base64,',
            Base64.encode(
                bytes(
                abi.encodePacked(
                    '{"name":"',
                    nftName,
                    ' #',
                    Strings.toString(tokenId),
                    encodedUris,
                    '", "attributes": [',
                    encodedMetadata,
                    '] }'
                )
                )
            )
            )
        );

        return encoded;
    }

    function withdraw() public onlyOwner {
        Address.sendValue(payable(owner()), address(this).balance);
    }
}

File 2 of 12 : ERC721.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/ERC721.sol)

pragma solidity ^0.8.0;

import "./IERC721.sol";
import "./IERC721Receiver.sol";
import "./extensions/IERC721Metadata.sol";
import "../../utils/Address.sol";
import "../../utils/Context.sol";
import "../../utils/Strings.sol";
import "../../utils/introspection/ERC165.sol";

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;

    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _balances[owner];
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
    }

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overridden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender);
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);

        _afterTokenTransfer(address(0), to, tokenId);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);

        _afterTokenTransfer(owner, address(0), tokenId);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId);

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);

        _afterTokenTransfer(from, to, tokenId);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

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

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

File 3 of 12 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "../utils/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 Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

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

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

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

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

File 4 of 12 : Strings.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @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] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

File 5 of 12 : Address.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)

pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

File 6 of 12 : base64.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0;

/// @title Base64
/// @author Brecht Devos - <[email protected]>
/// @notice Provides functions for encoding/decoding base64
library Base64 {
    string internal constant TABLE_ENCODE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
    bytes  internal constant TABLE_DECODE = hex"0000000000000000000000000000000000000000000000000000000000000000"
                                            hex"00000000000000000000003e0000003f3435363738393a3b3c3d000000000000"
                                            hex"00000102030405060708090a0b0c0d0e0f101112131415161718190000000000"
                                            hex"001a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132330000000000";

    function encode(bytes memory data) internal pure returns (string memory) {
        if (data.length == 0) return '';

        // load the table into memory
        string memory table = TABLE_ENCODE;

        // multiply by 4/3 rounded up
        uint256 encodedLen = 4 * ((data.length + 2) / 3);

        // add some extra buffer at the end required for the writing
        string memory result = new string(encodedLen + 32);

        assembly {
            // set the actual output length
            mstore(result, encodedLen)

            // prepare the lookup table
            let tablePtr := add(table, 1)

            // input ptr
            let dataPtr := data
            let endPtr := add(dataPtr, mload(data))

            // result ptr, jump over length
            let resultPtr := add(result, 32)

            // run over the input, 3 bytes at a time
            for {} lt(dataPtr, endPtr) {}
            {
                // read 3 bytes
                dataPtr := add(dataPtr, 3)
                let input := mload(dataPtr)

                // write 4 characters
                mstore8(resultPtr, mload(add(tablePtr, and(shr(18, input), 0x3F))))
                resultPtr := add(resultPtr, 1)
                mstore8(resultPtr, mload(add(tablePtr, and(shr(12, input), 0x3F))))
                resultPtr := add(resultPtr, 1)
                mstore8(resultPtr, mload(add(tablePtr, and(shr( 6, input), 0x3F))))
                resultPtr := add(resultPtr, 1)
                mstore8(resultPtr, mload(add(tablePtr, and(        input,  0x3F))))
                resultPtr := add(resultPtr, 1)
            }

            // padding with '='
            switch mod(mload(data), 3)
            case 1 { mstore(sub(resultPtr, 2), shl(240, 0x3d3d)) }
            case 2 { mstore(sub(resultPtr, 1), shl(248, 0x3d)) }
        }

        return result;
    }

    function decode(string memory _data) internal pure returns (bytes memory) {
        bytes memory data = bytes(_data);

        if (data.length == 0) return new bytes(0);
        require(data.length % 4 == 0, "invalid base64 decoder input");

        // load the table into memory
        bytes memory table = TABLE_DECODE;

        // every 4 characters represent 3 bytes
        uint256 decodedLen = (data.length / 4) * 3;

        // add some extra buffer at the end required for the writing
        bytes memory result = new bytes(decodedLen + 32);

        assembly {
            // padding with '='
            let lastBytes := mload(add(data, mload(data)))
            if eq(and(lastBytes, 0xFF), 0x3d) {
                decodedLen := sub(decodedLen, 1)
                if eq(and(lastBytes, 0xFFFF), 0x3d3d) {
                    decodedLen := sub(decodedLen, 1)
                }
            }

            // set the actual output length
            mstore(result, decodedLen)

            // prepare the lookup table
            let tablePtr := add(table, 1)

            // input ptr
            let dataPtr := data
            let endPtr := add(dataPtr, mload(data))

            // result ptr, jump over length
            let resultPtr := add(result, 32)

            // run over the input, 4 characters at a time
            for {} lt(dataPtr, endPtr) {}
            {
               // read 4 characters
               dataPtr := add(dataPtr, 4)
               let input := mload(dataPtr)

               // write 3 bytes
               let output := add(
                   add(
                       shl(18, and(mload(add(tablePtr, and(shr(24, input), 0xFF))), 0xFF)),
                       shl(12, and(mload(add(tablePtr, and(shr(16, input), 0xFF))), 0xFF))),
                   add(
                       shl( 6, and(mload(add(tablePtr, and(shr( 8, input), 0xFF))), 0xFF)),
                               and(mload(add(tablePtr, and(        input , 0xFF))), 0xFF)
                    )
                )
                mstore(resultPtr, shl(232, output))
                resultPtr := add(resultPtr, 3)
            }
        }

        return result;
    }
}

File 7 of 12 : IERC721.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;

import "../../utils/introspection/IERC165.sol";

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

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

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

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

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

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

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

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

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

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

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

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

File 8 of 12 : IERC721Receiver.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

File 9 of 12 : IERC721Metadata.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;

import "../IERC721.sol";

/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

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

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

File 10 of 12 : 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 11 of 12 : ERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

File 12 of 12 : IERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

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

Settings
{
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_description","type":"string"},{"internalType":"string","name":"_imageUrl","type":"string"},{"internalType":"string","name":"_animationUrl","type":"string"},{"internalType":"string","name":"_nftUrl","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint256","name":"_tokenPrice","type":"uint256"},{"internalType":"uint256","name":"_maxSupply","type":"uint256"},{"internalType":"string[][][]","name":"traits","type":"string[][][]"},{"internalType":"uint16[][][]","name":"chances","type":"uint16[][][]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","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":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"animationUrl","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","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":"clearMonthlyTraits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"description","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"imageUrl","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftUrl","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":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16[]","name":"traits","type":"uint16[]"},{"internalType":"address","name":"_address","type":"address"}],"name":"ownersMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16[]","name":"traits","type":"uint16[]"}],"name":"publicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"publicMintEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percentNumerator","type":"uint256"},{"internalType":"uint256","name":"percentDenominator","type":"uint256"}],"name":"randomizeMonthlyTraits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","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":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_animationUrl","type":"string"}],"name":"setAnimationUrl","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":"string","name":"_description","type":"string"}],"name":"setDescription","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_imageUrl","type":"string"}],"name":"setImageUrl","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxSupply","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_name","type":"string"}],"name":"setName","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_nftUrl","type":"string"}],"name":"setNftUrl","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_publicMintEnabled","type":"bool"}],"name":"setPublicMintEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenPrice","type":"uint256"}],"name":"setTokenPrice","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":[],"name":"tokenIdCounter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"ownerTokens","type":"uint256[]"}],"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":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405260006009553480156200001657600080fd5b5060405162006f4138038062006f4183398181016040528101906200003c91906200129c565b89858160009080519060200190620000569291906200068c565b5080600190805190602001906200006f9291906200068c565b5050506200009262000086620005be60201b60201c565b620005c660201b60201c565b81600181518110620000a957620000a86200148a565b5b60200260200101515182600081518110620000c957620000c86200148a565b5b6020026020010151600081518110620000e757620000e66200148a565b5b6020026020010151511480156200015957508160038151811062000110576200010f6200148a565b5b6020026020010151518260028151811062000130576200012f6200148a565b5b60200260200101516000815181106200014e576200014d6200148a565b5b602002602001015151145b8015620001c15750806000815181106200017857620001776200148a565b5b60200260200101516000815181106200019657620001956200148a565b5b60200260200101515182600381518110620001b657620001b56200148a565b5b602002602001015151145b80156200020b575080600281518110620001e057620001df6200148a565b5b602002602001015151826003815181106200020057620001ff6200148a565b5b602002602001015151145b6200024d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000244906200151a565b60405180910390fd5b6000600f60006101000a81548160ff02191690831515021790555082600b8190555083600a8190555089600790805190602001906200028e9291906200068c565b508860089080519060200190620002a79291906200068c565b5087600c9080519060200190620002c09291906200068c565b5086600d9080519060200190620002d99291906200068c565b5085600e9080519060200190620002f29291906200068c565b5044426001436200030491906200156b565b4060001c6002436200031791906200156b565b4060001c604051602001620003309493929190620015cb565b6040516020818303038152906040528051906020012060001c601081905550600067ffffffffffffffff8111156200036d576200036c62000b06565b5b6040519080825280602002602001820160405280156200039c5781602001602082028036833780820191505090505b50601d9080519060200190620003b49291906200071d565b5081600081518110620003cc57620003cb6200148a565b5b6020026020010151600081518110620003ea57620003e96200148a565b5b602002602001015160119080519060200190620004099291906200076f565b50816001815181106200042157620004206200148a565b5b60200260200101516012908051906020019062000440929190620007d6565b50816002815181106200045857620004576200148a565b5b60200260200101516000815181106200047657620004756200148a565b5b602002602001015160139080519060200190620004959291906200076f565b5081600381518110620004ad57620004ac6200148a565b5b602002602001015160149080519060200190620004cc929190620007d6565b5080600081518110620004e457620004e36200148a565b5b60200260200101516000815181106200050257620005016200148a565b5b602002602001015160159080519060200190620005219291906200083d565b50806001815181106200053957620005386200148a565b5b60200260200101516000815181106200055757620005566200148a565b5b60200260200101516016908051906020019062000576929190620008ee565b50806002815181106200058e576200058d6200148a565b5b602002602001015160179080519060200190620005ad92919062000946565b505050505050505050505062001685565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200069a9062001650565b90600052602060002090601f016020900481019282620006be57600085556200070a565b82601f10620006d957805160ff19168380011785556200070a565b828001600101855582156200070a579182015b8281111562000709578251825591602001919060010190620006ec565b5b509050620007199190620009ad565b5090565b8280548282559060005260206000209081019282156200075c579160200282015b828111156200075b5782518255916020019190600101906200073e565b5b5090506200076b9190620009ad565b5090565b828054828255906000526020600020908101928215620007c3579160200282015b82811115620007c2578251829080519060200190620007b19291906200068c565b509160200191906001019062000790565b5b509050620007d29190620009cc565b5090565b8280548282559060005260206000209081019282156200082a579160200282015b8281111562000829578251829080519060200190620008189291906200076f565b5091602001919060010190620007f7565b5b509050620008399190620009f4565b5090565b82805482825590600052602060002090600f01601090048101928215620008db5791602002820160005b83821115620008a957835183826101000a81548161ffff021916908361ffff160217905550926020019260020160208160010104928301926001030262000867565b8015620008d95782816101000a81549061ffff0219169055600201602081600101049283019260010302620008a9565b505b509050620008ea9190620009ad565b5090565b82805482825590600052602060002090810192821562000933579160200282015b8281111562000932578251829061ffff169055916020019190600101906200090f565b5b509050620009429190620009ad565b5090565b8280548282559060005260206000209081019282156200099a579160200282015b8281111562000999578251829080519060200190620009889291906200083d565b509160200191906001019062000967565b5b509050620009a9919062000a1c565b5090565b5b80821115620009c8576000816000905550600101620009ae565b5090565b5b80821115620009f05760008181620009e6919062000a44565b50600101620009cd565b5090565b5b8082111562000a18576000818162000a0e919062000a8a565b50600101620009f5565b5090565b5b8082111562000a40576000818162000a36919062000aad565b5060010162000a1d565b5090565b50805462000a529062001650565b6000825580601f1062000a66575062000a87565b601f01602090049060005260206000209081019062000a869190620009ad565b5b50565b508054600082559060005260206000209081019062000aaa9190620009cc565b50565b50805460008255600f01601090049060005260206000209081019062000ad49190620009ad565b50565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000b408262000af5565b810181811067ffffffffffffffff8211171562000b625762000b6162000b06565b5b80604052505050565b600062000b7762000ad7565b905062000b85828262000b35565b919050565b600067ffffffffffffffff82111562000ba85762000ba762000b06565b5b62000bb38262000af5565b9050602081019050919050565b60005b8381101562000be057808201518184015260208101905062000bc3565b8381111562000bf0576000848401525b50505050565b600062000c0d62000c078462000b8a565b62000b6b565b90508281526020810184848401111562000c2c5762000c2b62000af0565b5b62000c3984828562000bc0565b509392505050565b600082601f83011262000c595762000c5862000aeb565b5b815162000c6b84826020860162000bf6565b91505092915050565b6000819050919050565b62000c898162000c74565b811462000c9557600080fd5b50565b60008151905062000ca98162000c7e565b92915050565b600067ffffffffffffffff82111562000ccd5762000ccc62000b06565b5b602082029050602081019050919050565b600080fd5b600067ffffffffffffffff82111562000d015762000d0062000b06565b5b602082029050602081019050919050565b600067ffffffffffffffff82111562000d305762000d2f62000b06565b5b602082029050602081019050919050565b600062000d5862000d528462000d12565b62000b6b565b9050808382526020820190506020840283018581111562000d7e5762000d7d62000cde565b5b835b8181101562000dcc57805167ffffffffffffffff81111562000da75762000da662000aeb565b5b80860162000db6898262000c41565b8552602085019450505060208101905062000d80565b5050509392505050565b600082601f83011262000dee5762000ded62000aeb565b5b815162000e0084826020860162000d41565b91505092915050565b600062000e2062000e1a8462000ce3565b62000b6b565b9050808382526020820190506020840283018581111562000e465762000e4562000cde565b5b835b8181101562000e9457805167ffffffffffffffff81111562000e6f5762000e6e62000aeb565b5b80860162000e7e898262000dd6565b8552602085019450505060208101905062000e48565b5050509392505050565b600082601f83011262000eb65762000eb562000aeb565b5b815162000ec884826020860162000e09565b91505092915050565b600062000ee862000ee28462000caf565b62000b6b565b9050808382526020820190506020840283018581111562000f0e5762000f0d62000cde565b5b835b8181101562000f5c57805167ffffffffffffffff81111562000f375762000f3662000aeb565b5b80860162000f46898262000e9e565b8552602085019450505060208101905062000f10565b5050509392505050565b600082601f83011262000f7e5762000f7d62000aeb565b5b815162000f9084826020860162000ed1565b91505092915050565b600067ffffffffffffffff82111562000fb75762000fb662000b06565b5b602082029050602081019050919050565b600067ffffffffffffffff82111562000fe65762000fe562000b06565b5b602082029050602081019050919050565b600067ffffffffffffffff82111562001015576200101462000b06565b5b602082029050602081019050919050565b600061ffff82169050919050565b6200103f8162001026565b81146200104b57600080fd5b50565b6000815190506200105f8162001034565b92915050565b60006200107c620010768462000ff7565b62000b6b565b90508083825260208201905060208402830185811115620010a257620010a162000cde565b5b835b81811015620010cf5780620010ba88826200104e565b845260208401935050602081019050620010a4565b5050509392505050565b600082601f830112620010f157620010f062000aeb565b5b81516200110384826020860162001065565b91505092915050565b6000620011236200111d8462000fc8565b62000b6b565b9050808382526020820190506020840283018581111562001149576200114862000cde565b5b835b818110156200119757805167ffffffffffffffff81111562001172576200117162000aeb565b5b808601620011818982620010d9565b855260208501945050506020810190506200114b565b5050509392505050565b600082601f830112620011b957620011b862000aeb565b5b8151620011cb8482602086016200110c565b91505092915050565b6000620011eb620011e58462000f99565b62000b6b565b9050808382526020820190506020840283018581111562001211576200121062000cde565b5b835b818110156200125f57805167ffffffffffffffff8111156200123a576200123962000aeb565b5b808601620012498982620011a1565b8552602085019450505060208101905062001213565b5050509392505050565b600082601f83011262001281576200128062000aeb565b5b815162001293848260208601620011d4565b91505092915050565b6000806000806000806000806000806101408b8d031215620012c357620012c262000ae1565b5b60008b015167ffffffffffffffff811115620012e457620012e362000ae6565b5b620012f28d828e0162000c41565b9a505060208b015167ffffffffffffffff81111562001316576200131562000ae6565b5b620013248d828e0162000c41565b99505060408b015167ffffffffffffffff81111562001348576200134762000ae6565b5b620013568d828e0162000c41565b98505060608b015167ffffffffffffffff8111156200137a576200137962000ae6565b5b620013888d828e0162000c41565b97505060808b015167ffffffffffffffff811115620013ac57620013ab62000ae6565b5b620013ba8d828e0162000c41565b96505060a08b015167ffffffffffffffff811115620013de57620013dd62000ae6565b5b620013ec8d828e0162000c41565b95505060c0620013ff8d828e0162000c98565b94505060e0620014128d828e0162000c98565b9350506101008b015167ffffffffffffffff81111562001437576200143662000ae6565b5b620014458d828e0162000f66565b9250506101208b015167ffffffffffffffff8111156200146a576200146962000ae6565b5b620014788d828e0162001269565b9150509295989b9194979a5092959850565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082825260208201905092915050565b7f496e76616c6964206d6574616461746100000000000000000000000000000000600082015250565b600062001502601083620014b9565b91506200150f82620014ca565b602082019050919050565b600060208201905081810360008301526200153581620014f3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620015788262000c74565b9150620015858362000c74565b9250828210156200159b576200159a6200153c565b5b828203905092915050565b6000819050919050565b620015c5620015bf8262000c74565b620015a6565b82525050565b6000620015d98287620015b0565b602082019150620015eb8286620015b0565b602082019150620015fd8285620015b0565b6020820191506200160f8284620015b0565b60208201915081905095945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200166957607f821691505b6020821081036200167f576200167e62001621565b5b50919050565b6158ac80620016956000396000f3fe60806040526004361061023a5760003560e01c8063715018a61161012e578063aba83150116100ab578063d5abeb011161006f578063d5abeb0114610839578063dde3dd2214610864578063e0d283e61461088d578063e985e9c5146108a4578063f2fde38b146108e15761023a565b8063aba8315014610756578063b88d4fde14610781578063c47f0027146107aa578063c87b56dd146107d3578063c967dd1c146108105761023a565b80638da5cb5b116100f25780638da5cb5b1461068357806390c3f38f146106ae57806395d89b41146106d757806398bdf6f514610702578063a22cb4651461072d5761023a565b8063715018a6146105b05780637284e416146105c75780637ff9b596146105f2578063818668d71461061d5780638462151c146106465761023a565b806328e56c5e116101bc57806351e379ad1161018057806351e379ad146104c85780636352211e146104e45780636a61e5fc146105215780636f8b44b01461054a57806370a08231146105735761023a565b806328e56c5e1461040b5780632abff1f214610434578063397b5b241461045d5780633ccfd60b1461048857806342842e0e1461049f5761023a565b80630f4161aa116102035780630f4161aa14610338578063131cdcf21461036357806318160ddd1461038e5780631e4c6972146103b957806323b872dd146103e25761023a565b80628bfb001461023f57806301ffc9a71461026a57806306fdde03146102a7578063081812fc146102d2578063095ea7b31461030f575b600080fd5b34801561024b57600080fd5b5061025461090a565b604051610261919061391c565b60405180910390f35b34801561027657600080fd5b50610291600480360381019061028c91906139aa565b610998565b60405161029e91906139f2565b60405180910390f35b3480156102b357600080fd5b506102bc610a7a565b6040516102c9919061391c565b60405180910390f35b3480156102de57600080fd5b506102f960048036038101906102f49190613a43565b610b0c565b6040516103069190613ab1565b60405180910390f35b34801561031b57600080fd5b5061033660048036038101906103319190613af8565b610b91565b005b34801561034457600080fd5b5061034d610ca8565b60405161035a91906139f2565b60405180910390f35b34801561036f57600080fd5b50610378610cbb565b604051610385919061391c565b60405180910390f35b34801561039a57600080fd5b506103a3610d49565b6040516103b09190613b47565b60405180910390f35b3480156103c557600080fd5b506103e060048036038101906103db9190613c97565b610d53565b005b3480156103ee57600080fd5b5061040960048036038101906104049190613ce0565b610de9565b005b34801561041757600080fd5b50610432600480360381019061042d9190613c97565b610e49565b005b34801561044057600080fd5b5061045b60048036038101906104569190613c97565b610edf565b005b34801561046957600080fd5b50610472610f75565b60405161047f919061391c565b60405180910390f35b34801561049457600080fd5b5061049d611003565b005b3480156104ab57600080fd5b506104c660048036038101906104c19190613ce0565b611092565b005b6104e260048036038101906104dd9190613d93565b6110b2565b005b3480156104f057600080fd5b5061050b60048036038101906105069190613a43565b61125b565b6040516105189190613ab1565b60405180910390f35b34801561052d57600080fd5b5061054860048036038101906105439190613a43565b61130c565b005b34801561055657600080fd5b50610571600480360381019061056c9190613a43565b611392565b005b34801561057f57600080fd5b5061059a60048036038101906105959190613de0565b611418565b6040516105a79190613b47565b60405180910390f35b3480156105bc57600080fd5b506105c56114cf565b005b3480156105d357600080fd5b506105dc611557565b6040516105e9919061391c565b60405180910390f35b3480156105fe57600080fd5b506106076115e5565b6040516106149190613b47565b60405180910390f35b34801561062957600080fd5b50610644600480360381019061063f9190613e39565b6115eb565b005b34801561065257600080fd5b5061066d60048036038101906106689190613de0565b611684565b60405161067a9190613f24565b60405180910390f35b34801561068f57600080fd5b506106986117da565b6040516106a59190613ab1565b60405180910390f35b3480156106ba57600080fd5b506106d560048036038101906106d09190613c97565b611804565b005b3480156106e357600080fd5b506106ec61189a565b6040516106f9919061391c565b60405180910390f35b34801561070e57600080fd5b5061071761192c565b6040516107249190613b47565b60405180910390f35b34801561073957600080fd5b50610754600480360381019061074f9190613f46565b611932565b005b34801561076257600080fd5b5061076b611948565b604051610778919061391c565b60405180910390f35b34801561078d57600080fd5b506107a860048036038101906107a39190614027565b6119d6565b005b3480156107b657600080fd5b506107d160048036038101906107cc9190613c97565b611a38565b005b3480156107df57600080fd5b506107fa60048036038101906107f59190613a43565b611ace565b604051610807919061391c565b60405180910390f35b34801561081c57600080fd5b50610837600480360381019061083291906140aa565b611f88565b005b34801561084557600080fd5b5061084e6120a5565b60405161085b9190613b47565b60405180910390f35b34801561087057600080fd5b5061088b6004803603810190610886919061410a565b6120ab565b005b34801561089957600080fd5b506108a26122ae565b005b3480156108b057600080fd5b506108cb60048036038101906108c6919061414a565b6123f2565b6040516108d891906139f2565b60405180910390f35b3480156108ed57600080fd5b5061090860048036038101906109039190613de0565b612486565b005b60078054610917906141b9565b80601f0160208091040260200160405190810160405280929190818152602001828054610943906141b9565b80156109905780601f1061096557610100808354040283529160200191610990565b820191906000526020600020905b81548152906001019060200180831161097357829003601f168201915b505050505081565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a6357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a735750610a728261257d565b5b9050919050565b606060008054610a89906141b9565b80601f0160208091040260200160405190810160405280929190818152602001828054610ab5906141b9565b8015610b025780601f10610ad757610100808354040283529160200191610b02565b820191906000526020600020905b815481529060010190602001808311610ae557829003601f168201915b5050505050905090565b6000610b17826125e7565b610b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4d9061425c565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b9c8261125b565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c03906142ee565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c2b612653565b73ffffffffffffffffffffffffffffffffffffffff161480610c5a5750610c5981610c54612653565b6123f2565b5b610c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9090614380565b60405180910390fd5b610ca3838361265b565b505050565b600f60009054906101000a900460ff1681565b600e8054610cc8906141b9565b80601f0160208091040260200160405190810160405280929190818152602001828054610cf4906141b9565b8015610d415780601f10610d1657610100808354040283529160200191610d41565b820191906000526020600020905b815481529060010190602001808311610d2457829003601f168201915b505050505081565b6000600954905090565b610d5b612653565b73ffffffffffffffffffffffffffffffffffffffff16610d796117da565b73ffffffffffffffffffffffffffffffffffffffff1614610dcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc6906143ec565b60405180910390fd5b80600e9080519060200190610de592919061373c565b5050565b610dfa610df4612653565b82612714565b610e39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e309061447e565b60405180910390fd5b610e448383836127f2565b505050565b610e51612653565b73ffffffffffffffffffffffffffffffffffffffff16610e6f6117da565b73ffffffffffffffffffffffffffffffffffffffff1614610ec5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebc906143ec565b60405180910390fd5b80600d9080519060200190610edb92919061373c565b5050565b610ee7612653565b73ffffffffffffffffffffffffffffffffffffffff16610f056117da565b73ffffffffffffffffffffffffffffffffffffffff1614610f5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f52906143ec565b60405180910390fd5b80600c9080519060200190610f7192919061373c565b5050565b600d8054610f82906141b9565b80601f0160208091040260200160405190810160405280929190818152602001828054610fae906141b9565b8015610ffb5780601f10610fd057610100808354040283529160200191610ffb565b820191906000526020600020905b815481529060010190602001808311610fde57829003601f168201915b505050505081565b61100b612653565b73ffffffffffffffffffffffffffffffffffffffff166110296117da565b73ffffffffffffffffffffffffffffffffffffffff161461107f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611076906143ec565b60405180910390fd5b61109061108a6117da565b47612a58565b565b6110ad838383604051806020016040528060008152506119d6565b505050565b600f60009054906101000a900460ff16611101576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f8906144ea565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461116f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116690614556565b60405180910390fd5b600b54600954106111b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ac906145c2565b60405180910390fd5b34600a5411156111fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f19061462e565b60405180910390fd5b60016009600082825461120d919061467d565b92505081905550818160186000600954815260200190815260200160002091906112389291906137c2565b50611244600954612b4c565b61125761124f612653565b600954612e49565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611303576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fa90614745565b60405180910390fd5b80915050919050565b611314612653565b73ffffffffffffffffffffffffffffffffffffffff166113326117da565b73ffffffffffffffffffffffffffffffffffffffff1614611388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137f906143ec565b60405180910390fd5b80600a8190555050565b61139a612653565b73ffffffffffffffffffffffffffffffffffffffff166113b86117da565b73ffffffffffffffffffffffffffffffffffffffff161461140e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611405906143ec565b60405180910390fd5b80600b8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611488576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147f906147d7565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114d7612653565b73ffffffffffffffffffffffffffffffffffffffff166114f56117da565b73ffffffffffffffffffffffffffffffffffffffff161461154b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611542906143ec565b60405180910390fd5b6115556000613022565b565b60088054611564906141b9565b80601f0160208091040260200160405190810160405280929190818152602001828054611590906141b9565b80156115dd5780601f106115b2576101008083540402835291602001916115dd565b820191906000526020600020905b8154815290600101906020018083116115c057829003601f168201915b505050505081565b600a5481565b6115f3612653565b73ffffffffffffffffffffffffffffffffffffffff166116116117da565b73ffffffffffffffffffffffffffffffffffffffff1614611667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165e906143ec565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b6060600061169183611418565b9050600081036116ed57600167ffffffffffffffff8111156116b6576116b5613b6c565b5b6040519080825280602002602001820160405280156116e45781602001602082028036833780820191505090505b509150506117d5565b60008167ffffffffffffffff81111561170957611708613b6c565b5b6040519080825280602002602001820160405280156117375781602001602082028036833780820191505090505b509050600080600190505b6001600954611751919061467d565b8110156117cd578573ffffffffffffffffffffffffffffffffffffffff166117788261125b565b73ffffffffffffffffffffffffffffffffffffffff16036117c257808383815181106117a7576117a66147f7565b5b60200260200101818152505081806117be90614826565b9250505b806001019050611742565b508193505050505b919050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61180c612653565b73ffffffffffffffffffffffffffffffffffffffff1661182a6117da565b73ffffffffffffffffffffffffffffffffffffffff1614611880576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611877906143ec565b60405180910390fd5b806008908051906020019061189692919061373c565b5050565b6060600180546118a9906141b9565b80601f01602080910402602001604051908101604052809291908181526020018280546118d5906141b9565b80156119225780601f106118f757610100808354040283529160200191611922565b820191906000526020600020905b81548152906001019060200180831161190557829003601f168201915b5050505050905090565b60095481565b61194461193d612653565b83836130e8565b5050565b600c8054611955906141b9565b80601f0160208091040260200160405190810160405280929190818152602001828054611981906141b9565b80156119ce5780601f106119a3576101008083540402835291602001916119ce565b820191906000526020600020905b8154815290600101906020018083116119b157829003601f168201915b505050505081565b6119e76119e1612653565b83612714565b611a26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1d9061447e565b60405180910390fd5b611a3284848484613254565b50505050565b611a40612653565b73ffffffffffffffffffffffffffffffffffffffff16611a5e6117da565b73ffffffffffffffffffffffffffffffffffffffff1614611ab4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aab906143ec565b60405180910390fd5b8060079080519060200190611aca92919061373c565b5050565b6060600060405180602001604052806000815250905060005b6019600085815260200190815260200160002080549050811015611ce7578160136008601960008881526020019081526020016000208481548110611b2f57611b2e6147f7565b5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff16901c60ff1681548110611b6d57611b6c6147f7565b5b9060005260206000200160146008601960008981526020019081526020016000208581548110611ba057611b9f6147f7565b5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff16901c60ff1681548110611bde57611bdd6147f7565b5b90600052602060002001601960008881526020019081526020016000208481548110611c0d57611c0c6147f7565b5b90600052602060002090601091828204019190066002029054906101000a900461ffff1660ff1681548110611c4557611c446147f7565b5b9060005260206000200160196000888152602001908152602001600020805490508414611ca7576040518060400160405280600181526020017f2c00000000000000000000000000000000000000000000000000000000000000815250611cb8565b604051806020016040528060008152505b604051602001611ccb9493929190614a22565b6040516020818303038152906040529150806001019050611ae7565b5060005b601180549050811015611e13578160118281548110611d0d57611d0c6147f7565b5b9060005260206000200160128381548110611d2b57611d2a6147f7565b5b90600052602060002001601860008881526020019081526020016000208481548110611d5a57611d596147f7565b5b906000526020600020015481548110611d7657611d756147f7565b5b906000526020600020016001601180549050611d929190614a81565b8414611dd3576040518060400160405280600181526020017f2c00000000000000000000000000000000000000000000000000000000000000815250611de4565b604051806020016040528060008152505b604051602001611df79493929190614a22565b6040516020818303038152906040529150806001019050611ceb565b50601b600084815260200190815260200160002060009054906101000a900460ff1615611e9f57806013601c600086815260200190815260200160002060009054906101000a900460ff1660ff1681548110611e7257611e716147f7565b5b90600052602060002001604051602001611e8d929190614b4d565b60405160208183030381529060405290505b80611ecc601a600086815260200190815260200160002060009054906101000a900460ff1660ff166132b0565b604051602001611edd929190614be9565b60405160208183030381529060405290506000600e611efb856132b0565b600c600d604051602001611f129493929190614d1d565b60405160208183030381529060405290506000611f5c6007611f33876132b0565b8486604051602001611f489493929190614eac565b604051602081830303815290604052613410565b604051602001611f6c9190614f62565b6040516020818303038152906040529050809350505050919050565b611f90612653565b73ffffffffffffffffffffffffffffffffffffffff16611fae6117da565b73ffffffffffffffffffffffffffffffffffffffff1614612004576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffb906143ec565b60405180910390fd5b600b546009541061204a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612041906145c2565b60405180910390fd5b60016009600082825461205d919061467d565b92505081905550828260186000600954815260200190815260200160002091906120889291906137c2565b50612094600954612b4c565b6120a081600954612e49565b505050565b600b5481565b6120b3612653565b73ffffffffffffffffffffffffffffffffffffffff166120d16117da565b73ffffffffffffffffffffffffffffffffffffffff1614612127576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211e906143ec565b60405180910390fd5b60005b6016805490508110156122a957600061271060095460168481548110612153576121526147f7565b5b90600052602060002001546121689190614f84565b612172919061500d565b90508284826121819190614f84565b61218b919061500d565b905060005b8181101561229c5760006001600954444260105488876040516020016121ba95949392919061505f565b6040516020818303038152906040528051906020012060001c6121dd91906150be565b6121e7919061467d565b9050601b600082815260200190815260200160002060009054906101000a900460ff16612290576001601b600083815260200190815260200160002060006101000a81548160ff02191690831515021790555083601c600083815260200190815260200160002060006101000a81548160ff021916908360ff160217905550601d8190806001815401808255809150506001900390600052602060002001600090919091909150555b81600101915050612190565b508160010191505061212a565b505050565b6122b6612653565b73ffffffffffffffffffffffffffffffffffffffff166122d46117da565b73ffffffffffffffffffffffffffffffffffffffff161461232a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612321906143ec565b60405180910390fd5b60005b601d8054905081101561238f576000601b6000601d8481548110612354576123536147f7565b5b9060005260206000200154815260200190815260200160002060006101000a81548160ff02191690831515021790555080600101905061232d565b50600067ffffffffffffffff8111156123ab576123aa613b6c565b5b6040519080825280602002602001820160405280156123d95781602001602082028036833780820191505090505b50601d90805190602001906123ef929190613819565b50565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61248e612653565b73ffffffffffffffffffffffffffffffffffffffff166124ac6117da565b73ffffffffffffffffffffffffffffffffffffffff1614612502576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f9906143ec565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612571576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256890615161565b60405180910390fd5b61257a81613022565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166126ce8361125b565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061271f826125e7565b61275e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612755906151f3565b60405180910390fd5b60006127698361125b565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806127ab57506127aa81856123f2565b5b806127e957508373ffffffffffffffffffffffffffffffffffffffff166127d184610b0c565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166128128261125b565b73ffffffffffffffffffffffffffffffffffffffff1614612868576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285f90615285565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036128d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ce90615317565b60405180910390fd5b6128e2838383613588565b6128ed60008261265b565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461293d9190614a81565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612994919061467d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612a5383838361358d565b505050565b80471015612a9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9290615383565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051612ac1906153d4565b60006040518083038185875af1925050503d8060008114612afe576040519150601f19603f3d011682016040523d82523d6000602084013e612b03565b606091505b5050905080612b47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3e9061545b565b60405180910390fd5b505050565b600a601054612b5b91906150be565b601a600083815260200190815260200160002060006101000a81548160ff021916908360ff16021790555060005b6015805490508161ffff161015612e455760158161ffff1681548110612bb257612bb16147f7565b5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff16612710444260105485600143612bf09190614a81565b4060001c604051602001612c089594939291906154bf565b6040516020818303038152906040528051906020012060001c612c2b91906150be565b1015612e3a57600160178261ffff1681548110612c4b57612c4a6147f7565b5b906000526020600020018054905003612cc6576019600083815260200190815260200160002060088261ffff16901b90806001815401808255809150506001900390600052602060002090601091828204019190066002029091909190916101000a81548161ffff021916908361ffff160217905550612e39565b612710600143612cd69190614a81565b4060001c601054444285604051602001612cf495949392919061551e565b6040516020818303038152906040528051906020012060001c612d1791906150be565b60108190555060005b60178261ffff1681548110612d3857612d376147f7565b5b90600052602060002001805490508161ffff161015612e375760178261ffff1681548110612d6957612d686147f7565b5b906000526020600020018161ffff1681548110612d8957612d886147f7565b5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff1660105411612e2c57600081905060088361ffff16901b81179050601960008581526020019081526020016000208190806001815401808255809150506001900390600052602060002090601091828204019190066002029091909190916101000a81548161ffff021916908361ffff16021790555050612e37565b806001019050612d20565b505b5b806001019050612b89565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612eb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eaf906155c9565b60405180910390fd5b612ec1816125e7565b15612f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef890615635565b60405180910390fd5b612f0d60008383613588565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f5d919061467d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461301e6000838361358d565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613156576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314d906156a1565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161324791906139f2565b60405180910390a3505050565b61325f8484846127f2565b61326b84848484613592565b6132aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a190615733565b60405180910390fd5b50505050565b6060600082036132f7576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061340b565b600082905060005b6000821461332957808061331290614826565b915050600a82613322919061500d565b91506132ff565b60008167ffffffffffffffff81111561334557613344613b6c565b5b6040519080825280601f01601f1916602001820160405280156133775781602001600182028036833780820191505090505b5090505b60008514613404576001826133909190614a81565b9150600a8561339f91906150be565b60306133ab919061467d565b60f81b8183815181106133c1576133c06147f7565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856133fd919061500d565b945061337b565b8093505050505b919050565b6060600082510361343257604051806020016040528060008152509050613583565b60006040518060600160405280604081526020016158376040913990506000600360028551613461919061467d565b61346b919061500d565b60046134779190614f84565b90506000602082613488919061467d565b67ffffffffffffffff8111156134a1576134a0613b6c565b5b6040519080825280601f01601f1916602001820160405280156134d35781602001600182028036833780820191505090505b509050818152600183018586518101602084015b81831015613542576003830192508251603f8160121c168501518253600182019150603f81600c1c168501518253600182019150603f8160061c168501518253600182019150603f81168501518253600182019150506134e7565b60038951066001811461355c576002811461356c57613577565b613d3d60f01b6002830352613577565b603d60f81b60018303525b50505050508093505050505b919050565b505050565b505050565b60006135b38473ffffffffffffffffffffffffffffffffffffffff16613719565b1561370c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026135dc612653565b8786866040518563ffffffff1660e01b81526004016135fe94939291906157a8565b6020604051808303816000875af192505050801561363a57506040513d601f19601f820116820180604052508101906136379190615809565b60015b6136bc573d806000811461366a576040519150601f19603f3d011682016040523d82523d6000602084013e61366f565b606091505b5060008151036136b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136ab90615733565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613711565b600190505b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054613748906141b9565b90600052602060002090601f01602090048101928261376a57600085556137b1565b82601f1061378357805160ff19168380011785556137b1565b828001600101855582156137b1579182015b828111156137b0578251825591602001919060010190613795565b5b5090506137be9190613866565b5090565b828054828255906000526020600020908101928215613808579160200282015b8281111561380757823561ffff16829061ffff169055916020019190600101906137e2565b5b5090506138159190613866565b5090565b828054828255906000526020600020908101928215613855579160200282015b82811115613854578251825591602001919060010190613839565b5b5090506138629190613866565b5090565b5b8082111561387f576000816000905550600101613867565b5090565b600081519050919050565b600082825260208201905092915050565b60005b838110156138bd5780820151818401526020810190506138a2565b838111156138cc576000848401525b50505050565b6000601f19601f8301169050919050565b60006138ee82613883565b6138f8818561388e565b935061390881856020860161389f565b613911816138d2565b840191505092915050565b6000602082019050818103600083015261393681846138e3565b905092915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61398781613952565b811461399257600080fd5b50565b6000813590506139a48161397e565b92915050565b6000602082840312156139c0576139bf613948565b5b60006139ce84828501613995565b91505092915050565b60008115159050919050565b6139ec816139d7565b82525050565b6000602082019050613a0760008301846139e3565b92915050565b6000819050919050565b613a2081613a0d565b8114613a2b57600080fd5b50565b600081359050613a3d81613a17565b92915050565b600060208284031215613a5957613a58613948565b5b6000613a6784828501613a2e565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613a9b82613a70565b9050919050565b613aab81613a90565b82525050565b6000602082019050613ac66000830184613aa2565b92915050565b613ad581613a90565b8114613ae057600080fd5b50565b600081359050613af281613acc565b92915050565b60008060408385031215613b0f57613b0e613948565b5b6000613b1d85828601613ae3565b9250506020613b2e85828601613a2e565b9150509250929050565b613b4181613a0d565b82525050565b6000602082019050613b5c6000830184613b38565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613ba4826138d2565b810181811067ffffffffffffffff82111715613bc357613bc2613b6c565b5b80604052505050565b6000613bd661393e565b9050613be28282613b9b565b919050565b600067ffffffffffffffff821115613c0257613c01613b6c565b5b613c0b826138d2565b9050602081019050919050565b82818337600083830152505050565b6000613c3a613c3584613be7565b613bcc565b905082815260208101848484011115613c5657613c55613b67565b5b613c61848285613c18565b509392505050565b600082601f830112613c7e57613c7d613b62565b5b8135613c8e848260208601613c27565b91505092915050565b600060208284031215613cad57613cac613948565b5b600082013567ffffffffffffffff811115613ccb57613cca61394d565b5b613cd784828501613c69565b91505092915050565b600080600060608486031215613cf957613cf8613948565b5b6000613d0786828701613ae3565b9350506020613d1886828701613ae3565b9250506040613d2986828701613a2e565b9150509250925092565b600080fd5b600080fd5b60008083601f840112613d5357613d52613b62565b5b8235905067ffffffffffffffff811115613d7057613d6f613d33565b5b602083019150836020820283011115613d8c57613d8b613d38565b5b9250929050565b60008060208385031215613daa57613da9613948565b5b600083013567ffffffffffffffff811115613dc857613dc761394d565b5b613dd485828601613d3d565b92509250509250929050565b600060208284031215613df657613df5613948565b5b6000613e0484828501613ae3565b91505092915050565b613e16816139d7565b8114613e2157600080fd5b50565b600081359050613e3381613e0d565b92915050565b600060208284031215613e4f57613e4e613948565b5b6000613e5d84828501613e24565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613e9b81613a0d565b82525050565b6000613ead8383613e92565b60208301905092915050565b6000602082019050919050565b6000613ed182613e66565b613edb8185613e71565b9350613ee683613e82565b8060005b83811015613f17578151613efe8882613ea1565b9750613f0983613eb9565b925050600181019050613eea565b5085935050505092915050565b60006020820190508181036000830152613f3e8184613ec6565b905092915050565b60008060408385031215613f5d57613f5c613948565b5b6000613f6b85828601613ae3565b9250506020613f7c85828601613e24565b9150509250929050565b600067ffffffffffffffff821115613fa157613fa0613b6c565b5b613faa826138d2565b9050602081019050919050565b6000613fca613fc584613f86565b613bcc565b905082815260208101848484011115613fe657613fe5613b67565b5b613ff1848285613c18565b509392505050565b600082601f83011261400e5761400d613b62565b5b813561401e848260208601613fb7565b91505092915050565b6000806000806080858703121561404157614040613948565b5b600061404f87828801613ae3565b945050602061406087828801613ae3565b935050604061407187828801613a2e565b925050606085013567ffffffffffffffff8111156140925761409161394d565b5b61409e87828801613ff9565b91505092959194509250565b6000806000604084860312156140c3576140c2613948565b5b600084013567ffffffffffffffff8111156140e1576140e061394d565b5b6140ed86828701613d3d565b9350935050602061410086828701613ae3565b9150509250925092565b6000806040838503121561412157614120613948565b5b600061412f85828601613a2e565b925050602061414085828601613a2e565b9150509250929050565b6000806040838503121561416157614160613948565b5b600061416f85828601613ae3565b925050602061418085828601613ae3565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806141d157607f821691505b6020821081036141e4576141e361418a565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614246602c8361388e565b9150614251826141ea565b604082019050919050565b6000602082019050818103600083015261427581614239565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006142d860218361388e565b91506142e38261427c565b604082019050919050565b60006020820190508181036000830152614307816142cb565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b600061436a60388361388e565b91506143758261430e565b604082019050919050565b600060208201905081810360008301526143998161435d565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006143d660208361388e565b91506143e1826143a0565b602082019050919050565b60006020820190508181036000830152614405816143c9565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b600061446860318361388e565b91506144738261440c565b604082019050919050565b600060208201905081810360008301526144978161445b565b9050919050565b7f5075626c6963206d696e74696e672069732064697361626c6564000000000000600082015250565b60006144d4601a8361388e565b91506144df8261449e565b602082019050919050565b60006020820190508181036000830152614503816144c7565b9050919050565b7f436f6e7472616374732063616e6e6f74206d696e740000000000000000000000600082015250565b600061454060158361388e565b915061454b8261450a565b602082019050919050565b6000602082019050818103600083015261456f81614533565b9050919050565b7f546f74616c20737570706c792072656163686564000000000000000000000000600082015250565b60006145ac60148361388e565b91506145b782614576565b602082019050919050565b600060208201905081810360008301526145db8161459f565b9050919050565b7f4e6f7420656e6f7567682066756e647300000000000000000000000000000000600082015250565b600061461860108361388e565b9150614623826145e2565b602082019050919050565b600060208201905081810360008301526146478161460b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061468882613a0d565b915061469383613a0d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156146c8576146c761464e565b5b828201905092915050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b600061472f60298361388e565b915061473a826146d3565b604082019050919050565b6000602082019050818103600083015261475e81614722565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b60006147c1602a8361388e565b91506147cc82614765565b604082019050919050565b600060208201905081810360008301526147f0816147b4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061483182613a0d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036148635761486261464e565b5b600182019050919050565b600081905092915050565b600061488482613883565b61488e818561486e565b935061489e81856020860161389f565b80840191505092915050565b7f7b2274726169745f74797065223a220000000000000000000000000000000000600082015250565b60006148e0600f8361486e565b91506148eb826148aa565b600f82019050919050565b60008190508160005260206000209050919050565b60008154614918816141b9565b614922818661486e565b9450600182166000811461493d576001811461494e57614981565b60ff19831686528186019350614981565b614957856148f6565b60005b838110156149795781548189015260018201915060208101905061495a565b838801955050505b50505092915050565b7f222c202276616c7565223a220000000000000000000000000000000000000000600082015250565b60006149c0600c8361486e565b91506149cb8261498a565b600c82019050919050565b7f227d000000000000000000000000000000000000000000000000000000000000600082015250565b6000614a0c60028361486e565b9150614a17826149d6565b600282019050919050565b6000614a2e8287614879565b9150614a39826148d3565b9150614a45828661490b565b9150614a50826149b3565b9150614a5c828561490b565b9150614a67826149ff565b9150614a738284614879565b915081905095945050505050565b6000614a8c82613a0d565b9150614a9783613a0d565b925082821015614aaa57614aa961464e565b5b828203905092915050565b7f2c7b2274726169745f74797065223a2200000000000000000000000000000000600082015250565b6000614aeb60108361486e565b9150614af682614ab5565b601082019050919050565b7f44796e616d6963204d6f6e74686c792054726169740000000000000000000000600082015250565b6000614b3760158361486e565b9150614b4282614b01565b601582019050919050565b6000614b598285614879565b9150614b6482614ade565b9150614b6f82614b2a565b9150614b7a826149b3565b9150614b86828461490b565b9150614b91826149ff565b91508190509392505050565b7f466f756e64657273204172740000000000000000000000000000000000000000600082015250565b6000614bd3600c8361486e565b9150614bde82614b9d565b600c82019050919050565b6000614bf58285614879565b9150614c0082614ade565b9150614c0b82614bc6565b9150614c16826149b3565b9150614c228284614879565b9150614c2d826149ff565b91508190509392505050565b7f222c20226e66745f75726c223a20220000000000000000000000000000000000600082015250565b6000614c6f600f8361486e565b9150614c7a82614c39565b600f82019050919050565b7f222c2022696d616765223a202200000000000000000000000000000000000000600082015250565b6000614cbb600d8361486e565b9150614cc682614c85565b600d82019050919050565b7f222c2022616e696d6174696f6e5f75726c223a20220000000000000000000000600082015250565b6000614d0760158361486e565b9150614d1282614cd1565b601582019050919050565b6000614d2882614c62565b9150614d34828761490b565b9150614d408286614879565b9150614d4b82614cae565b9150614d57828561490b565b9150614d6282614cfa565b9150614d6e828461490b565b915081905095945050505050565b7f7b226e616d65223a220000000000000000000000000000000000000000000000600082015250565b6000614db260098361486e565b9150614dbd82614d7c565b600982019050919050565b7f2023000000000000000000000000000000000000000000000000000000000000600082015250565b6000614dfe60028361486e565b9150614e0982614dc8565b600282019050919050565b7f222c202261747472696275746573223a205b0000000000000000000000000000600082015250565b6000614e4a60128361486e565b9150614e5582614e14565b601282019050919050565b7f5d207d0000000000000000000000000000000000000000000000000000000000600082015250565b6000614e9660038361486e565b9150614ea182614e60565b600382019050919050565b6000614eb782614da5565b9150614ec3828761490b565b9150614ece82614df1565b9150614eda8286614879565b9150614ee68285614879565b9150614ef182614e3d565b9150614efd8284614879565b9150614f0882614e89565b915081905095945050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b6000614f4c601d8361486e565b9150614f5782614f16565b601d82019050919050565b6000614f6d82614f3f565b9150614f798284614879565b915081905092915050565b6000614f8f82613a0d565b9150614f9a83613a0d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614fd357614fd261464e565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061501882613a0d565b915061502383613a0d565b92508261503357615032614fde565b5b828204905092915050565b6000819050919050565b61505961505482613a0d565b61503e565b82525050565b600061506b8288615048565b60208201915061507b8287615048565b60208201915061508b8286615048565b60208201915061509b8285615048565b6020820191506150ab8284615048565b6020820191508190509695505050505050565b60006150c982613a0d565b91506150d483613a0d565b9250826150e4576150e3614fde565b5b828206905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061514b60268361388e565b9150615156826150ef565b604082019050919050565b6000602082019050818103600083015261517a8161513e565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006151dd602c8361388e565b91506151e882615181565b604082019050919050565b6000602082019050818103600083015261520c816151d0565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b600061526f60258361388e565b915061527a82615213565b604082019050919050565b6000602082019050818103600083015261529e81615262565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061530160248361388e565b915061530c826152a5565b604082019050919050565b60006020820190508181036000830152615330816152f4565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b600061536d601d8361388e565b915061537882615337565b602082019050919050565b6000602082019050818103600083015261539c81615360565b9050919050565b600081905092915050565b50565b60006153be6000836153a3565b91506153c9826153ae565b600082019050919050565b60006153df826153b1565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b6000615445603a8361388e565b9150615450826153e9565b604082019050919050565b6000602082019050818103600083015261547481615438565b9050919050565b600061ffff82169050919050565b60008160f01b9050919050565b60006154a182615489565b9050919050565b6154b96154b48261547b565b615496565b82525050565b60006154cb8288615048565b6020820191506154db8287615048565b6020820191506154eb8286615048565b6020820191506154fb82856154a8565b60028201915061550b8284615048565b6020820191508190509695505050505050565b600061552a8288615048565b60208201915061553a8287615048565b60208201915061554a8286615048565b60208201915061555a8285615048565b60208201915061556a82846154a8565b6002820191508190509695505050505050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006155b360208361388e565b91506155be8261557d565b602082019050919050565b600060208201905081810360008301526155e2816155a6565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600061561f601c8361388e565b915061562a826155e9565b602082019050919050565b6000602082019050818103600083015261564e81615612565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061568b60198361388e565b915061569682615655565b602082019050919050565b600060208201905081810360008301526156ba8161567e565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061571d60328361388e565b9150615728826156c1565b604082019050919050565b6000602082019050818103600083015261574c81615710565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061577a82615753565b615784818561575e565b935061579481856020860161389f565b61579d816138d2565b840191505092915050565b60006080820190506157bd6000830187613aa2565b6157ca6020830186613aa2565b6157d76040830185613b38565b81810360608301526157e9818461576f565b905095945050505050565b6000815190506158038161397e565b92915050565b60006020828403121561581f5761581e613948565b5b600061582d848285016157f4565b9150509291505056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa2646970667358221220549a5d8b82652b5654885a9694e61a4845c2eb10678ced3d37f623730514431f64736f6c634300080e003300000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000034000000000000000000000000000000000000000000000000000000000000003a00000000000000000000000000000000000000000000000001bc16d674ec8000000000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000003e0000000000000000000000000000000000000000000000000000000000000144000000000000000000000000000000000000000000000000000000000000000124c41474f2050617373204f6666696369616c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005e4c41474f20776f726b73206469726563746c792077697468206172746973747320746f20636f6d6d697373696f6e206f726967696e616c204e465473206578636c75736976656c7920666f72204c41474f2050617373206d656d626572730000000000000000000000000000000000000000000000000000000000000000006a68747470733a2f2f7265732e636c6f7564696e6172792e636f6d2f6c61676f2f696d6167652f75706c6f61642f76313635343138373537352f4c61676f2532304d696e74253230466f756e6465722532304172742f47726f75705f31345f325f7168396736732e73766700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007368747470733a2f2f7265732e636c6f7564696e6172792e636f6d2f6c61676f2f766964656f2f75706c6f61642f76313635333034383130392f4c61676f2532304e46542532304172742f3232303532305f4c41474f5f466f756e646572735f3130383078313038305f6f6b617871702e6d703400000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a68747470733a2f2f6d696e742e6c61676f6672616d652e636f6d2f6d792d6e66743f746f6b656e49643d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044c41474f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000058000000000000000000000000000000000000000000000000000000000000008e0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000b4672616d65205368617065000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b4672616d6520436f6c6f7200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094163636573736f727900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000653717561726500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007526f756e646564000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000005426c61636b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005576869746500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000074e61747572616c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000044e6f6e6500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000643616d657261000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000002c0000000000000000000000000000000000000000000000000000000000000000a496e6e6f766174696f6e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001241727469737420436f6d6d697373696f6e73000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064576656e74730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4172742054726176656c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000134e4654204e6574776f726b205374616b696e67000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011436f6e63696572676520536572766963650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009496e737572616e63650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a47656e32204672616d650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000002c00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000054000000000000000000000000000000000000000000000000000000000000005c0000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000006c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000359657300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000a3320706572207965617200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a3620706572207965617200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b31322070657220796561720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000a3120706572207965617200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a3320706572207965617200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a34207065722079656172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000a3120706572207965617200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a3220706572207965617200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a332070657220796561720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000359657300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000035965730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000011496e7375726520436f6c6c656374696f6e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000359657300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000003200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000bb80000000000000000000000000000000000000000000000000000000000001b5800000000000000000000000000000000000000000000000000000000000004b000000000000000000000000000000000000000000000000000000000000000c80000000000000000000000000000000000000000000000000000000000000dac00000000000000000000000000000000000000000000000000000000000001f400000000000000000000000000000000000000000000000000000000000000c800000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000c800000000000000000000000000000000000000000000000000000000000001f4000000000000000000000000000000000000000000000000000000000000012c000000000000000000000000000000000000000000000000000000000000002800000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000002c00000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000034000000000000000000000000000000000000000000000000000000000000003800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000001770000000000000000000000000000000000000000000000000000000000000245400000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000177000000000000000000000000000000000000000000000000000000000000023280000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000013880000000000000000000000000000000000000000000000000000000000002328000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000002710

Deployed Bytecode

0x60806040526004361061023a5760003560e01c8063715018a61161012e578063aba83150116100ab578063d5abeb011161006f578063d5abeb0114610839578063dde3dd2214610864578063e0d283e61461088d578063e985e9c5146108a4578063f2fde38b146108e15761023a565b8063aba8315014610756578063b88d4fde14610781578063c47f0027146107aa578063c87b56dd146107d3578063c967dd1c146108105761023a565b80638da5cb5b116100f25780638da5cb5b1461068357806390c3f38f146106ae57806395d89b41146106d757806398bdf6f514610702578063a22cb4651461072d5761023a565b8063715018a6146105b05780637284e416146105c75780637ff9b596146105f2578063818668d71461061d5780638462151c146106465761023a565b806328e56c5e116101bc57806351e379ad1161018057806351e379ad146104c85780636352211e146104e45780636a61e5fc146105215780636f8b44b01461054a57806370a08231146105735761023a565b806328e56c5e1461040b5780632abff1f214610434578063397b5b241461045d5780633ccfd60b1461048857806342842e0e1461049f5761023a565b80630f4161aa116102035780630f4161aa14610338578063131cdcf21461036357806318160ddd1461038e5780631e4c6972146103b957806323b872dd146103e25761023a565b80628bfb001461023f57806301ffc9a71461026a57806306fdde03146102a7578063081812fc146102d2578063095ea7b31461030f575b600080fd5b34801561024b57600080fd5b5061025461090a565b604051610261919061391c565b60405180910390f35b34801561027657600080fd5b50610291600480360381019061028c91906139aa565b610998565b60405161029e91906139f2565b60405180910390f35b3480156102b357600080fd5b506102bc610a7a565b6040516102c9919061391c565b60405180910390f35b3480156102de57600080fd5b506102f960048036038101906102f49190613a43565b610b0c565b6040516103069190613ab1565b60405180910390f35b34801561031b57600080fd5b5061033660048036038101906103319190613af8565b610b91565b005b34801561034457600080fd5b5061034d610ca8565b60405161035a91906139f2565b60405180910390f35b34801561036f57600080fd5b50610378610cbb565b604051610385919061391c565b60405180910390f35b34801561039a57600080fd5b506103a3610d49565b6040516103b09190613b47565b60405180910390f35b3480156103c557600080fd5b506103e060048036038101906103db9190613c97565b610d53565b005b3480156103ee57600080fd5b5061040960048036038101906104049190613ce0565b610de9565b005b34801561041757600080fd5b50610432600480360381019061042d9190613c97565b610e49565b005b34801561044057600080fd5b5061045b60048036038101906104569190613c97565b610edf565b005b34801561046957600080fd5b50610472610f75565b60405161047f919061391c565b60405180910390f35b34801561049457600080fd5b5061049d611003565b005b3480156104ab57600080fd5b506104c660048036038101906104c19190613ce0565b611092565b005b6104e260048036038101906104dd9190613d93565b6110b2565b005b3480156104f057600080fd5b5061050b60048036038101906105069190613a43565b61125b565b6040516105189190613ab1565b60405180910390f35b34801561052d57600080fd5b5061054860048036038101906105439190613a43565b61130c565b005b34801561055657600080fd5b50610571600480360381019061056c9190613a43565b611392565b005b34801561057f57600080fd5b5061059a60048036038101906105959190613de0565b611418565b6040516105a79190613b47565b60405180910390f35b3480156105bc57600080fd5b506105c56114cf565b005b3480156105d357600080fd5b506105dc611557565b6040516105e9919061391c565b60405180910390f35b3480156105fe57600080fd5b506106076115e5565b6040516106149190613b47565b60405180910390f35b34801561062957600080fd5b50610644600480360381019061063f9190613e39565b6115eb565b005b34801561065257600080fd5b5061066d60048036038101906106689190613de0565b611684565b60405161067a9190613f24565b60405180910390f35b34801561068f57600080fd5b506106986117da565b6040516106a59190613ab1565b60405180910390f35b3480156106ba57600080fd5b506106d560048036038101906106d09190613c97565b611804565b005b3480156106e357600080fd5b506106ec61189a565b6040516106f9919061391c565b60405180910390f35b34801561070e57600080fd5b5061071761192c565b6040516107249190613b47565b60405180910390f35b34801561073957600080fd5b50610754600480360381019061074f9190613f46565b611932565b005b34801561076257600080fd5b5061076b611948565b604051610778919061391c565b60405180910390f35b34801561078d57600080fd5b506107a860048036038101906107a39190614027565b6119d6565b005b3480156107b657600080fd5b506107d160048036038101906107cc9190613c97565b611a38565b005b3480156107df57600080fd5b506107fa60048036038101906107f59190613a43565b611ace565b604051610807919061391c565b60405180910390f35b34801561081c57600080fd5b50610837600480360381019061083291906140aa565b611f88565b005b34801561084557600080fd5b5061084e6120a5565b60405161085b9190613b47565b60405180910390f35b34801561087057600080fd5b5061088b6004803603810190610886919061410a565b6120ab565b005b34801561089957600080fd5b506108a26122ae565b005b3480156108b057600080fd5b506108cb60048036038101906108c6919061414a565b6123f2565b6040516108d891906139f2565b60405180910390f35b3480156108ed57600080fd5b5061090860048036038101906109039190613de0565b612486565b005b60078054610917906141b9565b80601f0160208091040260200160405190810160405280929190818152602001828054610943906141b9565b80156109905780601f1061096557610100808354040283529160200191610990565b820191906000526020600020905b81548152906001019060200180831161097357829003601f168201915b505050505081565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a6357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a735750610a728261257d565b5b9050919050565b606060008054610a89906141b9565b80601f0160208091040260200160405190810160405280929190818152602001828054610ab5906141b9565b8015610b025780601f10610ad757610100808354040283529160200191610b02565b820191906000526020600020905b815481529060010190602001808311610ae557829003601f168201915b5050505050905090565b6000610b17826125e7565b610b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4d9061425c565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b9c8261125b565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c03906142ee565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c2b612653565b73ffffffffffffffffffffffffffffffffffffffff161480610c5a5750610c5981610c54612653565b6123f2565b5b610c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9090614380565b60405180910390fd5b610ca3838361265b565b505050565b600f60009054906101000a900460ff1681565b600e8054610cc8906141b9565b80601f0160208091040260200160405190810160405280929190818152602001828054610cf4906141b9565b8015610d415780601f10610d1657610100808354040283529160200191610d41565b820191906000526020600020905b815481529060010190602001808311610d2457829003601f168201915b505050505081565b6000600954905090565b610d5b612653565b73ffffffffffffffffffffffffffffffffffffffff16610d796117da565b73ffffffffffffffffffffffffffffffffffffffff1614610dcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc6906143ec565b60405180910390fd5b80600e9080519060200190610de592919061373c565b5050565b610dfa610df4612653565b82612714565b610e39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e309061447e565b60405180910390fd5b610e448383836127f2565b505050565b610e51612653565b73ffffffffffffffffffffffffffffffffffffffff16610e6f6117da565b73ffffffffffffffffffffffffffffffffffffffff1614610ec5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebc906143ec565b60405180910390fd5b80600d9080519060200190610edb92919061373c565b5050565b610ee7612653565b73ffffffffffffffffffffffffffffffffffffffff16610f056117da565b73ffffffffffffffffffffffffffffffffffffffff1614610f5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f52906143ec565b60405180910390fd5b80600c9080519060200190610f7192919061373c565b5050565b600d8054610f82906141b9565b80601f0160208091040260200160405190810160405280929190818152602001828054610fae906141b9565b8015610ffb5780601f10610fd057610100808354040283529160200191610ffb565b820191906000526020600020905b815481529060010190602001808311610fde57829003601f168201915b505050505081565b61100b612653565b73ffffffffffffffffffffffffffffffffffffffff166110296117da565b73ffffffffffffffffffffffffffffffffffffffff161461107f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611076906143ec565b60405180910390fd5b61109061108a6117da565b47612a58565b565b6110ad838383604051806020016040528060008152506119d6565b505050565b600f60009054906101000a900460ff16611101576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f8906144ea565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461116f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116690614556565b60405180910390fd5b600b54600954106111b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ac906145c2565b60405180910390fd5b34600a5411156111fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f19061462e565b60405180910390fd5b60016009600082825461120d919061467d565b92505081905550818160186000600954815260200190815260200160002091906112389291906137c2565b50611244600954612b4c565b61125761124f612653565b600954612e49565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611303576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fa90614745565b60405180910390fd5b80915050919050565b611314612653565b73ffffffffffffffffffffffffffffffffffffffff166113326117da565b73ffffffffffffffffffffffffffffffffffffffff1614611388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137f906143ec565b60405180910390fd5b80600a8190555050565b61139a612653565b73ffffffffffffffffffffffffffffffffffffffff166113b86117da565b73ffffffffffffffffffffffffffffffffffffffff161461140e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611405906143ec565b60405180910390fd5b80600b8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611488576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147f906147d7565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114d7612653565b73ffffffffffffffffffffffffffffffffffffffff166114f56117da565b73ffffffffffffffffffffffffffffffffffffffff161461154b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611542906143ec565b60405180910390fd5b6115556000613022565b565b60088054611564906141b9565b80601f0160208091040260200160405190810160405280929190818152602001828054611590906141b9565b80156115dd5780601f106115b2576101008083540402835291602001916115dd565b820191906000526020600020905b8154815290600101906020018083116115c057829003601f168201915b505050505081565b600a5481565b6115f3612653565b73ffffffffffffffffffffffffffffffffffffffff166116116117da565b73ffffffffffffffffffffffffffffffffffffffff1614611667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165e906143ec565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b6060600061169183611418565b9050600081036116ed57600167ffffffffffffffff8111156116b6576116b5613b6c565b5b6040519080825280602002602001820160405280156116e45781602001602082028036833780820191505090505b509150506117d5565b60008167ffffffffffffffff81111561170957611708613b6c565b5b6040519080825280602002602001820160405280156117375781602001602082028036833780820191505090505b509050600080600190505b6001600954611751919061467d565b8110156117cd578573ffffffffffffffffffffffffffffffffffffffff166117788261125b565b73ffffffffffffffffffffffffffffffffffffffff16036117c257808383815181106117a7576117a66147f7565b5b60200260200101818152505081806117be90614826565b9250505b806001019050611742565b508193505050505b919050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61180c612653565b73ffffffffffffffffffffffffffffffffffffffff1661182a6117da565b73ffffffffffffffffffffffffffffffffffffffff1614611880576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611877906143ec565b60405180910390fd5b806008908051906020019061189692919061373c565b5050565b6060600180546118a9906141b9565b80601f01602080910402602001604051908101604052809291908181526020018280546118d5906141b9565b80156119225780601f106118f757610100808354040283529160200191611922565b820191906000526020600020905b81548152906001019060200180831161190557829003601f168201915b5050505050905090565b60095481565b61194461193d612653565b83836130e8565b5050565b600c8054611955906141b9565b80601f0160208091040260200160405190810160405280929190818152602001828054611981906141b9565b80156119ce5780601f106119a3576101008083540402835291602001916119ce565b820191906000526020600020905b8154815290600101906020018083116119b157829003601f168201915b505050505081565b6119e76119e1612653565b83612714565b611a26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1d9061447e565b60405180910390fd5b611a3284848484613254565b50505050565b611a40612653565b73ffffffffffffffffffffffffffffffffffffffff16611a5e6117da565b73ffffffffffffffffffffffffffffffffffffffff1614611ab4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aab906143ec565b60405180910390fd5b8060079080519060200190611aca92919061373c565b5050565b6060600060405180602001604052806000815250905060005b6019600085815260200190815260200160002080549050811015611ce7578160136008601960008881526020019081526020016000208481548110611b2f57611b2e6147f7565b5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff16901c60ff1681548110611b6d57611b6c6147f7565b5b9060005260206000200160146008601960008981526020019081526020016000208581548110611ba057611b9f6147f7565b5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff16901c60ff1681548110611bde57611bdd6147f7565b5b90600052602060002001601960008881526020019081526020016000208481548110611c0d57611c0c6147f7565b5b90600052602060002090601091828204019190066002029054906101000a900461ffff1660ff1681548110611c4557611c446147f7565b5b9060005260206000200160196000888152602001908152602001600020805490508414611ca7576040518060400160405280600181526020017f2c00000000000000000000000000000000000000000000000000000000000000815250611cb8565b604051806020016040528060008152505b604051602001611ccb9493929190614a22565b6040516020818303038152906040529150806001019050611ae7565b5060005b601180549050811015611e13578160118281548110611d0d57611d0c6147f7565b5b9060005260206000200160128381548110611d2b57611d2a6147f7565b5b90600052602060002001601860008881526020019081526020016000208481548110611d5a57611d596147f7565b5b906000526020600020015481548110611d7657611d756147f7565b5b906000526020600020016001601180549050611d929190614a81565b8414611dd3576040518060400160405280600181526020017f2c00000000000000000000000000000000000000000000000000000000000000815250611de4565b604051806020016040528060008152505b604051602001611df79493929190614a22565b6040516020818303038152906040529150806001019050611ceb565b50601b600084815260200190815260200160002060009054906101000a900460ff1615611e9f57806013601c600086815260200190815260200160002060009054906101000a900460ff1660ff1681548110611e7257611e716147f7565b5b90600052602060002001604051602001611e8d929190614b4d565b60405160208183030381529060405290505b80611ecc601a600086815260200190815260200160002060009054906101000a900460ff1660ff166132b0565b604051602001611edd929190614be9565b60405160208183030381529060405290506000600e611efb856132b0565b600c600d604051602001611f129493929190614d1d565b60405160208183030381529060405290506000611f5c6007611f33876132b0565b8486604051602001611f489493929190614eac565b604051602081830303815290604052613410565b604051602001611f6c9190614f62565b6040516020818303038152906040529050809350505050919050565b611f90612653565b73ffffffffffffffffffffffffffffffffffffffff16611fae6117da565b73ffffffffffffffffffffffffffffffffffffffff1614612004576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffb906143ec565b60405180910390fd5b600b546009541061204a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612041906145c2565b60405180910390fd5b60016009600082825461205d919061467d565b92505081905550828260186000600954815260200190815260200160002091906120889291906137c2565b50612094600954612b4c565b6120a081600954612e49565b505050565b600b5481565b6120b3612653565b73ffffffffffffffffffffffffffffffffffffffff166120d16117da565b73ffffffffffffffffffffffffffffffffffffffff1614612127576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211e906143ec565b60405180910390fd5b60005b6016805490508110156122a957600061271060095460168481548110612153576121526147f7565b5b90600052602060002001546121689190614f84565b612172919061500d565b90508284826121819190614f84565b61218b919061500d565b905060005b8181101561229c5760006001600954444260105488876040516020016121ba95949392919061505f565b6040516020818303038152906040528051906020012060001c6121dd91906150be565b6121e7919061467d565b9050601b600082815260200190815260200160002060009054906101000a900460ff16612290576001601b600083815260200190815260200160002060006101000a81548160ff02191690831515021790555083601c600083815260200190815260200160002060006101000a81548160ff021916908360ff160217905550601d8190806001815401808255809150506001900390600052602060002001600090919091909150555b81600101915050612190565b508160010191505061212a565b505050565b6122b6612653565b73ffffffffffffffffffffffffffffffffffffffff166122d46117da565b73ffffffffffffffffffffffffffffffffffffffff161461232a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612321906143ec565b60405180910390fd5b60005b601d8054905081101561238f576000601b6000601d8481548110612354576123536147f7565b5b9060005260206000200154815260200190815260200160002060006101000a81548160ff02191690831515021790555080600101905061232d565b50600067ffffffffffffffff8111156123ab576123aa613b6c565b5b6040519080825280602002602001820160405280156123d95781602001602082028036833780820191505090505b50601d90805190602001906123ef929190613819565b50565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61248e612653565b73ffffffffffffffffffffffffffffffffffffffff166124ac6117da565b73ffffffffffffffffffffffffffffffffffffffff1614612502576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f9906143ec565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612571576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256890615161565b60405180910390fd5b61257a81613022565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166126ce8361125b565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061271f826125e7565b61275e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612755906151f3565b60405180910390fd5b60006127698361125b565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806127ab57506127aa81856123f2565b5b806127e957508373ffffffffffffffffffffffffffffffffffffffff166127d184610b0c565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166128128261125b565b73ffffffffffffffffffffffffffffffffffffffff1614612868576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285f90615285565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036128d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ce90615317565b60405180910390fd5b6128e2838383613588565b6128ed60008261265b565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461293d9190614a81565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612994919061467d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612a5383838361358d565b505050565b80471015612a9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9290615383565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051612ac1906153d4565b60006040518083038185875af1925050503d8060008114612afe576040519150601f19603f3d011682016040523d82523d6000602084013e612b03565b606091505b5050905080612b47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3e9061545b565b60405180910390fd5b505050565b600a601054612b5b91906150be565b601a600083815260200190815260200160002060006101000a81548160ff021916908360ff16021790555060005b6015805490508161ffff161015612e455760158161ffff1681548110612bb257612bb16147f7565b5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff16612710444260105485600143612bf09190614a81565b4060001c604051602001612c089594939291906154bf565b6040516020818303038152906040528051906020012060001c612c2b91906150be565b1015612e3a57600160178261ffff1681548110612c4b57612c4a6147f7565b5b906000526020600020018054905003612cc6576019600083815260200190815260200160002060088261ffff16901b90806001815401808255809150506001900390600052602060002090601091828204019190066002029091909190916101000a81548161ffff021916908361ffff160217905550612e39565b612710600143612cd69190614a81565b4060001c601054444285604051602001612cf495949392919061551e565b6040516020818303038152906040528051906020012060001c612d1791906150be565b60108190555060005b60178261ffff1681548110612d3857612d376147f7565b5b90600052602060002001805490508161ffff161015612e375760178261ffff1681548110612d6957612d686147f7565b5b906000526020600020018161ffff1681548110612d8957612d886147f7565b5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff1660105411612e2c57600081905060088361ffff16901b81179050601960008581526020019081526020016000208190806001815401808255809150506001900390600052602060002090601091828204019190066002029091909190916101000a81548161ffff021916908361ffff16021790555050612e37565b806001019050612d20565b505b5b806001019050612b89565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612eb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eaf906155c9565b60405180910390fd5b612ec1816125e7565b15612f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef890615635565b60405180910390fd5b612f0d60008383613588565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f5d919061467d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461301e6000838361358d565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613156576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314d906156a1565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161324791906139f2565b60405180910390a3505050565b61325f8484846127f2565b61326b84848484613592565b6132aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a190615733565b60405180910390fd5b50505050565b6060600082036132f7576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061340b565b600082905060005b6000821461332957808061331290614826565b915050600a82613322919061500d565b91506132ff565b60008167ffffffffffffffff81111561334557613344613b6c565b5b6040519080825280601f01601f1916602001820160405280156133775781602001600182028036833780820191505090505b5090505b60008514613404576001826133909190614a81565b9150600a8561339f91906150be565b60306133ab919061467d565b60f81b8183815181106133c1576133c06147f7565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856133fd919061500d565b945061337b565b8093505050505b919050565b6060600082510361343257604051806020016040528060008152509050613583565b60006040518060600160405280604081526020016158376040913990506000600360028551613461919061467d565b61346b919061500d565b60046134779190614f84565b90506000602082613488919061467d565b67ffffffffffffffff8111156134a1576134a0613b6c565b5b6040519080825280601f01601f1916602001820160405280156134d35781602001600182028036833780820191505090505b509050818152600183018586518101602084015b81831015613542576003830192508251603f8160121c168501518253600182019150603f81600c1c168501518253600182019150603f8160061c168501518253600182019150603f81168501518253600182019150506134e7565b60038951066001811461355c576002811461356c57613577565b613d3d60f01b6002830352613577565b603d60f81b60018303525b50505050508093505050505b919050565b505050565b505050565b60006135b38473ffffffffffffffffffffffffffffffffffffffff16613719565b1561370c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026135dc612653565b8786866040518563ffffffff1660e01b81526004016135fe94939291906157a8565b6020604051808303816000875af192505050801561363a57506040513d601f19601f820116820180604052508101906136379190615809565b60015b6136bc573d806000811461366a576040519150601f19603f3d011682016040523d82523d6000602084013e61366f565b606091505b5060008151036136b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136ab90615733565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613711565b600190505b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054613748906141b9565b90600052602060002090601f01602090048101928261376a57600085556137b1565b82601f1061378357805160ff19168380011785556137b1565b828001600101855582156137b1579182015b828111156137b0578251825591602001919060010190613795565b5b5090506137be9190613866565b5090565b828054828255906000526020600020908101928215613808579160200282015b8281111561380757823561ffff16829061ffff169055916020019190600101906137e2565b5b5090506138159190613866565b5090565b828054828255906000526020600020908101928215613855579160200282015b82811115613854578251825591602001919060010190613839565b5b5090506138629190613866565b5090565b5b8082111561387f576000816000905550600101613867565b5090565b600081519050919050565b600082825260208201905092915050565b60005b838110156138bd5780820151818401526020810190506138a2565b838111156138cc576000848401525b50505050565b6000601f19601f8301169050919050565b60006138ee82613883565b6138f8818561388e565b935061390881856020860161389f565b613911816138d2565b840191505092915050565b6000602082019050818103600083015261393681846138e3565b905092915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61398781613952565b811461399257600080fd5b50565b6000813590506139a48161397e565b92915050565b6000602082840312156139c0576139bf613948565b5b60006139ce84828501613995565b91505092915050565b60008115159050919050565b6139ec816139d7565b82525050565b6000602082019050613a0760008301846139e3565b92915050565b6000819050919050565b613a2081613a0d565b8114613a2b57600080fd5b50565b600081359050613a3d81613a17565b92915050565b600060208284031215613a5957613a58613948565b5b6000613a6784828501613a2e565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613a9b82613a70565b9050919050565b613aab81613a90565b82525050565b6000602082019050613ac66000830184613aa2565b92915050565b613ad581613a90565b8114613ae057600080fd5b50565b600081359050613af281613acc565b92915050565b60008060408385031215613b0f57613b0e613948565b5b6000613b1d85828601613ae3565b9250506020613b2e85828601613a2e565b9150509250929050565b613b4181613a0d565b82525050565b6000602082019050613b5c6000830184613b38565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613ba4826138d2565b810181811067ffffffffffffffff82111715613bc357613bc2613b6c565b5b80604052505050565b6000613bd661393e565b9050613be28282613b9b565b919050565b600067ffffffffffffffff821115613c0257613c01613b6c565b5b613c0b826138d2565b9050602081019050919050565b82818337600083830152505050565b6000613c3a613c3584613be7565b613bcc565b905082815260208101848484011115613c5657613c55613b67565b5b613c61848285613c18565b509392505050565b600082601f830112613c7e57613c7d613b62565b5b8135613c8e848260208601613c27565b91505092915050565b600060208284031215613cad57613cac613948565b5b600082013567ffffffffffffffff811115613ccb57613cca61394d565b5b613cd784828501613c69565b91505092915050565b600080600060608486031215613cf957613cf8613948565b5b6000613d0786828701613ae3565b9350506020613d1886828701613ae3565b9250506040613d2986828701613a2e565b9150509250925092565b600080fd5b600080fd5b60008083601f840112613d5357613d52613b62565b5b8235905067ffffffffffffffff811115613d7057613d6f613d33565b5b602083019150836020820283011115613d8c57613d8b613d38565b5b9250929050565b60008060208385031215613daa57613da9613948565b5b600083013567ffffffffffffffff811115613dc857613dc761394d565b5b613dd485828601613d3d565b92509250509250929050565b600060208284031215613df657613df5613948565b5b6000613e0484828501613ae3565b91505092915050565b613e16816139d7565b8114613e2157600080fd5b50565b600081359050613e3381613e0d565b92915050565b600060208284031215613e4f57613e4e613948565b5b6000613e5d84828501613e24565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613e9b81613a0d565b82525050565b6000613ead8383613e92565b60208301905092915050565b6000602082019050919050565b6000613ed182613e66565b613edb8185613e71565b9350613ee683613e82565b8060005b83811015613f17578151613efe8882613ea1565b9750613f0983613eb9565b925050600181019050613eea565b5085935050505092915050565b60006020820190508181036000830152613f3e8184613ec6565b905092915050565b60008060408385031215613f5d57613f5c613948565b5b6000613f6b85828601613ae3565b9250506020613f7c85828601613e24565b9150509250929050565b600067ffffffffffffffff821115613fa157613fa0613b6c565b5b613faa826138d2565b9050602081019050919050565b6000613fca613fc584613f86565b613bcc565b905082815260208101848484011115613fe657613fe5613b67565b5b613ff1848285613c18565b509392505050565b600082601f83011261400e5761400d613b62565b5b813561401e848260208601613fb7565b91505092915050565b6000806000806080858703121561404157614040613948565b5b600061404f87828801613ae3565b945050602061406087828801613ae3565b935050604061407187828801613a2e565b925050606085013567ffffffffffffffff8111156140925761409161394d565b5b61409e87828801613ff9565b91505092959194509250565b6000806000604084860312156140c3576140c2613948565b5b600084013567ffffffffffffffff8111156140e1576140e061394d565b5b6140ed86828701613d3d565b9350935050602061410086828701613ae3565b9150509250925092565b6000806040838503121561412157614120613948565b5b600061412f85828601613a2e565b925050602061414085828601613a2e565b9150509250929050565b6000806040838503121561416157614160613948565b5b600061416f85828601613ae3565b925050602061418085828601613ae3565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806141d157607f821691505b6020821081036141e4576141e361418a565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614246602c8361388e565b9150614251826141ea565b604082019050919050565b6000602082019050818103600083015261427581614239565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006142d860218361388e565b91506142e38261427c565b604082019050919050565b60006020820190508181036000830152614307816142cb565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b600061436a60388361388e565b91506143758261430e565b604082019050919050565b600060208201905081810360008301526143998161435d565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006143d660208361388e565b91506143e1826143a0565b602082019050919050565b60006020820190508181036000830152614405816143c9565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b600061446860318361388e565b91506144738261440c565b604082019050919050565b600060208201905081810360008301526144978161445b565b9050919050565b7f5075626c6963206d696e74696e672069732064697361626c6564000000000000600082015250565b60006144d4601a8361388e565b91506144df8261449e565b602082019050919050565b60006020820190508181036000830152614503816144c7565b9050919050565b7f436f6e7472616374732063616e6e6f74206d696e740000000000000000000000600082015250565b600061454060158361388e565b915061454b8261450a565b602082019050919050565b6000602082019050818103600083015261456f81614533565b9050919050565b7f546f74616c20737570706c792072656163686564000000000000000000000000600082015250565b60006145ac60148361388e565b91506145b782614576565b602082019050919050565b600060208201905081810360008301526145db8161459f565b9050919050565b7f4e6f7420656e6f7567682066756e647300000000000000000000000000000000600082015250565b600061461860108361388e565b9150614623826145e2565b602082019050919050565b600060208201905081810360008301526146478161460b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061468882613a0d565b915061469383613a0d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156146c8576146c761464e565b5b828201905092915050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b600061472f60298361388e565b915061473a826146d3565b604082019050919050565b6000602082019050818103600083015261475e81614722565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b60006147c1602a8361388e565b91506147cc82614765565b604082019050919050565b600060208201905081810360008301526147f0816147b4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061483182613a0d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036148635761486261464e565b5b600182019050919050565b600081905092915050565b600061488482613883565b61488e818561486e565b935061489e81856020860161389f565b80840191505092915050565b7f7b2274726169745f74797065223a220000000000000000000000000000000000600082015250565b60006148e0600f8361486e565b91506148eb826148aa565b600f82019050919050565b60008190508160005260206000209050919050565b60008154614918816141b9565b614922818661486e565b9450600182166000811461493d576001811461494e57614981565b60ff19831686528186019350614981565b614957856148f6565b60005b838110156149795781548189015260018201915060208101905061495a565b838801955050505b50505092915050565b7f222c202276616c7565223a220000000000000000000000000000000000000000600082015250565b60006149c0600c8361486e565b91506149cb8261498a565b600c82019050919050565b7f227d000000000000000000000000000000000000000000000000000000000000600082015250565b6000614a0c60028361486e565b9150614a17826149d6565b600282019050919050565b6000614a2e8287614879565b9150614a39826148d3565b9150614a45828661490b565b9150614a50826149b3565b9150614a5c828561490b565b9150614a67826149ff565b9150614a738284614879565b915081905095945050505050565b6000614a8c82613a0d565b9150614a9783613a0d565b925082821015614aaa57614aa961464e565b5b828203905092915050565b7f2c7b2274726169745f74797065223a2200000000000000000000000000000000600082015250565b6000614aeb60108361486e565b9150614af682614ab5565b601082019050919050565b7f44796e616d6963204d6f6e74686c792054726169740000000000000000000000600082015250565b6000614b3760158361486e565b9150614b4282614b01565b601582019050919050565b6000614b598285614879565b9150614b6482614ade565b9150614b6f82614b2a565b9150614b7a826149b3565b9150614b86828461490b565b9150614b91826149ff565b91508190509392505050565b7f466f756e64657273204172740000000000000000000000000000000000000000600082015250565b6000614bd3600c8361486e565b9150614bde82614b9d565b600c82019050919050565b6000614bf58285614879565b9150614c0082614ade565b9150614c0b82614bc6565b9150614c16826149b3565b9150614c228284614879565b9150614c2d826149ff565b91508190509392505050565b7f222c20226e66745f75726c223a20220000000000000000000000000000000000600082015250565b6000614c6f600f8361486e565b9150614c7a82614c39565b600f82019050919050565b7f222c2022696d616765223a202200000000000000000000000000000000000000600082015250565b6000614cbb600d8361486e565b9150614cc682614c85565b600d82019050919050565b7f222c2022616e696d6174696f6e5f75726c223a20220000000000000000000000600082015250565b6000614d0760158361486e565b9150614d1282614cd1565b601582019050919050565b6000614d2882614c62565b9150614d34828761490b565b9150614d408286614879565b9150614d4b82614cae565b9150614d57828561490b565b9150614d6282614cfa565b9150614d6e828461490b565b915081905095945050505050565b7f7b226e616d65223a220000000000000000000000000000000000000000000000600082015250565b6000614db260098361486e565b9150614dbd82614d7c565b600982019050919050565b7f2023000000000000000000000000000000000000000000000000000000000000600082015250565b6000614dfe60028361486e565b9150614e0982614dc8565b600282019050919050565b7f222c202261747472696275746573223a205b0000000000000000000000000000600082015250565b6000614e4a60128361486e565b9150614e5582614e14565b601282019050919050565b7f5d207d0000000000000000000000000000000000000000000000000000000000600082015250565b6000614e9660038361486e565b9150614ea182614e60565b600382019050919050565b6000614eb782614da5565b9150614ec3828761490b565b9150614ece82614df1565b9150614eda8286614879565b9150614ee68285614879565b9150614ef182614e3d565b9150614efd8284614879565b9150614f0882614e89565b915081905095945050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b6000614f4c601d8361486e565b9150614f5782614f16565b601d82019050919050565b6000614f6d82614f3f565b9150614f798284614879565b915081905092915050565b6000614f8f82613a0d565b9150614f9a83613a0d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614fd357614fd261464e565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061501882613a0d565b915061502383613a0d565b92508261503357615032614fde565b5b828204905092915050565b6000819050919050565b61505961505482613a0d565b61503e565b82525050565b600061506b8288615048565b60208201915061507b8287615048565b60208201915061508b8286615048565b60208201915061509b8285615048565b6020820191506150ab8284615048565b6020820191508190509695505050505050565b60006150c982613a0d565b91506150d483613a0d565b9250826150e4576150e3614fde565b5b828206905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061514b60268361388e565b9150615156826150ef565b604082019050919050565b6000602082019050818103600083015261517a8161513e565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006151dd602c8361388e565b91506151e882615181565b604082019050919050565b6000602082019050818103600083015261520c816151d0565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b600061526f60258361388e565b915061527a82615213565b604082019050919050565b6000602082019050818103600083015261529e81615262565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061530160248361388e565b915061530c826152a5565b604082019050919050565b60006020820190508181036000830152615330816152f4565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b600061536d601d8361388e565b915061537882615337565b602082019050919050565b6000602082019050818103600083015261539c81615360565b9050919050565b600081905092915050565b50565b60006153be6000836153a3565b91506153c9826153ae565b600082019050919050565b60006153df826153b1565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b6000615445603a8361388e565b9150615450826153e9565b604082019050919050565b6000602082019050818103600083015261547481615438565b9050919050565b600061ffff82169050919050565b60008160f01b9050919050565b60006154a182615489565b9050919050565b6154b96154b48261547b565b615496565b82525050565b60006154cb8288615048565b6020820191506154db8287615048565b6020820191506154eb8286615048565b6020820191506154fb82856154a8565b60028201915061550b8284615048565b6020820191508190509695505050505050565b600061552a8288615048565b60208201915061553a8287615048565b60208201915061554a8286615048565b60208201915061555a8285615048565b60208201915061556a82846154a8565b6002820191508190509695505050505050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006155b360208361388e565b91506155be8261557d565b602082019050919050565b600060208201905081810360008301526155e2816155a6565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600061561f601c8361388e565b915061562a826155e9565b602082019050919050565b6000602082019050818103600083015261564e81615612565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061568b60198361388e565b915061569682615655565b602082019050919050565b600060208201905081810360008301526156ba8161567e565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061571d60328361388e565b9150615728826156c1565b604082019050919050565b6000602082019050818103600083015261574c81615710565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061577a82615753565b615784818561575e565b935061579481856020860161389f565b61579d816138d2565b840191505092915050565b60006080820190506157bd6000830187613aa2565b6157ca6020830186613aa2565b6157d76040830185613b38565b81810360608301526157e9818461576f565b905095945050505050565b6000815190506158038161397e565b92915050565b60006020828403121561581f5761581e613948565b5b600061582d848285016157f4565b9150509291505056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa2646970667358221220549a5d8b82652b5654885a9694e61a4845c2eb10678ced3d37f623730514431f64736f6c634300080e0033

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

00000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000034000000000000000000000000000000000000000000000000000000000000003a00000000000000000000000000000000000000000000000001bc16d674ec8000000000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000003e0000000000000000000000000000000000000000000000000000000000000144000000000000000000000000000000000000000000000000000000000000000124c41474f2050617373204f6666696369616c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005e4c41474f20776f726b73206469726563746c792077697468206172746973747320746f20636f6d6d697373696f6e206f726967696e616c204e465473206578636c75736976656c7920666f72204c41474f2050617373206d656d626572730000000000000000000000000000000000000000000000000000000000000000006a68747470733a2f2f7265732e636c6f7564696e6172792e636f6d2f6c61676f2f696d6167652f75706c6f61642f76313635343138373537352f4c61676f2532304d696e74253230466f756e6465722532304172742f47726f75705f31345f325f7168396736732e73766700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007368747470733a2f2f7265732e636c6f7564696e6172792e636f6d2f6c61676f2f766964656f2f75706c6f61642f76313635333034383130392f4c61676f2532304e46542532304172742f3232303532305f4c41474f5f466f756e646572735f3130383078313038305f6f6b617871702e6d703400000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a68747470733a2f2f6d696e742e6c61676f6672616d652e636f6d2f6d792d6e66743f746f6b656e49643d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044c41474f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000058000000000000000000000000000000000000000000000000000000000000008e0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000b4672616d65205368617065000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b4672616d6520436f6c6f7200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094163636573736f727900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000653717561726500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007526f756e646564000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000005426c61636b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005576869746500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000074e61747572616c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000044e6f6e6500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000643616d657261000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000002c0000000000000000000000000000000000000000000000000000000000000000a496e6e6f766174696f6e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001241727469737420436f6d6d697373696f6e73000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064576656e74730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4172742054726176656c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000134e4654204e6574776f726b205374616b696e67000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011436f6e63696572676520536572766963650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009496e737572616e63650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a47656e32204672616d650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000002c00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000054000000000000000000000000000000000000000000000000000000000000005c0000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000006c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000359657300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000a3320706572207965617200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a3620706572207965617200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b31322070657220796561720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000a3120706572207965617200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a3320706572207965617200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a34207065722079656172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000a3120706572207965617200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a3220706572207965617200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a332070657220796561720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000359657300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000035965730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000011496e7375726520436f6c6c656374696f6e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000359657300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000003200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000bb80000000000000000000000000000000000000000000000000000000000001b5800000000000000000000000000000000000000000000000000000000000004b000000000000000000000000000000000000000000000000000000000000000c80000000000000000000000000000000000000000000000000000000000000dac00000000000000000000000000000000000000000000000000000000000001f400000000000000000000000000000000000000000000000000000000000000c800000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000c800000000000000000000000000000000000000000000000000000000000001f4000000000000000000000000000000000000000000000000000000000000012c000000000000000000000000000000000000000000000000000000000000002800000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000002c00000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000034000000000000000000000000000000000000000000000000000000000000003800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000001770000000000000000000000000000000000000000000000000000000000000245400000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000177000000000000000000000000000000000000000000000000000000000000023280000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000013880000000000000000000000000000000000000000000000000000000000002328000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000002710

-----Decoded View---------------
Arg [0] : _name (string): LAGO Pass Official
Arg [1] : _description (string): LAGO works directly with artists to commission original NFTs exclusively for LAGO Pass members
Arg [2] : _imageUrl (string): https://res.cloudinary.com/lago/image/upload/v1654187575/Lago%20Mint%20Founder%20Art/Group_14_2_qh9g6s.svg
Arg [3] : _animationUrl (string): https://res.cloudinary.com/lago/video/upload/v1653048109/Lago%20NFT%20Art/220520_LAGO_Founders_1080x1080_okaxqp.mp4
Arg [4] : _nftUrl (string): https://mint.lagoframe.com/my-nft?tokenId=
Arg [5] : _symbol (string): LAGO
Arg [6] : _tokenPrice (uint256): 2000000000000000000
Arg [7] : _maxSupply (uint256): 1000
Arg [8] : traits (string[][][]): System.Collections.Generic.List`1[System.Collections.Generic.List`1[System.String]],System.Collections.Generic.List`1[System.Collections.Generic.List`1[System.String]],System.Collections.Generic.List`1[System.Collections.Generic.List`1[System.String]],System.Collections.Generic.List`1[System.Collections.Generic.List`1[System.String]]
Arg [9] : chances (uint16[][][]): System.Collections.Generic.List`1[System.Collections.Generic.List`1[System.Numerics.BigInteger]],System.Collections.Generic.List`1[System.Collections.Generic.List`1[System.Numerics.BigInteger]],System.Collections.Generic.List`1[System.Collections.Generic.List`1[System.Numerics.BigInteger]]

-----Encoded View---------------
219 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000180
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000200
Arg [3] : 00000000000000000000000000000000000000000000000000000000000002a0
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000340
Arg [5] : 00000000000000000000000000000000000000000000000000000000000003a0
Arg [6] : 0000000000000000000000000000000000000000000000001bc16d674ec80000
Arg [7] : 00000000000000000000000000000000000000000000000000000000000003e8
Arg [8] : 00000000000000000000000000000000000000000000000000000000000003e0
Arg [9] : 0000000000000000000000000000000000000000000000000000000000001440
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [11] : 4c41474f2050617373204f6666696369616c0000000000000000000000000000
Arg [12] : 000000000000000000000000000000000000000000000000000000000000005e
Arg [13] : 4c41474f20776f726b73206469726563746c7920776974682061727469737473
Arg [14] : 20746f20636f6d6d697373696f6e206f726967696e616c204e46547320657863
Arg [15] : 6c75736976656c7920666f72204c41474f2050617373206d656d626572730000
Arg [16] : 000000000000000000000000000000000000000000000000000000000000006a
Arg [17] : 68747470733a2f2f7265732e636c6f7564696e6172792e636f6d2f6c61676f2f
Arg [18] : 696d6167652f75706c6f61642f76313635343138373537352f4c61676f253230
Arg [19] : 4d696e74253230466f756e6465722532304172742f47726f75705f31345f325f
Arg [20] : 7168396736732e73766700000000000000000000000000000000000000000000
Arg [21] : 0000000000000000000000000000000000000000000000000000000000000073
Arg [22] : 68747470733a2f2f7265732e636c6f7564696e6172792e636f6d2f6c61676f2f
Arg [23] : 766964656f2f75706c6f61642f76313635333034383130392f4c61676f253230
Arg [24] : 4e46542532304172742f3232303532305f4c41474f5f466f756e646572735f31
Arg [25] : 30383078313038305f6f6b617871702e6d703400000000000000000000000000
Arg [26] : 000000000000000000000000000000000000000000000000000000000000002a
Arg [27] : 68747470733a2f2f6d696e742e6c61676f6672616d652e636f6d2f6d792d6e66
Arg [28] : 743f746f6b656e49643d00000000000000000000000000000000000000000000
Arg [29] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [30] : 4c41474f00000000000000000000000000000000000000000000000000000000
Arg [31] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [32] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [33] : 0000000000000000000000000000000000000000000000000000000000000200
Arg [34] : 0000000000000000000000000000000000000000000000000000000000000580
Arg [35] : 00000000000000000000000000000000000000000000000000000000000008e0
Arg [36] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [37] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [38] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [39] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [40] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [41] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [42] : 000000000000000000000000000000000000000000000000000000000000000b
Arg [43] : 4672616d65205368617065000000000000000000000000000000000000000000
Arg [44] : 000000000000000000000000000000000000000000000000000000000000000b
Arg [45] : 4672616d6520436f6c6f72000000000000000000000000000000000000000000
Arg [46] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [47] : 4163636573736f72790000000000000000000000000000000000000000000000
Arg [48] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [49] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [50] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [51] : 0000000000000000000000000000000000000000000000000000000000000280
Arg [52] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [53] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [54] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [55] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [56] : 5371756172650000000000000000000000000000000000000000000000000000
Arg [57] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [58] : 526f756e64656400000000000000000000000000000000000000000000000000
Arg [59] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [60] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [61] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [62] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [63] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [64] : 426c61636b000000000000000000000000000000000000000000000000000000
Arg [65] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [66] : 5768697465000000000000000000000000000000000000000000000000000000
Arg [67] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [68] : 4e61747572616c00000000000000000000000000000000000000000000000000
Arg [69] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [70] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [71] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [72] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [73] : 4e6f6e6500000000000000000000000000000000000000000000000000000000
Arg [74] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [75] : 43616d6572610000000000000000000000000000000000000000000000000000
Arg [76] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [77] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [78] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [79] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [80] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [81] : 0000000000000000000000000000000000000000000000000000000000000180
Arg [82] : 00000000000000000000000000000000000000000000000000000000000001c0
Arg [83] : 0000000000000000000000000000000000000000000000000000000000000200
Arg [84] : 0000000000000000000000000000000000000000000000000000000000000240
Arg [85] : 0000000000000000000000000000000000000000000000000000000000000280
Arg [86] : 00000000000000000000000000000000000000000000000000000000000002c0
Arg [87] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [88] : 496e6e6f766174696f6e00000000000000000000000000000000000000000000
Arg [89] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [90] : 41727469737420436f6d6d697373696f6e730000000000000000000000000000
Arg [91] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [92] : 4576656e74730000000000000000000000000000000000000000000000000000
Arg [93] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [94] : 4172742054726176656c00000000000000000000000000000000000000000000
Arg [95] : 0000000000000000000000000000000000000000000000000000000000000013
Arg [96] : 4e4654204e6574776f726b205374616b696e6700000000000000000000000000
Arg [97] : 0000000000000000000000000000000000000000000000000000000000000011
Arg [98] : 436f6e6369657267652053657276696365000000000000000000000000000000
Arg [99] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [100] : 496e737572616e63650000000000000000000000000000000000000000000000
Arg [101] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [102] : 47656e32204672616d6500000000000000000000000000000000000000000000
Arg [103] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [104] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [105] : 0000000000000000000000000000000000000000000000000000000000000180
Arg [106] : 00000000000000000000000000000000000000000000000000000000000002c0
Arg [107] : 0000000000000000000000000000000000000000000000000000000000000400
Arg [108] : 0000000000000000000000000000000000000000000000000000000000000540
Arg [109] : 00000000000000000000000000000000000000000000000000000000000005c0
Arg [110] : 0000000000000000000000000000000000000000000000000000000000000640
Arg [111] : 00000000000000000000000000000000000000000000000000000000000006c0
Arg [112] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [113] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [114] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [115] : 5965730000000000000000000000000000000000000000000000000000000000
Arg [116] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [117] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [118] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [119] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [120] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [121] : 3320706572207965617200000000000000000000000000000000000000000000
Arg [122] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [123] : 3620706572207965617200000000000000000000000000000000000000000000
Arg [124] : 000000000000000000000000000000000000000000000000000000000000000b
Arg [125] : 3132207065722079656172000000000000000000000000000000000000000000
Arg [126] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [127] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [128] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [129] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [130] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [131] : 3120706572207965617200000000000000000000000000000000000000000000
Arg [132] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [133] : 3320706572207965617200000000000000000000000000000000000000000000
Arg [134] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [135] : 3420706572207965617200000000000000000000000000000000000000000000
Arg [136] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [137] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [138] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [139] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [140] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [141] : 3120706572207965617200000000000000000000000000000000000000000000
Arg [142] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [143] : 3220706572207965617200000000000000000000000000000000000000000000
Arg [144] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [145] : 3320706572207965617200000000000000000000000000000000000000000000
Arg [146] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [147] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [148] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [149] : 5965730000000000000000000000000000000000000000000000000000000000
Arg [150] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [151] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [152] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [153] : 5965730000000000000000000000000000000000000000000000000000000000
Arg [154] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [155] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [156] : 0000000000000000000000000000000000000000000000000000000000000011
Arg [157] : 496e7375726520436f6c6c656374696f6e000000000000000000000000000000
Arg [158] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [159] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [160] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [161] : 5965730000000000000000000000000000000000000000000000000000000000
Arg [162] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [163] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [164] : 00000000000000000000000000000000000000000000000000000000000001c0
Arg [165] : 0000000000000000000000000000000000000000000000000000000000000320
Arg [166] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [167] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [168] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [169] : 0000000000000000000000000000000000000000000000000000000000000bb8
Arg [170] : 0000000000000000000000000000000000000000000000000000000000001b58
Arg [171] : 00000000000000000000000000000000000000000000000000000000000004b0
Arg [172] : 00000000000000000000000000000000000000000000000000000000000000c8
Arg [173] : 0000000000000000000000000000000000000000000000000000000000000dac
Arg [174] : 00000000000000000000000000000000000000000000000000000000000001f4
Arg [175] : 00000000000000000000000000000000000000000000000000000000000000c8
Arg [176] : 00000000000000000000000000000000000000000000000000000000000003e8
Arg [177] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [178] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [179] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [180] : 00000000000000000000000000000000000000000000000000000000000000c8
Arg [181] : 00000000000000000000000000000000000000000000000000000000000001f4
Arg [182] : 000000000000000000000000000000000000000000000000000000000000012c
Arg [183] : 0000000000000000000000000000000000000000000000000000000000000028
Arg [184] : 00000000000000000000000000000000000000000000000000000000000003e8
Arg [185] : 0000000000000000000000000000000000000000000000000000000000000064
Arg [186] : 0000000000000000000000000000000000000000000000000000000000000064
Arg [187] : 0000000000000000000000000000000000000000000000000000000000000064
Arg [188] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [189] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [190] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [191] : 00000000000000000000000000000000000000000000000000000000000001c0
Arg [192] : 0000000000000000000000000000000000000000000000000000000000000240
Arg [193] : 00000000000000000000000000000000000000000000000000000000000002c0
Arg [194] : 0000000000000000000000000000000000000000000000000000000000000300
Arg [195] : 0000000000000000000000000000000000000000000000000000000000000340
Arg [196] : 0000000000000000000000000000000000000000000000000000000000000380
Arg [197] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [198] : 0000000000000000000000000000000000000000000000000000000000002710
Arg [199] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [200] : 0000000000000000000000000000000000000000000000000000000000001770
Arg [201] : 0000000000000000000000000000000000000000000000000000000000002454
Arg [202] : 0000000000000000000000000000000000000000000000000000000000002710
Arg [203] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [204] : 0000000000000000000000000000000000000000000000000000000000001770
Arg [205] : 0000000000000000000000000000000000000000000000000000000000002328
Arg [206] : 0000000000000000000000000000000000000000000000000000000000002710
Arg [207] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [208] : 0000000000000000000000000000000000000000000000000000000000001388
Arg [209] : 0000000000000000000000000000000000000000000000000000000000002328
Arg [210] : 0000000000000000000000000000000000000000000000000000000000002710
Arg [211] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [212] : 0000000000000000000000000000000000000000000000000000000000002710
Arg [213] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [214] : 0000000000000000000000000000000000000000000000000000000000002710
Arg [215] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [216] : 0000000000000000000000000000000000000000000000000000000000002710
Arg [217] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [218] : 0000000000000000000000000000000000000000000000000000000000002710


Loading...
Loading
Loading...
Loading
[ 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.