Contract 0x6710c63432a2de02954fc0f851db07146a6c0312

 

TxHash Block Age From To Value [TxFee]
0x019a89e7fbcf1fa14bce1f87a400330d77fdb758c4fa51c788e7857045f8063f724796710 hrs 10 mins ago0xc23f0d6f051fda060a4cb9e8734b585cb4a32307 IN  SyncFab0 Ether0.00072475
0x4aa64fe4690ebdf2d4428aa3a0c003c3e2977460b250608bd5fe387e128e48b7724758912 hrs 11 mins ago0xf16f0a13a20b1eed9aef167c2fa6116317a3e165 IN  SyncFab0 Ether0.00174741
0x53e5483117e146e1ad7bb3f697ec407515904fb5e08f8b726035fa6724ee544972426211 day 16 hrs ago0x563ff73b2c5db0f1b74e67536c5924e754d03c6f IN  SyncFab0 Ether0.00055622
0x06b7b0c2ac52c204ca3cde2baed96debf60d39807318bf93753af39d5f168d9872415791 day 22 hrs ago0xe17ee7b3c676701c66b395a35f0df4c2276a344e IN  SyncFab0 Ether0.00042811
0xcef2179219f8625c135ac0a44c94d8f69b63da3b0b349d02096f10c57eeef2df72408132 days 2 hrs ago0x59412e662ebaf2756931ef6e5fdb64b790652ada IN  SyncFab0 Ether0.002540088
0x4e4b881dfc1f7a7c32923a43d4d2eafe7e0ea62513683dac11ecf74a65bca7eb72392732 days 11 hrs ago0x2a4d95bc49566b905a78dbdff2d79aa42c5ee7af IN  SyncFab0 Ether0.00091585
0x126333022311037cbf96aaecf36c588c2e5fe0009198af426b1b46100cf4f3a772382322 days 16 hrs ago0x1b957ceeeb40ff49fe8f7b34acbcf9fc954a6e9f IN  SyncFab0 Ether0.00055622
0x82ee4defe8cfcc3c42683235141d365f48d4b2797b9a51d8308f7a12fda74ff272382282 days 16 hrs ago0x0d5d3c75149e48c6a7e6d99c865f92be9fd19495 IN  SyncFab0 Ether0.00055622
0x0c4d0d6472190cc7b4ab2748b481ff6e1f5a620b5783f08a5767b0e4ab917d6a72381722 days 17 hrs ago0xc94ee9e2f7898fe6c93d79c756182126f27819c9 IN  SyncFab0 Ether0.000423084
0xf3c4227eee7c101f8fd9898158dc5c10d72acac5a343aa37f2b0364d224419f772376022 days 20 hrs ago0x1f177aae0f02a521ea1610b6764e2666a9d4ca66 IN  SyncFab0 Ether0.00050175
0xc58ea5439e47fef373d64a006c5a1ed043124abcc8ea875a8d867d53f4e34b9d72374622 days 21 hrs ago0x20b402216b7ca6622376a117826b2a8f88643fc3 IN  SyncFab0 Ether0.004771006
0xf43c6b7a9bf0f636a8fa4d936662129c29bdba12fcdf5f8ad2d03f01faa9459172268755 days 10 hrs agoCobinhood_1 IN  SyncFab0 Ether0.00131302
0x0c6e99c241e574174dd4e614f046b23a4cd0671c1fa7e8147d08f051af7f193772265275 days 12 hrs ago0x52f61b2a251b5ee7d9dece9be5ba413a925afbb5 IN  SyncFab0 Ether0.000232732
0x9218121bd9ebe7a51c6fd2cf78f6a998e6b91ebe0d7727af5dc37a2ad2cffaf172239676 days 2 hrs ago0xbd272e267ee568bb621d10c8b4bfaae9982326cc IN  SyncFab0 Ether0.001128224
0x186f66719824c09ebe9a6e4dc74ebe4817dca77214fc8c0c71a728c15660067c72239546 days 2 hrs ago0x22da7352b7ac5c648e31f0c4d27fb45d864046f8 IN  SyncFab0 Ether0.001980398
0x4b59bad330f42e12c0ce0c9879a534c8ae4699a84241fbf423c7314700f54bf372221006 days 13 hrs ago0x69f7de589cfbb8dcab258a7c130aaa4ef5c8ee53 IN  SyncFab0 Ether0.00070322
0xd232f2786ad47e2f73feb4aed81e849919dd1b4a8750c47462e69ba0954e648472220796 days 13 hrs ago0xc317ed437ba777937a83252bb53c39e533138c84 IN  SyncFab0 Ether0.000776842
0xea93fa44157a38c07bab3254e002065130088a1dad18370b679d9974a0ea362072211446 days 18 hrs ago0x44e05b25115fb86f0e9861cea0bf27e50f2338bf IN  SyncFab0 Ether0.000140772
0x326ecc45fc91c9bd5b689b7e1438ef5756b7643aa005183336d7c08b1c1d52d772196067 days 3 hrs ago0x3dee4a4e076e8d82859d241db0baf46f112cfa23 IN  SyncFab0 Ether0.000632898
0xc9884278c14fd4445766934ed8aed42c0ee8dc689176ac4fbffe210c11d5eb7672194387 days 4 hrs ago0x41d793800d193616a33df49f950004561bfabc22 IN  SyncFab0 Ether0.000141244
0x4e5abcae9d3162163ed84317096d7bae980454afe9bb2f7b80ead5586a3fe32c72188487 days 8 hrs ago0x2d387422c2d3a8e51204e23a1786ac94913c23c8 IN  SyncFab0 Ether0.002892878
0x9a21a2248a1958fec005b3e11b00bd2234916c95acd905f4a83fa0e26a64748c72155808 days 3 hrs ago0x7b9c5c7584cf3e86fd5af816ced77a23fc64b29b IN  SyncFab0 Ether0.001195474
0xa64617086456b4532294e2efc4b2be96ce66855e1311f626565ce93c984325de72130218 days 17 hrs ago0x33583b78a5e75d4148f0910cdc02137fb1ad4d01 IN  SyncFab0 Ether0.000421932
0x3fae7e698b459d259457d7859bae76900c5f6cce18b11b50cab25a397a4578cf72130108 days 17 hrs ago0xf3d6d560e5b41cbf5739ad93c7b73efdff1df7b1 IN  SyncFab0 Ether0.00070622
0x0e76a6993af5070d82a8e80b005b62e5f4537e7c74a059049b3b2b9b35fd3bcf72125308 days 20 hrs ago0x785e0c144aac844c4b0f70dd9f3c78c60c94cb51 IN  SyncFab0 Ether0.00061325
[ Download CSV Export 

Latest 1 Internal Transaction Internal Transactions as a result of Contract Execution

Parent TxHash Block Age From To Value
0x148e0c66de206559e46d61da2a716995b92f2b8e34ff2a3c88eb0da9463cc07e5384263322 days 8 hrs ago0x6710c63432a2de02954fc0f851db07146a6c03120xd6dd4da491e7a4926be2f4bd4fa615510637cc670.130476762088672 Ether
[ Download CSV Export 
Warning: The compiled contract might be susceptible to ExpExponentCleanup (medium/high-severity), NestedArrayFunctionCallDecoder (medium-severity), ZeroFunctionSelector (very low-severity) Solidity Compiler Bugs.

Contract Source Code Verified (Exact Match)
Contract Name: SyncFab
Compiler Version: v0.4.15+commit.bbb8e64f
Optimization Enabled: Yes
Runs (Optimizer):  10000


Contract Source Code
pragma solidity 0.4.15;

contract RegistryICAPInterface {
    function parse(bytes32 _icap) constant returns(address, bytes32, bool);
    function institutions(bytes32 _institution) constant returns(address);
}

contract EToken2Interface {
    function registryICAP() constant returns(RegistryICAPInterface);
    function baseUnit(bytes32 _symbol) constant returns(uint8);
    function description(bytes32 _symbol) constant returns(string);
    function owner(bytes32 _symbol) constant returns(address);
    function isOwner(address _owner, bytes32 _symbol) constant returns(bool);
    function totalSupply(bytes32 _symbol) constant returns(uint);
    function balanceOf(address _holder, bytes32 _symbol) constant returns(uint);
    function isLocked(bytes32 _symbol) constant returns(bool);
    function issueAsset(bytes32 _symbol, uint _value, string _name, string _description, uint8 _baseUnit, bool _isReissuable) returns(bool);
    function reissueAsset(bytes32 _symbol, uint _value) returns(bool);
    function revokeAsset(bytes32 _symbol, uint _value) returns(bool);
    function setProxy(address _address, bytes32 _symbol) returns(bool);
    function lockAsset(bytes32 _symbol) returns(bool);
    function proxyTransferFromToICAPWithReference(address _from, bytes32 _icap, uint _value, string _reference, address _sender) returns(bool);
    function proxyApprove(address _spender, uint _value, bytes32 _symbol, address _sender) returns(bool);
    function allowance(address _from, address _spender, bytes32 _symbol) constant returns(uint);
    function proxyTransferFromWithReference(address _from, address _to, uint _value, bytes32 _symbol, string _reference, address _sender) returns(bool);
}

contract AssetInterface {
    function _performTransferWithReference(address _to, uint _value, string _reference, address _sender) returns(bool);
    function _performTransferToICAPWithReference(bytes32 _icap, uint _value, string _reference, address _sender) returns(bool);
    function _performApprove(address _spender, uint _value, address _sender) returns(bool);    
    function _performTransferFromWithReference(address _from, address _to, uint _value, string _reference, address _sender) returns(bool);
    function _performTransferFromToICAPWithReference(address _from, bytes32 _icap, uint _value, string _reference, address _sender) returns(bool);
    function _performGeneric(bytes, address) payable {
        revert();
    }
}

contract ERC20Interface {
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed from, address indexed spender, uint256 value);

    function totalSupply() constant returns(uint256 supply);
    function balanceOf(address _owner) constant returns(uint256 balance);
    function transfer(address _to, uint256 _value) returns(bool success);
    function transferFrom(address _from, address _to, uint256 _value) returns(bool success);
    function approve(address _spender, uint256 _value) returns(bool success);
    function allowance(address _owner, address _spender) constant returns(uint256 remaining);

    // function symbol() constant returns(string);
    function decimals() constant returns(uint8);
    // function name() constant returns(string);
}

contract AssetProxyInterface {
    function _forwardApprove(address _spender, uint _value, address _sender) returns(bool);
    function _forwardTransferFromWithReference(address _from, address _to, uint _value, string _reference, address _sender) returns(bool);
    function _forwardTransferFromToICAPWithReference(address _from, bytes32 _icap, uint _value, string _reference, address _sender) returns(bool);
    function balanceOf(address _owner) constant returns(uint);
}

contract Bytes32 {
    function _bytes32(string _input) internal constant returns(bytes32 result) {
        assembly {
            result := mload(add(_input, 32))
        }
    }
}

contract ReturnData {
    function _returnReturnData(bool _success) internal {
        assembly {
            let returndatastart := msize()
            mstore(0x40, add(returndatastart, returndatasize))
            returndatacopy(returndatastart, 0, returndatasize)
            switch _success case 0 { revert(returndatastart, returndatasize) } default { return(returndatastart, returndatasize) }
        }
    }

    function _assemblyCall(address _destination, uint _value, bytes _data) internal returns(bool success) {
        assembly {
            success := call(div(mul(gas, 63), 64), _destination, _value, add(_data, 32), mload(_data), 0, 0)
        }
    }
}

/**
 * @title EToken2 Asset Proxy.
 *
 * Proxy implements ERC20 interface and acts as a gateway to a single EToken2 asset.
 * Proxy adds etoken2Symbol and caller(sender) when forwarding requests to EToken2.
 * Every request that is made by caller first sent to the specific asset implementation
 * contract, which then calls back to be forwarded onto EToken2.
 *
 * Calls flow: Caller ->
 *             Proxy.func(...) ->
 *             Asset._performFunc(..., Caller.address) ->
 *             Proxy._forwardFunc(..., Caller.address) ->
 *             Platform.proxyFunc(..., symbol, Caller.address)
 *
 * Generic call flow: Caller ->
 *             Proxy.unknownFunc(...) ->
 *             Asset._performGeneric(..., Caller.address) ->
 *             Asset.unknownFunc(...)
 *
 * Asset implementation contract is mutable, but each user have an option to stick with
 * old implementation, through explicit decision made in timely manner, if he doesn't agree
 * with new rules.
 * Each user have a possibility to upgrade to latest asset contract implementation, without the
 * possibility to rollback.
 *
 * Note: all the non constant functions return false instead of throwing in case if state change
 * didn't happen yet.
 */
contract SyncFab is ERC20Interface, AssetProxyInterface, Bytes32, ReturnData {
    // Assigned EToken2, immutable.
    EToken2Interface public etoken2;

    // Assigned symbol, immutable.
    bytes32 public etoken2Symbol;

    // Assigned name, immutable. For UI.
    string public name;
    string public symbol;

    /**
     * Sets EToken2 address, assigns symbol and name.
     *
     * Can be set only once.
     *
     * @param _etoken2 EToken2 contract address.
     * @param _symbol assigned symbol.
     * @param _name assigned name.
     *
     * @return success.
     */
    function init(EToken2Interface _etoken2, string _symbol, string _name) returns(bool) {
        if (address(etoken2) != 0x0) {
            return false;
        }
        etoken2 = _etoken2;
        etoken2Symbol = _bytes32(_symbol);
        name = _name;
        symbol = _symbol;
        return true;
    }

    /**
     * Only EToken2 is allowed to call.
     */
    modifier onlyEToken2() {
        if (msg.sender == address(etoken2)) {
            _;
        }
    }

    /**
     * Only current asset owner is allowed to call.
     */
    modifier onlyAssetOwner() {
        if (etoken2.isOwner(msg.sender, etoken2Symbol)) {
            _;
        }
    }

    /**
     * Returns asset implementation contract for current caller.
     *
     * @return asset implementation contract.
     */
    function _getAsset() internal returns(AssetInterface) {
        return AssetInterface(getVersionFor(msg.sender));
    }

    function recoverTokens(uint _value) onlyAssetOwner() returns(bool) {
        return this.transferWithReference(msg.sender, _value, 'Tokens recovery');
    }

    /**
     * Returns asset total supply.
     *
     * @return asset total supply.
     */
    function totalSupply() constant returns(uint) {
        return etoken2.totalSupply(etoken2Symbol);
    }

    /**
     * Returns asset balance for a particular holder.
     *
     * @param _owner holder address.
     *
     * @return holder balance.
     */
    function balanceOf(address _owner) constant returns(uint) {
        return etoken2.balanceOf(_owner, etoken2Symbol);
    }

    /**
     * Returns asset allowance from one holder to another.
     *
     * @param _from holder that allowed spending.
     * @param _spender holder that is allowed to spend.
     *
     * @return holder to spender allowance.
     */
    function allowance(address _from, address _spender) constant returns(uint) {
        return etoken2.allowance(_from, _spender, etoken2Symbol);
    }

    /**
     * Returns asset decimals.
     *
     * @return asset decimals.
     */
    function decimals() constant returns(uint8) {
        return etoken2.baseUnit(etoken2Symbol);
    }

    /**
     * Transfers asset balance from the caller to specified receiver.
     *
     * @param _to holder address to give to.
     * @param _value amount to transfer.
     *
     * @return success.
     */
    function transfer(address _to, uint _value) returns(bool) {
        return transferWithReference(_to, _value, '');
    }

    /**
     * Transfers asset balance from the caller to specified receiver adding specified comment.
     * Resolves asset implementation contract for the caller and forwards there arguments along with
     * the caller address.
     *
     * @param _to holder address to give to.
     * @param _value amount to transfer.
     * @param _reference transfer comment to be included in a EToken2's Transfer event.
     *
     * @return success.
     */
    function transferWithReference(address _to, uint _value, string _reference) returns(bool) {
        return _getAsset()._performTransferWithReference(_to, _value, _reference, msg.sender);
    }

    /**
     * Transfers asset balance from the caller to specified ICAP.
     *
     * @param _icap recipient ICAP to give to.
     * @param _value amount to transfer.
     *
     * @return success.
     */
    function transferToICAP(bytes32 _icap, uint _value) returns(bool) {
        return transferToICAPWithReference(_icap, _value, '');
    }

    /**
     * Transfers asset balance from the caller to specified ICAP adding specified comment.
     * Resolves asset implementation contract for the caller and forwards there arguments along with
     * the caller address.
     *
     * @param _icap recipient ICAP to give to.
     * @param _value amount to transfer.
     * @param _reference transfer comment to be included in a EToken2's Transfer event.
     *
     * @return success.
     */
    function transferToICAPWithReference(bytes32 _icap, uint _value, string _reference) returns(bool) {
        return _getAsset()._performTransferToICAPWithReference(_icap, _value, _reference, msg.sender);
    }

    /**
     * Prforms allowance transfer of asset balance between holders.
     *
     * @param _from holder address to take from.
     * @param _to holder address to give to.
     * @param _value amount to transfer.
     *
     * @return success.
     */
    function transferFrom(address _from, address _to, uint _value) returns(bool) {
        return transferFromWithReference(_from, _to, _value, '');
    }

    /**
     * Prforms allowance transfer of asset balance between holders adding specified comment.
     * Resolves asset implementation contract for the caller and forwards there arguments along with
     * the caller address.
     *
     * @param _from holder address to take from.
     * @param _to holder address to give to.
     * @param _value amount to transfer.
     * @param _reference transfer comment to be included in a EToken2's Transfer event.
     *
     * @return success.
     */
    function transferFromWithReference(address _from, address _to, uint _value, string _reference) returns(bool) {
        return _getAsset()._performTransferFromWithReference(_from, _to, _value, _reference, msg.sender);
    }

    /**
     * Performs transfer call on the EToken2 by the name of specified sender.
     *
     * Can only be called by asset implementation contract assigned to sender.
     *
     * @param _from holder address to take from.
     * @param _to holder address to give to.
     * @param _value amount to transfer.
     * @param _reference transfer comment to be included in a EToken2's Transfer event.
     * @param _sender initial caller.
     *
     * @return success.
     */
    function _forwardTransferFromWithReference(address _from, address _to, uint _value, string _reference, address _sender) onlyImplementationFor(_sender) returns(bool) {
        return etoken2.proxyTransferFromWithReference(_from, _to, _value, etoken2Symbol, _reference, _sender);
    }

    /**
     * Prforms allowance transfer of asset balance between holders.
     *
     * @param _from holder address to take from.
     * @param _icap recipient ICAP address to give to.
     * @param _value amount to transfer.
     *
     * @return success.
     */
    function transferFromToICAP(address _from, bytes32 _icap, uint _value) returns(bool) {
        return transferFromToICAPWithReference(_from, _icap, _value, '');
    }

    /**
     * Prforms allowance transfer of asset balance between holders adding specified comment.
     * Resolves asset implementation contract for the caller and forwards there arguments along with
     * the caller address.
     *
     * @param _from holder address to take from.
     * @param _icap recipient ICAP address to give to.
     * @param _value amount to transfer.
     * @param _reference transfer comment to be included in a EToken2's Transfer event.
     *
     * @return success.
     */
    function transferFromToICAPWithReference(address _from, bytes32 _icap, uint _value, string _reference) returns(bool) {
        return _getAsset()._performTransferFromToICAPWithReference(_from, _icap, _value, _reference, msg.sender);
    }

    /**
     * Performs allowance transfer to ICAP call on the EToken2 by the name of specified sender.
     *
     * Can only be called by asset implementation contract assigned to sender.
     *
     * @param _from holder address to take from.
     * @param _icap recipient ICAP address to give to.
     * @param _value amount to transfer.
     * @param _reference transfer comment to be included in a EToken2's Transfer event.
     * @param _sender initial caller.
     *
     * @return success.
     */
    function _forwardTransferFromToICAPWithReference(address _from, bytes32 _icap, uint _value, string _reference, address _sender) onlyImplementationFor(_sender) returns(bool) {
        return etoken2.proxyTransferFromToICAPWithReference(_from, _icap, _value, _reference, _sender);
    }

    /**
     * Sets asset spending allowance for a specified spender.
     * Resolves asset implementation contract for the caller and forwards there arguments along with
     * the caller address.
     *
     * @param _spender holder address to set allowance to.
     * @param _value amount to allow.
     *
     * @return success.
     */
    function approve(address _spender, uint _value) returns(bool) {
        return _getAsset()._performApprove(_spender, _value, msg.sender);
    }

    /**
     * Performs allowance setting call on the EToken2 by the name of specified sender.
     *
     * Can only be called by asset implementation contract assigned to sender.
     *
     * @param _spender holder address to set allowance to.
     * @param _value amount to allow.
     * @param _sender initial caller.
     *
     * @return success.
     */
    function _forwardApprove(address _spender, uint _value, address _sender) onlyImplementationFor(_sender) returns(bool) {
        return etoken2.proxyApprove(_spender, _value, etoken2Symbol, _sender);
    }

    /**
     * Emits ERC20 Transfer event on this contract.
     *
     * Can only be, and, called by assigned EToken2 when asset transfer happens.
     */
    function emitTransfer(address _from, address _to, uint _value) onlyEToken2() {
        Transfer(_from, _to, _value);
    }

    /**
     * Emits ERC20 Approval event on this contract.
     *
     * Can only be, and, called by assigned EToken2 when asset allowance set happens.
     */
    function emitApprove(address _from, address _spender, uint _value) onlyEToken2() {
        Approval(_from, _spender, _value);
    }

    /**
     * Resolves asset implementation contract for the caller and forwards there transaction data,
     * along with the value. This allows for proxy interface growth.
     */
    function () payable {
        _getAsset()._performGeneric.value(msg.value)(msg.data, msg.sender);
        _returnReturnData(true);
    }

    // Interface functions to allow specifying ICAP addresses as strings.
    function transferToICAP(string _icap, uint _value) returns(bool) {
        return transferToICAPWithReference(_icap, _value, '');
    }

    function transferToICAPWithReference(string _icap, uint _value, string _reference) returns(bool) {
        return transferToICAPWithReference(_bytes32(_icap), _value, _reference);
    }

    function transferFromToICAP(address _from, string _icap, uint _value) returns(bool) {
        return transferFromToICAPWithReference(_from, _icap, _value, '');
    }

    function transferFromToICAPWithReference(address _from, string _icap, uint _value, string _reference) returns(bool) {
        return transferFromToICAPWithReference(_from, _bytes32(_icap), _value, _reference);
    }

    /**
     * Indicates an upgrade freeze-time start, and the next asset implementation contract.
     */
    event UpgradeProposed(address newVersion);
    event UpgradePurged(address newVersion);
    event UpgradeCommited(address newVersion);
    event OptedOut(address sender, address version);
    event OptedIn(address sender, address version);

    // Current asset implementation contract address.
    address latestVersion;

    // Proposed next asset implementation contract address.
    address pendingVersion;

    // Upgrade freeze-time start.
    uint pendingVersionTimestamp;

    // Timespan for users to review the new implementation and make decision.
    uint constant UPGRADE_FREEZE_TIME = 3 days;

    // Asset implementation contract address that user decided to stick with.
    // 0x0 means that user uses latest version.
    mapping(address => address) userOptOutVersion;

    /**
     * Only asset implementation contract assigned to sender is allowed to call.
     */
    modifier onlyImplementationFor(address _sender) {
        if (getVersionFor(_sender) == msg.sender) {
            _;
        }
    }

    /**
     * Returns asset implementation contract address assigned to sender.
     *
     * @param _sender sender address.
     *
     * @return asset implementation contract address.
     */
    function getVersionFor(address _sender) constant returns(address) {
        return userOptOutVersion[_sender] == 0 ? latestVersion : userOptOutVersion[_sender];
    }

    /**
     * Returns current asset implementation contract address.
     *
     * @return asset implementation contract address.
     */
    function getLatestVersion() constant returns(address) {
        return latestVersion;
    }

    /**
     * Returns proposed next asset implementation contract address.
     *
     * @return asset implementation contract address.
     */
    function getPendingVersion() constant returns(address) {
        return pendingVersion;
    }

    /**
     * Returns upgrade freeze-time start.
     *
     * @return freeze-time start.
     */
    function getPendingVersionTimestamp() constant returns(uint) {
        return pendingVersionTimestamp;
    }

    /**
     * Propose next asset implementation contract address.
     *
     * Can only be called by current asset owner.
     *
     * Note: freeze-time should not be applied for the initial setup.
     *
     * @param _newVersion asset implementation contract address.
     *
     * @return success.
     */
    function proposeUpgrade(address _newVersion) onlyAssetOwner() returns(bool) {
        // Should not already be in the upgrading process.
        if (pendingVersion != 0x0) {
            return false;
        }
        // New version address should be other than 0x0.
        if (_newVersion == 0x0) {
            return false;
        }
        // Don't apply freeze-time for the initial setup.
        if (latestVersion == 0x0) {
            latestVersion = _newVersion;
            return true;
        }
        pendingVersion = _newVersion;
        pendingVersionTimestamp = now;
        UpgradeProposed(_newVersion);
        return true;
    }

    /**
     * Cancel the pending upgrade process.
     *
     * Can only be called by current asset owner.
     *
     * @return success.
     */
    function purgeUpgrade() onlyAssetOwner() returns(bool) {
        if (pendingVersion == 0x0) {
            return false;
        }
        UpgradePurged(pendingVersion);
        delete pendingVersion;
        delete pendingVersionTimestamp;
        return true;
    }

    /**
     * Finalize an upgrade process setting new asset implementation contract address.
     *
     * Can only be called after an upgrade freeze-time.
     *
     * @return success.
     */
    function commitUpgrade() returns(bool) {
        if (pendingVersion == 0x0) {
            return false;
        }
        if (pendingVersionTimestamp + UPGRADE_FREEZE_TIME > now) {
            return false;
        }
        latestVersion = pendingVersion;
        delete pendingVersion;
        delete pendingVersionTimestamp;
        UpgradeCommited(latestVersion);
        return true;
    }

    /**
     * Disagree with proposed upgrade, and stick with current asset implementation
     * until further explicit agreement to upgrade.
     *
     * @return success.
     */
    function optOut() returns(bool) {
        if (userOptOutVersion[msg.sender] != 0x0) {
            return false;
        }
        userOptOutVersion[msg.sender] = latestVersion;
        OptedOut(msg.sender, latestVersion);
        return true;
    }

    /**
     * Implicitly agree to upgrade to current and future asset implementation upgrades,
     * until further explicit disagreement.
     *
     * @return success.
     */
    function optIn() returns(bool) {
        delete userOptOutVersion[msg.sender];
        OptedIn(msg.sender, latestVersion);
        return true;
    }

    // Backwards compatibility.
    function multiAsset() constant returns(EToken2Interface) {
        return etoken2;
    }
}

Contract ABI
[{"constant":true,"inputs":[],"name":"multiAsset","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"commitUpgrade","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"getLatestVersion","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_reference","type":"string"},{"name":"_sender","type":"address"}],"name":"_forwardTransferFromWithReference","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"emitApprove","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"emitTransfer","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_value","type":"uint256"}],"name":"recoverTokens","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"etoken2","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"getPendingVersionTimestamp","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"purgeUpgrade","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"optIn","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_reference","type":"string"}],"name":"transferFromWithReference","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_icap","type":"bytes32"},{"name":"_value","type":"uint256"}],"name":"transferToICAP","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_icap","type":"string"},{"name":"_value","type":"uint256"}],"name":"transferFromToICAP","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_icap","type":"bytes32"},{"name":"_value","type":"uint256"},{"name":"_reference","type":"string"}],"name":"transferToICAPWithReference","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"},{"name":"_sender","type":"address"}],"name":"_forwardApprove","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_icap","type":"string"},{"name":"_value","type":"uint256"}],"name":"transferToICAP","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_icap","type":"string"},{"name":"_value","type":"uint256"},{"name":"_reference","type":"string"}],"name":"transferFromToICAPWithReference","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_icap","type":"string"},{"name":"_value","type":"uint256"},{"name":"_reference","type":"string"}],"name":"transferToICAPWithReference","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_icap","type":"bytes32"},{"name":"_value","type":"uint256"},{"name":"_reference","type":"string"},{"name":"_sender","type":"address"}],"name":"_forwardTransferFromToICAPWithReference","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_icap","type":"bytes32"},{"name":"_value","type":"uint256"},{"name":"_reference","type":"string"}],"name":"transferFromToICAPWithReference","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_icap","type":"bytes32"},{"name":"_value","type":"uint256"}],"name":"transferFromToICAP","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"etoken2Symbol","outputs":[{"name":"","type":"bytes32"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"getPendingVersion","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_reference","type":"string"}],"name":"transferWithReference","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_etoken2","type":"address"},{"name":"_symbol","type":"string"},{"name":"_name","type":"string"}],"name":"init","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_newVersion","type":"address"}],"name":"proposeUpgrade","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"optOut","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_from","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_sender","type":"address"}],"name":"getVersionFor","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"payable":true,"type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newVersion","type":"address"}],"name":"UpgradeProposed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newVersion","type":"address"}],"name":"UpgradePurged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newVersion","type":"address"}],"name":"UpgradeCommited","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"sender","type":"address"},{"indexed":false,"name":"version","type":"address"}],"name":"OptedOut","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"sender","type":"address"},{"indexed":false,"name":"version","type":"address"}],"name":"OptedIn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"}]

Contract Creation Code
6060604052341561000f57600080fd5b5b612a688061001f6000396000f300606060405236156101d55763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663029a8bf781146102a657806306fdde03146102e2578063095ea7b31461036d5780630ba12c83146103b05780630e6d1de9146103d757806314cba0021461041357806318160ddd146104b857806323385089146104dd57806323b872dd1461051457806323de66511461055d57806330599fc514610594578063313ce567146105be578063406838b3146105e75780634bfaf2e8146106235780634dfe950d146106485780635b48684e1461066f5780636461fe391461069657806370a0823114610723578063733480b7146107615780637609c5a91461078e57806377fe38a4146108105780637bcdc2f01461088057806381d434e9146108ca57806384c5c34d1461093157806395d89b41146109fc5780639ab253cc14610a875780639b487f3f14610b37578063a48a663c14610bd8578063a525f42c14610c61578063a66e6e5c14610ca7578063a883fb9014610ccc578063a9059cbb14610d08578063ac35caee14610d4b578063b2b45df514610dd1578063c915fc9314610e93578063d4eec5a614610ed3578063dd62ed3e14610efa578063fe8beb7114610f3e575b5b6101de610f93565b73ffffffffffffffffffffffffffffffffffffffff1663db00b84834600036336040517c010000000000000000000000000000000000000000000000000000000063ffffffff871602815273ffffffffffffffffffffffffffffffffffffffff821660248201526040600482019081526044820184905290819060640185858082843782019150509450505050506000604051808303818588803b151561028457600080fd5b6125ee5a03f1151561029557600080fd5b505050506102a36001610fa4565b5b005b34156102b157600080fd5b6102b9610fc5565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b34156102ed57600080fd5b6102f5610fe2565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156103325780820151818401525b602001610319565b50505050905090810190601f16801561035f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561037857600080fd5b61039c73ffffffffffffffffffffffffffffffffffffffff60043516602435611080565b604051901515815260200160405180910390f35b34156103bb57600080fd5b61039c611148565b604051901515815260200160405180910390f35b34156103e257600080fd5b6102b961122e565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b341561041e57600080fd5b61039c73ffffffffffffffffffffffffffffffffffffffff6004803582169160248035909116916044359160849060643590810190830135806020601f820181900481020160405190810160405281815292919060208401838380828437509496505050923573ffffffffffffffffffffffffffffffffffffffff16925061124b915050565b604051901515815260200160405180910390f35b34156104c357600080fd5b6104cb6113f8565b60405190815260200160405180910390f35b34156104e857600080fd5b6102a373ffffffffffffffffffffffffffffffffffffffff60043581169060243516604435611495565b005b341561051f57600080fd5b61039c73ffffffffffffffffffffffffffffffffffffffff60043581169060243516604435611522565b604051901515815260200160405180910390f35b341561056857600080fd5b6102a373ffffffffffffffffffffffffffffffffffffffff60043581169060243516604435611548565b005b341561059f57600080fd5b61039c6004356115d5565b604051901515815260200160405180910390f35b34156105c957600080fd5b6105d1611776565b60405160ff909116815260200160405180910390f35b34156105f257600080fd5b6102b9611813565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b341561062e57600080fd5b6104cb61182f565b60405190815260200160405180910390f35b341561065357600080fd5b61039c611836565b604051901515815260200160405180910390f35b341561067a57600080fd5b61039c6119af565b604051901515815260200160405180910390f35b34156106a157600080fd5b61039c73ffffffffffffffffffffffffffffffffffffffff6004803582169160248035909116916044359160849060643590810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650611a5c95505050505050565b604051901515815260200160405180910390f35b341561072e57600080fd5b6104cb73ffffffffffffffffffffffffffffffffffffffff60043516611ba3565b60405190815260200160405180910390f35b341561076c57600080fd5b61039c600435602435611c5e565b604051901515815260200160405180910390f35b341561079957600080fd5b61039c6004803573ffffffffffffffffffffffffffffffffffffffff169060446024803590810190830135806020601f820181900481020160405190810160405281815292919060208401838380828437509496505093359350611c8292505050565b604051901515815260200160405180910390f35b341561081b57600080fd5b61039c600480359060248035919060649060443590810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650611ca895505050505050565b604051901515815260200160405180910390f35b341561088b57600080fd5b61039c73ffffffffffffffffffffffffffffffffffffffff6004358116906024359060443516611de0565b604051901515815260200160405180910390f35b34156108d557600080fd5b61039c60046024813581810190830135806020601f820181900481020160405190810160405281815292919060208401838380828437509496505093359350611ef692505050565b604051901515815260200160405180910390f35b341561093c57600080fd5b61039c6004803573ffffffffffffffffffffffffffffffffffffffff169060446024803590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001909190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650611f1a95505050505050565b604051901515815260200160405180910390f35b3415610a0757600080fd5b6102f5611f3b565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156103325780820151818401525b602001610319565b50505050905090810190601f16801561035f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3415610a9257600080fd5b61039c60046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001909190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650611fd995505050505050565b604051901515815260200160405180910390f35b3415610b4257600080fd5b61039c6004803573ffffffffffffffffffffffffffffffffffffffff169060248035916044359160849060643590810190830135806020601f820181900481020160405190810160405281815292919060208401838380828437509496505050923573ffffffffffffffffffffffffffffffffffffffff169250611ff8915050565b604051901515815260200160405180910390f35b3415610be357600080fd5b61039c6004803573ffffffffffffffffffffffffffffffffffffffff169060248035916044359160849060643590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965061218095505050505050565b604051901515815260200160405180910390f35b3415610c6c57600080fd5b61039c73ffffffffffffffffffffffffffffffffffffffff600435166024356044356122c6565b604051901515815260200160405180910390f35b3415610cb257600080fd5b6104cb6122ec565b60405190815260200160405180910390f35b3415610cd757600080fd5b6102b96122f2565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3415610d1357600080fd5b61039c73ffffffffffffffffffffffffffffffffffffffff6004351660243561230f565b604051901515815260200160405180910390f35b3415610d5657600080fd5b61039c6004803573ffffffffffffffffffffffffffffffffffffffff169060248035919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965061233395505050505050565b604051901515815260200160405180910390f35b3415610ddc57600080fd5b61039c6004803573ffffffffffffffffffffffffffffffffffffffff169060446024803590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496506124aa95505050505050565b604051901515815260200160405180910390f35b3415610e9e57600080fd5b61039c73ffffffffffffffffffffffffffffffffffffffff60043516612551565b604051901515815260200160405180910390f35b3415610ede57600080fd5b61039c612755565b604051901515815260200160405180910390f35b3415610f0557600080fd5b6104cb73ffffffffffffffffffffffffffffffffffffffff60043581169060243516612845565b60405190815260200160405180910390f35b3415610f4957600080fd5b6102b973ffffffffffffffffffffffffffffffffffffffff6004351661290f565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6000610f9e3361290f565b90505b90565b593d81016040523d6000823e818015610fbb573d82f35b3d82fd5b50505b50565b60005473ffffffffffffffffffffffffffffffffffffffff165b90565b60028054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156110785780601f1061104d57610100808354040283529160200191611078565b820191906000526020600020905b81548152906001019060200180831161105b57829003601f168201915b505050505081565b600061108a610f93565b73ffffffffffffffffffffffffffffffffffffffff1663e34f71378484336000604051602001526040517c010000000000000000000000000000000000000000000000000000000063ffffffff861602815273ffffffffffffffffffffffffffffffffffffffff938416600482015260248101929092529091166044820152606401602060405180830381600087803b151561112557600080fd5b6102c65a03f1151561113657600080fd5b50505060405180519150505b92915050565b60055460009073ffffffffffffffffffffffffffffffffffffffff16151561117257506000610fa1565b426203f48060065401111561118957506000610fa1565b600580546004805473ffffffffffffffffffffffffffffffffffffffff8084167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161792839055921690925560006006557f3d14778962aac3ae6130883f4c9d2e995d6fc2a644b7867087a59e92b954b4ed911660405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a15060015b90565b60045473ffffffffffffffffffffffffffffffffffffffff165b90565b6000813373ffffffffffffffffffffffffffffffffffffffff1661126e8261290f565b73ffffffffffffffffffffffffffffffffffffffff1614156113ec576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663161ff66288888860015489896000604051602001526040517c010000000000000000000000000000000000000000000000000000000063ffffffff891602815273ffffffffffffffffffffffffffffffffffffffff808816600483019081528782166024840152604483018790526064830186905290831660a483015260c060848301908152909160c40184818151815260200191508051906020019080838360005b8381101561137f5780820151818401525b602001611366565b50505050905090810190601f1680156113ac5780820380516001836020036101000a031916815260200191505b50975050505050505050602060405180830381600087803b15156113cf57600080fd5b6102c65a03f115156113e057600080fd5b50505060405180519250505b5b5b5095945050505050565b6000805460015473ffffffffffffffffffffffffffffffffffffffff9091169063b524abcf9083604051602001526040517c010000000000000000000000000000000000000000000000000000000063ffffffff84160281526004810191909152602401602060405180830381600087803b151561147557600080fd5b6102c65a03f1151561148657600080fd5b50505060405180519150505b90565b6000543373ffffffffffffffffffffffffffffffffffffffff90811691161415610fbf578173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405190815260200160405180910390a35b5b5b505050565b600061153e848484602060405190810160405260008152611a5c565b90505b9392505050565b6000543373ffffffffffffffffffffffffffffffffffffffff90811691161415610fbf578173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405190815260200160405180910390a35b5b5b505050565b6000805460015473ffffffffffffffffffffffffffffffffffffffff9091169063e96b462a90339084604051602001526040517c010000000000000000000000000000000000000000000000000000000063ffffffff851602815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401602060405180830381600087803b151561166e57600080fd5b6102c65a03f1151561167f57600080fd5b505050604051805190501561176f573073ffffffffffffffffffffffffffffffffffffffff1663ac35caee33846000604051602001526040517c010000000000000000000000000000000000000000000000000000000063ffffffff851602815273ffffffffffffffffffffffffffffffffffffffff9092166004830152602482015260606044820152600f60648201527f546f6b656e73207265636f766572790000000000000000000000000000000000608482015260a401602060405180830381600087803b151561175257600080fd5b6102c65a03f1151561176357600080fd5b50505060405180519150505b5b5b919050565b6000805460015473ffffffffffffffffffffffffffffffffffffffff9091169063dc86e6f09083604051602001526040517c010000000000000000000000000000000000000000000000000000000063ffffffff84160281526004810191909152602401602060405180830381600087803b151561147557600080fd5b6102c65a03f1151561148657600080fd5b50505060405180519150505b90565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b6006545b90565b6000805460015473ffffffffffffffffffffffffffffffffffffffff9091169063e96b462a90339084604051602001526040517c010000000000000000000000000000000000000000000000000000000063ffffffff851602815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401602060405180830381600087803b15156118cf57600080fd5b6102c65a03f115156118e057600080fd5b5050506040518051905015610fa15760055473ffffffffffffffffffffffffffffffffffffffff16151561191657506000610fa1565b6005547f076759518ae32ffdfd36b17503d14cdd8042c074645c635aa26dceea2719acef9073ffffffffffffffffffffffffffffffffffffffff1660405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a150600580547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055600060065560015b5b5b90565b73ffffffffffffffffffffffffffffffffffffffff3381811660009081526007602052604080822080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905560045491937fd70d37e6618959bdba868db2d4138b221ef96101565dfc1a0bd38af1d3ab63c1939216905173ffffffffffffffffffffffffffffffffffffffff9283168152911660208201526040908101905180910390a15060015b90565b6000611a66610f93565b73ffffffffffffffffffffffffffffffffffffffff1663cca9702586868686336000604051602001526040517c010000000000000000000000000000000000000000000000000000000063ffffffff881602815273ffffffffffffffffffffffffffffffffffffffff80871660048301908152868216602484015260448301869052908316608483015260a060648301908152909160a40184818151815260200191508051906020019080838360005b83811015611b2f5780820151818401525b602001611b16565b50505050905090810190601f168015611b5c5780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b1515611b7e57600080fd5b6102c65a03f11515611b8f57600080fd5b50505060405180519150505b949350505050565b6000805460015473ffffffffffffffffffffffffffffffffffffffff90911690634d30b6be90849084604051602001526040517c010000000000000000000000000000000000000000000000000000000063ffffffff851602815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401602060405180830381600087803b151561175257600080fd5b6102c65a03f1151561176357600080fd5b50505060405180519150505b919050565b6000611c798383602060405190810160405260008152611ca8565b90505b92915050565b600061153e848484602060405190810160405260008152611f1a565b90505b9392505050565b6000611cb2610f93565b73ffffffffffffffffffffffffffffffffffffffff1663c10796df858585336000604051602001526040517c010000000000000000000000000000000000000000000000000000000063ffffffff8716028152600481018581526024820185905273ffffffffffffffffffffffffffffffffffffffff83166064830152608060448301908152909160840184818151815260200191508051906020019080838360005b83811015611d6e5780820151818401525b602001611d55565b50505050905090810190601f168015611d9b5780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b1515611dbc57600080fd5b6102c65a03f11515611dcd57600080fd5b50505060405180519150505b9392505050565b6000813373ffffffffffffffffffffffffffffffffffffffff16611e038261290f565b73ffffffffffffffffffffffffffffffffffffffff161415611eec576000805460015473ffffffffffffffffffffffffffffffffffffffff909116916314712e2f9188918891908890604051602001526040517c010000000000000000000000000000000000000000000000000000000063ffffffff871602815273ffffffffffffffffffffffffffffffffffffffff9485166004820152602481019390935260448301919091529091166064820152608401602060405180830381600087803b1515611ecf57600080fd5b6102c65a03f11515611ee057600080fd5b50505060405180519250505b5b5b509392505050565b6000611c798383602060405190810160405260008152611fd9565b90505b92915050565b6000611f3085611f298661298d565b8585612180565b90505b949350505050565b60038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156110785780601f1061104d57610100808354040283529160200191611078565b820191906000526020600020905b81548152906001019060200180831161105b57829003601f168201915b505050505081565b600061153e611fe78561298d565b8484611ca8565b90505b9392505050565b6000813373ffffffffffffffffffffffffffffffffffffffff1661201b8261290f565b73ffffffffffffffffffffffffffffffffffffffff1614156113ec576000805473ffffffffffffffffffffffffffffffffffffffff169063a69032ee9089908990899089908990604051602001526040517c010000000000000000000000000000000000000000000000000000000063ffffffff881602815273ffffffffffffffffffffffffffffffffffffffff808716600483019081526024830187905260448301869052908316608483015260a060648301908152909160a40184818151815260200191508051906020019080838360005b838110156121085780820151818401525b6020016120ef565b50505050905090810190601f1680156121355780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b15156113cf57600080fd5b6102c65a03f115156113e057600080fd5b50505060405180519250505b5b5b5095945050505050565b600061218a610f93565b73ffffffffffffffffffffffffffffffffffffffff1663eb58705b86868686336000604051602001526040517c010000000000000000000000000000000000000000000000000000000063ffffffff881602815273ffffffffffffffffffffffffffffffffffffffff808716600483019081526024830187905260448301869052908316608483015260a060648301908152909160a40184818151815260200191508051906020019080838360005b83811015611b2f5780820151818401525b602001611b16565b50505050905090810190601f168015611b5c5780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b1515611b7e57600080fd5b6102c65a03f11515611b8f57600080fd5b50505060405180519150505b949350505050565b600061153e848484602060405190810160405260008152612180565b90505b9392505050565b60015481565b60055473ffffffffffffffffffffffffffffffffffffffff165b90565b6000611c798383602060405190810160405260008152612333565b90505b92915050565b600061233d610f93565b73ffffffffffffffffffffffffffffffffffffffff16631962df71858585336000604051602001526040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001848152602001806020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828103825284818151815260200191508051906020019080838360005b83811015611d6e5780820151818401525b602001611d55565b50505050905090810190601f168015611d9b5780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b1515611dbc57600080fd5b6102c65a03f11515611dcd57600080fd5b50505060405180519150505b9392505050565b6000805473ffffffffffffffffffffffffffffffffffffffff16156124d157506000611541565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff861617905561251a8361298d565b600155600282805161253092916020019061299c565b50600383805161254492916020019061299c565b50600190505b9392505050565b6000805460015473ffffffffffffffffffffffffffffffffffffffff9091169063e96b462a90339084604051602001526040517c010000000000000000000000000000000000000000000000000000000063ffffffff851602815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401602060405180830381600087803b15156125ea57600080fd5b6102c65a03f115156125fb57600080fd5b505050604051805190501561176f5760055473ffffffffffffffffffffffffffffffffffffffff16156126305750600061176f565b73ffffffffffffffffffffffffffffffffffffffff821615156126555750600061176f565b60045473ffffffffffffffffffffffffffffffffffffffff1615156126bc5750600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316179055600161176f565b600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416179055426006557f8ddc9aa7b538ef74fb9f825a27578614d8cd88e4062392c6613d2d65ed987d768260405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a15060015b5b5b919050565b73ffffffffffffffffffffffffffffffffffffffff3381166000908152600760205260408120549091161561278c57506000610fa1565b600480543373ffffffffffffffffffffffffffffffffffffffff8181166000908152600760205260409081902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169483169490941790935592547fe1dc7792699a69777c1f0b1695b7c1b9a2677af13bb0b61b9b9b975d30acf7b29391929116905173ffffffffffffffffffffffffffffffffffffffff9283168152911660208201526040908101905180910390a15060015b90565b6000805460015473ffffffffffffffffffffffffffffffffffffffff90911690631c8d5d38908590859085604051602001526040517c010000000000000000000000000000000000000000000000000000000063ffffffff861602815273ffffffffffffffffffffffffffffffffffffffff93841660048201529190921660248201526044810191909152606401602060405180830381600087803b151561112557600080fd5b6102c65a03f1151561113657600080fd5b50505060405180519150505b92915050565b73ffffffffffffffffffffffffffffffffffffffff8082166000908152600760205260408120549091161561296b5773ffffffffffffffffffffffffffffffffffffffff80831660009081526007602052604090205416612985565b60045473ffffffffffffffffffffffffffffffffffffffff165b90505b919050565b6000602082015190505b919050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106129dd57805160ff1916838001178555612a0a565b82800160010185558215612a0a579182015b82811115612a0a5782518255916020019190600101906129ef565b5b50612a17929150612a1b565b5090565b610fa191905b80821115612a175760008155600101612a21565b5090565b905600a165627a7a723058201a2cb6f0b9ce5118a7a7ea93082b2bb8a88e598cef9f60a42e1244104d9ebfbb0029


   Swarm Source:
bzzr://1a2cb6f0b9ce5118a7a7ea93082b2bb8a88e598cef9f60a42e1244104d9ebfbb
Block Age transaction Difficulty GasUsed Reward
Block Age Uncle Number Difficulty GasUsed Reward
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.