ETH Price: $2,079.97 (-3.49%)

Contract

0x034ebf72c5d2af86A086f7dFD8fDB5E9c6e55b7C
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To

There are no matching entries

Please try again later

Advanced mode:
Parent Transaction Hash Method Block
From
To
View All Internal Transactions
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

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

Contract Source Code Verified (Exact Match)

Contract Name:
EldersInventoryManager

Compiler Version
v0.8.12+commit.f00d7308

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
// SPDX-License-Identifier: Unlicense
pragma solidity 0.8.12;
//import "hardhat/console.sol"; ///REMOVE BEFORE DEPLOYMENT
//v 1.0.3
import "./EldersDataStructures.sol";
import "./Interfaces.sol";

contract EldersInventoryManager {

    using EldersDataStructures for EldersDataStructures.EldersMeta;
    struct EldersInventoryItem {
           string folder;
           string name;          
    }

    string public constant header = '<svg id="elf" viewBox="0 0 160 160" xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMinYMin meet">';
    string public constant footer = "<style>#elf{shape-rendering: crispedges; image-rendering: -webkit-crisp-edges; image-rendering: -moz-crisp-edges; image-rendering: crisp-edges; image-rendering: pixelated; -ms-interpolation-mode: nearest-neighbor;}</style></svg>";
    
    string[6] public CLASS;
    string[6] public LAYERS;
    string[8] public ATTRIBUTES;
    string[5] public DISPLAYTYPES;
    uint256[6] public RACE_CODE;
    uint256[6] public BODY_CODE;
    uint256[6] public HEAD_CODE;
    uint256[6] public PRIMARY_WEAPON_CODE;
    uint256[6] public SECONDARY_WEAPON_CODE;
    uint256[6] public ARMOR_CODE;

    //layer code, followed by itemId
    mapping(uint256 => EldersInventoryItem) public EldersInventory;    
    
    bool isInitialized;
    address admin;
    string ipfsBase;
    
function initialize() public {
    admin = msg.sender;
    isInitialized = true;
    CLASS = ["Druid", "Sorceress", "Ranger", "Assassin", "Berserker", "Mauler"];
    LAYERS = ["Primary Weapon","Race", "Body", "Head", "Armor", "Secondary Weapon"];
    ATTRIBUTES = ["Strength", "Agility", "Intellegence", "Attack Points","Health Points","Mana"];
    DISPLAYTYPES = ["boost_number", "boost_percentage", "date", "number", ""];
    
    RACE_CODE = [700,800,900,1000,1100,1200];
    BODY_CODE = [1300,1400,1500,1600,1700,1800];
    HEAD_CODE = [1900,2000,2100,2200,2300,2400];
    PRIMARY_WEAPON_CODE = [2500,2600,2700,2800,2900,3000];
    SECONDARY_WEAPON_CODE =[3100,3200,3300,3400,3500,3600];
    ARMOR_CODE = [3700,3800,3900,4000,4100,4200];

    ipfsBase = "https://huskies.mypinata.cloud/ipfs/";
}

function setIPFSBase (string calldata _ipfsBase) public {
    onlyOwner();
    ipfsBase = _ipfsBase;
}


function addItem(uint256 [] calldata itemId, string[] memory name, string calldata folder ) public {    
    onlyOwner();    
    for(uint i = 0; i < itemId.length; i++) {       
  
        EldersInventory[itemId[i]].folder = folder;
        EldersInventory[itemId[i]].name = name[i];       
        
    }    

}

function getTokenURI(uint16 id_, uint256 elder, bool isRevealed)
        external
        view
        returns (string memory)
    {

         string memory docURI =  string.concat('<html><body><iframe allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" frameborder="0" height="100%" sandbox="allow-scripts" src="',
                                    'data:image/svg+xml;base64,', Base64.encode(bytes(getSVG(elder))),'" width="100%"/></body></html>');
        //bytes memory imageSvg = abi.encodePacked('"image": "data:image/svg+xml;base64,', Base64.encode(bytes(getSVG(elder))),'",');
         bytes memory imageSvg = abi.encodePacked('"animation_url": "data:text/html;base64,', Base64.encode(bytes(docURI)),'",');
        bytes memory imagePng = abi.encodePacked('"image": "https://imagedelivery.net/UsEuOeZz7eUzV1E1xlJ0hw/d34b45a8-fe1f-488d-e0d6-3cb6941a0600/public",');
        bytes memory name = abi.encodePacked( '"name":"Elder #', toString(id_),'",');
        bytes memory description = abi.encodePacked('"description":"Etherna Elves Elders is a collection of 2222 Heroes roaming the Elvenverse in search of the Mires. Play Ethernal Elves to upgrade your abilities and grow your army. !onward",');
        string memory dnaString = string.concat('"attributes": [{"trait_type":"DNA","value":"',toString(elder), '"}]');
        return
            string(
                abi.encodePacked(
                    "data:application/json;base64,",
                    Base64.encode(
                        bytes(
                            abi.encodePacked(
                                '{',
                                name,
                                description,
                                isRevealed ? imageSvg : imagePng,                                
                                isRevealed ? getAttributes(elder) : dnaString,                                                                   
                                '}'
                            )
                        )
                    )
                )
            );
    }

     function getSVG(uint256 elder) public view returns (string memory) {
      
      EldersDataStructures.EldersMeta memory item = EldersDataStructures.getElder(elder);
      uint256 elderClass = item.elderClass; 

      string memory elder =  string(
                abi.encodePacked(
                    header,
                    get(PRIMARY_WEAPON_CODE[elderClass], uint(item.primaryWeapon)),
                    get(RACE_CODE[elderClass], uint(item.race) ),
                    get(BODY_CODE[elderClass], uint(item.body) ),
                    get(HEAD_CODE[elderClass], uint(item.head) ),
                    get(ARMOR_CODE[elderClass], uint(item.armor)),
                    get(SECONDARY_WEAPON_CODE[elderClass], uint(item.secondaryWeapon)),                                  
                    footer
                )
            );

        return elder;          
    }

     function getAttributes(uint256 elder) internal view returns (string memory) {
        
        EldersDataStructures.EldersMeta memory item = EldersDataStructures.getElder(elder);
        return
            string(
                abi.encodePacked(
                    '"attributes": [',
                    string.concat('{"trait_type":"Class","value":"',CLASS[item.elderClass], '"}'),
                    ",",
                    getLayerAttributes(elder),                    
                    ",",
                    getValueAttributes(elder),                 
                    "]"
                )
            );
        
    }

     function getLayerAttributes(uint256 elder) internal view returns (string memory) {
        EldersDataStructures.EldersMeta memory item = EldersDataStructures.getElder(elder);       
        return
            string(
                abi.encodePacked(
                    getLayerAttribute(0, uint8(item.primaryWeapon), PRIMARY_WEAPON_CODE[item.elderClass]),
                    ",",
                    getLayerAttribute(1, uint8(item.race), RACE_CODE[item.elderClass]),                    
                    ",",
                    getLayerAttribute(2, uint8(item.body), BODY_CODE[item.elderClass]),                    
                    ",",
                    getLayerAttribute(3, uint8(item.head), HEAD_CODE[item.elderClass]),                    
                    ",",
                    getLayerAttribute(4, uint8(item.armor), ARMOR_CODE[item.elderClass]),
                    ",",
                    getLayerAttribute(5, uint8(item.secondaryWeapon), SECONDARY_WEAPON_CODE[item.elderClass])                
                )
            );            
    }

    function getValueAttributes(uint256 elder) internal view returns (string memory) {
        EldersDataStructures.EldersMeta memory item = EldersDataStructures.getElder(elder);
        return
            string(
                abi.encodePacked(
                    getValueAttribute(0, uint(item.strength), 3),                   
                    ",",
                    getValueAttribute(1, uint(item.agility), 3),                   
                    ",",
                    getValueAttribute(2, uint(item.intellegence), 3),                   
                    ",",
                    getValueAttribute(3, uint(item.attackPoints), 0),                   
                    ",",
                    getValueAttribute(4, uint(item.healthPoints), 0),                   
                    ",",
                    getValueAttribute(5, uint(item.mana), 0)
                )
            );
            
    }

    function getItem(uint256 itemId) external returns(EldersInventoryItem memory item) {
        return EldersInventory[itemId];
    }

   function getLayerAttribute(uint256 layerId, uint256 code, uint256 itemId)
        internal
        view
        returns (string memory)
    {
        uint256 identifier = code + itemId;
        return
            string(
                abi.encodePacked(
                    '{"trait_type":"',
                    LAYERS[layerId],
                    '","value":"',
                    EldersInventory[identifier].name,
                    '"}'                    
                )
            );
    }

    function getValueAttribute(uint8 attributeId, uint value, uint8 displayType)
        internal
        view
        returns (string memory)
    {
        return
            string(
                abi.encodePacked(
                    '{"trait_type":"',
                    ATTRIBUTES[attributeId],
                    '","value":"',
                    toString(value),
                    '", "display_type":"',
                    DISPLAYTYPES[displayType],
                    '"}'                    
                )
            );
    }

/*

█▀▄▀█ █▀█ █▀▄ █ █▀▀ █ █▀▀ █▀█ █▀
█░▀░█ █▄█ █▄▀ █ █▀░ █ ██▄ █▀▄ ▄█
*/

    function onlyOwner() internal view {    
        require(admin == msg.sender, "not admin");
    }

   
/*

█░█ █▀▀ █░░ █▀█ █▀▀ █▀█ █▀
█▀█ ██▄ █▄▄ █▀▀ ██▄ █▀▄ ▄█
*/

function get(uint256 code, uint256 itemId) internal view returns (string memory data_)
{       
        uint256 identifier = code + itemId;    

        string memory folderName = EldersInventory[identifier].folder;
        string memory fileName = string.concat(toString(identifier), ".png"); 
        string memory ipfs = string.concat(ipfsBase,folderName,"/",fileName);      

        data_ = string(
                abi.encodePacked(
                    '<image href="',
                    ipfs,
                    '"/>'
                )
            );
         
        return data_;
}

function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

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

}

/// @title Base64
/// @author Brecht Devos - <brecht@loopring.org>
/// @notice Provides a function for encoding some bytes in base64
/// @notice NOT BUILT BY ETHERNAL ELVES TEAM.
library Base64 {
    string internal constant TABLE =
        "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

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

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

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

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

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

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

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

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

            // run over the input, 3 bytes at a time
            for {

            } lt(dataPtr, endPtr) {

            } {
                dataPtr := add(dataPtr, 3)

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

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

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

        return result;
    }
}

// SPDX-License-Identifier: Unlicense
pragma solidity 0.8.12;

library EldersDataStructures {

struct EldersMeta {
            uint256 strength;
            uint256 agility;
            uint256 intellegence;
            uint256 healthPoints;
            uint256 attackPoints; 
            uint256 mana;
            uint256 primaryWeapon; 
            uint256 secondaryWeapon; 
            uint256 armor; 
            uint256 level;
            uint256 head;                       
            uint256 body;  
            uint256 race;  
            uint256 elderClass;                                     
}

  
function getElder(uint256 _elder) internal pure returns(EldersMeta memory elder) {

    elder.strength =         uint256(uint16(_elder));
    elder.agility =          uint256(uint16(_elder>>16));
    elder.intellegence =     uint256(uint16(_elder>>32));
    elder.attackPoints =     uint256(uint16(_elder>>48));
    elder.healthPoints =     uint256(uint16(_elder>>64));
    elder.mana =             uint256(uint16(_elder>>80));
    elder.primaryWeapon =    uint256(uint16(_elder>>96));
    elder.secondaryWeapon =  uint256(uint16(_elder>>112));
    elder.armor =            uint256(uint16(_elder>>128));
    elder.level =            uint256(uint16(_elder>>144));
    elder.head =             uint256(uint16(_elder>>160));
    elder.body =             uint256(uint16(_elder>>176));
    elder.race =             uint256(uint16(_elder>>192));
    elder.elderClass =       uint256(uint16(_elder>>208));    

} 

function setElder(
                uint256 strength,
                uint256 agility,
                uint256 intellegence,                
                uint256 attackPoints,
                uint256 healthPoints, 
                uint256 mana,
                uint256 primaryWeapon, 
                uint256 secondaryWeapon,
                uint256 armor,
                uint256 level,
                uint256 head,
                uint256 body,
                uint256 race,
                uint256 elderClass )

    internal pure returns (uint256 character) {

    character = uint256(strength);
    
    character |= agility<<16;
    character |= intellegence<<32;
    character |= attackPoints<<48;
    character |= healthPoints<<64;
    character |= mana<<80;
    character |= primaryWeapon<<96;
    character |= secondaryWeapon<<112;
    character |= armor<<128;
    character |= level<<144;
    character |= head<<160;
    character |= body<<176;
    character |= race<<192;
    character |= elderClass<<208;
    
    return character;
}


}

File 3 of 3 : Interfaces.sol
// SPDX-License-Identifier: Unlicense
pragma solidity 0.8.12;

interface IERC20Lite {
    
    function transfer(address to, uint256 value) external returns (bool);
    function burn(address from, uint256 value) external;
    function mint(address to, uint256 value) external; 
    function approve(address spender, uint256 value) external returns (bool); 
    function balanceOf(address account) external returns (uint256); 
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

}

interface IElfMetaDataHandler {    
function getTokenURI(uint16 id_, uint256 sentinel) external view returns (string memory);
}

interface IEldersMetaDataHandler {    
function getTokenURI(uint16 id_, uint256 sentinel, bool isRevealed) external view returns (string memory);
}

interface ICampaigns {
function gameEngine(uint256 _campId, uint256 _sector, uint256 _level, uint256 _attackPoints, uint256 _healthPoints, uint256 _inventory, bool _useItem) external 
returns(uint256 level, uint256 rewards, uint256 timestamp, uint256 inventory);
}

interface IElves {    
    function prismBridge(uint256[] calldata id, uint256[] calldata sentinel, address owner) external;    
    function exitElf(uint256[] calldata ids, address owner) external;
    function setAccountBalance(address _owner, uint256 _amount, bool _subtract, uint256 _index) external;
}

interface IERC721Lite {
    function transferFrom(address from, address to, uint256 id) external;   
    function transfer(address to, uint256 id) external;
    function ownerOf(uint256 id) external returns (address owner);
    function mint(address to, uint256 tokenid) external;
}

interface IERC1155Lite {
    function burn(address from,uint256 id, uint256 value) external;
    function balanceOf(address _owner, uint256 _id) external returns (uint256); 
}

 
//1155
interface IERC165 {
    function supportsInterface(bytes4 _interfaceId) external view returns (bool);
}

interface IERC1155 is IERC165 {
  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);

  function safeTransferFrom(address _from, address _to, uint256 _id, uint256 _amount, bytes calldata _data) external;
  function safeBatchTransferFrom(address _from, address _to, uint256[] calldata _ids, uint256[] calldata _amounts, bytes calldata _data) external;
  function balanceOf(address _owner, uint256 _id) external view returns (uint256);
  function balanceOfBatch(address[] calldata _owners, uint256[] calldata _ids) external view returns (uint256[] memory);
  function setApprovalForAll(address _operator, bool _approved) external;
  function isApprovedForAll(address _owner, address _operator) external view returns (bool isOperator);
}

interface IERC1155Metadata {
  event URI(string _uri, uint256 indexed _id);
  function uri(uint256 _id) external view returns (string memory);
}

interface IERC1155TokenReceiver {
  function onERC1155Received(address _operator, address _from, uint256 _id, uint256 _amount, bytes calldata _data) external returns(bytes4);
  function onERC1155BatchReceived(address _operator, address _from, uint256[] calldata _ids, uint256[] calldata _amounts, bytes calldata _data) external returns(bytes4);
}

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

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"ARMOR_CODE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"ATTRIBUTES","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"BODY_CODE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"CLASS","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"DISPLAYTYPES","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"EldersInventory","outputs":[{"internalType":"string","name":"folder","type":"string"},{"internalType":"string","name":"name","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"HEAD_CODE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"LAYERS","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"PRIMARY_WEAPON_CODE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"RACE_CODE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"SECONDARY_WEAPON_CODE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"itemId","type":"uint256[]"},{"internalType":"string[]","name":"name","type":"string[]"},{"internalType":"string","name":"folder","type":"string"}],"name":"addItem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"footer","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"itemId","type":"uint256"}],"name":"getItem","outputs":[{"components":[{"internalType":"string","name":"folder","type":"string"},{"internalType":"string","name":"name","type":"string"}],"internalType":"struct EldersInventoryManager.EldersInventoryItem","name":"item","type":"tuple"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"elder","type":"uint256"}],"name":"getSVG","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"id_","type":"uint16"},{"internalType":"uint256","name":"elder","type":"uint256"},{"internalType":"bool","name":"isRevealed","type":"bool"}],"name":"getTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"header","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_ipfsBase","type":"string"}],"name":"setIPFSBase","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b50612982806100206000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c80634830f3e7116100ad578063b4d1fe9c11610071578063b4d1fe9c14610250578063b9ee5a4814610263578063be985ac914610276578063f586bb1414610289578063f8c9b6201461029c57600080fd5b80634830f3e7146101ee5780636cc18e22146102015780637621c4c8146102145780638129fc1c1461022757806389c3e0421461022f57600080fd5b806313fc9ad2116100f457806313fc9ad21461018d5780631ea9dae8146101a05780632e0d7133146101b35780633129e773146101c65780633ce30185146101e657600080fd5b80630a924848146101265780630c9030a01461013b5780630d7163c61461016457806313b4ec7e1461016c575b600080fd5b610139610134366004611cff565b6102af565b005b61014e610149366004611dc2565b610376565b60405161015b9190611e37565b60405180910390f35b61014e610416565b61017f61017a366004611dc2565b610432565b60405190815260200161015b565b61014e61019b366004611e51565b610449565b61017f6101ae366004611dc2565b610729565b61017f6101c1366004611dc2565b610739565b6101d96101d4366004611dc2565b610749565b60405161015b9190611e9f565b61014e61089f565b61014e6101fc366004611dc2565b6108bc565b61017f61020f366004611dc2565b6108cc565b61014e610222366004611dc2565b6108dc565b6101396108ec565b61024261023d366004611dc2565b610e6c565b60405161015b929190611ee1565b61014e61025e366004611dc2565b610f98565b61017f610271366004611dc2565b610fa8565b61014e610284366004611dc2565b610fb8565b610139610297366004611f06565b611106565b61017f6102aa366004611dc2565b61111f565b6102b761112f565b60005b8481101561036e578282603d60008989868181106102da576102da611f48565b90506020020135815260200190815260200160002060000191906102ff929190611916565b5083818151811061031257610312611f48565b6020026020010151603d600088888581811061033057610330611f48565b905060200201358152602001908152602001600020600101908051906020019061035b92919061199a565b508061036681611f74565b9150506102ba565b505050505050565b600c816008811061038657600080fd5b01805490915061039590611f8f565b80601f01602080910402602001604051908101604052809291908181526020018280546103c190611f8f565b801561040e5780601f106103e35761010080835404028352916020019161040e565b820191906000526020600020905b8154815290600101906020018083116103f157829003601f168201915b505050505081565b6040518060a00160405280606b81526020016128e2606b913981565b6031816006811061044257600080fd5b0154905081565b6060600061045e61045985610fb8565b611180565b60405160200161046e9190611fca565b6040516020818303038152906040529050600061048a82611180565b60405160200161049a91906120f4565b6040516020818303038152906040529050600060405160200161053d907f22696d616765223a202268747470733a2f2f696d61676564656c69766572792e81527f6e65742f557345754f655a7a3765557a56314531786c4a3068772f643334623460208201527f3561382d666531662d343838642d653064362d3363623639343161303630302f6040820152671c1d589b1a58c88b60c21b606082015260680190565b6040516020818303038152906040529050600061055d8861ffff166112e8565b60405160200161056d9190612156565b60405160208183030381529060405290506000604051602001610671907f226465736372697074696f6e223a2245746865726e6120456c76657320456c6481527f657273206973206120636f6c6c656374696f6e206f662032323232204865726f60208201527f657320726f616d696e672074686520456c76656e766572736520696e2073656160408201527f726368206f6620746865204d697265732e20506c61792045746865726e616c2060608201527f456c76657320746f207570677261646520796f7572206162696c69746965732060808201527f616e642067726f7720796f75722061726d792e20216f6e77617264222c00000060a082015260bd0190565b6040516020818303038152906040529050600061068d896112e8565b60405160200161069d919061219a565b60405160208183030381529060405290506106fb83838a6106be57866106c0565b875b8b6106cb57846106d4565b6106d48d6113ee565b6040516020016106e79493929190612201565b604051602081830303815290604052611180565b60405160200161070b919061227c565b60405160208183030381529060405296505050505050509392505050565b602b816006811061044257600080fd5b6037816006811061044257600080fd5b60408051808201909152606080825260208201526000828152603d602052604090819020815180830190925280548290829061078490611f8f565b80601f01602080910402602001604051908101604052809291908181526020018280546107b090611f8f565b80156107fd5780601f106107d2576101008083540402835291602001916107fd565b820191906000526020600020905b8154815290600101906020018083116107e057829003601f168201915b5050505050815260200160018201805461081690611f8f565b80601f016020809104026020016040519081016040528092919081815260200182805461084290611f8f565b801561088f5780601f106108645761010080835404028352916020019161088f565b820191906000526020600020905b81548152906001019060200180831161087257829003601f168201915b5050505050815250509050919050565b60405180610120016040528060e481526020016127be60e4913981565b6006816006811061038657600080fd5b6025816006811061044257600080fd5b6014816005811061038657600080fd5b603e805460ff19610100338102919091166001600160a81b031990921691909117600117909155604080519182018152600560c0830190815264111c9d5a5960da1b60e0840152825280518082018252600980825268536f7263657265737360b81b60208381019190915280850192909252825180840184526006808252652930b733b2b960d11b828501528585019190915283518085018552600881526720b9b9b0b9b9b4b760c11b81850152606086015283518085018552918252682132b939b2b935b2b960b91b82840152608085019190915282518084019093528083526526b0bab632b960d11b9183019190915260a08301919091526109f291600091611a0e565b506040805161010081018252600e60c082019081526d283934b6b0b93c902bb2b0b837b760911b60e08301528152815180830183526004808252635261636560e01b602083810191909152808401929092528351808501855281815263426f647960e01b818401528385015283518085018552908152631219585960e21b81830152606083015282518084018452600581526420b936b7b960d91b8183015260808301528251808401909352601083526f29b2b1b7b73230b93c902bb2b0b837b760811b9083015260a0810191909152610acf9060069081611a0e565b506040518060c00160405280604051806040016040528060088152602001670a6e8e4cadccee8d60c31b8152508152602001604051806040016040528060078152602001664167696c69747960c81b81525081526020016040518060400160405280600c81526020016b496e74656c6c6567656e636560a01b81525081526020016040518060400160405280600d81526020016c41747461636b20506f696e747360981b81525081526020016040518060400160405280600d81526020016c4865616c746820506f696e747360981b8152508152602001604051806040016040528060048152602001634d616e6160e01b815250815250600c906006610bd6929190611a5a565b506040805160e081018252600c60a082019081526b3137b7b9ba2fb73ab6b132b960a11b60c0830152815281518083018352601081526f626f6f73745f70657263656e7461676560801b602082810191909152808301919091528251808401845260048152636461746560e01b8183015282840152825180840184526006815265373ab6b132b960d11b8183015260608301528251908101909252600082526080810191909152610c8b906014906005611a9a565b506040805160c0810182526102bc81526103206020820152610384918101919091526103e8606082015261044c60808201526104b060a0820152610cd3906019906006611ada565b506040805160c081018252610514815261057860208201526105dc9181019190915261064060608201526106a4608082015261070860a0820152610d1b90601f906006611ada565b506040805160c08101825261076c81526107d060208201526108349181019190915261089860608201526108fc608082015261096060a0820152610d63906025906006611ada565b506040805160c0810182526109c48152610a286020820152610a8c91810191909152610af06060820152610b546080820152610bb860a0820152610dab90602b906006611ada565b506040805160c081018252610c1c8152610c806020820152610ce491810191909152610d486060820152610dac6080820152610e1060a0820152610df3906031906006611ada565b506040805160c081018252610e748152610ed86020820152610f3c91810191909152610fa06060820152611004608082015261106860a0820152610e3b906037906006611ada565b5060405180606001604052806024815260200161279a602491398051610e6991603f9160209091019061199a565b50565b603d60205260009081526040902080548190610e8790611f8f565b80601f0160208091040260200160405190810160405280929190818152602001828054610eb390611f8f565b8015610f005780601f10610ed557610100808354040283529160200191610f00565b820191906000526020600020905b815481529060010190602001808311610ee357829003601f168201915b505050505090806001018054610f1590611f8f565b80601f0160208091040260200160405190810160405280929190818152602001828054610f4190611f8f565b8015610f8e5780601f10610f6357610100808354040283529160200191610f8e565b820191906000526020600020905b815481529060010190602001808311610f7157829003601f168201915b5050505050905082565b6000816006811061038657600080fd5b6019816006811061044257600080fd5b60606000610fc583611470565b90506000816101a00151905060006040518060a00160405280606b81526020016128e2606b913961100e602b846006811061100257611002611f48565b01548560c001516115a0565b6110316019856006811061102457611024611f48565b01548661018001516115a0565b611054601f866006811061104757611047611f48565b01548761016001516115a0565b6110776025876006811061106a5761106a611f48565b01548861014001516115a0565b61109a6037886006811061108d5761108d611f48565b01548961010001516115a0565b6110bc603189600681106110b0576110b0611f48565b01548a60e001516115a0565b60405180610120016040528060e481526020016127be60e491396040516020016110ed9897969594939291906122c1565b60408051601f1981840301815291905295945050505050565b61110e61112f565b61111a603f8383611916565b505050565b601f816006811061044257600080fd5b603e5461010090046001600160a01b0316331461117e5760405162461bcd60e51b81526020600482015260096024820152683737ba1030b236b4b760b91b604482015260640160405180910390fd5b565b60608151600014156111a057505060408051602081019091526000815290565b60006040518060600160405280604081526020016128a260409139905060006003845160026111cf9190612366565b6111d99190612394565b6111e49060046123a8565b905060006111f3826020612366565b67ffffffffffffffff81111561120b5761120b611b7a565b6040519080825280601f01601f191660200182016040528015611235576020820181803683370190505b509050818152600183018586518101602084015b818310156112a35760039283018051603f601282901c811687015160f890811b8552600c83901c8216880151811b6001860152600683901c8216880151811b60028601529116860151901b93820193909352600401611249565b6003895106600181146112bd57600281146112ce576112da565b613d3d60f01b6001198301526112da565b603d60f81b6000198301525b509398975050505050505050565b60608161130c5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611336578061132081611f74565b915061132f9050600a83612394565b9150611310565b60008167ffffffffffffffff81111561135157611351611b7a565b6040519080825280601f01601f19166020018201604052801561137b576020820181803683370190505b5090505b84156113e6576113906001836123c7565b915061139d600a866123de565b6113a8906030612366565b60f81b8183815181106113bd576113bd611f48565b60200101906001600160f81b031916908160001a9053506113df600a86612394565b945061137f565b949350505050565b606060006113fb83611470565b90506000816101a001516006811061141557611415611f48565b01604051602001611426919061248c565b60405160208183030381529060405261143e846116cd565b611447856117da565b604051602001611459939291906124d0565b604051602081830303815290604052915050919050565b6114e2604051806101c0016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b61ffff8083168252601083901c811660208084019190915283901c8116604080840191909152603084901c82166080808501919091529084901c8216606080850191909152605085901c831660a0808601919091529085901c831660c080860191909152607086901c841660e08601529185901c8316610100850152609085901c831661012085015284901c821661014084015260b084901c821661016084015283901c811661018083015260d09290921c9091166101a082015290565b606060006115ae8385612366565b6000818152603d60205260408120805492935090916115cc90611f8f565b80601f01602080910402602001604051908101604052809291908181526020018280546115f890611f8f565b80156116455780601f1061161a57610100808354040283529160200191611645565b820191906000526020600020905b81548152906001019060200180831161162857829003601f168201915b505050505090506000611657836112e8565b6040516020016116679190612554565b60405160208183030381529060405290506000603f83836040516020016116909392919061257c565b6040516020818303038152906040529050806040516020016116b291906125c2565b60405160208183030381529060405294505050505092915050565b606060006116da83611470565b905061170860008260c0015160ff16602b846101a001516006811061170157611701611f48565b015461184f565b61172e600183610180015160ff166019856101a001516006811061170157611701611f48565b611754600284610160015160ff16601f866101a001516006811061170157611701611f48565b61177a600385610140015160ff166025876101a001516006811061170157611701611f48565b6117a0600486610100015160ff166037886101a001516006811061170157611701611f48565b6117c560058760e0015160ff166031896101a001516006811061170157611701611f48565b60405160200161145996959493929190612605565b606060006117e783611470565b90506117fa6000826000015160036118b3565b61180b6001836020015160036118b3565b61181c6002846040015160036118b3565b61182d6003856080015160006118b3565b61183e6004866060015160006118b3565b6117c560058760a0015160006118b3565b6060600061185d8385612366565b90506006856006811061187257611872611f48565b01603d600083815260200190815260200160002060010160405160200161189a9291906126b8565b6040516020818303038152906040529150509392505050565b6060600c8460ff16600881106118cb576118cb611f48565b016118d5846112e8565b60148460ff16600581106118eb576118eb611f48565b016040516020016118fe9392919061270e565b60405160208183030381529060405290509392505050565b82805461192290611f8f565b90600052602060002090601f016020900481019282611944576000855561198a565b82601f1061195d5782800160ff1982351617855561198a565b8280016001018555821561198a579182015b8281111561198a57823582559160200191906001019061196f565b50611996929150611b0e565b5090565b8280546119a690611f8f565b90600052602060002090601f0160209004810192826119c8576000855561198a565b82601f106119e157805160ff191683800117855561198a565b8280016001018555821561198a579182015b8281111561198a5782518255916020019190600101906119f3565b8260068101928215611a4e579160200282015b82811115611a4e5782518051611a3e91849160209091019061199a565b5091602001919060010190611a21565b50611996929150611b23565b8260088101928215611a4e579160200282015b82811115611a4e5782518051611a8a91849160209091019061199a565b5091602001919060010190611a6d565b8260058101928215611a4e579160200282015b82811115611a4e5782518051611aca91849160209091019061199a565b5091602001919060010190611aad565b826006810192821561198a579160200282015b8281111561198a578251829061ffff16905591602001919060010190611aed565b5b808211156119965760008155600101611b0f565b80821115611996576000611b378282611b40565b50600101611b23565b508054611b4c90611f8f565b6000825580601f10611b5c575050565b601f016020900490600052602060002090810190610e699190611b0e565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611bb957611bb9611b7a565b604052919050565b6000601f8381840112611bd357600080fd5b8235602067ffffffffffffffff80831115611bf057611bf0611b7a565b8260051b611bff838201611b90565b9384528681018301938381019089861115611c1957600080fd5b84890192505b85831015611ca957823584811115611c375760008081fd5b8901603f81018b13611c495760008081fd5b85810135604086821115611c5f57611c5f611b7a565b611c70828b01601f19168901611b90565b8281528d82848601011115611c855760008081fd5b828285018a8301376000928101890192909252508352509184019190840190611c1f565b9998505050505050505050565b60008083601f840112611cc857600080fd5b50813567ffffffffffffffff811115611ce057600080fd5b602083019150836020828501011115611cf857600080fd5b9250929050565b600080600080600060608688031215611d1757600080fd5b853567ffffffffffffffff80821115611d2f57600080fd5b818801915088601f830112611d4357600080fd5b813581811115611d5257600080fd5b8960208260051b8501011115611d6757600080fd5b602092830197509550908701359080821115611d8257600080fd5b611d8e89838a01611bc1565b94506040880135915080821115611da457600080fd5b50611db188828901611cb6565b969995985093965092949392505050565b600060208284031215611dd457600080fd5b5035919050565b60005b83811015611df6578181015183820152602001611dde565b83811115611e05576000848401525b50505050565b60008151808452611e23816020860160208601611ddb565b601f01601f19169290920160200192915050565b602081526000611e4a6020830184611e0b565b9392505050565b600080600060608486031215611e6657600080fd5b833561ffff81168114611e7857600080fd5b92506020840135915060408401358015158114611e9457600080fd5b809150509250925092565b602081526000825160406020840152611ebb6060840182611e0b565b90506020840151601f19848303016040850152611ed88282611e0b565b95945050505050565b604081526000611ef46040830185611e0b565b8281036020840152611ed88185611e0b565b60008060208385031215611f1957600080fd5b823567ffffffffffffffff811115611f3057600080fd5b611f3c85828601611cb6565b90969095509350505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415611f8857611f88611f5e565b5060010190565b600181811c90821680611fa357607f821691505b60208210811415611fc457634e487b7160e01b600052602260045260246000fd5b50919050565b7f3c68746d6c3e3c626f64793e3c696672616d6520616c6c6f773d22616363656c81527f65726f6d657465723b206175746f706c61793b20656e637279707465642d6d6560208201527f6469613b206779726f73636f70653b20706963747572652d696e2d706963747560408201527f726522206672616d65626f726465723d223022206865696768743d223130302560608201527f222073616e64626f783d22616c6c6f772d7363726970747322207372633d220060808201527f646174613a696d6167652f7376672b786d6c3b6261736536342c000000000000609f820152600082516120c08160b9850160208701611ddb565b7f222077696474683d2231303025222f3e3c2f626f64793e3c2f68746d6c3e000060b993909101928301525060d701919050565b7f22616e696d6174696f6e5f75726c223a2022646174613a746578742f68746d6c8152670ed8985cd94d8d0b60c21b60208201526000825161213d816028850160208701611ddb565b61088b60f21b6028939091019283015250602a01919050565b6e226e616d65223a22456c646572202360881b8152815160009061218181600f850160208701611ddb565b61088b60f21b600f939091019283015250601101919050565b7f2261747472696275746573223a205b7b2274726169745f74797065223a22444e81526b209116113b30b63ab2911d1160a11b6020820152600082516121e781602c850160208701611ddb565b62227d5d60e81b602c939091019283015250602f01919050565b607b60f81b81526000855161221d816001850160208a01611ddb565b855190830190612234816001840160208a01611ddb565b855191019061224a816001840160208901611ddb565b8451910190612260816001840160208801611ddb565b607d60f81b600192909101918201526002019695505050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c0000008152600082516122b481601d850160208701611ddb565b91909101601d0192915050565b6000895160206122d48285838f01611ddb565b8a51918401916122e78184848f01611ddb565b8a519201916122f98184848e01611ddb565b895192019161230b8184848d01611ddb565b885192019161231d8184848c01611ddb565b875192019161232f8184848b01611ddb565b86519201916123418184848a01611ddb565b85519201916123538184848901611ddb565b919091019b9a5050505050505050505050565b6000821982111561237957612379611f5e565b500190565b634e487b7160e01b600052601260045260246000fd5b6000826123a3576123a361237e565b500490565b60008160001904831182151516156123c2576123c2611f5e565b500290565b6000828210156123d9576123d9611f5e565b500390565b6000826123ed576123ed61237e565b500690565b8054600090600181811c908083168061240c57607f831692505b602080841082141561242e57634e487b7160e01b600052602260045260246000fd5b818015612442576001811461245357612480565b60ff19861689528489019650612480565b60008881526020902060005b868110156124785781548b82015290850190830161245f565b505084890196505b50505050505092915050565b7f7b2274726169745f74797065223a22436c617373222c2276616c7565223a2200815260006124be601f8301846123f2565b61227d60f01b81526002019392505050565b6e2261747472696275746573223a205b60881b815283516000906124fb81600f850160208901611ddb565b8083019050600b60fa1b80600f830152855161251e816010850160208a01611ddb565b60109201918201528351612539816011840160208801611ddb565b605d60f81b6011929091019182015260120195945050505050565b60008251612566818460208701611ddb565b632e706e6760e01b920191825250600401919050565b600061258882866123f2565b8451612598818360208901611ddb565b602f60f81b910190815283516125b5816001840160208801611ddb565b0160010195945050505050565b6c1e34b6b0b3b290343932b31e9160991b815281516000906125eb81600d850160208701611ddb565b6211179f60e91b600d939091019283015250601001919050565b6000875160206126188285838d01611ddb565b8184019150600b60fa1b80835289516126378160018601858e01611ddb565b6001930192830181905288516126538160028601858d01611ddb565b60029301928301819052875161266f8160038601858c01611ddb565b60039301928301819052865161268b8160048601858b01611ddb565b600493019283015284516126a58160058501848901611ddb565b9091016005019998505050505050505050565b6e3d913a3930b4ba2fba3cb832911d1160891b815260006126dc600f8301856123f2565b6a1116113b30b63ab2911d1160a91b81526126fa600b8201856123f2565b61227d60f01b815260020195945050505050565b6e3d913a3930b4ba2fba3cb832911d1160891b81526000612732600f8301866123f2565b6a1116113b30b63ab2911d1160a91b8152845161275681600b840160208901611ddb565b72111610113234b9b83630bcafba3cb832911d1160691b600b9290910191820152612784601e8201856123f2565b61227d60f01b8152600201969550505050505056fe68747470733a2f2f6875736b6965732e6d7970696e6174612e636c6f75642f697066732f3c7374796c653e23656c667b73686170652d72656e646572696e673a20637269737065646765733b20696d6167652d72656e646572696e673a202d7765626b69742d63726973702d65646765733b20696d6167652d72656e646572696e673a202d6d6f7a2d63726973702d65646765733b20696d6167652d72656e646572696e673a2063726973702d65646765733b20696d6167652d72656e646572696e673a20706978656c617465643b202d6d732d696e746572706f6c6174696f6e2d6d6f64653a206e6561726573742d6e65696768626f723b7d3c2f7374796c653e3c2f7376673e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f3c7376672069643d22656c66222076696577426f783d2230203020313630203136302220786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f73766722207072657365727665417370656374526174696f3d22784d696e594d696e206d656574223ea264697066735822122001b1994cff7da15892c517e51ac8d57987be60db68ec28ccb9ca0d02ce0f04a564736f6c634300080c0033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101215760003560e01c80634830f3e7116100ad578063b4d1fe9c11610071578063b4d1fe9c14610250578063b9ee5a4814610263578063be985ac914610276578063f586bb1414610289578063f8c9b6201461029c57600080fd5b80634830f3e7146101ee5780636cc18e22146102015780637621c4c8146102145780638129fc1c1461022757806389c3e0421461022f57600080fd5b806313fc9ad2116100f457806313fc9ad21461018d5780631ea9dae8146101a05780632e0d7133146101b35780633129e773146101c65780633ce30185146101e657600080fd5b80630a924848146101265780630c9030a01461013b5780630d7163c61461016457806313b4ec7e1461016c575b600080fd5b610139610134366004611cff565b6102af565b005b61014e610149366004611dc2565b610376565b60405161015b9190611e37565b60405180910390f35b61014e610416565b61017f61017a366004611dc2565b610432565b60405190815260200161015b565b61014e61019b366004611e51565b610449565b61017f6101ae366004611dc2565b610729565b61017f6101c1366004611dc2565b610739565b6101d96101d4366004611dc2565b610749565b60405161015b9190611e9f565b61014e61089f565b61014e6101fc366004611dc2565b6108bc565b61017f61020f366004611dc2565b6108cc565b61014e610222366004611dc2565b6108dc565b6101396108ec565b61024261023d366004611dc2565b610e6c565b60405161015b929190611ee1565b61014e61025e366004611dc2565b610f98565b61017f610271366004611dc2565b610fa8565b61014e610284366004611dc2565b610fb8565b610139610297366004611f06565b611106565b61017f6102aa366004611dc2565b61111f565b6102b761112f565b60005b8481101561036e578282603d60008989868181106102da576102da611f48565b90506020020135815260200190815260200160002060000191906102ff929190611916565b5083818151811061031257610312611f48565b6020026020010151603d600088888581811061033057610330611f48565b905060200201358152602001908152602001600020600101908051906020019061035b92919061199a565b508061036681611f74565b9150506102ba565b505050505050565b600c816008811061038657600080fd5b01805490915061039590611f8f565b80601f01602080910402602001604051908101604052809291908181526020018280546103c190611f8f565b801561040e5780601f106103e35761010080835404028352916020019161040e565b820191906000526020600020905b8154815290600101906020018083116103f157829003601f168201915b505050505081565b6040518060a00160405280606b81526020016128e2606b913981565b6031816006811061044257600080fd5b0154905081565b6060600061045e61045985610fb8565b611180565b60405160200161046e9190611fca565b6040516020818303038152906040529050600061048a82611180565b60405160200161049a91906120f4565b6040516020818303038152906040529050600060405160200161053d907f22696d616765223a202268747470733a2f2f696d61676564656c69766572792e81527f6e65742f557345754f655a7a3765557a56314531786c4a3068772f643334623460208201527f3561382d666531662d343838642d653064362d3363623639343161303630302f6040820152671c1d589b1a58c88b60c21b606082015260680190565b6040516020818303038152906040529050600061055d8861ffff166112e8565b60405160200161056d9190612156565b60405160208183030381529060405290506000604051602001610671907f226465736372697074696f6e223a2245746865726e6120456c76657320456c6481527f657273206973206120636f6c6c656374696f6e206f662032323232204865726f60208201527f657320726f616d696e672074686520456c76656e766572736520696e2073656160408201527f726368206f6620746865204d697265732e20506c61792045746865726e616c2060608201527f456c76657320746f207570677261646520796f7572206162696c69746965732060808201527f616e642067726f7720796f75722061726d792e20216f6e77617264222c00000060a082015260bd0190565b6040516020818303038152906040529050600061068d896112e8565b60405160200161069d919061219a565b60405160208183030381529060405290506106fb83838a6106be57866106c0565b875b8b6106cb57846106d4565b6106d48d6113ee565b6040516020016106e79493929190612201565b604051602081830303815290604052611180565b60405160200161070b919061227c565b60405160208183030381529060405296505050505050509392505050565b602b816006811061044257600080fd5b6037816006811061044257600080fd5b60408051808201909152606080825260208201526000828152603d602052604090819020815180830190925280548290829061078490611f8f565b80601f01602080910402602001604051908101604052809291908181526020018280546107b090611f8f565b80156107fd5780601f106107d2576101008083540402835291602001916107fd565b820191906000526020600020905b8154815290600101906020018083116107e057829003601f168201915b5050505050815260200160018201805461081690611f8f565b80601f016020809104026020016040519081016040528092919081815260200182805461084290611f8f565b801561088f5780601f106108645761010080835404028352916020019161088f565b820191906000526020600020905b81548152906001019060200180831161087257829003601f168201915b5050505050815250509050919050565b60405180610120016040528060e481526020016127be60e4913981565b6006816006811061038657600080fd5b6025816006811061044257600080fd5b6014816005811061038657600080fd5b603e805460ff19610100338102919091166001600160a81b031990921691909117600117909155604080519182018152600560c0830190815264111c9d5a5960da1b60e0840152825280518082018252600980825268536f7263657265737360b81b60208381019190915280850192909252825180840184526006808252652930b733b2b960d11b828501528585019190915283518085018552600881526720b9b9b0b9b9b4b760c11b81850152606086015283518085018552918252682132b939b2b935b2b960b91b82840152608085019190915282518084019093528083526526b0bab632b960d11b9183019190915260a08301919091526109f291600091611a0e565b506040805161010081018252600e60c082019081526d283934b6b0b93c902bb2b0b837b760911b60e08301528152815180830183526004808252635261636560e01b602083810191909152808401929092528351808501855281815263426f647960e01b818401528385015283518085018552908152631219585960e21b81830152606083015282518084018452600581526420b936b7b960d91b8183015260808301528251808401909352601083526f29b2b1b7b73230b93c902bb2b0b837b760811b9083015260a0810191909152610acf9060069081611a0e565b506040518060c00160405280604051806040016040528060088152602001670a6e8e4cadccee8d60c31b8152508152602001604051806040016040528060078152602001664167696c69747960c81b81525081526020016040518060400160405280600c81526020016b496e74656c6c6567656e636560a01b81525081526020016040518060400160405280600d81526020016c41747461636b20506f696e747360981b81525081526020016040518060400160405280600d81526020016c4865616c746820506f696e747360981b8152508152602001604051806040016040528060048152602001634d616e6160e01b815250815250600c906006610bd6929190611a5a565b506040805160e081018252600c60a082019081526b3137b7b9ba2fb73ab6b132b960a11b60c0830152815281518083018352601081526f626f6f73745f70657263656e7461676560801b602082810191909152808301919091528251808401845260048152636461746560e01b8183015282840152825180840184526006815265373ab6b132b960d11b8183015260608301528251908101909252600082526080810191909152610c8b906014906005611a9a565b506040805160c0810182526102bc81526103206020820152610384918101919091526103e8606082015261044c60808201526104b060a0820152610cd3906019906006611ada565b506040805160c081018252610514815261057860208201526105dc9181019190915261064060608201526106a4608082015261070860a0820152610d1b90601f906006611ada565b506040805160c08101825261076c81526107d060208201526108349181019190915261089860608201526108fc608082015261096060a0820152610d63906025906006611ada565b506040805160c0810182526109c48152610a286020820152610a8c91810191909152610af06060820152610b546080820152610bb860a0820152610dab90602b906006611ada565b506040805160c081018252610c1c8152610c806020820152610ce491810191909152610d486060820152610dac6080820152610e1060a0820152610df3906031906006611ada565b506040805160c081018252610e748152610ed86020820152610f3c91810191909152610fa06060820152611004608082015261106860a0820152610e3b906037906006611ada565b5060405180606001604052806024815260200161279a602491398051610e6991603f9160209091019061199a565b50565b603d60205260009081526040902080548190610e8790611f8f565b80601f0160208091040260200160405190810160405280929190818152602001828054610eb390611f8f565b8015610f005780601f10610ed557610100808354040283529160200191610f00565b820191906000526020600020905b815481529060010190602001808311610ee357829003601f168201915b505050505090806001018054610f1590611f8f565b80601f0160208091040260200160405190810160405280929190818152602001828054610f4190611f8f565b8015610f8e5780601f10610f6357610100808354040283529160200191610f8e565b820191906000526020600020905b815481529060010190602001808311610f7157829003601f168201915b5050505050905082565b6000816006811061038657600080fd5b6019816006811061044257600080fd5b60606000610fc583611470565b90506000816101a00151905060006040518060a00160405280606b81526020016128e2606b913961100e602b846006811061100257611002611f48565b01548560c001516115a0565b6110316019856006811061102457611024611f48565b01548661018001516115a0565b611054601f866006811061104757611047611f48565b01548761016001516115a0565b6110776025876006811061106a5761106a611f48565b01548861014001516115a0565b61109a6037886006811061108d5761108d611f48565b01548961010001516115a0565b6110bc603189600681106110b0576110b0611f48565b01548a60e001516115a0565b60405180610120016040528060e481526020016127be60e491396040516020016110ed9897969594939291906122c1565b60408051601f1981840301815291905295945050505050565b61110e61112f565b61111a603f8383611916565b505050565b601f816006811061044257600080fd5b603e5461010090046001600160a01b0316331461117e5760405162461bcd60e51b81526020600482015260096024820152683737ba1030b236b4b760b91b604482015260640160405180910390fd5b565b60608151600014156111a057505060408051602081019091526000815290565b60006040518060600160405280604081526020016128a260409139905060006003845160026111cf9190612366565b6111d99190612394565b6111e49060046123a8565b905060006111f3826020612366565b67ffffffffffffffff81111561120b5761120b611b7a565b6040519080825280601f01601f191660200182016040528015611235576020820181803683370190505b509050818152600183018586518101602084015b818310156112a35760039283018051603f601282901c811687015160f890811b8552600c83901c8216880151811b6001860152600683901c8216880151811b60028601529116860151901b93820193909352600401611249565b6003895106600181146112bd57600281146112ce576112da565b613d3d60f01b6001198301526112da565b603d60f81b6000198301525b509398975050505050505050565b60608161130c5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611336578061132081611f74565b915061132f9050600a83612394565b9150611310565b60008167ffffffffffffffff81111561135157611351611b7a565b6040519080825280601f01601f19166020018201604052801561137b576020820181803683370190505b5090505b84156113e6576113906001836123c7565b915061139d600a866123de565b6113a8906030612366565b60f81b8183815181106113bd576113bd611f48565b60200101906001600160f81b031916908160001a9053506113df600a86612394565b945061137f565b949350505050565b606060006113fb83611470565b90506000816101a001516006811061141557611415611f48565b01604051602001611426919061248c565b60405160208183030381529060405261143e846116cd565b611447856117da565b604051602001611459939291906124d0565b604051602081830303815290604052915050919050565b6114e2604051806101c0016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b61ffff8083168252601083901c811660208084019190915283901c8116604080840191909152603084901c82166080808501919091529084901c8216606080850191909152605085901c831660a0808601919091529085901c831660c080860191909152607086901c841660e08601529185901c8316610100850152609085901c831661012085015284901c821661014084015260b084901c821661016084015283901c811661018083015260d09290921c9091166101a082015290565b606060006115ae8385612366565b6000818152603d60205260408120805492935090916115cc90611f8f565b80601f01602080910402602001604051908101604052809291908181526020018280546115f890611f8f565b80156116455780601f1061161a57610100808354040283529160200191611645565b820191906000526020600020905b81548152906001019060200180831161162857829003601f168201915b505050505090506000611657836112e8565b6040516020016116679190612554565b60405160208183030381529060405290506000603f83836040516020016116909392919061257c565b6040516020818303038152906040529050806040516020016116b291906125c2565b60405160208183030381529060405294505050505092915050565b606060006116da83611470565b905061170860008260c0015160ff16602b846101a001516006811061170157611701611f48565b015461184f565b61172e600183610180015160ff166019856101a001516006811061170157611701611f48565b611754600284610160015160ff16601f866101a001516006811061170157611701611f48565b61177a600385610140015160ff166025876101a001516006811061170157611701611f48565b6117a0600486610100015160ff166037886101a001516006811061170157611701611f48565b6117c560058760e0015160ff166031896101a001516006811061170157611701611f48565b60405160200161145996959493929190612605565b606060006117e783611470565b90506117fa6000826000015160036118b3565b61180b6001836020015160036118b3565b61181c6002846040015160036118b3565b61182d6003856080015160006118b3565b61183e6004866060015160006118b3565b6117c560058760a0015160006118b3565b6060600061185d8385612366565b90506006856006811061187257611872611f48565b01603d600083815260200190815260200160002060010160405160200161189a9291906126b8565b6040516020818303038152906040529150509392505050565b6060600c8460ff16600881106118cb576118cb611f48565b016118d5846112e8565b60148460ff16600581106118eb576118eb611f48565b016040516020016118fe9392919061270e565b60405160208183030381529060405290509392505050565b82805461192290611f8f565b90600052602060002090601f016020900481019282611944576000855561198a565b82601f1061195d5782800160ff1982351617855561198a565b8280016001018555821561198a579182015b8281111561198a57823582559160200191906001019061196f565b50611996929150611b0e565b5090565b8280546119a690611f8f565b90600052602060002090601f0160209004810192826119c8576000855561198a565b82601f106119e157805160ff191683800117855561198a565b8280016001018555821561198a579182015b8281111561198a5782518255916020019190600101906119f3565b8260068101928215611a4e579160200282015b82811115611a4e5782518051611a3e91849160209091019061199a565b5091602001919060010190611a21565b50611996929150611b23565b8260088101928215611a4e579160200282015b82811115611a4e5782518051611a8a91849160209091019061199a565b5091602001919060010190611a6d565b8260058101928215611a4e579160200282015b82811115611a4e5782518051611aca91849160209091019061199a565b5091602001919060010190611aad565b826006810192821561198a579160200282015b8281111561198a578251829061ffff16905591602001919060010190611aed565b5b808211156119965760008155600101611b0f565b80821115611996576000611b378282611b40565b50600101611b23565b508054611b4c90611f8f565b6000825580601f10611b5c575050565b601f016020900490600052602060002090810190610e699190611b0e565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611bb957611bb9611b7a565b604052919050565b6000601f8381840112611bd357600080fd5b8235602067ffffffffffffffff80831115611bf057611bf0611b7a565b8260051b611bff838201611b90565b9384528681018301938381019089861115611c1957600080fd5b84890192505b85831015611ca957823584811115611c375760008081fd5b8901603f81018b13611c495760008081fd5b85810135604086821115611c5f57611c5f611b7a565b611c70828b01601f19168901611b90565b8281528d82848601011115611c855760008081fd5b828285018a8301376000928101890192909252508352509184019190840190611c1f565b9998505050505050505050565b60008083601f840112611cc857600080fd5b50813567ffffffffffffffff811115611ce057600080fd5b602083019150836020828501011115611cf857600080fd5b9250929050565b600080600080600060608688031215611d1757600080fd5b853567ffffffffffffffff80821115611d2f57600080fd5b818801915088601f830112611d4357600080fd5b813581811115611d5257600080fd5b8960208260051b8501011115611d6757600080fd5b602092830197509550908701359080821115611d8257600080fd5b611d8e89838a01611bc1565b94506040880135915080821115611da457600080fd5b50611db188828901611cb6565b969995985093965092949392505050565b600060208284031215611dd457600080fd5b5035919050565b60005b83811015611df6578181015183820152602001611dde565b83811115611e05576000848401525b50505050565b60008151808452611e23816020860160208601611ddb565b601f01601f19169290920160200192915050565b602081526000611e4a6020830184611e0b565b9392505050565b600080600060608486031215611e6657600080fd5b833561ffff81168114611e7857600080fd5b92506020840135915060408401358015158114611e9457600080fd5b809150509250925092565b602081526000825160406020840152611ebb6060840182611e0b565b90506020840151601f19848303016040850152611ed88282611e0b565b95945050505050565b604081526000611ef46040830185611e0b565b8281036020840152611ed88185611e0b565b60008060208385031215611f1957600080fd5b823567ffffffffffffffff811115611f3057600080fd5b611f3c85828601611cb6565b90969095509350505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415611f8857611f88611f5e565b5060010190565b600181811c90821680611fa357607f821691505b60208210811415611fc457634e487b7160e01b600052602260045260246000fd5b50919050565b7f3c68746d6c3e3c626f64793e3c696672616d6520616c6c6f773d22616363656c81527f65726f6d657465723b206175746f706c61793b20656e637279707465642d6d6560208201527f6469613b206779726f73636f70653b20706963747572652d696e2d706963747560408201527f726522206672616d65626f726465723d223022206865696768743d223130302560608201527f222073616e64626f783d22616c6c6f772d7363726970747322207372633d220060808201527f646174613a696d6167652f7376672b786d6c3b6261736536342c000000000000609f820152600082516120c08160b9850160208701611ddb565b7f222077696474683d2231303025222f3e3c2f626f64793e3c2f68746d6c3e000060b993909101928301525060d701919050565b7f22616e696d6174696f6e5f75726c223a2022646174613a746578742f68746d6c8152670ed8985cd94d8d0b60c21b60208201526000825161213d816028850160208701611ddb565b61088b60f21b6028939091019283015250602a01919050565b6e226e616d65223a22456c646572202360881b8152815160009061218181600f850160208701611ddb565b61088b60f21b600f939091019283015250601101919050565b7f2261747472696275746573223a205b7b2274726169745f74797065223a22444e81526b209116113b30b63ab2911d1160a11b6020820152600082516121e781602c850160208701611ddb565b62227d5d60e81b602c939091019283015250602f01919050565b607b60f81b81526000855161221d816001850160208a01611ddb565b855190830190612234816001840160208a01611ddb565b855191019061224a816001840160208901611ddb565b8451910190612260816001840160208801611ddb565b607d60f81b600192909101918201526002019695505050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c0000008152600082516122b481601d850160208701611ddb565b91909101601d0192915050565b6000895160206122d48285838f01611ddb565b8a51918401916122e78184848f01611ddb565b8a519201916122f98184848e01611ddb565b895192019161230b8184848d01611ddb565b885192019161231d8184848c01611ddb565b875192019161232f8184848b01611ddb565b86519201916123418184848a01611ddb565b85519201916123538184848901611ddb565b919091019b9a5050505050505050505050565b6000821982111561237957612379611f5e565b500190565b634e487b7160e01b600052601260045260246000fd5b6000826123a3576123a361237e565b500490565b60008160001904831182151516156123c2576123c2611f5e565b500290565b6000828210156123d9576123d9611f5e565b500390565b6000826123ed576123ed61237e565b500690565b8054600090600181811c908083168061240c57607f831692505b602080841082141561242e57634e487b7160e01b600052602260045260246000fd5b818015612442576001811461245357612480565b60ff19861689528489019650612480565b60008881526020902060005b868110156124785781548b82015290850190830161245f565b505084890196505b50505050505092915050565b7f7b2274726169745f74797065223a22436c617373222c2276616c7565223a2200815260006124be601f8301846123f2565b61227d60f01b81526002019392505050565b6e2261747472696275746573223a205b60881b815283516000906124fb81600f850160208901611ddb565b8083019050600b60fa1b80600f830152855161251e816010850160208a01611ddb565b60109201918201528351612539816011840160208801611ddb565b605d60f81b6011929091019182015260120195945050505050565b60008251612566818460208701611ddb565b632e706e6760e01b920191825250600401919050565b600061258882866123f2565b8451612598818360208901611ddb565b602f60f81b910190815283516125b5816001840160208801611ddb565b0160010195945050505050565b6c1e34b6b0b3b290343932b31e9160991b815281516000906125eb81600d850160208701611ddb565b6211179f60e91b600d939091019283015250601001919050565b6000875160206126188285838d01611ddb565b8184019150600b60fa1b80835289516126378160018601858e01611ddb565b6001930192830181905288516126538160028601858d01611ddb565b60029301928301819052875161266f8160038601858c01611ddb565b60039301928301819052865161268b8160048601858b01611ddb565b600493019283015284516126a58160058501848901611ddb565b9091016005019998505050505050505050565b6e3d913a3930b4ba2fba3cb832911d1160891b815260006126dc600f8301856123f2565b6a1116113b30b63ab2911d1160a91b81526126fa600b8201856123f2565b61227d60f01b815260020195945050505050565b6e3d913a3930b4ba2fba3cb832911d1160891b81526000612732600f8301866123f2565b6a1116113b30b63ab2911d1160a91b8152845161275681600b840160208901611ddb565b72111610113234b9b83630bcafba3cb832911d1160691b600b9290910191820152612784601e8201856123f2565b61227d60f01b8152600201969550505050505056fe68747470733a2f2f6875736b6965732e6d7970696e6174612e636c6f75642f697066732f3c7374796c653e23656c667b73686170652d72656e646572696e673a20637269737065646765733b20696d6167652d72656e646572696e673a202d7765626b69742d63726973702d65646765733b20696d6167652d72656e646572696e673a202d6d6f7a2d63726973702d65646765733b20696d6167652d72656e646572696e673a2063726973702d65646765733b20696d6167652d72656e646572696e673a20706978656c617465643b202d6d732d696e746572706f6c6174696f6e2d6d6f64653a206e6561726573742d6e65696768626f723b7d3c2f7374796c653e3c2f7376673e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f3c7376672069643d22656c66222076696577426f783d2230203020313630203136302220786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f73766722207072657365727665417370656374526174696f3d22784d696e594d696e206d656574223ea264697066735822122001b1994cff7da15892c517e51ac8d57987be60db68ec28ccb9ca0d02ce0f04a564736f6c634300080c0033

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
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.