ETH Price: $3,392.87 (+2.96%)

Contract

0x5b8bB80f2d72D0C85caB8fB169e8170A05C94bAF
Transaction Hash
Method
Block
From
To
Batch Set Gas Es...3107137692025-02-28 7:43:44253 days ago1740728624IN
Randomizer: VRF
0 ETH0.000000840.019484
Batch Set Gas Es...3102462402025-02-26 23:05:43254 days ago1740611143IN
Randomizer: VRF
0 ETH0.000000680.015609
Batch Set Gas Es...3084728002025-02-21 19:07:42259 days ago1740164862IN
Randomizer: VRF
0 ETH0.000000430.01
Set Gas Estimate3014591352025-02-01 8:25:21280 days ago1738398321IN
Randomizer: VRF
0 ETH0.00000060.014453
Set Gas Estimate3010802472025-01-31 5:35:20281 days ago1738301720IN
Randomizer: VRF
0 ETH0.000000440.01
Set Gas Estimate2946446612025-01-12 12:19:14300 days ago1736684354IN
Randomizer: VRF
0 ETH0.000000440.01
Set Gas Estimate2946168912025-01-12 10:23:14300 days ago1736677394IN
Randomizer: VRF
0 ETH0.000000440.01
Set Gas Estimate2946001132025-01-12 9:13:14300 days ago1736673194IN
Randomizer: VRF
0 ETH0.000000440.01
Set Gas Estimate2945632842025-01-12 6:39:14300 days ago1736663954IN
Randomizer: VRF
0 ETH0.000000440.01
Set Gas Estimate2945403612025-01-12 5:03:14300 days ago1736658194IN
Randomizer: VRF
0 ETH0.000000450.01
Set Gas Estimate2935531492025-01-09 8:09:14303 days ago1736410154IN
Randomizer: VRF
0 ETH0.000000920.021387
Set Gas Estimate2907426702025-01-01 3:53:12311 days ago1735703592IN
Randomizer: VRF
0 ETH0.000000440.01
Set Gas Estimate2907288252025-01-01 2:55:11311 days ago1735700111IN
Randomizer: VRF
0 ETH0.000000450.01
Batch Set Gas Es...2902855382024-12-30 19:59:11312 days ago1735588751IN
Randomizer: VRF
0 ETH0.000000490.01
Set Gas Estimate2902841022024-12-30 19:53:11312 days ago1735588391IN
Randomizer: VRF
0 ETH0.000000450.01
Set Gas Estimate2900667072024-12-30 4:45:11313 days ago1735533911IN
Randomizer: VRF
0 ETH0.000000460.01
Set Gas Estimate2882612712024-12-24 22:53:09318 days ago1735080789IN
Randomizer: VRF
0 ETH0.000000450.01
Set Gas Estimate2858945222024-12-18 1:57:10325 days ago1734487030IN
Randomizer: VRF
0 ETH0.000001590.034704
Batch Set Gas Es...2856709952024-12-17 10:23:10326 days ago1734430990IN
Randomizer: VRF
0 ETH0.00000070.013098
Set Gas Estimate2851860482024-12-16 0:37:07327 days ago1734309427IN
Randomizer: VRF
0 ETH0.000001970.045847
Set Gas Estimate2838596332024-12-12 3:15:07331 days ago1733973307IN
Randomizer: VRF
0 ETH0.000005210.113147
Set Gas Estimate2838493892024-12-12 2:31:06331 days ago1733970666IN
Randomizer: VRF
0 ETH0.000002890.059554
Set Gas Estimate2838438972024-12-12 2:07:06331 days ago1733969226IN
Randomizer: VRF
0 ETH0.000003670.079401
Set Gas Estimate2838425922024-12-12 2:01:06331 days ago1733968866IN
Randomizer: VRF
0 ETH0.000003490.077403
Batch Set Gas Es...2835014232024-12-11 1:27:06332 days ago1733880426IN
Randomizer: VRF
0 ETH0.000004530.083993
View all transactions

Latest 25 internal transactions (View All)

Parent Transaction Hash Block From To
3511675262025-06-25 20:25:06135 days ago1750883106
Randomizer: VRF
0.00016878 ETH
2798667972024-11-30 11:49:20343 days ago1732967360
Randomizer: VRF
0.00004998 ETH
2798667922024-11-30 11:49:18343 days ago1732967358
Randomizer: VRF
0.0000515 ETH
2798667852024-11-30 11:49:17343 days ago1732967357
Randomizer: VRF
0.00004803 ETH
2746653552024-11-15 8:31:16358 days ago1731659476
Randomizer: VRF
0.00002882 ETH
2746653522024-11-15 8:31:15358 days ago1731659475
Randomizer: VRF
0.00006056 ETH
2746653452024-11-15 8:31:13358 days ago1731659473
Randomizer: VRF
0.00003081 ETH
2746653422024-11-15 8:31:12358 days ago1731659472
Randomizer: VRF
0.00005905 ETH
2743219852024-11-14 8:31:15359 days ago1731573075
Randomizer: VRF
0.00003441 ETH
2743219812024-11-14 8:31:14359 days ago1731573074
Randomizer: VRF
0.00003315 ETH
2743219742024-11-14 8:31:12359 days ago1731573072
Randomizer: VRF
0.00003448 ETH
2734635102024-11-11 20:31:17361 days ago1731357077
Randomizer: VRF
0.0000729 ETH
2734635072024-11-11 20:31:16361 days ago1731357076
Randomizer: VRF
0.00004657 ETH
2734635002024-11-11 20:31:14361 days ago1731357074
Randomizer: VRF
0.00009076 ETH
2734634972024-11-11 20:31:14361 days ago1731357074
Randomizer: VRF
0.00012417 ETH
2734237082024-11-11 17:44:06361 days ago1731347046
Randomizer: VRF
0.0001691 ETH
2734218852024-11-11 17:36:27361 days ago1731346587
Randomizer: VRF
0.00018202 ETH
2720596722024-11-07 18:25:42365 days ago1731003942
Randomizer: VRF
0.00082697 ETH
2289574802024-07-05 8:31:16491 days ago1720168276
Randomizer: VRF
0.00002305 ETH
2289574742024-07-05 8:31:15491 days ago1720168275
Randomizer: VRF
0.00002298 ETH
2289574692024-07-05 8:31:14491 days ago1720168274
Randomizer: VRF
0.00002313 ETH
2287853822024-07-04 20:31:15491 days ago1720125075
Randomizer: VRF
0.00002385 ETH
2287853772024-07-04 20:31:14491 days ago1720125074
Randomizer: VRF
0.00004484 ETH
2287853712024-07-04 20:31:12491 days ago1720125072
Randomizer: VRF
0.00002256 ETH
1947572142024-03-27 13:11:58591 days ago1711545118
Randomizer: VRF
0.5016613 ETH
View All Internal Transactions

Cross-Chain Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
RandomizerDiamond

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 99999 runs

Other Settings:
default evmVersion
/******************************************************************************\
██████   █████  ███    ██ ██████   ██████  ███    ███ ██ ███████ ███████ ██████  
██   ██ ██   ██ ████   ██ ██   ██ ██    ██ ████  ████ ██    ███  ██      ██   ██ 
██████  ███████ ██ ██  ██ ██   ██ ██    ██ ██ ████ ██ ██   ███   █████   ██████  
██   ██ ██   ██ ██  ██ ██ ██   ██ ██    ██ ██  ██  ██ ██  ███    ██      ██   ██ 
██   ██ ██   ██ ██   ████ ██████   ██████  ██      ██ ██ ███████ ███████ ██   ██ 

Website: https://randomizer.ai
Author: Dean van Dugteren (@deanpress)
License: Business Source License 1.1 (BUSL-1.1)

===DISCLAIMER===
Please be aware that using the Randomizer contract carries inherent risks,
and by implementing it you are doing so at your own risk.
Randomizer and its licensors, developers, and contributors will not be held responsible for any
security issues that may arise from any code or implementations of the smart contracts.
It is your responsibility to thoroughly review and test any contract before use.

===LICENSE===
The Randomizer contract is licensed under the Business Source License 1.1 (BUSL-1.1).
Prior to the Change Date specified in the license, creating derivative works or deploying forks
of the contract without explicit permission as defined by the license is not permitted.

===IMPLEMENTATIONS===
Portions of the Randomizer protocol contracts implement the following MIT licensed code:
* Nick Mudge's EIP-2353 Diamond Standard reference contract (https://github.com/mudgen/diamond-3-hardhat)
* Witnet Foundation's VRF and EC libraries (https://github.com/witnet/vrf-solidity and https://github.com/witnet/elliptic-curve-solidity)
/******************************************************************************/

/// @title Randomizer Diamond
/// @author Dean van Dugteren (https://github.com/deanpress)
/// @notice Diamond contract for the Randomizer protocol. Function calls are delegated to Randomizer's respective facet contracts.
/// @dev EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535
/// SPDX-License-Identifier: BUSL-1.1

pragma solidity ^0.8.18;

import {LibDiamond} from "./libraries/LibDiamond.sol";
import {IDiamondCut} from "./interfaces/IDiamondCut.sol";

contract RandomizerDiamond {
    constructor(address _contractOwner, address _diamondCutFacet) payable {
        LibDiamond.setContractOwner(_contractOwner);

        // Add the diamondCut external function from the diamondCutFacet
        IDiamondCut.FacetCut[] memory cut = new IDiamondCut.FacetCut[](1);
        bytes4[] memory functionSelectors = new bytes4[](1);
        functionSelectors[0] = IDiamondCut.diamondCut.selector;
        cut[0] = IDiamondCut.FacetCut({
            facetAddress: _diamondCutFacet,
            action: IDiamondCut.FacetCutAction.Add,
            functionSelectors: functionSelectors
        });
        LibDiamond.diamondCut(cut, address(0), "");
    }

    // Find facet for function that is called and execute the
    // function if a facet is found and return any value.
    fallback() external payable {
        LibDiamond.DiamondStorage storage ds;
        bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;
        // get diamond storage
        assembly {
            ds.slot := position
        }
        // get facet from function selector
        address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;
        require(facet != address(0), "Diamond: Function does not exist");
        // Execute external function from facet using delegatecall and return any value.
        assembly {
            // copy function selector and any arguments
            calldatacopy(0, 0, calldatasize())
            // execute function call using the facet
            let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)
            // get any return value
            returndatacopy(0, 0, returndatasize())
            // return any return value or error back to the caller
            switch result
            case 0 {
                revert(0, returndatasize())
            }
            default {
                return(0, returndatasize())
            }
        }
    }

    receive() external payable {}
}

File 2 of 3 : IDiamondCut.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.18;

/******************************************************************************\
* Author: Nick Mudge <[email protected]> (https://twitter.com/mudgen)
* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535
/******************************************************************************/

interface IDiamondCut {
    enum FacetCutAction {
        Add,
        Replace,
        Remove
    }
    // Add=0, Replace=1, Remove=2

    struct FacetCut {
        address facetAddress;
        FacetCutAction action;
        bytes4[] functionSelectors;
    }

    /// @notice Add/replace/remove any number of functions and optionally execute
    ///         a function with delegatecall
    /// @param _diamondCut Contains the facet addresses and function selectors
    /// @param _init The address of the contract or facet to execute _calldata
    /// @param _calldata A function call, including function selector and arguments
    ///                  _calldata is executed with delegatecall on _init
    function diamondCut(
        FacetCut[] calldata _diamondCut,
        address _init,
        bytes calldata _calldata
    ) external;

    event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);
}

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

/******************************************************************************\
* Author: Nick Mudge <[email protected]> (https://twitter.com/mudgen)
* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535
/******************************************************************************/
import {IDiamondCut} from "../interfaces/IDiamondCut.sol";

// Remember to add the loupe functions from DiamondLoupeFacet to the diamond.
// The loupe functions are required by the EIP2535 Diamonds standard

error InitializationFunctionReverted(address _initializationContractAddress, bytes _calldata);

library LibDiamond {
    bytes32 constant DIAMOND_STORAGE_POSITION = keccak256("diamond.standard.diamond.storage");

    struct FacetAddressAndPosition {
        address facetAddress;
        uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array
    }

    struct FacetFunctionSelectors {
        bytes4[] functionSelectors;
        uint256 facetAddressPosition; // position of facetAddress in facetAddresses array
    }

    struct DiamondStorage {
        // maps function selector to the facet address and
        // the position of the selector in the facetFunctionSelectors.selectors array
        mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;
        // maps facet addresses to function selectors
        mapping(address => FacetFunctionSelectors) facetFunctionSelectors;
        // facet addresses
        address[] facetAddresses;
        // Used to query if a contract implements an interface.
        // Used to implement ERC-165.
        mapping(bytes4 => bool) supportedInterfaces;
        // Owner of the contract
        address contractOwner;
        // Proposed owner of the contract
        address proposedOwner;
    }

    function diamondStorage() internal pure returns (DiamondStorage storage ds) {
        bytes32 position = DIAMOND_STORAGE_POSITION;
        assembly {
            ds.slot := position
        }
    }

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event OwnershipProposed(address indexed previousOwner, address indexed newOwner);
    event ProposeOwnershipCanceled(address indexed proposedOwner, address indexed currentOwner);

    function setContractOwner(address _newOwner) internal {
        DiamondStorage storage ds = diamondStorage();
        address previousOwner = ds.contractOwner;
        ds.contractOwner = _newOwner;
        emit OwnershipTransferred(previousOwner, _newOwner);
    }

    function setProposedContractOwner(address _proposedOwner) internal {
        DiamondStorage storage ds = diamondStorage();
        ds.proposedOwner = _proposedOwner;
        emit OwnershipProposed(ds.contractOwner, _proposedOwner);
    }

    function acceptProposedContractOwner() internal {
        DiamondStorage storage ds = diamondStorage();
        address previousOwner = ds.contractOwner;
        ds.contractOwner = ds.proposedOwner;
        ds.proposedOwner = address(0);
        emit OwnershipTransferred(previousOwner, ds.contractOwner);
    }

    function cancelProposedContractOwner() internal {
        DiamondStorage storage ds = diamondStorage();
        address previousProposedOwner = ds.proposedOwner;
        ds.proposedOwner = address(0);
        emit ProposeOwnershipCanceled(previousProposedOwner, ds.contractOwner);
    }

    function contractOwner() internal view returns (address contractOwner_) {
        contractOwner_ = diamondStorage().contractOwner;
    }

    function proposedOwner() internal view returns (address contractOwner_) {
        contractOwner_ = diamondStorage().proposedOwner;
    }

    function enforceIsContractOwner() internal view {
        require(msg.sender == diamondStorage().contractOwner, "Unauthorized: Must be contract owner");
    }

    function enforceIsProposedContractOwner() internal view {
        require(
            msg.sender == diamondStorage().proposedOwner,
            "Unauthorized: Must be proposed contract owner"
        );
    }

    function enforceIsCurrentOrProposedContractOwner() internal view {
        require(
            msg.sender == diamondStorage().contractOwner || msg.sender == diamondStorage().proposedOwner,
            "Unauthorized: Must be current or proposed contract owner"
        );
    }

    event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);

    // Internal function version of diamondCut
    function diamondCut(
        IDiamondCut.FacetCut[] memory _diamondCut,
        address _init,
        bytes memory _calldata
    ) internal {
        for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {
            IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;
            if (action == IDiamondCut.FacetCutAction.Add) {
                addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);
            } else if (action == IDiamondCut.FacetCutAction.Replace) {
                replaceFunctions(
                    _diamondCut[facetIndex].facetAddress,
                    _diamondCut[facetIndex].functionSelectors
                );
            } else if (action == IDiamondCut.FacetCutAction.Remove) {
                removeFunctions(
                    _diamondCut[facetIndex].facetAddress,
                    _diamondCut[facetIndex].functionSelectors
                );
            } else {
                revert("LibDiamondCut: Incorrect FacetCutAction");
            }
        }
        emit DiamondCut(_diamondCut, _init, _calldata);
        initializeDiamondCut(_init, _calldata);
    }

    function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {
        require(_functionSelectors.length > 0, "LibDiamondCut: No selectors in facet to cut");
        DiamondStorage storage ds = diamondStorage();
        require(_facetAddress != address(0), "LibDiamondCut: Add facet can't be address(0)");
        uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);
        // add new facet address if it does not exist
        if (selectorPosition == 0) {
            addFacet(ds, _facetAddress);
        }
        for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {
            bytes4 selector = _functionSelectors[selectorIndex];
            address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;
            require(oldFacetAddress == address(0), "LibDiamondCut: Can't add function that already exists");
            addFunction(ds, selector, selectorPosition, _facetAddress);
            selectorPosition++;
        }
    }

    function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {
        require(_functionSelectors.length > 0, "LibDiamondCut: No selectors in facet to cut");
        DiamondStorage storage ds = diamondStorage();
        require(_facetAddress != address(0), "LibDiamondCut: Add facet can't be address(0)");
        uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);
        // add new facet address if it does not exist
        if (selectorPosition == 0) {
            addFacet(ds, _facetAddress);
        }
        for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {
            bytes4 selector = _functionSelectors[selectorIndex];
            address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;
            require(
                oldFacetAddress != _facetAddress,
                "LibDiamondCut: Can't replace function with same function"
            );
            removeFunction(ds, oldFacetAddress, selector);
            addFunction(ds, selector, selectorPosition, _facetAddress);
            selectorPosition++;
        }
    }

    function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {
        require(_functionSelectors.length > 0, "LibDiamondCut: No selectors in facet to cut");
        DiamondStorage storage ds = diamondStorage();
        // if function does not exist then do nothing and return
        require(_facetAddress == address(0), "LibDiamondCut: Remove facet address must be address(0)");
        for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {
            bytes4 selector = _functionSelectors[selectorIndex];
            address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;
            removeFunction(ds, oldFacetAddress, selector);
        }
    }

    function addFacet(DiamondStorage storage ds, address _facetAddress) internal {
        enforceHasContractCode(_facetAddress, "LibDiamondCut: New facet has no code");
        ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;
        ds.facetAddresses.push(_facetAddress);
    }

    function addFunction(
        DiamondStorage storage ds,
        bytes4 _selector,
        uint96 _selectorPosition,
        address _facetAddress
    ) internal {
        ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;
        ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);
        ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;
    }

    function removeFunction(
        DiamondStorage storage ds,
        address _facetAddress,
        bytes4 _selector
    ) internal {
        require(_facetAddress != address(0), "LibDiamondCut: Can't remove function that doesn't exist");
        // an immutable function is a function defined directly in a diamond
        require(_facetAddress != address(this), "LibDiamondCut: Can't remove immutable function");
        // replace selector with last selector, then delete last selector
        uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;
        uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;
        // if not the same then replace _selector with lastSelector
        if (selectorPosition != lastSelectorPosition) {
            bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[
                lastSelectorPosition
            ];
            ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;
            ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);
        }
        // delete the last selector
        ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();
        delete ds.selectorToFacetAndPosition[_selector];

        // if no more selectors for facet address then delete the facet address
        if (lastSelectorPosition == 0) {
            // replace facet address with last facet address and delete last facet address
            uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;
            uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;
            if (facetAddressPosition != lastFacetAddressPosition) {
                address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];
                ds.facetAddresses[facetAddressPosition] = lastFacetAddress;
                ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;
            }
            ds.facetAddresses.pop();
            delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;
        }
    }

    function initializeDiamondCut(address _init, bytes memory _calldata) internal {
        if (_init == address(0)) {
            return;
        }
        enforceHasContractCode(_init, "LibDiamondCut: _init address has no code");
        (bool success, bytes memory error) = _init.delegatecall(_calldata);
        if (!success) {
            if (error.length > 0) {
                // bubble up error
                /// @solidity memory-safe-assembly
                assembly {
                    let returndata_size := mload(error)
                    revert(add(32, error), returndata_size)
                }
            } else {
                revert InitializationFunctionReverted(_init, _calldata);
            }
        }
    }

    function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {
        uint256 contractSize;
        assembly {
            contractSize := extcodesize(_contract)
        }
        require(contractSize > 0, _errorMessage);
    }
}

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

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_contractOwner","type":"address"},{"internalType":"address","name":"_diamondCutFacet","type":"address"}],"stateMutability":"payable","type":"constructor"},{"inputs":[{"internalType":"address","name":"_initializationContractAddress","type":"address"},{"internalType":"bytes","name":"_calldata","type":"bytes"}],"name":"InitializationFunctionReverted","type":"error"},{"stateMutability":"payable","type":"fallback"},{"stateMutability":"payable","type":"receive"}]

608060405260405162002c3738038062002c37833981016040819052620000269162001020565b6200003c826200015660201b620001071760201c565b604080516001808252818301909252600091816020015b60408051606080820183526000808352602083015291810191909152815260200190600190039081620000535750506040805160018082528183019092529192506000919060208083019080368337019050509050631f931c1c60e01b81600081518110620000c657620000c662001058565b6001600160e01b031990921660209283029190910182015260408051606081019091526001600160a01b038516815290810160008152602001828152508260008151811062000119576200011962001058565b60200260200101819052506200014c82600060405180602001604052806000815250620001da60201b620001c11760201c565b50505050620012dc565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c132080546001600160a01b031981166001600160a01b0384811691821790935560405160008051602062002b8b833981519152939092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60005b8351811015620003e6576000848281518110620001fe57620001fe62001058565b6020026020010151602001519050600060028111156200022257620002226200106e565b8160028111156200023757620002376200106e565b0362000295576200028f85838151811062000256576200025662001058565b60200260200101516000015186848151811062000277576200027762001058565b6020026020010151604001516200043560201b60201c565b620003d0565b6001816002811115620002ac57620002ac6200106e565b0362000304576200028f858381518110620002cb57620002cb62001058565b602002602001015160000151868481518110620002ec57620002ec62001058565b602002602001015160400151620006c260201b60201c565b60028160028111156200031b576200031b6200106e565b0362000373576200028f8583815181106200033a576200033a62001058565b6020026020010151600001518684815181106200035b576200035b62001058565b6020026020010151604001516200095a60201b60201c565b60405162461bcd60e51b815260206004820152602760248201527f4c69624469616d6f6e644375743a20496e636f727265637420466163657443756044820152663a20b1ba34b7b760c91b60648201526084015b60405180910390fd5b5080620003dd816200109a565b915050620001dd565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb6738383836040516200041c939291906200110a565b60405180910390a162000430828262000ac0565b505050565b60008151116200048b5760405162461bcd60e51b815260206004820152602b602482015260008051602062002c1783398151915260448201526a1858d95d081d1bc818dd5d60aa1b6064820152608401620003c7565b60008051602062002b8b8339815191526001600160a01b038316620004f75760405162461bcd60e51b815260206004820152602c602482015260008051602062002bd383398151915260448201526b65206164647265737328302960a01b6064820152608401620003c7565b6001600160a01b0383166000908152600182016020526040812054906001600160601b0382169003620005305762000530828562000b92565b60005b8351811015620006bb57600084828151811062000554576200055462001058565b6020908102919091018101516001600160e01b031981166000908152918690526040909120549091506001600160a01b03168015620005fc5760405162461bcd60e51b815260206004820152603560248201527f4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f60448201527f6e207468617420616c72656164792065786973747300000000000000000000006064820152608401620003c7565b6001600160e01b0319821660008181526020878152604080832080546001600160a01b03908116600160a01b6001600160601b038c16021782558c168085526001808c0185529285208054938401815585528385206008840401805463ffffffff60079095166004026101000a948502191660e08a901c94909402939093179092559390925287905281546001600160a01b03191617905583620006a08162001211565b94505050508080620006b2906200109a565b91505062000533565b5050505050565b6000815111620007185760405162461bcd60e51b815260206004820152602b602482015260008051602062002c1783398151915260448201526a1858d95d081d1bc818dd5d60aa1b6064820152608401620003c7565b60008051602062002b8b8339815191526001600160a01b038316620007845760405162461bcd60e51b815260206004820152602c602482015260008051602062002bd383398151915260448201526b65206164647265737328302960a01b6064820152608401620003c7565b6001600160a01b0383166000908152600182016020526040812054906001600160601b0382169003620007bd57620007bd828562000b92565b60005b8351811015620006bb576000848281518110620007e157620007e162001058565b6020908102919091018101516001600160e01b031981166000908152918690526040909120549091506001600160a01b0390811690871681036200088e5760405162461bcd60e51b815260206004820152603860248201527f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60448201527f6374696f6e20776974682073616d652066756e6374696f6e00000000000000006064820152608401620003c7565b6200089b85828462000bff565b6001600160e01b0319821660008181526020878152604080832080546001600160a01b03908116600160a01b6001600160601b038c16021782558c168085526001808c0185529285208054938401815585528385206008840401805463ffffffff60079095166004026101000a948502191660e08a901c94909402939093179092559390925287905281546001600160a01b031916179055836200093f8162001211565b9450505050808062000951906200109a565b915050620007c0565b6000815111620009b05760405162461bcd60e51b815260206004820152602b602482015260008051602062002c1783398151915260448201526a1858d95d081d1bc818dd5d60aa1b6064820152608401620003c7565b60008051602062002b8b8339815191526001600160a01b0383161562000a3f5760405162461bcd60e51b815260206004820152603660248201527f4c69624469616d6f6e644375743a2052656d6f7665206661636574206164647260448201527f657373206d7573742062652061646472657373283029000000000000000000006064820152608401620003c7565b60005b825181101562000aba57600083828151811062000a635762000a6362001058565b6020908102919091018101516001600160e01b031981166000908152918590526040909120549091506001600160a01b031662000aa284828462000bff565b5050808062000ab1906200109a565b91505062000a42565b50505050565b6001600160a01b03821662000ad3575050565b62000af88260405180606001604052806028815260200162002bab6028913962000fdf565b600080836001600160a01b03168360405162000b15919062001242565b600060405180830381855af49150503d806000811462000b52576040519150601f19603f3d011682016040523d82523d6000602084013e62000b57565b606091505b50915091508162000aba5780511562000b735780518082602001fd5b838360405163192105d760e01b8152600401620003c792919062001260565b62000bb78160405180606001604052806024815260200162002bf36024913962000fdf565b6002820180546001600160a01b0390921660008181526001948501602090815260408220860185905594840183559182529290200180546001600160a01b0319169091179055565b6001600160a01b03821662000c7d5760405162461bcd60e51b815260206004820152603760248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6360448201527f74696f6e207468617420646f65736e27742065786973740000000000000000006064820152608401620003c7565b306001600160a01b0383160362000cee5760405162461bcd60e51b815260206004820152602e60248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d7560448201526d3a30b1363290333ab731ba34b7b760911b6064820152608401620003c7565b6001600160e01b03198116600090815260208481526040808320546001600160a01b0386168452600180880190935290832054600160a01b9091046001600160601b0316929162000d3f916200128e565b905080821462000e38576001600160a01b0384166000908152600186016020526040812080548390811062000d785762000d7862001058565b600091825260208083206008830401546001600160a01b038916845260018a019091526040909220805460079092166004026101000a90920460e01b92508291908590811062000dcc5762000dcc62001058565b600091825260208083206008830401805463ffffffff60079094166004026101000a938402191660e09590951c929092029390931790556001600160e01b03199290921682528690526040902080546001600160a01b0316600160a01b6001600160601b038516021790555b6001600160a01b0384166000908152600186016020526040902080548062000e645762000e64620012aa565b60008281526020808220600860001990940193840401805463ffffffff600460078716026101000a0219169055919092556001600160e01b03198516825286905260408120819055819003620006bb57600285015460009062000eca906001906200128e565b6001600160a01b038616600090815260018089016020526040909120015490915080821462000f8057600087600201838154811062000f0d5762000f0d62001058565b6000918252602090912001546002890180546001600160a01b03909216925082918490811062000f415762000f4162001058565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055929091168152600189810190925260409020018190555b8660020180548062000f965762000f96620012aa565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b0388168252600189810190915260408220015550505050505050565b813b818162000aba5760405162461bcd60e51b8152600401620003c79190620012c0565b80516001600160a01b03811681146200101b57600080fd5b919050565b600080604083850312156200103457600080fd5b6200103f8362001003565b91506200104f6020840162001003565b90509250929050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201620010af57620010af62001084565b5060010190565b60005b83811015620010d3578181015183820152602001620010b9565b50506000910152565b60008151808452620010f6816020860160208601620010b6565b601f01601f19169290920160200192915050565b60006060808301818452808751808352608092508286019150828160051b8701016020808b0160005b84811015620011df57898403607f19018652815180516001600160a01b031685528381015189860190600381106200117b57634e487b7160e01b600052602160045260246000fd5b868601526040918201519186018a905281519081905290840190600090898701905b80831015620011c95783516001600160e01b03191682529286019260019290920191908601906200119d565b5097850197955050509082019060010162001133565b50506001600160a01b038a16908801528681036040880152620012038189620010dc565b9a9950505050505050505050565b60006001600160601b038281166002600160601b0319810162001238576200123862001084565b6001019392505050565b6000825162001256818460208701620010b6565b9190910192915050565b6001600160a01b03831681526040602082018190526000906200128690830184620010dc565b949350505050565b81810381811115620012a457620012a462001084565b92915050565b634e487b7160e01b600052603160045260246000fd5b602081526000620012d56020830184620010dc565b9392505050565b61189f80620012ec6000396000f3fe60806040523661000b57005b600080357fffffffff000000000000000000000000000000000000000000000000000000001681527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c6020819052604090912054819073ffffffffffffffffffffffffffffffffffffffff16806100e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4469616d6f6e643a2046756e6374696f6e20646f6573206e6f7420657869737460448201526064015b60405180910390fd5b3660008037600080366000845af43d6000803e808015610102573d6000f35b3d6000fd5b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c132080547fffffffffffffffffffffffff0000000000000000000000000000000000000000811673ffffffffffffffffffffffffffffffffffffffff8481169182179093556040517fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c939092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60005b83518110156103b75760008482815181106101e1576101e16114a2565b602002602001015160200151905060006002811115610202576102026114d1565b816002811115610214576102146114d1565b036102625761025d85838151811061022e5761022e6114a2565b60200260200101516000015186848151811061024c5761024c6114a2565b602002602001015160400151610402565b6103a4565b6001816002811115610276576102766114d1565b036102bf5761025d858381518110610290576102906114a2565b6020026020010151600001518684815181106102ae576102ae6114a2565b6020026020010151604001516107b8565b60028160028111156102d3576102d36114d1565b0361031c5761025d8583815181106102ed576102ed6114a2565b60200260200101516000015186848151811061030b5761030b6114a2565b602002602001015160400151610b77565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4c69624469616d6f6e644375743a20496e636f7272656374204661636574437560448201527f74416374696f6e0000000000000000000000000000000000000000000000000060648201526084016100da565b50806103af8161152f565b9150506101c4565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb6738383836040516103eb939291906115d5565b60405180910390a16103fd8282610d6a565b505050565b6000815111610493576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660448201527f6163657420746f2063757400000000000000000000000000000000000000000060648201526084016100da565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c73ffffffffffffffffffffffffffffffffffffffff8316610557576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260448201527f652061646472657373283029000000000000000000000000000000000000000060648201526084016100da565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600182016020526040812054906bffffffffffffffffffffffff8216900361059f5761059f8285610e63565b60005b83518110156107b15760008482815181106105bf576105bf6114a2565b6020908102919091018101517fffffffff00000000000000000000000000000000000000000000000000000000811660009081529186905260409091205490915073ffffffffffffffffffffffffffffffffffffffff1680156106a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f60448201527f6e207468617420616c726561647920657869737473000000000000000000000060648201526084016100da565b7fffffffff000000000000000000000000000000000000000000000000000000008216600081815260208781526040808320805473ffffffffffffffffffffffffffffffffffffffff908116740100000000000000000000000000000000000000006bffffffffffffffffffffffff8c16021782558c168085526001808c0185529285208054938401815585528385206008840401805463ffffffff60079095166004026101000a948502191660e08a901c94909402939093179092559390925287905281547fffffffffffffffffffffffff000000000000000000000000000000000000000016179055836107998161173d565b945050505080806107a99061152f565b9150506105a2565b5050505050565b6000815111610849576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660448201527f6163657420746f2063757400000000000000000000000000000000000000000060648201526084016100da565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c73ffffffffffffffffffffffffffffffffffffffff831661090d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260448201527f652061646472657373283029000000000000000000000000000000000000000060648201526084016100da565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600182016020526040812054906bffffffffffffffffffffffff82169003610955576109558285610e63565b60005b83518110156107b1576000848281518110610975576109756114a2565b6020908102919091018101517fffffffff00000000000000000000000000000000000000000000000000000000811660009081529186905260409091205490915073ffffffffffffffffffffffffffffffffffffffff9081169087168103610a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60448201527f6374696f6e20776974682073616d652066756e6374696f6e000000000000000060648201526084016100da565b610a6a858284610ef2565b7fffffffff000000000000000000000000000000000000000000000000000000008216600081815260208781526040808320805473ffffffffffffffffffffffffffffffffffffffff908116740100000000000000000000000000000000000000006bffffffffffffffffffffffff8c16021782558c168085526001808c0185529285208054938401815585528385206008840401805463ffffffff60079095166004026101000a948502191660e08a901c94909402939093179092559390925287905281547fffffffffffffffffffffffff00000000000000000000000000000000000000001617905583610b5f8161173d565b94505050508080610b6f9061152f565b915050610958565b6000815111610c08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660448201527f6163657420746f2063757400000000000000000000000000000000000000000060648201526084016100da565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c73ffffffffffffffffffffffffffffffffffffffff831615610ccd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f4c69624469616d6f6e644375743a2052656d6f7665206661636574206164647260448201527f657373206d75737420626520616464726573732830290000000000000000000060648201526084016100da565b60005b8251811015610d64576000838281518110610ced57610ced6114a2565b6020908102919091018101517fffffffff00000000000000000000000000000000000000000000000000000000811660009081529185905260409091205490915073ffffffffffffffffffffffffffffffffffffffff16610d4f848284610ef2565b50508080610d5c9061152f565b915050610cd0565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8216610d89575050565b610dab8260405180606001604052806028815260200161181e60289139611467565b6000808373ffffffffffffffffffffffffffffffffffffffff1683604051610dd39190611768565b600060405180830381855af49150503d8060008114610e0e576040519150601f19603f3d011682016040523d82523d6000602084013e610e13565b606091505b509150915081610d6457805115610e2d5780518082602001fd5b83836040517f192105d70000000000000000000000000000000000000000000000000000000081526004016100da929190611784565b610e858160405180606001604052806024815260200161184660249139611467565b60028201805473ffffffffffffffffffffffffffffffffffffffff90921660008181526001948501602090815260408220860185905594840183559182529290200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169091179055565b73ffffffffffffffffffffffffffffffffffffffff8216610f95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6360448201527f74696f6e207468617420646f65736e277420657869737400000000000000000060648201526084016100da565b3073ffffffffffffffffffffffffffffffffffffffff83160361103a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d7560448201527f7461626c652066756e6374696f6e00000000000000000000000000000000000060648201526084016100da565b7fffffffff0000000000000000000000000000000000000000000000000000000081166000908152602084815260408083205473ffffffffffffffffffffffffffffffffffffffff86168452600180880190935290832054740100000000000000000000000000000000000000009091046bffffffffffffffffffffffff1692916110c4916117bb565b905080821461120b5773ffffffffffffffffffffffffffffffffffffffff841660009081526001860160205260408120805483908110611106576111066114a2565b6000918252602080832060088304015473ffffffffffffffffffffffffffffffffffffffff8916845260018a019091526040909220805460079092166004026101000a90920460e01b925082919085908110611164576111646114a2565b600091825260208083206008830401805463ffffffff60079094166004026101000a938402191660e09590951c929092029390931790557fffffffff0000000000000000000000000000000000000000000000000000000092909216825286905260409020805473ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000006bffffffffffffffffffffffff8516021790555b73ffffffffffffffffffffffffffffffffffffffff841660009081526001860160205260409020805480611241576112416117d4565b6000828152602080822060087fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193840401805463ffffffff600460078716026101000a0219169055919092557fffffffff0000000000000000000000000000000000000000000000000000000085168252869052604081208190558190036107b15760028501546000906112da906001906117bb565b73ffffffffffffffffffffffffffffffffffffffff861660009081526001808901602052604090912001549091508082146113c8576000876002018381548110611326576113266114a2565b60009182526020909120015460028901805473ffffffffffffffffffffffffffffffffffffffff9092169250829184908110611364576113646114a2565b600091825260208083209190910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff948516179055929091168152600189810190925260409020018190555b866002018054806113db576113db6117d4565b6000828152602080822083017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905590920190925573ffffffffffffffffffffffffffffffffffffffff88168252600189810190915260408220015550505050505050565b813b8181610d64576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100da9190611803565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361156057611560611500565b5060010190565b60005b8381101561158257818101518382015260200161156a565b50506000910152565b600081518084526115a3816020860160208601611567565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60006060808301818452808751808352608092508286019150828160051b8701016020808b0160005b84811015611700577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808a8503018652815188850173ffffffffffffffffffffffffffffffffffffffff82511686528482015160038110611687577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b868601526040918201519186018a905281519081905290840190600090898701905b808310156116eb5783517fffffffff000000000000000000000000000000000000000000000000000000001682529286019260019290920191908601906116a9565b509785019795505050908201906001016115fe565b505073ffffffffffffffffffffffffffffffffffffffff8a1690880152868103604088015261172f818961158b565b9a9950505050505050505050565b60006bffffffffffffffffffffffff80831681810361175e5761175e611500565b6001019392505050565b6000825161177a818460208701611567565b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015260006117b3604083018461158b565b949350505050565b818103818111156117ce576117ce611500565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b602081526000611816602083018461158b565b939250505056fe4c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f6465a264697066735822122082638f795eced89ba676ebde2a161a88d85b42647240cf20f9f094dcae2db35e64736f6c63430008120033c8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c4c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a204164642066616365742063616e277420624c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f64654c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e2066000000000000000000000000c0e787a508643d51613a8af120ab7ed38b490030000000000000000000000000f8edb8be4464903a3dacd59682049f9753c7b68c

Deployed Bytecode

0x60806040523661000b57005b600080357fffffffff000000000000000000000000000000000000000000000000000000001681527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c6020819052604090912054819073ffffffffffffffffffffffffffffffffffffffff16806100e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4469616d6f6e643a2046756e6374696f6e20646f6573206e6f7420657869737460448201526064015b60405180910390fd5b3660008037600080366000845af43d6000803e808015610102573d6000f35b3d6000fd5b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c132080547fffffffffffffffffffffffff0000000000000000000000000000000000000000811673ffffffffffffffffffffffffffffffffffffffff8481169182179093556040517fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c939092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60005b83518110156103b75760008482815181106101e1576101e16114a2565b602002602001015160200151905060006002811115610202576102026114d1565b816002811115610214576102146114d1565b036102625761025d85838151811061022e5761022e6114a2565b60200260200101516000015186848151811061024c5761024c6114a2565b602002602001015160400151610402565b6103a4565b6001816002811115610276576102766114d1565b036102bf5761025d858381518110610290576102906114a2565b6020026020010151600001518684815181106102ae576102ae6114a2565b6020026020010151604001516107b8565b60028160028111156102d3576102d36114d1565b0361031c5761025d8583815181106102ed576102ed6114a2565b60200260200101516000015186848151811061030b5761030b6114a2565b602002602001015160400151610b77565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4c69624469616d6f6e644375743a20496e636f7272656374204661636574437560448201527f74416374696f6e0000000000000000000000000000000000000000000000000060648201526084016100da565b50806103af8161152f565b9150506101c4565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb6738383836040516103eb939291906115d5565b60405180910390a16103fd8282610d6a565b505050565b6000815111610493576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660448201527f6163657420746f2063757400000000000000000000000000000000000000000060648201526084016100da565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c73ffffffffffffffffffffffffffffffffffffffff8316610557576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260448201527f652061646472657373283029000000000000000000000000000000000000000060648201526084016100da565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600182016020526040812054906bffffffffffffffffffffffff8216900361059f5761059f8285610e63565b60005b83518110156107b15760008482815181106105bf576105bf6114a2565b6020908102919091018101517fffffffff00000000000000000000000000000000000000000000000000000000811660009081529186905260409091205490915073ffffffffffffffffffffffffffffffffffffffff1680156106a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f60448201527f6e207468617420616c726561647920657869737473000000000000000000000060648201526084016100da565b7fffffffff000000000000000000000000000000000000000000000000000000008216600081815260208781526040808320805473ffffffffffffffffffffffffffffffffffffffff908116740100000000000000000000000000000000000000006bffffffffffffffffffffffff8c16021782558c168085526001808c0185529285208054938401815585528385206008840401805463ffffffff60079095166004026101000a948502191660e08a901c94909402939093179092559390925287905281547fffffffffffffffffffffffff000000000000000000000000000000000000000016179055836107998161173d565b945050505080806107a99061152f565b9150506105a2565b5050505050565b6000815111610849576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660448201527f6163657420746f2063757400000000000000000000000000000000000000000060648201526084016100da565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c73ffffffffffffffffffffffffffffffffffffffff831661090d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260448201527f652061646472657373283029000000000000000000000000000000000000000060648201526084016100da565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600182016020526040812054906bffffffffffffffffffffffff82169003610955576109558285610e63565b60005b83518110156107b1576000848281518110610975576109756114a2565b6020908102919091018101517fffffffff00000000000000000000000000000000000000000000000000000000811660009081529186905260409091205490915073ffffffffffffffffffffffffffffffffffffffff9081169087168103610a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60448201527f6374696f6e20776974682073616d652066756e6374696f6e000000000000000060648201526084016100da565b610a6a858284610ef2565b7fffffffff000000000000000000000000000000000000000000000000000000008216600081815260208781526040808320805473ffffffffffffffffffffffffffffffffffffffff908116740100000000000000000000000000000000000000006bffffffffffffffffffffffff8c16021782558c168085526001808c0185529285208054938401815585528385206008840401805463ffffffff60079095166004026101000a948502191660e08a901c94909402939093179092559390925287905281547fffffffffffffffffffffffff00000000000000000000000000000000000000001617905583610b5f8161173d565b94505050508080610b6f9061152f565b915050610958565b6000815111610c08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660448201527f6163657420746f2063757400000000000000000000000000000000000000000060648201526084016100da565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c73ffffffffffffffffffffffffffffffffffffffff831615610ccd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f4c69624469616d6f6e644375743a2052656d6f7665206661636574206164647260448201527f657373206d75737420626520616464726573732830290000000000000000000060648201526084016100da565b60005b8251811015610d64576000838281518110610ced57610ced6114a2565b6020908102919091018101517fffffffff00000000000000000000000000000000000000000000000000000000811660009081529185905260409091205490915073ffffffffffffffffffffffffffffffffffffffff16610d4f848284610ef2565b50508080610d5c9061152f565b915050610cd0565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8216610d89575050565b610dab8260405180606001604052806028815260200161181e60289139611467565b6000808373ffffffffffffffffffffffffffffffffffffffff1683604051610dd39190611768565b600060405180830381855af49150503d8060008114610e0e576040519150601f19603f3d011682016040523d82523d6000602084013e610e13565b606091505b509150915081610d6457805115610e2d5780518082602001fd5b83836040517f192105d70000000000000000000000000000000000000000000000000000000081526004016100da929190611784565b610e858160405180606001604052806024815260200161184660249139611467565b60028201805473ffffffffffffffffffffffffffffffffffffffff90921660008181526001948501602090815260408220860185905594840183559182529290200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169091179055565b73ffffffffffffffffffffffffffffffffffffffff8216610f95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6360448201527f74696f6e207468617420646f65736e277420657869737400000000000000000060648201526084016100da565b3073ffffffffffffffffffffffffffffffffffffffff83160361103a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d7560448201527f7461626c652066756e6374696f6e00000000000000000000000000000000000060648201526084016100da565b7fffffffff0000000000000000000000000000000000000000000000000000000081166000908152602084815260408083205473ffffffffffffffffffffffffffffffffffffffff86168452600180880190935290832054740100000000000000000000000000000000000000009091046bffffffffffffffffffffffff1692916110c4916117bb565b905080821461120b5773ffffffffffffffffffffffffffffffffffffffff841660009081526001860160205260408120805483908110611106576111066114a2565b6000918252602080832060088304015473ffffffffffffffffffffffffffffffffffffffff8916845260018a019091526040909220805460079092166004026101000a90920460e01b925082919085908110611164576111646114a2565b600091825260208083206008830401805463ffffffff60079094166004026101000a938402191660e09590951c929092029390931790557fffffffff0000000000000000000000000000000000000000000000000000000092909216825286905260409020805473ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000006bffffffffffffffffffffffff8516021790555b73ffffffffffffffffffffffffffffffffffffffff841660009081526001860160205260409020805480611241576112416117d4565b6000828152602080822060087fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193840401805463ffffffff600460078716026101000a0219169055919092557fffffffff0000000000000000000000000000000000000000000000000000000085168252869052604081208190558190036107b15760028501546000906112da906001906117bb565b73ffffffffffffffffffffffffffffffffffffffff861660009081526001808901602052604090912001549091508082146113c8576000876002018381548110611326576113266114a2565b60009182526020909120015460028901805473ffffffffffffffffffffffffffffffffffffffff9092169250829184908110611364576113646114a2565b600091825260208083209190910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff948516179055929091168152600189810190925260409020018190555b866002018054806113db576113db6117d4565b6000828152602080822083017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905590920190925573ffffffffffffffffffffffffffffffffffffffff88168252600189810190915260408220015550505050505050565b813b8181610d64576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100da9190611803565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361156057611560611500565b5060010190565b60005b8381101561158257818101518382015260200161156a565b50506000910152565b600081518084526115a3816020860160208601611567565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60006060808301818452808751808352608092508286019150828160051b8701016020808b0160005b84811015611700577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808a8503018652815188850173ffffffffffffffffffffffffffffffffffffffff82511686528482015160038110611687577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b868601526040918201519186018a905281519081905290840190600090898701905b808310156116eb5783517fffffffff000000000000000000000000000000000000000000000000000000001682529286019260019290920191908601906116a9565b509785019795505050908201906001016115fe565b505073ffffffffffffffffffffffffffffffffffffffff8a1690880152868103604088015261172f818961158b565b9a9950505050505050505050565b60006bffffffffffffffffffffffff80831681810361175e5761175e611500565b6001019392505050565b6000825161177a818460208701611567565b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015260006117b3604083018461158b565b949350505050565b818103818111156117ce576117ce611500565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b602081526000611816602083018461158b565b939250505056fe4c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f6465a264697066735822122082638f795eced89ba676ebde2a161a88d85b42647240cf20f9f094dcae2db35e64736f6c63430008120033

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

000000000000000000000000c0e787a508643d51613a8af120ab7ed38b490030000000000000000000000000f8edb8be4464903a3dacd59682049f9753c7b68c

-----Decoded View---------------
Arg [0] : _contractOwner (address): 0xC0e787A508643D51613a8af120Ab7ed38b490030
Arg [1] : _diamondCutFacet (address): 0xf8EDb8Be4464903A3daCd59682049f9753C7B68c

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000c0e787a508643d51613a8af120ab7ed38b490030
Arg [1] : 000000000000000000000000f8edb8be4464903a3dacd59682049f9753c7b68c


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

OVERVIEW

A fast VRF protocol that lets smart contracts request random numbers using native ETH for fees.

Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
[ Download: CSV Export  ]
[ 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.