ETH Price: $3,392.29 (-1.44%)
Gas: 2 Gwei

Token

Shattered Eon Raw Resources ()
 

Overview

Max Total Supply

0

Holders

935

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
aquis.eth
0x145dc81054f95d2f4fc1cbe02c6dc82751c17dc2
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

**Shattered Eon is an ever-expanding, ever-unfolding Sci-Fi Space Epic. A 100% on-chain Colonist and Pirate NFT universe full of consequential decision making and p2p interaction.** Inhabitants of the Shattered Eon Universe have the freedom to build a mining team to gather ...

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
RAW

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
No with 2000 runs

Other Settings:
default evmVersion, MIT license
File 1 of 8 : Pausable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (security/Pausable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

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

pragma solidity ^0.8.0;

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

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

File 3 of 8 : 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 4 of 8 : ERC1155.sol
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.8.0;

/// @notice Minimalist and gas efficient standard ERC1155 implementation.
/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC1155.sol)
abstract contract ERC1155 {
    /*///////////////////////////////////////////////////////////////
                                EVENTS
    //////////////////////////////////////////////////////////////*/

    event TransferSingle(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256 id,
        uint256 amount
    );

    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] amounts
    );

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

    event URI(string value, uint256 indexed id);

    /*///////////////////////////////////////////////////////////////
                            ERC1155 STORAGE
    //////////////////////////////////////////////////////////////*/

    mapping(address => mapping(uint256 => uint256)) internal _balanceOf;

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

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

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

    /*///////////////////////////////////////////////////////////////
                             ERC1155 LOGIC
    //////////////////////////////////////////////////////////////*/

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

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

    function isApproved(address account, address operator)
        public
        view
        virtual
        returns (bool)
    {
        return isApprovedForAll[account][operator];
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) public virtual {
        require(
            msg.sender == from || isApprovedForAll[from][msg.sender],
            "NOT_AUTHORIZED"
        );

        _balanceOf[from][id] -= amount;
        _balanceOf[to][id] += amount;

        emit TransferSingle(msg.sender, from, to, id, amount);

        require(
            to.code.length == 0
                ? to != address(0)
                : ERC1155TokenReceiver(to).onERC1155Received(
                    msg.sender,
                    from,
                    id,
                    amount,
                    data
                ) == ERC1155TokenReceiver.onERC1155Received.selector,
            "UNSAFE_RECIPIENT"
        );
    }

    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) public virtual {
        uint256 idsLength = ids.length; // Saves MLOADs.

        require(idsLength == amounts.length, "LENGTH_MISMATCH");

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

        for (uint256 i = 0; i < idsLength; ) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            _balanceOf[from][id] -= amount;
            _balanceOf[to][id] += amount;

            // An array can't have a total length
            // larger than the max uint256 value.
            unchecked {
                i++;
            }
        }

        emit TransferBatch(msg.sender, from, to, ids, amounts);

        require(
            to.code.length == 0
                ? to != address(0)
                : ERC1155TokenReceiver(to).onERC1155BatchReceived(
                    msg.sender,
                    from,
                    ids,
                    amounts,
                    data
                ) == ERC1155TokenReceiver.onERC1155BatchReceived.selector,
            "UNSAFE_RECIPIENT"
        );
    }

    function _balanceOfBatch(address[] memory owners, uint256[] memory ids)
        public
        view
        virtual
        returns (uint256[] memory balances)
    {
        uint256 ownersLength = owners.length; // Saves MLOADs.

        require(ownersLength == ids.length, "LENGTH_MISMATCH");

        balances = new uint256[](owners.length);

        // Unchecked because the only math done is incrementing
        // the array index counter which cannot possibly overflow.
        unchecked {
            for (uint256 i = 0; i < ownersLength; i++) {
                balances[i] = _balanceOf[owners[i]][ids[i]];
            }
        }
    }

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

    function supportsInterface(bytes4 interfaceId)
        public
        pure
        virtual
        returns (bool)
    {
        return
            interfaceId == 0x01ffc9a7 || // ERC165 Interface ID for ERC165
            interfaceId == 0xd9b67a26 || // ERC165 Interface ID for ERC1155
            interfaceId == 0x0e89341c; // ERC165 Interface ID for ERC1155MetadataURI
    }

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

    function _mint(
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal {
        _balanceOf[to][id] += amount;

        emit TransferSingle(msg.sender, address(0), to, id, amount);

        require(
            to.code.length == 0
                ? to != address(0)
                : ERC1155TokenReceiver(to).onERC1155Received(
                    msg.sender,
                    address(0),
                    id,
                    amount,
                    data
                ) == ERC1155TokenReceiver.onERC1155Received.selector,
            "UNSAFE_RECIPIENT"
        );
    }

    function _batchMint(
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal {
        uint256 idsLength = ids.length; // Saves MLOADs.

        require(idsLength == amounts.length, "LENGTH_MISMATCH");

        for (uint256 i = 0; i < idsLength; ) {
            _balanceOf[to][ids[i]] += amounts[i];

            // An array can't have a total length
            // larger than the max uint256 value.
            unchecked {
                i++;
            }
        }

        emit TransferBatch(msg.sender, address(0), to, ids, amounts);

        require(
            to.code.length == 0
                ? to != address(0)
                : ERC1155TokenReceiver(to).onERC1155BatchReceived(
                    msg.sender,
                    address(0),
                    ids,
                    amounts,
                    data
                ) == ERC1155TokenReceiver.onERC1155BatchReceived.selector,
            "UNSAFE_RECIPIENT"
        );
    }

    function _batchBurn(
        address from,
        uint256[] memory ids,
        uint256[] memory amounts
    ) internal {
        uint256 idsLength = ids.length; // Saves MLOADs.

        require(idsLength == amounts.length, "LENGTH_MISMATCH");

        for (uint256 i = 0; i < idsLength; ) {
            _balanceOf[from][ids[i]] -= amounts[i];

            // An array can't have a total length
            // larger than the max uint256 value.
            unchecked {
                i++;
            }
        }

        emit TransferBatch(msg.sender, from, address(0), ids, amounts);
    }

    function _burn(
        address from,
        uint256 id,
        uint256 amount
    ) internal {
        _balanceOf[from][id] -= amount;

        emit TransferSingle(msg.sender, from, address(0), id, amount);
    }
}

/// @notice A generic interface for a contract which properly accepts ERC1155 tokens.
/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC1155.sol)
interface ERC1155TokenReceiver {
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external returns (bytes4);

    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external returns (bytes4);
}

File 5 of 8 : RAW.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/security/Pausable.sol";
import "@openzeppelin/contracts/utils/Strings.sol";
import "./ERC1155.sol";
import "./interfaces/IRAW.sol";
import "./interfaces/IRAWoriginal.sol";
import "./interfaces/IEON.sol";

contract RAW is IRAW, ERC1155, Pausable {
    using Strings for uint256;

    struct LastWrite {
        uint64 time;
        uint64 blockNum;
    }

    // struct to store each trait's data for metadata and rendering
    struct Image {
        string name;
        string png;
    }

    struct TypeInfo {
        uint256 mints;
        uint256 burns;
        uint256 maxSupply;
        uint256 eonExchangeAmt;
    }

    mapping(uint256 => TypeInfo) private typeInfo;
    // storage of each image data
    mapping(uint256 => Image) public traitData;

    // address => allowedToCallFunctions
    mapping(address => bool) private admins;

    // Tracks the last block and timestamp that a caller has written to state.
    // Disallow some access to functions if they occur while a change is being written.
    mapping(address => LastWrite) private lastWriteAddress;

    event UpdateMintBurns(uint256 typeId, uint256 mintQty, uint256 burnQty);

    // reference to the $EON contract for exchange rate if accepted
    IEON public eon;

    // reference to the original Raw contract
    IRAWoriginal public originalRaw;

    address public auth;

    uint256 public migrated;

    constructor() {
        _pause();
        auth = msg.sender;
    }

    modifier onlyOwner() {
        require(msg.sender == auth);
        _;
    }

    /** CRITICAL TO SETUP */

    modifier requireContractsSet() {
        require(address(eon) != address(0), "Contracts not set");
        _;
    }

    modifier blockIfChangingAddress() {
        require(
            admins[msg.sender] ||
                lastWriteAddress[tx.origin].blockNum < block.number,
            "Your trying the cheat"
        );
        _;
    }

    function setContracts(address _eon, address _originalRaw)
        external
        onlyOwner
    {
        eon = IEON(_eon);
        originalRaw = IRAWoriginal(_originalRaw);
    }

    /**
     * Mint a token - any payment / game logic should be handled in the game contract.
     */
    function mint(
        uint256 typeId,
        uint256 qty,
        address recipient
    ) external override whenNotPaused {
        require(admins[msg.sender],  "Only admins");
        require(
            (typeInfo[typeId].mints + qty) <= typeInfo[typeId].maxSupply,
            "MaxSupply Minted"
        );
        typeInfo[typeId].mints += qty;
        _mint(recipient, typeId, qty, "");
    }

    /**
     * Burn a token - any payment / game logic should be handled in the game contract.
     */
    function burn(
        uint256 typeId,
        uint256 qty,
        address burnFrom
    ) external override whenNotPaused {
        require(admins[msg.sender], "Only admins");
        typeInfo[typeId].burns += qty;
        _burn(burnFrom, typeId, qty);
    }

    function setType(uint256 typeId, uint256 maxSupply) external onlyOwner {
        require(typeId != 0, "TypeId cannot be 0");
        require(typeInfo[typeId].mints <= maxSupply, "max supply too low");
        typeInfo[typeId].maxSupply = maxSupply;
    }

    // a function to update the mint and burn amounts
    // to save gas costs of doing both a mint and then
    // burn when cost is paid from an amount owed
    function updateMintBurns(
        uint256 typeId,
        uint256 mintQty,
        uint256 burnQty
    ) external {
        require(admins[msg.sender], "Only Admins");
        typeInfo[typeId].mints += mintQty;
        typeInfo[typeId].burns += burnQty;

        emit UpdateMintBurns(typeId, mintQty, burnQty);
    }

    function setExchangeAmt(uint256 typeId, uint256 exchangeAmt)
        external
        onlyOwner
    {
        require(
            typeInfo[typeId].maxSupply > 0,
            "this type has not been set up"
        );
        typeInfo[typeId].eonExchangeAmt = exchangeAmt;
    }

    function balanceOf(address tokenOwner, uint256 typeId)
        public
        view
        blockIfChangingAddress
        returns (uint256)
    {
        //Prevent chencking balance in the same block it's being modified..
        require(
            admins[msg.sender] ||
                lastWriteAddress[tokenOwner].blockNum < block.number,
            "no checking balance in the same block it's being modified"
        );
        uint256 balance = _balanceOf[tokenOwner][typeId];
        return balance;
    }
  function updateOriginAccess(address user) external override {
        require(admins[_msgSender()], "Only admins can call this");
        uint64 blockNum = uint64(block.number);
        uint64 time = uint64(block.timestamp);
        lastWriteAddress[user] = LastWrite(time, blockNum);
  }
    /**
     * creates identical tokens in the new contract
     * and burns any original tokens
     * @param typeId the type of the tokens to migrate
     */
    function migrate(uint256 typeId) external whenNotPaused {
        uint256 amount = originalRaw.getBalance(msg.sender, typeId);
        require(amount > 0, "no tokens to migrate");
        originalRaw.burn(typeId, amount, msg.sender);
        _mint(msg.sender, typeId, amount, "");
        migrated += amount;
    }

    /**
     * enables an address to mint / burn
     * @param addr the address to enable
     */
    function addAdmin(address addr) external onlyOwner {
        admins[addr] = true;
    }

    /**
     * disables an address from minting / burning
     * @param addr the address to disbale
     */
    function removeAdmin(address addr) external onlyOwner {
        admins[addr] = false;
    }

    function setPaused(bool _paused) external onlyOwner requireContractsSet {
        if (_paused) _pause();
        else _unpause();
    }

    function transferOwnership(address newOwner) external onlyOwner {
        auth = newOwner;
    }

    function getInfoForType(uint256 typeId)
        external
        view
        returns (TypeInfo memory)
    {
        require(typeInfo[typeId].maxSupply > 0, "invalid type");
        return typeInfo[typeId];
    }

    function uri(uint256 typeId) public view override returns (string memory) {
        require(typeInfo[typeId].maxSupply > 0, "invalid type");
        Image memory img = traitData[typeId];
        string memory metadata = string(
            abi.encodePacked(
                '{"name": "',
                img.name,
                '", "description": "Raw Pytheas resources - All the metadata and images are generated and stored 100% on-chain. No IPFS. NO API. Just the Ethereum blockchain.", "image": "data:image/svg+xml;base64,',
                base64(bytes(drawSVG(typeId))),
                '", "attributes": []',
                "}"
            )
        );
        return
            string(
                abi.encodePacked(
                    "data:application/json;base64,",
                    base64(bytes(metadata))
                )
            );
    }

    function uploadImage(uint256 typeId, Image calldata image)
        external
        onlyOwner
    {
        traitData[typeId] = Image(image.name, image.png);
    }

    function drawImage(Image memory image)
        internal
        pure
        returns (string memory)
    {
        return
            string(
                abi.encodePacked(
                    '<image x="0" y="0" width="64" height="64" image-rendering="pixelated" preserveAspectRatio="xMidYMid" xlink:href="data:image/png;base64,',
                    image.png,
                    '"/>'
                )
            );
    }

    function drawSVG(uint256 typeId) internal view returns (string memory) {
        string memory svgString = string(
            abi.encodePacked(drawImage(traitData[typeId]))
        );

        return
            string(
                abi.encodePacked(
                    '<svg id="rawResources" width="100%" height="100%" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">',
                    svgString,
                    "</svg>"
                )
            );
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) public virtual override(ERC1155, IRAW) {
        require(lastWriteAddress[from].blockNum < block.number, "no overwriting");
        // allow admin contracts to send without approval
        if (!admins[msg.sender]) {
            require(
                msg.sender == from || isApprovedForAll[from][msg.sender],
                "NOT_AUTHORIZED"
            );
        }
        _balanceOf[from][id] -= amount;
        _balanceOf[to][id] += amount;

        emit TransferSingle(msg.sender, from, to, id, amount);

        require(
            to.code.length == 0
                ? to != address(0)
                : ERC1155TokenReceiver(to).onERC1155Received(
                    msg.sender,
                    from,
                    id,
                    amount,
                    data
                ) == ERC1155TokenReceiver.onERC1155Received.selector,
            "UNSAFE_RECIPIENT"
        );
    }

    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) public virtual override(ERC1155, IRAW) {
         require(lastWriteAddress[from].blockNum < block.number, "no overwriting");
        // allow admin contracts to send without approval
        uint256 idsLength = ids.length; // Saves MLOADs.

        require(idsLength == amounts.length, "LENGTH_MISMATCH");

        // allow admin contracts to send without approval
        if (!admins[msg.sender]) {
            require(
                msg.sender == from || isApprovedForAll[from][msg.sender],
                "NOT_AUTHORIZED"
            );
        }

        for (uint256 i = 0; i < idsLength; ) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            _balanceOf[from][id] -= amount;
            _balanceOf[to][id] += amount;

            // An array can't have a total length
            // larger than the max uint256 value.
            unchecked {
                i++;
            }
        }
        emit TransferBatch(msg.sender, from, to, ids, amounts);

        require(
            to.code.length == 0
                ? to != address(0)
                : ERC1155TokenReceiver(to).onERC1155BatchReceived(
                    msg.sender,
                    from,
                    ids,
                    amounts,
                    data
                ) == ERC1155TokenReceiver.onERC1155BatchReceived.selector,
            "UNSAFE_RECIPIENT"
        );
    }

    /** BASE 64 - Written by Brech Devos */

    string internal constant TABLE =
        "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

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

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

        // 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) {

            } {
                dataPtr := add(dataPtr, 3)

                // read 3 bytes
                let input := mload(dataPtr)

                // write 4 characters
                mstore(
                    resultPtr,
                    shl(248, mload(add(tablePtr, and(shr(18, input), 0x3F))))
                )
                resultPtr := add(resultPtr, 1)
                mstore(
                    resultPtr,
                    shl(248, mload(add(tablePtr, and(shr(12, input), 0x3F))))
                )
                resultPtr := add(resultPtr, 1)
                mstore(
                    resultPtr,
                    shl(248, mload(add(tablePtr, and(shr(6, input), 0x3F))))
                )
                resultPtr := add(resultPtr, 1)
                mstore(
                    resultPtr,
                    shl(248, 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;
    }

    // For OpenSeas
    function owner() public view virtual returns (address) {
        return auth;
    }
}

File 6 of 8 : IEON.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface IEON {
    function mint(address to, uint256 amount) external;

    function burn(address from, uint256 amount) external;

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
}

File 7 of 8 : IRAW.sol
// SPDX-License-Identifier: MIT LICENSE
pragma solidity ^0.8.0;

interface IRAW {

    function updateOriginAccess(address user) external;


    function balanceOf(
        address account,
        uint256 id
    ) external returns(uint256);

    function mint(
        uint256 typeId,
        uint256 qty,
        address recipient
    ) external;

    function burn(
        uint256 typeId,
        uint256 qty,
        address burnFrom
    ) external;

    function updateMintBurns(
        uint256 typeId,
        uint256 mintQty,
        uint256 burnQty
    ) external;

    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) external;

    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) external;

}

File 8 of 8 : IRAWoriginal.sol
// SPDX-License-Identifier: MIT LICENSE
pragma solidity ^0.8.0;

interface IRAWoriginal {

    function getBalance(
        address account,
        uint256 id
    ) external returns(uint256);

    function mint(
        uint256 typeId,
        uint256 qty,
        address recipient
    ) external;

    function burn(
        uint256 typeId,
        uint256 qty,
        address burnFrom
    ) external;

    function updateMintBurns(
        uint256 typeId,
        uint256 mintQty,
        uint256 burnQty
    ) external;

    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) external;

    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) external;

}

Settings
{
  "evmVersion": "london",
  "libraries": {},
  "metadata": {
    "bytecodeHash": "ipfs",
    "useLiteralContent": true
  },
  "optimizer": {
    "details": {
      "constantOptimizer": true,
      "cse": true,
      "deduplicate": true,
      "inliner": true,
      "jumpdestRemover": true,
      "orderLiterals": true,
      "peephole": true,
      "yul": true,
      "yulDetails": {
        "optimizerSteps": "dhfoDgvulfnTUtnIf",
        "stackAllocation": true
      }
    },
    "runs": 2000
  },
  "remappings": [],
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"typeId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mintQty","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"burnQty","type":"uint256"}],"name":"UpdateMintBurns","type":"event"},{"inputs":[{"internalType":"address[]","name":"owners","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"_balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"balances","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"addAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"auth","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenOwner","type":"address"},{"internalType":"uint256","name":"typeId","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"typeId","type":"uint256"},{"internalType":"uint256","name":"qty","type":"uint256"},{"internalType":"address","name":"burnFrom","type":"address"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"eon","outputs":[{"internalType":"contract IEON","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"typeId","type":"uint256"}],"name":"getInfoForType","outputs":[{"components":[{"internalType":"uint256","name":"mints","type":"uint256"},{"internalType":"uint256","name":"burns","type":"uint256"},{"internalType":"uint256","name":"maxSupply","type":"uint256"},{"internalType":"uint256","name":"eonExchangeAmt","type":"uint256"}],"internalType":"struct RAW.TypeInfo","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApproved","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"typeId","type":"uint256"}],"name":"migrate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"migrated","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"typeId","type":"uint256"},{"internalType":"uint256","name":"qty","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"originalRaw","outputs":[{"internalType":"contract IRAWoriginal","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"removeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_eon","type":"address"},{"internalType":"address","name":"_originalRaw","type":"address"}],"name":"setContracts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"typeId","type":"uint256"},{"internalType":"uint256","name":"exchangeAmt","type":"uint256"}],"name":"setExchangeAmt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_paused","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"typeId","type":"uint256"},{"internalType":"uint256","name":"maxSupply","type":"uint256"}],"name":"setType","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"traitData","outputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"png","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"typeId","type":"uint256"},{"internalType":"uint256","name":"mintQty","type":"uint256"},{"internalType":"uint256","name":"burnQty","type":"uint256"}],"name":"updateMintBurns","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"updateOriginAccess","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"typeId","type":"uint256"},{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"png","type":"string"}],"internalType":"struct RAW.Image","name":"image","type":"tuple"}],"name":"uploadImage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"typeId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b506002805460ff19169055620000266200003e565b600980546001600160a01b0319163317905562000124565b60025460ff16156200006d5760405162461bcd60e51b81526004016200006490620000bc565b60405180910390fd5b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258620000a33390565b604051620000b2919062000114565b60405180910390a1565b60208082528101620000eb81601081526f14185d5cd8589b194e881c185d5cd95960821b602082015260400190565b92915050565b60006001600160a01b038216620000eb565b6200010e81620000f1565b82525050565b60208101620000eb828462000103565b61335280620001346000396000f3fe608060405234801561001057600080fd5b50600436106101d95760003560e01c80637d26c78c11610104578063d8952a49116100a2578063e985e9c511610071578063e985e9c514610443578063f242432a14610471578063f2fde38b14610484578063f6bb451f1461049757600080fd5b8063d8952a49146103f7578063de9375f21461040a578063e79df0d11461041d578063e7d3fe6b1461043057600080fd5b80639ca0f29b116100de5780639ca0f29b14610375578063a22cb46514610395578063a389783e146103a8578063c4994180146103e457600080fd5b80637d26c78c146103285780638da5cb5b1461033b5780638e05da331461035557600080fd5b80632eb2c2d61161017c5780635c975abb1161014b5780635c975abb146102d757806370480275146102e257806373ac0e54146102f5578063749388c41461031557600080fd5b80632eb2c2d61461028b5780633ac702661461029e578063454b0608146102b15780634ee6dc99146102c457600080fd5b806316c38b3c116101b857806316c38b3c146102475780631785f53c1461025c578063229a3fdd1461026f5780632c678c641461028257600080fd5b8062fdd58e146101de57806301ffc9a7146102075780630e89341c14610227575b600080fd5b6101f16101ec366004611f33565b6104b8565b6040516101fe9190611f78565b60405180910390f35b61021a610215366004611fa1565b6105b2565b6040516101fe9190611fd2565b61023a610235366004611fe0565b61064b565b6040516101fe919061205f565b61025a61025536600461208a565b610823565b005b61025a61026a3660046120ab565b61087b565b61025a61027d3660046120ab565b6108b3565b6101f1600a5481565b61025a610299366004612268565b61095f565b61025a6102ac366004612331565b610c4c565b61025a6102bf366004611fe0565b610cc3565b61025a6102d2366004612353565b610e4c565b60025460ff1661021a565b61025a6102f03660046120ab565b610f05565b610308610303366004612416565b610f40565b6040516101fe91906124dc565b61025a6103233660046124ed565b61104c565b61025a61033636600461254e565b6110d5565b6009546001600160a01b03165b6040516101fe91906125a5565b600854610368906001600160a01b031681565b6040516101fe91906125d2565b610388610383366004611fe0565b6111c4565b6040516101fe9190612625565b61025a6103a3366004612633565b61125f565b61021a6103b6366004612666565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b61025a6103f2366004612331565b6112ce565b61025a610405366004612666565b61132a565b600954610348906001600160a01b031681565b600754610368906001600160a01b031681565b61025a61043e3660046124ed565b611387565b61021a610451366004612666565b600160209081526000928352604080842090915290825290205460ff1681565b61025a61047f366004612699565b611457565b61025a6104923660046120ab565b6116b2565b6104aa6104a5366004611fe0565b611703565b6040516101fe9291906126f3565b3360009081526005602052604081205460ff16806104fb575032600090815260066020526040902054436801000000000000000090910467ffffffffffffffff16105b6105205760405162461bcd60e51b81526004016105179061274a565b60405180910390fd5b3360009081526005602052604090205460ff168061056c57506001600160a01b038316600090815260066020526040902054436801000000000000000090910467ffffffffffffffff16105b6105885760405162461bcd60e51b81526004016105179061275a565b506001600160a01b0382166000908152602081815260408083208484529091529020545b92915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316148061061557507fd9b67a26000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b806105ac5750506001600160e01b0319167f0e89341c000000000000000000000000000000000000000000000000000000001490565b60008181526003602052604090206002015460609061067c5760405162461bcd60e51b8152600401610517906127ed565b60008281526004602052604080822081518083019092528054829082906106a290612813565b80601f01602080910402602001604051908101604052809291908181526020018280546106ce90612813565b801561071b5780601f106106f05761010080835404028352916020019161071b565b820191906000526020600020905b8154815290600101906020018083116106fe57829003601f168201915b5050505050815260200160018201805461073490612813565b80601f016020809104026020016040519081016040528092919081815260200182805461076090612813565b80156107ad5780601f10610782576101008083540402835291602001916107ad565b820191906000526020600020905b81548152906001019060200180831161079057829003601f168201915b5050505050815250509050600081600001516107d06107cb8661182f565b6119c6565b6040516020016107e192919061285c565b60405160208183030381529060405290506107fb816119c6565b60405160200161080b91906129f7565b60405160208183030381529060405292505050919050565b6009546001600160a01b0316331461083a57600080fd5b6007546001600160a01b03166108625760405162461bcd60e51b815260040161051790612a59565b801561087357610870611b83565b50565b610870611bf2565b6009546001600160a01b0316331461089257600080fd5b6001600160a01b03166000908152600560205260409020805460ff19169055565b3360009081526005602052604090205460ff166108e25760405162461bcd60e51b815260040161051790612a9b565b60408051808201825267ffffffffffffffff428116825243811660208084019182526001600160a01b039095166000908152600690955292909320905181549251841668010000000000000000027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909316931692909217179055565b6001600160a01b038516600090815260066020526040902054436801000000000000000090910467ffffffffffffffff16106109ad5760405162461bcd60e51b815260040161051790612add565b8251825181146109cf5760405162461bcd60e51b815260040161051790612b1f565b3360009081526005602052604090205460ff16610a3c57336001600160a01b0387161480610a2057506001600160a01b038616600090815260016020908152604080832033845290915290205460ff165b610a3c5760405162461bcd60e51b815260040161051790612b61565b60005b81811015610b11576000858281518110610a5b57610a5b612b71565b602002602001015190506000858381518110610a7957610a79612b71565b60200260200101519050806000808b6001600160a01b03166001600160a01b0316815260200190815260200160002060008481526020019081526020016000206000828254610ac89190612b9d565b90915550506001600160a01b03881660009081526020818152604080832085845290915281208054839290610afe908490612bb4565b909155505060019092019150610a3f9050565b50846001600160a01b0316866001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610b61929190612bcc565b60405180910390a46001600160a01b0385163b15610c1b576040517fbc197c8100000000000000000000000000000000000000000000000000000000808252906001600160a01b0387169063bc197c8190610bc89033908b908a908a908a90600401612bf1565b6020604051808303816000875af1158015610be7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0b9190612c5c565b6001600160e01b03191614610c28565b6001600160a01b03851615155b610c445760405162461bcd60e51b815260040161051790612caf565b505050505050565b6009546001600160a01b03163314610c6357600080fd5b81610c805760405162461bcd60e51b815260040161051790612cf1565b600082815260036020526040902054811015610cae5760405162461bcd60e51b815260040161051790612d33565b60009182526003602052604090912060020155565b60025460ff1615610ce65760405162461bcd60e51b815260040161051790612d75565b6008546040517f2b04e8400000000000000000000000000000000000000000000000000000000081526000916001600160a01b031690632b04e84090610d329033908690600401612d85565b6020604051808303816000875af1158015610d51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d759190612dab565b905060008111610d975760405162461bcd60e51b815260040161051790612dfe565b6008546040517f749388c40000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063749388c490610de490859085903390600401612e0e565b600060405180830381600087803b158015610dfe57600080fd5b505af1158015610e12573d6000803e3d6000fd5b50505050610e3133838360405180602001604052806000815250611c45565b80600a6000828254610e439190612bb4565b90915550505050565b3360009081526005602052604090205460ff16610e7b5760405162461bcd60e51b815260040161051790612e68565b60008381526003602052604081208054849290610e99908490612bb4565b909155505060008381526003602052604081206001018054839290610ebf908490612bb4565b90915550506040517f069c51469578032eacdf4c08d21e7515ba36f52e0456901cce8073899c3934ed90610ef890859085908590612e78565b60405180910390a1505050565b6009546001600160a01b03163314610f1c57600080fd5b6001600160a01b03166000908152600560205260409020805460ff19166001179055565b81518151606091908114610f665760405162461bcd60e51b815260040161051790612b1f565b835167ffffffffffffffff811115610f8057610f806120cc565b604051908082528060200260200182016040528015610fa9578160200160208202803683370190505b50915060005b8181101561104457600080868381518110610fcc57610fcc612b71565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020600085838151811061100857611008612b71565b602002602001015181526020019081526020016000205483828151811061103157611031612b71565b6020908102919091010152600101610faf565b505092915050565b60025460ff161561106f5760405162461bcd60e51b815260040161051790612d75565b3360009081526005602052604090205460ff1661109e5760405162461bcd60e51b815260040161051790612ed2565b600083815260036020526040812060010180548492906110bf908490612bb4565b909155506110d09050818484611da7565b505050565b6009546001600160a01b031633146110ec57600080fd5b60408051808201909152806111018380612ee2565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509082525060209081019061114a90840184612ee2565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050848152600460209081526040909120835180519193506111a4928492910190611e59565b5060208281015180516111bd9260018501920190611e59565b5050505050565b6111ef6040518060800160405280600081526020016000815260200160008152602001600081525090565b60008281526003602052604090206002015461121d5760405162461bcd60e51b8152600401610517906127ed565b50600090815260036020818152604092839020835160808101855281548152600182015492810192909252600281015493820193909352910154606082015290565b3360008181526001602090815260408083206001600160a01b038716808552925291829020805460ff191685151517905590519091907f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31906112c2908590611fd2565b60405180910390a35050565b6009546001600160a01b031633146112e557600080fd5b6000828152600360205260409020600201546113135760405162461bcd60e51b815260040161051790612f8e565b600091825260036020819052604090922090910155565b6009546001600160a01b0316331461134157600080fd5b600780546001600160a01b039384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560088054929093169116179055565b60025460ff16156113aa5760405162461bcd60e51b815260040161051790612d75565b3360009081526005602052604090205460ff166113d95760405162461bcd60e51b815260040161051790612ed2565b6000838152600360205260409020600281015490546113f9908490612bb4565b11156114175760405162461bcd60e51b815260040161051790612fd0565b60008381526003602052604081208054849290611435908490612bb4565b925050819055506110d081848460405180602001604052806000815250611c45565b6001600160a01b038516600090815260066020526040902054436801000000000000000090910467ffffffffffffffff16106114a55760405162461bcd60e51b815260040161051790612add565b3360009081526005602052604090205460ff1661151257336001600160a01b03861614806114f657506001600160a01b038516600090815260016020908152604080832033845290915290205460ff165b6115125760405162461bcd60e51b815260040161051790612b61565b6001600160a01b03851660009081526020818152604080832086845290915281208054849290611543908490612b9d565b90915550506001600160a01b03841660009081526020818152604080832086845290915281208054849290611579908490612bb4565b92505081905550836001600160a01b0316856001600160a01b0316336001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6286866040516115cf929190612fe0565b60405180910390a46001600160a01b0384163b15611689576040517ff23a6e6100000000000000000000000000000000000000000000000000000000808252906001600160a01b0386169063f23a6e61906116369033908a90899089908990600401612fee565b6020604051808303816000875af1158015611655573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116799190612c5c565b6001600160e01b03191614611696565b6001600160a01b03841615155b6111bd5760405162461bcd60e51b815260040161051790612caf565b6009546001600160a01b031633146116c957600080fd5b600980547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60046020526000908152604090208054819061171e90612813565b80601f016020809104026020016040519081016040528092919081815260200182805461174a90612813565b80156117975780601f1061176c57610100808354040283529160200191611797565b820191906000526020600020905b81548152906001019060200180831161177a57829003601f168201915b5050505050908060010180546117ac90612813565b80601f01602080910402602001604051908101604052809291908181526020018280546117d890612813565b80156118255780601f106117fa57610100808354040283529160200191611825565b820191906000526020600020905b81548152906001019060200180831161180857829003601f168201915b5050505050905082565b6060600061197d6004600085815260200190815260200160002060405180604001604052908160008201805461186490612813565b80601f016020809104026020016040519081016040528092919081815260200182805461189090612813565b80156118dd5780601f106118b2576101008083540402835291602001916118dd565b820191906000526020600020905b8154815290600101906020018083116118c057829003601f168201915b505050505081526020016001820180546118f690612813565b80601f016020809104026020016040519081016040528092919081815260200182805461192290612813565b801561196f5780601f106119445761010080835404028352916020019161196f565b820191906000526020600020905b81548152906001019060200180831161195257829003601f168201915b505050505081525050611e2c565b60405160200161198d9190613035565b6040516020818303038152906040529050806040516020016119af919061303f565b604051602081830303815290604052915050919050565b60608151600014156119e657505060408051602081019091526000815290565b60006040518060600160405280604081526020016132dd6040913990506000600384516002611a159190612bb4565b611a1f9190613171565b611a2a906004613185565b90506000611a39826020612bb4565b67ffffffffffffffff811115611a5157611a516120cc565b6040519080825280601f01601f191660200182016040528015611a7b576020820181803683370190505b509050818152600183018586518101602084015b81831015611ae95760039283018051603f601282901c811687015160f890811b8552600c83901c8216880151811b6001860152600683901c8216880151811b60028601529116860151901b93820193909352600401611a8f565b600389510660018114611b035760028114611b4d57611b75565b7f3d3d0000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe830152611b75565b7f3d000000000000000000000000000000000000000000000000000000000000006000198301525b509398975050505050505050565b60025460ff1615611ba65760405162461bcd60e51b815260040161051790612d75565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611bdb3390565b604051611be891906125a5565b60405180910390a1565b60025460ff16611c145760405162461bcd60e51b8152600401610517906131d6565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33611bdb565b6001600160a01b03841660009081526020818152604080832086845290915281208054849290611c76908490612bb4565b90915550506040516001600160a01b0385169060009033907fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6290611cbd9088908890612fe0565b60405180910390a46001600160a01b0384163b15611d78576040517ff23a6e6100000000000000000000000000000000000000000000000000000000808252906001600160a01b0386169063f23a6e6190611d25903390600090899089908990600401612fee565b6020604051808303816000875af1158015611d44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d689190612c5c565b6001600160e01b03191614611d85565b6001600160a01b03841615155b611da15760405162461bcd60e51b815260040161051790612caf565b50505050565b6001600160a01b03831660009081526020818152604080832085845290915281208054839290611dd8908490612b9d565b90915550506040516000906001600160a01b0385169033907fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6290611e1f9087908790612fe0565b60405180910390a4505050565b60608160200151604051602001611e4391906131e6565b6040516020818303038152906040529050919050565b828054611e6590612813565b90600052602060002090601f016020900481019282611e875760008555611ecd565b82601f10611ea057805160ff1916838001178555611ecd565b82800160010185558215611ecd579182015b82811115611ecd578251825591602001919060010190611eb2565b50611ed9929150611edd565b5090565b5b80821115611ed95760008155600101611ede565b60006001600160a01b0382166105ac565b611f0c81611ef2565b811461087057600080fd5b80356105ac81611f03565b80611f0c565b80356105ac81611f22565b60008060408385031215611f4957611f49600080fd5b6000611f558585611f17565b9250506020611f6685828601611f28565b9150509250929050565b805b82525050565b602081016105ac8284611f70565b6001600160e01b03198116611f0c565b80356105ac81611f86565b600060208284031215611fb657611fb6600080fd5b6000611fc28484611f96565b949350505050565b801515611f72565b602081016105ac8284611fca565b600060208284031215611ff557611ff5600080fd5b6000611fc28484611f28565b60005b8381101561201c578181015183820152602001612004565b83811115611da15750506000910152565b6000612037825190565b80845260208401935061204e818560208601612001565b601f01601f19169290920192915050565b60208082528101612070818461202d565b9392505050565b801515611f0c565b80356105ac81612077565b60006020828403121561209f5761209f600080fd5b6000611fc2848461207f565b6000602082840312156120c0576120c0600080fd5b6000611fc28484611f17565b634e487b7160e01b600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff82111715612108576121086120cc565b6040525050565b600061211a60405190565b905061212682826120e2565b919050565b600067ffffffffffffffff821115612145576121456120cc565b5060209081020190565b600061216261215d8461212b565b61210f565b8381529050602080820190840283018581111561218157612181600080fd5b835b818110156121a3576121958782611f28565b835260209283019201612183565b5050509392505050565b600082601f8301126121c1576121c1600080fd5b8135611fc284826020860161214f565b600067ffffffffffffffff8211156121eb576121eb6120cc565b601f19601f83011660200192915050565b82818337506000910152565b600061221661215d846121d1565b90508281526020810184848401111561223157612231600080fd5b61223c8482856121fc565b509392505050565b600082601f83011261225857612258600080fd5b8135611fc2848260208601612208565b600080600080600060a0868803121561228357612283600080fd5b600061228f8888611f17565b95505060206122a088828901611f17565b945050604086013567ffffffffffffffff8111156122c0576122c0600080fd5b6122cc888289016121ad565b935050606086013567ffffffffffffffff8111156122ec576122ec600080fd5b6122f8888289016121ad565b925050608086013567ffffffffffffffff81111561231857612318600080fd5b61232488828901612244565b9150509295509295909350565b6000806040838503121561234757612347600080fd5b6000611f558585611f28565b60008060006060848603121561236b5761236b600080fd5b60006123778686611f28565b935050602061238886828701611f28565b925050604061239986828701611f28565b9150509250925092565b60006123b161215d8461212b565b838152905060208082019084028301858111156123d0576123d0600080fd5b835b818110156121a3576123e48782611f17565b8352602092830192016123d2565b600082601f83011261240657612406600080fd5b8135611fc28482602086016123a3565b6000806040838503121561242c5761242c600080fd5b823567ffffffffffffffff81111561244657612446600080fd5b612452858286016123f2565b925050602083013567ffffffffffffffff81111561247257612472600080fd5b611f66858286016121ad565b6124888282611f70565b5060200190565b60200190565b600061249f825190565b808452602093840193830160005b828110156124d25781516124c1878261247e565b9650506020820191506001016124ad565b5093949350505050565b602080825281016120708184612495565b60008060006060848603121561250557612505600080fd5b60006125118686611f28565b935050602061252286828701611f28565b925050604061239986828701611f17565b60006040828403121561254857612548600080fd5b50919050565b6000806040838503121561256457612564600080fd5b60006125708585611f28565b925050602083013567ffffffffffffffff81111561259057612590600080fd5b611f6685828601612533565b611f7281611ef2565b602081016105ac828461259c565b60006105ac82611ef2565b60006105ac826125b3565b611f72816125be565b602081016105ac82846125c9565b80516125ec8382611f70565b5060208101516125ff6020840182611f70565b5060408101516126126040840182611f70565b5060608101516110d06060840182611f70565b608081016105ac82846125e0565b6000806040838503121561264957612649600080fd5b60006126558585611f17565b9250506020611f668582860161207f565b6000806040838503121561267c5761267c600080fd5b60006126888585611f17565b9250506020611f6685828601611f17565b600080600080600060a086880312156126b4576126b4600080fd5b60006126c08888611f17565b95505060206126d188828901611f17565b94505060406126e288828901611f28565b93505060606122f888828901611f28565b60408082528101612704818561202d565b90508181036020830152611fc2818461202d565b60158152602081017f596f757220747279696e672074686520636865617400000000000000000000008152905061248f565b602080825281016105ac81612718565b602080825281016105ac81603981527f6e6f20636865636b696e672062616c616e636520696e207468652073616d652060208201527f626c6f636b2069742773206265696e67206d6f64696669656400000000000000604082015260600190565b600c8152602081017f696e76616c6964207479706500000000000000000000000000000000000000008152905061248f565b602080825281016105ac816127bb565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061282757607f821691505b60208210811415612548576125486127fd565b6000612844825190565b612852818560208601612001565b9290920192915050565b7f7b226e616d65223a2022000000000000000000000000000000000000000000008152600a0161288c818461283a565b7f222c20226465736372697074696f6e223a20225261772050797468656173207281527f65736f7572636573202d20416c6c20746865206d6574616461746120616e642060208201527f696d61676573206172652067656e65726174656420616e642073746f7265642060408201527f31303025206f6e2d636861696e2e204e6f20495046532e204e4f204150492e2060608201527f4a7573742074686520457468657265756d20626c6f636b636861696e2e222c2060808201527f22696d616765223a2022646174613a696d6167652f7376672b786d6c3b62617360a08201527f6536342c0000000000000000000000000000000000000000000000000000000060c082015260c40190506129a2818361283a565b7f222c202261747472696275746573223a205b5d0000000000000000000000000081527f7d00000000000000000000000000000000000000000000000000000000000000601382019081529150601401612070565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c0000008152601d016105ac818361283a565b60118152602081017f436f6e747261637473206e6f74207365740000000000000000000000000000008152905061248f565b602080825281016105ac81612a27565b60198152602081017f4f6e6c792061646d696e732063616e2063616c6c2074686973000000000000008152905061248f565b602080825281016105ac81612a69565b600e8152602081017f6e6f206f76657277726974696e670000000000000000000000000000000000008152905061248f565b602080825281016105ac81612aab565b600f8152602081017f4c454e4754485f4d49534d4154434800000000000000000000000000000000008152905061248f565b602080825281016105ac81612aed565b600e8152602081017f4e4f545f415554484f52495a45440000000000000000000000000000000000008152905061248f565b602080825281016105ac81612b2f565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082821015612baf57612baf612b87565b500390565b60008219821115612bc757612bc7612b87565b500190565b60408082528101612bdd8185612495565b90508181036020830152611fc28184612495565b60a08101612bff828861259c565b612c0c602083018761259c565b8181036040830152612c1e8186612495565b90508181036060830152612c328185612495565b90508181036080830152612c46818461202d565b979650505050505050565b80516105ac81611f86565b600060208284031215612c7157612c71600080fd5b6000611fc28484612c51565b60108152602081017f554e534146455f524543495049454e54000000000000000000000000000000008152905061248f565b602080825281016105ac81612c7d565b60128152602081017f5479706549642063616e6e6f74206265203000000000000000000000000000008152905061248f565b602080825281016105ac81612cbf565b60128152602081017f6d617820737570706c7920746f6f206c6f7700000000000000000000000000008152905061248f565b602080825281016105ac81612d01565b60108152602081017f5061757361626c653a20706175736564000000000000000000000000000000008152905061248f565b602080825281016105ac81612d43565b60408101612d93828561259c565b6120706020830184611f70565b80516105ac81611f22565b600060208284031215612dc057612dc0600080fd5b6000611fc28484612da0565b60148152602081017f6e6f20746f6b656e7320746f206d6967726174650000000000000000000000008152905061248f565b602080825281016105ac81612dcc565b60608101612e1c8286611f70565b612e296020830185611f70565b611fc2604083018461259c565b600b8152602081017f4f6e6c792041646d696e730000000000000000000000000000000000000000008152905061248f565b602080825281016105ac81612e36565b60608101612e868286611f70565b612e936020830185611f70565b611fc26040830184611f70565b600b8152602081017f4f6e6c792061646d696e730000000000000000000000000000000000000000008152905061248f565b602080825281016105ac81612ea0565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe136859003018112612f1b57612f1b600080fd5b8301915050803567ffffffffffffffff811115612f3a57612f3a600080fd5b602082019150600181023603821315612f5557612f55600080fd5b9250929050565b601d8152602081017f74686973207479706520686173206e6f74206265656e207365742075700000008152905061248f565b602080825281016105ac81612f5c565b60108152602081017f4d6178537570706c79204d696e746564000000000000000000000000000000008152905061248f565b602080825281016105ac81612f9e565b60408101612d938285611f70565b60a08101612ffc828861259c565b613009602083018761259c565b6130166040830186611f70565b6130236060830185611f70565b8181036080830152612c46818461202d565b6105ac818361283a565b7f3c7376672069643d227261775265736f7572636573222077696474683d22313081527f302522206865696768743d2231303025222076657273696f6e3d22312e31222060208201527f76696577426f783d223020302036342036342220786d6c6e733d22687474703a60408201527f2f2f7777772e77332e6f72672f323030302f7376672220786d6c6e733a786c6960608201527f6e6b3d22687474703a2f2f7777772e77332e6f72672f313939392f786c696e6b60808201527f223e00000000000000000000000000000000000000000000000000000000000060a082015260a20161312d818361283a565b7f3c2f7376673e000000000000000000000000000000000000000000000000000081529050600681016105ac565b634e487b7160e01b600052601260045260246000fd5b6000826131805761318061315b565b500490565b600081600019048311821515161561319f5761319f612b87565b500290565b60148152602081017f5061757361626c653a206e6f74207061757365640000000000000000000000008152905061248f565b602080825281016105ac816131a4565b7f3c696d61676520783d22302220793d2230222077696474683d2236342220686581527f696768743d2236342220696d6167652d72656e646572696e673d22706978656c60208201527f6174656422207072657365727665417370656374526174696f3d22784d69645960408201527f4d69642220786c696e6b3a687265663d22646174613a696d6167652f706e673b60608201527f6261736536342c0000000000000000000000000000000000000000000000000060808201526087016132ae818361283a565b7f222f3e000000000000000000000000000000000000000000000000000000000081529050600381016105ac56fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa26469706673582212202f836dbd0f22ec518941d0775d2ae1fb7ba4131d2b476783a196c96c763fcfa064736f6c634300080b0033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101d95760003560e01c80637d26c78c11610104578063d8952a49116100a2578063e985e9c511610071578063e985e9c514610443578063f242432a14610471578063f2fde38b14610484578063f6bb451f1461049757600080fd5b8063d8952a49146103f7578063de9375f21461040a578063e79df0d11461041d578063e7d3fe6b1461043057600080fd5b80639ca0f29b116100de5780639ca0f29b14610375578063a22cb46514610395578063a389783e146103a8578063c4994180146103e457600080fd5b80637d26c78c146103285780638da5cb5b1461033b5780638e05da331461035557600080fd5b80632eb2c2d61161017c5780635c975abb1161014b5780635c975abb146102d757806370480275146102e257806373ac0e54146102f5578063749388c41461031557600080fd5b80632eb2c2d61461028b5780633ac702661461029e578063454b0608146102b15780634ee6dc99146102c457600080fd5b806316c38b3c116101b857806316c38b3c146102475780631785f53c1461025c578063229a3fdd1461026f5780632c678c641461028257600080fd5b8062fdd58e146101de57806301ffc9a7146102075780630e89341c14610227575b600080fd5b6101f16101ec366004611f33565b6104b8565b6040516101fe9190611f78565b60405180910390f35b61021a610215366004611fa1565b6105b2565b6040516101fe9190611fd2565b61023a610235366004611fe0565b61064b565b6040516101fe919061205f565b61025a61025536600461208a565b610823565b005b61025a61026a3660046120ab565b61087b565b61025a61027d3660046120ab565b6108b3565b6101f1600a5481565b61025a610299366004612268565b61095f565b61025a6102ac366004612331565b610c4c565b61025a6102bf366004611fe0565b610cc3565b61025a6102d2366004612353565b610e4c565b60025460ff1661021a565b61025a6102f03660046120ab565b610f05565b610308610303366004612416565b610f40565b6040516101fe91906124dc565b61025a6103233660046124ed565b61104c565b61025a61033636600461254e565b6110d5565b6009546001600160a01b03165b6040516101fe91906125a5565b600854610368906001600160a01b031681565b6040516101fe91906125d2565b610388610383366004611fe0565b6111c4565b6040516101fe9190612625565b61025a6103a3366004612633565b61125f565b61021a6103b6366004612666565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b61025a6103f2366004612331565b6112ce565b61025a610405366004612666565b61132a565b600954610348906001600160a01b031681565b600754610368906001600160a01b031681565b61025a61043e3660046124ed565b611387565b61021a610451366004612666565b600160209081526000928352604080842090915290825290205460ff1681565b61025a61047f366004612699565b611457565b61025a6104923660046120ab565b6116b2565b6104aa6104a5366004611fe0565b611703565b6040516101fe9291906126f3565b3360009081526005602052604081205460ff16806104fb575032600090815260066020526040902054436801000000000000000090910467ffffffffffffffff16105b6105205760405162461bcd60e51b81526004016105179061274a565b60405180910390fd5b3360009081526005602052604090205460ff168061056c57506001600160a01b038316600090815260066020526040902054436801000000000000000090910467ffffffffffffffff16105b6105885760405162461bcd60e51b81526004016105179061275a565b506001600160a01b0382166000908152602081815260408083208484529091529020545b92915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316148061061557507fd9b67a26000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b806105ac5750506001600160e01b0319167f0e89341c000000000000000000000000000000000000000000000000000000001490565b60008181526003602052604090206002015460609061067c5760405162461bcd60e51b8152600401610517906127ed565b60008281526004602052604080822081518083019092528054829082906106a290612813565b80601f01602080910402602001604051908101604052809291908181526020018280546106ce90612813565b801561071b5780601f106106f05761010080835404028352916020019161071b565b820191906000526020600020905b8154815290600101906020018083116106fe57829003601f168201915b5050505050815260200160018201805461073490612813565b80601f016020809104026020016040519081016040528092919081815260200182805461076090612813565b80156107ad5780601f10610782576101008083540402835291602001916107ad565b820191906000526020600020905b81548152906001019060200180831161079057829003601f168201915b5050505050815250509050600081600001516107d06107cb8661182f565b6119c6565b6040516020016107e192919061285c565b60405160208183030381529060405290506107fb816119c6565b60405160200161080b91906129f7565b60405160208183030381529060405292505050919050565b6009546001600160a01b0316331461083a57600080fd5b6007546001600160a01b03166108625760405162461bcd60e51b815260040161051790612a59565b801561087357610870611b83565b50565b610870611bf2565b6009546001600160a01b0316331461089257600080fd5b6001600160a01b03166000908152600560205260409020805460ff19169055565b3360009081526005602052604090205460ff166108e25760405162461bcd60e51b815260040161051790612a9b565b60408051808201825267ffffffffffffffff428116825243811660208084019182526001600160a01b039095166000908152600690955292909320905181549251841668010000000000000000027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909316931692909217179055565b6001600160a01b038516600090815260066020526040902054436801000000000000000090910467ffffffffffffffff16106109ad5760405162461bcd60e51b815260040161051790612add565b8251825181146109cf5760405162461bcd60e51b815260040161051790612b1f565b3360009081526005602052604090205460ff16610a3c57336001600160a01b0387161480610a2057506001600160a01b038616600090815260016020908152604080832033845290915290205460ff165b610a3c5760405162461bcd60e51b815260040161051790612b61565b60005b81811015610b11576000858281518110610a5b57610a5b612b71565b602002602001015190506000858381518110610a7957610a79612b71565b60200260200101519050806000808b6001600160a01b03166001600160a01b0316815260200190815260200160002060008481526020019081526020016000206000828254610ac89190612b9d565b90915550506001600160a01b03881660009081526020818152604080832085845290915281208054839290610afe908490612bb4565b909155505060019092019150610a3f9050565b50846001600160a01b0316866001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610b61929190612bcc565b60405180910390a46001600160a01b0385163b15610c1b576040517fbc197c8100000000000000000000000000000000000000000000000000000000808252906001600160a01b0387169063bc197c8190610bc89033908b908a908a908a90600401612bf1565b6020604051808303816000875af1158015610be7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0b9190612c5c565b6001600160e01b03191614610c28565b6001600160a01b03851615155b610c445760405162461bcd60e51b815260040161051790612caf565b505050505050565b6009546001600160a01b03163314610c6357600080fd5b81610c805760405162461bcd60e51b815260040161051790612cf1565b600082815260036020526040902054811015610cae5760405162461bcd60e51b815260040161051790612d33565b60009182526003602052604090912060020155565b60025460ff1615610ce65760405162461bcd60e51b815260040161051790612d75565b6008546040517f2b04e8400000000000000000000000000000000000000000000000000000000081526000916001600160a01b031690632b04e84090610d329033908690600401612d85565b6020604051808303816000875af1158015610d51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d759190612dab565b905060008111610d975760405162461bcd60e51b815260040161051790612dfe565b6008546040517f749388c40000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063749388c490610de490859085903390600401612e0e565b600060405180830381600087803b158015610dfe57600080fd5b505af1158015610e12573d6000803e3d6000fd5b50505050610e3133838360405180602001604052806000815250611c45565b80600a6000828254610e439190612bb4565b90915550505050565b3360009081526005602052604090205460ff16610e7b5760405162461bcd60e51b815260040161051790612e68565b60008381526003602052604081208054849290610e99908490612bb4565b909155505060008381526003602052604081206001018054839290610ebf908490612bb4565b90915550506040517f069c51469578032eacdf4c08d21e7515ba36f52e0456901cce8073899c3934ed90610ef890859085908590612e78565b60405180910390a1505050565b6009546001600160a01b03163314610f1c57600080fd5b6001600160a01b03166000908152600560205260409020805460ff19166001179055565b81518151606091908114610f665760405162461bcd60e51b815260040161051790612b1f565b835167ffffffffffffffff811115610f8057610f806120cc565b604051908082528060200260200182016040528015610fa9578160200160208202803683370190505b50915060005b8181101561104457600080868381518110610fcc57610fcc612b71565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020600085838151811061100857611008612b71565b602002602001015181526020019081526020016000205483828151811061103157611031612b71565b6020908102919091010152600101610faf565b505092915050565b60025460ff161561106f5760405162461bcd60e51b815260040161051790612d75565b3360009081526005602052604090205460ff1661109e5760405162461bcd60e51b815260040161051790612ed2565b600083815260036020526040812060010180548492906110bf908490612bb4565b909155506110d09050818484611da7565b505050565b6009546001600160a01b031633146110ec57600080fd5b60408051808201909152806111018380612ee2565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509082525060209081019061114a90840184612ee2565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050848152600460209081526040909120835180519193506111a4928492910190611e59565b5060208281015180516111bd9260018501920190611e59565b5050505050565b6111ef6040518060800160405280600081526020016000815260200160008152602001600081525090565b60008281526003602052604090206002015461121d5760405162461bcd60e51b8152600401610517906127ed565b50600090815260036020818152604092839020835160808101855281548152600182015492810192909252600281015493820193909352910154606082015290565b3360008181526001602090815260408083206001600160a01b038716808552925291829020805460ff191685151517905590519091907f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31906112c2908590611fd2565b60405180910390a35050565b6009546001600160a01b031633146112e557600080fd5b6000828152600360205260409020600201546113135760405162461bcd60e51b815260040161051790612f8e565b600091825260036020819052604090922090910155565b6009546001600160a01b0316331461134157600080fd5b600780546001600160a01b039384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560088054929093169116179055565b60025460ff16156113aa5760405162461bcd60e51b815260040161051790612d75565b3360009081526005602052604090205460ff166113d95760405162461bcd60e51b815260040161051790612ed2565b6000838152600360205260409020600281015490546113f9908490612bb4565b11156114175760405162461bcd60e51b815260040161051790612fd0565b60008381526003602052604081208054849290611435908490612bb4565b925050819055506110d081848460405180602001604052806000815250611c45565b6001600160a01b038516600090815260066020526040902054436801000000000000000090910467ffffffffffffffff16106114a55760405162461bcd60e51b815260040161051790612add565b3360009081526005602052604090205460ff1661151257336001600160a01b03861614806114f657506001600160a01b038516600090815260016020908152604080832033845290915290205460ff165b6115125760405162461bcd60e51b815260040161051790612b61565b6001600160a01b03851660009081526020818152604080832086845290915281208054849290611543908490612b9d565b90915550506001600160a01b03841660009081526020818152604080832086845290915281208054849290611579908490612bb4565b92505081905550836001600160a01b0316856001600160a01b0316336001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6286866040516115cf929190612fe0565b60405180910390a46001600160a01b0384163b15611689576040517ff23a6e6100000000000000000000000000000000000000000000000000000000808252906001600160a01b0386169063f23a6e61906116369033908a90899089908990600401612fee565b6020604051808303816000875af1158015611655573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116799190612c5c565b6001600160e01b03191614611696565b6001600160a01b03841615155b6111bd5760405162461bcd60e51b815260040161051790612caf565b6009546001600160a01b031633146116c957600080fd5b600980547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60046020526000908152604090208054819061171e90612813565b80601f016020809104026020016040519081016040528092919081815260200182805461174a90612813565b80156117975780601f1061176c57610100808354040283529160200191611797565b820191906000526020600020905b81548152906001019060200180831161177a57829003601f168201915b5050505050908060010180546117ac90612813565b80601f01602080910402602001604051908101604052809291908181526020018280546117d890612813565b80156118255780601f106117fa57610100808354040283529160200191611825565b820191906000526020600020905b81548152906001019060200180831161180857829003601f168201915b5050505050905082565b6060600061197d6004600085815260200190815260200160002060405180604001604052908160008201805461186490612813565b80601f016020809104026020016040519081016040528092919081815260200182805461189090612813565b80156118dd5780601f106118b2576101008083540402835291602001916118dd565b820191906000526020600020905b8154815290600101906020018083116118c057829003601f168201915b505050505081526020016001820180546118f690612813565b80601f016020809104026020016040519081016040528092919081815260200182805461192290612813565b801561196f5780601f106119445761010080835404028352916020019161196f565b820191906000526020600020905b81548152906001019060200180831161195257829003601f168201915b505050505081525050611e2c565b60405160200161198d9190613035565b6040516020818303038152906040529050806040516020016119af919061303f565b604051602081830303815290604052915050919050565b60608151600014156119e657505060408051602081019091526000815290565b60006040518060600160405280604081526020016132dd6040913990506000600384516002611a159190612bb4565b611a1f9190613171565b611a2a906004613185565b90506000611a39826020612bb4565b67ffffffffffffffff811115611a5157611a516120cc565b6040519080825280601f01601f191660200182016040528015611a7b576020820181803683370190505b509050818152600183018586518101602084015b81831015611ae95760039283018051603f601282901c811687015160f890811b8552600c83901c8216880151811b6001860152600683901c8216880151811b60028601529116860151901b93820193909352600401611a8f565b600389510660018114611b035760028114611b4d57611b75565b7f3d3d0000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe830152611b75565b7f3d000000000000000000000000000000000000000000000000000000000000006000198301525b509398975050505050505050565b60025460ff1615611ba65760405162461bcd60e51b815260040161051790612d75565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611bdb3390565b604051611be891906125a5565b60405180910390a1565b60025460ff16611c145760405162461bcd60e51b8152600401610517906131d6565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33611bdb565b6001600160a01b03841660009081526020818152604080832086845290915281208054849290611c76908490612bb4565b90915550506040516001600160a01b0385169060009033907fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6290611cbd9088908890612fe0565b60405180910390a46001600160a01b0384163b15611d78576040517ff23a6e6100000000000000000000000000000000000000000000000000000000808252906001600160a01b0386169063f23a6e6190611d25903390600090899089908990600401612fee565b6020604051808303816000875af1158015611d44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d689190612c5c565b6001600160e01b03191614611d85565b6001600160a01b03841615155b611da15760405162461bcd60e51b815260040161051790612caf565b50505050565b6001600160a01b03831660009081526020818152604080832085845290915281208054839290611dd8908490612b9d565b90915550506040516000906001600160a01b0385169033907fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6290611e1f9087908790612fe0565b60405180910390a4505050565b60608160200151604051602001611e4391906131e6565b6040516020818303038152906040529050919050565b828054611e6590612813565b90600052602060002090601f016020900481019282611e875760008555611ecd565b82601f10611ea057805160ff1916838001178555611ecd565b82800160010185558215611ecd579182015b82811115611ecd578251825591602001919060010190611eb2565b50611ed9929150611edd565b5090565b5b80821115611ed95760008155600101611ede565b60006001600160a01b0382166105ac565b611f0c81611ef2565b811461087057600080fd5b80356105ac81611f03565b80611f0c565b80356105ac81611f22565b60008060408385031215611f4957611f49600080fd5b6000611f558585611f17565b9250506020611f6685828601611f28565b9150509250929050565b805b82525050565b602081016105ac8284611f70565b6001600160e01b03198116611f0c565b80356105ac81611f86565b600060208284031215611fb657611fb6600080fd5b6000611fc28484611f96565b949350505050565b801515611f72565b602081016105ac8284611fca565b600060208284031215611ff557611ff5600080fd5b6000611fc28484611f28565b60005b8381101561201c578181015183820152602001612004565b83811115611da15750506000910152565b6000612037825190565b80845260208401935061204e818560208601612001565b601f01601f19169290920192915050565b60208082528101612070818461202d565b9392505050565b801515611f0c565b80356105ac81612077565b60006020828403121561209f5761209f600080fd5b6000611fc2848461207f565b6000602082840312156120c0576120c0600080fd5b6000611fc28484611f17565b634e487b7160e01b600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff82111715612108576121086120cc565b6040525050565b600061211a60405190565b905061212682826120e2565b919050565b600067ffffffffffffffff821115612145576121456120cc565b5060209081020190565b600061216261215d8461212b565b61210f565b8381529050602080820190840283018581111561218157612181600080fd5b835b818110156121a3576121958782611f28565b835260209283019201612183565b5050509392505050565b600082601f8301126121c1576121c1600080fd5b8135611fc284826020860161214f565b600067ffffffffffffffff8211156121eb576121eb6120cc565b601f19601f83011660200192915050565b82818337506000910152565b600061221661215d846121d1565b90508281526020810184848401111561223157612231600080fd5b61223c8482856121fc565b509392505050565b600082601f83011261225857612258600080fd5b8135611fc2848260208601612208565b600080600080600060a0868803121561228357612283600080fd5b600061228f8888611f17565b95505060206122a088828901611f17565b945050604086013567ffffffffffffffff8111156122c0576122c0600080fd5b6122cc888289016121ad565b935050606086013567ffffffffffffffff8111156122ec576122ec600080fd5b6122f8888289016121ad565b925050608086013567ffffffffffffffff81111561231857612318600080fd5b61232488828901612244565b9150509295509295909350565b6000806040838503121561234757612347600080fd5b6000611f558585611f28565b60008060006060848603121561236b5761236b600080fd5b60006123778686611f28565b935050602061238886828701611f28565b925050604061239986828701611f28565b9150509250925092565b60006123b161215d8461212b565b838152905060208082019084028301858111156123d0576123d0600080fd5b835b818110156121a3576123e48782611f17565b8352602092830192016123d2565b600082601f83011261240657612406600080fd5b8135611fc28482602086016123a3565b6000806040838503121561242c5761242c600080fd5b823567ffffffffffffffff81111561244657612446600080fd5b612452858286016123f2565b925050602083013567ffffffffffffffff81111561247257612472600080fd5b611f66858286016121ad565b6124888282611f70565b5060200190565b60200190565b600061249f825190565b808452602093840193830160005b828110156124d25781516124c1878261247e565b9650506020820191506001016124ad565b5093949350505050565b602080825281016120708184612495565b60008060006060848603121561250557612505600080fd5b60006125118686611f28565b935050602061252286828701611f28565b925050604061239986828701611f17565b60006040828403121561254857612548600080fd5b50919050565b6000806040838503121561256457612564600080fd5b60006125708585611f28565b925050602083013567ffffffffffffffff81111561259057612590600080fd5b611f6685828601612533565b611f7281611ef2565b602081016105ac828461259c565b60006105ac82611ef2565b60006105ac826125b3565b611f72816125be565b602081016105ac82846125c9565b80516125ec8382611f70565b5060208101516125ff6020840182611f70565b5060408101516126126040840182611f70565b5060608101516110d06060840182611f70565b608081016105ac82846125e0565b6000806040838503121561264957612649600080fd5b60006126558585611f17565b9250506020611f668582860161207f565b6000806040838503121561267c5761267c600080fd5b60006126888585611f17565b9250506020611f6685828601611f17565b600080600080600060a086880312156126b4576126b4600080fd5b60006126c08888611f17565b95505060206126d188828901611f17565b94505060406126e288828901611f28565b93505060606122f888828901611f28565b60408082528101612704818561202d565b90508181036020830152611fc2818461202d565b60158152602081017f596f757220747279696e672074686520636865617400000000000000000000008152905061248f565b602080825281016105ac81612718565b602080825281016105ac81603981527f6e6f20636865636b696e672062616c616e636520696e207468652073616d652060208201527f626c6f636b2069742773206265696e67206d6f64696669656400000000000000604082015260600190565b600c8152602081017f696e76616c6964207479706500000000000000000000000000000000000000008152905061248f565b602080825281016105ac816127bb565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061282757607f821691505b60208210811415612548576125486127fd565b6000612844825190565b612852818560208601612001565b9290920192915050565b7f7b226e616d65223a2022000000000000000000000000000000000000000000008152600a0161288c818461283a565b7f222c20226465736372697074696f6e223a20225261772050797468656173207281527f65736f7572636573202d20416c6c20746865206d6574616461746120616e642060208201527f696d61676573206172652067656e65726174656420616e642073746f7265642060408201527f31303025206f6e2d636861696e2e204e6f20495046532e204e4f204150492e2060608201527f4a7573742074686520457468657265756d20626c6f636b636861696e2e222c2060808201527f22696d616765223a2022646174613a696d6167652f7376672b786d6c3b62617360a08201527f6536342c0000000000000000000000000000000000000000000000000000000060c082015260c40190506129a2818361283a565b7f222c202261747472696275746573223a205b5d0000000000000000000000000081527f7d00000000000000000000000000000000000000000000000000000000000000601382019081529150601401612070565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c0000008152601d016105ac818361283a565b60118152602081017f436f6e747261637473206e6f74207365740000000000000000000000000000008152905061248f565b602080825281016105ac81612a27565b60198152602081017f4f6e6c792061646d696e732063616e2063616c6c2074686973000000000000008152905061248f565b602080825281016105ac81612a69565b600e8152602081017f6e6f206f76657277726974696e670000000000000000000000000000000000008152905061248f565b602080825281016105ac81612aab565b600f8152602081017f4c454e4754485f4d49534d4154434800000000000000000000000000000000008152905061248f565b602080825281016105ac81612aed565b600e8152602081017f4e4f545f415554484f52495a45440000000000000000000000000000000000008152905061248f565b602080825281016105ac81612b2f565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082821015612baf57612baf612b87565b500390565b60008219821115612bc757612bc7612b87565b500190565b60408082528101612bdd8185612495565b90508181036020830152611fc28184612495565b60a08101612bff828861259c565b612c0c602083018761259c565b8181036040830152612c1e8186612495565b90508181036060830152612c328185612495565b90508181036080830152612c46818461202d565b979650505050505050565b80516105ac81611f86565b600060208284031215612c7157612c71600080fd5b6000611fc28484612c51565b60108152602081017f554e534146455f524543495049454e54000000000000000000000000000000008152905061248f565b602080825281016105ac81612c7d565b60128152602081017f5479706549642063616e6e6f74206265203000000000000000000000000000008152905061248f565b602080825281016105ac81612cbf565b60128152602081017f6d617820737570706c7920746f6f206c6f7700000000000000000000000000008152905061248f565b602080825281016105ac81612d01565b60108152602081017f5061757361626c653a20706175736564000000000000000000000000000000008152905061248f565b602080825281016105ac81612d43565b60408101612d93828561259c565b6120706020830184611f70565b80516105ac81611f22565b600060208284031215612dc057612dc0600080fd5b6000611fc28484612da0565b60148152602081017f6e6f20746f6b656e7320746f206d6967726174650000000000000000000000008152905061248f565b602080825281016105ac81612dcc565b60608101612e1c8286611f70565b612e296020830185611f70565b611fc2604083018461259c565b600b8152602081017f4f6e6c792041646d696e730000000000000000000000000000000000000000008152905061248f565b602080825281016105ac81612e36565b60608101612e868286611f70565b612e936020830185611f70565b611fc26040830184611f70565b600b8152602081017f4f6e6c792061646d696e730000000000000000000000000000000000000000008152905061248f565b602080825281016105ac81612ea0565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe136859003018112612f1b57612f1b600080fd5b8301915050803567ffffffffffffffff811115612f3a57612f3a600080fd5b602082019150600181023603821315612f5557612f55600080fd5b9250929050565b601d8152602081017f74686973207479706520686173206e6f74206265656e207365742075700000008152905061248f565b602080825281016105ac81612f5c565b60108152602081017f4d6178537570706c79204d696e746564000000000000000000000000000000008152905061248f565b602080825281016105ac81612f9e565b60408101612d938285611f70565b60a08101612ffc828861259c565b613009602083018761259c565b6130166040830186611f70565b6130236060830185611f70565b8181036080830152612c46818461202d565b6105ac818361283a565b7f3c7376672069643d227261775265736f7572636573222077696474683d22313081527f302522206865696768743d2231303025222076657273696f6e3d22312e31222060208201527f76696577426f783d223020302036342036342220786d6c6e733d22687474703a60408201527f2f2f7777772e77332e6f72672f323030302f7376672220786d6c6e733a786c6960608201527f6e6b3d22687474703a2f2f7777772e77332e6f72672f313939392f786c696e6b60808201527f223e00000000000000000000000000000000000000000000000000000000000060a082015260a20161312d818361283a565b7f3c2f7376673e000000000000000000000000000000000000000000000000000081529050600681016105ac565b634e487b7160e01b600052601260045260246000fd5b6000826131805761318061315b565b500490565b600081600019048311821515161561319f5761319f612b87565b500290565b60148152602081017f5061757361626c653a206e6f74207061757365640000000000000000000000008152905061248f565b602080825281016105ac816131a4565b7f3c696d61676520783d22302220793d2230222077696474683d2236342220686581527f696768743d2236342220696d6167652d72656e646572696e673d22706978656c60208201527f6174656422207072657365727665417370656374526174696f3d22784d69645960408201527f4d69642220786c696e6b3a687265663d22646174613a696d6167652f706e673b60608201527f6261736536342c0000000000000000000000000000000000000000000000000060808201526087016132ae818361283a565b7f222f3e000000000000000000000000000000000000000000000000000000000081529050600381016105ac56fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa26469706673582212202f836dbd0f22ec518941d0775d2ae1fb7ba4131d2b476783a196c96c763fcfa064736f6c634300080b0033

Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.