ETH Price: $2,427.86 (+0.16%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
0x60806040146798062022-04-29 14:45:12920 days ago1651243512IN
 Create: Items
0 ETH0.1566204373.83597695

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Items

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 2 : Items.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.7;

import { ERC721MM } from "./ERC721MM.sol";

contract Items is ERC721MM {

    string constant public name   = "Meta & Magic Items";
    string constant public symbol = "ITEMS";

    mapping(uint256 => address) statsAddress;
    mapping(uint256 => uint256) bossSupplies;

    /*///////////////////////////////////////////////////////////////
                        INITIALIZATION
    //////////////////////////////////////////////////////////////*/

    function initialize(address stats_1, address stats_2, address stats_3, address stats_4, address stats_5, address renderer_) external {
        require(msg.sender == _owner(), "not authorized");

        statsAddress[0] = stats_1;
        statsAddress[1] = stats_2;
        statsAddress[2] = stats_3;
        statsAddress[3] = stats_4;
        statsAddress[9] = stats_5;
        
        renderer = renderer_;

        // Setting boss drop supplies
        bossSupplies[1] = 1000; 
        bossSupplies[2] = 900; 
        bossSupplies[3] = 800;
        bossSupplies[4] = 700;
        bossSupplies[5] = 600;
        bossSupplies[6] = 500;
        bossSupplies[7] = 400;
        bossSupplies[8] = 300;
        bossSupplies[9] = 200;
    }

    /*///////////////////////////////////////////////////////////////
                            VIEW FUNCTIONS
    //////////////////////////////////////////////////////////////*/

    function getStats(uint256 id_) external view virtual returns(bytes10[6] memory stats_) {    
        uint256 seed = entropySeed;
        require(seed != 0, "Not revealed");
        stats_ = StatsLike(statsAddress[id_ > 10000 ? 9 : (id_ % 4)]).getStats(_traits(seed, id_));
    }

    function isSpecial(uint256 id) external view returns(bool sp) {
        return _isSpecial(id, entropySeed);
    }

    function tokenURI(uint256 id) external view returns (string memory) {
        uint256 seed = entropySeed;
        if (seed == 0) return RendererLike(renderer).getPlaceholder(2);
        return RendererLike(renderer).getUri(id, _traits(seed, id), _getCategory(id,seed));
    }

    /*///////////////////////////////////////////////////////////////
                             MINT FUNCTIONS
    //////////////////////////////////////////////////////////////*/

    function mintDrop(uint256 boss, address to) external virtual returns(uint256 id) {
        require(auth[msg.sender], "not authorized");

        id = _bossDropStart(boss) + bossSupplies[boss]--; // Note boss drops are predictable because the entropy seed is known

        _mint(to, id, 2);
    }

    function burnFrom(address from, uint256 id) external returns (bool) {
        require(auth[msg.sender], "not authorized");
        _burn(from, id);
        return true;
    }


    /*///////////////////////////////////////////////////////////////
                             TRAIT FUNCTIONS
    //////////////////////////////////////////////////////////////*/

    function _traits(uint256 seed_, uint256 id_) internal pure override returns (uint256[6] memory traits) {
        require(seed_ != uint256(0), "seed not set");
        if (_isSpecial(id_, seed_)) return _getSpecialTraits(id_);

        traits = [_getTier(id_,   seed_, "LEVEL"), 
                  _getTier(id_,    seed_, "KIND"), 
                  _getTier(id_,    seed_, "MATERIAL"), 
                  _getTier(id_,    seed_, "RARITY"), 
                  _getTier(id_,    seed_, "QUALITY"),
                  _getElement(id_, seed_, "ELEMENT")];

        uint256 boss = _getBossForId(id_);
        if (boss > 0) {
            traits[1] = 10 + boss;
            traits[4] = 0; // Boss traits doesnt have material type
        }
    }

    function _getSpecialTraits(uint256 id_) internal pure returns (uint256[6] memory t) {
        uint256 spc = (id_ / 1250) + 1;
        
        uint256 traitIndcator = spc * 10 + spc;

        t = [traitIndcator,traitIndcator,traitIndcator,traitIndcator,traitIndcator,traitIndcator];
    }

    function _getElement(uint256 id_, uint256 seed, bytes32 salt) internal pure returns (uint256 class_) {
        if (id_ % 4 == 3) return _getTier(id_, seed, "POTENCY");
        
        uint256 rdn = uint256(keccak256(abi.encode(id_, seed, salt))) % 100_0000 + 1; 

        if (rdn <= 50_0000) return 1;
        return (rdn % 5) + 2;
    }

    function _bossDropStart(uint256 boss) internal pure returns(uint256 start) {
        if (boss == 1) start = 10000;
        if (boss == 2) start = 11000;
        if (boss == 3) start = 11900;
        if (boss == 4) start = 12700;
        if (boss == 5) start = 13400;
        if (boss == 6) start = 14000;
        if (boss == 7) start = 14500;
        if (boss == 8) start = 14900;
        if (boss == 9) start = 15200;
    } 


    function _getBossForId(uint256 id) internal pure returns(uint256 boss) {
        if (id <= 10000) return 0;
        if (id <= 11000) return 1;
        if (id <= 11900) return 2;
        if (id <= 12700) return 3;
        if (id <= 13400) return 4;
        if (id <= 14000) return 5;
        if (id <= 14500) return 6;
        if (id <= 14900) return 7;
        if (id <= 15200) return 8;
        if (id <= 15400) return 9;
    }

    function _isSpecial(uint256 id, uint256 seed) internal pure returns (bool special) {
        uint256 rdn = _getRndForSpecial(seed);
        for (uint256 i = 0; i < 9; i++) {
            if (id == rdn + (1250 * i)) {
                special = true;
                break;
            }
        }
    }

    function _getSpecialCategory(uint256 id, uint256 seed) internal pure returns (uint256 spc) {
        uint256 num = (id / 1250) + 1;
        spc = num + 5 + (num - 1);
    }

    function _getCategory(uint256 id, uint256 seed) internal pure returns (uint256 cat) {
        // Boss Drop
        if (id > 10000) return cat = 4;
        if (_isSpecial(id, seed)) return _getSpecialCategory(id, seed);
        return 2;
    }

    function _getRndForSpecial(uint256 seed) internal pure virtual returns (uint256 rdn) {
        rdn = uint256(keccak256(abi.encode(seed, "SPECIAL"))) % 1250 + 1;
    }

}

interface RendererLike {
    function getUri(uint256 id, uint256[6] calldata traits, uint256 cat) external view returns (string memory meta);
    function getPlaceholder(uint256 cat) external pure returns (string memory meta);
}

interface StatsLike {
    function getStats(uint256[6] calldata attributes) external view returns (bytes10[6] memory stats_); 
}

interface VRFCoordinatorV2Interface {
    function requestRandomWords(
    bytes32 keyHash,
    uint64 subId,
    uint16 minimumRequestConfirmations,
    uint32 callbackGasLimit,
    uint32 numWords
  ) external returns (uint256 requestId);
}

File 2 of 2 : ERC721MM.sol
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity 0.8.7;

/// @notice Modern and gas efficient ERC-721 + ERC-20/EIP-2612-like implementation,
/// Modified version inspired by ERC721A
abstract contract ERC721MM {

    /*///////////////////////////////////////////////////////////////
                                  EVENTS
    //////////////////////////////////////////////////////////////*/
    
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
    
    event Approval(address indexed owner, address indexed spender, uint256 indexed tokenId);
    
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
    
    
    /*///////////////////////////////////////////////////////////////
                             ERC-721 STORAGE
    //////////////////////////////////////////////////////////////*/

    struct AddressData { uint128 balance; uint64 listMinted; uint64 publicMinted; }

    uint256 public totalSupply;
    uint256 public entropySeed;
    
    mapping(address => bool)    public auth;

    mapping(address => AddressData) public datas;
    
    mapping(uint256 => address) public ownerOf;
        
    mapping(uint256 => address) public getApproved;

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

    // Rendering information
    address public renderer;

    // Oracle information
    address public VRFcoord;

    uint64  public subId;

    bytes32 public keyhash;

    /*///////////////////////////////////////////////////////////////
                VIRTUAL FUNCTIONS
    //////////////////////////////////////////////////////////////*/

    function _traits(uint256 entropy_, uint256 id_) internal pure virtual returns (uint256[6] memory traits_);
    
    /*///////////////////////////////////////////////////////////////
                             VIEW FUNCTION
    //////////////////////////////////////////////////////////////*/

    function owner() external view returns (address owner_) {
        return _owner();
    }

    function balanceOf(address add) external view returns(uint256 balance_) {
        balance_ = datas[add].balance;
    }

    function listMinted(address add) external view returns(uint256 minted_) {
        minted_ = datas[add].listMinted;
    }

    function publicMinted(address add) external view returns(uint256 minted_) {
        minted_ = datas[add].publicMinted;
    }

    /*///////////////////////////////////////////////////////////////
                            M&M SPECIFIC LOGIC
    //////////////////////////////////////////////////////////////*/

    function setAuth(address add_, bool auth_) external {
        require(_owner() == msg.sender, "not authorized");
        auth[add_] = auth_;
    }

    function mint(address to, uint256 amount, uint256 stage) external virtual returns(uint256 id) {
        require(auth[msg.sender], "not authorized");
        for (uint256 i = 0; i < amount; i++) {
            id = totalSupply + 1;
            _mint(to, id, stage);     
        }
    }

     function setUpOracle(address vrf_, bytes32 keyHash, uint64 subscriptionId) external {
        require(msg.sender == _owner());

        VRFcoord = vrf_;
        keyhash  = keyHash;
        subId    = subscriptionId;
    }

    function requestEntropy() external {
        require(msg.sender == _owner(), "not auth");
        require(entropySeed == 0,       "already requested");

        VRFCoordinatorV2Interface(VRFcoord).requestRandomWords(keyhash, subId, 3, 200000, 1);
    }

    function rawFulfillRandomWords(uint256 , uint256[] memory randomWords) external {
        require(msg.sender == VRFcoord, "not allowed");
        require(entropySeed == 0);
        entropySeed = randomWords[0];
   }

   function getTraits(uint256 id_) external view returns (uint256[6] memory traits_) {
        return _traits(entropySeed, id_);
    }

    function _getTier(uint256 id_, uint256 seed, bytes32 salt) internal pure returns (uint256 t_) {
        uint256 rdn = uint256(keccak256(abi.encode(id_, seed, salt))) % 100_0000 + 1; 
        if (rdn <= 28_9333) return 1;
        if (rdn <= 52_8781) return 2;
        if (rdn <= 71_8344) return 3;
        if (rdn <= 85_8022) return 4;
        if (rdn <= 94_7815) return 5;
        return 6;
    }
    
    /*///////////////////////////////////////////////////////////////
                              ERC-721 LOGIC
    //////////////////////////////////////////////////////////////*/
    
    function transfer(address to, uint256 tokenId) external returns (bool) {
        require(msg.sender == ownerOf[tokenId], "NOT_OWNER");
        
        _transfer(msg.sender, to, tokenId);
        return true;
    }
    
    function supportsInterface(bytes4 interfaceId) external pure returns (bool supported) {
        supported = interfaceId == 0x80ac58cd || interfaceId == 0x5b5e139f;
    }
    
    function approve(address spender, uint256 tokenId) external {
        address owner_ = ownerOf[tokenId];
        
        require(msg.sender == owner_ || isApprovedForAll[owner_][msg.sender], "NOT_APPROVED");
        
        getApproved[tokenId] = spender;
        
        emit Approval(owner_, spender, tokenId); 
    }
    
    function setApprovalForAll(address operator, bool approved) external {
        isApprovedForAll[msg.sender][operator] = approved;
        
        emit ApprovalForAll(msg.sender, operator, approved);
    }

    function transferFrom(address from, address to, uint256 tokenId) public returns (bool){        
        require(
            msg.sender == from 
            || msg.sender == getApproved[tokenId]
            || isApprovedForAll[from][msg.sender]
            || auth[msg.sender],
            "NOT_APPROVED"
        );
        
        _transfer(from, to, tokenId);
        return true;
    }
    
    function safeTransferFrom(address from, address to, uint256 tokenId) external {
        safeTransferFrom(from, to, tokenId, "");
    }
    
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public {
        transferFrom(from, to, tokenId); 
        
        if (to.code.length != 0) {
            // selector = `onERC721Received(address,address,uint,bytes)`
            (, bytes memory returned) = to.staticcall(abi.encodeWithSelector(0x150b7a02,
                msg.sender, address(0), tokenId, data));
                
            bytes4 selector = abi.decode(returned, (bytes4));
            
            require(selector == 0x150b7a02, "NOT_ERC721_RECEIVER");
        }
    }
    
    /*///////////////////////////////////////////////////////////////
                          INTERNAL UTILS
    //////////////////////////////////////////////////////////////*/

    function _owner() internal view returns (address owner_) {
        bytes32 slot = bytes32(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103);
        assembly {
            owner_ := sload(slot)
        }
    } 

    function _transfer(address from, address to, uint256 tokenId) internal {
        require(ownerOf[tokenId] == from, "not owner");

        datas[from].balance--; 
        datas[to].balance++;
        
        delete getApproved[tokenId];
        
        ownerOf[tokenId] = to;
        emit Transfer(from, to, tokenId); 

    }

    function _mint(address to, uint256 tokenId, uint256 stage) internal { 
        require(ownerOf[tokenId] == address(0), "ALREADY_MINTED");

        totalSupply++;
        
        // This is safe because the sum of all user
        // balances can't exceed type(uint256).max!
        unchecked {
            datas[to].balance++;
            stage == 1 ? datas[to].listMinted++ : datas[to].publicMinted++;
        }
        
        ownerOf[tokenId] = to;
                
        emit Transfer(address(0), to, tokenId); 
    }
    
    function _burn(address acc, uint256 tokenId) internal { 
        address owner_ = ownerOf[tokenId];
        
        require(acc == owner_, "NOT_OWNER");
        require(ownerOf[tokenId] != address(0), "NOT_MINTED");
        
        totalSupply--;
        datas[owner_].balance--;
        
        delete ownerOf[tokenId];
                
        emit Transfer(owner_, address(0), tokenId); 
    }
}

interface VRFCoordinatorV2Interface {
    function requestRandomWords(
    bytes32 keyHash,
    uint64 subId,
    uint16 minimumRequestConfirmations,
    uint32 callbackGasLimit,
    uint32 numWords
  ) external returns (uint256 requestId);
}

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

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"VRFcoord","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"auth","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"add","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"balance_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"burnFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"datas","outputs":[{"internalType":"uint128","name":"balance","type":"uint128"},{"internalType":"uint64","name":"listMinted","type":"uint64"},{"internalType":"uint64","name":"publicMinted","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"entropySeed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id_","type":"uint256"}],"name":"getStats","outputs":[{"internalType":"bytes10[6]","name":"stats_","type":"bytes10[6]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id_","type":"uint256"}],"name":"getTraits","outputs":[{"internalType":"uint256[6]","name":"traits_","type":"uint256[6]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"stats_1","type":"address"},{"internalType":"address","name":"stats_2","type":"address"},{"internalType":"address","name":"stats_3","type":"address"},{"internalType":"address","name":"stats_4","type":"address"},{"internalType":"address","name":"stats_5","type":"address"},{"internalType":"address","name":"renderer_","type":"address"}],"name":"initialize","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":"uint256","name":"id","type":"uint256"}],"name":"isSpecial","outputs":[{"internalType":"bool","name":"sp","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"keyhash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"add","type":"address"}],"name":"listMinted","outputs":[{"internalType":"uint256","name":"minted_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"stage","type":"uint256"}],"name":"mint","outputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"boss","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"mintDrop","outputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"owner_","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"add","type":"address"}],"name":"publicMinted","outputs":[{"internalType":"uint256","name":"minted_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256[]","name":"randomWords","type":"uint256[]"}],"name":"rawFulfillRandomWords","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renderer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"requestEntropy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"add_","type":"address"},{"internalType":"bool","name":"auth_","type":"bool"}],"name":"setAuth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"vrf_","type":"address"},{"internalType":"bytes32","name":"keyHash","type":"bytes32"},{"internalType":"uint64","name":"subscriptionId","type":"uint64"}],"name":"setUpOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"subId","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"supported","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b50612567806100206000396000f3fe608060405234801561001057600080fd5b506004361061021c5760003560e01c806370a0823111610125578063b88d4fde116100ad578063cd5d21181161007c578063cd5d2118146105b8578063d4d46e50146105db578063e1dc0761146105ee578063e985e9c51461060e578063eb1d28bb1461063c57600080fd5b8063b88d4fde1461056c578063c87b56dd1461057f578063cba57e3814610592578063cc2a9a5b146105a557600080fd5b80638da5cb5b116100f45780638da5cb5b1461051257806395d89b411461051a578063a22cb4651461053e578063a9059cbb14610551578063b13038a11461056457600080fd5b806370a082311461049a57806379cc6790146104cc5780637b303965146104df5780638ada6b0f146104ff57600080fd5b80631fe543e3116101a857806342842e0e1161017757806342842e0e146103d8578063468f9b14146103eb5780636352211e146103f457806368a6cdf21461041d57806369ebe78e1461049157600080fd5b80631fe543e31461038c57806323b872dd1461039f57806332ed5391146103b257806335599310146103c557600080fd5b80630b44a218116101ef5780630b44a218146102dd5780631015805b146102f0578063156e29f61461033757806318160ddd1461034a5780631d02f7b81461035357600080fd5b806301ffc9a71461022157806306fdde0314610249578063081812fc14610287578063095ea7b3146102c8575b600080fd5b61023461022f36600461202b565b61066e565b60405190151581526020015b60405180910390f35b61027a604051806040016040528060128152602001714d6574612026204d61676963204974656d7360701b81525081565b60405161024091906122d0565b6102b06102953660046120d2565b6005602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610240565b6102db6102d6366004611f31565b6106a5565b005b6102db6102eb366004611ea9565b61078a565b6103296102fe366004611d01565b6001600160a01b0316600090815260036020526040902054600160c01b90046001600160401b031690565b604051908152602001610240565b610329610345366004611f5b565b6107f2565b61032960005481565b610329610361366004611d01565b6001600160a01b0316600090815260036020526040902054600160801b90046001600160401b031690565b6102db61039a366004612127565b610861565b6102346103ad366004611dc3565b6108db565b6102db6103c0366004611ee5565b6109a3565b6103296103d3366004612104565b610a0b565b6102db6103e6366004611dc3565b610a79565b61032960015481565b6102b06104023660046120d2565b6004602052600090815260409020546001600160a01b031681565b61046261042b366004611d01565b6003602052600090815260409020546001600160801b038116906001600160401b03600160801b8204811691600160c01b90041683565b604080516001600160801b0390941684526001600160401b039283166020850152911690820152606001610240565b61032960095481565b6103296104a8366004611d01565b6001600160a01b03166000908152600360205260409020546001600160801b031690565b6102346104da366004611f31565b610a99565b6104f26104ed3660046120d2565b610adb565b6040516102409190612287565b6007546102b0906001600160a01b031681565b6102b0610bd7565b61027a604051806040016040528060058152602001644954454d5360d81b81525081565b6102db61054c366004611ea9565b610bf4565b61023461055f366004611f31565b610c60565b6102db610cbd565b6102db61057a366004611dff565b610e0d565b61027a61058d3660046120d2565b610f46565b6102346105a03660046120d2565b611016565b6102db6105b3366004611d4f565b611024565b6102346105c6366004611d01565b60026020526000908152604090205460ff1681565b6008546102b0906001600160a01b031681565b6106016105fc3660046120d2565b6112c4565b60405161024091906122c2565b61023461061c366004611d1c565b600660209081526000928352604080842090915290825290205460ff1681565b60085461065690600160a01b90046001600160401b031681565b6040516001600160401b039091168152602001610240565b60006380ac58cd60e01b6001600160e01b03198316148061069f5750635b5e139f60e01b6001600160e01b03198316145b92915050565b6000818152600460205260409020546001600160a01b0316338114806106ee57506001600160a01b038116600090815260066020908152604080832033845290915290205460ff165b61072e5760405162461bcd60e51b815260206004820152600c60248201526b1393d517d054141493d5915160a21b60448201526064015b60405180910390fd5b60008281526005602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b336107a16000805160206125128339815191525490565b6001600160a01b0316146107c75760405162461bcd60e51b8152600401610725906122e3565b6001600160a01b03919091166000908152600260205260409020805460ff1916911515919091179055565b3360009081526002602052604081205460ff166108215760405162461bcd60e51b8152600401610725906122e3565b60005b838110156108595760005461083a906001612385565b91506108478583856112d8565b8061085181612474565b915050610824565b509392505050565b6008546001600160a01b031633146108a95760405162461bcd60e51b815260206004820152600b60248201526a1b9bdd08185b1b1bddd95960aa1b6044820152606401610725565b600154156108b657600080fd5b806000815181106108c9576108c96124cf565b60200260200101516001819055505050565b6000336001600160a01b038516148061090a57506000828152600560205260409020546001600160a01b031633145b8061093857506001600160a01b038416600090815260066020908152604080832033845290915290205460ff165b8061095257503360009081526002602052604090205460ff165b61098d5760405162461bcd60e51b815260206004820152600c60248201526b1393d517d054141493d5915160a21b6044820152606401610725565b61099884848461147e565b5060015b9392505050565b600080516020612512833981519152546001600160a01b0316336001600160a01b0316146109d057600080fd5b600880546009939093556001600160401b03909116600160a01b026001600160e01b03199092166001600160a01b0390931692909217179055565b3360009081526002602052604081205460ff16610a3a5760405162461bcd60e51b8152600401610725906122e3565b6000838152600b60205260408120805491610a5483612436565b91905055610a61846115dc565b610a6b9190612385565b905061069f828260026112d8565b610a9483838360405180602001604052806000815250610e0d565b505050565b3360009081526002602052604081205460ff16610ac85760405162461bcd60e51b8152600401610725906122e3565b610ad28383611661565b50600192915050565b610ae3611ccc565b60015480610b225760405162461bcd60e51b815260206004820152600c60248201526b139bdd081c995d99585b195960a21b6044820152606401610725565b600a60006127108511610b3f57610b3a60048661248f565b610b42565b60095b81526020810191909152604001600020546001600160a01b031663ecac6724610b6b83866117c3565b6040518263ffffffff1660e01b8152600401610b8791906122c2565b60c06040518083038186803b158015610b9f57600080fd5b505afa158015610bb3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061099c9190611f8e565b6000610bef6000805160206125128339815191525490565b905090565b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6000818152600460205260408120546001600160a01b03163314610cb25760405162461bcd60e51b81526020600482015260096024820152682727aa2fa7aba722a960b91b6044820152606401610725565b610ad233848461147e565b600080516020612512833981519152546001600160a01b0316336001600160a01b031614610d185760405162461bcd60e51b81526020600482015260086024820152670dcdee840c2eae8d60c31b6044820152606401610725565b60015415610d5c5760405162461bcd60e51b8152602060048201526011602482015270185b1c9958591e481c995c5d595cdd1959607a1b6044820152606401610725565b6008546009546040516305d3b1d360e41b81526004810191909152600160a01b82046001600160401b031660248201526003604482015262030d406064820152600160848201526001600160a01b0390911690635d3b1d309060a401602060405180830381600087803b158015610dd257600080fd5b505af1158015610de6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0a91906120eb565b50565b610e188484846108db565b506001600160a01b0383163b15610f40576000836001600160a01b031663150b7a023360008686604051602401610e52949392919061224a565b6040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050604051610e8b919061222e565b600060405180830381855afa9150503d8060008114610ec6576040519150601f19603f3d011682016040523d82523d6000602084013e610ecb565b606091505b50915050600081806020019051810190610ee59190612048565b9050630a85bd0160e11b6001600160e01b0319821614610f3d5760405162461bcd60e51b81526020600482015260136024820152722727aa2fa2a9219b9918afa922a1a2a4ab22a960691b6044820152606401610725565b50505b50505050565b60015460609080610fd2576007546040516302fa6c9b60e11b8152600260048201526001600160a01b03909116906305f4d936906024015b60006040518083038186803b158015610f9657600080fd5b505afa158015610faa573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261099c9190810190612065565b6007546001600160a01b0316630c3501be84610fee84826117c3565b610ff887866118f9565b6040518463ffffffff1660e01b8152600401610f7e9392919061230b565b600061069f8260015461192f565b600080516020612512833981519152546001600160a01b0316336001600160a01b0316146110645760405162461bcd60e51b8152600401610725906122e3565b7f13da86008ba1c6922daee3e07db95305ef49ebced9f5467a0b8613fcc6b343e380546001600160a01b03199081166001600160a01b03988916179091557fbbc70db1b6c7afd11e79c0fb0051300458f1a3acb8ee9789d9b6b26c61ad9bc780548216968816969096179095557fbff4442b8ed600beeb8e26b1279a0f0d14c6edfaec26d968ee13c86f7d4c2ba880548616948716949094179093557fa856840544dc26124927add067d799967eac11be13e14d82cc281ea46fa3975980548516928616929092179091557f825eb4cda6b8b44578c55770496c59e6dc3cf2235f690bcdaf51a61898ceb28480548416918516919091179055600780549092169216919091179055600b6020526103e87f72c6bfb7988af3a1efa6568f02a999bc52252641c659d85961ca3d372b57d5cf556103847fa50eece07c7db1631545c0069bd8f5f54d5935e215d59097edf258a44ba91634556103207f64c15cc42be7899b001f818cf4433057002112c418d1d3a67cd5cb453051d33e556102bc7f12d0c11577e2f0950f57c455c117796550b79f444811db8ba2f69c57b646c784556102587febae6141bae5521e99e0a8d610356b0f501fea54980b59c84841db43ba7204f4556101f47f0387e9d1203691d8e3362a7e4c6723de358a4010d7f31ecbec3fbfc61d1c75fc556101907ff5559028dc9ba50d75343c779b2f75e13a84a14662932fc67a486f263ca31a965561012c7f71f482bdabd1ea844d62c952b094e632959690d7448ca2aab34034ec9856935855600960005260c87fe12d5ff10640a555479d85b7ab5f83b5dbd3cf6ac615eec77e24e0984b75a03855565b6112cc611ccc565b61069f600154836117c3565b6000828152600460205260409020546001600160a01b03161561132e5760405162461bcd60e51b815260206004820152600e60248201526d1053149150511657d3525395115160921b6044820152606401610725565b60008054908061133d83612474565b90915550506001600160a01b038316600090815260036020526040902080546fffffffffffffffffffffffffffffffff19811660016001600160801b0392831681019092161790915581146113d7576001600160a01b038316600090815260036020526040902080546001600160c01b038116600160c01b918290046001600160401b039081166001810190911690920217909155611423565b6001600160a01b0383166000908152600360205260409020805467ffffffffffffffff60801b198116600160801b918290046001600160401b0390811660018101909116909202179091555b5060008281526004602052604080822080546001600160a01b0319166001600160a01b03871690811790915590518492907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4505050565b6000818152600460205260409020546001600160a01b038481169116146114d35760405162461bcd60e51b81526020600482015260096024820152683737ba1037bbb732b960b91b6044820152606401610725565b6001600160a01b038316600090815260036020526040812080546001600160801b03169161150083612413565b82546101009290920a6001600160801b038181021990931691831602179091556001600160a01b0384166000908152600360205260408120805490921692506115488361244d565b82546001600160801b039182166101009390930a928302919092021990911617905550600081815260056020908152604080832080546001600160a01b0319908116909155600490925280832080546001600160a01b038781169190941681179091559051849391928716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600081600114156115ec57506127105b81600214156115fa5750612af85b81600314156116085750612e7c5b8160041415611616575061319c5b816005141561162457506134585b816006141561163257506136b05b816007141561164057506138a45b816008141561164e5750613a345b816009141561165c5750613b605b919050565b6000818152600460205260409020546001600160a01b0390811690831681146116b85760405162461bcd60e51b81526020600482015260096024820152682727aa2fa7aba722a960b91b6044820152606401610725565b6000828152600460205260409020546001600160a01b03166117095760405162461bcd60e51b815260206004820152600a6024820152691393d517d3525395115160b21b6044820152606401610725565b60008054908061171883612436565b90915550506001600160a01b038116600090815260036020526040812080546001600160801b03169161174a83612413565b82546001600160801b039182166101009390930a92830291909202199091161790555060008281526004602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a4505050565b6117cb611ccc565b826118075760405162461bcd60e51b815260206004820152600c60248201526b1cd95959081b9bdd081cd95d60a21b6044820152606401610725565b611811828461192f565b156118265761181f82611989565b905061069f565b6040518060c00160405280611844848664131155915360da1b6119fc565b815260200161185b84866312d2539160e21b6119fc565b8152602001611876848667135055115492505360c21b6119fc565b815260200161188f84866552415249545960d01b6119fc565b81526020016118a98486665155414c49545960c81b6119fc565b81526020016118c38486661153115351539560ca1b611ac0565b9052905060006118d283611b77565b905080156118f2576118e581600a612385565b6020830152600060808301525b5092915050565b600061271083111561190d5750600461069f565b611917838361192f565b156119265761181f8383611c23565b50600292915050565b60008061193b83611c67565b905060005b600981101561198157611955816104e26123b1565b61195f9083612385565b85141561196f5760019250611981565b8061197981612474565b915050611940565b505092915050565b611991611ccc565b600061199f6104e28461239d565b6119aa906001612385565b90506000816119ba81600a6123b1565b6119c49190612385565b90506040518060c001604052808281526020018281526020018281526020018281526020018281526020018281525092505050919050565b6040805160208101859052908101839052606081018290526000908190620f4240906080016040516020818303038152906040528051906020012060001c611a44919061248f565b611a4f906001612385565b905062046a358111611a6557600191505061099c565b6208118d8111611a7957600291505061099c565b620af6088111611a8d57600391505061099c565b620d17a68111611aa157600491505061099c565b620e76678111611ab557600591505061099c565b506006949350505050565b6000611acd60048561248f565b60031415611af157611aea848466504f54454e435960c81b6119fc565b905061099c565b604080516020810186905290810184905260608101839052600090620f4240906080016040516020818303038152906040528051906020012060001c611b37919061248f565b611b42906001612385565b90506207a1208111611b5857600191505061099c565b611b6360058261248f565b611b6e906002612385565b95945050505050565b60006127108211611b8a57506000919050565b612af88211611b9b57506001919050565b612e7c8211611bac57506002919050565b61319c8211611bbd57506003919050565b6134588211611bce57506004919050565b6136b08211611bdf57506005919050565b6138a48211611bf057506006919050565b613a348211611c0157506007919050565b613b608211611c1257506008919050565b613c28821161165c57506009919050565b600080611c326104e28561239d565b611c3d906001612385565b9050611c4a6001826123d0565b611c55826005612385565b611c5f9190612385565b949350505050565b60006104e282604051602001611c9e9181526040602082018190526007908201526614d41150d2505360ca1b606082015260800190565b6040516020818303038152906040528051906020012060001c611cc1919061248f565b61069f906001612385565b6040518060c001604052806006906020820280368337509192915050565b80356001600160a01b038116811461165c57600080fd5b600060208284031215611d1357600080fd5b61099c82611cea565b60008060408385031215611d2f57600080fd5b611d3883611cea565b9150611d4660208401611cea565b90509250929050565b60008060008060008060c08789031215611d6857600080fd5b611d7187611cea565b9550611d7f60208801611cea565b9450611d8d60408801611cea565b9350611d9b60608801611cea565b9250611da960808801611cea565b9150611db760a08801611cea565b90509295509295509295565b600080600060608486031215611dd857600080fd5b611de184611cea565b9250611def60208501611cea565b9150604084013590509250925092565b60008060008060808587031215611e1557600080fd5b611e1e85611cea565b9350611e2c60208601611cea565b92506040850135915060608501356001600160401b03811115611e4e57600080fd5b8501601f81018713611e5f57600080fd5b8035611e72611e6d8261235e565b61232e565b818152886020838501011115611e8757600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b60008060408385031215611ebc57600080fd5b611ec583611cea565b915060208301358015158114611eda57600080fd5b809150509250929050565b600080600060608486031215611efa57600080fd5b611f0384611cea565b92506020840135915060408401356001600160401b0381168114611f2657600080fd5b809150509250925092565b60008060408385031215611f4457600080fd5b611f4d83611cea565b946020939093013593505050565b600080600060608486031215611f7057600080fd5b611f7984611cea565b95602085013595506040909401359392505050565b600060c08284031215611fa057600080fd5b82601f830112611faf57600080fd5b60405160c081018181106001600160401b0382111715611fd157611fd16124e5565b604052808360c08101861015611fe657600080fd5b6000805b600681101561201f5782516001600160b01b03198116811461200a578283fd5b84526020938401939290920191600101611fea565b50929695505050505050565b60006020828403121561203d57600080fd5b813561099c816124fb565b60006020828403121561205a57600080fd5b815161099c816124fb565b60006020828403121561207757600080fd5b81516001600160401b0381111561208d57600080fd5b8201601f8101841361209e57600080fd5b80516120ac611e6d8261235e565b8181528560208385010111156120c157600080fd5b611b6e8260208301602086016123e7565b6000602082840312156120e457600080fd5b5035919050565b6000602082840312156120fd57600080fd5b5051919050565b6000806040838503121561211757600080fd5b82359150611d4660208401611cea565b6000806040838503121561213a57600080fd5b823591506020808401356001600160401b038082111561215957600080fd5b818601915086601f83011261216d57600080fd5b81358181111561217f5761217f6124e5565b8060051b915061219084830161232e565b8181528481019084860184860187018b10156121ab57600080fd5b600095505b838610156121ce5780358352600195909501949186019186016121b0565b508096505050505050509250929050565b8060005b6006811015610f405781518452602093840193909101906001016121e3565b6000815180845261221a8160208601602086016123e7565b601f01601f19169290920160200192915050565b600082516122408184602087016123e7565b9190910192915050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061227d90830184612202565b9695505050505050565b60c08101818360005b60068110156122b95781516001600160b01b031916835260209283019290910190600101612290565b50505092915050565b60c0810161069f82846121df565b60208152600061099c6020830184612202565b6020808252600e908201526d1b9bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b838152610100810161232060208301856121df565b8260e0830152949350505050565b604051601f8201601f191681016001600160401b0381118282101715612356576123566124e5565b604052919050565b60006001600160401b03821115612377576123776124e5565b50601f01601f191660200190565b60008219821115612398576123986124a3565b500190565b6000826123ac576123ac6124b9565b500490565b60008160001904831182151516156123cb576123cb6124a3565b500290565b6000828210156123e2576123e26124a3565b500390565b60005b838110156124025781810151838201526020016123ea565b83811115610f405750506000910152565b60006001600160801b0382168061242c5761242c6124a3565b6000190192915050565b600081612445576124456124a3565b506000190190565b60006001600160801b038083168181141561246a5761246a6124a3565b6001019392505050565b6000600019821415612488576124886124a3565b5060010190565b60008261249e5761249e6124b9565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610e0a57600080fdfeb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103a2646970667358221220c0cf5c0d8eea9d8463269e25dc4d40ddb746c3dec80f83c3bd6a5c521b7fa90b64736f6c63430008070033

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061021c5760003560e01c806370a0823111610125578063b88d4fde116100ad578063cd5d21181161007c578063cd5d2118146105b8578063d4d46e50146105db578063e1dc0761146105ee578063e985e9c51461060e578063eb1d28bb1461063c57600080fd5b8063b88d4fde1461056c578063c87b56dd1461057f578063cba57e3814610592578063cc2a9a5b146105a557600080fd5b80638da5cb5b116100f45780638da5cb5b1461051257806395d89b411461051a578063a22cb4651461053e578063a9059cbb14610551578063b13038a11461056457600080fd5b806370a082311461049a57806379cc6790146104cc5780637b303965146104df5780638ada6b0f146104ff57600080fd5b80631fe543e3116101a857806342842e0e1161017757806342842e0e146103d8578063468f9b14146103eb5780636352211e146103f457806368a6cdf21461041d57806369ebe78e1461049157600080fd5b80631fe543e31461038c57806323b872dd1461039f57806332ed5391146103b257806335599310146103c557600080fd5b80630b44a218116101ef5780630b44a218146102dd5780631015805b146102f0578063156e29f61461033757806318160ddd1461034a5780631d02f7b81461035357600080fd5b806301ffc9a71461022157806306fdde0314610249578063081812fc14610287578063095ea7b3146102c8575b600080fd5b61023461022f36600461202b565b61066e565b60405190151581526020015b60405180910390f35b61027a604051806040016040528060128152602001714d6574612026204d61676963204974656d7360701b81525081565b60405161024091906122d0565b6102b06102953660046120d2565b6005602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610240565b6102db6102d6366004611f31565b6106a5565b005b6102db6102eb366004611ea9565b61078a565b6103296102fe366004611d01565b6001600160a01b0316600090815260036020526040902054600160c01b90046001600160401b031690565b604051908152602001610240565b610329610345366004611f5b565b6107f2565b61032960005481565b610329610361366004611d01565b6001600160a01b0316600090815260036020526040902054600160801b90046001600160401b031690565b6102db61039a366004612127565b610861565b6102346103ad366004611dc3565b6108db565b6102db6103c0366004611ee5565b6109a3565b6103296103d3366004612104565b610a0b565b6102db6103e6366004611dc3565b610a79565b61032960015481565b6102b06104023660046120d2565b6004602052600090815260409020546001600160a01b031681565b61046261042b366004611d01565b6003602052600090815260409020546001600160801b038116906001600160401b03600160801b8204811691600160c01b90041683565b604080516001600160801b0390941684526001600160401b039283166020850152911690820152606001610240565b61032960095481565b6103296104a8366004611d01565b6001600160a01b03166000908152600360205260409020546001600160801b031690565b6102346104da366004611f31565b610a99565b6104f26104ed3660046120d2565b610adb565b6040516102409190612287565b6007546102b0906001600160a01b031681565b6102b0610bd7565b61027a604051806040016040528060058152602001644954454d5360d81b81525081565b6102db61054c366004611ea9565b610bf4565b61023461055f366004611f31565b610c60565b6102db610cbd565b6102db61057a366004611dff565b610e0d565b61027a61058d3660046120d2565b610f46565b6102346105a03660046120d2565b611016565b6102db6105b3366004611d4f565b611024565b6102346105c6366004611d01565b60026020526000908152604090205460ff1681565b6008546102b0906001600160a01b031681565b6106016105fc3660046120d2565b6112c4565b60405161024091906122c2565b61023461061c366004611d1c565b600660209081526000928352604080842090915290825290205460ff1681565b60085461065690600160a01b90046001600160401b031681565b6040516001600160401b039091168152602001610240565b60006380ac58cd60e01b6001600160e01b03198316148061069f5750635b5e139f60e01b6001600160e01b03198316145b92915050565b6000818152600460205260409020546001600160a01b0316338114806106ee57506001600160a01b038116600090815260066020908152604080832033845290915290205460ff165b61072e5760405162461bcd60e51b815260206004820152600c60248201526b1393d517d054141493d5915160a21b60448201526064015b60405180910390fd5b60008281526005602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b336107a16000805160206125128339815191525490565b6001600160a01b0316146107c75760405162461bcd60e51b8152600401610725906122e3565b6001600160a01b03919091166000908152600260205260409020805460ff1916911515919091179055565b3360009081526002602052604081205460ff166108215760405162461bcd60e51b8152600401610725906122e3565b60005b838110156108595760005461083a906001612385565b91506108478583856112d8565b8061085181612474565b915050610824565b509392505050565b6008546001600160a01b031633146108a95760405162461bcd60e51b815260206004820152600b60248201526a1b9bdd08185b1b1bddd95960aa1b6044820152606401610725565b600154156108b657600080fd5b806000815181106108c9576108c96124cf565b60200260200101516001819055505050565b6000336001600160a01b038516148061090a57506000828152600560205260409020546001600160a01b031633145b8061093857506001600160a01b038416600090815260066020908152604080832033845290915290205460ff165b8061095257503360009081526002602052604090205460ff165b61098d5760405162461bcd60e51b815260206004820152600c60248201526b1393d517d054141493d5915160a21b6044820152606401610725565b61099884848461147e565b5060015b9392505050565b600080516020612512833981519152546001600160a01b0316336001600160a01b0316146109d057600080fd5b600880546009939093556001600160401b03909116600160a01b026001600160e01b03199092166001600160a01b0390931692909217179055565b3360009081526002602052604081205460ff16610a3a5760405162461bcd60e51b8152600401610725906122e3565b6000838152600b60205260408120805491610a5483612436565b91905055610a61846115dc565b610a6b9190612385565b905061069f828260026112d8565b610a9483838360405180602001604052806000815250610e0d565b505050565b3360009081526002602052604081205460ff16610ac85760405162461bcd60e51b8152600401610725906122e3565b610ad28383611661565b50600192915050565b610ae3611ccc565b60015480610b225760405162461bcd60e51b815260206004820152600c60248201526b139bdd081c995d99585b195960a21b6044820152606401610725565b600a60006127108511610b3f57610b3a60048661248f565b610b42565b60095b81526020810191909152604001600020546001600160a01b031663ecac6724610b6b83866117c3565b6040518263ffffffff1660e01b8152600401610b8791906122c2565b60c06040518083038186803b158015610b9f57600080fd5b505afa158015610bb3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061099c9190611f8e565b6000610bef6000805160206125128339815191525490565b905090565b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6000818152600460205260408120546001600160a01b03163314610cb25760405162461bcd60e51b81526020600482015260096024820152682727aa2fa7aba722a960b91b6044820152606401610725565b610ad233848461147e565b600080516020612512833981519152546001600160a01b0316336001600160a01b031614610d185760405162461bcd60e51b81526020600482015260086024820152670dcdee840c2eae8d60c31b6044820152606401610725565b60015415610d5c5760405162461bcd60e51b8152602060048201526011602482015270185b1c9958591e481c995c5d595cdd1959607a1b6044820152606401610725565b6008546009546040516305d3b1d360e41b81526004810191909152600160a01b82046001600160401b031660248201526003604482015262030d406064820152600160848201526001600160a01b0390911690635d3b1d309060a401602060405180830381600087803b158015610dd257600080fd5b505af1158015610de6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0a91906120eb565b50565b610e188484846108db565b506001600160a01b0383163b15610f40576000836001600160a01b031663150b7a023360008686604051602401610e52949392919061224a565b6040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050604051610e8b919061222e565b600060405180830381855afa9150503d8060008114610ec6576040519150601f19603f3d011682016040523d82523d6000602084013e610ecb565b606091505b50915050600081806020019051810190610ee59190612048565b9050630a85bd0160e11b6001600160e01b0319821614610f3d5760405162461bcd60e51b81526020600482015260136024820152722727aa2fa2a9219b9918afa922a1a2a4ab22a960691b6044820152606401610725565b50505b50505050565b60015460609080610fd2576007546040516302fa6c9b60e11b8152600260048201526001600160a01b03909116906305f4d936906024015b60006040518083038186803b158015610f9657600080fd5b505afa158015610faa573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261099c9190810190612065565b6007546001600160a01b0316630c3501be84610fee84826117c3565b610ff887866118f9565b6040518463ffffffff1660e01b8152600401610f7e9392919061230b565b600061069f8260015461192f565b600080516020612512833981519152546001600160a01b0316336001600160a01b0316146110645760405162461bcd60e51b8152600401610725906122e3565b7f13da86008ba1c6922daee3e07db95305ef49ebced9f5467a0b8613fcc6b343e380546001600160a01b03199081166001600160a01b03988916179091557fbbc70db1b6c7afd11e79c0fb0051300458f1a3acb8ee9789d9b6b26c61ad9bc780548216968816969096179095557fbff4442b8ed600beeb8e26b1279a0f0d14c6edfaec26d968ee13c86f7d4c2ba880548616948716949094179093557fa856840544dc26124927add067d799967eac11be13e14d82cc281ea46fa3975980548516928616929092179091557f825eb4cda6b8b44578c55770496c59e6dc3cf2235f690bcdaf51a61898ceb28480548416918516919091179055600780549092169216919091179055600b6020526103e87f72c6bfb7988af3a1efa6568f02a999bc52252641c659d85961ca3d372b57d5cf556103847fa50eece07c7db1631545c0069bd8f5f54d5935e215d59097edf258a44ba91634556103207f64c15cc42be7899b001f818cf4433057002112c418d1d3a67cd5cb453051d33e556102bc7f12d0c11577e2f0950f57c455c117796550b79f444811db8ba2f69c57b646c784556102587febae6141bae5521e99e0a8d610356b0f501fea54980b59c84841db43ba7204f4556101f47f0387e9d1203691d8e3362a7e4c6723de358a4010d7f31ecbec3fbfc61d1c75fc556101907ff5559028dc9ba50d75343c779b2f75e13a84a14662932fc67a486f263ca31a965561012c7f71f482bdabd1ea844d62c952b094e632959690d7448ca2aab34034ec9856935855600960005260c87fe12d5ff10640a555479d85b7ab5f83b5dbd3cf6ac615eec77e24e0984b75a03855565b6112cc611ccc565b61069f600154836117c3565b6000828152600460205260409020546001600160a01b03161561132e5760405162461bcd60e51b815260206004820152600e60248201526d1053149150511657d3525395115160921b6044820152606401610725565b60008054908061133d83612474565b90915550506001600160a01b038316600090815260036020526040902080546fffffffffffffffffffffffffffffffff19811660016001600160801b0392831681019092161790915581146113d7576001600160a01b038316600090815260036020526040902080546001600160c01b038116600160c01b918290046001600160401b039081166001810190911690920217909155611423565b6001600160a01b0383166000908152600360205260409020805467ffffffffffffffff60801b198116600160801b918290046001600160401b0390811660018101909116909202179091555b5060008281526004602052604080822080546001600160a01b0319166001600160a01b03871690811790915590518492907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4505050565b6000818152600460205260409020546001600160a01b038481169116146114d35760405162461bcd60e51b81526020600482015260096024820152683737ba1037bbb732b960b91b6044820152606401610725565b6001600160a01b038316600090815260036020526040812080546001600160801b03169161150083612413565b82546101009290920a6001600160801b038181021990931691831602179091556001600160a01b0384166000908152600360205260408120805490921692506115488361244d565b82546001600160801b039182166101009390930a928302919092021990911617905550600081815260056020908152604080832080546001600160a01b0319908116909155600490925280832080546001600160a01b038781169190941681179091559051849391928716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600081600114156115ec57506127105b81600214156115fa5750612af85b81600314156116085750612e7c5b8160041415611616575061319c5b816005141561162457506134585b816006141561163257506136b05b816007141561164057506138a45b816008141561164e5750613a345b816009141561165c5750613b605b919050565b6000818152600460205260409020546001600160a01b0390811690831681146116b85760405162461bcd60e51b81526020600482015260096024820152682727aa2fa7aba722a960b91b6044820152606401610725565b6000828152600460205260409020546001600160a01b03166117095760405162461bcd60e51b815260206004820152600a6024820152691393d517d3525395115160b21b6044820152606401610725565b60008054908061171883612436565b90915550506001600160a01b038116600090815260036020526040812080546001600160801b03169161174a83612413565b82546001600160801b039182166101009390930a92830291909202199091161790555060008281526004602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a4505050565b6117cb611ccc565b826118075760405162461bcd60e51b815260206004820152600c60248201526b1cd95959081b9bdd081cd95d60a21b6044820152606401610725565b611811828461192f565b156118265761181f82611989565b905061069f565b6040518060c00160405280611844848664131155915360da1b6119fc565b815260200161185b84866312d2539160e21b6119fc565b8152602001611876848667135055115492505360c21b6119fc565b815260200161188f84866552415249545960d01b6119fc565b81526020016118a98486665155414c49545960c81b6119fc565b81526020016118c38486661153115351539560ca1b611ac0565b9052905060006118d283611b77565b905080156118f2576118e581600a612385565b6020830152600060808301525b5092915050565b600061271083111561190d5750600461069f565b611917838361192f565b156119265761181f8383611c23565b50600292915050565b60008061193b83611c67565b905060005b600981101561198157611955816104e26123b1565b61195f9083612385565b85141561196f5760019250611981565b8061197981612474565b915050611940565b505092915050565b611991611ccc565b600061199f6104e28461239d565b6119aa906001612385565b90506000816119ba81600a6123b1565b6119c49190612385565b90506040518060c001604052808281526020018281526020018281526020018281526020018281526020018281525092505050919050565b6040805160208101859052908101839052606081018290526000908190620f4240906080016040516020818303038152906040528051906020012060001c611a44919061248f565b611a4f906001612385565b905062046a358111611a6557600191505061099c565b6208118d8111611a7957600291505061099c565b620af6088111611a8d57600391505061099c565b620d17a68111611aa157600491505061099c565b620e76678111611ab557600591505061099c565b506006949350505050565b6000611acd60048561248f565b60031415611af157611aea848466504f54454e435960c81b6119fc565b905061099c565b604080516020810186905290810184905260608101839052600090620f4240906080016040516020818303038152906040528051906020012060001c611b37919061248f565b611b42906001612385565b90506207a1208111611b5857600191505061099c565b611b6360058261248f565b611b6e906002612385565b95945050505050565b60006127108211611b8a57506000919050565b612af88211611b9b57506001919050565b612e7c8211611bac57506002919050565b61319c8211611bbd57506003919050565b6134588211611bce57506004919050565b6136b08211611bdf57506005919050565b6138a48211611bf057506006919050565b613a348211611c0157506007919050565b613b608211611c1257506008919050565b613c28821161165c57506009919050565b600080611c326104e28561239d565b611c3d906001612385565b9050611c4a6001826123d0565b611c55826005612385565b611c5f9190612385565b949350505050565b60006104e282604051602001611c9e9181526040602082018190526007908201526614d41150d2505360ca1b606082015260800190565b6040516020818303038152906040528051906020012060001c611cc1919061248f565b61069f906001612385565b6040518060c001604052806006906020820280368337509192915050565b80356001600160a01b038116811461165c57600080fd5b600060208284031215611d1357600080fd5b61099c82611cea565b60008060408385031215611d2f57600080fd5b611d3883611cea565b9150611d4660208401611cea565b90509250929050565b60008060008060008060c08789031215611d6857600080fd5b611d7187611cea565b9550611d7f60208801611cea565b9450611d8d60408801611cea565b9350611d9b60608801611cea565b9250611da960808801611cea565b9150611db760a08801611cea565b90509295509295509295565b600080600060608486031215611dd857600080fd5b611de184611cea565b9250611def60208501611cea565b9150604084013590509250925092565b60008060008060808587031215611e1557600080fd5b611e1e85611cea565b9350611e2c60208601611cea565b92506040850135915060608501356001600160401b03811115611e4e57600080fd5b8501601f81018713611e5f57600080fd5b8035611e72611e6d8261235e565b61232e565b818152886020838501011115611e8757600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b60008060408385031215611ebc57600080fd5b611ec583611cea565b915060208301358015158114611eda57600080fd5b809150509250929050565b600080600060608486031215611efa57600080fd5b611f0384611cea565b92506020840135915060408401356001600160401b0381168114611f2657600080fd5b809150509250925092565b60008060408385031215611f4457600080fd5b611f4d83611cea565b946020939093013593505050565b600080600060608486031215611f7057600080fd5b611f7984611cea565b95602085013595506040909401359392505050565b600060c08284031215611fa057600080fd5b82601f830112611faf57600080fd5b60405160c081018181106001600160401b0382111715611fd157611fd16124e5565b604052808360c08101861015611fe657600080fd5b6000805b600681101561201f5782516001600160b01b03198116811461200a578283fd5b84526020938401939290920191600101611fea565b50929695505050505050565b60006020828403121561203d57600080fd5b813561099c816124fb565b60006020828403121561205a57600080fd5b815161099c816124fb565b60006020828403121561207757600080fd5b81516001600160401b0381111561208d57600080fd5b8201601f8101841361209e57600080fd5b80516120ac611e6d8261235e565b8181528560208385010111156120c157600080fd5b611b6e8260208301602086016123e7565b6000602082840312156120e457600080fd5b5035919050565b6000602082840312156120fd57600080fd5b5051919050565b6000806040838503121561211757600080fd5b82359150611d4660208401611cea565b6000806040838503121561213a57600080fd5b823591506020808401356001600160401b038082111561215957600080fd5b818601915086601f83011261216d57600080fd5b81358181111561217f5761217f6124e5565b8060051b915061219084830161232e565b8181528481019084860184860187018b10156121ab57600080fd5b600095505b838610156121ce5780358352600195909501949186019186016121b0565b508096505050505050509250929050565b8060005b6006811015610f405781518452602093840193909101906001016121e3565b6000815180845261221a8160208601602086016123e7565b601f01601f19169290920160200192915050565b600082516122408184602087016123e7565b9190910192915050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061227d90830184612202565b9695505050505050565b60c08101818360005b60068110156122b95781516001600160b01b031916835260209283019290910190600101612290565b50505092915050565b60c0810161069f82846121df565b60208152600061099c6020830184612202565b6020808252600e908201526d1b9bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b838152610100810161232060208301856121df565b8260e0830152949350505050565b604051601f8201601f191681016001600160401b0381118282101715612356576123566124e5565b604052919050565b60006001600160401b03821115612377576123776124e5565b50601f01601f191660200190565b60008219821115612398576123986124a3565b500190565b6000826123ac576123ac6124b9565b500490565b60008160001904831182151516156123cb576123cb6124a3565b500290565b6000828210156123e2576123e26124a3565b500390565b60005b838110156124025781810151838201526020016123ea565b83811115610f405750506000910152565b60006001600160801b0382168061242c5761242c6124a3565b6000190192915050565b600081612445576124456124a3565b506000190190565b60006001600160801b038083168181141561246a5761246a6124a3565b6001019392505050565b6000600019821415612488576124886124a3565b5060010190565b60008261249e5761249e6124b9565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610e0a57600080fdfeb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103a2646970667358221220c0cf5c0d8eea9d8463269e25dc4d40ddb746c3dec80f83c3bd6a5c521b7fa90b64736f6c63430008070033

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
[ Download: CSV Export  ]

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.