Latest 25 txns From a total of 72562 Transactions

TxHash Age From To Value [TxFee]
0x79f3a43febea821e8e5682514b7fe42b6638bacb7561e558279d6fc7b3d97cf76 mins ago0xff9089209de26b763b07f323fcf20ca81f304f8e  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.00036812718
0x948f6742a6b8eae2a4c50fb153f3386f20825b37cdfd3a0d095815915a4cc73b6 mins agoHitBTC_2  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.00024099
0x5ad031e10c0cc881dedac672c252ab8c13fbe33717678e464ebd99513026e7757 mins agoHitBTC_3  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.00040037
0xbe24da13e77255037c894f8e0be35e8b8e4c5ed7012343f8339b0da662b070bf8 mins ago0xe132bfcae80ab299c7574d6e33998923055da7ab  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.00016
0xac2f19f7b4dea991d166a7c4e672074a700983a95833e09b2267f29c294911d715 mins ago0xb826fa3bcdadfef4fcf5bbc050b569d0ddc8ee47  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.0005033
0xd9cc32d9bcaff19c09efa43c76c6c35c131d20adc7917021cfec6324b7f6676324 mins ago0xdbf80fa8ba9f77d9d89191e6f8a60b6a9b53a89d  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.000693972565
0x2d5fa3ba2437a9c0fb91b080d927480fb7fd02508584bf9a83b7d84d6ea23a1c24 mins ago0xdbf80fa8ba9f77d9d89191e6f8a60b6a9b53a89d  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.000597849717
0xc1636072e6fff478a57865a73350e3a28e14f241e490238798840ad0b31c243226 mins agoTidex-Tokens  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.00040101
0xe3ade836de950959031940e09bbf0773148144d010e98387ceea253eeb76125c27 mins ago0x1c9f7edef26b46129075dd4e78b3c51b4c21a61f  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.002256517
0xe827743c47d684d8f9cf5b76e044698c233238155af2373e14d696827c6c5aea30 mins ago0x3caec6f54993526c9e2744a4fa54a19b90a3bd87  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.0000720666
0x88f1f85f1d63de92697882f3a6dba7e331d477f06191ea6ef56cfded01575ad635 mins agoHitBTC_2  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.000275825
0xa06f094a91ede2d3c08c98467deb7a368cfccf1eed45d55e032a023ad921396a36 mins agoHitBTC_3  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.0000939861
0xb6dfc7f9650c817b0a029569ab8da2496d77ba7587a7a387d6ef5f2a5dd52efe45 mins ago0xb6ddbf7126e5ef99f715678bca86f9e5d6299ce0  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.00025101
0x7e1fa734329ec6f56ef14eb39bba7b0c5551981b6950873b5a5ba659d3d8f98747 mins ago0xfe19fe695bf662c7874846079f2a1337559ccfe3  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.002259141
0x8b737063717b4d9c462970368c2c679a9b2e4bf6261ec77e9349b22b1003c4c348 mins ago0x3c02290922a3618a4646e3bbca65853ea45fe7c6  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.00080202
0x635dc9f1a069d9d4499aef450053f148ed657c5583a2d565974aac869f8ffe8555 mins ago0xa2f9a41bcdf747a2eafaf8f0396f98c4d56a87f1  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.001644141
0xbcf4086cfe9243b7ec1f09bec38ac258af9a319c5ad7383b81fa92fc184689641 hr 6 mins ago0xff9089209de26b763b07f323fcf20ca81f304f8e  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.000589883755
0x88f5f88cfc9b9d6a072c08d62f2a1c593d1d1a8f8e4d7b55d052dd42a701e0b01 hr 15 mins ago0xd1a3e3591f5892cf739be90cfaca53525a97775d  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.00025165
0x1f362d13de898ae6201f37095915321f87c2f94090e695965082f6f06f0d875b1 hr 19 mins ago0xf675043b9f30d1032fd85172398200f1e1efea7e  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.00200825
0x5ebe3ed019c1ea5886b6116dedbea5d6b4a812bc28222f7520225bed18143e641 hr 23 mins ago0x53bdb79019c7bca8db8db363932275a3b6e1c461  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.00031646275
0x992bcfc10229758e74e88119592350fbc70993ef18eefbd901e3eb1d7659ec861 hr 27 mins ago0xff9089209de26b763b07f323fcf20ca81f304f8e  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.000466756117
0xca9ae659798d1f1889ecb82e5efe3a608692b37d3b2139c2c97546a01c0d17e91 hr 28 mins ago0xff9089209de26b763b07f323fcf20ca81f304f8e  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.000615755745
0x45f2c0aa3f3fb6df765c727999c8c6b6bd2e91850f0d4d145f5bb2e7964e85df1 hr 29 mins ago0x53bdb79019c7bca8db8db363932275a3b6e1c461  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.00031646275
0xc4a91c5fa05697247bd0f69b78021542c3452b4e891178f8ce2e25495b207a3e1 hr 29 mins ago0xff9089209de26b763b07f323fcf20ca81f304f8e  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.000653387992
0xb6cf553c8bf45309725047d73030092bb56858caf6c5a740cb6b4a14bad167591 hr 33 mins ago0x70e20ff9d271449c69dc11f3a93aac43d3dae24a  IN   0x5c3a228510d246b78a3765c20221cbf3082b44a40 Ether0.000991818
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
View All
ParentTxHash Block Age From To Value
Warning: The Compiled Contract might be susceptible to ExpExponentCleanup (medium/high-severity), NestedArrayFunctionCallDecoder (medium-severity), ZeroFunctionSelector (very low-severity) SolidityCompiler Bugs.

Contract Source Code Verified (Exact Match)
Contract Name: STQToken
Compiler Text: v0.4.15+commit.bbb8e64f
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity 0.4.15;

/**
 * @title ERC20Basic
 * @dev Simpler version of ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/179
 */
contract ERC20Basic {
  uint256 public totalSupply;
  function balanceOf(address who) constant returns (uint256);
  function transfer(address to, uint256 value) returns (bool);
  event Transfer(address indexed from, address indexed to, uint256 value);
}

/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {
  function mul(uint256 a, uint256 b) internal constant returns (uint256) {
    uint256 c = a * b;
    assert(a == 0 || c / a == b);
    return c;
  }

  function div(uint256 a, uint256 b) internal constant returns (uint256) {
    // assert(b > 0); // Solidity automatically throws when dividing by 0
    uint256 c = a / b;
    // assert(a == b * c + a % b); // There is no case in which this doesn't hold
    return c;
  }

  function sub(uint256 a, uint256 b) internal constant returns (uint256) {
    assert(b <= a);
    return a - b;
  }

  function add(uint256 a, uint256 b) internal constant returns (uint256) {
    uint256 c = a + b;
    assert(c >= a);
    return c;
  }
}


/**
 * @title Basic token
 * @dev Basic version of StandardToken, with no allowances. 
 */
contract BasicToken is ERC20Basic {
  using SafeMath for uint256;

  mapping(address => uint256) balances;

  /**
  * @dev transfer token for a specified address
  * @param _to The address to transfer to.
  * @param _value The amount to be transferred.
  */
  function transfer(address _to, uint256 _value) returns (bool) {
    balances[msg.sender] = balances[msg.sender].sub(_value);
    balances[_to] = balances[_to].add(_value);
    Transfer(msg.sender, _to, _value);
    return true;
  }

  /**
  * @dev Gets the balance of the specified address.
  * @param _owner The address to query the the balance of. 
  * @return An uint256 representing the amount owned by the passed address.
  */
  function balanceOf(address _owner) constant returns (uint256 balance) {
    return balances[_owner];
  }

}

/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
contract ERC20 is ERC20Basic {
  function allowance(address owner, address spender) constant returns (uint256);
  function transferFrom(address from, address to, uint256 value) returns (bool);
  function approve(address spender, uint256 value) returns (bool);
  event Approval(address indexed owner, address indexed spender, uint256 value);
}



/**
 * @title Standard ERC20 token
 *
 * @dev Implementation of the basic standard token.
 * @dev https://github.com/ethereum/EIPs/issues/20
 * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol
 */
contract StandardToken is ERC20, BasicToken {

  mapping (address => mapping (address => uint256)) allowed;


  /**
   * @dev Transfer tokens from one address to another
   * @param _from address The address which you want to send tokens from
   * @param _to address The address which you want to transfer to
   * @param _value uint256 the amout of tokens to be transfered
   */
  function transferFrom(address _from, address _to, uint256 _value) returns (bool) {
    var _allowance = allowed[_from][msg.sender];

    // Check is not needed because sub(_allowance, _value) will already throw if this condition is not met
    // require (_value <= _allowance);

    balances[_to] = balances[_to].add(_value);
    balances[_from] = balances[_from].sub(_value);
    allowed[_from][msg.sender] = _allowance.sub(_value);
    Transfer(_from, _to, _value);
    return true;
  }

  /**
   * @dev Aprove the passed address to spend the specified amount of tokens on behalf of msg.sender.
   * @param _spender The address which will spend the funds.
   * @param _value The amount of tokens to be spent.
   */
  function approve(address _spender, uint256 _value) returns (bool) {

    // To change the approve amount you first have to reduce the addresses`
    //  allowance to zero by calling `approve(_spender, 0)` if it is not
    //  already 0 to mitigate the race condition described here:
    //  https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
    require((_value == 0) || (allowed[msg.sender][_spender] == 0));

    allowed[msg.sender][_spender] = _value;
    Approval(msg.sender, _spender, _value);
    return true;
  }

  /**
   * @dev Function to check the amount of tokens that an owner allowed to a spender.
   * @param _owner address The address which owns the funds.
   * @param _spender address The address which will spend the funds.
   * @return A uint256 specifing the amount of tokens still avaible for the spender.
   */
  function allowance(address _owner, address _spender) constant returns (uint256 remaining) {
    return allowed[_owner][_spender];
  }

}


/// @title StandardToken which circulation can be delayed and started by another contract.
/// @dev To be used as a mixin contract.
/// The contract is created in disabled state: circulation is disabled.
contract CirculatingToken is StandardToken {

    event CirculationEnabled();

    modifier requiresCirculation {
        require(m_isCirculating);
        _;
    }


    // PUBLIC interface

    function transfer(address _to, uint256 _value) requiresCirculation returns (bool) {
        return super.transfer(_to, _value);
    }

    function transferFrom(address _from, address _to, uint256 _value) requiresCirculation returns (bool) {
        return super.transferFrom(_from, _to, _value);
    }

    function approve(address _spender, uint256 _value) requiresCirculation returns (bool) {
        return super.approve(_spender, _value);
    }


    // INTERNAL functions

    function enableCirculation() internal returns (bool) {
        if (m_isCirculating)
            return false;

        m_isCirculating = true;
        CirculationEnabled();
        return true;
    }


    // FIELDS

    /// @notice are the circulation started?
    bool public m_isCirculating;
}

/// note: during any ownership changes all pending operations (waiting for more signatures) are cancelled
// TODO acceptOwnership
contract multiowned {

	// TYPES

    // struct for the status of a pending operation.
    struct MultiOwnedOperationPendingState {
        // count of confirmations needed
        uint yetNeeded;

        // bitmap of confirmations where owner #ownerIndex's decision corresponds to 2**ownerIndex bit
        uint ownersDone;

        // position of this operation key in m_multiOwnedPendingIndex
        uint index;
    }

	// EVENTS

    event Confirmation(address owner, bytes32 operation);
    event Revoke(address owner, bytes32 operation);
    event FinalConfirmation(address owner, bytes32 operation);

    // some others are in the case of an owner changing.
    event OwnerChanged(address oldOwner, address newOwner);
    event OwnerAdded(address newOwner);
    event OwnerRemoved(address oldOwner);

    // the last one is emitted if the required signatures change
    event RequirementChanged(uint newRequirement);

	// MODIFIERS

    // simple single-sig function modifier.
    modifier onlyowner {
        require(isOwner(msg.sender));
        _;
    }
    // multi-sig function modifier: the operation must have an intrinsic hash in order
    // that later attempts can be realised as the same underlying operation and
    // thus count as confirmations.
    modifier onlymanyowners(bytes32 _operation) {
        if (confirmAndCheck(_operation)) {
            _;
        }
        // Even if required number of confirmations has't been collected yet,
        // we can't throw here - because changes to the state have to be preserved.
        // But, confirmAndCheck itself will throw in case sender is not an owner.
    }

    modifier validNumOwners(uint _numOwners) {
        require(_numOwners > 0 && _numOwners <= c_maxOwners);
        _;
    }

    modifier multiOwnedValidRequirement(uint _required, uint _numOwners) {
        require(_required > 0 && _required <= _numOwners);
        _;
    }

    modifier ownerExists(address _address) {
        require(isOwner(_address));
        _;
    }

    modifier ownerDoesNotExist(address _address) {
        require(!isOwner(_address));
        _;
    }

    modifier multiOwnedOperationIsActive(bytes32 _operation) {
        require(isOperationActive(_operation));
        _;
    }

	// METHODS

    // constructor is given number of sigs required to do protected "onlymanyowners" transactions
    // as well as the selection of addresses capable of confirming them (msg.sender is not added to the owners!).
    function multiowned(address[] _owners, uint _required)
        validNumOwners(_owners.length)
        multiOwnedValidRequirement(_required, _owners.length)
    {
        assert(c_maxOwners <= 255);

        m_numOwners = _owners.length;
        m_multiOwnedRequired = _required;

        for (uint i = 0; i < _owners.length; ++i)
        {
            address owner = _owners[i];
            // invalid and duplicate addresses are not allowed
            require(0 != owner && !isOwner(owner) /* not isOwner yet! */);

            uint currentOwnerIndex = checkOwnerIndex(i + 1 /* first slot is unused */);
            m_owners[currentOwnerIndex] = owner;
            m_ownerIndex[owner] = currentOwnerIndex;
        }

        assertOwnersAreConsistent();
    }

    /// @notice replaces an owner `_from` with another `_to`.
    /// @param _from address of owner to replace
    /// @param _to address of new owner
    // All pending operations will be canceled!
    function changeOwner(address _from, address _to)
        external
        ownerExists(_from)
        ownerDoesNotExist(_to)
        onlymanyowners(sha3(msg.data))
    {
        assertOwnersAreConsistent();

        clearPending();
        uint ownerIndex = checkOwnerIndex(m_ownerIndex[_from]);
        m_owners[ownerIndex] = _to;
        m_ownerIndex[_from] = 0;
        m_ownerIndex[_to] = ownerIndex;

        assertOwnersAreConsistent();
        OwnerChanged(_from, _to);
    }

    /// @notice adds an owner
    /// @param _owner address of new owner
    // All pending operations will be canceled!
    function addOwner(address _owner)
        external
        ownerDoesNotExist(_owner)
        validNumOwners(m_numOwners + 1)
        onlymanyowners(sha3(msg.data))
    {
        assertOwnersAreConsistent();

        clearPending();
        m_numOwners++;
        m_owners[m_numOwners] = _owner;
        m_ownerIndex[_owner] = checkOwnerIndex(m_numOwners);

        assertOwnersAreConsistent();
        OwnerAdded(_owner);
    }

    /// @notice removes an owner
    /// @param _owner address of owner to remove
    // All pending operations will be canceled!
    function removeOwner(address _owner)
        external
        ownerExists(_owner)
        validNumOwners(m_numOwners - 1)
        multiOwnedValidRequirement(m_multiOwnedRequired, m_numOwners - 1)
        onlymanyowners(sha3(msg.data))
    {
        assertOwnersAreConsistent();

        clearPending();
        uint ownerIndex = checkOwnerIndex(m_ownerIndex[_owner]);
        m_owners[ownerIndex] = 0;
        m_ownerIndex[_owner] = 0;
        //make sure m_numOwners is equal to the number of owners and always points to the last owner
        reorganizeOwners();

        assertOwnersAreConsistent();
        OwnerRemoved(_owner);
    }

    /// @notice changes the required number of owner signatures
    /// @param _newRequired new number of signatures required
    // All pending operations will be canceled!
    function changeRequirement(uint _newRequired)
        external
        multiOwnedValidRequirement(_newRequired, m_numOwners)
        onlymanyowners(sha3(msg.data))
    {
        m_multiOwnedRequired = _newRequired;
        clearPending();
        RequirementChanged(_newRequired);
    }

    /// @notice Gets an owner by 0-indexed position
    /// @param ownerIndex 0-indexed owner position
    function getOwner(uint ownerIndex) public constant returns (address) {
        return m_owners[ownerIndex + 1];
    }

    /// @notice Gets owners
    /// @return memory array of owners
    function getOwners() public constant returns (address[]) {
        address[] memory result = new address[](m_numOwners);
        for (uint i = 0; i < m_numOwners; i++)
            result[i] = getOwner(i);

        return result;
    }

    /// @notice checks if provided address is an owner address
    /// @param _addr address to check
    /// @return true if it's an owner
    function isOwner(address _addr) public constant returns (bool) {
        return m_ownerIndex[_addr] > 0;
    }

    /// @notice Tests ownership of the current caller.
    /// @return true if it's an owner
    // It's advisable to call it by new owner to make sure that the same erroneous address is not copy-pasted to
    // addOwner/changeOwner and to isOwner.
    function amIOwner() external constant onlyowner returns (bool) {
        return true;
    }

    /// @notice Revokes a prior confirmation of the given operation
    /// @param _operation operation value, typically sha3(msg.data)
    function revoke(bytes32 _operation)
        external
        multiOwnedOperationIsActive(_operation)
        onlyowner
    {
        uint ownerIndexBit = makeOwnerBitmapBit(msg.sender);
        var pending = m_multiOwnedPending[_operation];
        require(pending.ownersDone & ownerIndexBit > 0);

        assertOperationIsConsistent(_operation);

        pending.yetNeeded++;
        pending.ownersDone -= ownerIndexBit;

        assertOperationIsConsistent(_operation);
        Revoke(msg.sender, _operation);
    }

    /// @notice Checks if owner confirmed given operation
    /// @param _operation operation value, typically sha3(msg.data)
    /// @param _owner an owner address
    function hasConfirmed(bytes32 _operation, address _owner)
        external
        constant
        multiOwnedOperationIsActive(_operation)
        ownerExists(_owner)
        returns (bool)
    {
        return !(m_multiOwnedPending[_operation].ownersDone & makeOwnerBitmapBit(_owner) == 0);
    }

    // INTERNAL METHODS

    function confirmAndCheck(bytes32 _operation)
        private
        onlyowner
        returns (bool)
    {
        if (512 == m_multiOwnedPendingIndex.length)
            // In case m_multiOwnedPendingIndex grows too much we have to shrink it: otherwise at some point
            // we won't be able to do it because of block gas limit.
            // Yes, pending confirmations will be lost. Dont see any security or stability implications.
            // TODO use more graceful approach like compact or removal of clearPending completely
            clearPending();

        var pending = m_multiOwnedPending[_operation];

        // if we're not yet working on this operation, switch over and reset the confirmation status.
        if (! isOperationActive(_operation)) {
            // reset count of confirmations needed.
            pending.yetNeeded = m_multiOwnedRequired;
            // reset which owners have confirmed (none) - set our bitmap to 0.
            pending.ownersDone = 0;
            pending.index = m_multiOwnedPendingIndex.length++;
            m_multiOwnedPendingIndex[pending.index] = _operation;
            assertOperationIsConsistent(_operation);
        }

        // determine the bit to set for this owner.
        uint ownerIndexBit = makeOwnerBitmapBit(msg.sender);
        // make sure we (the message sender) haven't confirmed this operation previously.
        if (pending.ownersDone & ownerIndexBit == 0) {
            // ok - check if count is enough to go ahead.
            assert(pending.yetNeeded > 0);
            if (pending.yetNeeded == 1) {
                // enough confirmations: reset and run interior.
                delete m_multiOwnedPendingIndex[m_multiOwnedPending[_operation].index];
                delete m_multiOwnedPending[_operation];
                FinalConfirmation(msg.sender, _operation);
                return true;
            }
            else
            {
                // not enough: record that this owner in particular confirmed.
                pending.yetNeeded--;
                pending.ownersDone |= ownerIndexBit;
                assertOperationIsConsistent(_operation);
                Confirmation(msg.sender, _operation);
            }
        }
    }

    // Reclaims free slots between valid owners in m_owners.
    // TODO given that its called after each removal, it could be simplified.
    function reorganizeOwners() private {
        uint free = 1;
        while (free < m_numOwners)
        {
            // iterating to the first free slot from the beginning
            while (free < m_numOwners && m_owners[free] != 0) free++;

            // iterating to the first occupied slot from the end
            while (m_numOwners > 1 && m_owners[m_numOwners] == 0) m_numOwners--;

            // swap, if possible, so free slot is located at the end after the swap
            if (free < m_numOwners && m_owners[m_numOwners] != 0 && m_owners[free] == 0)
            {
                // owners between swapped slots should't be renumbered - that saves a lot of gas
                m_owners[free] = m_owners[m_numOwners];
                m_ownerIndex[m_owners[free]] = free;
                m_owners[m_numOwners] = 0;
            }
        }
    }

    function clearPending() private onlyowner {
        uint length = m_multiOwnedPendingIndex.length;
        for (uint i = 0; i < length; ++i) {
            if (m_multiOwnedPendingIndex[i] != 0)
                delete m_multiOwnedPending[m_multiOwnedPendingIndex[i]];
        }
        delete m_multiOwnedPendingIndex;
    }

    function checkOwnerIndex(uint ownerIndex) private constant returns (uint) {
        assert(0 != ownerIndex && ownerIndex <= c_maxOwners);
        return ownerIndex;
    }

    function makeOwnerBitmapBit(address owner) private constant returns (uint) {
        uint ownerIndex = checkOwnerIndex(m_ownerIndex[owner]);
        return 2 ** ownerIndex;
    }

    function isOperationActive(bytes32 _operation) private constant returns (bool) {
        return 0 != m_multiOwnedPending[_operation].yetNeeded;
    }


    function assertOwnersAreConsistent() private constant {
        assert(m_numOwners > 0);
        assert(m_numOwners <= c_maxOwners);
        assert(m_owners[0] == 0);
        assert(0 != m_multiOwnedRequired && m_multiOwnedRequired <= m_numOwners);
    }

    function assertOperationIsConsistent(bytes32 _operation) private constant {
        var pending = m_multiOwnedPending[_operation];
        assert(0 != pending.yetNeeded);
        assert(m_multiOwnedPendingIndex[pending.index] == _operation);
        assert(pending.yetNeeded <= m_multiOwnedRequired);
    }


   	// FIELDS

    uint constant c_maxOwners = 250;

    // the number of owners that must confirm the same operation before it is run.
    uint public m_multiOwnedRequired;


    // pointer used to find a free slot in m_owners
    uint public m_numOwners;

    // list of owners (addresses),
    // slot 0 is unused so there are no owner which index is 0.
    // TODO could we save space at the end of the array for the common case of <10 owners? and should we?
    address[256] internal m_owners;

    // index on the list of owners to allow reverse lookup: owner address => index in m_owners
    mapping(address => uint) internal m_ownerIndex;


    // the ongoing operations.
    mapping(bytes32 => MultiOwnedOperationPendingState) internal m_multiOwnedPending;
    bytes32[] internal m_multiOwnedPendingIndex;
}


/**
 * @title Contract which is owned by owners and operated by controller.
 *
 * @notice Provides a way to set up an entity (typically other contract) entitled to control actions of this contract.
 * Controller is set up by owners or during construction.
 *
 * @dev controller check is performed by onlyController modifier.
 */
contract MultiownedControlled is multiowned {

    event ControllerSet(address controller);
    event ControllerRetired(address was);


    modifier onlyController {
        require(msg.sender == m_controller);
        _;
    }


    // PUBLIC interface

    function MultiownedControlled(address[] _owners, uint _signaturesRequired, address _controller)
        multiowned(_owners, _signaturesRequired)
    {
        m_controller = _controller;
        ControllerSet(m_controller);
    }

    /// @dev sets the controller
    function setController(address _controller) external onlymanyowners(sha3(msg.data)) {
        m_controller = _controller;
        ControllerSet(m_controller);
    }

    /// @dev ability for controller to step down
    function detachController() external onlyController {
        address was = m_controller;
        m_controller = address(0);
        ControllerRetired(was);
    }


    // FIELDS

    /// @notice address of entity entitled to mint new tokens
    address public m_controller;
}


/// @title StandardToken which can be minted by another contract.
contract MintableMultiownedToken is MultiownedControlled, StandardToken {

    /// @dev parameters of an extra token emission
    struct EmissionInfo {
        // tokens created
        uint256 created;

        // totalSupply at the moment of emission (excluding created tokens)
        uint256 totalSupplyWas;
    }

    event Mint(address indexed to, uint256 amount);
    event Emission(uint256 tokensCreated, uint256 totalSupplyWas, uint256 time);
    event Dividend(address indexed to, uint256 amount);


    // PUBLIC interface

    function MintableMultiownedToken(address[] _owners, uint _signaturesRequired, address _minter)
        MultiownedControlled(_owners, _signaturesRequired, _minter)
    {
        dividendsPool = this;   // or any other special unforgeable value, actually

        // emission #0 is a dummy: because of default value 0 in m_lastAccountEmission
        m_emissions.push(EmissionInfo({created: 0, totalSupplyWas: 0}));
    }

    /// @notice Request dividends for current account.
    function requestDividends() external {
        payDividendsTo(msg.sender);
    }

    /// @notice hook on standard ERC20#transfer to pay dividends
    function transfer(address _to, uint256 _value) returns (bool) {
        payDividendsTo(msg.sender);
        payDividendsTo(_to);
        return super.transfer(_to, _value);
    }

    /// @notice hook on standard ERC20#transferFrom to pay dividends
    function transferFrom(address _from, address _to, uint256 _value) returns (bool) {
        payDividendsTo(_from);
        payDividendsTo(_to);
        return super.transferFrom(_from, _to, _value);
    }

    // Disabled: this could be undesirable because sum of (balanceOf() for each token owner) != totalSupply
    // (but: sum of (balances[owner] for each token owner) == totalSupply!).
    //
    // @notice hook on standard ERC20#balanceOf to take dividends into consideration
    // function balanceOf(address _owner) constant returns (uint256) {
    //     var (hasNewDividends, dividends) = calculateDividendsFor(_owner);
    //     return hasNewDividends ? super.balanceOf(_owner).add(dividends) : super.balanceOf(_owner);
    // }


    /// @dev mints new tokens
    function mint(address _to, uint256 _amount) external onlyController {
        require(m_externalMintingEnabled);
        payDividendsTo(_to);
        mintInternal(_to, _amount);
    }

    /// @dev disables mint(), irreversible!
    function disableMinting() external onlyController {
        require(m_externalMintingEnabled);
        m_externalMintingEnabled = false;
    }


    // INTERNAL functions

    /**
     * @notice Starts new token emission
     * @param _tokensCreated Amount of tokens to create
     * @dev Dividends are not distributed immediately as it could require billions of gas,
     * instead they are `pulled` by a holder from dividends pool account before any update to the holder account occurs.
     */
    function emissionInternal(uint256 _tokensCreated) internal {
        require(0 != _tokensCreated);
        require(_tokensCreated < totalSupply / 2);  // otherwise it looks like an error

        uint256 totalSupplyWas = totalSupply;

        m_emissions.push(EmissionInfo({created: _tokensCreated, totalSupplyWas: totalSupplyWas}));
        mintInternal(dividendsPool, _tokensCreated);

        Emission(_tokensCreated, totalSupplyWas, now);
    }

    function mintInternal(address _to, uint256 _amount) internal {
        totalSupply = totalSupply.add(_amount);
        balances[_to] = balances[_to].add(_amount);
        Transfer(this, _to, _amount);
        Mint(_to, _amount);
    }

    /// @dev adds dividends to the account _to
    function payDividendsTo(address _to) internal {
        var (hasNewDividends, dividends) = calculateDividendsFor(_to);
        if (!hasNewDividends)
            return;

        if (0 != dividends) {
            balances[dividendsPool] = balances[dividendsPool].sub(dividends);
            balances[_to] = balances[_to].add(dividends);
            Transfer(dividendsPool, _to, dividends);
        }
        m_lastAccountEmission[_to] = getLastEmissionNum();
    }

    /// @dev calculates dividends for the account _for
    /// @return (true if state has to be updated, dividend amount (could be 0!))
    function calculateDividendsFor(address _for) constant internal returns (bool hasNewDividends, uint dividends) {
        assert(_for != dividendsPool);  // no dividends for the pool!

        uint256 lastEmissionNum = getLastEmissionNum();
        uint256 lastAccountEmissionNum = m_lastAccountEmission[_for];
        assert(lastAccountEmissionNum <= lastEmissionNum);
        if (lastAccountEmissionNum == lastEmissionNum)
            return (false, 0);

        uint256 initialBalance = balances[_for];    // beware of recursion!
        if (0 == initialBalance)
            return (true, 0);

        uint256 balance = initialBalance;
        for (uint256 emissionToProcess = lastAccountEmissionNum + 1; emissionToProcess <= lastEmissionNum; emissionToProcess++) {
            EmissionInfo storage emission = m_emissions[emissionToProcess];
            assert(0 != emission.created && 0 != emission.totalSupplyWas);

            uint256 dividend = balance.mul(emission.created).div(emission.totalSupplyWas);
            Dividend(_for, dividend);

            balance = balance.add(dividend);
        }

        return (true, balance.sub(initialBalance));
    }

    function getLastEmissionNum() private constant returns (uint256) {
        return m_emissions.length - 1;
    }


    // FIELDS

    /// @notice if this true then token is still externally mintable (but this flag does't affect emissions!)
    bool public m_externalMintingEnabled = true;

    /// @dev internal address of dividends in balances mapping.
    address dividendsPool;

    /// @notice record of issued dividend emissions
    EmissionInfo[] public m_emissions;

    /// @dev for each token holder: last emission (index in m_emissions) which was processed for this holder
    mapping(address => uint256) m_lastAccountEmission;
}


/// @title Storiqa coin contract
contract STQToken is CirculatingToken, MintableMultiownedToken {


    // PUBLIC interface

    function STQToken(address[] _owners)
        MintableMultiownedToken(_owners, 2, /* minter: */ address(0))
    {
        require(3 == _owners.length);
    }

    /// @dev Allows token transfers
    function startCirculation() external onlyController {
        assert(enableCirculation());    // must be called once
    }

    /// @notice Starts new token emission
    /// @param _tokensCreatedInSTQ Amount of STQ (not STQ-wei!) to create, like 30 000 or so
    function emission(uint256 _tokensCreatedInSTQ) external onlymanyowners(sha3(msg.data)) {
        emissionInternal(_tokensCreatedInSTQ.mul(uint256(10) ** uint256(decimals)));
    }


    // FIELDS

    string public constant name = 'Storiqa Token';
    string public constant symbol = 'STQ';
    uint8 public constant decimals = 18;
}

    Contract ABI  
[{"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":"_owner","type":"address"}],"name":"removeOwner","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"startCirculation","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":true,"inputs":[{"name":"_addr","type":"address"}],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"m_numOwners","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"m_externalMintingEnabled","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"amIOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"detachController","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_tokensCreatedInSTQ","type":"uint256"}],"name":"emission","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"}],"name":"addOwner","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"m_multiOwnedRequired","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"disableMinting","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_controller","type":"address"}],"name":"setController","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"getOwners","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":true,"inputs":[{"name":"","type":"uint256"}],"name":"m_emissions","outputs":[{"name":"created","type":"uint256"},{"name":"totalSupplyWas","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_operation","type":"bytes32"}],"name":"revoke","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_newRequired","type":"uint256"}],"name":"changeRequirement","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_operation","type":"bytes32"},{"name":"_owner","type":"address"}],"name":"hasConfirmed","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"ownerIndex","type":"uint256"}],"name":"getOwner","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"requestDividends","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"m_controller","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"m_isCirculating","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"}],"name":"changeOwner","outputs":[],"payable":false,"type":"function"},{"inputs":[{"name":"_owners","type":"address[]"}],"payable":false,"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokensCreated","type":"uint256"},{"indexed":false,"name":"totalSupplyWas","type":"uint256"},{"indexed":false,"name":"time","type":"uint256"}],"name":"Emission","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Dividend","type":"event"},{"anonymous":false,"inputs":[],"name":"CirculationEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","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":false,"name":"controller","type":"address"}],"name":"ControllerSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"was","type":"address"}],"name":"ControllerRetired","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"operation","type":"bytes32"}],"name":"Confirmation","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"operation","type":"bytes32"}],"name":"Revoke","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"operation","type":"bytes32"}],"name":"FinalConfirmation","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"oldOwner","type":"address"},{"indexed":false,"name":"newOwner","type":"address"}],"name":"OwnerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newOwner","type":"address"}],"name":"OwnerAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"oldOwner","type":"address"}],"name":"OwnerRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newRequirement","type":"uint256"}],"name":"RequirementChanged","type":"event"}]

  Contract Creation Code Switch To Opcodes View
6060604052610109805461ff00191661010017905534156200002057600080fd5b60405162002419380380620024198339810160405280805190910190505b80600260005b8282825b82825b6000806000845160008111801562000064575060fa8111155b15156200007057600080fd5b848651600082118015620000845750808211155b15156200009057600080fd5b5b8751600155600087815595505b87518610156200016e57878681518110620000b557fe5b906020019060200201519450600160a060020a03851615801590620000f05750620000ee85640100000000620009916200028382021704565b155b1515620000fc57600080fd5b620001186001870164010000000062001560620002a482021704565b93508460028561010081106200012a57fe5b0160005b8154600160a060020a039384166101009290920a918202918402191617905585166000908152610102602052604090208490555b8560010195506200009e565b6200018664010000000062001453620002c882021704565b5b5b50505b50506101058054600160a060020a031916600160a060020a0387811691909117918290557f79f74fd5964b6943d8a1865abfb7f668c92fa3f32c0a2e3195da7d0946703ad79550169250604091505051600160a060020a03909116815260200160405180910390a15b505061010980546201000060b060020a0319166201000030600160a060020a0316021790555061010a8054600181016200022f83826200032c565b916000526020600020906002020160005b604080519081016040526000808252602082015291905081518155602082015181600101555050505b50505080516003146200027b57600080fd5b5b506200038b565b600160a060020a03811660009081526101026020526040812054115b919050565b60008115801590620002b7575060fa8211155b1515620002c057fe5b50805b919050565b60015460009011620002d657fe5b60015460fa901115620002e557fe5b600260005b0160005b9054600160a060020a036101009290920a900416156200030a57fe5b6000541580159062000320575060015460005411155b15156200032957fe5b5b565b8154818355818115116200035b576002028160020283600052602060002091820191016200035b919062000361565b5b505050565b6200038891905b8082111562000384576000808255600182015560020162000368565b5090565b90565b61207e806200039b6000396000f300606060405236156101935763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde038114610198578063095ea7b314610223578063173825d91461025957806318160ddd1461027a57806320190ccd1461029f57806323b872dd146102b45780632f54bf6e146102f0578063313ce5671461032357806340c10f191461034c5780634123cb6b1461037057806344cc5f7e146103955780634e4ab830146103bc57806357d444fd146103e357806358292a3d146103f85780637065cb481461041057806370a0823114610431578063787d64e4146104625780637e5cd5c11461048757806392eefe9b1461049c57806395d89b41146104bd578063a0e67e2b14610548578063a9059cbb146105af578063af107749146105e5578063b75c7dc614610613578063ba51a6df1461062b578063c2cf732614610643578063c41a360a14610679578063d4a9991f146106ab578063d7311963146106c0578063d785e5c9146106ef578063dd62ed3e14610716578063f00d4b5d1461074d575b600080fd5b34156101a357600080fd5b6101ab610774565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156101e85780820151818401525b6020016101cf565b50505050905090810190601f1680156102155780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561022e57600080fd5b610245600160a060020a03600435166024356107ab565b604051901515815260200160405180910390f35b341561026457600080fd5b610278600160a060020a03600435166107d4565b005b341561028557600080fd5b61028d610931565b60405190815260200160405180910390f35b34156102aa57600080fd5b610278610938565b005b34156102bf57600080fd5b610245600160a060020a0360043581169060243516604435610968565b604051901515815260200160405180910390f35b34156102fb57600080fd5b610245600160a060020a0360043516610991565b604051901515815260200160405180910390f35b341561032e57600080fd5b6103366109b2565b60405160ff909116815260200160405180910390f35b341561035757600080fd5b610278600160a060020a03600435166024356109b7565b005b341561037b57600080fd5b61028d610a03565b60405190815260200160405180910390f35b34156103a057600080fd5b610245610a09565b604051901515815260200160405180910390f35b34156103c757600080fd5b610245610a18565b604051901515815260200160405180910390f35b34156103ee57600080fd5b610278610a36565b005b341561040357600080fd5b610278600435610ac1565b005b341561041b57600080fd5b610278600160a060020a0360043516610b14565b005b341561043c57600080fd5b61028d600160a060020a0360043516610c3b565b60405190815260200160405180910390f35b341561046d57600080fd5b61028d610c5b565b60405190815260200160405180910390f35b341561049257600080fd5b610278610c61565b005b34156104a757600080fd5b610278600160a060020a0360043516610ca4565b005b34156104c857600080fd5b6101ab610d44565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156101e85780820151818401525b6020016101cf565b50505050905090810190601f1680156102155780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561055357600080fd5b61055b610d7b565b60405160208082528190810183818151815260200191508051906020019060200280838360005b8381101561059b5780820151818401525b602001610582565b505050509050019250505060405180910390f35b34156105ba57600080fd5b610245600160a060020a0360043516602435610dfe565b604051901515815260200160405180910390f35b34156105f057600080fd5b6105fb600435610e25565b60405191825260208201526040908101905180910390f35b341561061e57600080fd5b610278600435610e54565b005b341561063657600080fd5b610278600435610f20565b005b341561064e57600080fd5b610245600435600160a060020a0360243516610fb5565b604051901515815260200160405180910390f35b341561068457600080fd5b61068f60043561100d565b604051600160a060020a03909116815260200160405180910390f35b34156106b657600080fd5b61027861103e565b005b34156106cb57600080fd5b61068f61104a565b604051600160a060020a03909116815260200160405180910390f35b34156106fa57600080fd5b61024561105a565b604051901515815260200160405180910390f35b341561072157600080fd5b61028d600160a060020a0360043581169060243516611064565b60405190815260200160405180910390f35b341561075857600080fd5b610278600160a060020a0360043581169060243516611092565b005b60408051908101604052600d81527f53746f7269716120546f6b656e00000000000000000000000000000000000000602082015281565b6101095460009060ff1615156107c057600080fd5b6107ca83836111ca565b90505b5b92915050565b6000816107e081610991565b15156107eb57600080fd5b6001805403600081118015610801575060fa8111155b151561080c57600080fd5b60005460018054036000821180156108245750808211155b151561082f57600080fd5b60003660405180838380828437820191505092505050604051809103902061085681611273565b1561092357610863611453565b61086b6114b2565b600160a060020a0387166000908152610102602052604090205461088e90611560565b9550600060028761010081106108a057fe5b0160005b8154600160a060020a039384166101009290920a91820291840219161790558716600090815261010260205260408120556108dd611582565b6108e5611453565b7f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da87604051600160a060020a03909116815260200160405180910390a15b5b5b505b50505b505b505050565b6101065481565b6101055433600160a060020a0390811691161461095457600080fd5b61095c611768565b151561096457fe5b5b5b565b6000610973846117c0565b61097c836117c0565b6109878484846118ca565b90505b9392505050565b600160a060020a03811660009081526101026020526040812054115b919050565b601281565b6101055433600160a060020a039081169116146109d357600080fd5b61010954610100900460ff1615156109ea57600080fd5b6109f3826117c0565b6109fd82826118f5565b5b5b5050565b60015481565b61010954610100900460ff1681565b6000610a2333610991565b1515610a2e57600080fd5b5060015b5b90565b6101055460009033600160a060020a03908116911614610a5557600080fd5b50610105805473ffffffffffffffffffffffffffffffffffffffff198116909155600160a060020a03167fc82cd8e6862d9c7b2c4c1d4f8dbac09a809e276399883e1070457f61a0f5349081604051600160a060020a03909116815260200160405180910390a15b5b50565b600036604051808383808284378201915050925050506040518091039020610ae881611273565b156109fd576109fd610b0883670de0b6b3a764000063ffffffff6119c016565b6119ef565b5b5b5b5050565b80610b1e81610991565b15610b2857600080fd5b600154600101600081118015610b3f575060fa8111155b1515610b4a57600080fd5b600036604051808383808284378201915050925050506040518091039020610b7181611273565b1561092a57610b7e611453565b610b866114b2565b6001805481019081905584906002906101008110610ba057fe5b0160005b6101000a815481600160a060020a030219169083600160a060020a03160217905550610bd1600154611560565b600160a060020a03851660009081526101026020526040902055610bf3611453565b7f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c384604051600160a060020a03909116815260200160405180910390a15b5b5b505b505b5050565b600160a060020a038116600090815261010760205260409020545b919050565b60005481565b6101055433600160a060020a03908116911614610c7d57600080fd5b61010954610100900460ff161515610c9457600080fd5b610109805461ff00191690555b5b565b600036604051808383808284378201915050925050506040518091039020610ccb81611273565b156109fd57610105805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0384811691909117918290557f79f74fd5964b6943d8a1865abfb7f668c92fa3f32c0a2e3195da7d0946703ad79116604051600160a060020a03909116815260200160405180910390a15b5b5b5050565b60408051908101604052600381527f5354510000000000000000000000000000000000000000000000000000000000602082015281565b610d83611f5a565b610d8b611f5a565b6000600154604051805910610d9d5750595b908082528060200260200182016040525b509150600090505b600154811015610df557610dc98161100d565b828281518110610dd557fe5b600160a060020a039092166020928302909101909101525b600101610db6565b8192505b505090565b6000610e09336117c0565b610e12836117c0565b6107ca8383611acc565b90505b92915050565b61010a805482908110610e3457fe5b906000526020600020906002020160005b50805460019091015490915082565b60008082610e6181611af5565b1515610e6c57600080fd5b610e7533610991565b1515610e8057600080fd5b610e8933611b0d565b6000858152610103602052604081206001810154929550935090841611610eaf57600080fd5b610eb884611b41565b815460019081018355820180548490039055610ed384611b41565b7fc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b3385604051600160a060020a03909216825260208201526040908101905180910390a15b5b5b50505050565b80600154600082118015610f345750808211155b1515610f3f57600080fd5b600036604051808383808284378201915050925050506040518091039020610f6681611273565b1561092a576000849055610f786114b2565b7facbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da8460405190815260200160405180910390a15b5b5b505b505050565b600082610fc181611af5565b1515610fcc57600080fd5b82610fd681610991565b1515610fe157600080fd5b610fea84611b0d565b6000868152610103602052604090206001015416151592505b5b505b5092915050565b6000600260018301610100811061102057fe5b0160005b9054906101000a9004600160a060020a031690505b919050565b610964336117c0565b5b565b61010554600160a060020a031681565b6101095460ff1681565b600160a060020a03808316600090815261010860209081526040808320938516835292905220545b92915050565b60008261109e81610991565b15156110a957600080fd5b826110b381610991565b156110bd57600080fd5b6000366040518083838082843782019150509250505060405180910390206110e481611273565b15610927576110f1611453565b6110f96114b2565b600160a060020a0386166000908152610102602052604090205461111c90611560565b935084600285610100811061112d57fe5b0160005b8154600160a060020a039384166101009290920a918202918402191617905586811660009081526101026020526040808220829055918716815220849055611177611453565b7fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c8686604051600160a060020a039283168152911660208201526040908101905180910390a15b5b5b505b505b50505050565b60008115806111fd5750600160a060020a0333811660009081526101086020908152604080832093871683529290522054155b151561120857600080fd5b600160a060020a0333811660008181526101086020908152604080832094881680845294909152908190208590557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a35060015b92915050565b600080600061128133610991565b151561128c57600080fd5b6101045461020014156112a1576112a16114b2565b5b60008481526101036020526040902091506112bc84611af5565b1515611313576000805483556001808401919091556101048054916112e391908301611f6c565b60028301819055610104805486929081106112fa57fe5b906000526020600020900160005b505561131384611b41565b5b61131d33611b0d565b905080826001015416600014156114495781546000901161133a57fe5b8154600114156113e957600084815261010360205260409020600201546101048054909190811061136757fe5b906000526020600020900160005b50600090819055848152610103602052604080822082815560018101839055600201919091557f367569357efc39b74a025c4ba1d64068b2b574e3b0d081c48d42f7feeca4cd16903390869051600160a060020a03909216825260208201526040908101905180910390a160019250611449565b81546000190182556001820180548217905561140484611b41565b7fe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda3385604051600160a060020a03909216825260208201526040908101905180910390a15b5b5b5b5050919050565b6001546000901161146057fe5b60015460fa90111561146e57fe5b600260005b0160005b9054600160a060020a036101009290920a9004161561149257fe5b6000541580159061095c575060015460005411155b151561096457fe5b5b565b6000806114be33610991565b15156114c957600080fd5b50506101045460005b8181101561154d576101048054829081106114e957fe5b906000526020600020900160005b5054156115445761010360006101048381548110151561151357fe5b906000526020600020900160005b505481526020810191909152604001600090812081815560018101829055600201555b5b6001016114d2565b6109fd6101046000611f96565b5b5b5050565b60008115801590611572575060fa8211155b151561157a57fe5b50805b919050565b60015b600154811015610abd575b600154811080156115c5575060028161010081106115aa57fe5b0160005b9054600160a060020a036101009290920a90041615155b156115d257600101611590565b5b6001805411801561160a575060015460029061010081106115f057fe5b0160005b9054600160a060020a036101009290920a900416155b1561161e57600180546000190190556115d2565b600154811080156116565750600154600290610100811061163b57fe5b0160005b9054600160a060020a036101009290920a90041615155b80156116855750600281610100811061166b57fe5b0160005b9054600160a060020a036101009290920a900416155b1561175f57600154600290610100811061169b57fe5b0160005b9054906101000a9004600160a060020a0316600282610100811015156116c157fe5b0160005b6101000a815481600160a060020a030219169083600160a060020a03160217905550806101026000600284610100811015156116fd57fe5b0160005b905461010091820a9004600160a060020a031682526020820192909252604001600090812092909255600154600291811061173857fe5b0160005b6101000a815481600160a060020a030219169083600160a060020a031602179055505b611585565b5b50565b6101095460009060ff161561177f57506000610a32565b610109805460ff191660011790557f61ff8191b26826d8bb82f4fa7cb8ef434fa4f34635af54cac08f7c476c5e279460405160405180910390a15060015b90565b6000806117cc83611b98565b915091508115156117dc5761092c565b80156118a25761010954620100009004600160a060020a03166000908152610107602052604090205461180f9082611d48565b61010954600160a060020a0362010000909104811660009081526101076020526040808220939093559085168152205461184f908263ffffffff611d5f16565b600160a060020a0380851660008181526101076020526040908190209390935561010954909262010000909104909116906000805160206120338339815191529084905190815260200160405180910390a35b6118aa611d79565b600160a060020a038416600090815261010b60205260409020555b505050565b6101095460009060ff1615156118df57600080fd5b610987848484611d85565b90505b5b9392505050565b61010654611909908263ffffffff611d5f16565b61010655600160a060020a03821660009081526101076020526040902054611937908263ffffffff611d5f16565b600160a060020a038084166000818152610107602052604090819020939093559130909116906000805160206120338339815191529084905190815260200160405180910390a381600160a060020a03167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968858260405190815260200160405180910390a25b5050565b60008282028315806119dc57508284828115156119d957fe5b04145b15156119e457fe5b8091505b5092915050565b60008115156119fd57600080fd5b610106546002905b048210611a1157600080fd5b506101065461010a805460018101611a298382611fb8565b916000526020600020906002020160005b6040805190810160405285815260208101859052919050815181556020820151600190910155505061010954611a8090600160a060020a036201000090910416836118f5565b7fb6d34f12e241bbb736de0a0cc42ddcb06ed877521d75a28e8c375794fadaf23582824260405180848152602001838152602001828152602001935050505060405180910390a15b5050565b6101095460009060ff161515611ae157600080fd5b6107ca8383611e8d565b90505b5b92915050565b6000818152610103602052604090205415155b919050565b600160a060020a038116600090815261010260205260408120548190611b3290611560565b90508060020a91505b50919050565b60008181526101036020526040902080541515611b5a57fe5b600281015461010480548492908110611b6f57fe5b906000526020600020900160005b505414611b8657fe5b600054815411156109fd57fe5b5b5050565b600080600080600080600080600061010960029054906101000a9004600160a060020a0316600160a060020a03168a600160a060020a031614151515611bda57fe5b611be2611d79565b600160a060020a038b16600090815261010b6020526040902054909750955086861115611c0b57fe5b86861415611c1f5760009850889750611d3c565b600160a060020a038a16600090815261010760205260409020549450841515611c4f576001985060009750611d3c565b8493508560010192505b868311611d255761010a805484908110611c6f57fe5b906000526020600020906002020160005b50805490925015801590611c975750600182015415155b1515611c9f57fe5b60018201548254611cc89190611cbc90879063ffffffff6119c016565b9063ffffffff611f3e16565b905089600160a060020a03167ff6a7e669306918b018d1eb595a21c8180bdecc0c90847daef23f9cf5fbd4902a8260405190815260200160405180910390a2611d17848263ffffffff611d5f16565b93505b600190920191611c59565b6001611d37858763ffffffff611d4816565b985098505b50505050505050915091565b600082821115611d5457fe5b508082035b92915050565b6000828201838110156119e457fe5b8091505b5092915050565b61010a54600019015b90565b600160a060020a0380841660009081526101086020908152604080832033851684528252808320549386168352610107909152812054909190611dce908463ffffffff611d5f16565b600160a060020a03808616600090815261010760205260408082209390935590871681522054611e04908463ffffffff611d4816565b600160a060020a03861660009081526101076020526040902055611e2e818463ffffffff611d4816565b600160a060020a0380871660008181526101086020908152604080832033861684529091529081902093909355908616916000805160206120338339815191529086905190815260200160405180910390a3600191505b509392505050565b600160a060020a03331660009081526101076020526040812054611eb7908363ffffffff611d4816565b600160a060020a03338116600090815261010760205260408082209390935590851681522054611eed908363ffffffff611d5f16565b600160a060020a038085166000818152610107602052604090819020939093559133909116906000805160206120338339815191529085905190815260200160405180910390a35060015b92915050565b6000808284811515611f4c57fe5b0490508091505b5092915050565b60206040519081016040526000815290565b81548183558181151161092c5760008381526020902061092c918101908301611fea565b5b505050565b5080546000825590600052602060002090810190610abd9190611fea565b5b50565b81548183558181151161092c5760020281600202836000526020600020918201910161092c919061200b565b5b505050565b610a3291905b808211156120045760008155600101611ff0565b5090565b90565b610a3291905b808211156120045760008082556001820155600201612011565b5090565b905600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a72305820806aac597cf63a0e8500f39bd70c0bc9a6bdededd0b02717d9e0cf89c8e3956a002900000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000003000000000000000000000000af9eca973ba1bf87923d45dce471181f77de301e000000000000000000000000c21afa07ce196500d45cd13b835645a2b05760e70000000000000000000000007e71a0514d727a2828209cf74f05686f382e545d

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

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [2] : 000000000000000000000000af9eca973ba1bf87923d45dce471181f77de301e
Arg [3] : 000000000000000000000000c21afa07ce196500d45cd13b835645a2b05760e7
Arg [4] : 0000000000000000000000007e71a0514d727a2828209cf74f05686f382e545d


   Swarm Source:
bzzr://806aac597cf63a0e8500f39bd70c0bc9a6bdededd0b02717d9e0cf89c8e3956a

 

View All
Block Age transaction Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.