ETH Price: $3,460.04 (+3.70%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Construct User I...90328992019-12-01 14:33:131858 days ago1575210793IN
0xa2073FAb...1fa2325B5
0 ETH0.006076044
Construct User I...89150152019-11-11 14:48:261878 days ago1573483706IN
0xa2073FAb...1fa2325B5
0 ETH0.003493872.3
Construct User I...84297472019-08-27 3:13:231955 days ago1566875603IN
0xa2073FAb...1fa2325B5
0 ETH0.01367119
Construct User I...83929202019-08-21 9:40:081961 days ago1566380408IN
0xa2073FAb...1fa2325B5
0 ETH0.013671689
Construct User I...83594802019-08-16 5:01:391966 days ago1565931699IN
0xa2073FAb...1fa2325B5
0 ETH0.006075794
Construct User I...82087122019-07-23 19:09:481989 days ago1563908988IN
0xa2073FAb...1fa2325B5
0 ETH0.003038152
Construct User I...81174112019-07-09 13:43:172003 days ago1562679797IN
0xa2073FAb...1fa2325B5
0 ETH0.004557223
Construct User I...80839782019-07-04 9:16:102009 days ago1562231770IN
0xa2073FAb...1fa2325B5
0 ETH0.009266366.1
Construct User I...78575852019-05-29 23:49:452044 days ago1559173785IN
0xa2073FAb...1fa2325B5
0 ETH0.00607634
Construct User I...77697982019-05-16 6:44:452058 days ago1557989085IN
0xa2073FAb...1fa2325B5
0 ETH0.013671689
Construct User I...77532112019-05-13 17:03:322060 days ago1557767012IN
0xa2073FAb...1fa2325B5
0 ETH0.013671689
Construct User I...77214292019-05-08 17:39:112065 days ago1557337151IN
0xa2073FAb...1fa2325B5
0 ETH0.009114076
Construct User I...77201112019-05-08 12:46:542066 days ago1557319614IN
0xa2073FAb...1fa2325B5
0 ETH0.00607634
Construct User I...76877112019-05-03 11:16:322071 days ago1556882192IN
0xa2073FAb...1fa2325B5
0 ETH0.00607634
Construct User I...76438382019-04-26 15:34:192077 days ago1556292859IN
0xa2073FAb...1fa2325B5
0 ETH0.00607634
Construct User I...76032112019-04-20 7:16:002084 days ago1555744560IN
0xa2073FAb...1fa2325B5
0 ETH0.00607634
Construct User I...75286582019-04-08 16:48:462095 days ago1554742126IN
0xa2073FAb...1fa2325B5
0 ETH0.00607634
Construct User I...75195392019-04-07 6:55:382097 days ago1554620138IN
0xa2073FAb...1fa2325B5
0 ETH0.004557223
Construct User I...74696932019-03-30 12:26:242105 days ago1553948784IN
0xa2073FAb...1fa2325B5
0 ETH0.006076044
Construct User I...74561272019-03-28 9:06:422107 days ago1553764002IN
0xa2073FAb...1fa2325B5
0 ETH0.00607634
Construct User I...74456492019-03-26 17:57:122108 days ago1553623032IN
0xa2073FAb...1fa2325B5
0 ETH0.004557223
Construct User I...74411942019-03-26 1:02:112109 days ago1553562131IN
0xa2073FAb...1fa2325B5
0 ETH0.003038152
Construct User I...74178802019-03-22 9:54:562113 days ago1553248496IN
0xa2073FAb...1fa2325B5
0 ETH0.00607634
Construct User I...74134412019-03-21 17:23:212113 days ago1553189001IN
0xa2073FAb...1fa2325B5
0 ETH0.00607634
Construct User I...73946452019-03-18 19:02:222116 days ago1552935742IN
0xa2073FAb...1fa2325B5
0 ETH0.004557223
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
90328992019-12-01 14:33:131858 days ago1575210793
0xa2073FAb...1fa2325B5
 Contract Creation0 ETH
89150152019-11-11 14:48:261878 days ago1573483706
0xa2073FAb...1fa2325B5
 Contract Creation0 ETH
84297472019-08-27 3:13:231955 days ago1566875603
0xa2073FAb...1fa2325B5
 Contract Creation0 ETH
83929202019-08-21 9:40:081961 days ago1566380408
0xa2073FAb...1fa2325B5
 Contract Creation0 ETH
83594802019-08-16 5:01:391966 days ago1565931699
0xa2073FAb...1fa2325B5
 Contract Creation0 ETH
82087122019-07-23 19:09:481989 days ago1563908988
0xa2073FAb...1fa2325B5
 Contract Creation0 ETH
81174112019-07-09 13:43:172003 days ago1562679797
0xa2073FAb...1fa2325B5
 Contract Creation0 ETH
80839782019-07-04 9:16:102009 days ago1562231770
0xa2073FAb...1fa2325B5
 Contract Creation0 ETH
78575852019-05-29 23:49:452044 days ago1559173785
0xa2073FAb...1fa2325B5
 Contract Creation0 ETH
77697982019-05-16 6:44:452058 days ago1557989085
0xa2073FAb...1fa2325B5
 Contract Creation0 ETH
77532112019-05-13 17:03:322060 days ago1557767012
0xa2073FAb...1fa2325B5
 Contract Creation0 ETH
77214292019-05-08 17:39:112065 days ago1557337151
0xa2073FAb...1fa2325B5
 Contract Creation0 ETH
77201112019-05-08 12:46:542066 days ago1557319614
0xa2073FAb...1fa2325B5
 Contract Creation0 ETH
76877112019-05-03 11:16:322071 days ago1556882192
0xa2073FAb...1fa2325B5
 Contract Creation0 ETH
76438382019-04-26 15:34:192077 days ago1556292859
0xa2073FAb...1fa2325B5
 Contract Creation0 ETH
76032112019-04-20 7:16:002084 days ago1555744560
0xa2073FAb...1fa2325B5
 Contract Creation0 ETH
75286582019-04-08 16:48:462095 days ago1554742126
0xa2073FAb...1fa2325B5
 Contract Creation0 ETH
75195392019-04-07 6:55:382097 days ago1554620138
0xa2073FAb...1fa2325B5
 Contract Creation0 ETH
74696932019-03-30 12:26:242105 days ago1553948784
0xa2073FAb...1fa2325B5
 Contract Creation0 ETH
74561272019-03-28 9:06:422107 days ago1553764002
0xa2073FAb...1fa2325B5
 Contract Creation0 ETH
74456492019-03-26 17:57:122108 days ago1553623032
0xa2073FAb...1fa2325B5
 Contract Creation0 ETH
74411942019-03-26 1:02:112109 days ago1553562131
0xa2073FAb...1fa2325B5
 Contract Creation0 ETH
74178802019-03-22 9:54:562113 days ago1553248496
0xa2073FAb...1fa2325B5
 Contract Creation0 ETH
74134412019-03-21 17:23:212113 days ago1553189001
0xa2073FAb...1fa2325B5
 Contract Creation0 ETH
73946452019-03-18 19:02:222116 days ago1552935742
0xa2073FAb...1fa2325B5
 Contract Creation0 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ZincAccessor

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-09-04
*/

pragma solidity ^0.4.24;

contract ERC725 {

    uint256 public constant MANAGEMENT_KEY = 1;
    uint256 public constant ACTION_KEY = 2;
    uint256 public constant CLAIM_SIGNER_KEY = 3;
    uint256 public constant ENCRYPTION_KEY = 4;

    event KeyAdded(bytes32 indexed key, uint256 indexed purpose, uint256 indexed keyType);
    event KeyRemoved(bytes32 indexed key, uint256 indexed purpose, uint256 indexed keyType);
    event ExecutionRequested(uint256 indexed executionId, address indexed to, uint256 indexed value, bytes data);
    event Executed(uint256 indexed executionId, address indexed to, uint256 indexed value, bytes data);
    event Approved(uint256 indexed executionId, bool approved);

    struct Key {
        uint256[] purpose; //e.g., MANAGEMENT_KEY = 1, ACTION_KEY = 2, etc.
        uint256 keyType; // e.g. 1 = ECDSA, 2 = RSA, etc.
        bytes32 key;
    }

    function getKey(bytes32 _key) public constant returns(uint256[] purpose, uint256 keyType, bytes32 key);
    function getKeyPurpose(bytes32 _key) public constant returns(uint256[] purpose);
    function getKeysByPurpose(uint256 _purpose) public constant returns(bytes32[] keys);
    function addKey(bytes32 _key, uint256 _purpose, uint256 _keyType) public returns (bool success);
    function removeKey(bytes32 _key, uint256 _purpose) public returns (bool success);
    function execute(address _to, uint256 _value, bytes _data) public returns (uint256 executionId);
    function approve(uint256 _id, bool _approve) public returns (bool success);
}

contract ERC20Basic {
    function balanceOf(address _who) public constant returns (uint256);
    function transfer(address _to, uint256 _value) public returns (bool);
}

contract Identity is ERC725 {

    uint256 constant LOGIN_KEY = 10;
    uint256 constant FUNDS_MANAGEMENT = 11;

    uint256 executionNonce;

    struct Execution {
        address to;
        uint256 value;
        bytes data;
        bool approved;
        bool executed;
    }

    mapping (bytes32 => Key) keys;
    mapping (uint256 => bytes32[]) keysByPurpose;
    mapping (uint256 => Execution) executions;

    event ExecutionFailed(uint256 indexed executionId, address indexed to, uint256 indexed value, bytes data);

    modifier onlyManagement() {
        require(keyHasPurpose(keccak256(msg.sender), MANAGEMENT_KEY), "Sender does not have management key");
        _;
    }

    modifier onlyAction() {
        require(keyHasPurpose(keccak256(msg.sender), ACTION_KEY), "Sender does not have action key");
        _;
    }

    modifier onlyFundsManagement() {
        require(keyHasPurpose(keccak256(msg.sender), FUNDS_MANAGEMENT), "Sender does not have funds key");
        _;
    }

    constructor() public {
        bytes32 _key = keccak256(msg.sender);
        keys[_key].key = _key;
        keys[_key].purpose = [MANAGEMENT_KEY];
        keys[_key].keyType = 1;
        keysByPurpose[MANAGEMENT_KEY].push(_key);
        emit KeyAdded(_key, MANAGEMENT_KEY, 1);
    }

    function getKey(bytes32 _key)
        public
        view
        returns(uint256[] purpose, uint256 keyType, bytes32 key)
    {
        return (keys[_key].purpose, keys[_key].keyType, keys[_key].key);
    }

    function getKeyPurpose(bytes32 _key)
        public
        view
        returns(uint256[] purpose)
    {
        return (keys[_key].purpose);
    }

    function getKeysByPurpose(uint256 _purpose)
        public
        view
        returns(bytes32[] _keys)
    {
        return keysByPurpose[_purpose];
    }

    function addKey(bytes32 _key, uint256 _purpose, uint256 _type)
        public
        onlyManagement
        returns (bool success)
    {
        if (keyHasPurpose(_key, _purpose)) {
            return true;
        }

        keys[_key].key = _key;
        keys[_key].purpose.push(_purpose);
        keys[_key].keyType = _type;

        keysByPurpose[_purpose].push(_key);

        emit KeyAdded(_key, _purpose, _type);

        return true;
    }

    function approve(uint256 _id, bool _approve)
        public
        onlyAction
        returns (bool success)
    {
        emit Approved(_id, _approve);

        if (_approve == true) {
            executions[_id].approved = true;
            success = executions[_id].to.call(executions[_id].data, 0);
            if (success) {
                executions[_id].executed = true;
                emit Executed(
                    _id,
                    executions[_id].to,
                    executions[_id].value,
                    executions[_id].data
                );
            } else {
                emit ExecutionFailed(
                    _id,
                    executions[_id].to,
                    executions[_id].value,
                    executions[_id].data
                );
            }
            return success;
        } else {
            executions[_id].approved = false;
        }
        return true;
    }

    function execute(address _to, uint256 _value, bytes _data)
        public
        returns (uint256 executionId)
    {
        require(!executions[executionNonce].executed, "Already executed");
        executions[executionNonce].to = _to;
        executions[executionNonce].value = _value;
        executions[executionNonce].data = _data;

        emit ExecutionRequested(executionNonce, _to, _value, _data);

        if (keyHasPurpose(keccak256(msg.sender), ACTION_KEY)) {
            approve(executionNonce, true);
        }

        executionNonce++;
        return executionNonce-1;
    }

    function removeKey(bytes32 _key, uint256 _purpose)
        public
        onlyManagement
        returns (bool success)
    {
        require(keys[_key].key == _key, "No such key");

        if (!keyHasPurpose(_key, _purpose)) {
            return false;
        }

        uint256 arrayLength = keys[_key].purpose.length;
        int index = -1;
        for (uint i = 0; i < arrayLength; i++) {
            if (keys[_key].purpose[i] == _purpose) {
                index = int(i);
                break;
            }
        }

        if (index != -1) {
            keys[_key].purpose[uint(index)] = keys[_key].purpose[arrayLength - 1];
            delete keys[_key].purpose[arrayLength - 1];
            keys[_key].purpose.length--;
        }

        uint256 purposesLen = keysByPurpose[_purpose].length;
        for (uint j = 0; j < purposesLen; j++) {
            if (keysByPurpose[_purpose][j] == _key) {
                keysByPurpose[_purpose][j] = keysByPurpose[_purpose][purposesLen - 1];
                delete keysByPurpose[_purpose][purposesLen - 1];
                keysByPurpose[_purpose].length--;
                break;
            }
        }

        emit KeyRemoved(_key, _purpose, keys[_key].keyType);

        return true;
    }

    function keyHasPurpose(bytes32 _key, uint256 _purpose)
        public
        view
        returns(bool result)
    {
        if (keys[_key].key == 0) return false;
        uint256 arrayLength = keys[_key].purpose.length;
        for (uint i = 0; i < arrayLength; i++) {
            if (keys[_key].purpose[i] == _purpose) {
                return true;
            }
        }
        return false;
    }

   /**
     * Send all ether to msg.sender
     * Requires FUNDS_MANAGEMENT purpose for msg.sender
     */
    function withdraw() public onlyFundsManagement {
        msg.sender.transfer(address(this).balance);
    }

    /**
     * Transfer ether to _account
     * @param _amount amount to transfer in wei
     * @param _account recepient
     * Requires FUNDS_MANAGEMENT purpose for msg.sender
     */
    function transferEth(uint _amount, address _account) public onlyFundsManagement {
        require(_amount <= address(this).balance, "Amount should be less than total balance of the contract");
        require(_account != address(0), "must be valid address");
        _account.transfer(_amount);
    }

    /**
     * Returns contract eth balance
     */
    function getBalance() public view returns(uint)  {
        return address(this).balance;
    }

    /**
     * Returns ERC20 token balance for _token
     * @param _token token address
     */
    function getTokenBalance(address _token) public view returns (uint) {
        return ERC20Basic(_token).balanceOf(this);
    }

    /**
     * Send all tokens for _token to msg.sender
     * @param _token ERC20 contract address
     * Requires FUNDS_MANAGEMENT purpose for msg.sender
     */
    function withdrawTokens(address _token) public onlyFundsManagement {
        require(_token != address(0));
        ERC20Basic token = ERC20Basic(_token);
        uint balance = token.balanceOf(this);
        // token returns true on successful transfer
        assert(token.transfer(msg.sender, balance));
    }

    /**
     * Send tokens for _token to _to
     * @param _token ERC20 contract address
     * @param _to recepient
     * @param _amount amount in 
     * Requires FUNDS_MANAGEMENT purpose for msg.sender
     */
    function transferTokens(address _token, address _to, uint _amount) public onlyFundsManagement {
        require(_token != address(0));
        require(_to != address(0));
        ERC20Basic token = ERC20Basic(_token);
        uint balance = token.balanceOf(this);
        require(_amount <= balance);
        assert(token.transfer(_to, _amount));
    }

    function () public payable {}

}

contract Encoder {

    function uintToChar(uint8 _uint) internal pure returns(string) {
        byte b = "\x30"; // ASCII code for 0
        if (_uint > 9) {
            b = "\x60";  // ASCII code for the char before a
            _uint -= 9;
        }
        bytes memory bs = new bytes(1);
        bs[0] = b | byte(_uint);
        return string(bs);
    }

    /**
     *  Encodes the string representation of a uint8 into bytes
     */
    function encodeUInt(uint256 _uint) public pure returns(bytes memory) {
        if (_uint == 0) {
            return abi.encodePacked(uintToChar(0));
        }

        bytes memory result;
        uint256 x = _uint;
        while (x > 0) {
            result = abi.encodePacked(uintToChar(uint8(x % 10)), result);
            x /= 10;
        }
        return result;
    }

    /**
     *  Encodes the string representation of an address into bytes
     */
    function encodeAddress(address _address) public pure returns (bytes memory res) {
        for (uint i = 0; i < 20; i++) {
            // get each byte of the address
            byte b = byte(uint8(uint(_address) / (2**(8*(19 - i)))));

            // split it into two
            uint8 high = uint8(b >> 4);
            uint8 low = uint8(b) & 15;

            // and encode them as chars
            res = abi.encodePacked(res, uintToChar(high), uintToChar(low));
        }
        return res;
    }

    /**
     *  Encodes a string into bytes
     */
    function encodeString(string _str) public pure returns (bytes memory) {
        return abi.encodePacked(_str);
    }
}

contract SignatureValidator {

    function doHash(string _message1, uint32 _message2, string _header1, string _header2)
     pure internal returns (bytes32) {
        return keccak256(
            abi.encodePacked(
                    keccak256(abi.encodePacked(_header1, _header2)),
                    keccak256(abi.encodePacked(_message1, _message2)))
        );
    }

    /**
     * Returns address of signer for a signed message
     * @param _message1 message that was signed
     * @param _nonce nonce that was part of the signed message
     * @param _header1 header for the message (ex: "string Message")
     * @param _header2 header for the nonce (ex: "uint32 nonce")
     * @param _r r from ECDSA
     * @param _s s from ECDSA
     * @param _v recovery id
     */
    function checkSignature(string _message1, uint32 _nonce, string _header1, string _header2, bytes32 _r, bytes32 _s, uint8 _v)
     public pure returns (address) {
        bytes32 hash = doHash(_message1, _nonce, _header1, _header2);
        return ecrecover(hash, _v, _r, _s);
    }

}


/**
 * ZincAccesor contract used for constructing and managing Identity contracts
 * Access control is based on signed messages
 * This contract can be used as a trustless entity that creates an Identity contract and is used to manage it.
 * It operates as a proxy in order to allow users to interact with it based on signed messages and not spend any gas
 * It can be upgraded with the user consent by adding a instance of a new version and removing the old one.
 */

contract ZincAccessor is SignatureValidator, Encoder {

    uint256 public nonce = 0;

    event UserIdentityCreated(address indexed userAddress, address indexed identityContractAddress);
    event AccessorAdded(address indexed identityContractAddress, address indexed keyAddress, uint256 indexed purpose);
    event AccessorRemoved(address indexed identityContractAddress, address indexed keyAddress, uint256 indexed purpose);

    function checkUserSignature(
        address _userAddress,
        string _message1,
        uint32 _nonce,
        string _header1,
        string _header2,
        bytes32 _r,
        bytes32 _s,
        uint8 _v) 
    pure internal returns (bool) {
        require(
            checkSignature(_message1, _nonce, _header1, _header2, _r, _s, _v) == _userAddress,
            "User signature must be the same as signed message");
        return true;
    }

    modifier checknonce(uint _nonce) {
        require(++nonce == _nonce, "Wrong nonce");
        _;
    }

    /**
     * Constructs an Identity contract and returns its address
     * Requires a signed message to verify the identity of the initial user address
     * @param _userAddress user address
     * @param _message1 message that was signed
     * @param _nonce nonce that was part of the signed message
     * @param _header1 header for the message (ex: "string Message")
     * @param _header2 header for the nonce (ex: "uint32 nonce")
     * @param _r r from ECDSA
     * @param _s s from ECDSA
     * @param _v recovery id
     */
    function constructUserIdentity(
        address _userAddress,
        string _message1,
        uint32 _nonce,
        string _header1,
        string _header2,
        bytes32 _r,
        bytes32 _s,
        uint8 _v)
    public
     returns (address) {
        require(
            checkUserSignature(_userAddress, _message1, _nonce, _header1, _header2, _r, _s, _v),
            "User Signature does not match");

        Identity id = new Identity();
        id.addKey(keccak256(_userAddress), id.MANAGEMENT_KEY(), 1);

        emit UserIdentityCreated(_userAddress, address(id));

        return address(id);
    }

    /**
     * Adds an accessor to an Identity contract
     * Requires a signed message to verify the identity of the initial user address
     * Requires _userAddress to have KEY_MANAGEMENT purpose on the Identity contract
     * Emits AccessorAdded
     * @param _key key to add to Identity
     * @param _purpose purpose for _key
     * @param _idContract address if Identity contract
     * @param _userAddress user address
     * @param _message1 message that was signed of the form "Add {_key} to {_idContract} with purpose {_purpose}"
     * @param _nonce nonce that was part of the signed message
     * @param _header1 header for the message (ex: "string Message")
     * @param _header2 header for the nonce (ex: "uint32 nonce")
     * @param _r r from ECDSA
     * @param _s s from ECDSA
     * @param _v recovery id
     */
    function addAccessor(
        address _key,
        address _idContract,
        uint256 _purpose,
        address _userAddress,
        string _message1,
        uint32 _nonce,
        string _header1,
        string _header2,
        bytes32 _r,
        bytes32 _s,
        uint8 _v)
    public checknonce(_nonce) returns (bool) {
        require(checkUserSignature(_userAddress, _message1, _nonce, _header1, _header2, _r, _s, _v));
        require(
            keccak256(abi.encodePacked("Add 0x", encodeAddress(_key), " to 0x", encodeAddress(_idContract), " with purpose ", encodeUInt(_purpose))) ==
            keccak256(encodeString(_message1)), "Message incorrect");

        Identity id = Identity(_idContract);
        require(id.keyHasPurpose(keccak256(_userAddress), id.MANAGEMENT_KEY()));

        id.addKey(keccak256(_key), _purpose, 1);
        emit AccessorAdded(_idContract, _key, _purpose);
        return true;
    }

    /**
     * Remove an accessor from Identity contract
     * Requires a signed message to verify the identity of the initial user address
     * Requires _userAddress to have KEY_MANAGEMENT purpose on the Identity contract
     * Emits AccessorRemoved
     * @param _key key to add to Identity
     * @param _idContract address if Identity contract
     * @param _userAddress user address
     * @param _message1 message that was signed of the form "Remove {_key} from {_idContract}"
     * @param _nonce nonce that was part of the signed message
     * @param _header1 header for the message (ex: "string Message")
     * @param _header2 header for the nonce (ex: "uint32 nonce")
     * @param _r r from ECDSA
     * @param _s s from ECDSA
     * @param _v recovery id
     */
    function removeAccessor(
        address _key,
        address _idContract,
        uint256 _purpose,
        address _userAddress,
        string _message1,
        uint32 _nonce,
        string _header1,
        string _header2,
        bytes32 _r,
        bytes32 _s,
        uint8 _v)
    public checknonce(_nonce) returns (bool) {
        require(checkUserSignature(_userAddress, _message1, _nonce, _header1, _header2, _r, _s, _v));
        require(
            keccak256(abi.encodePacked("Remove 0x", encodeAddress(_key), " from 0x", encodeAddress(_idContract), " with purpose ", encodeUInt(_purpose))) ==
            keccak256(encodeString(_message1)), "Message incorrect");

        Identity id = Identity(_idContract);
        require(id.keyHasPurpose(keccak256(_userAddress), id.MANAGEMENT_KEY()));

        id.removeKey(keccak256(_key), _purpose);

        emit AccessorRemoved(_idContract, _key, _purpose);
        return true;
    }

}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[{"name":"_key","type":"address"},{"name":"_idContract","type":"address"},{"name":"_purpose","type":"uint256"},{"name":"_userAddress","type":"address"},{"name":"_message1","type":"string"},{"name":"_nonce","type":"uint32"},{"name":"_header1","type":"string"},{"name":"_header2","type":"string"},{"name":"_r","type":"bytes32"},{"name":"_s","type":"bytes32"},{"name":"_v","type":"uint8"}],"name":"addAccessor","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_key","type":"address"},{"name":"_idContract","type":"address"},{"name":"_purpose","type":"uint256"},{"name":"_userAddress","type":"address"},{"name":"_message1","type":"string"},{"name":"_nonce","type":"uint32"},{"name":"_header1","type":"string"},{"name":"_header2","type":"string"},{"name":"_r","type":"bytes32"},{"name":"_s","type":"bytes32"},{"name":"_v","type":"uint8"}],"name":"removeAccessor","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_message1","type":"string"},{"name":"_nonce","type":"uint32"},{"name":"_header1","type":"string"},{"name":"_header2","type":"string"},{"name":"_r","type":"bytes32"},{"name":"_s","type":"bytes32"},{"name":"_v","type":"uint8"}],"name":"checkSignature","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"_uint","type":"uint256"}],"name":"encodeUInt","outputs":[{"name":"","type":"bytes"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"nonce","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"encodeAddress","outputs":[{"name":"res","type":"bytes"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_userAddress","type":"address"},{"name":"_message1","type":"string"},{"name":"_nonce","type":"uint32"},{"name":"_header1","type":"string"},{"name":"_header2","type":"string"},{"name":"_r","type":"bytes32"},{"name":"_s","type":"bytes32"},{"name":"_v","type":"uint8"}],"name":"constructUserIdentity","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_str","type":"string"}],"name":"encodeString","outputs":[{"name":"","type":"bytes"}],"payable":false,"stateMutability":"pure","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"userAddress","type":"address"},{"indexed":true,"name":"identityContractAddress","type":"address"}],"name":"UserIdentityCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"identityContractAddress","type":"address"},{"indexed":true,"name":"keyAddress","type":"address"},{"indexed":true,"name":"purpose","type":"uint256"}],"name":"AccessorAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"identityContractAddress","type":"address"},{"indexed":true,"name":"keyAddress","type":"address"},{"indexed":true,"name":"purpose","type":"uint256"}],"name":"AccessorRemoved","type":"event"}]

60806040526000805534801561001457600080fd5b506134ea806100246000396000f3006080604052600436106200007d5763ffffffff60e060020a600035041663086bb51c81146200008257806314cd826c14620001a95780637bcaf58514620002bc5780639ee2b70214620003cc578063affed0e0146200045f578063d32b1bea1462000489578063db4ad99f14620004ad578063e334f32e14620005af575b600080fd5b3480156200008f57600080fd5b50604080516020600460843581810135601f810184900484028501840190955284845262000195948235600160a060020a0390811695602480358316966044359660643590941695369560a4949390910191819084018382808284375050604080516020601f818a01358b0180359182018390048302840183018552818452989b63ffffffff8b35169b909a90999401975091955091820193509150819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a999881019791965091820194509250829150840183828082843750949750508435955050506020830135926040013560ff1691506200060b9050565b604080519115158252519081900360200190f35b348015620001b657600080fd5b50604080516020600460843581810135601f810184900484028501840190955284845262000195948235600160a060020a0390811695602480358316966044359660643590941695369560a4949390910191819084018382808284375050604080516020601f818a01358b0180359182018390048302840183018552818452989b63ffffffff8b35169b909a90999401975091955091820193509150819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a999881019791965091820194509250829150840183828082843750949750508435955050506020830135926040013560ff16915062000bb69050565b348015620002c957600080fd5b506040805160206004803580820135601f8101849004840285018401909552848452620003b094369492936024939284019190819084018382808284375050604080516020601f818a01358b0180359182018390048302840183018552818452989b63ffffffff8b35169b909a90999401975091955091820193509150819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a999881019791965091820194509250829150840183828082843750949750508435955050506020830135926040013560ff169150620011589050565b60408051600160a060020a039092168252519081900360200190f35b348015620003d957600080fd5b50620003e7600435620011de565b6040805160208082528351818301528351919283929083019185019080838360005b838110156200042357818101518382015260200162000409565b50505050905090810190601f168015620004515780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156200046c57600080fd5b506200047762001359565b60408051918252519081900360200190f35b3480156200049657600080fd5b50620003e7600160a060020a03600435166200135f565b348015620004ba57600080fd5b5060408051602060046024803582810135601f8101859004850286018501909652858552620003b0958335600160a060020a031695369560449491939091019190819084018382808284375050604080516020601f818a01358b0180359182018390048302840183018552818452989b63ffffffff8b35169b909a90999401975091955091820193509150819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a999881019791965091820194509250829150840183828082843750949750508435955050506020830135926040013560ff169150620015169050565b348015620005bc57600080fd5b506040805160206004803580820135601f8101849004840285018401909552848452620003e7943694929360249392840191908190840183828082843750949750620017209650505050505050565b60008054600101808255819063ffffffff891690811462000676576040805160e560020a62461bcd02815260206004820152600b60248201527f57726f6e67206e6f6e6365000000000000000000000000000000000000000000604482015290519081900360640190fd5b620006888b8b8b8b8b8b8b8b62001792565b15156200069457600080fd5b6200069f8a62001720565b6040518082805190602001908083835b60208310620006d05780518252601f199092019160209182019101620006af565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020600019166200070c8f6200135f565b620007178f6200135f565b620007228f620011de565b60405160200180807f416464203078000000000000000000000000000000000000000000000000000081525060060184805190602001908083835b602083106200077e5780518252601f1990920191602091820191016200075d565b51815160209384036101000a60001901801990921691161790527f20746f2030780000000000000000000000000000000000000000000000000000919093019081528551600690910192860191508083835b60208310620007f15780518252601f199092019160209182019101620007d0565b51815160209384036101000a60001901801990921691161790527f207769746820707572706f736520000000000000000000000000000000000000919093019081528451600e90910192850191508083835b60208310620008645780518252601f19909201916020918201910162000843565b6001836020036101000a03801982511681845116808217855250505050505090500193505050506040516020818303038152906040526040518082805190602001908083835b60208310620008cb5780518252601f199092019160209182019101620008aa565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206000191614151562000954576040805160e560020a62461bcd02815260206004820152601160248201527f4d65737361676520696e636f7272656374000000000000000000000000000000604482015290519081900360640190fd5b8c915081600160a060020a031663d202158d8c6040518082600160a060020a0316600160a060020a03166c01000000000000000000000000028152601401915050604051809103902084600160a060020a031663058b316c6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015620009dc57600080fd5b505af1158015620009f1573d6000803e3d6000fd5b505050506040513d602081101562000a0857600080fd5b50516040805160e060020a63ffffffff8616028152600481019390935260248301919091525160448083019260209291908290030181600087803b15801562000a5057600080fd5b505af115801562000a65573d6000803e3d6000fd5b505050506040513d602081101562000a7c57600080fd5b5051151562000a8a57600080fd5b81600160a060020a0316631d3812408f6040518082600160a060020a0316600160a060020a03166c0100000000000000000000000002815260140191505060405180910390208e60016040518463ffffffff1660e060020a0281526004018084600019166000191681526020018381526020018281526020019350505050602060405180830381600087803b15801562000b2357600080fd5b505af115801562000b38573d6000803e3d6000fd5b505050506040513d602081101562000b4f57600080fd5b8101908080519060200190929190505050508b8e600160a060020a03168e600160a060020a03167f1e7adf4c5e17188fcee9914769709147e1497bb7aa63ba52063c01810d75fce460405160405180910390a45060019d9c50505050505050505050505050565b60008054600101808255819063ffffffff891690811462000c21576040805160e560020a62461bcd02815260206004820152600b60248201527f57726f6e67206e6f6e6365000000000000000000000000000000000000000000604482015290519081900360640190fd5b62000c338b8b8b8b8b8b8b8b62001792565b151562000c3f57600080fd5b62000c4a8a62001720565b6040518082805190602001908083835b6020831062000c7b5780518252601f19909201916020918201910162000c5a565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206000191662000cb78f6200135f565b62000cc28f6200135f565b62000ccd8f620011de565b60405160200180807f52656d6f7665203078000000000000000000000000000000000000000000000081525060090184805190602001908083835b6020831062000d295780518252601f19909201916020918201910162000d08565b51815160209384036101000a60001901801990921691161790527f2066726f6d203078000000000000000000000000000000000000000000000000919093019081528551600890910192860191508083835b6020831062000d9c5780518252601f19909201916020918201910162000d7b565b51815160209384036101000a60001901801990921691161790527f207769746820707572706f736520000000000000000000000000000000000000919093019081528451600e90910192850191508083835b6020831062000e0f5780518252601f19909201916020918201910162000dee565b6001836020036101000a03801982511681845116808217855250505050505090500193505050506040516020818303038152906040526040518082805190602001908083835b6020831062000e765780518252601f19909201916020918201910162000e55565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206000191614151562000eff576040805160e560020a62461bcd02815260206004820152601160248201527f4d65737361676520696e636f7272656374000000000000000000000000000000604482015290519081900360640190fd5b8c915081600160a060020a031663d202158d8c6040518082600160a060020a0316600160a060020a03166c01000000000000000000000000028152601401915050604051809103902084600160a060020a031663058b316c6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801562000f8757600080fd5b505af115801562000f9c573d6000803e3d6000fd5b505050506040513d602081101562000fb357600080fd5b50516040805160e060020a63ffffffff8616028152600481019390935260248301919091525160448083019260209291908290030181600087803b15801562000ffb57600080fd5b505af115801562001010573d6000803e3d6000fd5b505050506040513d60208110156200102757600080fd5b505115156200103557600080fd5b81600160a060020a03166353d413c58f6040518082600160a060020a0316600160a060020a03166c0100000000000000000000000002815260140191505060405180910390208e6040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b158015620010c557600080fd5b505af1158015620010da573d6000803e3d6000fd5b505050506040513d6020811015620010f157600080fd5b8101908080519060200190929190505050508b8e600160a060020a03168e600160a060020a03167fbdd975f83fe1ced355e069b198d89e3acb2bc1e42a13c6952ae8bf8ff52b00dd60405160405180910390a45060019d9c50505050505050505050505050565b600080620011698989898962001843565b604080516000808252602080830180855285905260ff881683850152606083018a905260808301899052925193945060019360a08084019493601f19830193908390039091019190865af1158015620011c6573d6000803e3d6000fd5b5050604051601f1901519a9950505050505050505050565b60608060008315156200126757620011f7600062001ab9565b6040516020018082805190602001908083835b602083106200122b5780518252601f1990920191602091820191016200120a565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052925062001352565b50825b60008111156200134e5762001282600a820662001ab9565b826040516020018083805190602001908083835b60208310620012b75780518252601f19909201916020918201910162001296565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b60208310620013015780518252601f199092019160209182019101620012e0565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529150600a818115156200134557fe5b0490506200126a565b8192505b5050919050565b60005481565b606060008080805b60148410156200150d578360130360080260020a86600160a060020a03168115156200138f57fe5b047f0100000000000000000000000000000000000000000000000000000000000000908102935060107fff0000000000000000000000000000000000000000000000000000000000000085160481900492508304600f16905084620013f48362001ab9565b620013ff8362001ab9565b6040516020018084805190602001908083835b60208310620014335780518252601f19909201916020918201910162001412565b51815160209384036101000a600019018019909216911617905286519190930192860191508083835b602083106200147d5780518252601f1990920191602091820191016200145c565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b60208310620014c75780518252601f199092019160209182019101620014a6565b6001836020036101000a03801982511681845116808217855250505050505090500193505050506040516020818303038152906040529450838060010194505062001367565b50505050919050565b6000806200152b8a8a8a8a8a8a8a8a62001792565b151562001582576040805160e560020a62461bcd02815260206004820152601d60248201527f55736572205369676e617475726520646f6573206e6f74206d61746368000000604482015290519081900360640190fd5b6200158c62001ba0565b604051809103906000f080158015620015a9573d6000803e3d6000fd5b50905080600160a060020a0316631d3812408b6040518082600160a060020a0316600160a060020a03166c01000000000000000000000000028152601401915050604051809103902083600160a060020a031663058b316c6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156200163157600080fd5b505af115801562001646573d6000803e3d6000fd5b505050506040513d60208110156200165d57600080fd5b50516040805160e060020a63ffffffff861602815260048101939093526024830191909152600160448301525160648083019260209291908290030181600087803b158015620016ac57600080fd5b505af1158015620016c1573d6000803e3d6000fd5b505050506040513d6020811015620016d857600080fd5b5050604051600160a060020a0380831691908c16907f79f95559c16c7a61f15bd5812ebd7d8071b4774e1cf7a5c5ea7b7f9aaca051b090600090a39998505050505050505050565b6060816040516020018082805190602001908083835b60208310620017575780518252601f19909201916020918201910162001736565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040529050919050565b600088600160a060020a0316620017af8989898989898962001158565b600160a060020a03161462001834576040805160e560020a62461bcd02815260206004820152603160248201527f55736572207369676e6174757265206d757374206265207468652073616d652060448201527f6173207369676e6564206d657373616765000000000000000000000000000000606482015290519081900360840190fd5b50600198975050505050505050565b600082826040516020018083805190602001908083835b602083106200187b5780518252601f1990920191602091820191016200185a565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b60208310620018c55780518252601f199092019160209182019101620018a4565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040526040518082805190602001908083835b602083106200192b5780518252601f1990920191602091820191016200190a565b51815160209384036101000a60001901801990921691161790526040519190930181900381208a519095508a94508993918201925082918501908083835b602083106200198a5780518252601f19909201916020918201910162001969565b6001836020036101000a0380198251168184511680821785525050505050509050018263ffffffff1663ffffffff1660e060020a028152600401925050506040516020818303038152906040526040518082805190602001908083835b6020831062001a085780518252601f199092019160209182019101620019e7565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208282019790975281840196909652825180820384018152606090910192839052805190959294508493509185019190508083835b6020831062001a845780518252601f19909201916020918201910162001a63565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912098975050505050505050565b60607f300000000000000000000000000000000000000000000000000000000000000081600960ff8516111562001b14577f600000000000000000000000000000000000000000000000000000000000000091506009840393505b6040805160018082528183019092529060208083019080388339019050509050837f010000000000000000000000000000000000000000000000000000000000000002821781600081518110151562001b6957fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053509392505050565b60405161190d8062001bb283390190560060806040523480156200001157600080fd5b50604080516c0100000000000000000000000033028152815190819003601401812060008181526001602081815285832060028101859055818601909652818552918390529081905290926200006992909162000106565b506000818152600160208181526040808420830183905560029091527fe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e0805480840182559084527f7fef4bf8f63cf9dd467136c679c02b5c17fcf6322d9562512bf5eb952cf7cc5301849055519091829184917f480000bb1edad8ca1470381cc334b1917fbd51c6531f3a623ea8e0ec7e38a6e991a45062000176565b82805482825590600052602060002090810192821562000144579160200282015b828111156200014457825182559160200191906001019062000127565b506200015292915062000156565b5090565b6200017391905b808211156200015257600081556001016200015d565b90565b61178780620001866000396000f3006080604052600436106100fb5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663032c1a8a81146100fd578063058b316c1461016557806312065fe01461018c57806312aaac70146101a15780631d3812401461021a5780633aecd0e31461024c5780633ccfd60b1461026d57806349df728c1461028257806349f9c0e4146102a357806353d413c5146102c7578063747442d3146102e257806375e5598c146102ff5780639010f726146103145780639e140cc81461032c578063a64b6e5f14610341578063b61d27f61461036b578063c6702187146103d4578063d202158d146103e9575b005b34801561010957600080fd5b50610115600435610404565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610151578181015183820152602001610139565b505050509050019250505060405180910390f35b34801561017157600080fd5b5061017a610466565b60408051918252519081900360200190f35b34801561019857600080fd5b5061017a61046b565b3480156101ad57600080fd5b506101b9600435610471565b60408051602080820185905291810183905260608082528551908201528451909182916080830191878101910280838360005b838110156102045781810151838201526020016101ec565b5050505090500194505050505060405180910390f35b34801561022657600080fd5b506102386004356024356044356104ea565b604080519115158252519081900360200190f35b34801561025857600080fd5b5061017a600160a060020a036004351661062b565b34801561027957600080fd5b506100fb6106c1565b34801561028e57600080fd5b506100fb600160a060020a0360043516610761565b3480156102af57600080fd5b506100fb600435600160a060020a0360243516610920565b3480156102d357600080fd5b50610238600435602435610aa5565b3480156102ee57600080fd5b506102386004356024351515610e41565b34801561030b57600080fd5b5061017a6111c2565b34801561032057600080fd5b506101156004356111c7565b34801561033857600080fd5b5061017a611229565b34801561034d57600080fd5b506100fb600160a060020a036004358116906024351660443561122e565b34801561037757600080fd5b50604080516020600460443581810135601f810184900484028501840190955284845261017a948235600160a060020a03169460248035953695946064949201919081908401838280828437509497506114239650505050505050565b3480156103e057600080fd5b5061017a6115ee565b3480156103f557600080fd5b506102386004356024356115f3565b60008181526001602090815260409182902080548351818402810184019094528084526060939283018282801561045a57602002820191906000526020600020905b815481526020019060010190808311610446575b50505050509050919050565b600181565b30315b90565b6000818152600160208181526040808420928301546002840154845483518186028101860190945280845260609695869590949185918301828280156104d657602002820191906000526020600020905b8154815260200190600101908083116104c2575b505050505092509250925092509193909250565b604080516c010000000000000000000000003302815290519081900360140190206000906105199060016115f3565b1515610595576040805160e560020a62461bcd02815260206004820152602360248201527f53656e64657220646f6573206e6f742068617665206d616e6167656d656e742060448201527f6b65790000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b61059f84846115f3565b156105ac57506001610624565b600084815260016020818152604080842060028082018a905581548086018355828752848720018990559084018790558785528252808420805493840181558452908320909101869055518391859187917f480000bb1edad8ca1470381cc334b1917fbd51c6531f3a623ea8e0ec7e38a6e991a45060015b9392505050565b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051600091600160a060020a038416916370a082319160248082019260209290919082900301818787803b15801561068f57600080fd5b505af11580156106a3573d6000803e3d6000fd5b505050506040513d60208110156106b957600080fd5b505192915050565b604080516c010000000000000000000000003302815290519081900360140190206106ed90600b6115f3565b1515610731576040805160e560020a62461bcd02815260206004820152601e602482015260008051602061173c833981519152604482015290519081900360640190fd5b6040513390303180156108fc02916000818181858888f1935050505015801561075e573d6000803e3d6000fd5b50565b604080516c01000000000000000000000000330281529051908190036014019020600090819061079290600b6115f3565b15156107d6576040805160e560020a62461bcd02815260206004820152601e602482015260008051602061173c833981519152604482015290519081900360640190fd5b600160a060020a03831615156107eb57600080fd5b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051849350600160a060020a038416916370a082319160248083019260209291908290030181600087803b15801561084f57600080fd5b505af1158015610863573d6000803e3d6000fd5b505050506040513d602081101561087957600080fd5b5051604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018390529051919250600160a060020a0384169163a9059cbb916044808201926020929091908290030181600087803b1580156108e757600080fd5b505af11580156108fb573d6000803e3d6000fd5b505050506040513d602081101561091157600080fd5b5051151561091b57fe5b505050565b604080516c0100000000000000000000000033028152905190819003601401902061094c90600b6115f3565b1515610990576040805160e560020a62461bcd02815260206004820152601e602482015260008051602061173c833981519152604482015290519081900360640190fd5b3031821115610a0f576040805160e560020a62461bcd02815260206004820152603860248201527f416d6f756e742073686f756c64206265206c657373207468616e20746f74616c60448201527f2062616c616e6365206f662074686520636f6e74726163740000000000000000606482015290519081900360840190fd5b600160a060020a0381161515610a6f576040805160e560020a62461bcd02815260206004820152601560248201527f6d7573742062652076616c696420616464726573730000000000000000000000604482015290519081900360640190fd5b604051600160a060020a0382169083156108fc029084906000818181858888f1935050505015801561091b573d6000803e3d6000fd5b600080600080600080610aef336040518082600160a060020a0316600160a060020a03166c01000000000000000000000000028152601401915050604051809103902060016115f3565b1515610b6b576040805160e560020a62461bcd02815260206004820152602360248201527f53656e64657220646f6573206e6f742068617665206d616e6167656d656e742060448201527f6b65790000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6000888152600160205260409020600201548814610bd3576040805160e560020a62461bcd02815260206004820152600b60248201527f4e6f2073756368206b6579000000000000000000000000000000000000000000604482015290519081900360640190fd5b610bdd88886115f3565b1515610bec5760009550610e36565b6000888152600160205260408120549550600019945092505b84831015610c4e576000888152600160205260409020805488919085908110610c2a57fe5b90600052602060002001541415610c4357829350610c4e565b600190920191610c05565b6000198414610cf757600088815260016020526040902080546000198701908110610c7557fe5b60009182526020808320909101548a835260019091526040909120805486908110610c9c57fe5b600091825260208083209091019290925589815260019091526040902080546000198701908110610cc957fe5b600091825260208083209091018290558982526001905260409020805490610cf590600019830161167f565b505b5050600085815260026020526040812054905b81811015610df1576000878152600260205260409020805489919083908110610d2f57fe5b6000918252602090912001541415610de957600087815260026020526040902080546000198401908110610d5f57fe5b90600052602060002001546002600089815260200190815260200160002082815481101515610d8a57fe5b600091825260208083209091019290925588815260029091526040902080546000198401908110610db757fe5b600091825260208083209091018290558882526002905260409020805490610de390600019830161167f565b50610df1565b600101610d0a565b6000888152600160208190526040808320909101549051909189918b917f585a4aef50f8267a92b32412b331b20f7f8b96f2245b253b9cc50dcc621d339791a4600195505b505050505092915050565b604080516c01000000000000000000000000330281529051908190036014019020600090610e709060026115f3565b1515610ec6576040805160e560020a62461bcd02815260206004820152601f60248201527f53656e64657220646f6573206e6f74206861766520616374696f6e206b657900604482015290519081900360640190fd5b604080518315158152905184917fb3932da477fe5d6c8ff2eafef050c0f3a1af18fc07121001482600f36f3715d8919081900360200190a26001821515141561119e576000838152600360208190526040808320918201805460ff191660019081179091558254915160029384018054600160a060020a03909416959094909391928392869260001992821615610100029290920116048015610faa5780601f10610f7f57610100808354040283529160200191610faa565b820191906000526020600020905b815481529060010190602001808311610f8d57829003601f168201915b50508260ff168152602001925050506000604051808303816000865af1915050905080156110bf57600083815260036020818152604092839020918201805461010061ff00199091168117909155600180840154845486518581526002968701805494851615909502600019019093169590950493820184905294600160a060020a039094169388937f1f920dbda597d7bf95035464170fa58d0a4b57f13a1c315ace6793b9f63688b8939291829190820190849080156110ac5780601f10611081576101008083540402835291602001916110ac565b820191906000526020600020905b81548152906001019060200180831161108f57829003601f168201915b50509250505060405180910390a4611199565b6000838152600360209081526040918290206001808201548254855185815260029485018054600019958116156101000295909501909416949094049484018590529094600160a060020a039091169388937fe10c49d9f7c71da23262367013434763cfdb2332267641728d25cd712c5c6a689392909182918201908490801561118a5780601f1061115f5761010080835404028352916020019161118a565b820191906000526020600020905b81548152906001019060200180831161116d57829003601f168201915b50509250505060405180910390a45b6111bc565b600083815260036020819052604090912001805460ff191690555060015b92915050565b600281565b60008181526002602090815260409182902080548351818402810184019094528084526060939283018282801561045a57602002820191906000526020600020905b815481526001909101906020018083116112095750505050509050919050565b600481565b604080516c01000000000000000000000000330281529051908190036014019020600090819061125f90600b6115f3565b15156112a3576040805160e560020a62461bcd02815260206004820152601e602482015260008051602061173c833981519152604482015290519081900360640190fd5b600160a060020a03851615156112b857600080fd5b600160a060020a03841615156112cd57600080fd5b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051869350600160a060020a038416916370a082319160248083019260209291908290030181600087803b15801561133157600080fd5b505af1158015611345573d6000803e3d6000fd5b505050506040513d602081101561135b57600080fd5b505190508083111561136c57600080fd5b81600160a060020a031663a9059cbb85856040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b1580156113e857600080fd5b505af11580156113fc573d6000803e3d6000fd5b505050506040513d602081101561141257600080fd5b5051151561141c57fe5b5050505050565b60008054815260036020819052604082200154610100900460ff1615611493576040805160e560020a62461bcd02815260206004820152601060248201527f416c726561647920657865637574656400000000000000000000000000000000604482015290519081900360640190fd5b600080548152600360209081526040808320805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a038916179055825483528083206001018690558254835290912083516114f3926002909201918501906116a3565b508284600160a060020a03166000547f8afcfabcb00e47a53a8fc3e9f23ff47ee1926194bb1350dd007c50b412a6cee8856040518080602001828103825283818151815260200191508051906020019080838360005b83811015611561578181015183820152602001611549565b50505050905090810190601f16801561158e5780820380516001836020036101000a031916815260200191505b509250505060405180910390a4604080516c010000000000000000000000003302815290519081900360140190206115c79060026115f3565b156115db576115d96000546001610e41565b505b5060008054600181019091559392505050565b600381565b6000828152600160205260408120600201548190819015156116185760009250611677565b5050600083815260016020526040812054905b8181101561167257600085815260016020526040902080548591908390811061165057fe5b9060005260206000200154141561166a5760019250611677565b60010161162b565b600092505b505092915050565b81548183558181111561091b5760008381526020902061091b918101908301611721565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106116e457805160ff1916838001178555611711565b82800160010185558215611711579182015b828111156117115782518255916020019190600101906116f6565b5061171d929150611721565b5090565b61046e91905b8082111561171d5760008155600101611727560053656e64657220646f6573206e6f7420686176652066756e6473206b65790000a165627a7a7230582020d5a79b2254964de92a1f7bc9607f8356c0d458c903e73678376ed79440e5550029a165627a7a723058202d3b04bc67c7c95af2fb8d93d74ec1c68207c2065fe678e738dafa4b9576daba0029

Deployed Bytecode

0x6080604052600436106200007d5763ffffffff60e060020a600035041663086bb51c81146200008257806314cd826c14620001a95780637bcaf58514620002bc5780639ee2b70214620003cc578063affed0e0146200045f578063d32b1bea1462000489578063db4ad99f14620004ad578063e334f32e14620005af575b600080fd5b3480156200008f57600080fd5b50604080516020600460843581810135601f810184900484028501840190955284845262000195948235600160a060020a0390811695602480358316966044359660643590941695369560a4949390910191819084018382808284375050604080516020601f818a01358b0180359182018390048302840183018552818452989b63ffffffff8b35169b909a90999401975091955091820193509150819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a999881019791965091820194509250829150840183828082843750949750508435955050506020830135926040013560ff1691506200060b9050565b604080519115158252519081900360200190f35b348015620001b657600080fd5b50604080516020600460843581810135601f810184900484028501840190955284845262000195948235600160a060020a0390811695602480358316966044359660643590941695369560a4949390910191819084018382808284375050604080516020601f818a01358b0180359182018390048302840183018552818452989b63ffffffff8b35169b909a90999401975091955091820193509150819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a999881019791965091820194509250829150840183828082843750949750508435955050506020830135926040013560ff16915062000bb69050565b348015620002c957600080fd5b506040805160206004803580820135601f8101849004840285018401909552848452620003b094369492936024939284019190819084018382808284375050604080516020601f818a01358b0180359182018390048302840183018552818452989b63ffffffff8b35169b909a90999401975091955091820193509150819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a999881019791965091820194509250829150840183828082843750949750508435955050506020830135926040013560ff169150620011589050565b60408051600160a060020a039092168252519081900360200190f35b348015620003d957600080fd5b50620003e7600435620011de565b6040805160208082528351818301528351919283929083019185019080838360005b838110156200042357818101518382015260200162000409565b50505050905090810190601f168015620004515780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156200046c57600080fd5b506200047762001359565b60408051918252519081900360200190f35b3480156200049657600080fd5b50620003e7600160a060020a03600435166200135f565b348015620004ba57600080fd5b5060408051602060046024803582810135601f8101859004850286018501909652858552620003b0958335600160a060020a031695369560449491939091019190819084018382808284375050604080516020601f818a01358b0180359182018390048302840183018552818452989b63ffffffff8b35169b909a90999401975091955091820193509150819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a999881019791965091820194509250829150840183828082843750949750508435955050506020830135926040013560ff169150620015169050565b348015620005bc57600080fd5b506040805160206004803580820135601f8101849004840285018401909552848452620003e7943694929360249392840191908190840183828082843750949750620017209650505050505050565b60008054600101808255819063ffffffff891690811462000676576040805160e560020a62461bcd02815260206004820152600b60248201527f57726f6e67206e6f6e6365000000000000000000000000000000000000000000604482015290519081900360640190fd5b620006888b8b8b8b8b8b8b8b62001792565b15156200069457600080fd5b6200069f8a62001720565b6040518082805190602001908083835b60208310620006d05780518252601f199092019160209182019101620006af565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020600019166200070c8f6200135f565b620007178f6200135f565b620007228f620011de565b60405160200180807f416464203078000000000000000000000000000000000000000000000000000081525060060184805190602001908083835b602083106200077e5780518252601f1990920191602091820191016200075d565b51815160209384036101000a60001901801990921691161790527f20746f2030780000000000000000000000000000000000000000000000000000919093019081528551600690910192860191508083835b60208310620007f15780518252601f199092019160209182019101620007d0565b51815160209384036101000a60001901801990921691161790527f207769746820707572706f736520000000000000000000000000000000000000919093019081528451600e90910192850191508083835b60208310620008645780518252601f19909201916020918201910162000843565b6001836020036101000a03801982511681845116808217855250505050505090500193505050506040516020818303038152906040526040518082805190602001908083835b60208310620008cb5780518252601f199092019160209182019101620008aa565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206000191614151562000954576040805160e560020a62461bcd02815260206004820152601160248201527f4d65737361676520696e636f7272656374000000000000000000000000000000604482015290519081900360640190fd5b8c915081600160a060020a031663d202158d8c6040518082600160a060020a0316600160a060020a03166c01000000000000000000000000028152601401915050604051809103902084600160a060020a031663058b316c6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015620009dc57600080fd5b505af1158015620009f1573d6000803e3d6000fd5b505050506040513d602081101562000a0857600080fd5b50516040805160e060020a63ffffffff8616028152600481019390935260248301919091525160448083019260209291908290030181600087803b15801562000a5057600080fd5b505af115801562000a65573d6000803e3d6000fd5b505050506040513d602081101562000a7c57600080fd5b5051151562000a8a57600080fd5b81600160a060020a0316631d3812408f6040518082600160a060020a0316600160a060020a03166c0100000000000000000000000002815260140191505060405180910390208e60016040518463ffffffff1660e060020a0281526004018084600019166000191681526020018381526020018281526020019350505050602060405180830381600087803b15801562000b2357600080fd5b505af115801562000b38573d6000803e3d6000fd5b505050506040513d602081101562000b4f57600080fd5b8101908080519060200190929190505050508b8e600160a060020a03168e600160a060020a03167f1e7adf4c5e17188fcee9914769709147e1497bb7aa63ba52063c01810d75fce460405160405180910390a45060019d9c50505050505050505050505050565b60008054600101808255819063ffffffff891690811462000c21576040805160e560020a62461bcd02815260206004820152600b60248201527f57726f6e67206e6f6e6365000000000000000000000000000000000000000000604482015290519081900360640190fd5b62000c338b8b8b8b8b8b8b8b62001792565b151562000c3f57600080fd5b62000c4a8a62001720565b6040518082805190602001908083835b6020831062000c7b5780518252601f19909201916020918201910162000c5a565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206000191662000cb78f6200135f565b62000cc28f6200135f565b62000ccd8f620011de565b60405160200180807f52656d6f7665203078000000000000000000000000000000000000000000000081525060090184805190602001908083835b6020831062000d295780518252601f19909201916020918201910162000d08565b51815160209384036101000a60001901801990921691161790527f2066726f6d203078000000000000000000000000000000000000000000000000919093019081528551600890910192860191508083835b6020831062000d9c5780518252601f19909201916020918201910162000d7b565b51815160209384036101000a60001901801990921691161790527f207769746820707572706f736520000000000000000000000000000000000000919093019081528451600e90910192850191508083835b6020831062000e0f5780518252601f19909201916020918201910162000dee565b6001836020036101000a03801982511681845116808217855250505050505090500193505050506040516020818303038152906040526040518082805190602001908083835b6020831062000e765780518252601f19909201916020918201910162000e55565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206000191614151562000eff576040805160e560020a62461bcd02815260206004820152601160248201527f4d65737361676520696e636f7272656374000000000000000000000000000000604482015290519081900360640190fd5b8c915081600160a060020a031663d202158d8c6040518082600160a060020a0316600160a060020a03166c01000000000000000000000000028152601401915050604051809103902084600160a060020a031663058b316c6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801562000f8757600080fd5b505af115801562000f9c573d6000803e3d6000fd5b505050506040513d602081101562000fb357600080fd5b50516040805160e060020a63ffffffff8616028152600481019390935260248301919091525160448083019260209291908290030181600087803b15801562000ffb57600080fd5b505af115801562001010573d6000803e3d6000fd5b505050506040513d60208110156200102757600080fd5b505115156200103557600080fd5b81600160a060020a03166353d413c58f6040518082600160a060020a0316600160a060020a03166c0100000000000000000000000002815260140191505060405180910390208e6040518363ffffffff1660e060020a02815260040180836000191660001916815260200182815260200192505050602060405180830381600087803b158015620010c557600080fd5b505af1158015620010da573d6000803e3d6000fd5b505050506040513d6020811015620010f157600080fd5b8101908080519060200190929190505050508b8e600160a060020a03168e600160a060020a03167fbdd975f83fe1ced355e069b198d89e3acb2bc1e42a13c6952ae8bf8ff52b00dd60405160405180910390a45060019d9c50505050505050505050505050565b600080620011698989898962001843565b604080516000808252602080830180855285905260ff881683850152606083018a905260808301899052925193945060019360a08084019493601f19830193908390039091019190865af1158015620011c6573d6000803e3d6000fd5b5050604051601f1901519a9950505050505050505050565b60608060008315156200126757620011f7600062001ab9565b6040516020018082805190602001908083835b602083106200122b5780518252601f1990920191602091820191016200120a565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052925062001352565b50825b60008111156200134e5762001282600a820662001ab9565b826040516020018083805190602001908083835b60208310620012b75780518252601f19909201916020918201910162001296565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b60208310620013015780518252601f199092019160209182019101620012e0565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529150600a818115156200134557fe5b0490506200126a565b8192505b5050919050565b60005481565b606060008080805b60148410156200150d578360130360080260020a86600160a060020a03168115156200138f57fe5b047f0100000000000000000000000000000000000000000000000000000000000000908102935060107fff0000000000000000000000000000000000000000000000000000000000000085160481900492508304600f16905084620013f48362001ab9565b620013ff8362001ab9565b6040516020018084805190602001908083835b60208310620014335780518252601f19909201916020918201910162001412565b51815160209384036101000a600019018019909216911617905286519190930192860191508083835b602083106200147d5780518252601f1990920191602091820191016200145c565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b60208310620014c75780518252601f199092019160209182019101620014a6565b6001836020036101000a03801982511681845116808217855250505050505090500193505050506040516020818303038152906040529450838060010194505062001367565b50505050919050565b6000806200152b8a8a8a8a8a8a8a8a62001792565b151562001582576040805160e560020a62461bcd02815260206004820152601d60248201527f55736572205369676e617475726520646f6573206e6f74206d61746368000000604482015290519081900360640190fd5b6200158c62001ba0565b604051809103906000f080158015620015a9573d6000803e3d6000fd5b50905080600160a060020a0316631d3812408b6040518082600160a060020a0316600160a060020a03166c01000000000000000000000000028152601401915050604051809103902083600160a060020a031663058b316c6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156200163157600080fd5b505af115801562001646573d6000803e3d6000fd5b505050506040513d60208110156200165d57600080fd5b50516040805160e060020a63ffffffff861602815260048101939093526024830191909152600160448301525160648083019260209291908290030181600087803b158015620016ac57600080fd5b505af1158015620016c1573d6000803e3d6000fd5b505050506040513d6020811015620016d857600080fd5b5050604051600160a060020a0380831691908c16907f79f95559c16c7a61f15bd5812ebd7d8071b4774e1cf7a5c5ea7b7f9aaca051b090600090a39998505050505050505050565b6060816040516020018082805190602001908083835b60208310620017575780518252601f19909201916020918201910162001736565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040529050919050565b600088600160a060020a0316620017af8989898989898962001158565b600160a060020a03161462001834576040805160e560020a62461bcd02815260206004820152603160248201527f55736572207369676e6174757265206d757374206265207468652073616d652060448201527f6173207369676e6564206d657373616765000000000000000000000000000000606482015290519081900360840190fd5b50600198975050505050505050565b600082826040516020018083805190602001908083835b602083106200187b5780518252601f1990920191602091820191016200185a565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b60208310620018c55780518252601f199092019160209182019101620018a4565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040526040518082805190602001908083835b602083106200192b5780518252601f1990920191602091820191016200190a565b51815160209384036101000a60001901801990921691161790526040519190930181900381208a519095508a94508993918201925082918501908083835b602083106200198a5780518252601f19909201916020918201910162001969565b6001836020036101000a0380198251168184511680821785525050505050509050018263ffffffff1663ffffffff1660e060020a028152600401925050506040516020818303038152906040526040518082805190602001908083835b6020831062001a085780518252601f199092019160209182019101620019e7565b51815160209384036101000a6000190180199092169116179052604080519290940182900382208282019790975281840196909652825180820384018152606090910192839052805190959294508493509185019190508083835b6020831062001a845780518252601f19909201916020918201910162001a63565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912098975050505050505050565b60607f300000000000000000000000000000000000000000000000000000000000000081600960ff8516111562001b14577f600000000000000000000000000000000000000000000000000000000000000091506009840393505b6040805160018082528183019092529060208083019080388339019050509050837f010000000000000000000000000000000000000000000000000000000000000002821781600081518110151562001b6957fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053509392505050565b60405161190d8062001bb283390190560060806040523480156200001157600080fd5b50604080516c0100000000000000000000000033028152815190819003601401812060008181526001602081815285832060028101859055818601909652818552918390529081905290926200006992909162000106565b506000818152600160208181526040808420830183905560029091527fe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e0805480840182559084527f7fef4bf8f63cf9dd467136c679c02b5c17fcf6322d9562512bf5eb952cf7cc5301849055519091829184917f480000bb1edad8ca1470381cc334b1917fbd51c6531f3a623ea8e0ec7e38a6e991a45062000176565b82805482825590600052602060002090810192821562000144579160200282015b828111156200014457825182559160200191906001019062000127565b506200015292915062000156565b5090565b6200017391905b808211156200015257600081556001016200015d565b90565b61178780620001866000396000f3006080604052600436106100fb5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663032c1a8a81146100fd578063058b316c1461016557806312065fe01461018c57806312aaac70146101a15780631d3812401461021a5780633aecd0e31461024c5780633ccfd60b1461026d57806349df728c1461028257806349f9c0e4146102a357806353d413c5146102c7578063747442d3146102e257806375e5598c146102ff5780639010f726146103145780639e140cc81461032c578063a64b6e5f14610341578063b61d27f61461036b578063c6702187146103d4578063d202158d146103e9575b005b34801561010957600080fd5b50610115600435610404565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610151578181015183820152602001610139565b505050509050019250505060405180910390f35b34801561017157600080fd5b5061017a610466565b60408051918252519081900360200190f35b34801561019857600080fd5b5061017a61046b565b3480156101ad57600080fd5b506101b9600435610471565b60408051602080820185905291810183905260608082528551908201528451909182916080830191878101910280838360005b838110156102045781810151838201526020016101ec565b5050505090500194505050505060405180910390f35b34801561022657600080fd5b506102386004356024356044356104ea565b604080519115158252519081900360200190f35b34801561025857600080fd5b5061017a600160a060020a036004351661062b565b34801561027957600080fd5b506100fb6106c1565b34801561028e57600080fd5b506100fb600160a060020a0360043516610761565b3480156102af57600080fd5b506100fb600435600160a060020a0360243516610920565b3480156102d357600080fd5b50610238600435602435610aa5565b3480156102ee57600080fd5b506102386004356024351515610e41565b34801561030b57600080fd5b5061017a6111c2565b34801561032057600080fd5b506101156004356111c7565b34801561033857600080fd5b5061017a611229565b34801561034d57600080fd5b506100fb600160a060020a036004358116906024351660443561122e565b34801561037757600080fd5b50604080516020600460443581810135601f810184900484028501840190955284845261017a948235600160a060020a03169460248035953695946064949201919081908401838280828437509497506114239650505050505050565b3480156103e057600080fd5b5061017a6115ee565b3480156103f557600080fd5b506102386004356024356115f3565b60008181526001602090815260409182902080548351818402810184019094528084526060939283018282801561045a57602002820191906000526020600020905b815481526020019060010190808311610446575b50505050509050919050565b600181565b30315b90565b6000818152600160208181526040808420928301546002840154845483518186028101860190945280845260609695869590949185918301828280156104d657602002820191906000526020600020905b8154815260200190600101908083116104c2575b505050505092509250925092509193909250565b604080516c010000000000000000000000003302815290519081900360140190206000906105199060016115f3565b1515610595576040805160e560020a62461bcd02815260206004820152602360248201527f53656e64657220646f6573206e6f742068617665206d616e6167656d656e742060448201527f6b65790000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b61059f84846115f3565b156105ac57506001610624565b600084815260016020818152604080842060028082018a905581548086018355828752848720018990559084018790558785528252808420805493840181558452908320909101869055518391859187917f480000bb1edad8ca1470381cc334b1917fbd51c6531f3a623ea8e0ec7e38a6e991a45060015b9392505050565b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051600091600160a060020a038416916370a082319160248082019260209290919082900301818787803b15801561068f57600080fd5b505af11580156106a3573d6000803e3d6000fd5b505050506040513d60208110156106b957600080fd5b505192915050565b604080516c010000000000000000000000003302815290519081900360140190206106ed90600b6115f3565b1515610731576040805160e560020a62461bcd02815260206004820152601e602482015260008051602061173c833981519152604482015290519081900360640190fd5b6040513390303180156108fc02916000818181858888f1935050505015801561075e573d6000803e3d6000fd5b50565b604080516c01000000000000000000000000330281529051908190036014019020600090819061079290600b6115f3565b15156107d6576040805160e560020a62461bcd02815260206004820152601e602482015260008051602061173c833981519152604482015290519081900360640190fd5b600160a060020a03831615156107eb57600080fd5b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051849350600160a060020a038416916370a082319160248083019260209291908290030181600087803b15801561084f57600080fd5b505af1158015610863573d6000803e3d6000fd5b505050506040513d602081101561087957600080fd5b5051604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018390529051919250600160a060020a0384169163a9059cbb916044808201926020929091908290030181600087803b1580156108e757600080fd5b505af11580156108fb573d6000803e3d6000fd5b505050506040513d602081101561091157600080fd5b5051151561091b57fe5b505050565b604080516c0100000000000000000000000033028152905190819003601401902061094c90600b6115f3565b1515610990576040805160e560020a62461bcd02815260206004820152601e602482015260008051602061173c833981519152604482015290519081900360640190fd5b3031821115610a0f576040805160e560020a62461bcd02815260206004820152603860248201527f416d6f756e742073686f756c64206265206c657373207468616e20746f74616c60448201527f2062616c616e6365206f662074686520636f6e74726163740000000000000000606482015290519081900360840190fd5b600160a060020a0381161515610a6f576040805160e560020a62461bcd02815260206004820152601560248201527f6d7573742062652076616c696420616464726573730000000000000000000000604482015290519081900360640190fd5b604051600160a060020a0382169083156108fc029084906000818181858888f1935050505015801561091b573d6000803e3d6000fd5b600080600080600080610aef336040518082600160a060020a0316600160a060020a03166c01000000000000000000000000028152601401915050604051809103902060016115f3565b1515610b6b576040805160e560020a62461bcd02815260206004820152602360248201527f53656e64657220646f6573206e6f742068617665206d616e6167656d656e742060448201527f6b65790000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6000888152600160205260409020600201548814610bd3576040805160e560020a62461bcd02815260206004820152600b60248201527f4e6f2073756368206b6579000000000000000000000000000000000000000000604482015290519081900360640190fd5b610bdd88886115f3565b1515610bec5760009550610e36565b6000888152600160205260408120549550600019945092505b84831015610c4e576000888152600160205260409020805488919085908110610c2a57fe5b90600052602060002001541415610c4357829350610c4e565b600190920191610c05565b6000198414610cf757600088815260016020526040902080546000198701908110610c7557fe5b60009182526020808320909101548a835260019091526040909120805486908110610c9c57fe5b600091825260208083209091019290925589815260019091526040902080546000198701908110610cc957fe5b600091825260208083209091018290558982526001905260409020805490610cf590600019830161167f565b505b5050600085815260026020526040812054905b81811015610df1576000878152600260205260409020805489919083908110610d2f57fe5b6000918252602090912001541415610de957600087815260026020526040902080546000198401908110610d5f57fe5b90600052602060002001546002600089815260200190815260200160002082815481101515610d8a57fe5b600091825260208083209091019290925588815260029091526040902080546000198401908110610db757fe5b600091825260208083209091018290558882526002905260409020805490610de390600019830161167f565b50610df1565b600101610d0a565b6000888152600160208190526040808320909101549051909189918b917f585a4aef50f8267a92b32412b331b20f7f8b96f2245b253b9cc50dcc621d339791a4600195505b505050505092915050565b604080516c01000000000000000000000000330281529051908190036014019020600090610e709060026115f3565b1515610ec6576040805160e560020a62461bcd02815260206004820152601f60248201527f53656e64657220646f6573206e6f74206861766520616374696f6e206b657900604482015290519081900360640190fd5b604080518315158152905184917fb3932da477fe5d6c8ff2eafef050c0f3a1af18fc07121001482600f36f3715d8919081900360200190a26001821515141561119e576000838152600360208190526040808320918201805460ff191660019081179091558254915160029384018054600160a060020a03909416959094909391928392869260001992821615610100029290920116048015610faa5780601f10610f7f57610100808354040283529160200191610faa565b820191906000526020600020905b815481529060010190602001808311610f8d57829003601f168201915b50508260ff168152602001925050506000604051808303816000865af1915050905080156110bf57600083815260036020818152604092839020918201805461010061ff00199091168117909155600180840154845486518581526002968701805494851615909502600019019093169590950493820184905294600160a060020a039094169388937f1f920dbda597d7bf95035464170fa58d0a4b57f13a1c315ace6793b9f63688b8939291829190820190849080156110ac5780601f10611081576101008083540402835291602001916110ac565b820191906000526020600020905b81548152906001019060200180831161108f57829003601f168201915b50509250505060405180910390a4611199565b6000838152600360209081526040918290206001808201548254855185815260029485018054600019958116156101000295909501909416949094049484018590529094600160a060020a039091169388937fe10c49d9f7c71da23262367013434763cfdb2332267641728d25cd712c5c6a689392909182918201908490801561118a5780601f1061115f5761010080835404028352916020019161118a565b820191906000526020600020905b81548152906001019060200180831161116d57829003601f168201915b50509250505060405180910390a45b6111bc565b600083815260036020819052604090912001805460ff191690555060015b92915050565b600281565b60008181526002602090815260409182902080548351818402810184019094528084526060939283018282801561045a57602002820191906000526020600020905b815481526001909101906020018083116112095750505050509050919050565b600481565b604080516c01000000000000000000000000330281529051908190036014019020600090819061125f90600b6115f3565b15156112a3576040805160e560020a62461bcd02815260206004820152601e602482015260008051602061173c833981519152604482015290519081900360640190fd5b600160a060020a03851615156112b857600080fd5b600160a060020a03841615156112cd57600080fd5b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051869350600160a060020a038416916370a082319160248083019260209291908290030181600087803b15801561133157600080fd5b505af1158015611345573d6000803e3d6000fd5b505050506040513d602081101561135b57600080fd5b505190508083111561136c57600080fd5b81600160a060020a031663a9059cbb85856040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b1580156113e857600080fd5b505af11580156113fc573d6000803e3d6000fd5b505050506040513d602081101561141257600080fd5b5051151561141c57fe5b5050505050565b60008054815260036020819052604082200154610100900460ff1615611493576040805160e560020a62461bcd02815260206004820152601060248201527f416c726561647920657865637574656400000000000000000000000000000000604482015290519081900360640190fd5b600080548152600360209081526040808320805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a038916179055825483528083206001018690558254835290912083516114f3926002909201918501906116a3565b508284600160a060020a03166000547f8afcfabcb00e47a53a8fc3e9f23ff47ee1926194bb1350dd007c50b412a6cee8856040518080602001828103825283818151815260200191508051906020019080838360005b83811015611561578181015183820152602001611549565b50505050905090810190601f16801561158e5780820380516001836020036101000a031916815260200191505b509250505060405180910390a4604080516c010000000000000000000000003302815290519081900360140190206115c79060026115f3565b156115db576115d96000546001610e41565b505b5060008054600181019091559392505050565b600381565b6000828152600160205260408120600201548190819015156116185760009250611677565b5050600083815260016020526040812054905b8181101561167257600085815260016020526040902080548591908390811061165057fe5b9060005260206000200154141561166a5760019250611677565b60010161162b565b600092505b505092915050565b81548183558181111561091b5760008381526020902061091b918101908301611721565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106116e457805160ff1916838001178555611711565b82800160010185558215611711579182015b828111156117115782518255916020019190600101906116f6565b5061171d929150611721565b5090565b61046e91905b8082111561171d5760008155600101611727560053656e64657220646f6573206e6f7420686176652066756e6473206b65790000a165627a7a7230582020d5a79b2254964de92a1f7bc9607f8356c0d458c903e73678376ed79440e5550029a165627a7a723058202d3b04bc67c7c95af2fb8d93d74ec1c68207c2065fe678e738dafa4b9576daba0029

Swarm Source

bzzr://2d3b04bc67c7c95af2fb8d93d74ec1c68207c2065fe678e738dafa4b9576daba

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  ]
[ 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.