ETH Price: $3,453.54 (-1.12%)
Gas: 9 Gwei

Contract

0x67905D283B5214FE49319a5C305E67C7d9e86D36
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
0x6060604052530092018-03-14 9:12:462318 days ago1521018766IN
 Create: Kernel
0 ETH0.008779824

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Kernel

Compiler Version
v0.4.18+commit.9cf6e910

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-03-14
*/

//File: contracts/acl/IACL.sol
pragma solidity ^0.4.18;


interface IACL {
    function initialize(address permissionsCreator) public;
    function hasPermission(address who, address where, bytes32 what, bytes how) public view returns (bool);
}

//File: contracts/kernel/IKernel.sol
pragma solidity ^0.4.18;



interface IKernel {
    event SetApp(bytes32 indexed namespace, bytes32 indexed name, bytes32 indexed id, address app);

    function acl() public view returns (IACL);
    function hasPermission(address who, address where, bytes32 what, bytes how) public view returns (bool);

    function setApp(bytes32 namespace, bytes32 name, address app) public returns (bytes32 id);
    function getApp(bytes32 id) public view returns (address);
}
//File: contracts/kernel/KernelStorage.sol
pragma solidity 0.4.18;


contract KernelConstants {
    bytes32 constant public CORE_NAMESPACE = keccak256("core");
    bytes32 constant public APP_BASES_NAMESPACE = keccak256("base");
    bytes32 constant public APP_ADDR_NAMESPACE = keccak256("app");

    bytes32 constant public KERNEL_APP_ID = keccak256("kernel.aragonpm.eth");
    bytes32 constant public KERNEL_APP = keccak256(CORE_NAMESPACE, KERNEL_APP_ID);

    bytes32 constant public ACL_APP_ID = keccak256("acl.aragonpm.eth");
    bytes32 constant public ACL_APP = keccak256(APP_ADDR_NAMESPACE, ACL_APP_ID);
}


contract KernelStorage is KernelConstants {
    mapping (bytes32 => address) public apps;
}

//File: contracts/acl/ACLSyntaxSugar.sol
pragma solidity 0.4.18;


contract ACLSyntaxSugar {
    function arr() internal pure returns (uint256[] r) {}

    function arr(bytes32 _a) internal pure returns (uint256[] r) {
        return arr(uint256(_a));
    }

    function arr(bytes32 _a, bytes32 _b) internal pure returns (uint256[] r) {
        return arr(uint256(_a), uint256(_b));
    }

    function arr(address _a) internal pure returns (uint256[] r) {
        return arr(uint256(_a));
    }

    function arr(address _a, address _b) internal pure returns (uint256[] r) {
        return arr(uint256(_a), uint256(_b));
    }

    function arr(address _a, uint256 _b, uint256 _c) internal pure returns (uint256[] r) {
        return arr(uint256(_a), _b, _c);
    }

    function arr(address _a, uint256 _b) internal pure returns (uint256[] r) {
        return arr(uint256(_a), uint256(_b));
    }

    function arr(address _a, address _b, uint256 _c, uint256 _d, uint256 _e) internal pure returns (uint256[] r) {
        return arr(uint256(_a), uint256(_b), _c, _d, _e);
    }

    function arr(address _a, address _b, address _c) internal pure returns (uint256[] r) {
        return arr(uint256(_a), uint256(_b), uint256(_c));
    }

    function arr(address _a, address _b, uint256 _c) internal pure returns (uint256[] r) {
        return arr(uint256(_a), uint256(_b), uint256(_c));
    }

    function arr(uint256 _a) internal pure returns (uint256[] r) {
        r = new uint256[](1);
        r[0] = _a;
    }

    function arr(uint256 _a, uint256 _b) internal pure returns (uint256[] r) {
        r = new uint256[](2);
        r[0] = _a;
        r[1] = _b;
    }

    function arr(uint256 _a, uint256 _b, uint256 _c) internal pure returns (uint256[] r) {
        r = new uint256[](3);
        r[0] = _a;
        r[1] = _b;
        r[2] = _c;
    }

    function arr(uint256 _a, uint256 _b, uint256 _c, uint256 _d) internal pure returns (uint256[] r) {
        r = new uint256[](4);
        r[0] = _a;
        r[1] = _b;
        r[2] = _c;
        r[3] = _d;
    }

    function arr(uint256 _a, uint256 _b, uint256 _c, uint256 _d, uint256 _e) internal pure returns (uint256[] r) {
        r = new uint256[](5);
        r[0] = _a;
        r[1] = _b;
        r[2] = _c;
        r[3] = _d;
        r[4] = _e;
    }
}


contract ACLHelpers {
    function decodeParamOp(uint256 _x) internal pure returns (uint8 b) {
        return uint8(_x >> (8 * 30));
    }

    function decodeParamId(uint256 _x) internal pure returns (uint8 b) {
        return uint8(_x >> (8 * 31));
    }

    function decodeParamsList(uint256 _x) internal pure returns (uint32 a, uint32 b, uint32 c) {
        a = uint32(_x);
        b = uint32(_x >> (8 * 4));
        c = uint32(_x >> (8 * 8));
    }
}

//File: contracts/apps/IAppProxy.sol
pragma solidity 0.4.18;

interface IAppProxy {
    function isUpgradeable() public pure returns (bool);
    function getCode() public view returns (address);
}

//File: contracts/apps/AppStorage.sol
pragma solidity ^0.4.18;




contract AppStorage {
    IKernel public kernel;
    bytes32 public appId;
    address internal pinnedCode; // used by Proxy Pinned
    uint256 internal initializationBlock; // used by Initializable
    uint256[95] private storageOffset; // forces App storage to start at after 100 slots
    uint256 private offset;
}

//File: contracts/common/Initializable.sol
pragma solidity ^0.4.18;




contract Initializable is AppStorage {
    modifier onlyInit {
        require(initializationBlock == 0);
        _;
    }

    /**
    * @return Block number in which the contract was initialized
    */
    function getInitializationBlock() public view returns (uint256) {
        return initializationBlock;
    }

    /**
    * @dev Function to be called by top level contract after initialization has finished.
    */
    function initialized() internal onlyInit {
        initializationBlock = getBlockNumber();
    }

    /**
    * @dev Returns the current block number.
    *      Using a function rather than `block.number` allows us to easily mock the block number in
    *      tests.
    */
    function getBlockNumber() internal view returns (uint256) {
        return block.number;
    }
}

//File: contracts/common/DelegateProxy.sol
pragma solidity 0.4.18;


contract DelegateProxy {
    /**
    * @dev Performs a delegatecall and returns whatever the delegatecall returned (entire context execution will return!)
    * @param _dst Destination address to perform the delegatecall
    * @param _calldata Calldata for the delegatecall
    */
    function delegatedFwd(address _dst, bytes _calldata) internal {
        require(isContract(_dst));
        assembly {
            let result := delegatecall(sub(gas, 10000), _dst, add(_calldata, 0x20), mload(_calldata), 0, 0)
            let size := returndatasize

            let ptr := mload(0x40)
            returndatacopy(ptr, 0, size)

            // revert instead of invalid() bc if the underlying call failed with invalid() it already wasted gas.
            // if the call returned error data, forward it
            switch result case 0 { revert(ptr, size) }
            default { return(ptr, size) }
        }
    }

    function isContract(address _target) internal view returns (bool) {
        uint256 size;
        assembly { size := extcodesize(_target) }
        return size > 0;
    }
}

//File: contracts/apps/AppProxyBase.sol
pragma solidity 0.4.18;







contract AppProxyBase is IAppProxy, AppStorage, DelegateProxy, KernelConstants {
    /**
    * @dev Initialize AppProxy
    * @param _kernel Reference to organization kernel for the app
    * @param _appId Identifier for app
    * @param _initializePayload Payload for call to be made after setup to initialize
    */
    function AppProxyBase(IKernel _kernel, bytes32 _appId, bytes _initializePayload) public {
        kernel = _kernel;
        appId = _appId;

        // Implicit check that kernel is actually a Kernel
        // The EVM doesn't actually provide a way for us to make sure, but we can force a revert to
        // occur if the kernel is set to 0x0 or a non-code address when we try to call a method on
        // it.
        address appCode = getAppBase(appId);

        // If initialize payload is provided, it will be executed
        if (_initializePayload.length > 0) {
            require(isContract(appCode));
            // Cannot make delegatecall as a delegateproxy.delegatedFwd as it
            // returns ending execution context and halts contract deployment
            require(appCode.delegatecall(_initializePayload));
        }
    }

    function getAppBase(bytes32 _appId) internal view returns (address) {
        return kernel.getApp(keccak256(APP_BASES_NAMESPACE, _appId));
    }

    function () payable public {
        address target = getCode();
        require(target != 0); // if app code hasn't been set yet, don't call
        delegatedFwd(target, msg.data);
    }
}
//File: contracts/apps/AppProxyUpgradeable.sol
pragma solidity 0.4.18;




contract AppProxyUpgradeable is AppProxyBase {
    address public pinnedCode;

    /**
    * @dev Initialize AppProxyUpgradeable (makes it an upgradeable Aragon app)
    * @param _kernel Reference to organization kernel for the app
    * @param _appId Identifier for app
    * @param _initializePayload Payload for call to be made after setup to initialize
    */
    function AppProxyUpgradeable(IKernel _kernel, bytes32 _appId, bytes _initializePayload)
             AppProxyBase(_kernel, _appId, _initializePayload) public
    {

    }

    function getCode() public view returns (address) {
        return getAppBase(appId);
    }

    function isUpgradeable() public pure returns (bool) {
        return true;
    }
}

//File: contracts/apps/AppProxyPinned.sol
pragma solidity 0.4.18;




contract AppProxyPinned is AppProxyBase {
    /**
    * @dev Initialize AppProxyPinned (makes it an un-upgradeable Aragon app)
    * @param _kernel Reference to organization kernel for the app
    * @param _appId Identifier for app
    * @param _initializePayload Payload for call to be made after setup to initialize
    */
    function AppProxyPinned(IKernel _kernel, bytes32 _appId, bytes _initializePayload)
             AppProxyBase(_kernel, _appId, _initializePayload) public
    {
        pinnedCode = getAppBase(appId);
        require(pinnedCode != address(0));
    }

    function getCode() public view returns (address) {
        return pinnedCode;
    }

    function isUpgradeable() public pure returns (bool) {
        return false;
    }

    function () payable public {
        delegatedFwd(getCode(), msg.data);
    }
}
//File: contracts/factory/AppProxyFactory.sol
pragma solidity 0.4.18;





contract AppProxyFactory {
    event NewAppProxy(address proxy);

    function newAppProxy(IKernel _kernel, bytes32 _appId) public returns (AppProxyUpgradeable) {
        return newAppProxy(_kernel, _appId, new bytes(0));
    }

    function newAppProxy(IKernel _kernel, bytes32 _appId, bytes _initializePayload) public returns (AppProxyUpgradeable) {
        AppProxyUpgradeable proxy = new AppProxyUpgradeable(_kernel, _appId, _initializePayload);
        NewAppProxy(address(proxy));
        return proxy;
    }

    function newAppProxyPinned(IKernel _kernel, bytes32 _appId) public returns (AppProxyPinned) {
        return newAppProxyPinned(_kernel, _appId, new bytes(0));
    }

    function newAppProxyPinned(IKernel _kernel, bytes32 _appId, bytes _initializePayload) public returns (AppProxyPinned) {
        AppProxyPinned proxy = new AppProxyPinned(_kernel, _appId, _initializePayload);
        NewAppProxy(address(proxy));
        return proxy;
    }
}

//File: contracts/kernel/Kernel.sol
pragma solidity 0.4.18;









contract Kernel is IKernel, KernelStorage, Initializable, AppProxyFactory, ACLSyntaxSugar {
    bytes32 constant public APP_MANAGER_ROLE = keccak256("APP_MANAGER_ROLE");

    /**
    * @dev Initialize can only be called once. It saves the block number in which it was initialized.
    * @notice Initializes a kernel instance along with its ACL and sets `_permissionsCreator` as the entity that can create other permissions
    * @param _baseAcl Address of base ACL app
    * @param _permissionsCreator Entity that will be given permission over createPermission
    */
    function initialize(address _baseAcl, address _permissionsCreator) onlyInit public {
        initialized();

        IACL acl = IACL(newAppProxy(this, ACL_APP_ID));

        _setApp(APP_BASES_NAMESPACE, ACL_APP_ID, _baseAcl);
        _setApp(APP_ADDR_NAMESPACE, ACL_APP_ID, acl);

        acl.initialize(_permissionsCreator);
    }

    /**
    * @dev Create a new instance of an app linked to this kernel and set its base
    *      implementation if it was not already set
    * @param _name Name of the app
    * @param _appBase Address of the app's base implementation
    * @return AppProxy instance
    */
    function newAppInstance(bytes32 _name, address _appBase) auth(APP_MANAGER_ROLE, arr(APP_BASES_NAMESPACE, _name)) public returns (IAppProxy appProxy) {
        _setAppIfNew(APP_BASES_NAMESPACE, _name, _appBase);
        appProxy = newAppProxy(this, _name);
    }

    /**
    * @dev Create a new pinned instance of an app linked to this kernel and set
    *      its base implementation if it was not already set
    * @param _name Name of the app
    * @param _appBase Address of the app's base implementation
    * @return AppProxy instance
    */
    function newPinnedAppInstance(bytes32 _name, address _appBase) auth(APP_MANAGER_ROLE, arr(APP_BASES_NAMESPACE, _name)) public returns (IAppProxy appProxy) {
        _setAppIfNew(APP_BASES_NAMESPACE, _name, _appBase);
        appProxy = newAppProxyPinned(this, _name);
    }

    /**
    * @dev Set the resolving address of an app instance or base implementation
    * @param _namespace App namespace to use
    * @param _name Name of the app
    * @param _app Address of the app
    * @return ID of app
    */
    function setApp(bytes32 _namespace, bytes32 _name, address _app) auth(APP_MANAGER_ROLE, arr(_namespace, _name)) kernelIntegrity public returns (bytes32 id) {
        return _setApp(_namespace, _name, _app);
    }

    /**
    * @dev Get the address of an app instance or base implementation
    * @param _id App identifier
    * @return Address of the app
    */
    function getApp(bytes32 _id) public view returns (address) {
        return apps[_id];
    }

    /**
    * @dev Get the installed ACL app
    * @return ACL app
    */
    function acl() public view returns (IACL) {
        return IACL(getApp(ACL_APP));
    }

    /**
    * @dev Function called by apps to check ACL on kernel or to check permission status
    * @param _who Sender of the original call
    * @param _where Address of the app
    * @param _what Identifier for a group of actions in app
    * @param _how Extra data for ACL auth
    * @return boolean indicating whether the ACL allows the role or not
    */
    function hasPermission(address _who, address _where, bytes32 _what, bytes _how) public view returns (bool) {
        return acl().hasPermission(_who, _where, _what, _how);
    }

    function _setApp(bytes32 _namespace, bytes32 _name, address _app) internal returns (bytes32 id) {
        id = keccak256(_namespace, _name);
        apps[id] = _app;
        SetApp(_namespace, _name, id, _app);
    }

    function _setAppIfNew(bytes32 _namespace, bytes32 _name, address _app) internal returns (bytes32 id) {
        id = keccak256(_namespace, _name);

        if (_app != address(0)) {
            address app = getApp(id);
            if (app != address(0)) {
                require(app == _app);
            } else {
                apps[id] = _app;
                SetApp(_namespace, _name, id, _app);
            }
        }
    }

    modifier auth(bytes32 _role, uint256[] memory params) {
        bytes memory how;
        uint256 byteLength = params.length * 32;
        assembly {
            how := params // forced casting
            mstore(how, byteLength)
        }
        // Params is invalid from this point fwd
        require(hasPermission(msg.sender, address(this), _role, how));
        _;
    }

    modifier kernelIntegrity {
        _; // After execution check integrity
        address kernel = getApp(KERNEL_APP);
        uint256 size;
        assembly { size := extcodesize(kernel) }
        require(size > 0);
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"KERNEL_APP_ID","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"APP_ADDR_NAMESPACE","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"KERNEL_APP","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"apps","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"bytes32"}],"name":"getApp","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_baseAcl","type":"address"},{"name":"_permissionsCreator","type":"address"}],"name":"initialize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"CORE_NAMESPACE","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"appId","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"bytes32"},{"name":"_appBase","type":"address"}],"name":"newAppInstance","outputs":[{"name":"appProxy","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getInitializationBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"APP_MANAGER_ROLE","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"bytes32"},{"name":"_appBase","type":"address"}],"name":"newPinnedAppInstance","outputs":[{"name":"appProxy","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"ACL_APP","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_namespace","type":"bytes32"},{"name":"_name","type":"bytes32"},{"name":"_app","type":"address"}],"name":"setApp","outputs":[{"name":"id","type":"bytes32"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"ACL_APP_ID","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_kernel","type":"address"},{"name":"_appId","type":"bytes32"},{"name":"_initializePayload","type":"bytes"}],"name":"newAppProxyPinned","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"kernel","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"APP_BASES_NAMESPACE","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"acl","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_kernel","type":"address"},{"name":"_appId","type":"bytes32"}],"name":"newAppProxy","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_kernel","type":"address"},{"name":"_appId","type":"bytes32"},{"name":"_initializePayload","type":"bytes"}],"name":"newAppProxy","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_who","type":"address"},{"name":"_where","type":"address"},{"name":"_what","type":"bytes32"},{"name":"_how","type":"bytes"}],"name":"hasPermission","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_kernel","type":"address"},{"name":"_appId","type":"bytes32"}],"name":"newAppProxyPinned","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"proxy","type":"address"}],"name":"NewAppProxy","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"namespace","type":"bytes32"},{"indexed":true,"name":"name","type":"bytes32"},{"indexed":true,"name":"id","type":"bytes32"},{"indexed":false,"name":"app","type":"address"}],"name":"SetApp","type":"event"}]

6060604052341561000f57600080fd5b6120568061001e6000396000f300606060405260043610620001315763ffffffff60e060020a6000350416631113ed0d811462000136578063178e6079146200015e57806325012699146200017457806338bb6def146200018a57806342c71f1d14620001bf578063485cc95514620001d8578063756f6049146200020257806380afdea8146200021857806380cd5ac3146200022e5780638b3dd74914620002535780638ea8dc9d1462000269578063958fde82146200027f578063a3b4b07f14620002a4578063ae5b254014620002ba578063cbcc65eb14620002e2578063d162f8b014620002f8578063d4aae0c41462000360578063db8a61d41462000376578063de287359146200038c578063e156a8f314620003a2578063ede658b014620003c7578063fdef9106146200042f578063ff289fc514620004b2575b600080fd5b34156200014257600080fd5b6200014c620004d7565b60405190815260200160405180910390f35b34156200016a57600080fd5b6200014c6200050b565b34156200018057600080fd5b6200014c62000528565b34156200019657600080fd5b620001a3600435620005a4565b604051600160a060020a03909116815260200160405180910390f35b3415620001cb57600080fd5b620001a3600435620005bf565b3415620001e457600080fd5b62000200600160a060020a0360043581169060243516620005da565b005b34156200020e57600080fd5b6200014c62000718565b34156200022457600080fd5b6200014c6200074c565b34156200023a57600080fd5b620001a3600435600160a060020a036024351662000752565b34156200025f57600080fd5b6200014c6200080c565b34156200027557600080fd5b6200014c62000812565b34156200028b57600080fd5b620001a3600435600160a060020a036024351662000835565b3415620002b057600080fd5b6200014c620008e4565b3415620002c657600080fd5b6200014c600435602435600160a060020a036044351662000938565b3415620002ee57600080fd5b6200014c62000a4e565b34156200030457600080fd5b620001a360048035600160a060020a03169060248035919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965062000a7195505050505050565b34156200036c57600080fd5b620001a362000b69565b34156200038257600080fd5b6200014c62000b78565b34156200039857600080fd5b620001a362000b96565b3415620003ae57600080fd5b620001a3600160a060020a036004351660243562000bf8565b3415620003d357600080fd5b620001a360048035600160a060020a03169060248035919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965062000c3295505050505050565b34156200043b57600080fd5b6200049e600160a060020a036004803582169160248035909116916044359160849060643590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965062000c4295505050505050565b604051901515815260200160405180910390f35b3415620004be57600080fd5b620001a3600160a060020a036004351660243562000d50565b6040517f6b65726e656c2e617261676f6e706d2e657468000000000000000000000000008152601301604051809103902081565b60405160ec60020a62061707028152600301604051809103902081565b6040517f636f726500000000000000000000000000000000000000000000000000000000815260040160405180910390206040517f6b65726e656c2e617261676f6e706d2e6574680000000000000000000000000081526013016040518091039020604051918252602082015260409081019051809103902081565b600060208190529081526040902054600160a060020a031681565b600090815260208190526040902054600160a060020a031690565b60045460009015620005eb57600080fd5b620005f562000d83565b620006203060405160008051602062001feb8339815191528152601001604051809103902062000bf8565b90506200066860405160e060020a6362617365028152600401604051809103902060405160008051602062001feb833981519152815260100160405180910390208562000da0565b50620006ae60405160ec60020a62061707028152600301604051809103902060405160008051602062001feb833981519152815260100160405180910390208362000da0565b5080600160a060020a031663c4d66de88360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b1515620006fe57600080fd5b6102c65a03f115156200071057600080fd5b505050505050565b6040517f636f7265000000000000000000000000000000000000000000000000000000008152600401604051809103902081565b60025481565b60006040516000805160206200200b833981519152815260100160405180910390206200079a60405160e060020a636261736502815260040160405180910390208562000e3f565b620007a462000faa565b600082516020029050829150808252620007c13330868562000c42565b1515620007cd57600080fd5b620007f460405160e060020a63626173650281526004016040518091039020888862000e55565b5062000801308862000bf8565b979650505050505050565b60045490565b6040516000805160206200200b8339815191528152601001604051809103902081565b60006040516000805160206200200b833981519152815260100160405180910390206200087d60405160e060020a636261736502815260040160405180910390208562000e3f565b6200088762000faa565b600082516020029050829150808252620008a43330868562000c42565b1515620008b057600080fd5b620008d760405160e060020a63626173650281526004016040518091039020888862000e55565b5062000801308862000d50565b60405160ec60020a62061707028152600301604051809103902060405160008051602062001feb83398151915281526010016040518091039020604051918252602082015260409081019051809103902081565b60006040516000805160206200200b8339815191528152601001604051809103902062000966858562000e3f565b6200097062000faa565b6000825160200290508291508082526200098d3330868562000c42565b15156200099957600080fd5b600080620009a98a8a8a62000da0565b965062000a2e6040517f636f726500000000000000000000000000000000000000000000000000000000815260040160405180910390206040517f6b65726e656c2e617261676f6e706d2e65746800000000000000000000000000815260130160405180910390206040519182526020820152604090810190518091039020620005bf565b915050803b6000811162000a4157600080fd5b5050505050509392505050565b60405160008051602062001feb8339815191528152601001604051809103902081565b60008084848462000a8162000fbc565b600160a060020a03841681526020810183905260606040820181815290820183818151815260200191508051906020019080838360005b8381101562000ad257808201518382015260200162000ab8565b50505050905090810190601f16801562000b005780820380516001836020036101000a031916815260200191505b50945050505050604051809103906000f080151562000b1e57600080fd5b90507fe28f1412cafe58e22073759128eddcccfd9c1e3326665df874bdaf26077231a981604051600160a060020a03909116815260200160405180910390a18091505b509392505050565b600154600160a060020a031681565b60405160e060020a6362617365028152600401604051809103902081565b600062000bf360405160ec60020a62061707028152600301604051809103902060405160008051602062001feb833981519152815260100160405180910390206040519182526020820152604090810190518091039020620005bf565b905090565b600062000c2b8383600060405180591062000c105750595b818152601f19601f8301168101602001604052905062000c32565b9392505050565b60008084848462000a8162000fcd565b600062000c4e62000b96565b600160a060020a031663fdef91068686868660006040516020015260405160e060020a63ffffffff8716028152600160a060020a0380861660048301908152908516602483015260448201849052608060648301908152909160840183818151815260200191508051906020019080838360005b8381101562000cdc57808201518382015260200162000cc2565b50505050905090810190601f16801562000d0a5780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b151562000d2c57600080fd5b6102c65a03f1151562000d3e57600080fd5b50505060405180519695505050505050565b600062000c2b8383600060405180591062000d685750595b818152601f19601f8301168101602001604052905062000a71565b6004541562000d9157600080fd5b62000d9b62000f41565b600455565b6000838360405191825260208201526040908101905190819003902060008181526020819052604090819020805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0386161790559091508190849086907fe944a7cdbc6cbd4bfe4713501567365bd379a9df5fd376422712b066d6e6b52290869051600160a060020a03909116815260200160405180910390a49392505050565b62000e4962000faa565b62000c2b838362000f45565b60008084846040519182526020820152604090810190519081900390209150600160a060020a0383161562000b615762000e8f82620005bf565b9050600160a060020a0381161562000ec057600160a060020a038181169084161462000eba57600080fd5b62000b61565b60008281526020819052604090819020805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0386161790558290859087907fe944a7cdbc6cbd4bfe4713501567365bd379a9df5fd376422712b066d6e6b52290879051600160a060020a03909116815260200160405180910390a4509392505050565b4390565b62000f4f62000faa565b600260405180591062000f5f5750595b90808252806020026020018201604052509050828160008151811062000f8157fe5b60209081029091010152818160018151811062000f9a57fe5b6020908102909101015292915050565b60206040519081016040526000815290565b6040516107fe8062000fdf83390190565b60405161080e80620017dd8339019056006060604052341561000f57600080fd5b6040516107fe3803806107fe83398101604052808051919060200180519190602001805160008054600160a060020a031916600160a060020a0387161781556001859055920191849150839083906100738364010000000061017881026104901704565b9050600082511115610124576100958164010000000061048861024b82021704565b15156100a057600080fd5b80600160a060020a03168260405180828051906020019080838360005b838110156100d55780820151838201526020016100bd565b50505050905090810190601f1680156101025780820380516001836020036101000a031916815260200191505b509150506000604051808303818561646e5a03f4915050151561012457600080fd5b5050505061014660015461017864010000000002610490176401000000009004565b60028054600160a060020a031916600160a060020a03928316179081905516151561017057600080fd5b505050610253565b60008054600160a060020a03166342c71f1d6040517f6261736500000000000000000000000000000000000000000000000000000000815260040160405180910390208460405191825260208201526040908101905180910390206000604051602001526040517c010000000000000000000000000000000000000000000000000000000063ffffffff84160281526004810191909152602401602060405180830381600087803b151561022b57600080fd5b6102c65a03f1151561023c57600080fd5b50505060405180519392505050565b6000903b1190565b61059c806102626000396000f3006060604052600436106100ae5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416631113ed0d81146100f1578063178e6079146101165780632501269914610129578063756f60491461013c57806380afdea81461014f578063a3b4b07f14610162578063cbcc65eb14610175578063d4aae0c414610188578063daa3a163146101c4578063db8a61d4146101eb578063ea879634146101fe575b6100ef6100b961020d565b6000368080601f016020809104026020016040519081016040528181529291906020840183838082843750610229945050505050565b005b34156100fc57600080fd5b610104610265565b60405190815260200160405180910390f35b341561012157600080fd5b610104610299565b341561013457600080fd5b6101046102cd565b341561014757600080fd5b610104610349565b341561015a57600080fd5b61010461037d565b341561016d57600080fd5b610104610383565b341561018057600080fd5b6101046103ff565b341561019357600080fd5b61019b610433565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b34156101cf57600080fd5b6101d761044f565b604051901515815260200160405180910390f35b34156101f657600080fd5b610104610454565b341561020957600080fd5b61019b5b60025473ffffffffffffffffffffffffffffffffffffffff1690565b61023282610488565b151561023d57600080fd5b600080825160208401856127105a03f43d604051816000823e828015610261578282f35b8282fd5b6040517f6b65726e656c2e617261676f6e706d2e657468000000000000000000000000008152601301604051809103902081565b6040517f61707000000000000000000000000000000000000000000000000000000000008152600301604051809103902081565b6040517f636f726500000000000000000000000000000000000000000000000000000000815260040160405180910390206040517f6b65726e656c2e617261676f6e706d2e6574680000000000000000000000000081526013016040518091039020604051918252602082015260409081019051809103902081565b6040517f636f7265000000000000000000000000000000000000000000000000000000008152600401604051809103902081565b60015481565b6040517f6170700000000000000000000000000000000000000000000000000000000000815260030160405180910390206040517f61636c2e617261676f6e706d2e6574680000000000000000000000000000000081526010016040518091039020604051918252602082015260409081019051809103902081565b6040517f61636c2e617261676f6e706d2e657468000000000000000000000000000000008152601001604051809103902081565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b600090565b6040517f62617365000000000000000000000000000000000000000000000000000000008152600401604051809103902081565b6000903b1190565b6000805473ffffffffffffffffffffffffffffffffffffffff166342c71f1d6040517f6261736500000000000000000000000000000000000000000000000000000000815260040160405180910390208460405191825260208201526040908101905180910390206000604051602001526040517c010000000000000000000000000000000000000000000000000000000063ffffffff84160281526004810191909152602401602060405180830381600087803b151561055057600080fd5b6102c65a03f1151561056157600080fd5b505050604051805193925050505600a165627a7a72305820a0536f883c1ae9b78054e0524dc54ee8dd5c1c4c821ea2234ac247266340e88800296060604052341561000f57600080fd5b60405161080e38038061080e83398101604052808051919060200180519190602001805160008054600160a060020a031916600160a060020a0387161781556001859055920191849150839083906100738364010000000061013081026104e01704565b905060008251111561012457610095816401000000006105c061020382021704565b15156100a057600080fd5b80600160a060020a03168260405180828051906020019080838360005b838110156100d55780820151838201526020016100bd565b50505050905090810190601f1680156101025780820380516001836020036101000a031916815260200191505b509150506000604051808303818561646e5a03f4915050151561012457600080fd5b5050505050505061020b565b60008054600160a060020a03166342c71f1d6040517f6261736500000000000000000000000000000000000000000000000000000000815260040160405180910390208460405191825260208201526040908101905180910390206000604051602001526040517c010000000000000000000000000000000000000000000000000000000063ffffffff84160281526004810191909152602401602060405180830381600087803b15156101e357600080fd5b6102c65a03f115156101f457600080fd5b50505060405180519392505050565b6000903b1190565b6105f48061021a6000396000f3006060604052600436106100b95763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416631113ed0d8114610124578063178e607914610149578063250126991461015c5780633bc7ebac1461016f578063756f6049146101ab57806380afdea8146101be578063a3b4b07f146101d1578063cbcc65eb146101e4578063d4aae0c4146101f7578063daa3a1631461020a578063db8a61d414610231578063ea87963414610244575b60006100c3610253565b905073ffffffffffffffffffffffffffffffffffffffff811615156100e757600080fd5b610121816000368080601f016020809104026020016040519081016040528181529291906020840183838082843750610265945050505050565b50005b341561012f57600080fd5b6101376102a1565b60405190815260200160405180910390f35b341561015457600080fd5b6101376102d5565b341561016757600080fd5b610137610309565b341561017a57600080fd5b610182610385565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b34156101b657600080fd5b6101376103a1565b34156101c957600080fd5b6101376103d5565b34156101dc57600080fd5b6101376103db565b34156101ef57600080fd5b610137610457565b341561020257600080fd5b61018261048b565b341561021557600080fd5b61021d6104a7565b604051901515815260200160405180910390f35b341561023c57600080fd5b6101376104ac565b341561024f57600080fd5b6101825b60006102606001546104e0565b905090565b61026e826105c0565b151561027957600080fd5b600080825160208401856127105a03f43d604051816000823e82801561029d578282f35b8282fd5b6040517f6b65726e656c2e617261676f6e706d2e657468000000000000000000000000008152601301604051809103902081565b6040517f61707000000000000000000000000000000000000000000000000000000000008152600301604051809103902081565b6040517f636f726500000000000000000000000000000000000000000000000000000000815260040160405180910390206040517f6b65726e656c2e617261676f6e706d2e6574680000000000000000000000000081526013016040518091039020604051918252602082015260409081019051809103902081565b60645473ffffffffffffffffffffffffffffffffffffffff1681565b6040517f636f7265000000000000000000000000000000000000000000000000000000008152600401604051809103902081565b60015481565b6040517f6170700000000000000000000000000000000000000000000000000000000000815260030160405180910390206040517f61636c2e617261676f6e706d2e6574680000000000000000000000000000000081526010016040518091039020604051918252602082015260409081019051809103902081565b6040517f61636c2e617261676f6e706d2e657468000000000000000000000000000000008152601001604051809103902081565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b600190565b6040517f62617365000000000000000000000000000000000000000000000000000000008152600401604051809103902081565b6000805473ffffffffffffffffffffffffffffffffffffffff166342c71f1d6040517f6261736500000000000000000000000000000000000000000000000000000000815260040160405180910390208460405191825260208201526040908101905180910390206000604051602001526040517c010000000000000000000000000000000000000000000000000000000063ffffffff84160281526004810191909152602401602060405180830381600087803b15156105a057600080fd5b6102c65a03f115156105b157600080fd5b50505060405180519392505050565b6000903b11905600a165627a7a723058202b969e041cba9a819bb1feb58ebb8e31cb47eeb07b69105f272f8a98e475526c002961636c2e617261676f6e706d2e657468000000000000000000000000000000004150505f4d414e414745525f524f4c4500000000000000000000000000000000a165627a7a7230582099b362aedaa258d311c36caf494b0d0daf00333ca8cd976c3041285e378b582c0029

Deployed Bytecode

0x606060405260043610620001315763ffffffff60e060020a6000350416631113ed0d811462000136578063178e6079146200015e57806325012699146200017457806338bb6def146200018a57806342c71f1d14620001bf578063485cc95514620001d8578063756f6049146200020257806380afdea8146200021857806380cd5ac3146200022e5780638b3dd74914620002535780638ea8dc9d1462000269578063958fde82146200027f578063a3b4b07f14620002a4578063ae5b254014620002ba578063cbcc65eb14620002e2578063d162f8b014620002f8578063d4aae0c41462000360578063db8a61d41462000376578063de287359146200038c578063e156a8f314620003a2578063ede658b014620003c7578063fdef9106146200042f578063ff289fc514620004b2575b600080fd5b34156200014257600080fd5b6200014c620004d7565b60405190815260200160405180910390f35b34156200016a57600080fd5b6200014c6200050b565b34156200018057600080fd5b6200014c62000528565b34156200019657600080fd5b620001a3600435620005a4565b604051600160a060020a03909116815260200160405180910390f35b3415620001cb57600080fd5b620001a3600435620005bf565b3415620001e457600080fd5b62000200600160a060020a0360043581169060243516620005da565b005b34156200020e57600080fd5b6200014c62000718565b34156200022457600080fd5b6200014c6200074c565b34156200023a57600080fd5b620001a3600435600160a060020a036024351662000752565b34156200025f57600080fd5b6200014c6200080c565b34156200027557600080fd5b6200014c62000812565b34156200028b57600080fd5b620001a3600435600160a060020a036024351662000835565b3415620002b057600080fd5b6200014c620008e4565b3415620002c657600080fd5b6200014c600435602435600160a060020a036044351662000938565b3415620002ee57600080fd5b6200014c62000a4e565b34156200030457600080fd5b620001a360048035600160a060020a03169060248035919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965062000a7195505050505050565b34156200036c57600080fd5b620001a362000b69565b34156200038257600080fd5b6200014c62000b78565b34156200039857600080fd5b620001a362000b96565b3415620003ae57600080fd5b620001a3600160a060020a036004351660243562000bf8565b3415620003d357600080fd5b620001a360048035600160a060020a03169060248035919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965062000c3295505050505050565b34156200043b57600080fd5b6200049e600160a060020a036004803582169160248035909116916044359160849060643590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965062000c4295505050505050565b604051901515815260200160405180910390f35b3415620004be57600080fd5b620001a3600160a060020a036004351660243562000d50565b6040517f6b65726e656c2e617261676f6e706d2e657468000000000000000000000000008152601301604051809103902081565b60405160ec60020a62061707028152600301604051809103902081565b6040517f636f726500000000000000000000000000000000000000000000000000000000815260040160405180910390206040517f6b65726e656c2e617261676f6e706d2e6574680000000000000000000000000081526013016040518091039020604051918252602082015260409081019051809103902081565b600060208190529081526040902054600160a060020a031681565b600090815260208190526040902054600160a060020a031690565b60045460009015620005eb57600080fd5b620005f562000d83565b620006203060405160008051602062001feb8339815191528152601001604051809103902062000bf8565b90506200066860405160e060020a6362617365028152600401604051809103902060405160008051602062001feb833981519152815260100160405180910390208562000da0565b50620006ae60405160ec60020a62061707028152600301604051809103902060405160008051602062001feb833981519152815260100160405180910390208362000da0565b5080600160a060020a031663c4d66de88360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b1515620006fe57600080fd5b6102c65a03f115156200071057600080fd5b505050505050565b6040517f636f7265000000000000000000000000000000000000000000000000000000008152600401604051809103902081565b60025481565b60006040516000805160206200200b833981519152815260100160405180910390206200079a60405160e060020a636261736502815260040160405180910390208562000e3f565b620007a462000faa565b600082516020029050829150808252620007c13330868562000c42565b1515620007cd57600080fd5b620007f460405160e060020a63626173650281526004016040518091039020888862000e55565b5062000801308862000bf8565b979650505050505050565b60045490565b6040516000805160206200200b8339815191528152601001604051809103902081565b60006040516000805160206200200b833981519152815260100160405180910390206200087d60405160e060020a636261736502815260040160405180910390208562000e3f565b6200088762000faa565b600082516020029050829150808252620008a43330868562000c42565b1515620008b057600080fd5b620008d760405160e060020a63626173650281526004016040518091039020888862000e55565b5062000801308862000d50565b60405160ec60020a62061707028152600301604051809103902060405160008051602062001feb83398151915281526010016040518091039020604051918252602082015260409081019051809103902081565b60006040516000805160206200200b8339815191528152601001604051809103902062000966858562000e3f565b6200097062000faa565b6000825160200290508291508082526200098d3330868562000c42565b15156200099957600080fd5b600080620009a98a8a8a62000da0565b965062000a2e6040517f636f726500000000000000000000000000000000000000000000000000000000815260040160405180910390206040517f6b65726e656c2e617261676f6e706d2e65746800000000000000000000000000815260130160405180910390206040519182526020820152604090810190518091039020620005bf565b915050803b6000811162000a4157600080fd5b5050505050509392505050565b60405160008051602062001feb8339815191528152601001604051809103902081565b60008084848462000a8162000fbc565b600160a060020a03841681526020810183905260606040820181815290820183818151815260200191508051906020019080838360005b8381101562000ad257808201518382015260200162000ab8565b50505050905090810190601f16801562000b005780820380516001836020036101000a031916815260200191505b50945050505050604051809103906000f080151562000b1e57600080fd5b90507fe28f1412cafe58e22073759128eddcccfd9c1e3326665df874bdaf26077231a981604051600160a060020a03909116815260200160405180910390a18091505b509392505050565b600154600160a060020a031681565b60405160e060020a6362617365028152600401604051809103902081565b600062000bf360405160ec60020a62061707028152600301604051809103902060405160008051602062001feb833981519152815260100160405180910390206040519182526020820152604090810190518091039020620005bf565b905090565b600062000c2b8383600060405180591062000c105750595b818152601f19601f8301168101602001604052905062000c32565b9392505050565b60008084848462000a8162000fcd565b600062000c4e62000b96565b600160a060020a031663fdef91068686868660006040516020015260405160e060020a63ffffffff8716028152600160a060020a0380861660048301908152908516602483015260448201849052608060648301908152909160840183818151815260200191508051906020019080838360005b8381101562000cdc57808201518382015260200162000cc2565b50505050905090810190601f16801562000d0a5780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b151562000d2c57600080fd5b6102c65a03f1151562000d3e57600080fd5b50505060405180519695505050505050565b600062000c2b8383600060405180591062000d685750595b818152601f19601f8301168101602001604052905062000a71565b6004541562000d9157600080fd5b62000d9b62000f41565b600455565b6000838360405191825260208201526040908101905190819003902060008181526020819052604090819020805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0386161790559091508190849086907fe944a7cdbc6cbd4bfe4713501567365bd379a9df5fd376422712b066d6e6b52290869051600160a060020a03909116815260200160405180910390a49392505050565b62000e4962000faa565b62000c2b838362000f45565b60008084846040519182526020820152604090810190519081900390209150600160a060020a0383161562000b615762000e8f82620005bf565b9050600160a060020a0381161562000ec057600160a060020a038181169084161462000eba57600080fd5b62000b61565b60008281526020819052604090819020805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0386161790558290859087907fe944a7cdbc6cbd4bfe4713501567365bd379a9df5fd376422712b066d6e6b52290879051600160a060020a03909116815260200160405180910390a4509392505050565b4390565b62000f4f62000faa565b600260405180591062000f5f5750595b90808252806020026020018201604052509050828160008151811062000f8157fe5b60209081029091010152818160018151811062000f9a57fe5b6020908102909101015292915050565b60206040519081016040526000815290565b6040516107fe8062000fdf83390190565b60405161080e80620017dd8339019056006060604052341561000f57600080fd5b6040516107fe3803806107fe83398101604052808051919060200180519190602001805160008054600160a060020a031916600160a060020a0387161781556001859055920191849150839083906100738364010000000061017881026104901704565b9050600082511115610124576100958164010000000061048861024b82021704565b15156100a057600080fd5b80600160a060020a03168260405180828051906020019080838360005b838110156100d55780820151838201526020016100bd565b50505050905090810190601f1680156101025780820380516001836020036101000a031916815260200191505b509150506000604051808303818561646e5a03f4915050151561012457600080fd5b5050505061014660015461017864010000000002610490176401000000009004565b60028054600160a060020a031916600160a060020a03928316179081905516151561017057600080fd5b505050610253565b60008054600160a060020a03166342c71f1d6040517f6261736500000000000000000000000000000000000000000000000000000000815260040160405180910390208460405191825260208201526040908101905180910390206000604051602001526040517c010000000000000000000000000000000000000000000000000000000063ffffffff84160281526004810191909152602401602060405180830381600087803b151561022b57600080fd5b6102c65a03f1151561023c57600080fd5b50505060405180519392505050565b6000903b1190565b61059c806102626000396000f3006060604052600436106100ae5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416631113ed0d81146100f1578063178e6079146101165780632501269914610129578063756f60491461013c57806380afdea81461014f578063a3b4b07f14610162578063cbcc65eb14610175578063d4aae0c414610188578063daa3a163146101c4578063db8a61d4146101eb578063ea879634146101fe575b6100ef6100b961020d565b6000368080601f016020809104026020016040519081016040528181529291906020840183838082843750610229945050505050565b005b34156100fc57600080fd5b610104610265565b60405190815260200160405180910390f35b341561012157600080fd5b610104610299565b341561013457600080fd5b6101046102cd565b341561014757600080fd5b610104610349565b341561015a57600080fd5b61010461037d565b341561016d57600080fd5b610104610383565b341561018057600080fd5b6101046103ff565b341561019357600080fd5b61019b610433565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b34156101cf57600080fd5b6101d761044f565b604051901515815260200160405180910390f35b34156101f657600080fd5b610104610454565b341561020957600080fd5b61019b5b60025473ffffffffffffffffffffffffffffffffffffffff1690565b61023282610488565b151561023d57600080fd5b600080825160208401856127105a03f43d604051816000823e828015610261578282f35b8282fd5b6040517f6b65726e656c2e617261676f6e706d2e657468000000000000000000000000008152601301604051809103902081565b6040517f61707000000000000000000000000000000000000000000000000000000000008152600301604051809103902081565b6040517f636f726500000000000000000000000000000000000000000000000000000000815260040160405180910390206040517f6b65726e656c2e617261676f6e706d2e6574680000000000000000000000000081526013016040518091039020604051918252602082015260409081019051809103902081565b6040517f636f7265000000000000000000000000000000000000000000000000000000008152600401604051809103902081565b60015481565b6040517f6170700000000000000000000000000000000000000000000000000000000000815260030160405180910390206040517f61636c2e617261676f6e706d2e6574680000000000000000000000000000000081526010016040518091039020604051918252602082015260409081019051809103902081565b6040517f61636c2e617261676f6e706d2e657468000000000000000000000000000000008152601001604051809103902081565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b600090565b6040517f62617365000000000000000000000000000000000000000000000000000000008152600401604051809103902081565b6000903b1190565b6000805473ffffffffffffffffffffffffffffffffffffffff166342c71f1d6040517f6261736500000000000000000000000000000000000000000000000000000000815260040160405180910390208460405191825260208201526040908101905180910390206000604051602001526040517c010000000000000000000000000000000000000000000000000000000063ffffffff84160281526004810191909152602401602060405180830381600087803b151561055057600080fd5b6102c65a03f1151561056157600080fd5b505050604051805193925050505600a165627a7a72305820a0536f883c1ae9b78054e0524dc54ee8dd5c1c4c821ea2234ac247266340e88800296060604052341561000f57600080fd5b60405161080e38038061080e83398101604052808051919060200180519190602001805160008054600160a060020a031916600160a060020a0387161781556001859055920191849150839083906100738364010000000061013081026104e01704565b905060008251111561012457610095816401000000006105c061020382021704565b15156100a057600080fd5b80600160a060020a03168260405180828051906020019080838360005b838110156100d55780820151838201526020016100bd565b50505050905090810190601f1680156101025780820380516001836020036101000a031916815260200191505b509150506000604051808303818561646e5a03f4915050151561012457600080fd5b5050505050505061020b565b60008054600160a060020a03166342c71f1d6040517f6261736500000000000000000000000000000000000000000000000000000000815260040160405180910390208460405191825260208201526040908101905180910390206000604051602001526040517c010000000000000000000000000000000000000000000000000000000063ffffffff84160281526004810191909152602401602060405180830381600087803b15156101e357600080fd5b6102c65a03f115156101f457600080fd5b50505060405180519392505050565b6000903b1190565b6105f48061021a6000396000f3006060604052600436106100b95763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416631113ed0d8114610124578063178e607914610149578063250126991461015c5780633bc7ebac1461016f578063756f6049146101ab57806380afdea8146101be578063a3b4b07f146101d1578063cbcc65eb146101e4578063d4aae0c4146101f7578063daa3a1631461020a578063db8a61d414610231578063ea87963414610244575b60006100c3610253565b905073ffffffffffffffffffffffffffffffffffffffff811615156100e757600080fd5b610121816000368080601f016020809104026020016040519081016040528181529291906020840183838082843750610265945050505050565b50005b341561012f57600080fd5b6101376102a1565b60405190815260200160405180910390f35b341561015457600080fd5b6101376102d5565b341561016757600080fd5b610137610309565b341561017a57600080fd5b610182610385565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b34156101b657600080fd5b6101376103a1565b34156101c957600080fd5b6101376103d5565b34156101dc57600080fd5b6101376103db565b34156101ef57600080fd5b610137610457565b341561020257600080fd5b61018261048b565b341561021557600080fd5b61021d6104a7565b604051901515815260200160405180910390f35b341561023c57600080fd5b6101376104ac565b341561024f57600080fd5b6101825b60006102606001546104e0565b905090565b61026e826105c0565b151561027957600080fd5b600080825160208401856127105a03f43d604051816000823e82801561029d578282f35b8282fd5b6040517f6b65726e656c2e617261676f6e706d2e657468000000000000000000000000008152601301604051809103902081565b6040517f61707000000000000000000000000000000000000000000000000000000000008152600301604051809103902081565b6040517f636f726500000000000000000000000000000000000000000000000000000000815260040160405180910390206040517f6b65726e656c2e617261676f6e706d2e6574680000000000000000000000000081526013016040518091039020604051918252602082015260409081019051809103902081565b60645473ffffffffffffffffffffffffffffffffffffffff1681565b6040517f636f7265000000000000000000000000000000000000000000000000000000008152600401604051809103902081565b60015481565b6040517f6170700000000000000000000000000000000000000000000000000000000000815260030160405180910390206040517f61636c2e617261676f6e706d2e6574680000000000000000000000000000000081526010016040518091039020604051918252602082015260409081019051809103902081565b6040517f61636c2e617261676f6e706d2e657468000000000000000000000000000000008152601001604051809103902081565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b600190565b6040517f62617365000000000000000000000000000000000000000000000000000000008152600401604051809103902081565b6000805473ffffffffffffffffffffffffffffffffffffffff166342c71f1d6040517f6261736500000000000000000000000000000000000000000000000000000000815260040160405180910390208460405191825260208201526040908101905180910390206000604051602001526040517c010000000000000000000000000000000000000000000000000000000063ffffffff84160281526004810191909152602401602060405180830381600087803b15156105a057600080fd5b6102c65a03f115156105b157600080fd5b50505060405180519392505050565b6000903b11905600a165627a7a723058202b969e041cba9a819bb1feb58ebb8e31cb47eeb07b69105f272f8a98e475526c002961636c2e617261676f6e706d2e657468000000000000000000000000000000004150505f4d414e414745525f524f4c4500000000000000000000000000000000a165627a7a7230582099b362aedaa258d311c36caf494b0d0daf00333ca8cd976c3041285e378b582c0029

Swarm Source

bzzr://99b362aedaa258d311c36caf494b0d0daf00333ca8cd976c3041285e378b582c

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

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