false
false

Contract Address Details

0x0db0ba833d712a42439d0d0e1c25b078c2eaddaa

Token
Nova Cats (CAT)
Creator
0x1143c4–5570e3 at 0xd2fb98–04c1db
Balance
0 ETH ( )
Tokens
Fetching tokens...
Transactions
Fetching transactions...
Transfers
Fetching transfers...
Gas Used
Fetching gas used...
Last Balance Update
70504761
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
Contract name:
NovaCats




Optimization enabled
true
Compiler version
v0.8.13+commit.abaa5c0e




Optimization runs
200
EVM Version
default




Verified at
2023-08-24T23:26:33.523000Z

Contract source code

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;

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

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

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

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

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

    string public name;

    string public symbol;

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

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

    mapping(uint256 => address) internal _ownerOf;

    mapping(address => uint256) internal _balanceOf;

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

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

        return _balanceOf[owner];
    }

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

    mapping(uint256 => address) public getApproved;

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

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

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

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

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

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

        getApproved[id] = spender;

        emit Approval(owner, spender, id);
    }

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

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

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

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

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

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

            _balanceOf[to]++;
        }

        _ownerOf[id] = to;

        delete getApproved[id];

        emit Transfer(from, to, id);
    }

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

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

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

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

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

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

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

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

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

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

        _ownerOf[id] = to;

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

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

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

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

        delete _ownerOf[id];

        delete getApproved[id];

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

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

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

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

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

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

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

/// @notice Simple single owner authorization mixin.
/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/auth/Owned.sol)
abstract contract Owned {
    /*//////////////////////////////////////////////////////////////
                                 EVENTS
    //////////////////////////////////////////////////////////////*/

    event OwnerUpdated(address indexed user, address indexed newOwner);

    /*//////////////////////////////////////////////////////////////
                            OWNERSHIP STORAGE
    //////////////////////////////////////////////////////////////*/

    address public owner;

    modifier onlyOwner() virtual {
        require(msg.sender == owner, "UNAUTHORIZED");

        _;
    }

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

    constructor(address _owner) {
        owner = _owner;

        emit OwnerUpdated(address(0), _owner);
    }

    /*//////////////////////////////////////////////////////////////
                             OWNERSHIP LOGIC
    //////////////////////////////////////////////////////////////*/

    function setOwner(address newOwner) public virtual onlyOwner {
        owner = newOwner;

        emit OwnerUpdated(msg.sender, newOwner);
    }
}

interface IERC4883 {
    function renderTokenById(uint256 id) external view returns (string memory);
}

// OpenZeppelin Contracts (last updated v4.7.0) (utils/Base64.sol)

/**
 * @dev Provides a set of functions to operate with Base64 strings.
 *
 * _Available since v4.5._
 */
library Base64 {
    /**
     * @dev Base64 Encoding/Decoding Table
     */
    string internal constant _TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

    /**
     * @dev Converts a `bytes` to its Bytes64 `string` representation.
     */
    function encode(bytes memory data) internal pure returns (string memory) {
        /**
         * Inspired by Brecht Devos (Brechtpd) implementation - MIT licence
         * https://github.com/Brechtpd/base64/blob/e78d9fd951e7b0977ddca77d92dc85183770daf4/base64.sol
         */
        if (data.length == 0) {
            return "";
        }

        // Loads the table into memory
        string memory table = _TABLE;

        // Encoding takes 3 bytes chunks of binary data from `bytes` data parameter
        // and split into 4 numbers of 6 bits.
        // The final Base64 length should be `bytes` data length multiplied by 4/3 rounded up
        // - `data.length + 2`  -> Round up
        // - `/ 3`              -> Number of 3-bytes chunks
        // - `4 *`              -> 4 characters for each chunk
        string memory result = new string(4 * ((data.length + 2) / 3));

        /// @solidity memory-safe-assembly
        assembly {
            // Prepare the lookup table (skip the first "length" byte)
            let tablePtr := add(table, 1)

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

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

                // To write each character, shift the 3 bytes (18 bits) chunk
                // 4 times in blocks of 6 bits for each character (18, 12, 6, 0)
                // and apply logical AND with 0x3F which is the number of
                // the previous character in the ASCII table prior to the Base64 Table
                // The result is then added to the table to get the character to write,
                // and finally write it in the result pointer but with a left shift
                // of 256 (1 byte) - 8 (1 ASCII char) = 248 bits

                mstore8(resultPtr, mload(add(tablePtr, and(shr(18, input), 0x3F))))
                resultPtr := add(resultPtr, 1) // Advance

                mstore8(resultPtr, mload(add(tablePtr, and(shr(12, input), 0x3F))))
                resultPtr := add(resultPtr, 1) // Advance

                mstore8(resultPtr, mload(add(tablePtr, and(shr(6, input), 0x3F))))
                resultPtr := add(resultPtr, 1) // Advance

                mstore8(resultPtr, mload(add(tablePtr, and(input, 0x3F))))
                resultPtr := add(resultPtr, 1) // Advance
            }

            // When data `bytes` is not exactly 3 bytes long
            // it is padded with `=` characters at the end
            switch mod(mload(data), 3)
            case 1 {
                mstore8(sub(resultPtr, 1), 0x3d)
                mstore8(sub(resultPtr, 2), 0x3d)
            }
            case 2 { mstore8(sub(resultPtr, 1), 0x3d) }
        }

        return result;
    }
}

// OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol)

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

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // 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);
    }

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

// 
// ░█▀█░█▀█░█░█░█▀█░░░█▀▀░█▀█░▀█▀░█▀▀
// ░█░█░█░█░▀▄▀░█▀█░░░█░░░█▀█░░█░░▀▀█
// ░▀░▀░▀▀▀░░▀░░▀░▀░░░▀▀▀░▀░▀░░▀░░▀▀▀
contract NovaCats is ERC721, Owned, IERC4883 {
    /// ERRORS

    /// @notice Thrown when supply cap reached
    error SupplyCapReached();

    /// @notice Thrown when token doesn't exist
    error NonexistentToken();

    /// EVENTS

    uint256 public totalSupply;
    uint256 public immutable supplyCap;

    string[] colors = [
        "AliceBlue",
        "AntiqueWhite",
        "Aqua",
        "Aquamarine",
        "Azure",
        "Beige",
        "Bisque",
        "Black",
        "BlanchedAlmond",
        "Blue",
        "BlueViolet",
        "Brown",
        "BurlyWood",
        "CadetBlue",
        "Chartreuse",
        "Chocolate",
        "Coral",
        "CornflowerBlue",
        "Cornsilk",
        "Crimson",
        "Cyan",
        "DarkBlue",
        "DarkCyan",
        "DarkGoldenRod",
        "DarkGreen",
        "DarkGrey",
        "DarkKhaki",
        "DarkMagenta",
        "DarkOliveGreen",
        "DarkOrange",
        "DarkOrchid",
        "DarkRed",
        "DarkSalmon",
        "DarkSeaGreen",
        "DarkSlateBlue",
        "DarkSlateGrey",
        "DarkTurquoise",
        "DarkViolet",
        "DeepPink",
        "DeepSkyBlue",
        "DimGrey",
        "DodgerBlue",
        "FireBrick",
        "FloralWhite",
        "ForestGreen",
        "Fuchsia",
        "Gainsboro",
        "GhostWhite",
        "Gold",
        "GoldenRod",
        "Green",
        "GreenYellow",
        "Grey",
        "HoneyDew",
        "HotPink",
        "IndianRed",
        "Indigo",
        "Ivory",
        "Khaki",
        "Lavender",
        "LavenderBlush",
        "LawnGreen",
        "LemonChiffon",
        "LightBlue",
        "LightCoral",
        "LightCyan",
        "LightGoldenRodYellow",
        "LightGreen",
        "LightGrey",
        "LightPink",
        "LightSalmon",
        "LightSeaGreen",
        "LightSkyBlue",
        "LightSlateGrey",
        "LightSteelBlue",
        "LightYellow",
        "Lime",
        "LimeGreen",
        "Linen",
        "Magenta",
        "Maroon",
        "MediumAquaMarine",
        "MediumBlue",
        "MediumOrchid",
        "MediumPurple",
        "MediumSeaGreen",
        "MediumSlateBlue",
        "MediumSpringGreen",
        "MediumTurquoise",
        "MediumVioletRed",
        "MidnightBlue",
        "MintCream",
        "MistyRose",
        "Moccasin",
        "NavajoWhite",
        "Navy",
        "OldLace",
        "Olive",
        "OliveDrab",
        "Orange",
        "OrangeRed",
        "Orchid",
        "PaleGoldenRod",
        "PaleGreen",
        "PaleTurquoise",
        "PaleVioletRed",
        "PapayaWhip",
        "PeachPuff",
        "Peru",
        "Pink",
        "Plum",
        "PowderBlue",
        "Purple",
        "RebeccaPurple",
        "Red",
        "RosyBrown",
        "RoyalBlue",
        "SaddleBrown",
        "Salmon",
        "SandyBrown",
        "SeaGreen",
        "SeaShell",
        "Sienna",
        "Silver",
        "SkyBlue",
        "SlateBlue",
        "SlateGrey",
        "Snow",
        "SpringGreen",
        "SteelBlue",
        "Tan",
        "Teal",
        "Thistle",
        "Tomato",
        "Turquoise",
        "Violet",
        "Wheat",
        "White",
        "WhiteSmoke",
        "Yellow",
        "YellowGreen"
    ];

    string[] personalities = ["Playful", "Friendly", "Curious", "Energetic", "Gentle", "Zazzy"];

    constructor() ERC721("Nova Cats", "CAT") Owned(0x13ebd3443fa5575F0Eb173e323D8419F7452CfB1) {
        supplyCap = 999;
    }

    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC4883).interfaceId || super.supportsInterface(interfaceId);
    }

    function mint() public {
        if (totalSupply >= supplyCap) {
            revert SupplyCapReached();
        }

        unchecked {
            totalSupply++;
        }

        _safeMint(msg.sender, totalSupply);
    }

    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        ownerOf(tokenId);

        string memory tokenName_ = string.concat("Nova Cat #", Strings.toString(tokenId));
        string memory description =
            "Nova Cats. Cat emoji designed by OpenMoji (the open-source emoji and icon project). License: CC BY-SA 4.0";

        string memory image = _generateBase64Image(tokenId);
        string memory attributes = _generateAttributes(tokenId);
        return string.concat(
            "data:application/json;base64,",
            Base64.encode(
                bytes(
                    abi.encodePacked(
                        '{"name":"',
                        tokenName_,
                        '", "description":"',
                        description,
                        '", "image": "data:image/svg+xml;base64,',
                        image,
                        '",',
                        attributes,
                        "}"
                    )
                )
            )
        );
    }

    function _generateAttributes(uint256 tokenId) internal view returns (string memory) {
        string memory attributes = string.concat(
            '{"trait_type": "colour", "value": "',
            _generateColour(tokenId),
            '"}, {"trait_type": "personality", "value": "',
            _generatePersonality(tokenId),
            '"}'
        );

        return string.concat('"attributes": [', attributes, "]");
    }

    function _generateBase64Image(uint256 tokenId) internal view returns (string memory) {
        return Base64.encode(bytes(_generateSVG(tokenId)));
    }

    function _generateSVG(uint256 tokenId) internal view returns (string memory) {
        string memory svg = string.concat(
            '<svg id="',
            "novacat",
            Strings.toString(tokenId),
            '" viewBox="0 0 72 72" xmlns="http://www.w3.org/2000/svg">',
            renderTokenById(tokenId),
            "</svg>"
        );

        return svg;
    }

    function _generateColour(uint256 tokenId) internal view returns (string memory) {
        uint256 id = uint256(keccak256(abi.encodePacked("Colour", Strings.toString(tokenId))));
        id = id % colors.length;
        return colors[id];
    }

    function _generatePersonality(uint256 tokenId) internal view returns (string memory) {
        uint256 id = uint256(keccak256(abi.encodePacked("Colour", Strings.toString(tokenId))));
        id = id % personalities.length;
        return personalities[id];
    }

    function renderTokenById(uint256 tokenId) public view returns (string memory) {
        string memory colourValue = _generateColour(tokenId);

        return string.concat(
            '<g id="nounsglasses">' '<g id="color">' '<path fill="',
            colourValue,
            '" d="m47.25 44.38 2.658 2.696 5.591 1.245-1.291 4.058 0.75 3.218 2.208-0.7136 2.625-4.979 1.208-5.154c-1.059-1.656-2.403-3.314-3.157-4.998-1.79-1.403-2.502-3.671-3.718-5.915z"/>'
            '<path fill="',
            colourValue,
            '" d="m30.95 43.79-1.819 2.842-1.583 7.534-1.602 1.754-2.94-1.088-0.4713-4.959s0.822-4.787 1.322-6.823c0.5-2.036 5.149-2.382 5.149-2.382z"/>'
            '<path fill="',
            colourValue,
            '" d="m67.59 16.75-2.667-0.5572-4.29 1.557-0.7292 4.406-0.3746 3.141-3.25 3.822-2.645 1.549-1.761 0.0057c-0.0405-0.0547-0.0751-0.1098-0.1174-0.1643h-3.289l-5.323-2.035-5.971-2.086-9.892 0.5412-6.442 1.238-6.324-2.754-4.26-2.829-3.623 0.739 1.75 3.417-3.318 5.1 0.9412 4.237 5.09 0.1184 1.82 0.4315 3.396-1.197-0.2628 3.238 1.109 2.738-1.109 1.983-3.71 2.949-0.4855 4.093 2.798 3.289s3.938-0.3125 2.344-4.577l2.799-2.733 4.747-1.234 1.973-1.217 4.436 0.7886h8.409l2.13 3.404-1.424 4.683 0.0954 2.759 2.556-0.2704 2.948-3.93 1.937-2.57v-3.489l3.639-3.572 2.349-4.939s0.0198-0.1385 0.0331-0.3762l0.0119 0.0164s6.106-3.004 8.33-7.525c3.597-5.054-0.677-9.975 4.438-8.312 1.289 0.4189 2.75-2.25 1.187-3.875z"/>'
            "</g>"
            '<g id="line" fill="none" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="2">'
            '<path d="m12.46 35.74c-2.333 1-4.917 0.8333-4.917 0.8333-1.677 0.1458-3.115-4.01-2.485-4.733l3.318-5.1-1.75-3.417s5.008-1.415 7.883 2.09c0.3444 0.42 0.7943 0.7429 1.279 0.9871 0.0298 0.015 0.0602 0.0302 0.0912 0.0456 2.593 1.289 5.546 1.571 8.385 0.9981 7.222-1.458 14.07-1.37 21.7 2.212 7.625 3.583 14.83-2.25 13.94-7.5-0.793-4.647 3.562-7.583 6.75-5"/>'
            '<path d="m16.05 48.82c0.6006-2.206 8.491-3.648 8.491-3.648s3.228-1.201 1.426-4.504"/>'
            '<path d="m18.3 33.24c-1.543 1.834-3.893 4.803-0.44 9.158 0 0-6.756 2.853-6.006 8.033 0 0 0.3624 2.476 2.402 2.402"/>'
            '<path d="m23.5 50.03c-1.156 7.254 2.386 6.055 3.017 5.661 1.148-0.7173 1.848-9.854 3.952-11.31 1.592-1.104 8.167-0.3021 8.167-0.3021"/>'
            '<path d="m38.44 41.33c0.0911 1.742 0.7529 3.402 1.734 4.845 0.6616 0.9727 1.803 2.32 1.453 2.985-4.479 8.5 0.6224 7.022 1.083 6.167 3.188-5.917 6.125-4.104 4.647-10.52 0 0 5.27-1.81 5.52-7.977"/>'
            '<path d="m48.15 45.59s2.367 3.204 7.758 2.693c0 0-3.326 6.762 0 7.62 1.917 0.4941 4.722-11.16 4.722-11.16s-2.667-2.45-3.583-4.366"/>'
            "</g>" "</g>"
        );
    }
}
        

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[]},{"type":"error","name":"NonexistentToken","inputs":[]},{"type":"error","name":"SupplyCapReached","inputs":[]},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"address","name":"spender","internalType":"address","indexed":true},{"type":"uint256","name":"id","internalType":"uint256","indexed":true}],"anonymous":false},{"type":"event","name":"ApprovalForAll","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"address","name":"operator","internalType":"address","indexed":true},{"type":"bool","name":"approved","internalType":"bool","indexed":false}],"anonymous":false},{"type":"event","name":"OwnerUpdated","inputs":[{"type":"address","name":"user","internalType":"address","indexed":true},{"type":"address","name":"newOwner","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"id","internalType":"uint256","indexed":true}],"anonymous":false},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"approve","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"id","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"owner","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getApproved","inputs":[{"type":"uint256","name":"","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isApprovedForAll","inputs":[{"type":"address","name":"","internalType":"address"},{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"mint","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"owner","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"owner","internalType":"address"}],"name":"ownerOf","inputs":[{"type":"uint256","name":"id","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"renderTokenById","inputs":[{"type":"uint256","name":"tokenId","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"safeTransferFrom","inputs":[{"type":"address","name":"from","internalType":"address"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"id","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"safeTransferFrom","inputs":[{"type":"address","name":"from","internalType":"address"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"id","internalType":"uint256"},{"type":"bytes","name":"data","internalType":"bytes"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setApprovalForAll","inputs":[{"type":"address","name":"operator","internalType":"address"},{"type":"bool","name":"approved","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setOwner","inputs":[{"type":"address","name":"newOwner","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"supplyCap","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"supportsInterface","inputs":[{"type":"bytes4","name":"interfaceId","internalType":"bytes4"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"tokenURI","inputs":[{"type":"uint256","name":"tokenId","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalSupply","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferFrom","inputs":[{"type":"address","name":"from","internalType":"address"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"id","internalType":"uint256"}]}]
              

Contract Creation Code

0x600961124081815268416c696365426c756560b81b6112605260a0908152600c6112808181526b416e7469717565576869746560a01b6112a05260c05260046112c0818152634171756160e01b6112e05260e052600a61130081815269417175616d6172696e6560b01b6113205261010052600561134081815264417a75726560d81b611360526101205261138081815264426569676560d81b6113a0526101405260066113c08181526542697371756560d01b6113e0526101605261140082815264426c61636b60d81b6114205261018052600e6114408181526d109b185b98da1959105b1b5bdb9960921b611460526101a05261148085815263426c756560e01b6114a0526101c0526114c084815269109b1d59559a5bdb195d60b21b6114e0526101e05261150083815264213937bbb760d91b611520526102005261154088815268109d5c9b1e55dbdbd960ba1b6115605261022052611580888152684361646574426c756560b81b6115a052610240526115c0848152694368617274726575736560b01b6115e052610260526116008881526843686f636f6c61746560b81b61162052610280526116408381526410dbdc985b60da1b611660526102a0526116808181526d436f726e666c6f776572426c756560901b6116a0526102c05260086116c081815267436f726e73696c6b60c01b6116e0526102e05260076117008181526621b934b6b9b7b760c91b61172052610300526117408781526321bcb0b760e11b6117605261032052611780828152674461726b426c756560c01b6117a052610340526117c0828152672230b935a1bcb0b760c11b6117e05261036052600d6118008181526c11185c9ad1dbdb19195b949bd9609a1b61182052610380526118408b8152682230b935a3b932b2b760b91b611860526103a052611880838152674461726b4772657960c01b6118a0526103c0526118c08b8152684461726b4b68616b6960b81b6118e0526103e052600b6119008181526a4461726b4d6167656e746160a81b61192052610400526119408581526d2230b935a7b634bb32a3b932b2b760911b6119605261042052611980888152694461726b4f72616e676560b01b6119a052610440526119c08881526911185c9ad3dc98da1a5960b21b6119e05261046052611a008381526611185c9ad4995960ca1b611a205261048052611a40888152692230b935a9b0b636b7b760b11b611a60526104a052611a808a81526b2230b935a9b2b0a3b932b2b760a11b611aa0526104c052611ac08281526c4461726b536c617465426c756560981b611ae0526104e052611b008281526c4461726b536c6174654772657960981b611b205261050052611b408281526c4461726b54757271756f69736560981b611b605261052052611b808881526911185c9ad59a5bdb195d60b21b611ba05261054052611bc0848152674465657050696e6b60c01b611be05261056052611c008181526a44656570536b79426c756560a81b611c205261058052611c408381526644696d4772657960c81b611c60526105a052611c8088815269446f64676572426c756560b01b611ca0526105c052611cc08c81526846697265427269636b60b81b611ce0526105e052611d008181526a466c6f72616c576869746560a81b611d205261060052611d408181526a2337b932b9ba23b932b2b760a91b611d605261062052611d80838152664675636873696160c81b611da05261064052611dc08c8152684761696e73626f726f60b81b611de05261066052611e008881526947686f7374576869746560b01b611e205261068052611e408981526311dbdb1960e21b611e60526106a052611e808c81526811dbdb19195b949bd960ba1b611ea0526106c052611ec08781526423b932b2b760d91b611ee0526106e052611f008181526a477265656e59656c6c6f7760a81b611f205261070052611f40898152634772657960e01b611f605261072052611f8084815267486f6e657944657760c01b611fa05261074052611fc083815266486f7450696e6b60c81b611fe052610760526120008c815268125b991a585b94995960ba1b612020526107805261204086815265496e6469676f60d01b612060526107a0526120808781526449766f727960d81b6120a0526107c0526120c0878152644b68616b6960d81b6120e0526107e052612100848152672630bb32b73232b960c11b61212052610800526121408281526c098c2eccadcc8cae484d8eae6d609b1b61216052610820526121808c8152682630bbb723b932b2b760b91b6121a052610840526121c08a81526b2632b6b7b721b434b33337b760a11b6121e052610860526122008c8152684c69676874426c756560b81b612220526108805261224088815269131a59da1d10dbdc985b60b21b612260526108a0526122808c8152682634b3b43a21bcb0b760b91b6122a0526108c05260146122c09081527f4c69676874476f6c64656e526f6459656c6c6f770000000000000000000000006122e0526108e052612300888152692634b3b43a23b932b2b760b11b61232052610900526123408c8152684c696768744772657960b81b61236052610920526123808c8152684c6967687450696e6b60b81b6123a052610940526123c08181526a2634b3b43a29b0b636b7b760a91b6123e052610960526124008281526c2634b3b43a29b2b0a3b932b2b760991b61242052610980526124408a81526b4c69676874536b79426c756560a01b612460526109a0526124808581526d4c69676874536c6174654772657960901b6124a0526109c0526124c08581526d4c69676874537465656c426c756560901b6124e0526109e0526125008181526a4c6967687459656c6c6f7760a81b61252052610a0052612540898152634c696d6560e01b61256052610a20526125808c8152682634b6b2a3b932b2b760b91b6125a052610a40526125c0878152642634b732b760d91b6125e052610a6052612600838152664d6167656e746160c81b61262052610a80526126408681526526b0b937b7b760d11b61266052610aa05260106126809081526f4d656469756d417175614d6172696e6560801b6126a052610ac0526126c0888152694d656469756d426c756560b01b6126e052610ae0526127008a81526b1359591a5d5b53dc98da1a5960a21b61272052610b00526127408a81526b4d656469756d507572706c6560a01b61276052610b20526127809485526d26b2b234bab6a9b2b0a3b932b2b760911b6127a052610b4094909452600f6127c08181526e4d656469756d536c617465426c756560881b6127e052610b605260116128009081527026b2b234bab6a9b83934b733a3b932b2b760791b61282052610b80526128408181526e4d656469756d54757271756f69736560881b61286052610ba0526128809081526e1359591a5d5b559a5bdb195d149959608a1b6128a052610bc0526128c09889526b4d69646e69676874426c756560a01b6128e052610be0989098526129008a8152684d696e74437265616d60b81b61292052610c00526129408a8152684d69737479526f736560b81b61296052610c20526129808281526726b7b1b1b0b9b4b760c11b6129a052610c40526129c08381526a4e6176616a6f576869746560a81b6129e052610c6052612a00878152634e61767960e01b612a2052610c8052612a40818152664f6c644c61636560c81b612a6052610ca052612a80858152644f6c69766560d81b612aa052610cc052612ac08a81526827b634bb32a23930b160b91b612ae052610ce052612b00848152654f72616e676560d01b612b2052610d0052612b408a81526813dc985b99d954995960ba1b612b6052610d2052612b808481526513dc98da1a5960d21b612ba052610d4052612bc08881526c14185b1951dbdb19195b949bd9609a1b612be052610d6052612c008a8152682830b632a3b932b2b760b91b612c2052610d8052612c408881526c50616c6554757271756f69736560981b612c6052610da052612c808881526c14185b19559a5bdb195d149959609a1b612ca052610dc052612cc0868152690506170617961576869760b41b612ce052610de052612d008a8152682832b0b1b4283ab33360b91b612d2052610e0052612d40878152635065727560e01b612d6052610e2052612d808781526350696e6b60e01b612da052610e4052612dc087815263506c756d60e01b612de052610e6052612e0086815269506f77646572426c756560b01b612e2052610e8052612e4084815265507572706c6560d01b612e6052610ea052612e809788526c52656265636361507572706c6560981b612ea052610ec0979097526003612ec08181526214995960ea1b612ee052610ee052612f008a8152682937b9bca13937bbb760b91b612f2052610f0052612f408a815268526f79616c426c756560b81b612f6052610f2052612f808381526a29b0b2323632a13937bbb760a91b612fa052610f4052612fc08481526529b0b636b7b760d11b612fe052610f60526130008681526929b0b7323ca13937bbb760b11b61302052610f80526130408281526729b2b0a3b932b2b760c11b61306052610fa0526130808281526714d95854da195b1b60c21b6130a052610fc0526130c0848152655369656e6e6160d01b6130e052610fe0526131008481526529b4b63b32b960d11b613120526110005261314088815266536b79426c756560c81b61316052611020526131808a815268536c617465426c756560b81b6131a052611040526131c08a815268536c6174654772657960b81b6131e0526110605261320087815263536e6f7760e01b61322052611080526132408381526a29b83934b733a3b932b2b760a91b613260526110a0526132808a815268537465656c426c756560b81b6132a0526110c0526132c0908152622a30b760e91b6132e0526110e052613300958652631519585b60e21b61332052611100959095526133409586526654686973746c6560c81b613360526111209590955261338081815265546f6d61746f60d01b6133a052611140526133c09687526854757271756f69736560b81b6133e0526111609690965261340086815265159a5bdb195d60d21b61342052611180526134408181526415da19585d60da1b613460526111a05261348090815264576869746560d81b6134a0526111c0526134c0908152695768697465536d6f6b6560b01b6134e0526111e0526135009384526559656c6c6f7760d01b61352052611200939093526135806040526135409081526a2cb2b63637bba3b932b2b760a91b613560526112205262000f249190608d620010ff565b506040518060c0016040528060405180604001604052806007815260200166141b185e599d5b60ca1b815250815260200160405180604001604052806008815260200167467269656e646c7960c01b815250815260200160405180604001604052806007815260200166437572696f757360c81b815250815260200160405180604001604052806009815260200168456e6572676574696360b81b81525081526020016040518060400160405280600681526020016547656e746c6560d01b8152508152602001604051806040016040528060058152602001645a617a7a7960d81b81525081525060099060066200101e92919062001163565b503480156200102c57600080fd5b5060408051808201825260098152684e6f7661204361747360b81b60208083019182528351808501909452600384526210d05560ea1b9084015281517313ebd3443fa5575f0eb173e323d8419f7452cfb193916200108e9160009190620011b5565b508051620010a4906001906020840190620011b5565b5050600680546001600160a01b0319166001600160a01b0384169081179091556040519091506000907f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d76908290a3506103e7608052620012f6565b82805482825590600052602060002090810192821562001151579160200282015b8281111562001151578251805162001140918491602090910190620011b5565b509160200191906001019062001120565b506200115f92915062001240565b5090565b82805482825590600052602060002090810192821562001151579160200282015b82811115620011515782518051620011a4918491602090910190620011b5565b509160200191906001019062001184565b828054620011c390620012ba565b90600052602060002090601f016020900481019282620011e7576000855562001232565b82601f106200120257805160ff191683800117855562001232565b8280016001018555821562001232579182015b828111156200123257825182559160200191906001019062001215565b506200115f92915062001261565b808211156200115f57600062001257828262001278565b5060010162001240565b5b808211156200115f576000815560010162001262565b5080546200128690620012ba565b6000825580601f1062001297575050565b601f016020900490600052602060002090810190620012b7919062001261565b50565b600181811c90821680620012cf57607f821691505b602082108103620012f057634e487b7160e01b600052602260045260246000fd5b50919050565b6080516124ca620013196000396000818161024f015261049501526124ca6000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c80636352211e116100ad578063a22cb46511610071578063a22cb46514610279578063a2d6c6da1461028c578063b88d4fde1461029f578063c87b56dd146102b2578063e985e9c5146102c557600080fd5b80636352211e1461021157806370a08231146102245780638da5cb5b146102375780638f770ad01461024a57806395d89b411461027157600080fd5b80631249c58b116100f45780631249c58b146101b957806313af4035146101c157806318160ddd146101d457806323b872dd146101eb57806342842e0e146101fe57600080fd5b806301ffc9a71461012657806306fdde031461014e578063081812fc14610163578063095ea7b3146101a4575b600080fd5b610139610134366004611192565b6102f3565b60405190151581526020015b60405180910390f35b61015661031e565b60405161014591906111e6565b61018c610171366004611219565b6004602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610145565b6101b76101b2366004611249565b6103ac565b005b6101b7610493565b6101b76101cf366004611273565b6104ed565b6101dd60075481565b604051908152602001610145565b6101b76101f936600461128e565b610582565b6101b761020c36600461128e565b610749565b61018c61021f366004611219565b61081b565b6101dd610232366004611273565b610872565b60065461018c906001600160a01b031681565b6101dd7f000000000000000000000000000000000000000000000000000000000000000081565b6101566108d5565b6101b76102873660046112ca565b6108e2565b61015661029a366004611219565b61094e565b6101b76102ad366004611306565b610989565b6101566102c0366004611219565b610a4b565b6101396102d33660046113a1565b600560209081526000928352604080842090915290825290205460ff1681565b60006001600160e01b0319821663516b636d60e11b1480610318575061031882610b0e565b92915050565b6000805461032b906113d4565b80601f0160208091040260200160405190810160405280929190818152602001828054610357906113d4565b80156103a45780601f10610379576101008083540402835291602001916103a4565b820191906000526020600020905b81548152906001019060200180831161038757829003601f168201915b505050505081565b6000818152600260205260409020546001600160a01b0316338114806103f557506001600160a01b038116600090815260056020908152604080832033845290915290205460ff165b6104375760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b60448201526064015b60405180910390fd5b60008281526004602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b7f0000000000000000000000000000000000000000000000000000000000000000600754106104d5576040516354db2d5d60e11b815260040160405180910390fd5b60078054600101908190556104eb903390610b5c565b565b6006546001600160a01b031633146105365760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b604482015260640161042e565b600680546001600160a01b0319166001600160a01b03831690811790915560405133907f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d7690600090a350565b6000818152600260205260409020546001600160a01b038481169116146105d85760405162461bcd60e51b815260206004820152600a60248201526957524f4e475f46524f4d60b01b604482015260640161042e565b6001600160a01b0382166106225760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b604482015260640161042e565b336001600160a01b038416148061065c57506001600160a01b038316600090815260056020908152604080832033845290915290205460ff165b8061067d57506000818152600460205260409020546001600160a01b031633145b6106ba5760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b604482015260640161042e565b6001600160a01b0380841660008181526003602090815260408083208054600019019055938616808352848320805460010190558583526002825284832080546001600160a01b03199081168317909155600490925284832080549092169091559251849392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b610754838383610582565b6001600160a01b0382163b1561081657604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a4016020604051808303816000875af11580156107cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ef919061140e565b6001600160e01b031916146108165760405162461bcd60e51b815260040161042e9061142b565b505050565b6000818152600260205260409020546001600160a01b03168061086d5760405162461bcd60e51b815260206004820152600a6024820152691393d517d3525395115160b21b604482015260640161042e565b919050565b60006001600160a01b0382166108b95760405162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b604482015260640161042e565b506001600160a01b031660009081526003602052604090205490565b6001805461032b906113d4565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6060600061095b83610c29565b905080818260405160200161097293929190611471565b604051602081830303815290604052915050919050565b610994858585610582565b6001600160a01b0384163b15610a4457604051630a85bd0160e11b808252906001600160a01b0386169063150b7a02906109da9033908a90899089908990600401611f7c565b6020604051808303816000875af11580156109f9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1d919061140e565b6001600160e01b03191614610a445760405162461bcd60e51b815260040161042e9061142b565b5050505050565b6060610a568261081b565b506000610a6283610d1e565b604051602001610a729190611fd0565b60408051601f1981840301815260a083019091526069808352909250600091906123ec602083013990506000610aa785610e27565b90506000610ab486610e3a565b9050610ae484848484604051602001610ad09493929190612002565b604051602081830303815290604052610e83565b604051602001610af491906120e6565b604051602081830303815290604052945050505050919050565b60006301ffc9a760e01b6001600160e01b031983161480610b3f57506380ac58cd60e01b6001600160e01b03198316145b806103185750506001600160e01b031916635b5e139f60e01b1490565b610b668282610fd6565b6001600160a01b0382163b15610c2557604051630a85bd0160e11b80825233600483015260006024830181905260448301849052608060648401526084830152906001600160a01b0384169063150b7a029060a4016020604051808303816000875af1158015610bda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bfe919061140e565b6001600160e01b03191614610c255760405162461bcd60e51b815260040161042e9061142b565b5050565b60606000610c3683610d1e565b604051602001610c46919061212b565b60408051601f198184030181529190528051602090910120600854909150610c6e908261216f565b905060088181548110610c8357610c83612183565b906000526020600020018054610c98906113d4565b80601f0160208091040260200160405190810160405280929190818152602001828054610cc4906113d4565b8015610d115780601f10610ce657610100808354040283529160200191610d11565b820191906000526020600020905b815481529060010190602001808311610cf457829003601f168201915b5050505050915050919050565b606081600003610d455750506040805180820190915260018152600360fc1b602082015290565b8160005b8115610d6f5780610d59816121af565b9150610d689050600a836121c8565b9150610d49565b60008167ffffffffffffffff811115610d8a57610d8a6121dc565b6040519080825280601f01601f191660200182016040528015610db4576020820181803683370190505b5090505b8415610e1f57610dc96001836121f2565b9150610dd6600a8661216f565b610de1906030612209565b60f81b818381518110610df657610df6612183565b60200101906001600160f81b031916908160001a905350610e18600a866121c8565b9450610db8565b949350505050565b6060610318610e35836110e1565b610e83565b60606000610e4783610c29565b610e508461111f565b604051602001610e61929190612221565b60405160208183030381529060405290508060405160200161097291906122d2565b60608151600003610ea257505060408051602081019091526000815290565b60006040518060600160405280604081526020016124556040913990506000600384516002610ed19190612209565b610edb91906121c8565b610ee6906004612315565b67ffffffffffffffff811115610efe57610efe6121dc565b6040519080825280601f01601f191660200182016040528015610f28576020820181803683370190505b509050600182016020820185865187015b80821015610f94576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f8116850151845350600183019250610f39565b5050600386510660018114610fb05760028114610fc357610fcb565b603d6001830353603d6002830353610fcb565b603d60018303535b509195945050505050565b6001600160a01b0382166110205760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b604482015260640161042e565b6000818152600260205260409020546001600160a01b0316156110765760405162461bcd60e51b815260206004820152600e60248201526d1053149150511657d3525395115160921b604482015260640161042e565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b606060006110ee83610d1e565b6110f78461094e565b604051602001611108929190612334565b60408051601f198184030181529190529392505050565b6060600061112c83610d1e565b60405160200161113c919061212b565b60408051601f198184030181529190528051602090910120600954909150611164908261216f565b905060098181548110610c8357610c83612183565b6001600160e01b03198116811461118f57600080fd5b50565b6000602082840312156111a457600080fd5b81356111af81611179565b9392505050565b60005b838110156111d15781810151838201526020016111b9565b838111156111e0576000848401525b50505050565b60208152600082518060208401526112058160408501602087016111b6565b601f01601f19169190910160400192915050565b60006020828403121561122b57600080fd5b5035919050565b80356001600160a01b038116811461086d57600080fd5b6000806040838503121561125c57600080fd5b61126583611232565b946020939093013593505050565b60006020828403121561128557600080fd5b6111af82611232565b6000806000606084860312156112a357600080fd5b6112ac84611232565b92506112ba60208501611232565b9150604084013590509250925092565b600080604083850312156112dd57600080fd5b6112e683611232565b9150602083013580151581146112fb57600080fd5b809150509250929050565b60008060008060006080868803121561131e57600080fd5b61132786611232565b945061133560208701611232565b935060408601359250606086013567ffffffffffffffff8082111561135957600080fd5b818801915088601f83011261136d57600080fd5b81358181111561137c57600080fd5b89602082850101111561138e57600080fd5b9699959850939650602001949392505050565b600080604083850312156113b457600080fd5b6113bd83611232565b91506113cb60208401611232565b90509250929050565b600181811c908216806113e857607f821691505b60208210810361140857634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561142057600080fd5b81516111af81611179565b60208082526010908201526f155394d0519157d49150d2541251539560821b604082015260600190565b600081516114678185602086016111b6565b9290920192915050565b7f3c672069643d226e6f756e73676c6173736573223e3c672069643d22636f6c6f81526e39111f1e3830ba34103334b6361e9160891b6020820152600084516114c181602f8501602089016111b6565b7f2220643d226d34372e32352034342e333820322e36353820322e36393620352e602f918401918201527f35393120312e3234352d312e32393120342e30353820302e373520332e323138604f8201527f20322e3230382d302e3731333620322e3632352d342e39373920312e3230382d606f8201527f352e313534632d312e3035392d312e3635362d322e3430332d332e3331342d33608f8201527f2e3135372d342e3939382d312e37392d312e3430332d322e3530322d332e363760af8201527f312d332e3731382d352e3931357a222f3e3c706174682066696c6c3d2200000060cf82015284516115bc8160ec8401602089016111b6565b7f2220643d226d33302e39352034332e37392d312e38313920322e3834322d312e60ec92909101918201527f35383320372e3533342d312e36303220312e3735342d322e39342d312e30383861010c8201527f2d302e343731332d342e39353973302e3832322d342e37383720312e3332322d61012c8201527f362e38323363302e352d322e30333620352e3134392d322e33383220352e313461014c8201527f392d322e3338327a222f3e3c706174682066696c6c3d2200000000000000000061016c820152611f72611694610183830186611455565b7f2220643d226d36372e35392031362e37352d322e3636372d302e353537322d3481527f2e323920312e3535372d302e3732393220342e3430362d302e3337343620332e60208201527f3134312d332e323520332e3832322d322e36343520312e3534392d312e37363160408201527f20302e30303537632d302e303430352d302e303534372d302e303735312d302e60608201527f313039382d302e313137342d302e31363433682d332e3238396c2d352e33323360808201527f2d322e3033352d352e3937312d322e3038362d392e38393220302e353431322d60a08201527f362e34343220312e3233382d362e3332342d322e3735342d342e32362d322e3860c08201527f32392d332e36323320302e37333920312e373520332e3431372d332e3331382060e08201527f352e3120302e3934313220342e32333720352e303920302e3131383420312e386101008201527f3220302e3433313520332e3339362d312e3139372d302e3236323820332e32336101208201527f3820312e31303920322e3733382d312e31303920312e3938332d332e373120326101408201527f2e3934392d302e3438353520342e30393320322e37393820332e32383973332e6101608201527f3933382d302e3331323520322e3334342d342e3537376c322e3739392d322e376101808201527f333320342e3734372d312e32333420312e3937332d312e32313720342e3433366101a08201527f20302e3738383668382e3430396c322e313320332e3430342d312e34323420346101c08201527f2e36383320302e3039353420322e37353920322e3535362d302e3237303420326101e08201527f2e3934382d332e393320312e3933372d322e3537762d332e3438396c332e36336102008201527f392d332e35373220322e3334392d342e39333973302e303139382d302e3133386102208201527f3520302e303333312d302e333736326c302e3031313920302e3031363473362e6102408201527f3130362d332e30303420382e33332d372e35323563332e3539372d352e3035346102608201527f2d302e3637372d392e39373520342e3433382d382e33313220312e32383920306102808201527f2e3431383920322e37352d322e323520312e3138372d332e3837357a222f3e3c6102a08201527f2f673e3c672069643d226c696e65222066696c6c3d226e6f6e6522207374726f6102c08201527f6b653d222330303022207374726f6b652d6c696e656361703d22726f756e64226102e08201527f207374726f6b652d6c696e656a6f696e3d22726f756e6422207374726f6b652d6103008201527f6d697465726c696d69743d22313022207374726f6b652d77696474683d2232226103208201527f3e3c7061746820643d226d31322e34362033352e3734632d322e33333320312d6103408201527f342e39313720302e383333332d342e39313720302e383333332d312e363737206103608201527f302e313435382d332e3131352d342e30312d322e3438352d342e3733336c332e6103808201527f3331382d352e312d312e37352d332e34313773352e3030382d312e34313520376103a08201527f2e38383320322e303963302e3334343420302e343220302e3739343320302e376103c08201527f34323920312e32373920302e3938373120302e3032393820302e30313520302e6103e08201527f3036303220302e3033303220302e3039313220302e3034353620322e353933206104008201527f312e32383920352e35343620312e35373120382e33383520302e3939383120376104208201527f2e3232322d312e3435382031342e30372d312e33372032312e3720322e3231326104408201527f20372e36323520332e3538332031342e38332d322e32352031332e39342d372e6104608201527f352d302e3739332d342e36343720332e3536322d372e35383320362e37352d356104808201527f222f3e3c7061746820643d226d31362e30352034382e383263302e363030362d6104a08201527f322e32303620382e3439312d332e36343820382e3439312d332e36343873332e6104c08201527f3232382d312e32303120312e3432362d342e353034222f3e3c7061746820643d6104e08201527f226d31382e332033332e3234632d312e35343320312e3833342d332e383933206105008201527f342e3830332d302e343420392e313538203020302d362e37353620322e3835336105208201527f2d362e30303620382e3033332030203020302e3336323420322e34373620322e6105408201527f34303220322e343032222f3e3c7061746820643d226d32332e352035302e30336105608201527f632d312e31353620372e32353420322e33383620362e30353520332e303137206105808201527f352e36363120312e3134382d302e3731373320312e3834382d392e38353420336105a08201527f2e3935322d31312e333120312e3539322d312e31303420382e3136372d302e336105c08201527f30323120382e3136372d302e33303231222f3e3c7061746820643d226d33382e6105e08201527f34342034312e333363302e3039313120312e37343220302e3735323920332e346106008201527f303220312e37333420342e38343520302e3636313620302e3937323720312e386106208201527f303320322e333220312e34353320322e3938352d342e34373920382e3520302e6106408201527f3632323420372e30323220312e30383320362e31363720332e3138382d352e396106608201527f313720362e3132352d342e31303420342e3634372d31302e35322030203020356106808201527f2e32372d312e383120352e35322d372e393737222f3e3c7061746820643d226d6106a08201527f34382e31352034352e353973322e33363720332e32303420372e37353820322e6106c08201527f363933633020302d332e33323620362e373632203020372e363220312e3931376106e08201527f20302e3439343120342e3732322d31312e313620342e3732322d31312e3136736107008201527f2d322e3636372d322e34352d332e3538332d342e333636222f3e3c2f673e3c2f61072082015261339f60f11b6107408201526107420190565b9695505050505050565b6001600160a01b038681168252851660208201526040810184905260806060820181905281018290526000828460a0840137600060a0848401015260a0601f19601f85011683010190509695505050505050565b694e6f766120436174202360b01b815260008251611ff581600a8501602087016111b6565b91909101600a0192915050565b683d913730b6b2911d1160b91b81528451600090612027816009850160208a016111b6565b71111610113232b9b1b934b83a34b7b7111d1160711b600991840191820152855161205981601b840160208a016111b6565b7f222c2022696d616765223a2022646174613a696d6167652f7376672b786d6c3b601b92909101918201526618985cd94d8d0b60ca1b603b82015284516120a78160428401602089016111b6565b61088b60f21b6042929091019182015283516120ca8160448401602088016111b6565b607d60f81b604492909101918201526045019695505050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081526000825161211e81601d8501602087016111b6565b91909101601d0192915050565b6521b7b637bab960d11b81526000825161214c8160068501602087016111b6565b9190910160060192915050565b634e487b7160e01b600052601260045260246000fd5b60008261217e5761217e612159565b500690565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016121c1576121c1612199565b5060010190565b6000826121d7576121d7612159565b500490565b634e487b7160e01b600052604160045260246000fd5b60008282101561220457612204612199565b500390565b6000821982111561221c5761221c612199565b500190565b7f7b2274726169745f74797065223a2022636f6c6f7572222c202276616c7565228152621d101160e91b6020820152600083516122658160238501602088016111b6565b7f227d2c207b2274726169745f74797065223a2022706572736f6e616c697479226023918401918201526b1610113b30b63ab2911d101160a11b604382015283516122b781604f8401602088016111b6565b61227d60f01b604f9290910191820152605101949350505050565b6e2261747472696275746573223a205b60881b815281516000906122fd81600f8501602087016111b6565b605d60f81b600f939091019283015250601001919050565b600081600019048311821515161561232f5761232f612199565b500290565b681e39bb339034b21e9160b91b8152661b9bdd9858d85d60ca1b600982015282516000906123698160108501602088016111b6565b7f222076696577426f783d223020302037322037322220786d6c6e733d226874746010918401918201527f703a2f2f7777772e77332e6f72672f323030302f737667223e00000000000000603082015283516123cc8160498401602088016111b6565b651e17b9bb339f60d11b60499290910191820152604f0194935050505056fe4e6f766120436174732e2043617420656d6f6a692064657369676e6564206279204f70656e4d6f6a692028746865206f70656e2d736f7572636520656d6f6a6920616e642069636f6e2070726f6a656374292e204c6963656e73653a2043432042592d534120342e304142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa26469706673582212204284b9a648194ed8787ae76a442021ca3a4446dae0a07cd67c44b2bec38062e164736f6c634300080d0033

Deployed ByteCode

0x608060405234801561001057600080fd5b50600436106101215760003560e01c80636352211e116100ad578063a22cb46511610071578063a22cb46514610279578063a2d6c6da1461028c578063b88d4fde1461029f578063c87b56dd146102b2578063e985e9c5146102c557600080fd5b80636352211e1461021157806370a08231146102245780638da5cb5b146102375780638f770ad01461024a57806395d89b411461027157600080fd5b80631249c58b116100f45780631249c58b146101b957806313af4035146101c157806318160ddd146101d457806323b872dd146101eb57806342842e0e146101fe57600080fd5b806301ffc9a71461012657806306fdde031461014e578063081812fc14610163578063095ea7b3146101a4575b600080fd5b610139610134366004611192565b6102f3565b60405190151581526020015b60405180910390f35b61015661031e565b60405161014591906111e6565b61018c610171366004611219565b6004602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610145565b6101b76101b2366004611249565b6103ac565b005b6101b7610493565b6101b76101cf366004611273565b6104ed565b6101dd60075481565b604051908152602001610145565b6101b76101f936600461128e565b610582565b6101b761020c36600461128e565b610749565b61018c61021f366004611219565b61081b565b6101dd610232366004611273565b610872565b60065461018c906001600160a01b031681565b6101dd7f00000000000000000000000000000000000000000000000000000000000003e781565b6101566108d5565b6101b76102873660046112ca565b6108e2565b61015661029a366004611219565b61094e565b6101b76102ad366004611306565b610989565b6101566102c0366004611219565b610a4b565b6101396102d33660046113a1565b600560209081526000928352604080842090915290825290205460ff1681565b60006001600160e01b0319821663516b636d60e11b1480610318575061031882610b0e565b92915050565b6000805461032b906113d4565b80601f0160208091040260200160405190810160405280929190818152602001828054610357906113d4565b80156103a45780601f10610379576101008083540402835291602001916103a4565b820191906000526020600020905b81548152906001019060200180831161038757829003601f168201915b505050505081565b6000818152600260205260409020546001600160a01b0316338114806103f557506001600160a01b038116600090815260056020908152604080832033845290915290205460ff165b6104375760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b60448201526064015b60405180910390fd5b60008281526004602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b7f00000000000000000000000000000000000000000000000000000000000003e7600754106104d5576040516354db2d5d60e11b815260040160405180910390fd5b60078054600101908190556104eb903390610b5c565b565b6006546001600160a01b031633146105365760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b604482015260640161042e565b600680546001600160a01b0319166001600160a01b03831690811790915560405133907f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d7690600090a350565b6000818152600260205260409020546001600160a01b038481169116146105d85760405162461bcd60e51b815260206004820152600a60248201526957524f4e475f46524f4d60b01b604482015260640161042e565b6001600160a01b0382166106225760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b604482015260640161042e565b336001600160a01b038416148061065c57506001600160a01b038316600090815260056020908152604080832033845290915290205460ff165b8061067d57506000818152600460205260409020546001600160a01b031633145b6106ba5760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b604482015260640161042e565b6001600160a01b0380841660008181526003602090815260408083208054600019019055938616808352848320805460010190558583526002825284832080546001600160a01b03199081168317909155600490925284832080549092169091559251849392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b610754838383610582565b6001600160a01b0382163b1561081657604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a4016020604051808303816000875af11580156107cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ef919061140e565b6001600160e01b031916146108165760405162461bcd60e51b815260040161042e9061142b565b505050565b6000818152600260205260409020546001600160a01b03168061086d5760405162461bcd60e51b815260206004820152600a6024820152691393d517d3525395115160b21b604482015260640161042e565b919050565b60006001600160a01b0382166108b95760405162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b604482015260640161042e565b506001600160a01b031660009081526003602052604090205490565b6001805461032b906113d4565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6060600061095b83610c29565b905080818260405160200161097293929190611471565b604051602081830303815290604052915050919050565b610994858585610582565b6001600160a01b0384163b15610a4457604051630a85bd0160e11b808252906001600160a01b0386169063150b7a02906109da9033908a90899089908990600401611f7c565b6020604051808303816000875af11580156109f9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1d919061140e565b6001600160e01b03191614610a445760405162461bcd60e51b815260040161042e9061142b565b5050505050565b6060610a568261081b565b506000610a6283610d1e565b604051602001610a729190611fd0565b60408051601f1981840301815260a083019091526069808352909250600091906123ec602083013990506000610aa785610e27565b90506000610ab486610e3a565b9050610ae484848484604051602001610ad09493929190612002565b604051602081830303815290604052610e83565b604051602001610af491906120e6565b604051602081830303815290604052945050505050919050565b60006301ffc9a760e01b6001600160e01b031983161480610b3f57506380ac58cd60e01b6001600160e01b03198316145b806103185750506001600160e01b031916635b5e139f60e01b1490565b610b668282610fd6565b6001600160a01b0382163b15610c2557604051630a85bd0160e11b80825233600483015260006024830181905260448301849052608060648401526084830152906001600160a01b0384169063150b7a029060a4016020604051808303816000875af1158015610bda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bfe919061140e565b6001600160e01b03191614610c255760405162461bcd60e51b815260040161042e9061142b565b5050565b60606000610c3683610d1e565b604051602001610c46919061212b565b60408051601f198184030181529190528051602090910120600854909150610c6e908261216f565b905060088181548110610c8357610c83612183565b906000526020600020018054610c98906113d4565b80601f0160208091040260200160405190810160405280929190818152602001828054610cc4906113d4565b8015610d115780601f10610ce657610100808354040283529160200191610d11565b820191906000526020600020905b815481529060010190602001808311610cf457829003601f168201915b5050505050915050919050565b606081600003610d455750506040805180820190915260018152600360fc1b602082015290565b8160005b8115610d6f5780610d59816121af565b9150610d689050600a836121c8565b9150610d49565b60008167ffffffffffffffff811115610d8a57610d8a6121dc565b6040519080825280601f01601f191660200182016040528015610db4576020820181803683370190505b5090505b8415610e1f57610dc96001836121f2565b9150610dd6600a8661216f565b610de1906030612209565b60f81b818381518110610df657610df6612183565b60200101906001600160f81b031916908160001a905350610e18600a866121c8565b9450610db8565b949350505050565b6060610318610e35836110e1565b610e83565b60606000610e4783610c29565b610e508461111f565b604051602001610e61929190612221565b60405160208183030381529060405290508060405160200161097291906122d2565b60608151600003610ea257505060408051602081019091526000815290565b60006040518060600160405280604081526020016124556040913990506000600384516002610ed19190612209565b610edb91906121c8565b610ee6906004612315565b67ffffffffffffffff811115610efe57610efe6121dc565b6040519080825280601f01601f191660200182016040528015610f28576020820181803683370190505b509050600182016020820185865187015b80821015610f94576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f8116850151845350600183019250610f39565b5050600386510660018114610fb05760028114610fc357610fcb565b603d6001830353603d6002830353610fcb565b603d60018303535b509195945050505050565b6001600160a01b0382166110205760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b604482015260640161042e565b6000818152600260205260409020546001600160a01b0316156110765760405162461bcd60e51b815260206004820152600e60248201526d1053149150511657d3525395115160921b604482015260640161042e565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b606060006110ee83610d1e565b6110f78461094e565b604051602001611108929190612334565b60408051601f198184030181529190529392505050565b6060600061112c83610d1e565b60405160200161113c919061212b565b60408051601f198184030181529190528051602090910120600954909150611164908261216f565b905060098181548110610c8357610c83612183565b6001600160e01b03198116811461118f57600080fd5b50565b6000602082840312156111a457600080fd5b81356111af81611179565b9392505050565b60005b838110156111d15781810151838201526020016111b9565b838111156111e0576000848401525b50505050565b60208152600082518060208401526112058160408501602087016111b6565b601f01601f19169190910160400192915050565b60006020828403121561122b57600080fd5b5035919050565b80356001600160a01b038116811461086d57600080fd5b6000806040838503121561125c57600080fd5b61126583611232565b946020939093013593505050565b60006020828403121561128557600080fd5b6111af82611232565b6000806000606084860312156112a357600080fd5b6112ac84611232565b92506112ba60208501611232565b9150604084013590509250925092565b600080604083850312156112dd57600080fd5b6112e683611232565b9150602083013580151581146112fb57600080fd5b809150509250929050565b60008060008060006080868803121561131e57600080fd5b61132786611232565b945061133560208701611232565b935060408601359250606086013567ffffffffffffffff8082111561135957600080fd5b818801915088601f83011261136d57600080fd5b81358181111561137c57600080fd5b89602082850101111561138e57600080fd5b9699959850939650602001949392505050565b600080604083850312156113b457600080fd5b6113bd83611232565b91506113cb60208401611232565b90509250929050565b600181811c908216806113e857607f821691505b60208210810361140857634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561142057600080fd5b81516111af81611179565b60208082526010908201526f155394d0519157d49150d2541251539560821b604082015260600190565b600081516114678185602086016111b6565b9290920192915050565b7f3c672069643d226e6f756e73676c6173736573223e3c672069643d22636f6c6f81526e39111f1e3830ba34103334b6361e9160891b6020820152600084516114c181602f8501602089016111b6565b7f2220643d226d34372e32352034342e333820322e36353820322e36393620352e602f918401918201527f35393120312e3234352d312e32393120342e30353820302e373520332e323138604f8201527f20322e3230382d302e3731333620322e3632352d342e39373920312e3230382d606f8201527f352e313534632d312e3035392d312e3635362d322e3430332d332e3331342d33608f8201527f2e3135372d342e3939382d312e37392d312e3430332d322e3530322d332e363760af8201527f312d332e3731382d352e3931357a222f3e3c706174682066696c6c3d2200000060cf82015284516115bc8160ec8401602089016111b6565b7f2220643d226d33302e39352034332e37392d312e38313920322e3834322d312e60ec92909101918201527f35383320372e3533342d312e36303220312e3735342d322e39342d312e30383861010c8201527f2d302e343731332d342e39353973302e3832322d342e37383720312e3332322d61012c8201527f362e38323363302e352d322e30333620352e3134392d322e33383220352e313461014c8201527f392d322e3338327a222f3e3c706174682066696c6c3d2200000000000000000061016c820152611f72611694610183830186611455565b7f2220643d226d36372e35392031362e37352d322e3636372d302e353537322d3481527f2e323920312e3535372d302e3732393220342e3430362d302e3337343620332e60208201527f3134312d332e323520332e3832322d322e36343520312e3534392d312e37363160408201527f20302e30303537632d302e303430352d302e303534372d302e303735312d302e60608201527f313039382d302e313137342d302e31363433682d332e3238396c2d352e33323360808201527f2d322e3033352d352e3937312d322e3038362d392e38393220302e353431322d60a08201527f362e34343220312e3233382d362e3332342d322e3735342d342e32362d322e3860c08201527f32392d332e36323320302e37333920312e373520332e3431372d332e3331382060e08201527f352e3120302e3934313220342e32333720352e303920302e3131383420312e386101008201527f3220302e3433313520332e3339362d312e3139372d302e3236323820332e32336101208201527f3820312e31303920322e3733382d312e31303920312e3938332d332e373120326101408201527f2e3934392d302e3438353520342e30393320322e37393820332e32383973332e6101608201527f3933382d302e3331323520322e3334342d342e3537376c322e3739392d322e376101808201527f333320342e3734372d312e32333420312e3937332d312e32313720342e3433366101a08201527f20302e3738383668382e3430396c322e313320332e3430342d312e34323420346101c08201527f2e36383320302e3039353420322e37353920322e3535362d302e3237303420326101e08201527f2e3934382d332e393320312e3933372d322e3537762d332e3438396c332e36336102008201527f392d332e35373220322e3334392d342e39333973302e303139382d302e3133386102208201527f3520302e303333312d302e333736326c302e3031313920302e3031363473362e6102408201527f3130362d332e30303420382e33332d372e35323563332e3539372d352e3035346102608201527f2d302e3637372d392e39373520342e3433382d382e33313220312e32383920306102808201527f2e3431383920322e37352d322e323520312e3138372d332e3837357a222f3e3c6102a08201527f2f673e3c672069643d226c696e65222066696c6c3d226e6f6e6522207374726f6102c08201527f6b653d222330303022207374726f6b652d6c696e656361703d22726f756e64226102e08201527f207374726f6b652d6c696e656a6f696e3d22726f756e6422207374726f6b652d6103008201527f6d697465726c696d69743d22313022207374726f6b652d77696474683d2232226103208201527f3e3c7061746820643d226d31322e34362033352e3734632d322e33333320312d6103408201527f342e39313720302e383333332d342e39313720302e383333332d312e363737206103608201527f302e313435382d332e3131352d342e30312d322e3438352d342e3733336c332e6103808201527f3331382d352e312d312e37352d332e34313773352e3030382d312e34313520376103a08201527f2e38383320322e303963302e3334343420302e343220302e3739343320302e376103c08201527f34323920312e32373920302e3938373120302e3032393820302e30313520302e6103e08201527f3036303220302e3033303220302e3039313220302e3034353620322e353933206104008201527f312e32383920352e35343620312e35373120382e33383520302e3939383120376104208201527f2e3232322d312e3435382031342e30372d312e33372032312e3720322e3231326104408201527f20372e36323520332e3538332031342e38332d322e32352031332e39342d372e6104608201527f352d302e3739332d342e36343720332e3536322d372e35383320362e37352d356104808201527f222f3e3c7061746820643d226d31362e30352034382e383263302e363030362d6104a08201527f322e32303620382e3439312d332e36343820382e3439312d332e36343873332e6104c08201527f3232382d312e32303120312e3432362d342e353034222f3e3c7061746820643d6104e08201527f226d31382e332033332e3234632d312e35343320312e3833342d332e383933206105008201527f342e3830332d302e343420392e313538203020302d362e37353620322e3835336105208201527f2d362e30303620382e3033332030203020302e3336323420322e34373620322e6105408201527f34303220322e343032222f3e3c7061746820643d226d32332e352035302e30336105608201527f632d312e31353620372e32353420322e33383620362e30353520332e303137206105808201527f352e36363120312e3134382d302e3731373320312e3834382d392e38353420336105a08201527f2e3935322d31312e333120312e3539322d312e31303420382e3136372d302e336105c08201527f30323120382e3136372d302e33303231222f3e3c7061746820643d226d33382e6105e08201527f34342034312e333363302e3039313120312e37343220302e3735323920332e346106008201527f303220312e37333420342e38343520302e3636313620302e3937323720312e386106208201527f303320322e333220312e34353320322e3938352d342e34373920382e3520302e6106408201527f3632323420372e30323220312e30383320362e31363720332e3138382d352e396106608201527f313720362e3132352d342e31303420342e3634372d31302e35322030203020356106808201527f2e32372d312e383120352e35322d372e393737222f3e3c7061746820643d226d6106a08201527f34382e31352034352e353973322e33363720332e32303420372e37353820322e6106c08201527f363933633020302d332e33323620362e373632203020372e363220312e3931376106e08201527f20302e3439343120342e3732322d31312e313620342e3732322d31312e3136736107008201527f2d322e3636372d322e34352d332e3538332d342e333636222f3e3c2f673e3c2f61072082015261339f60f11b6107408201526107420190565b9695505050505050565b6001600160a01b038681168252851660208201526040810184905260806060820181905281018290526000828460a0840137600060a0848401015260a0601f19601f85011683010190509695505050505050565b694e6f766120436174202360b01b815260008251611ff581600a8501602087016111b6565b91909101600a0192915050565b683d913730b6b2911d1160b91b81528451600090612027816009850160208a016111b6565b71111610113232b9b1b934b83a34b7b7111d1160711b600991840191820152855161205981601b840160208a016111b6565b7f222c2022696d616765223a2022646174613a696d6167652f7376672b786d6c3b601b92909101918201526618985cd94d8d0b60ca1b603b82015284516120a78160428401602089016111b6565b61088b60f21b6042929091019182015283516120ca8160448401602088016111b6565b607d60f81b604492909101918201526045019695505050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081526000825161211e81601d8501602087016111b6565b91909101601d0192915050565b6521b7b637bab960d11b81526000825161214c8160068501602087016111b6565b9190910160060192915050565b634e487b7160e01b600052601260045260246000fd5b60008261217e5761217e612159565b500690565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016121c1576121c1612199565b5060010190565b6000826121d7576121d7612159565b500490565b634e487b7160e01b600052604160045260246000fd5b60008282101561220457612204612199565b500390565b6000821982111561221c5761221c612199565b500190565b7f7b2274726169745f74797065223a2022636f6c6f7572222c202276616c7565228152621d101160e91b6020820152600083516122658160238501602088016111b6565b7f227d2c207b2274726169745f74797065223a2022706572736f6e616c697479226023918401918201526b1610113b30b63ab2911d101160a11b604382015283516122b781604f8401602088016111b6565b61227d60f01b604f9290910191820152605101949350505050565b6e2261747472696275746573223a205b60881b815281516000906122fd81600f8501602087016111b6565b605d60f81b600f939091019283015250601001919050565b600081600019048311821515161561232f5761232f612199565b500290565b681e39bb339034b21e9160b91b8152661b9bdd9858d85d60ca1b600982015282516000906123698160108501602088016111b6565b7f222076696577426f783d223020302037322037322220786d6c6e733d226874746010918401918201527f703a2f2f7777772e77332e6f72672f323030302f737667223e00000000000000603082015283516123cc8160498401602088016111b6565b651e17b9bb339f60d11b60499290910191820152604f0194935050505056fe4e6f766120436174732e2043617420656d6f6a692064657369676e6564206279204f70656e4d6f6a692028746865206f70656e2d736f7572636520656d6f6a6920616e642069636f6e2070726f6a656374292e204c6963656e73653a2043432042592d534120342e304142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa26469706673582212204284b9a648194ed8787ae76a442021ca3a4446dae0a07cd67c44b2bec38062e164736f6c634300080d0033