ETH Price: $3,802.13 (+6.52%)

Contract

0xacbD6089ac5d2dE7f49B53269416DbaeA4da9f27
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Age:1H
Amount:Between 0-1
Reset Filter

Transaction Hash
Method
Block
From
To

There are no matching entries

Update your filters to view other transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ZooOfNeuralAutomata

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 1000000 runs

Other Settings:
default evmVersion
File 1 of 6 : ZooOfNeuralAutomata.sol
/* SPDX-License-Identifier: MIT
          _____                   _______                   _____                    _____          
         /\    \                 /::\    \                 /\    \                  /\    \         
        /::\    \               /::::\    \               /::\____\                /::\    \        
        \:::\    \             /::::::\    \             /::::|   |               /::::\    \       
         \:::\    \           /::::::::\    \           /:::::|   |              /::::::\    \      
          \:::\    \         /:::/~~\:::\    \         /::::::|   |             /:::/\:::\    \     
           \:::\    \       /:::/    \:::\    \       /:::/|::|   |            /:::/__\:::\    \    
            \:::\    \     /:::/    / \:::\    \     /:::/ |::|   |           /::::\   \:::\    \   
             \:::\    \   /:::/____/   \:::\____\   /:::/  |::|   | _____    /::::::\   \:::\    \  
              \:::\    \ |:::|    |     |:::|    | /:::/   |::|   |/\    \  /:::/\:::\   \:::\    \ 
_______________\:::\____\|:::|____|     |:::|    |/:: /    |::|   /::\____\/:::/  \:::\   \:::\____\
\::::::::::::::::::/    / \:::\    \   /:::/    / \::/    /|::|  /:::/    /\::/    \:::\  /:::/    /
 \::::::::::::::::/____/   \:::\    \ /:::/    /   \/____/ |::| /:::/    /  \/____/ \:::\/:::/    / 
  \:::\~~~~\~~~~~~          \:::\    /:::/    /            |::|/:::/    /            \::::::/    /  
   \:::\    \                \:::\__/:::/    /             |::::::/    /              \::::/    /   
    \:::\    \                \::::::::/    /              |:::::/    /               /:::/    /    
     \:::\    \                \::::::/    /               |::::/    /               /:::/    /     
      \:::\    \                \::::/    /                /:::/    /               /:::/    /      
       \:::\____\                \::/____/                /:::/    /               /:::/    /       
        \::/    /                 ~~                      \::/    /                \::/    /        
         \/____/                                           \/____/                  \/____/                                                                                                             
*/

pragma solidity 0.8.15;

import {IZooOfNeuralAutomata} from "./interfaces/IZooOfNeuralAutomata.sol";
import {INeuralAutomataEngine, NCAParams} from "./interfaces/INeuralAutomataEngine.sol";
import {ERC1155} from "../lib/solmate/src/tokens/ERC1155.sol";
import {Owned} from "../lib/solmate/src/auth/Owned.sol";
import {Base64} from "./utils/Base64.sol";

contract ZooOfNeuralAutomata is IZooOfNeuralAutomata, ERC1155, Owned {

    string public name = "Zoo of Neural Automata";
    string public symbol = "ZoNA";
    string public contractURI;

    address public engine;
 
    mapping(uint256 => NCAParams) public tokenParams;
    mapping(uint256 => address) public tokenMinter;
    mapping(uint256 => address) public tokenBurner;
    mapping(uint256 => string) public tokenBaseURI;
    mapping(uint256 => bool) public tokenFrozen;

    modifier onlyUnfrozen(uint256 _id){
        require(!tokenFrozen[_id]);
        _;
    }

    constructor(
        address _engine, 
        string memory _contractURI
    ) Owned(msg.sender) {
        engine = _engine;
        contractURI = _contractURI;
    }

    function newToken(
        uint256 _id,
        NCAParams memory _params, 
        address _minter, 
        address _burner,
        string memory _baseURI
    ) external onlyOwner onlyUnfrozen(_id) {
        tokenParams[_id] = _params;
        tokenMinter[_id] = _minter;
        tokenBurner[_id] = _burner;
        tokenBaseURI[_id] = _baseURI;
    }

    function updateParams(
        uint256 _id, 
        NCAParams memory _params
    ) external onlyOwner onlyUnfrozen(_id) {
        tokenParams[_id] = _params;
    }

    function updateMinter(
        uint256 _id, 
        address _minter
    ) external onlyOwner onlyUnfrozen(_id) {
        tokenMinter[_id] = _minter;
    }

    function updateBurner(
        uint256 _id, 
        address _burner
    ) external onlyOwner onlyUnfrozen(_id) {
        tokenBurner[_id] = _burner;
    }

    function updateBaseURI(
        uint256 _id, 
        string memory _baseURI
    ) external onlyOwner onlyUnfrozen(_id) {
        tokenBaseURI[_id] = _baseURI;
    }

    function freeze(uint256 _id) external onlyOwner {
        tokenFrozen[_id] = true;
    }

    function updateEngine(address _engine) external onlyOwner  {
        engine = _engine;
    }

    function updateContractURI(string memory _contractURI) external onlyOwner  {
        contractURI = _contractURI;
    } 

    function mint(
        address _to,
        uint256 _id,
        uint256 _amount
    ) external {
        require(msg.sender == tokenMinter[_id]);
        _mint(_to, _id, _amount, "");
    }

    function burn(
        address _from,
        uint256 _id,
        uint256 _amount
    ) external {
        require(msg.sender == tokenBurner[_id]);
        _burn(_from, _id, _amount);
    }

    function uri(uint256 id) public view override returns (string memory){
        require(tokenMinter[id] != address(0));
        return string.concat(
            "data:application/json;base64,",
            Base64.encode(
                abi.encodePacked(
                    string.concat(
                        tokenBaseURI[id],
                        "\"",
                        INeuralAutomataEngine(engine).page(tokenParams[id]),
                        "\"}"
                    )
                )
            )
        );
    }

}

File 2 of 6 : Owned.sol
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.8.0;

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

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

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

    address public owner;

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

        _;
    }

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

    constructor(address _owner) {
        owner = _owner;

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

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

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

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

File 3 of 6 : 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/transmissions11/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)) public 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 safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata 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[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) public virtual {
        require(ids.length == amounts.length, "LENGTH_MISMATCH");

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

        // Storing these outside the loop saves ~15 gas per iteration.
        uint256 id;
        uint256 amount;

        for (uint256 i = 0; i < ids.length; ) {
            id = ids[i];
            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[] calldata owners, uint256[] calldata ids)
        public
        view
        virtual
        returns (uint256[] memory balances)
    {
        require(owners.length == 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 < owners.length; ++i) {
                balances[i] = balanceOf[owners[i]][ids[i]];
            }
        }
    }

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

    function supportsInterface(bytes4 interfaceId) public view 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 virtual {
        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 virtual {
        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 virtual {
        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 virtual {
        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/transmissions11/solmate/blob/main/src/tokens/ERC1155.sol)
abstract contract ERC1155TokenReceiver {
    function onERC1155Received(
        address,
        address,
        uint256,
        uint256,
        bytes calldata
    ) external virtual returns (bytes4) {
        return ERC1155TokenReceiver.onERC1155Received.selector;
    }

    function onERC1155BatchReceived(
        address,
        address,
        uint256[] calldata,
        uint256[] calldata,
        bytes calldata
    ) external virtual returns (bytes4) {
        return ERC1155TokenReceiver.onERC1155BatchReceived.selector;
    }
}

File 4 of 6 : INeuralAutomataEngine.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.15;

struct NCAParams {
    string seed;
    string bg;
    string fg1;
    string fg2;
    string matrix;
    string activation;
    string rand;
    string mods;
}

interface INeuralAutomataEngine {
    function baseScript() external view returns(string memory);

    function parameters(NCAParams memory _params) external pure returns(string memory);

    function p5() external view returns(string memory);

    function script(NCAParams memory _params) external view returns(string memory);

    function page(NCAParams memory _params) external view returns(string memory);
}

File 5 of 6 : IZooOfNeuralAutomata.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.15;

import {NCAParams} from "./INeuralAutomataEngine.sol";

interface IZooOfNeuralAutomata {

    function updateEngine(address _engine) external;

    function updateContractURI(string memory _contractURI) external;

    function updateParams(uint256 _id, NCAParams memory _params) external;

    function updateMinter(uint256 _id, address _minter) external;

    function updateBurner(uint256 _id, address _burner) external;

    function updateBaseURI(uint256 _id, string memory _baseURI) external;

    function freeze(uint256 _id) external;

    function newToken(
        uint256 _id,
        NCAParams memory _params, 
        address _minter, 
        address _burner,
        string memory _baseURI
    ) external;

    function mint(
        address _to,
        uint256 _id,
        uint256 _amount
    ) external;

    function burn(
        address _from,
        uint256 _id,
        uint256 _amount
    ) external;
    
}

File 6 of 6 : Base64.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.15;

library Base64 {
    string internal constant _TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

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

      string memory table = _TABLE;
      string memory result = new string(4 * ((data.length + 2) / 3));

      assembly {
          let tablePtr := add(table, 1)
          let resultPtr := add(result, 32)

          for {
              let dataPtr := data
              let endPtr := add(data, mload(data))
          } lt(dataPtr, endPtr) {

          } {
              dataPtr := add(dataPtr, 3)
              let input := mload(dataPtr)
              mstore8(resultPtr, mload(add(tablePtr, and(shr(18, input), 0x3F))))
              resultPtr := add(resultPtr, 1) 
              mstore8(resultPtr, mload(add(tablePtr, and(shr(12, input), 0x3F))))
              resultPtr := add(resultPtr, 1) 
              mstore8(resultPtr, mload(add(tablePtr, and(shr(6, input), 0x3F))))
              resultPtr := add(resultPtr, 1) 
              mstore8(resultPtr, mload(add(tablePtr, and(input, 0x3F))))
              resultPtr := add(resultPtr, 1) 
          }
          switch mod(mload(data), 3)
          case 1 {
              mstore8(sub(resultPtr, 1), 0x3d)
              mstore8(sub(resultPtr, 2), 0x3d)
          }
          case 2 {
              mstore8(sub(resultPtr, 1), 0x3d)
          }
      }
      return result;
  }
}

Settings
{
  "remappings": [
    "ds-test/=lib/solmate/lib/ds-test/src/",
    "ethfs/=lib/ethfs/",
    "ethier/=lib/ethfs/packages/contracts/lib/ethier/",
    "forge-std/=lib/forge-std/src/",
    "openzeppelin/=lib/ethfs/packages/contracts/lib/openzeppelin-contracts/contracts/",
    "solady/=lib/ethfs/packages/contracts/lib/solady/src/",
    "solmate/=lib/solmate/src/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 1000000
  },
  "metadata": {
    "bytecodeHash": "none"
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "london",
  "libraries": {
    "src/utils/Base64.sol": {
      "Base64": "0x38edb18902ed19d6eb3f532233a0246183273bf9"
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_engine","type":"address"},{"internalType":"string","name":"_contractURI","type":"string"}],"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":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"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":"_from","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"engine","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"freeze","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"components":[{"internalType":"string","name":"seed","type":"string"},{"internalType":"string","name":"bg","type":"string"},{"internalType":"string","name":"fg1","type":"string"},{"internalType":"string","name":"fg2","type":"string"},{"internalType":"string","name":"matrix","type":"string"},{"internalType":"string","name":"activation","type":"string"},{"internalType":"string","name":"rand","type":"string"},{"internalType":"string","name":"mods","type":"string"}],"internalType":"struct NCAParams","name":"_params","type":"tuple"},{"internalType":"address","name":"_minter","type":"address"},{"internalType":"address","name":"_burner","type":"address"},{"internalType":"string","name":"_baseURI","type":"string"}],"name":"newToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenBaseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenBurner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenFrozen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenMinter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenParams","outputs":[{"internalType":"string","name":"seed","type":"string"},{"internalType":"string","name":"bg","type":"string"},{"internalType":"string","name":"fg1","type":"string"},{"internalType":"string","name":"fg2","type":"string"},{"internalType":"string","name":"matrix","type":"string"},{"internalType":"string","name":"activation","type":"string"},{"internalType":"string","name":"rand","type":"string"},{"internalType":"string","name":"mods","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"string","name":"_baseURI","type":"string"}],"name":"updateBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"address","name":"_burner","type":"address"}],"name":"updateBurner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_contractURI","type":"string"}],"name":"updateContractURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_engine","type":"address"}],"name":"updateEngine","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"address","name":"_minter","type":"address"}],"name":"updateMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"components":[{"internalType":"string","name":"seed","type":"string"},{"internalType":"string","name":"bg","type":"string"},{"internalType":"string","name":"fg1","type":"string"},{"internalType":"string","name":"fg2","type":"string"},{"internalType":"string","name":"matrix","type":"string"},{"internalType":"string","name":"activation","type":"string"},{"internalType":"string","name":"rand","type":"string"},{"internalType":"string","name":"mods","type":"string"}],"internalType":"struct NCAParams","name":"_params","type":"tuple"}],"name":"updateParams","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

60c0604052601660809081527f5a6f6f206f66204e657572616c204175746f6d6174610000000000000000000060a0526003906200003e9082620001b3565b50604080518082019091526004808252635a6f4e4160e01b602083015290620000689082620001b3565b503480156200007657600080fd5b506040516200367a3803806200367a83398101604081905262000099916200027f565b600280546001600160a01b0319163390811790915560405181906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600680546001600160a01b0319166001600160a01b0384161790556005620001058282620001b3565b5050506200037f565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200013957607f821691505b6020821081036200015a57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001ae57600081815260208120601f850160051c81016020861015620001895750805b601f850160051c820191505b81811015620001aa5782815560010162000195565b5050505b505050565b81516001600160401b03811115620001cf57620001cf6200010e565b620001e781620001e0845462000124565b8462000160565b602080601f8311600181146200021f5760008415620002065750858301515b600019600386901b1c1916600185901b178555620001aa565b600085815260208120601f198616915b8281101562000250578886015182559484019460019091019084016200022f565b50858210156200026f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600080604083850312156200029357600080fd5b82516001600160a01b0381168114620002ab57600080fd5b602084810151919350906001600160401b0380821115620002cb57600080fd5b818601915086601f830112620002e057600080fd5b815181811115620002f557620002f56200010e565b604051601f8201601f19908116603f011681019083821181831017156200032057620003206200010e565b8160405282815289868487010111156200033957600080fd5b600093505b828410156200035d57848401860151818501870152928501926200033e565b828411156200036f5760008684830101525b8096505050505050509250929050565b6132eb806200038f6000396000f3fe608060405234801561001057600080fd5b50600436106101ce5760003560e01c80637e5b1e2411610104578063bd15092f116100a2578063e985e9c511610071578063e985e9c51461048a578063f242432a146104b8578063f2fde38b146104cb578063f5298aca146104de57600080fd5b8063bd15092f1461043c578063c9d4623f1461044f578063d7a78db81461046f578063e8a3d4851461048257600080fd5b80638da5cb5b116100de5780638da5cb5b146103ee57806395d89b411461040e578063a22cb46514610416578063b87152371461042957600080fd5b80637e5b1e2414610392578063817234fa146103a55780638b1cc4f4146103b857600080fd5b80632eb2c2d611610171578063513f99e71161014b578063513f99e7146102da57806359c9ec74146102fd578063754263e1146103105780637c57d9471461033757600080fd5b80632eb2c2d6146102945780634656d75a146102a75780634e1273f4146102ba57600080fd5b806306fdde03116101ad57806306fdde03146102465780630777ca3d1461025b5780630e89341c1461026e578063156e29f61461028157600080fd5b8062fdd58e146101d357806301ffc9a71461020e57806303409d6b14610231575b600080fd5b6101fb6101e1366004612260565b600060208181529281526040808220909352908152205481565b6040519081526020015b60405180910390f35b61022161021c3660046122bb565b6104f1565b6040519015158152602001610205565b61024461023f3660046122df565b6105d6565b005b61024e6106ce565b6040516102059190612381565b6102446102693660046122df565b61075c565b61024e61027c366004612394565b61084f565b61024461028f3660046123ad565b610a6e565b6102446102a236600461246e565b610abe565b61024e6102b5366004612394565b610eaf565b6102cd6102c8366004612529565b610ec8565b6040516102059190612595565b6102216102e8366004612394565b600b6020526000908152604090205460ff1681565b61024461030b36600461286b565b61103f565b61032361031e366004612394565b611216565b6040516102059897969594939291906128fa565b61036d610345366004612394565b60086020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610205565b6102446103a03660046129a9565b611696565b6102446103b33660046129e6565b611727565b61036d6103c6366004612394565b60096020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60025461036d9073ffffffffffffffffffffffffffffffffffffffff1681565b61024e6117e4565b610244610424366004612a2d565b6117f1565b610244610437366004612a69565b611888565b61024461044a366004612aa6565b6119e1565b60065461036d9073ffffffffffffffffffffffffffffffffffffffff1681565b61024461047d366004612394565b611aa9565b61024e611b63565b610221610498366004612ac1565b600160209081526000928352604080842090915290825290205460ff1681565b6102446104c6366004612aeb565b611b70565b6102446104d9366004612aa6565b611e6e565b6102446104ec3660046123ad565b611f60565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316148061058457507fd9b67a26000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b806105d057507f0e89341c000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60025473ffffffffffffffffffffffffffffffffffffffff16331461065c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064015b60405180910390fd5b6000828152600b6020526040902054829060ff161561067a57600080fd5b5060009182526008602052604090912080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091179055565b600380546106db90612b63565b80601f016020809104026020016040519081016040528092919081815260200182805461070790612b63565b80156107545780601f1061072957610100808354040283529160200191610754565b820191906000526020600020905b81548152906001019060200180831161073757829003601f168201915b505050505081565b60025473ffffffffffffffffffffffffffffffffffffffff1633146107dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610653565b6000828152600b6020526040902054829060ff16156107fb57600080fd5b5060009182526009602052604090912080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091179055565b60008181526008602052604090205460609073ffffffffffffffffffffffffffffffffffffffff1661088057600080fd5b6000828152600a6020908152604080832060065460079093529281902090517f7ba4965b0000000000000000000000000000000000000000000000000000000081527338edb18902ed19d6eb3f532233a0246183273bf9936312496a1b93909273ffffffffffffffffffffffffffffffffffffffff90911691637ba4965b9161090b91600401612c51565b600060405180830381865afa158015610928573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261096e9190810190612d45565b60405160200161097f929190612db3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526109ba91602001612eb0565b6040516020818303038152906040526040518263ffffffff1660e01b81526004016109e59190612381565b600060405180830381865af4158015610a02573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610a489190810190612d45565b604051602001610a589190612ecc565b6040516020818303038152906040529050919050565b60008281526008602052604090205473ffffffffffffffffffffffffffffffffffffffff163314610a9e57600080fd5b610ab983838360405180602001604052806000815250611f9b565b505050565b848314610b27576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4c454e4754485f4d49534d4154434800000000000000000000000000000000006044820152606401610653565b3373ffffffffffffffffffffffffffffffffffffffff89161480610b7b575073ffffffffffffffffffffffffffffffffffffffff8816600090815260016020908152604080832033845290915290205460ff165b610be1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a45440000000000000000000000000000000000006044820152606401610653565b60008060005b87811015610cb657888882818110610c0157610c01612f11565b905060200201359250868682818110610c1c57610c1c612f11565b73ffffffffffffffffffffffffffffffffffffffff8e1660009081526020818152604080832089845282528220805493909102949094013595508593925090610c66908490612f6f565b909155505073ffffffffffffffffffffffffffffffffffffffff8a1660009081526020818152604080832086845290915281208054849290610ca9908490612f86565b9091555050600101610be7565b508873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8b8b8b8b604051610d319493929190612fed565b60405180910390a473ffffffffffffffffffffffffffffffffffffffff89163b15610e23576040517fbc197c81000000000000000000000000000000000000000000000000000000008082529073ffffffffffffffffffffffffffffffffffffffff8b169063bc197c8190610db89033908f908e908e908e908e908e908e90600401613068565b6020604051808303816000875af1158015610dd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dfb91906130ca565b7fffffffff000000000000000000000000000000000000000000000000000000001614610e3d565b73ffffffffffffffffffffffffffffffffffffffff891615155b610ea3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f554e534146455f524543495049454e54000000000000000000000000000000006044820152606401610653565b50505050505050505050565b600a60205260009081526040902080546106db90612b63565b6060838214610f33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4c454e4754485f4d49534d4154434800000000000000000000000000000000006044820152606401610653565b8367ffffffffffffffff811115610f4c57610f4c6125d9565b604051908082528060200260200182016040528015610f75578160200160208202803683370190505b50905060005b8481101561103657600080878784818110610f9857610f98612f11565b9050602002016020810190610fad9190612aa6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858584818110610ffb57610ffb612f11565b9050602002013581526020019081526020016000205482828151811061102357611023612f11565b6020908102919091010152600101610f7b565b50949350505050565b60025473ffffffffffffffffffffffffffffffffffffffff1633146110c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610653565b6000858152600b6020526040902054859060ff16156110de57600080fd5b6000868152600760205260409020855186919081906110fd908261312d565b5060208201516001820190611112908261312d565b5060408201516002820190611127908261312d565b506060820151600382019061113c908261312d565b5060808201516004820190611151908261312d565b5060a08201516005820190611166908261312d565b5060c0820151600682019061117b908261312d565b5060e08201516007820190611190908261312d565b5050506000868152600860209081526040808320805473ffffffffffffffffffffffffffffffffffffffff808a167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560098452828520805492891692909116919091179055600a909152902061120d838261312d565b50505050505050565b60076020526000908152604090208054819061123190612b63565b80601f016020809104026020016040519081016040528092919081815260200182805461125d90612b63565b80156112aa5780601f1061127f576101008083540402835291602001916112aa565b820191906000526020600020905b81548152906001019060200180831161128d57829003601f168201915b5050505050908060010180546112bf90612b63565b80601f01602080910402602001604051908101604052809291908181526020018280546112eb90612b63565b80156113385780601f1061130d57610100808354040283529160200191611338565b820191906000526020600020905b81548152906001019060200180831161131b57829003601f168201915b50505050509080600201805461134d90612b63565b80601f016020809104026020016040519081016040528092919081815260200182805461137990612b63565b80156113c65780601f1061139b576101008083540402835291602001916113c6565b820191906000526020600020905b8154815290600101906020018083116113a957829003601f168201915b5050505050908060030180546113db90612b63565b80601f016020809104026020016040519081016040528092919081815260200182805461140790612b63565b80156114545780601f1061142957610100808354040283529160200191611454565b820191906000526020600020905b81548152906001019060200180831161143757829003601f168201915b50505050509080600401805461146990612b63565b80601f016020809104026020016040519081016040528092919081815260200182805461149590612b63565b80156114e25780601f106114b7576101008083540402835291602001916114e2565b820191906000526020600020905b8154815290600101906020018083116114c557829003601f168201915b5050505050908060050180546114f790612b63565b80601f016020809104026020016040519081016040528092919081815260200182805461152390612b63565b80156115705780601f1061154557610100808354040283529160200191611570565b820191906000526020600020905b81548152906001019060200180831161155357829003601f168201915b50505050509080600601805461158590612b63565b80601f01602080910402602001604051908101604052809291908181526020018280546115b190612b63565b80156115fe5780601f106115d3576101008083540402835291602001916115fe565b820191906000526020600020905b8154815290600101906020018083116115e157829003601f168201915b50505050509080600701805461161390612b63565b80601f016020809104026020016040519081016040528092919081815260200182805461163f90612b63565b801561168c5780601f106116615761010080835404028352916020019161168c565b820191906000526020600020905b81548152906001019060200180831161166f57829003601f168201915b5050505050905088565b60025473ffffffffffffffffffffffffffffffffffffffff163314611717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610653565b6005611723828261312d565b5050565b60025473ffffffffffffffffffffffffffffffffffffffff1633146117a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610653565b6000828152600b6020526040902054829060ff16156117c657600080fd5b6000838152600a602052604090206117de838261312d565b50505050565b600480546106db90612b63565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b60025473ffffffffffffffffffffffffffffffffffffffff163314611909576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610653565b6000828152600b6020526040902054829060ff161561192757600080fd5b600083815260076020526040902082518391908190611946908261312d565b506020820151600182019061195b908261312d565b5060408201516002820190611970908261312d565b5060608201516003820190611985908261312d565b506080820151600482019061199a908261312d565b5060a082015160058201906119af908261312d565b5060c082015160068201906119c4908261312d565b5060e082015160078201906119d9908261312d565b505050505050565b60025473ffffffffffffffffffffffffffffffffffffffff163314611a62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610653565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60025473ffffffffffffffffffffffffffffffffffffffff163314611b2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610653565b6000908152600b6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b600580546106db90612b63565b3373ffffffffffffffffffffffffffffffffffffffff87161480611bc4575073ffffffffffffffffffffffffffffffffffffffff8616600090815260016020908152604080832033845290915290205460ff165b611c2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a45440000000000000000000000000000000000006044820152606401610653565b73ffffffffffffffffffffffffffffffffffffffff861660009081526020818152604080832087845290915281208054859290611c68908490612f6f565b909155505073ffffffffffffffffffffffffffffffffffffffff851660009081526020818152604080832087845290915281208054859290611cab908490612f86565b9091555050604080518581526020810185905273ffffffffffffffffffffffffffffffffffffffff808816929089169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a473ffffffffffffffffffffffffffffffffffffffff85163b15611dee576040517ff23a6e61000000000000000000000000000000000000000000000000000000008082529073ffffffffffffffffffffffffffffffffffffffff87169063f23a6e6190611d839033908b908a908a908a908a90600401613247565b6020604051808303816000875af1158015611da2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc691906130ca565b7fffffffff000000000000000000000000000000000000000000000000000000001614611e08565b73ffffffffffffffffffffffffffffffffffffffff851615155b6119d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f554e534146455f524543495049454e54000000000000000000000000000000006044820152606401610653565b60025473ffffffffffffffffffffffffffffffffffffffff163314611eef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610653565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831690811790915560405133907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350565b60008281526009602052604090205473ffffffffffffffffffffffffffffffffffffffff163314611f9057600080fd5b610ab9838383612199565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020818152604080832086845290915281208054849290611fd9908490612f86565b9091555050604080518481526020810184905273ffffffffffffffffffffffffffffffffffffffff86169160009133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a473ffffffffffffffffffffffffffffffffffffffff84163b15612119576040517ff23a6e61000000000000000000000000000000000000000000000000000000008082529073ffffffffffffffffffffffffffffffffffffffff86169063f23a6e61906120ae903390600090899089908990600401613299565b6020604051808303816000875af11580156120cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120f191906130ca565b7fffffffff000000000000000000000000000000000000000000000000000000001614612133565b73ffffffffffffffffffffffffffffffffffffffff841615155b6117de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f554e534146455f524543495049454e54000000000000000000000000000000006044820152606401610653565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208181526040808320858452909152812080548392906121d7908490612f6f565b9091555050604080518381526020810183905260009173ffffffffffffffffffffffffffffffffffffffff86169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461225b57600080fd5b919050565b6000806040838503121561227357600080fd5b61227c83612237565b946020939093013593505050565b7fffffffff00000000000000000000000000000000000000000000000000000000811681146122b857600080fd5b50565b6000602082840312156122cd57600080fd5b81356122d88161228a565b9392505050565b600080604083850312156122f257600080fd5b8235915061230260208401612237565b90509250929050565b60005b8381101561232657818101518382015260200161230e565b838111156117de5750506000910152565b6000815180845261234f81602086016020860161230b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006122d86020830184612337565b6000602082840312156123a657600080fd5b5035919050565b6000806000606084860312156123c257600080fd5b6123cb84612237565b95602085013595506040909401359392505050565b60008083601f8401126123f257600080fd5b50813567ffffffffffffffff81111561240a57600080fd5b6020830191508360208260051b850101111561242557600080fd5b9250929050565b60008083601f84011261243e57600080fd5b50813567ffffffffffffffff81111561245657600080fd5b60208301915083602082850101111561242557600080fd5b60008060008060008060008060a0898b03121561248a57600080fd5b61249389612237565b97506124a160208a01612237565b9650604089013567ffffffffffffffff808211156124be57600080fd5b6124ca8c838d016123e0565b909850965060608b01359150808211156124e357600080fd5b6124ef8c838d016123e0565b909650945060808b013591508082111561250857600080fd5b506125158b828c0161242c565b999c989b5096995094979396929594505050565b6000806000806040858703121561253f57600080fd5b843567ffffffffffffffff8082111561255757600080fd5b612563888389016123e0565b9096509450602087013591508082111561257c57600080fd5b50612589878288016123e0565b95989497509550505050565b6020808252825182820181905260009190848201906040850190845b818110156125cd578351835292840192918401916001016125b1565b50909695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610100810167ffffffffffffffff8111828210171561262c5761262c6125d9565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612679576126796125d9565b604052919050565b600067ffffffffffffffff82111561269b5761269b6125d9565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f8301126126d857600080fd5b81356126eb6126e682612681565b612632565b81815284602083860101111561270057600080fd5b816020850160208301376000918101602001919091529392505050565b6000610100828403121561273057600080fd5b612738612608565b9050813567ffffffffffffffff8082111561275257600080fd5b61275e858386016126c7565b8352602084013591508082111561277457600080fd5b612780858386016126c7565b6020840152604084013591508082111561279957600080fd5b6127a5858386016126c7565b604084015260608401359150808211156127be57600080fd5b6127ca858386016126c7565b606084015260808401359150808211156127e357600080fd5b6127ef858386016126c7565b608084015260a084013591508082111561280857600080fd5b612814858386016126c7565b60a084015260c084013591508082111561282d57600080fd5b612839858386016126c7565b60c084015260e084013591508082111561285257600080fd5b5061285f848285016126c7565b60e08301525092915050565b600080600080600060a0868803121561288357600080fd5b85359450602086013567ffffffffffffffff808211156128a257600080fd5b6128ae89838a0161271d565b95506128bc60408901612237565b94506128ca60608901612237565b935060808801359150808211156128e057600080fd5b506128ed888289016126c7565b9150509295509295909350565b600061010080835261290e8184018c612337565b90508281036020840152612922818b612337565b90508281036040840152612936818a612337565b9050828103606084015261294a8189612337565b9050828103608084015261295e8188612337565b905082810360a08401526129728187612337565b905082810360c08401526129868186612337565b905082810360e084015261299a8185612337565b9b9a5050505050505050505050565b6000602082840312156129bb57600080fd5b813567ffffffffffffffff8111156129d257600080fd5b6129de848285016126c7565b949350505050565b600080604083850312156129f957600080fd5b82359150602083013567ffffffffffffffff811115612a1757600080fd5b612a23858286016126c7565b9150509250929050565b60008060408385031215612a4057600080fd5b612a4983612237565b915060208301358015158114612a5e57600080fd5b809150509250929050565b60008060408385031215612a7c57600080fd5b82359150602083013567ffffffffffffffff811115612a9a57600080fd5b612a238582860161271d565b600060208284031215612ab857600080fd5b6122d882612237565b60008060408385031215612ad457600080fd5b612add83612237565b915061230260208401612237565b60008060008060008060a08789031215612b0457600080fd5b612b0d87612237565b9550612b1b60208801612237565b94506040870135935060608701359250608087013567ffffffffffffffff811115612b4557600080fd5b612b5189828a0161242c565b979a9699509497509295939492505050565b600181811c90821680612b7757607f821691505b602082108103612bb0577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60008154612bc381612b63565b808552602060018381168015612be05760018114612c1857612c46565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008516838901528284151560051b8901019550612c46565b866000528260002060005b85811015612c3e5781548a8201860152908301908401612c23565b890184019650505b505050505092915050565b602081526000610100806020840152612c6e610120840185612bb6565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080858303016040860152612ca68260018801612bb6565b915080858303016060860152612cbf8260028801612bb6565b915080858303016080860152612cd88260038801612bb6565b9150808583030160a0860152612cf18260048801612bb6565b9150808583030160c0860152612d0a8260058801612bb6565b9150808583030160e0860152612d238260068801612bb6565b915080858303018386015250612d3c8160078701612bb6565b95945050505050565b600060208284031215612d5757600080fd5b815167ffffffffffffffff811115612d6e57600080fd5b8201601f81018413612d7f57600080fd5b8051612d8d6126e682612681565b818152856020838501011115612da257600080fd5b612d3c82602083016020860161230b565b6000808454612dc181612b63565b60018281168015612dd95760018114612e0c57612e3b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0084168752821515830287019450612e3b565b8860005260208060002060005b85811015612e325781548a820152908401908201612e19565b50505082870194505b507f2200000000000000000000000000000000000000000000000000000000000000845286519250612e738382860160208a0161230b565b92820192612ea28185017f227d0000000000000000000000000000000000000000000000000000000000009052565b505050600301949350505050565b60008251612ec281846020870161230b565b9190910192915050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000815260008251612f0481601d85016020870161230b565b91909101601d0192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612f8157612f81612f40565b500390565b60008219821115612f9957612f99612f40565b500190565b81835260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115612fd057600080fd5b8260051b8083602087013760009401602001938452509192915050565b604081526000613001604083018688612f9e565b8281036020840152613014818587612f9e565b979650505050505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b600073ffffffffffffffffffffffffffffffffffffffff808b168352808a1660208401525060a060408301526130a260a08301888a612f9e565b82810360608401526130b5818789612f9e565b9050828103608084015261299a81858761301f565b6000602082840312156130dc57600080fd5b81516122d88161228a565b601f821115610ab957600081815260208120601f850160051c8101602086101561310e5750805b601f850160051c820191505b818110156119d95782815560010161311a565b815167ffffffffffffffff811115613147576131476125d9565b61315b816131558454612b63565b846130e7565b602080601f8311600181146131ae57600084156131785750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556119d9565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156131fb578886015182559484019460019091019084016131dc565b508582101561323757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600073ffffffffffffffffffffffffffffffffffffffff808916835280881660208401525085604083015284606083015260a0608083015261328d60a08301848661301f565b98975050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525084604083015283606083015260a0608083015261301460a083018461233756fea164736f6c634300080f000a000000000000000000000000f464bd061c88f0b19f88e76f76fc88d38d03ac940000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000017d646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c65794a755957316c496a6f69576d39764947396d4945356c64584a6862434242645852766257463059534973496d526c63324e796158423061573975496a6f6952486c75595731705932467362486b675a3256755a584a686447566b494746755a43426d64577873655342766269316a61474670626942755a5856795957776759325673624856735958496759585630623231686447456763484a765a334a6862584d675a6e4a7662534278645746784c6d563061434973496d6c745957646c496a6f696148523063484d364c79396e5958526c643246354c6e4270626d46305953356a624739315a43397063475a7a4c3146745545643652334e46546c59345554464e4d576474636e517a56326c4c544768305957394b5245704956564e475632317852314a79556b7072644577694c434a6c6548526c636d35686246397361573572496a6f696148523063484d364c793936623235684c6e64305a694a39000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101ce5760003560e01c80637e5b1e2411610104578063bd15092f116100a2578063e985e9c511610071578063e985e9c51461048a578063f242432a146104b8578063f2fde38b146104cb578063f5298aca146104de57600080fd5b8063bd15092f1461043c578063c9d4623f1461044f578063d7a78db81461046f578063e8a3d4851461048257600080fd5b80638da5cb5b116100de5780638da5cb5b146103ee57806395d89b411461040e578063a22cb46514610416578063b87152371461042957600080fd5b80637e5b1e2414610392578063817234fa146103a55780638b1cc4f4146103b857600080fd5b80632eb2c2d611610171578063513f99e71161014b578063513f99e7146102da57806359c9ec74146102fd578063754263e1146103105780637c57d9471461033757600080fd5b80632eb2c2d6146102945780634656d75a146102a75780634e1273f4146102ba57600080fd5b806306fdde03116101ad57806306fdde03146102465780630777ca3d1461025b5780630e89341c1461026e578063156e29f61461028157600080fd5b8062fdd58e146101d357806301ffc9a71461020e57806303409d6b14610231575b600080fd5b6101fb6101e1366004612260565b600060208181529281526040808220909352908152205481565b6040519081526020015b60405180910390f35b61022161021c3660046122bb565b6104f1565b6040519015158152602001610205565b61024461023f3660046122df565b6105d6565b005b61024e6106ce565b6040516102059190612381565b6102446102693660046122df565b61075c565b61024e61027c366004612394565b61084f565b61024461028f3660046123ad565b610a6e565b6102446102a236600461246e565b610abe565b61024e6102b5366004612394565b610eaf565b6102cd6102c8366004612529565b610ec8565b6040516102059190612595565b6102216102e8366004612394565b600b6020526000908152604090205460ff1681565b61024461030b36600461286b565b61103f565b61032361031e366004612394565b611216565b6040516102059897969594939291906128fa565b61036d610345366004612394565b60086020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610205565b6102446103a03660046129a9565b611696565b6102446103b33660046129e6565b611727565b61036d6103c6366004612394565b60096020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60025461036d9073ffffffffffffffffffffffffffffffffffffffff1681565b61024e6117e4565b610244610424366004612a2d565b6117f1565b610244610437366004612a69565b611888565b61024461044a366004612aa6565b6119e1565b60065461036d9073ffffffffffffffffffffffffffffffffffffffff1681565b61024461047d366004612394565b611aa9565b61024e611b63565b610221610498366004612ac1565b600160209081526000928352604080842090915290825290205460ff1681565b6102446104c6366004612aeb565b611b70565b6102446104d9366004612aa6565b611e6e565b6102446104ec3660046123ad565b611f60565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316148061058457507fd9b67a26000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b806105d057507f0e89341c000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60025473ffffffffffffffffffffffffffffffffffffffff16331461065c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064015b60405180910390fd5b6000828152600b6020526040902054829060ff161561067a57600080fd5b5060009182526008602052604090912080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091179055565b600380546106db90612b63565b80601f016020809104026020016040519081016040528092919081815260200182805461070790612b63565b80156107545780601f1061072957610100808354040283529160200191610754565b820191906000526020600020905b81548152906001019060200180831161073757829003601f168201915b505050505081565b60025473ffffffffffffffffffffffffffffffffffffffff1633146107dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610653565b6000828152600b6020526040902054829060ff16156107fb57600080fd5b5060009182526009602052604090912080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091179055565b60008181526008602052604090205460609073ffffffffffffffffffffffffffffffffffffffff1661088057600080fd5b6000828152600a6020908152604080832060065460079093529281902090517f7ba4965b0000000000000000000000000000000000000000000000000000000081527338edb18902ed19d6eb3f532233a0246183273bf9936312496a1b93909273ffffffffffffffffffffffffffffffffffffffff90911691637ba4965b9161090b91600401612c51565b600060405180830381865afa158015610928573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261096e9190810190612d45565b60405160200161097f929190612db3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526109ba91602001612eb0565b6040516020818303038152906040526040518263ffffffff1660e01b81526004016109e59190612381565b600060405180830381865af4158015610a02573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610a489190810190612d45565b604051602001610a589190612ecc565b6040516020818303038152906040529050919050565b60008281526008602052604090205473ffffffffffffffffffffffffffffffffffffffff163314610a9e57600080fd5b610ab983838360405180602001604052806000815250611f9b565b505050565b848314610b27576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4c454e4754485f4d49534d4154434800000000000000000000000000000000006044820152606401610653565b3373ffffffffffffffffffffffffffffffffffffffff89161480610b7b575073ffffffffffffffffffffffffffffffffffffffff8816600090815260016020908152604080832033845290915290205460ff165b610be1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a45440000000000000000000000000000000000006044820152606401610653565b60008060005b87811015610cb657888882818110610c0157610c01612f11565b905060200201359250868682818110610c1c57610c1c612f11565b73ffffffffffffffffffffffffffffffffffffffff8e1660009081526020818152604080832089845282528220805493909102949094013595508593925090610c66908490612f6f565b909155505073ffffffffffffffffffffffffffffffffffffffff8a1660009081526020818152604080832086845290915281208054849290610ca9908490612f86565b9091555050600101610be7565b508873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8b8b8b8b604051610d319493929190612fed565b60405180910390a473ffffffffffffffffffffffffffffffffffffffff89163b15610e23576040517fbc197c81000000000000000000000000000000000000000000000000000000008082529073ffffffffffffffffffffffffffffffffffffffff8b169063bc197c8190610db89033908f908e908e908e908e908e908e90600401613068565b6020604051808303816000875af1158015610dd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dfb91906130ca565b7fffffffff000000000000000000000000000000000000000000000000000000001614610e3d565b73ffffffffffffffffffffffffffffffffffffffff891615155b610ea3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f554e534146455f524543495049454e54000000000000000000000000000000006044820152606401610653565b50505050505050505050565b600a60205260009081526040902080546106db90612b63565b6060838214610f33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4c454e4754485f4d49534d4154434800000000000000000000000000000000006044820152606401610653565b8367ffffffffffffffff811115610f4c57610f4c6125d9565b604051908082528060200260200182016040528015610f75578160200160208202803683370190505b50905060005b8481101561103657600080878784818110610f9857610f98612f11565b9050602002016020810190610fad9190612aa6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858584818110610ffb57610ffb612f11565b9050602002013581526020019081526020016000205482828151811061102357611023612f11565b6020908102919091010152600101610f7b565b50949350505050565b60025473ffffffffffffffffffffffffffffffffffffffff1633146110c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610653565b6000858152600b6020526040902054859060ff16156110de57600080fd5b6000868152600760205260409020855186919081906110fd908261312d565b5060208201516001820190611112908261312d565b5060408201516002820190611127908261312d565b506060820151600382019061113c908261312d565b5060808201516004820190611151908261312d565b5060a08201516005820190611166908261312d565b5060c0820151600682019061117b908261312d565b5060e08201516007820190611190908261312d565b5050506000868152600860209081526040808320805473ffffffffffffffffffffffffffffffffffffffff808a167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560098452828520805492891692909116919091179055600a909152902061120d838261312d565b50505050505050565b60076020526000908152604090208054819061123190612b63565b80601f016020809104026020016040519081016040528092919081815260200182805461125d90612b63565b80156112aa5780601f1061127f576101008083540402835291602001916112aa565b820191906000526020600020905b81548152906001019060200180831161128d57829003601f168201915b5050505050908060010180546112bf90612b63565b80601f01602080910402602001604051908101604052809291908181526020018280546112eb90612b63565b80156113385780601f1061130d57610100808354040283529160200191611338565b820191906000526020600020905b81548152906001019060200180831161131b57829003601f168201915b50505050509080600201805461134d90612b63565b80601f016020809104026020016040519081016040528092919081815260200182805461137990612b63565b80156113c65780601f1061139b576101008083540402835291602001916113c6565b820191906000526020600020905b8154815290600101906020018083116113a957829003601f168201915b5050505050908060030180546113db90612b63565b80601f016020809104026020016040519081016040528092919081815260200182805461140790612b63565b80156114545780601f1061142957610100808354040283529160200191611454565b820191906000526020600020905b81548152906001019060200180831161143757829003601f168201915b50505050509080600401805461146990612b63565b80601f016020809104026020016040519081016040528092919081815260200182805461149590612b63565b80156114e25780601f106114b7576101008083540402835291602001916114e2565b820191906000526020600020905b8154815290600101906020018083116114c557829003601f168201915b5050505050908060050180546114f790612b63565b80601f016020809104026020016040519081016040528092919081815260200182805461152390612b63565b80156115705780601f1061154557610100808354040283529160200191611570565b820191906000526020600020905b81548152906001019060200180831161155357829003601f168201915b50505050509080600601805461158590612b63565b80601f01602080910402602001604051908101604052809291908181526020018280546115b190612b63565b80156115fe5780601f106115d3576101008083540402835291602001916115fe565b820191906000526020600020905b8154815290600101906020018083116115e157829003601f168201915b50505050509080600701805461161390612b63565b80601f016020809104026020016040519081016040528092919081815260200182805461163f90612b63565b801561168c5780601f106116615761010080835404028352916020019161168c565b820191906000526020600020905b81548152906001019060200180831161166f57829003601f168201915b5050505050905088565b60025473ffffffffffffffffffffffffffffffffffffffff163314611717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610653565b6005611723828261312d565b5050565b60025473ffffffffffffffffffffffffffffffffffffffff1633146117a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610653565b6000828152600b6020526040902054829060ff16156117c657600080fd5b6000838152600a602052604090206117de838261312d565b50505050565b600480546106db90612b63565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b60025473ffffffffffffffffffffffffffffffffffffffff163314611909576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610653565b6000828152600b6020526040902054829060ff161561192757600080fd5b600083815260076020526040902082518391908190611946908261312d565b506020820151600182019061195b908261312d565b5060408201516002820190611970908261312d565b5060608201516003820190611985908261312d565b506080820151600482019061199a908261312d565b5060a082015160058201906119af908261312d565b5060c082015160068201906119c4908261312d565b5060e082015160078201906119d9908261312d565b505050505050565b60025473ffffffffffffffffffffffffffffffffffffffff163314611a62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610653565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60025473ffffffffffffffffffffffffffffffffffffffff163314611b2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610653565b6000908152600b6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b600580546106db90612b63565b3373ffffffffffffffffffffffffffffffffffffffff87161480611bc4575073ffffffffffffffffffffffffffffffffffffffff8616600090815260016020908152604080832033845290915290205460ff165b611c2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a45440000000000000000000000000000000000006044820152606401610653565b73ffffffffffffffffffffffffffffffffffffffff861660009081526020818152604080832087845290915281208054859290611c68908490612f6f565b909155505073ffffffffffffffffffffffffffffffffffffffff851660009081526020818152604080832087845290915281208054859290611cab908490612f86565b9091555050604080518581526020810185905273ffffffffffffffffffffffffffffffffffffffff808816929089169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a473ffffffffffffffffffffffffffffffffffffffff85163b15611dee576040517ff23a6e61000000000000000000000000000000000000000000000000000000008082529073ffffffffffffffffffffffffffffffffffffffff87169063f23a6e6190611d839033908b908a908a908a908a90600401613247565b6020604051808303816000875af1158015611da2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc691906130ca565b7fffffffff000000000000000000000000000000000000000000000000000000001614611e08565b73ffffffffffffffffffffffffffffffffffffffff851615155b6119d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f554e534146455f524543495049454e54000000000000000000000000000000006044820152606401610653565b60025473ffffffffffffffffffffffffffffffffffffffff163314611eef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610653565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831690811790915560405133907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350565b60008281526009602052604090205473ffffffffffffffffffffffffffffffffffffffff163314611f9057600080fd5b610ab9838383612199565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020818152604080832086845290915281208054849290611fd9908490612f86565b9091555050604080518481526020810184905273ffffffffffffffffffffffffffffffffffffffff86169160009133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a473ffffffffffffffffffffffffffffffffffffffff84163b15612119576040517ff23a6e61000000000000000000000000000000000000000000000000000000008082529073ffffffffffffffffffffffffffffffffffffffff86169063f23a6e61906120ae903390600090899089908990600401613299565b6020604051808303816000875af11580156120cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120f191906130ca565b7fffffffff000000000000000000000000000000000000000000000000000000001614612133565b73ffffffffffffffffffffffffffffffffffffffff841615155b6117de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f554e534146455f524543495049454e54000000000000000000000000000000006044820152606401610653565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208181526040808320858452909152812080548392906121d7908490612f6f565b9091555050604080518381526020810183905260009173ffffffffffffffffffffffffffffffffffffffff86169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461225b57600080fd5b919050565b6000806040838503121561227357600080fd5b61227c83612237565b946020939093013593505050565b7fffffffff00000000000000000000000000000000000000000000000000000000811681146122b857600080fd5b50565b6000602082840312156122cd57600080fd5b81356122d88161228a565b9392505050565b600080604083850312156122f257600080fd5b8235915061230260208401612237565b90509250929050565b60005b8381101561232657818101518382015260200161230e565b838111156117de5750506000910152565b6000815180845261234f81602086016020860161230b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006122d86020830184612337565b6000602082840312156123a657600080fd5b5035919050565b6000806000606084860312156123c257600080fd5b6123cb84612237565b95602085013595506040909401359392505050565b60008083601f8401126123f257600080fd5b50813567ffffffffffffffff81111561240a57600080fd5b6020830191508360208260051b850101111561242557600080fd5b9250929050565b60008083601f84011261243e57600080fd5b50813567ffffffffffffffff81111561245657600080fd5b60208301915083602082850101111561242557600080fd5b60008060008060008060008060a0898b03121561248a57600080fd5b61249389612237565b97506124a160208a01612237565b9650604089013567ffffffffffffffff808211156124be57600080fd5b6124ca8c838d016123e0565b909850965060608b01359150808211156124e357600080fd5b6124ef8c838d016123e0565b909650945060808b013591508082111561250857600080fd5b506125158b828c0161242c565b999c989b5096995094979396929594505050565b6000806000806040858703121561253f57600080fd5b843567ffffffffffffffff8082111561255757600080fd5b612563888389016123e0565b9096509450602087013591508082111561257c57600080fd5b50612589878288016123e0565b95989497509550505050565b6020808252825182820181905260009190848201906040850190845b818110156125cd578351835292840192918401916001016125b1565b50909695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610100810167ffffffffffffffff8111828210171561262c5761262c6125d9565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612679576126796125d9565b604052919050565b600067ffffffffffffffff82111561269b5761269b6125d9565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f8301126126d857600080fd5b81356126eb6126e682612681565b612632565b81815284602083860101111561270057600080fd5b816020850160208301376000918101602001919091529392505050565b6000610100828403121561273057600080fd5b612738612608565b9050813567ffffffffffffffff8082111561275257600080fd5b61275e858386016126c7565b8352602084013591508082111561277457600080fd5b612780858386016126c7565b6020840152604084013591508082111561279957600080fd5b6127a5858386016126c7565b604084015260608401359150808211156127be57600080fd5b6127ca858386016126c7565b606084015260808401359150808211156127e357600080fd5b6127ef858386016126c7565b608084015260a084013591508082111561280857600080fd5b612814858386016126c7565b60a084015260c084013591508082111561282d57600080fd5b612839858386016126c7565b60c084015260e084013591508082111561285257600080fd5b5061285f848285016126c7565b60e08301525092915050565b600080600080600060a0868803121561288357600080fd5b85359450602086013567ffffffffffffffff808211156128a257600080fd5b6128ae89838a0161271d565b95506128bc60408901612237565b94506128ca60608901612237565b935060808801359150808211156128e057600080fd5b506128ed888289016126c7565b9150509295509295909350565b600061010080835261290e8184018c612337565b90508281036020840152612922818b612337565b90508281036040840152612936818a612337565b9050828103606084015261294a8189612337565b9050828103608084015261295e8188612337565b905082810360a08401526129728187612337565b905082810360c08401526129868186612337565b905082810360e084015261299a8185612337565b9b9a5050505050505050505050565b6000602082840312156129bb57600080fd5b813567ffffffffffffffff8111156129d257600080fd5b6129de848285016126c7565b949350505050565b600080604083850312156129f957600080fd5b82359150602083013567ffffffffffffffff811115612a1757600080fd5b612a23858286016126c7565b9150509250929050565b60008060408385031215612a4057600080fd5b612a4983612237565b915060208301358015158114612a5e57600080fd5b809150509250929050565b60008060408385031215612a7c57600080fd5b82359150602083013567ffffffffffffffff811115612a9a57600080fd5b612a238582860161271d565b600060208284031215612ab857600080fd5b6122d882612237565b60008060408385031215612ad457600080fd5b612add83612237565b915061230260208401612237565b60008060008060008060a08789031215612b0457600080fd5b612b0d87612237565b9550612b1b60208801612237565b94506040870135935060608701359250608087013567ffffffffffffffff811115612b4557600080fd5b612b5189828a0161242c565b979a9699509497509295939492505050565b600181811c90821680612b7757607f821691505b602082108103612bb0577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60008154612bc381612b63565b808552602060018381168015612be05760018114612c1857612c46565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008516838901528284151560051b8901019550612c46565b866000528260002060005b85811015612c3e5781548a8201860152908301908401612c23565b890184019650505b505050505092915050565b602081526000610100806020840152612c6e610120840185612bb6565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080858303016040860152612ca68260018801612bb6565b915080858303016060860152612cbf8260028801612bb6565b915080858303016080860152612cd88260038801612bb6565b9150808583030160a0860152612cf18260048801612bb6565b9150808583030160c0860152612d0a8260058801612bb6565b9150808583030160e0860152612d238260068801612bb6565b915080858303018386015250612d3c8160078701612bb6565b95945050505050565b600060208284031215612d5757600080fd5b815167ffffffffffffffff811115612d6e57600080fd5b8201601f81018413612d7f57600080fd5b8051612d8d6126e682612681565b818152856020838501011115612da257600080fd5b612d3c82602083016020860161230b565b6000808454612dc181612b63565b60018281168015612dd95760018114612e0c57612e3b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0084168752821515830287019450612e3b565b8860005260208060002060005b85811015612e325781548a820152908401908201612e19565b50505082870194505b507f2200000000000000000000000000000000000000000000000000000000000000845286519250612e738382860160208a0161230b565b92820192612ea28185017f227d0000000000000000000000000000000000000000000000000000000000009052565b505050600301949350505050565b60008251612ec281846020870161230b565b9190910192915050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000815260008251612f0481601d85016020870161230b565b91909101601d0192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612f8157612f81612f40565b500390565b60008219821115612f9957612f99612f40565b500190565b81835260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115612fd057600080fd5b8260051b8083602087013760009401602001938452509192915050565b604081526000613001604083018688612f9e565b8281036020840152613014818587612f9e565b979650505050505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b600073ffffffffffffffffffffffffffffffffffffffff808b168352808a1660208401525060a060408301526130a260a08301888a612f9e565b82810360608401526130b5818789612f9e565b9050828103608084015261299a81858761301f565b6000602082840312156130dc57600080fd5b81516122d88161228a565b601f821115610ab957600081815260208120601f850160051c8101602086101561310e5750805b601f850160051c820191505b818110156119d95782815560010161311a565b815167ffffffffffffffff811115613147576131476125d9565b61315b816131558454612b63565b846130e7565b602080601f8311600181146131ae57600084156131785750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556119d9565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156131fb578886015182559484019460019091019084016131dc565b508582101561323757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600073ffffffffffffffffffffffffffffffffffffffff808916835280881660208401525085604083015284606083015260a0608083015261328d60a08301848661301f565b98975050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525084604083015283606083015260a0608083015261301460a083018461233756fea164736f6c634300080f000a

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

000000000000000000000000f464bd061c88f0b19f88e76f76fc88d38d03ac940000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000017d646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c65794a755957316c496a6f69576d39764947396d4945356c64584a6862434242645852766257463059534973496d526c63324e796158423061573975496a6f6952486c75595731705932467362486b675a3256755a584a686447566b494746755a43426d64577873655342766269316a61474670626942755a5856795957776759325673624856735958496759585630623231686447456763484a765a334a6862584d675a6e4a7662534278645746784c6d563061434973496d6c745957646c496a6f696148523063484d364c79396e5958526c643246354c6e4270626d46305953356a624739315a43397063475a7a4c3146745545643652334e46546c59345554464e4d576474636e517a56326c4c544768305957394b5245704956564e475632317852314a79556b7072644577694c434a6c6548526c636d35686246397361573572496a6f696148523063484d364c793936623235684c6e64305a694a39000000

-----Decoded View---------------
Arg [0] : _engine (address): 0xF464bD061C88F0B19f88E76f76fC88d38d03AC94
Arg [1] : _contractURI (string): data:application/json;base64,eyJuYW1lIjoiWm9vIG9mIE5ldXJhbCBBdXRvbWF0YSIsImRlc2NyaXB0aW9uIjoiRHluYW1pY2FsbHkgZ2VuZXJhdGVkIGFuZCBmdWxseSBvbi1jaGFpbiBuZXVyYWwgY2VsbHVsYXIgYXV0b21hdGEgcHJvZ3JhbXMgZnJvbSBxdWFxLmV0aCIsImltYWdlIjoiaHR0cHM6Ly9nYXRld2F5LnBpbmF0YS5jbG91ZC9pcGZzL1FtUEd6R3NFTlY4UTFNMWdtcnQzV2lLTGh0YW9KREpIVVNGV21xR1JyUkprdEwiLCJleHRlcm5hbF9saW5rIjoiaHR0cHM6Ly96b25hLnd0ZiJ9

-----Encoded View---------------
15 Constructor Arguments found :
Arg [0] : 000000000000000000000000f464bd061c88f0b19f88e76f76fc88d38d03ac94
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [2] : 000000000000000000000000000000000000000000000000000000000000017d
Arg [3] : 646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c65794a
Arg [4] : 755957316c496a6f69576d39764947396d4945356c64584a6862434242645852
Arg [5] : 766257463059534973496d526c63324e796158423061573975496a6f6952486c
Arg [6] : 75595731705932467362486b675a3256755a584a686447566b494746755a4342
Arg [7] : 6d64577873655342766269316a61474670626942755a58567959577767593256
Arg [8] : 73624856735958496759585630623231686447456763484a765a334a6862584d
Arg [9] : 675a6e4a7662534278645746784c6d563061434973496d6c745957646c496a6f
Arg [10] : 696148523063484d364c79396e5958526c643246354c6e4270626d4630595335
Arg [11] : 6a624739315a43397063475a7a4c3146745545643652334e46546c5934555446
Arg [12] : 4e4d576474636e517a56326c4c544768305957394b5245704956564e47563231
Arg [13] : 7852314a79556b7072644577694c434a6c6548526c636d356862463973615735
Arg [14] : 72496a6f696148523063484d364c793936623235684c6e64305a694a39000000


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.