Sponsored:   Ubex.com: Top ratings from all agencies. Big partnerships. 70% hard cap reached. Join us!
Contract Overview
Balance: 0 Ether
Ether Value: $0
Transactions: 7387 txns
Token Contract: Fysical (FYS)
Misc
Address Watch: Add To Watch List
Contract Creator: 0x10129fb27202d6bfea3ae2728eb39d76c09ebf09at txn 0x9e9acbee9965ecb4cc13ebddbadc3c2300e95b157fb69355daae118179ec9e13
Token Balances:
 Latest 25 txns from a total Of 7387 transactions

TxHash Age From To Value [TxFee]
0xbdecfbbf9772474a48d86a1d566e92f37eb43c909d4f170a3aa7a4d8a7d9bee517 hrs 31 mins ago0xcde96eb5e39509d0656c41d6fd0a9d2282a93a20  IN   0x587e276dc7f2c97d986e8adf9b82d3f14d6cd8d20 Ether0.000092024
0x3350d256253d717314709dad670099c4c8400c5775de3dd021fd76bf8e99e4c317 hrs 34 mins ago0x26fdedd41012aef4a86a405c52bf88e934956899  IN   0x587e276dc7f2c97d986e8adf9b82d3f14d6cd8d20 Ether0.003497012
0xd7e84f9e8f90732e79c3e8bdbd63bf739f3a48c43fd03206083b0726ccd46ae017 hrs 34 mins ago0x26fdedd41012aef4a86a405c52bf88e934956899  IN   0x587e276dc7f2c97d986e8adf9b82d3f14d6cd8d20 Ether0.001489273
0xf92a366b8cd4cdfe1072d3e12a6789156bf3c741d48721be21342d9dc1aca5d617 hrs 35 mins ago0x26fdedd41012aef4a86a405c52bf88e934956899  IN   0x587e276dc7f2c97d986e8adf9b82d3f14d6cd8d20 Ether0.001572303
0x5c1f3f7e12f9703b5299f3f6bcc3c8a5c9ecc790543b931b33dca7483b4c5dab17 hrs 35 mins ago0x26fdedd41012aef4a86a405c52bf88e934956899  IN   0x587e276dc7f2c97d986e8adf9b82d3f14d6cd8d20 Ether0.002227412
0xe7529eb525703bc7db7196b7328e4728ba647fcb09581c474da36ef99bfe05bd17 hrs 36 mins ago0x26fdedd41012aef4a86a405c52bf88e934956899  IN   0x587e276dc7f2c97d986e8adf9b82d3f14d6cd8d20 Ether0.002227412
0x3a258d6955c8dfd6e377a693c971c22b608e1e61e0a7c0b2c982ec6e4bd7cb2317 hrs 36 mins ago0x26fdedd41012aef4a86a405c52bf88e934956899  IN   0x587e276dc7f2c97d986e8adf9b82d3f14d6cd8d20 Ether0.002047552
0x2120a362a0df083e5eed25b643256550c5e1f146db76cbc2c07ab1bc271e9f0717 hrs 36 mins ago0x26fdedd41012aef4a86a405c52bf88e934956899  IN   0x587e276dc7f2c97d986e8adf9b82d3f14d6cd8d20 Ether0.001600271
0x364c8c6a9b0156249993583a27caafcb1bac27f17688615cfae02cc8f5bca93d17 hrs 37 mins ago0x26fdedd41012aef4a86a405c52bf88e934956899  IN   0x587e276dc7f2c97d986e8adf9b82d3f14d6cd8d20 Ether0.003675308
0x2e9b0b95a392aab9aa93e732665d7a03c956cbd7550e8dc16a79987271f8daec17 hrs 37 mins ago0x26fdedd41012aef4a86a405c52bf88e934956899  IN   0x587e276dc7f2c97d986e8adf9b82d3f14d6cd8d20 Ether0.003746608
0x2dd31fffce60ba09b06bfd186baf5aee60c00d7c36fe429f74be7ac1a360184f17 hrs 37 mins ago0x26fdedd41012aef4a86a405c52bf88e934956899  IN   0x587e276dc7f2c97d986e8adf9b82d3f14d6cd8d20 Ether0.001489273
0x00d197c38f6acd729b5c3da36cc789e0d82ff5d92818a339cbeeba442edf437e17 hrs 38 mins ago0x26fdedd41012aef4a86a405c52bf88e934956899  IN   0x587e276dc7f2c97d986e8adf9b82d3f14d6cd8d20 Ether0.00170108
0x204a9b54e98f57b1b7cabb768aee32064ab3b4e03f20c82ca53b7b709926df3817 hrs 38 mins ago0x26fdedd41012aef4a86a405c52bf88e934956899  IN   0x587e276dc7f2c97d986e8adf9b82d3f14d6cd8d20 Ether0.003621074
0xc86d2749e01f9507d35a4729d1991c3505c073c5156c34b50e4646daab1949af17 hrs 38 mins ago0x26fdedd41012aef4a86a405c52bf88e934956899  IN   0x587e276dc7f2c97d986e8adf9b82d3f14d6cd8d20 Ether0.001489273
0x5397aa9974a14707a46c05facfb983ba1bb04d85e057d06483e5a66c5a455c2f17 hrs 39 mins ago0x26fdedd41012aef4a86a405c52bf88e934956899  IN   0x587e276dc7f2c97d986e8adf9b82d3f14d6cd8d20 Ether0.00170108
0x36752218b2ced0cb6a21509c1fd459c0d23db43936a857b45c815ff0e6a5c5c717 hrs 39 mins ago0x26fdedd41012aef4a86a405c52bf88e934956899  IN   0x587e276dc7f2c97d986e8adf9b82d3f14d6cd8d20 Ether0.003149068
0xd94739fa3087d37cec57b463c2a3a6ff477e5e45036c53949686fe0b3ee020c917 hrs 40 mins ago0x26fdedd41012aef4a86a405c52bf88e934956899  IN   0x587e276dc7f2c97d986e8adf9b82d3f14d6cd8d20 Ether0.001489273
0x06eb159b01f46a52795a8cb603d338041b38ea7e18c5a98093b590f430e4bca817 hrs 41 mins ago0x26fdedd41012aef4a86a405c52bf88e934956899  IN   0x587e276dc7f2c97d986e8adf9b82d3f14d6cd8d20 Ether0.001572303
0xd138b96b38cb6db55e5d14d29f7337bb2b540a3f4212a21a4bb57b04ff90c4c917 hrs 41 mins ago0x26fdedd41012aef4a86a405c52bf88e934956899  IN   0x587e276dc7f2c97d986e8adf9b82d3f14d6cd8d20 Ether0.002221524
0x164432d2ea4be483fb8328a9a0f695a21634eef7b2b2b1b3b3aea11d795d052717 hrs 41 mins ago0x26fdedd41012aef4a86a405c52bf88e934956899  IN   0x587e276dc7f2c97d986e8adf9b82d3f14d6cd8d20 Ether0.00170108
0x902e2e23c42794bfb33918e489b60532f5f229fbf3af660e8263f9c01f68ab6b17 hrs 42 mins ago0x26fdedd41012aef4a86a405c52bf88e934956899  IN   0x587e276dc7f2c97d986e8adf9b82d3f14d6cd8d20 Ether0.001600271
0xab1e5733798bbb0525f67ac7d92f8b55b75cc7384461ed735458bf02deee5d0617 hrs 42 mins ago0x26fdedd41012aef4a86a405c52bf88e934956899  IN   0x587e276dc7f2c97d986e8adf9b82d3f14d6cd8d20 Ether0.003675308
0x736f71426cd294ba09e483f0d7951036588ac77035ec325df79b96816095e39617 hrs 43 mins ago0x26fdedd41012aef4a86a405c52bf88e934956899  IN   0x587e276dc7f2c97d986e8adf9b82d3f14d6cd8d20 Ether0.003621074
0xd3a4062b9f1f7d8125bc8faedcbe04975305c7f83423d4bd1ca5968736c9853a17 hrs 43 mins ago0x26fdedd41012aef4a86a405c52bf88e934956899  IN   0x587e276dc7f2c97d986e8adf9b82d3f14d6cd8d20 Ether0.001142801
0x058a609b49ad1c46bff679437b08ee1bf1d1026246e50666a46772c7bbd2d0d417 hrs 44 mins ago0x26fdedd41012aef4a86a405c52bf88e934956899  IN   0x587e276dc7f2c97d986e8adf9b82d3f14d6cd8d20 Ether0.00170108
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
View All
ParentTxHash Block Age From To Value
Contract Source Code Verified (Exact match)
Contract Name: Fysical
Compiler Version: v0.4.19+commit.c4cbbb05
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.13;

contract ERC20Basic {
  function totalSupply() public view returns (uint256);
  function balanceOf(address who) public view returns (uint256);
  function transfer(address to, uint256 value) public returns (bool);
  event Transfer(address indexed from, address indexed to, uint256 value);
}

library SafeMath {

  /**
  * @dev Multiplies two numbers, throws on overflow.
  */
  function mul(uint256 a, uint256 b) internal pure returns (uint256) {
    if (a == 0) {
      return 0;
    }
    uint256 c = a * b;
    assert(c / a == b);
    return c;
  }

  /**
  * @dev Integer division of two numbers, truncating the quotient.
  */
  function div(uint256 a, uint256 b) internal pure 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;
  }

  /**
  * @dev Substracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
  */
  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    assert(b <= a);
    return a - b;
  }

  /**
  * @dev Adds two numbers, throws on overflow.
  */
  function add(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a + b;
    assert(c >= a);
    return c;
  }
}

contract ERC20 is ERC20Basic {
  function allowance(address owner, address spender) public view returns (uint256);
  function transferFrom(address from, address to, uint256 value) public returns (bool);
  function approve(address spender, uint256 value) public returns (bool);
  event Approval(address indexed owner, address indexed spender, uint256 value);
}

contract BasicToken is ERC20Basic {
  using SafeMath for uint256;

  mapping(address => uint256) balances;

  uint256 totalSupply_;

  /**
  * @dev total number of tokens in existence
  */
  function totalSupply() public view returns (uint256) {
    return totalSupply_;
  }

  /**
  * @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) public returns (bool) {
    require(_to != address(0));
    require(_value <= balances[msg.sender]);

    // SafeMath.sub will throw if there is not enough balance.
    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) public view returns (uint256 balance) {
    return balances[_owner];
  }

}

contract StandardToken is ERC20, BasicToken {

  mapping (address => mapping (address => uint256)) internal 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 amount of tokens to be transferred
   */
  function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {
    require(_to != address(0));
    require(_value <= balances[_from]);
    require(_value <= allowed[_from][msg.sender]);

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

  /**
   * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.
   *
   * Beware that changing an allowance with this method brings the risk that someone may use both the old
   * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this
   * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards:
   * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
   * @param _spender The address which will spend the funds.
   * @param _value The amount of tokens to be spent.
   */
  function approve(address _spender, uint256 _value) public returns (bool) {
    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 specifying the amount of tokens still available for the spender.
   */
  function allowance(address _owner, address _spender) public view returns (uint256) {
    return allowed[_owner][_spender];
  }

  /**
   * @dev Increase the amount of tokens that an owner allowed to a spender.
   *
   * approve should be called when allowed[_spender] == 0. To increment
   * allowed value is better to use this function to avoid 2 calls (and wait until
   * the first transaction is mined)
   * From MonolithDAO Token.sol
   * @param _spender The address which will spend the funds.
   * @param _addedValue The amount of tokens to increase the allowance by.
   */
  function increaseApproval(address _spender, uint _addedValue) public returns (bool) {
    allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue);
    Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
    return true;
  }

  /**
   * @dev Decrease the amount of tokens that an owner allowed to a spender.
   *
   * approve should be called when allowed[_spender] == 0. To decrement
   * allowed value is better to use this function to avoid 2 calls (and wait until
   * the first transaction is mined)
   * From MonolithDAO Token.sol
   * @param _spender The address which will spend the funds.
   * @param _subtractedValue The amount of tokens to decrease the allowance by.
   */
  function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) {
    uint oldValue = allowed[msg.sender][_spender];
    if (_subtractedValue > oldValue) {
      allowed[msg.sender][_spender] = 0;
    } else {
      allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue);
    }
    Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
    return true;
  }

}

contract Fysical is StandardToken {
    using SafeMath for uint256;

    // To increase consistency and reduce the opportunity for human error, the '*sById' mappings, '*Count' values,
    // 'get*ById' function declarations/implementations, and 'create*' function declarations/implementations have been
    // programmatically-generated based on the each struct's name, member types/names, and the comments sharing a line
    // with a member.
    //
    // This programmatic generation builds 'require' function calls based on the following rules:
    //      - 'string' values must have length > 0
    //      - 'bytes' and uint256[] values may have any length
    //      - 'uint256' values representing a quantity must be > 0 (identifiers and Ethereum block numbers do not represent a quantity)
    //
    // The implementation of 'createProposal' contains one operation not found in the other programmatically-generated
    // 'create*' functions, a call to 'transferTokensToEscrow'.
    //
    // None of the other members or functions have been programmatically generated.

    // See https://en.wikipedia.org/wiki/Uniform_Resource_Identifier.
    // The risk of preventing support for a future addition to the URI syntax outweighs the benefit of validating URI
    // values within this immutable smart contract, so readers of Uri values should expect values that do not conform
    // to the formal syntax of a URI.
    struct Uri {
        string value;
    }

    // A set of URIs may describe multiple methods to access a particular resource.
    struct UriSet {
        uint256[] uniqueUriIdsSortedAscending;    // each value must be key in 'urisById'
    }

    // See https://en.wikipedia.org/wiki/Checksum#Algorithms. The description of the algorithm referred to by each URI
    // in the set should give a reader enough information to interpret the 'value' member of a 'Checksum' object
    // referring to this algorithm object.
    struct ChecksumAlgorithm {
        uint256 descriptionUriSetId;    // must be key in 'uriSetsById'
    }

    // See https://en.wikipedia.org/wiki/Checksum. The 'resourceByteCount' indicates the number of bytes contained in
    // the resource. Though this is not strictly part of most common Checksum algorithms, its validation may also be
    // useful. The 'value' field should contain the expected output of passing the resource content to the checksum
    // algorithm.
    struct Checksum {
        uint256 algorithmId; // must be key in 'checksumAlgorithmsById'
        uint256 resourceByteCount;
        bytes value;
    }

    // See https://en.wikipedia.org/wiki/Encryption. The description of the algorithm referred to by each URI
    // in the set should give a reader enough information to access the content of an encrypted resource. The algorithm
    // may be a symmetric encryption algorithm or an asymmetric encryption algorithm
    struct EncryptionAlgorithm {
        uint256 descriptionUriSetId;    // must be key in 'uriSetsById'
    }

    // For each resource, an Ethereum account may describe a checksum for the encrypted content of a resource and a
    // checksum for the decrypted content of a resource. When the resource is encrypted with a null encryption
    // algorithm, the resource is effectively unencrypted, so these two checksums should be identical
    // (See https://en.wikipedia.org/wiki/Null_encryption).
    struct ChecksumPair {
        uint256 encryptedChecksumId; // must be key in 'checksumsById'
        uint256 decryptedChecksumId; // must be key in 'checksumsById'
    }

    // A 'Resource' is content accessible with each URI referenced in the 'uriSetId'. This content should be
    // encrypted with the algorithm described by the 'EncryptionAlgorithm' referenced in 'encryptionAlgorithmId'. Each
    // resource referenced in 'metaResourceSetId' should describe the decrypted content in some way.
    //
    // For example, if the decrypted content conforms to a Protocol Buffers schema, the corresponding proto definition
    // file should be included in the meta-resources. Likewise, that proto definition resource should refer to a
    // resource like https://en.wikipedia.org/wiki/Protocol_Buffers among its meta-resources.
    struct Resource {
        uint256 uriSetId;                // must be key in 'uriSetsById'
        uint256 encryptionAlgorithmId;   // must be key in 'encryptionAlgorithmsById'
        uint256 metaResourceSetId;       // must be key in 'resourceSetsById'
    }

    // See https://en.wikipedia.org/wiki/Public-key_cryptography. This value should be the public key used in an
    // asymmetric encryption operation. It should be useful for encrypting an resource destined for the holder of the
    // corresponding private key or for decrypting a resource encrypted with the corresponding private key.
    struct PublicKey {
        bytes value;
    }

    // A 'ResourceSet' groups together resources that may be part of a trade proposal involving Fysical tokens. The
    // creator of a 'ResourceSet' must include a public key for use in the encryption operations of creating and
    // accepting a trade proposal. The creator must also specify the encryption algorithm a proposal creator should
    // use along with this resource set creator's public key. Just as a single resource may have meta-resources
    // describing the content of a resource, a 'ResourceSet' may have resources describing the whole resource set.
    //
    // Creators should be careful to not include so many resources that an Ethereum transaction to accept a proposal
    // might run out of gas while storing the corresponding encrypted decryption keys.
    //
    // While developing reasonable filters for un-useful data in this collection, developers should choose a practical
    // maximum depth of traversal through the meta-resources, since an infinite loop is possible.
    struct ResourceSet {
        address creator;
        uint256 creatorPublicKeyId;                     // must be key in 'publicKeysById'
        uint256 proposalEncryptionAlgorithmId;          // must be key in 'encryptionAlgorithmsById'
        uint256[] uniqueResourceIdsSortedAscending;     // each value must be key in 'resourcesById'
        uint256 metaResourceSetId;                      // must be key in 'resourceSetsById'
    }

    // The creator of a trade proposal may include arbitrary content to be considered part of the agreement the
    // resource set is accepting. This may be useful for license agreements to be enforced within a jurisdiction
    // governing the trade partners. The content available through each URI in the set should be encrypted first with
    // the public key of a resource set's creator and then with the private key of a proposal's creator.
    struct Agreement {
        uint256 uriSetId;           // must be key in 'uriSetsById'
        uint256 checksumPairId;     // must be key in 'checksumPairsById'
    }

    // Many agreements may be grouped together in an 'AgreementSet'
    struct AgreementSet {
        uint256[] uniqueAgreementIdsSortedAscending; // each value must be key in 'agreementsById'
    }

    // A 'TokenTransfer' describes a transfer of tokens to occur between two Ethereum accounts.
    struct TokenTransfer {
        address source;
        address destination;
        uint256 tokenCount;
    }

    // Many token transfers may be grouped together in a "TokenTransferSet'
    struct TokenTransferSet {
        uint256[] uniqueTokenTransferIdsSortedAscending; // each value must be key in 'tokenTransfersById'
    }

    // A 'Proposal' describes the conditions for the atomic exchange of Fysical tokens and a keys to decrypt resources
    // in a resource set. The creator must specify the asymmetric encryption algorithm for use when accepting the
    // proposal, along with this creator's public key. The creator may specify arbitrary agreements that should be
    // considered a condition of the trade.
    //
    // During the execution of 'createProposal', the count of tokens specified in each token transfer will be transfered
    // from the specified source account to the account with the Ethereum address of 0. When the proposal state changes
    // to a final state, these tokens will be returned to the source accounts or tranfserred to the destination account.
    //
    // By including a 'minimumBlockNumberForWithdrawal' value later than the current Ethereum block, the proposal
    // creator can give the resource set creator a rough sense of how long the proposal will remain certainly
    // acceptable. This is particularly useful because the execution of an Ethereum transaction to accept a proposal
    // exposes the encrypted decryption keys to the Ethereum network regardless of whether the transaction succeeds.
    // Within the time frame that a proposal acceptance transaction will certainly succeed, the resource creator need
    // not be concerned with the possibility that an acceptance transaction might execute after a proposal withdrawal
    // submitted to the Ethereum network at approximately the same time.
    struct Proposal {
        uint256 minimumBlockNumberForWithdrawal;
        address creator;
        uint256 creatorPublicKeyId;                 // must be key in 'publicKeysById'
        uint256 acceptanceEncryptionAlgorithmId;    // must be key in 'encryptionAlgorithmsById'
        uint256 resourceSetId;                      // must be key in 'resourceSetsById'
        uint256 agreementSetId;                     // must be key in 'agreementSetsById'
        uint256 tokenTransferSetId;                 // must be key in 'tokenTransferSetsById'
    }

    // When created, the proposal is in the 'Pending' state. All other states are final states, so a proposal may change
    // state exactly one time based on a call to 'withdrawProposal', 'acceptProposal', or 'rejectProposal'.
    enum ProposalState {
        Pending,
        WithdrawnByCreator,
        RejectedByResourceSetCreator,
        AcceptedByResourceSetCreator
    }

    // solium would warn "Constant name 'name' doesn't follow the UPPER_CASE notation", but this public constant is
    // recommended by https://theethereum.wiki/w/index.php/ERC20_Token_Standard, so we'll disable warnings for the line.
    //
    /* solium-disable-next-line */
    string public constant name = "Fysical";

    // solium would warn "Constant name 'symbol' doesn't follow the UPPER_CASE notation", but this public constant is
    // recommended by https://theethereum.wiki/w/index.php/ERC20_Token_Standard, so we'll disable warnings for the line.
    //
    /* solium-disable-next-line */
    string public constant symbol = "FYS";

    // solium would warn "Constant name 'decimals' doesn't follow the UPPER_CASE notation", but this public constant is
    // recommended by https://theethereum.wiki/w/index.php/ERC20_Token_Standard, so we'll disable warnings for the line.
    //
    /* solium-disable-next-line */
    uint8 public constant decimals = 9;

    uint256 public constant ONE_BILLION = 1000000000;
    uint256 public constant ONE_QUINTILLION = 1000000000000000000;

    // See https://en.wikipedia.org/wiki/9,223,372,036,854,775,807
    uint256 public constant MAXIMUM_64_BIT_SIGNED_INTEGER_VALUE = 9223372036854775807;

    uint256 public constant EMPTY_PUBLIC_KEY_ID = 0;
    uint256 public constant NULL_ENCRYPTION_ALGORITHM_DESCRIPTION_URI_ID = 0;
    uint256 public constant NULL_ENCRYPTION_ALGORITHM_DESCRIPTION_URI_SET_ID = 0;
    uint256 public constant NULL_ENCRYPTION_ALGORITHM_ID = 0;
    uint256 public constant EMPTY_RESOURCE_SET_ID = 0;

    mapping(uint256 => Uri) internal urisById;
    uint256 internal uriCount = 0;

    mapping(uint256 => UriSet) internal uriSetsById;
    uint256 internal uriSetCount = 0;

    mapping(uint256 => ChecksumAlgorithm) internal checksumAlgorithmsById;
    uint256 internal checksumAlgorithmCount = 0;

    mapping(uint256 => Checksum) internal checksumsById;
    uint256 internal checksumCount = 0;

    mapping(uint256 => EncryptionAlgorithm) internal encryptionAlgorithmsById;
    uint256 internal encryptionAlgorithmCount = 0;

    mapping(uint256 => ChecksumPair) internal checksumPairsById;
    uint256 internal checksumPairCount = 0;

    mapping(uint256 => Resource) internal resourcesById;
    uint256 internal resourceCount = 0;

    mapping(uint256 => PublicKey) internal publicKeysById;
    uint256 internal publicKeyCount = 0;

    mapping(uint256 => ResourceSet) internal resourceSetsById;
    uint256 internal resourceSetCount = 0;

    mapping(uint256 => Agreement) internal agreementsById;
    uint256 internal agreementCount = 0;

    mapping(uint256 => AgreementSet) internal agreementSetsById;
    uint256 internal agreementSetCount = 0;

    mapping(uint256 => TokenTransfer) internal tokenTransfersById;
    uint256 internal tokenTransferCount = 0;

    mapping(uint256 => TokenTransferSet) internal tokenTransferSetsById;
    uint256 internal tokenTransferSetCount = 0;

    mapping(uint256 => Proposal) internal proposalsById;
    uint256 internal proposalCount = 0;

    mapping(uint256 => ProposalState) internal statesByProposalId;

    mapping(uint256 => mapping(uint256 => bytes)) internal encryptedDecryptionKeysByProposalIdAndResourceId;

    mapping(address => mapping(uint256 => bool)) internal checksumPairAssignmentsByCreatorAndResourceId;

    mapping(address => mapping(uint256 => uint256)) internal checksumPairIdsByCreatorAndResourceId;

    function Fysical() public {
        assert(ProposalState(0) == ProposalState.Pending);

        // The total number of Fysical tokens is intended to be one billion, with the ability to express values with
        // nine decimals places of precision. The token values passed in ERC20 functions and operations involving
        // TokenTransfer operations must be counts of nano-Fysical tokens (one billionth of one Fysical token).
        //
        // See the initialization of the total supply in https://theethereum.wiki/w/index.php/ERC20_Token_Standard.

        assert(0 < ONE_BILLION);
        assert(0 < ONE_QUINTILLION);
        assert(MAXIMUM_64_BIT_SIGNED_INTEGER_VALUE > ONE_BILLION);
        assert(MAXIMUM_64_BIT_SIGNED_INTEGER_VALUE > ONE_QUINTILLION);
        assert(ONE_BILLION == uint256(10)**decimals);
        assert(ONE_QUINTILLION == ONE_BILLION.mul(ONE_BILLION));

        totalSupply_ = ONE_QUINTILLION;

        balances[msg.sender] = totalSupply_;

        // From "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md#transfer-1" on 2018-02-08 (commit cea1db05a3444870132ec3cb7dd78a244cba1805):
        //  "A token contract which creates new tokens SHOULD trigger a Transfer event with the _from address set to 0x0 when tokens are created."
        Transfer(0x0, msg.sender, balances[msg.sender]);

        // This mimics the behavior of the 'createPublicKey' external function.
        assert(EMPTY_PUBLIC_KEY_ID == publicKeyCount);
        publicKeysById[EMPTY_PUBLIC_KEY_ID] = PublicKey(new bytes(0));
        publicKeyCount = publicKeyCount.add(1);
        assert(1 == publicKeyCount);

        // This mimics the behavior of the 'createUri' external function.
        assert(NULL_ENCRYPTION_ALGORITHM_DESCRIPTION_URI_ID == uriCount);
        urisById[NULL_ENCRYPTION_ALGORITHM_DESCRIPTION_URI_ID] = Uri("https://en.wikipedia.org/wiki/Null_encryption");
        uriCount = uriCount.add(1);
        assert(1 == uriCount);

        // This mimics the behavior of the 'createUriSet' external function.
        assert(NULL_ENCRYPTION_ALGORITHM_DESCRIPTION_URI_SET_ID == uriSetCount);
        uint256[] memory uniqueIdsSortedAscending = new uint256[](1);
        uniqueIdsSortedAscending[0] = NULL_ENCRYPTION_ALGORITHM_DESCRIPTION_URI_ID;
        validateIdSet(uniqueIdsSortedAscending, uriCount);
        uriSetsById[NULL_ENCRYPTION_ALGORITHM_DESCRIPTION_URI_SET_ID] = UriSet(uniqueIdsSortedAscending);
        uriSetCount = uriSetCount.add(1);
        assert(1 == uriSetCount);

        // This mimics the behavior of the 'createEncryptionAlgorithm' external function.
        assert(NULL_ENCRYPTION_ALGORITHM_ID == encryptionAlgorithmCount);
        encryptionAlgorithmsById[NULL_ENCRYPTION_ALGORITHM_ID] = EncryptionAlgorithm(NULL_ENCRYPTION_ALGORITHM_DESCRIPTION_URI_SET_ID);
        encryptionAlgorithmCount = encryptionAlgorithmCount.add(1);
        assert(1 == encryptionAlgorithmCount);

        // This mimics the behavior of the 'createResourceSet' external function, but allows for a self-reference in
        // the assignment of the 'metaResourceSetId' member, which the function would prohibit.
        assert(EMPTY_RESOURCE_SET_ID == resourceSetCount);
        resourceSetsById[EMPTY_RESOURCE_SET_ID] = ResourceSet(
            msg.sender,
            EMPTY_PUBLIC_KEY_ID,
            NULL_ENCRYPTION_ALGORITHM_ID,
            new uint256[](0),
            EMPTY_RESOURCE_SET_ID
        );
        resourceSetCount = resourceSetCount.add(1);
        assert(1 == resourceSetCount);
    }

    function getUriCount() external view returns (uint256) {
        return uriCount;
    }

    function getUriById(uint256 id) external view returns (string) {
        require(id < uriCount);

        Uri memory object = urisById[id];
        return object.value;
    }

    function getUriSetCount() external view returns (uint256) {
        return uriSetCount;
    }

    function getUriSetById(uint256 id) external view returns (uint256[]) {
        require(id < uriSetCount);

        UriSet memory object = uriSetsById[id];
        return object.uniqueUriIdsSortedAscending;
    }

    function getChecksumAlgorithmCount() external view returns (uint256) {
        return checksumAlgorithmCount;
    }

    function getChecksumAlgorithmById(uint256 id) external view returns (uint256) {
        require(id < checksumAlgorithmCount);

        ChecksumAlgorithm memory object = checksumAlgorithmsById[id];
        return object.descriptionUriSetId;
    }

    function getChecksumCount() external view returns (uint256) {
        return checksumCount;
    }

    function getChecksumById(uint256 id) external view returns (uint256, uint256, bytes) {
        require(id < checksumCount);

        Checksum memory object = checksumsById[id];
        return (object.algorithmId, object.resourceByteCount, object.value);
    }

    function getEncryptionAlgorithmCount() external view returns (uint256) {
        return encryptionAlgorithmCount;
    }

    function getEncryptionAlgorithmById(uint256 id) external view returns (uint256) {
        require(id < encryptionAlgorithmCount);

        EncryptionAlgorithm memory object = encryptionAlgorithmsById[id];
        return object.descriptionUriSetId;
    }

    function getChecksumPairCount() external view returns (uint256) {
        return checksumPairCount;
    }

    function getChecksumPairById(uint256 id) external view returns (uint256, uint256) {
        require(id < checksumPairCount);

        ChecksumPair memory object = checksumPairsById[id];
        return (object.encryptedChecksumId, object.decryptedChecksumId);
    }

    function getResourceCount() external view returns (uint256) {
        return resourceCount;
    }

    function getResourceById(uint256 id) external view returns (uint256, uint256, uint256) {
        require(id < resourceCount);

        Resource memory object = resourcesById[id];
        return (object.uriSetId, object.encryptionAlgorithmId, object.metaResourceSetId);
    }

    function getPublicKeyCount() external view returns (uint256) {
        return publicKeyCount;
    }

    function getPublicKeyById(uint256 id) external view returns (bytes) {
        require(id < publicKeyCount);

        PublicKey memory object = publicKeysById[id];
        return object.value;
    }

    function getResourceSetCount() external view returns (uint256) {
        return resourceSetCount;
    }

    function getResourceSetById(uint256 id) external view returns (address, uint256, uint256, uint256[], uint256) {
        require(id < resourceSetCount);

        ResourceSet memory object = resourceSetsById[id];
        return (object.creator, object.creatorPublicKeyId, object.proposalEncryptionAlgorithmId, object.uniqueResourceIdsSortedAscending, object.metaResourceSetId);
    }

    function getAgreementCount() external view returns (uint256) {
        return agreementCount;
    }

    function getAgreementById(uint256 id) external view returns (uint256, uint256) {
        require(id < agreementCount);

        Agreement memory object = agreementsById[id];
        return (object.uriSetId, object.checksumPairId);
    }

    function getAgreementSetCount() external view returns (uint256) {
        return agreementSetCount;
    }

    function getAgreementSetById(uint256 id) external view returns (uint256[]) {
        require(id < agreementSetCount);

        AgreementSet memory object = agreementSetsById[id];
        return object.uniqueAgreementIdsSortedAscending;
    }

    function getTokenTransferCount() external view returns (uint256) {
        return tokenTransferCount;
    }

    function getTokenTransferById(uint256 id) external view returns (address, address, uint256) {
        require(id < tokenTransferCount);

        TokenTransfer memory object = tokenTransfersById[id];
        return (object.source, object.destination, object.tokenCount);
    }

    function getTokenTransferSetCount() external view returns (uint256) {
        return tokenTransferSetCount;
    }

    function getTokenTransferSetById(uint256 id) external view returns (uint256[]) {
        require(id < tokenTransferSetCount);

        TokenTransferSet memory object = tokenTransferSetsById[id];
        return object.uniqueTokenTransferIdsSortedAscending;
    }

    function getProposalCount() external view returns (uint256) {
        return proposalCount;
    }

    function getProposalById(uint256 id) external view returns (uint256, address, uint256, uint256, uint256, uint256, uint256) {
        require(id < proposalCount);

        Proposal memory object = proposalsById[id];
        return (object.minimumBlockNumberForWithdrawal, object.creator, object.creatorPublicKeyId, object.acceptanceEncryptionAlgorithmId, object.resourceSetId, object.agreementSetId, object.tokenTransferSetId);
    }

    function getStateByProposalId(uint256 proposalId) external view returns (ProposalState) {
        require(proposalId < proposalCount);

        return statesByProposalId[proposalId];
    }

    // Check to see if an Ethereum account has assigned a checksum for a particular resource.
    function hasAddressAssignedResourceChecksumPair(address address_, uint256 resourceId) external view returns (bool) {
        require(resourceId < resourceCount);

        return checksumPairAssignmentsByCreatorAndResourceId[address_][resourceId];
    }

    // Retrieve the checksum assigned assigned to particular resource
    function getChecksumPairIdByAssignerAndResourceId(address assigner, uint256 resourceId) external view returns (uint256) {
        require(resourceId < resourceCount);
        require(checksumPairAssignmentsByCreatorAndResourceId[assigner][resourceId]);

        return checksumPairIdsByCreatorAndResourceId[assigner][resourceId];
    }

    // Retrieve the encrypted key to decrypt a resource referenced by an accepted proposal.
    function getEncryptedResourceDecryptionKey(uint256 proposalId, uint256 resourceId) external view returns (bytes) {
        require(proposalId < proposalCount);
        require(ProposalState.AcceptedByResourceSetCreator == statesByProposalId[proposalId]);
        require(resourceId < resourceCount);

        uint256[] memory validResourceIds = resourceSetsById[proposalsById[proposalId].resourceSetId].uniqueResourceIdsSortedAscending;
        require(0 < validResourceIds.length);

        if (1 == validResourceIds.length) {
            require(resourceId == validResourceIds[0]);

        } else {
            uint256 lowIndex = 0;
            uint256 highIndex = validResourceIds.length.sub(1);
            uint256 middleIndex = lowIndex.add(highIndex).div(2);

            while (resourceId != validResourceIds[middleIndex]) {
                require(lowIndex <= highIndex);

                if (validResourceIds[middleIndex] < resourceId) {
                    lowIndex = middleIndex.add(1);
                } else {
                    highIndex = middleIndex.sub(1);
                }

                middleIndex = lowIndex.add(highIndex).div(2);
            }
        }

        return encryptedDecryptionKeysByProposalIdAndResourceId[proposalId][resourceId];
    }

    function createUri(
        string value
    ) external returns (uint256)
    {
        require(0 < bytes(value).length);

        uint256 id = uriCount;
        uriCount = id.add(1);
        urisById[id] = Uri(
            value
        );

        return id;
    }

    function createUriSet(
        uint256[] uniqueUriIdsSortedAscending
    ) external returns (uint256)
    {
        validateIdSet(uniqueUriIdsSortedAscending, uriCount);

        uint256 id = uriSetCount;
        uriSetCount = id.add(1);
        uriSetsById[id] = UriSet(
            uniqueUriIdsSortedAscending
        );

        return id;
    }

    function createChecksumAlgorithm(
        uint256 descriptionUriSetId
    ) external returns (uint256)
    {
        require(descriptionUriSetId < uriSetCount);

        uint256 id = checksumAlgorithmCount;
        checksumAlgorithmCount = id.add(1);
        checksumAlgorithmsById[id] = ChecksumAlgorithm(
            descriptionUriSetId
        );

        return id;
    }

    function createChecksum(
        uint256 algorithmId,
        uint256 resourceByteCount,
        bytes value
    ) external returns (uint256)
    {
        require(algorithmId < checksumAlgorithmCount);
        require(0 < resourceByteCount);

        uint256 id = checksumCount;
        checksumCount = id.add(1);
        checksumsById[id] = Checksum(
            algorithmId,
            resourceByteCount,
            value
        );

        return id;
    }

    function createEncryptionAlgorithm(
        uint256 descriptionUriSetId
    ) external returns (uint256)
    {
        require(descriptionUriSetId < uriSetCount);

        uint256 id = encryptionAlgorithmCount;
        encryptionAlgorithmCount = id.add(1);
        encryptionAlgorithmsById[id] = EncryptionAlgorithm(
            descriptionUriSetId
        );

        return id;
    }

    function createChecksumPair(
        uint256 encryptedChecksumId,
        uint256 decryptedChecksumId
    ) external returns (uint256)
    {
        require(encryptedChecksumId < checksumCount);
        require(decryptedChecksumId < checksumCount);

        uint256 id = checksumPairCount;
        checksumPairCount = id.add(1);
        checksumPairsById[id] = ChecksumPair(
            encryptedChecksumId,
            decryptedChecksumId
        );

        return id;
    }

    function createResource(
        uint256 uriSetId,
        uint256 encryptionAlgorithmId,
        uint256 metaResourceSetId
    ) external returns (uint256)
    {
        require(uriSetId < uriSetCount);
        require(encryptionAlgorithmId < encryptionAlgorithmCount);
        require(metaResourceSetId < resourceSetCount);

        uint256 id = resourceCount;
        resourceCount = id.add(1);
        resourcesById[id] = Resource(
            uriSetId,
            encryptionAlgorithmId,
            metaResourceSetId
        );

        return id;
    }

    function createPublicKey(
        bytes value
    ) external returns (uint256)
    {
        uint256 id = publicKeyCount;
        publicKeyCount = id.add(1);
        publicKeysById[id] = PublicKey(
            value
        );

        return id;
    }

    function createResourceSet(
        uint256 creatorPublicKeyId,
        uint256 proposalEncryptionAlgorithmId,
        uint256[] uniqueResourceIdsSortedAscending,
        uint256 metaResourceSetId
    ) external returns (uint256)
    {
        require(creatorPublicKeyId < publicKeyCount);
        require(proposalEncryptionAlgorithmId < encryptionAlgorithmCount);
        validateIdSet(uniqueResourceIdsSortedAscending, resourceCount);
        require(metaResourceSetId < resourceSetCount);

        uint256 id = resourceSetCount;
        resourceSetCount = id.add(1);
        resourceSetsById[id] = ResourceSet(
            msg.sender,
            creatorPublicKeyId,
            proposalEncryptionAlgorithmId,
            uniqueResourceIdsSortedAscending,
            metaResourceSetId
        );

        return id;
    }

    function createAgreement(
        uint256 uriSetId,
        uint256 checksumPairId
    ) external returns (uint256)
    {
        require(uriSetId < uriSetCount);
        require(checksumPairId < checksumPairCount);

        uint256 id = agreementCount;
        agreementCount = id.add(1);
        agreementsById[id] = Agreement(
            uriSetId,
            checksumPairId
        );

        return id;
    }

    function createAgreementSet(
        uint256[] uniqueAgreementIdsSortedAscending
    ) external returns (uint256)
    {
        validateIdSet(uniqueAgreementIdsSortedAscending, agreementCount);

        uint256 id = agreementSetCount;
        agreementSetCount = id.add(1);
        agreementSetsById[id] = AgreementSet(
            uniqueAgreementIdsSortedAscending
        );

        return id;
    }

    function createTokenTransfer(
        address source,
        address destination,
        uint256 tokenCount
    ) external returns (uint256)
    {
        require(address(0) != source);
        require(address(0) != destination);
        require(0 < tokenCount);

        uint256 id = tokenTransferCount;
        tokenTransferCount = id.add(1);
        tokenTransfersById[id] = TokenTransfer(
            source,
            destination,
            tokenCount
        );

        return id;
    }

    function createTokenTransferSet(
        uint256[] uniqueTokenTransferIdsSortedAscending
    ) external returns (uint256)
    {
        validateIdSet(uniqueTokenTransferIdsSortedAscending, tokenTransferCount);

        uint256 id = tokenTransferSetCount;
        tokenTransferSetCount = id.add(1);
        tokenTransferSetsById[id] = TokenTransferSet(
            uniqueTokenTransferIdsSortedAscending
        );

        return id;
    }

    function createProposal(
        uint256 minimumBlockNumberForWithdrawal,
        uint256 creatorPublicKeyId,
        uint256 acceptanceEncryptionAlgorithmId,
        uint256 resourceSetId,
        uint256 agreementSetId,
        uint256 tokenTransferSetId
    ) external returns (uint256)
    {
        require(creatorPublicKeyId < publicKeyCount);
        require(acceptanceEncryptionAlgorithmId < encryptionAlgorithmCount);
        require(resourceSetId < resourceSetCount);
        require(agreementSetId < agreementSetCount);
        require(tokenTransferSetId < tokenTransferSetCount);

        transferTokensToEscrow(msg.sender, tokenTransferSetId);

        uint256 id = proposalCount;
        proposalCount = id.add(1);
        proposalsById[id] = Proposal(
            minimumBlockNumberForWithdrawal,
            msg.sender,
            creatorPublicKeyId,
            acceptanceEncryptionAlgorithmId,
            resourceSetId,
            agreementSetId,
            tokenTransferSetId
        );

        return id;
    }

    // Each Ethereum account may assign a 'ChecksumPair' to a resource exactly once. This ensures that each claim that a
    // checksum should match a resource is attached to a particular authority. This operation is not bound to the
    // creation of the resource because the resource's creator may not know the checksum when creating the resource.
    function assignResourceChecksumPair(
        uint256 resourceId,
        uint256 checksumPairId
    ) external
    {
        require(resourceId < resourceCount);
        require(checksumPairId < checksumPairCount);
        require(false == checksumPairAssignmentsByCreatorAndResourceId[msg.sender][resourceId]);

        checksumPairIdsByCreatorAndResourceId[msg.sender][resourceId] = checksumPairId;
        checksumPairAssignmentsByCreatorAndResourceId[msg.sender][resourceId] = true;
    }

    // This function moves a proposal to a final state of `WithdrawnByCreator' and returns tokens to the sources
    // described by the proposal's transfers.
    function withdrawProposal(
        uint256 proposalId
    ) external
    {
        require(proposalId < proposalCount);
        require(ProposalState.Pending == statesByProposalId[proposalId]);

        Proposal memory proposal = proposalsById[proposalId];
        require(msg.sender == proposal.creator);
        require(block.number >= proposal.minimumBlockNumberForWithdrawal);

        returnTokensFromEscrow(proposal.creator, proposal.tokenTransferSetId);
        statesByProposalId[proposalId] = ProposalState.WithdrawnByCreator;
    }

    // This function moves a proposal to a final state of `RejectedByResourceSetCreator' and returns tokens to the sources
    // described by the proposal's transfers.
    function rejectProposal(
        uint256 proposalId
    ) external
    {
        require(proposalId < proposalCount);
        require(ProposalState.Pending == statesByProposalId[proposalId]);

        Proposal memory proposal = proposalsById[proposalId];
        require(msg.sender == resourceSetsById[proposal.resourceSetId].creator);

        returnTokensFromEscrow(proposal.creator, proposal.tokenTransferSetId);
        statesByProposalId[proposalId] = ProposalState.RejectedByResourceSetCreator;
    }

    // This function moves a proposal to a final state of `RejectedByResourceSetCreator' and sends tokens to the
    // destinations described by the proposal's transfers.
    //
    // The caller should encrypt each decryption key corresponding
    // to each resource in the proposal's resource set first with the public key of the proposal's creator and then with
    // the private key assoicated with the public key referenced in the resource set. The caller should concatenate
    // these encrypted values and pass the resulting byte array as 'concatenatedResourceDecryptionKeys'.
    // The length of each encrypted decryption key should be provided in the 'concatenatedResourceDecryptionKeyLengths'.
    // The index of each value in 'concatenatedResourceDecryptionKeyLengths' must correspond to an index in the resource
    // set referenced by the proposal.
    function acceptProposal(
        uint256 proposalId,
        bytes concatenatedResourceDecryptionKeys,
        uint256[] concatenatedResourceDecryptionKeyLengths
    ) external
    {
        require(proposalId < proposalCount);
        require(ProposalState.Pending == statesByProposalId[proposalId]);

        Proposal memory proposal = proposalsById[proposalId];
        require(msg.sender == resourceSetsById[proposal.resourceSetId].creator);

        storeEncryptedDecryptionKeys(
            proposalId,
            concatenatedResourceDecryptionKeys,
            concatenatedResourceDecryptionKeyLengths
        );

        transferTokensFromEscrow(proposal.tokenTransferSetId);

        statesByProposalId[proposalId] = ProposalState.AcceptedByResourceSetCreator;
    }

    function validateIdSet(uint256[] uniqueIdsSortedAscending, uint256 idCount) private pure {
        if (0 < uniqueIdsSortedAscending.length) {

            uint256 id = uniqueIdsSortedAscending[0];
            require(id < idCount);

            uint256 previousId = id;
            for (uint256 index = 1; index < uniqueIdsSortedAscending.length; index = index.add(1)) {
                id = uniqueIdsSortedAscending[index];
                require(id < idCount);
                require(previousId < id);

                previousId = id;
            }
        }
    }

    function transferTokensToEscrow(address proposalCreator, uint256 tokenTransferSetId) private {
        assert(tokenTransferSetId < tokenTransferSetCount);
        assert(address(0) != proposalCreator);

        uint256[] memory tokenTransferIds = tokenTransferSetsById[tokenTransferSetId].uniqueTokenTransferIdsSortedAscending;
        for (uint256 index = 0; index < tokenTransferIds.length; index = index.add(1)) {
            uint256 tokenTransferId = tokenTransferIds[index];
            assert(tokenTransferId < tokenTransferCount);

            TokenTransfer memory tokenTransfer = tokenTransfersById[tokenTransferId];
            assert(0 < tokenTransfer.tokenCount);
            assert(address(0) != tokenTransfer.source);
            assert(address(0) != tokenTransfer.destination);

            require(tokenTransfer.tokenCount <= balances[tokenTransfer.source]);

            if (tokenTransfer.source != proposalCreator) {
                require(tokenTransfer.tokenCount <= allowed[tokenTransfer.source][proposalCreator]);

                allowed[tokenTransfer.source][proposalCreator] = allowed[tokenTransfer.source][proposalCreator].sub(tokenTransfer.tokenCount);
            }

            balances[tokenTransfer.source] = balances[tokenTransfer.source].sub(tokenTransfer.tokenCount);
            balances[address(0)] = balances[address(0)].add(tokenTransfer.tokenCount);

            Transfer(tokenTransfer.source, address(0), tokenTransfer.tokenCount);
        }
    }

    function returnTokensFromEscrow(address proposalCreator, uint256 tokenTransferSetId) private {
        assert(tokenTransferSetId < tokenTransferSetCount);
        assert(address(0) != proposalCreator);

        uint256[] memory tokenTransferIds = tokenTransferSetsById[tokenTransferSetId].uniqueTokenTransferIdsSortedAscending;
        for (uint256 index = 0; index < tokenTransferIds.length; index = index.add(1)) {
            uint256 tokenTransferId = tokenTransferIds[index];
            assert(tokenTransferId < tokenTransferCount);

            TokenTransfer memory tokenTransfer = tokenTransfersById[tokenTransferId];
            assert(0 < tokenTransfer.tokenCount);
            assert(address(0) != tokenTransfer.source);
            assert(address(0) != tokenTransfer.destination);
            assert(tokenTransfer.tokenCount <= balances[address(0)]);

            balances[tokenTransfer.source] = balances[tokenTransfer.source].add(tokenTransfer.tokenCount);
            balances[address(0)] = balances[address(0)].sub(tokenTransfer.tokenCount);

            Transfer(address(0), tokenTransfer.source, tokenTransfer.tokenCount);
        }
    }

    function transferTokensFromEscrow(uint256 tokenTransferSetId) private {
        assert(tokenTransferSetId < tokenTransferSetCount);

        uint256[] memory tokenTransferIds = tokenTransferSetsById[tokenTransferSetId].uniqueTokenTransferIdsSortedAscending;
        for (uint256 index = 0; index < tokenTransferIds.length; index = index.add(1)) {
            uint256 tokenTransferId = tokenTransferIds[index];
            assert(tokenTransferId < tokenTransferCount);

            TokenTransfer memory tokenTransfer = tokenTransfersById[tokenTransferId];
            assert(0 < tokenTransfer.tokenCount);
            assert(address(0) != tokenTransfer.source);
            assert(address(0) != tokenTransfer.destination);

            balances[address(0)] = balances[address(0)].sub(tokenTransfer.tokenCount);
            balances[tokenTransfer.destination] = balances[tokenTransfer.destination].add(tokenTransfer.tokenCount);
            Transfer(address(0), tokenTransfer.destination, tokenTransfer.tokenCount);
        }
    }

    function storeEncryptedDecryptionKeys(
        uint256 proposalId,
        bytes concatenatedEncryptedResourceDecryptionKeys,
        uint256[] encryptedResourceDecryptionKeyLengths
    ) private
    {
        assert(proposalId < proposalCount);

        uint256 resourceSetId = proposalsById[proposalId].resourceSetId;
        assert(resourceSetId < resourceSetCount);

        ResourceSet memory resourceSet = resourceSetsById[resourceSetId];
        require(resourceSet.uniqueResourceIdsSortedAscending.length == encryptedResourceDecryptionKeyLengths.length);

        uint256 concatenatedEncryptedResourceDecryptionKeysIndex = 0;
        for (uint256 resourceIndex = 0; resourceIndex < encryptedResourceDecryptionKeyLengths.length; resourceIndex = resourceIndex.add(1)) {
            bytes memory encryptedResourceDecryptionKey = new bytes(encryptedResourceDecryptionKeyLengths[resourceIndex]);
            require(0 < encryptedResourceDecryptionKey.length);

            for (uint256 encryptedResourceDecryptionKeyIndex = 0; encryptedResourceDecryptionKeyIndex < encryptedResourceDecryptionKey.length; encryptedResourceDecryptionKeyIndex = encryptedResourceDecryptionKeyIndex.add(1)) {
                require(concatenatedEncryptedResourceDecryptionKeysIndex < concatenatedEncryptedResourceDecryptionKeys.length);
                encryptedResourceDecryptionKey[encryptedResourceDecryptionKeyIndex] = concatenatedEncryptedResourceDecryptionKeys[concatenatedEncryptedResourceDecryptionKeysIndex];
                concatenatedEncryptedResourceDecryptionKeysIndex = concatenatedEncryptedResourceDecryptionKeysIndex.add(1);
            }

            uint256 resourceId = resourceSet.uniqueResourceIdsSortedAscending[resourceIndex];
            assert(resourceId < resourceCount);

            encryptedDecryptionKeysByProposalIdAndResourceId[proposalId][resourceId] = encryptedResourceDecryptionKey;
        }

        require(concatenatedEncryptedResourceDecryptionKeysIndex == concatenatedEncryptedResourceDecryptionKeys.length);
    }
}

    Contract ABI  
[{"constant":true,"inputs":[],"name":"getAgreementCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"source","type":"address"},{"name":"destination","type":"address"},{"name":"tokenCount","type":"uint256"}],"name":"createTokenTransfer","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getUriCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"uniqueAgreementIdsSortedAscending","type":"uint256[]"}],"name":"createAgreementSet","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getEncryptionAlgorithmCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"id","type":"uint256"}],"name":"getAgreementSetById","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getPublicKeyCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"uniqueTokenTransferIdsSortedAscending","type":"uint256[]"}],"name":"createTokenTransferSet","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getAgreementSetCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","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,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getTokenTransferSetCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getResourceSetCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"NULL_ENCRYPTION_ALGORITHM_ID","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"id","type":"uint256"}],"name":"getChecksumPairById","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"minimumBlockNumberForWithdrawal","type":"uint256"},{"name":"creatorPublicKeyId","type":"uint256"},{"name":"acceptanceEncryptionAlgorithmId","type":"uint256"},{"name":"resourceSetId","type":"uint256"},{"name":"agreementSetId","type":"uint256"},{"name":"tokenTransferSetId","type":"uint256"}],"name":"createProposal","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"id","type":"uint256"}],"name":"getProposalById","outputs":[{"name":"","type":"uint256"},{"name":"","type":"address"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"proposalId","type":"uint256"},{"name":"resourceId","type":"uint256"}],"name":"getEncryptedResourceDecryptionKey","outputs":[{"name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"uriSetId","type":"uint256"},{"name":"checksumPairId","type":"uint256"}],"name":"createAgreement","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getChecksumAlgorithmCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"id","type":"uint256"}],"name":"getTokenTransferSetById","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"encryptedChecksumId","type":"uint256"},{"name":"decryptedChecksumId","type":"uint256"}],"name":"createChecksumPair","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getChecksumCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"id","type":"uint256"}],"name":"getAgreementById","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ONE_BILLION","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"EMPTY_RESOURCE_SET_ID","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_subtractedValue","type":"uint256"}],"name":"decreaseApproval","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"id","type":"uint256"}],"name":"getChecksumAlgorithmById","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"algorithmId","type":"uint256"},{"name":"resourceByteCount","type":"uint256"},{"name":"value","type":"bytes"}],"name":"createChecksum","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"uriSetId","type":"uint256"},{"name":"encryptionAlgorithmId","type":"uint256"},{"name":"metaResourceSetId","type":"uint256"}],"name":"createResource","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"proposalId","type":"uint256"}],"name":"getStateByProposalId","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"descriptionUriSetId","type":"uint256"}],"name":"createEncryptionAlgorithm","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"id","type":"uint256"}],"name":"getUriById","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"id","type":"uint256"}],"name":"getUriSetById","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"id","type":"uint256"}],"name":"getTokenTransferById","outputs":[{"name":"","type":"address"},{"name":"","type":"address"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"id","type":"uint256"}],"name":"getResourceSetById","outputs":[{"name":"","type":"address"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256[]"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"uniqueUriIdsSortedAscending","type":"uint256[]"}],"name":"createUriSet","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MAXIMUM_64_BIT_SIGNED_INTEGER_VALUE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"descriptionUriSetId","type":"uint256"}],"name":"createChecksumAlgorithm","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"id","type":"uint256"}],"name":"getEncryptionAlgorithmById","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getResourceCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"value","type":"bytes"}],"name":"createPublicKey","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getUriSetCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"NULL_ENCRYPTION_ALGORITHM_DESCRIPTION_URI_ID","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ONE_QUINTILLION","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"proposalId","type":"uint256"}],"name":"rejectProposal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"id","type":"uint256"}],"name":"getChecksumById","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getProposalCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"address_","type":"address"},{"name":"resourceId","type":"uint256"}],"name":"hasAddressAssignedResourceChecksumPair","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"id","type":"uint256"}],"name":"getResourceById","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"value","type":"string"}],"name":"createUri","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"assigner","type":"address"},{"name":"resourceId","type":"uint256"}],"name":"getChecksumPairIdByAssignerAndResourceId","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getChecksumPairCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_addedValue","type":"uint256"}],"name":"increaseApproval","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"id","type":"uint256"}],"name":"getPublicKeyById","outputs":[{"name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"proposalId","type":"uint256"}],"name":"withdrawProposal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"EMPTY_PUBLIC_KEY_ID","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"creatorPublicKeyId","type":"uint256"},{"name":"proposalEncryptionAlgorithmId","type":"uint256"},{"name":"uniqueResourceIdsSortedAscending","type":"uint256[]"},{"name":"metaResourceSetId","type":"uint256"}],"name":"createResourceSet","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"resourceId","type":"uint256"},{"name":"checksumPairId","type":"uint256"}],"name":"assignResourceChecksumPair","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"NULL_ENCRYPTION_ALGORITHM_DESCRIPTION_URI_SET_ID","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"proposalId","type":"uint256"},{"name":"concatenatedResourceDecryptionKeys","type":"bytes"},{"name":"concatenatedResourceDecryptionKeyLengths","type":"uint256[]"}],"name":"acceptProposal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getTokenTransferCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"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"}]

  Contract Creation Code Switch To Opcodes View
60606040526000600455600060065560006008556000600a556000600c556000600e55600060105560006012556000601455600060165560006018556000601a556000601c556000601e5534156200005657600080fd5b62000060620005e6565b6200007e633b9aca00806401000000006200390d620004f482021704565b670de0b6b3a7640000146200008f57fe5b670de0b6b3a76400006001819055600160a060020a033316600081815260208190526040808220849055919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91905190815260200160405180910390a360125415620000fa57fe5b6020604051908101604052806000604051805910620001165750595b818152601f19601f8301168101602001604052905090526000805260116020527f4ad3b33220dddc71b994a52d72c06b10862965f7d926534c05c00fb7e819e7b78151819080516200016d929160200190620005f8565b50506012546200018e9150600164010000000062002ba56200052e82021704565b60128190556001146200019d57fe5b60045415620001a857fe5b60206040519081016040528060606040519081016040908152602d82527f68747470733a2f2f656e2e77696b6970656469612e6f72672f77696b692f4e756020808401919091527f6c6c5f656e6372797074696f6e0000000000000000000000000000000000000091830191909152915260008052600390527f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff81518190805162000258929160200190620005f8565b5050600454620002799150600164010000000062002ba56200052e82021704565b60048190556001146200028857fe5b600654156200029357fe5b6001604051805910620002a35750595b90808252806020026020018201604052509050600081600081518110620002c657fe5b60209081029091010152600454620002ee90829064010000000062002bbb6200053e82021704565b60206040519081016040528181526000805260056020527f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc8151819080516200033c9291602001906200067d565b50506006546200035d9150600164010000000062002ba56200052e82021704565b60068190556001146200036c57fe5b600c54156200037757fe5b602060405190810160405260008082528052600b6020527fdf7de25b7f1fd6d0b5205f0e18f1f35bd7b8d84cce336588d184533ce43a6f768151905550600c54620003d290600164010000000062002ba56200052e82021704565b600c819055600114620003e157fe5b60145415620003ec57fe5b60a06040519081016040528033600160a060020a0316815260200160008152602001600081526020016000604051805910620004255750595b81815260209182028101820160405282526000918101829052908052601390527f8fa6efc3be94b5b348b21fea823fe8d100408cee9b7f90524494500445d8ff6c81518154600160a060020a031916600160a060020a03919091161781556020820151816001015560408201518160020155606082015181600301908051620004b39291602001906200067d565b50608082015160049091015550601454620004de90600164010000000062002ba56200052e82021704565b6014819055600114620004ed57fe5b50620006da565b60008083151562000509576000915062000527565b508282028284828115156200051a57fe5b04146200052357fe5b8091505b5092915050565b6000828201838110156200052357fe5b6000806000845160001015620005df57846000815181106200055c57fe5b9060200190602002015192508383106200057557600080fd5b5081905060015b8451811015620005df578481815181106200059357fe5b906020019060200201519250838310620005ac57600080fd5b828210620005b957600080fd5b829150620005d781600164010000000062002ba56200052e82021704565b90506200057c565b5050505050565b60206040519081016040526000815290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200063b57805160ff19168380011785556200066b565b828001600101855582156200066b579182015b828111156200066b5782518255916020019190600101906200064e565b5062000679929150620006ba565b5090565b8280548282559060005260206000209081019282156200066b57916020028201828111156200066b5782518255916020019190600101906200064e565b620006d791905b80821115620006795760008155600101620006c1565b90565b6139a480620006ea6000396000f30060606040526004361061032b5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416628bed3e811461033057806301c0954b1461035557806302d055311461037d57806306fdde03146103905780630828baa21461041a578063095ea7b3146104385780630f732bdc1461046e578063143c28301461048157806318160ddd146104ea5780631880692f146104fd57806320e190a41461051057806322b6fe9e1461052e57806323b872dd1461054157806327d51979146105695780632a61d47b1461057c5780632be6ec1f1461058f578063313ce567146105a257806334116fd8146105cb57806334f99b59146105f95780633656de211461061e5780633befcd631461067a57806344ce97c914610693578063466c3a2b146106ac5780634dfe165c146106bf5780634e006d83146106d55780635044b112146106ee578063573fb624146107015780635d12fc0c14610717578063650619571461058f578063661884631461072a5780636928e1421461074c5780636d8062ee1461076257806370a08231146107885780637773c36e146107a75780637ad669e9146107c35780637b7179fc146107fd5780637e2d0ebc14610813578063820a5b191461082957806387181b101461083f57806389f90872146108825780638e5653d41461091a57806395d89b4114610938578063970afd9b1461094b578063980619a71461095e5780639bad7720146109745780639f96de0f1461098a578063a75c127b1461099d578063a9059cbb146109bb578063b086d5aa146109dd578063b154dea61461058f578063b663dc0a146109f0578063bc28d87814610a03578063bc824a7714610a1b578063c08cc02d14610ab7578063c18d958214610aca578063c798192214610aec578063cbb9d38514610b26578063d206703514610b44578063d6f22e6914610b66578063d73dd62314610b79578063dd62ed3e14610b9b578063e0db1b9114610bc0578063e1f02ffa14610bd6578063ea32c95e1461058f578063f26be2a814610bec578063f3fbad2514610c15578063fab3ebb11461058f578063feadaa1b14610c2e578063feaf087214610c5c575b600080fd5b341561033b57600080fd5b610343610c6f565b60405190815260200160405180910390f35b341561036057600080fd5b610343600160a060020a0360043581169060243516604435610c76565b341561038857600080fd5b610343610d72565b341561039b57600080fd5b6103a3610d78565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156103df5780820151838201526020016103c7565b50505050905090810190601f16801561040c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561042557600080fd5b6103436004803560248101910135610daf565b341561044357600080fd5b61045a600160a060020a0360043516602435610e72565b604051901515815260200160405180910390f35b341561047957600080fd5b610343610ede565b341561048c57600080fd5b610497600435610ee4565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156104d65780820151838201526020016104be565b505050509050019250505060405180910390f35b34156104f557600080fd5b610343610f83565b341561050857600080fd5b610343610f89565b341561051b57600080fd5b6103436004803560248101910135610f8f565b341561053957600080fd5b610343611043565b341561054c57600080fd5b61045a600160a060020a0360043581169060243516604435611049565b341561057457600080fd5b6103436111b7565b341561058757600080fd5b6103436111bd565b341561059a57600080fd5b6103436111c3565b34156105ad57600080fd5b6105b56111c8565b60405160ff909116815260200160405180910390f35b34156105d657600080fd5b6105e16004356111cd565b60405191825260208201526040908101905180910390f35b341561060457600080fd5b61034360043560243560443560643560843560a435611221565b341561062957600080fd5b610634600435611359565b604051968752600160a060020a0390951660208701526040808701949094526060860192909252608085015260a084015260c083019190915260e0909101905180910390f35b341561068557600080fd5b6103a360043560243561141a565b341561069e57600080fd5b6103436004356024356116bc565b34156106b757600080fd5b61034361172f565b34156106ca57600080fd5b610497600435611735565b34156106e057600080fd5b6103436004356024356117d2565b34156106f957600080fd5b610343611845565b341561070c57600080fd5b6105e160043561184b565b341561072257600080fd5b61034361189f565b341561073557600080fd5b61045a600160a060020a03600435166024356118a7565b341561075757600080fd5b6103436004356119a1565b341561076d57600080fd5b610343600480359060248035916044359182019101356119e2565b341561079357600080fd5b610343600160a060020a0360043516611aa9565b34156107b257600080fd5b610343600435602435604435611ac4565b34156107ce57600080fd5b6107d9600435611b57565b604051808260038111156107e957fe5b60ff16815260200191505060405180910390f35b341561080857600080fd5b610343600435611b7e565b341561081e57600080fd5b6103a3600435611bcf565b341561083457600080fd5b610497600435611cae565b341561084a57600080fd5b610855600435611d4b565b604051600160a060020a039384168152919092166020820152604080820192909252606001905180910390f35b341561088d57600080fd5b610898600435611dc6565b6040518086600160a060020a0316600160a060020a0316815260200185815260200184815260200180602001838152602001828103825284818151815260200191508051906020019060200280838360005b838110156109025780820151838201526020016108ea565b50505050905001965050505050505060405180910390f35b341561092557600080fd5b6103436004803560248101910135611eda565b341561094357600080fd5b6103a3611f8e565b341561095657600080fd5b610343611fc5565b341561096957600080fd5b610343600435611fd1565b341561097f57600080fd5b610343600435612022565b341561099557600080fd5b610343612063565b34156109a857600080fd5b6103436004803560248101910135612069565b34156109c657600080fd5b61045a600160a060020a03600435166024356120e4565b34156109e857600080fd5b6103436121e4565b34156109fb57600080fd5b6103436121ea565b3415610a0e57600080fd5b610a196004356121f6565b005b3415610a2657600080fd5b610a31600435612304565b6040518084815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610a7a578082015183820152602001610a62565b50505050905090810190601f168015610aa75780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b3415610ac257600080fd5b610343612416565b3415610ad557600080fd5b61045a600160a060020a036004351660243561241c565b3415610af757600080fd5b610b02600435612459565b60405180848152602001838152602001828152602001935050505060405180910390f35b3415610b3157600080fd5b61034360048035602481019101356124c8565b3415610b4f57600080fd5b610343600160a060020a0360043516602435612550565b3415610b7157600080fd5b6103436125bc565b3415610b8457600080fd5b61045a600160a060020a03600435166024356125c2565b3415610ba657600080fd5b610343600160a060020a0360043581169060243516612666565b3415610bcb57600080fd5b6103a3600435612691565b3415610be157600080fd5b610a19600435612738565b3415610bf757600080fd5b61034360048035906024803591604435918201910135606435612841565b3415610c2057600080fd5b610a1960043560243561299f565b3415610c3957600080fd5b610a19600480359060248035808201929081013591604435908101910135612a32565b3415610c6757600080fd5b610343612b9f565b6016545b90565b600080600160a060020a0385161515610c8e57600080fd5b600160a060020a0384161515610ca357600080fd5b6000839010610cb157600080fd5b50601a54610cc681600163ffffffff612ba516565b601a5560606040519081016040908152600160a060020a038088168352861660208084019190915281830186905260008481526019909152208151815473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0391909116178155602082015160018201805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039290921691909117905560408201516002909101555090509392505050565b60045490565b60408051908101604052600781527f4679736963616c00000000000000000000000000000000000000000000000000602082015281565b600080610dec84848080602002602001604051908101604052809392919081815260200183836020028082843750506016549350612bbb92505050565b50601854610e0181600163ffffffff612ba516565b601855602060405190810160405280858580806020026020016040519081016040528093929190818152602001838360200280828437505050929093525050506000828152601760205260409020815181908051610e6392916020019061370f565b509050508091505b5092915050565b600160a060020a03338116600081815260026020908152604080832094871680845294909152808220859055909291907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a350600192915050565b600c5490565b610eec61375a565b610ef461376c565b6018548310610f0257600080fd5b6000838152601760209081526040918290209151908101604052908160008201805480602002602001604051908101604052809291908181526020018280548015610f6c57602002820191906000526020600020905b815481526020019060010190808311610f58575b505050505081525050905080600001519392505050565b60015490565b60125490565b600080610fcc8484808060200260200160405190810160405280939291908181526020018383602002808284375050601a549350612bbb92505050565b50601c54610fe181600163ffffffff612ba516565b601c55602060405190810160405280858580806020026020016040519081016040528093929190818152602001838360200280828437505050929093525050506000828152601b60205260409020815181908051610e6392916020019061370f565b60185490565b6000600160a060020a038316151561106057600080fd5b600160a060020a03841660009081526020819052604090205482111561108557600080fd5b600160a060020a03808516600090815260026020908152604080832033909416835292905220548211156110b857600080fd5b600160a060020a0384166000908152602081905260409020546110e1908363ffffffff612c5116565b600160a060020a038086166000908152602081905260408082209390935590851681522054611116908363ffffffff612ba516565b600160a060020a038085166000908152602081815260408083209490945587831682526002815283822033909316825291909152205461115c908363ffffffff612c5116565b600160a060020a03808616600081815260026020908152604080832033861684529091529081902093909355908516916000805160206139398339815191529085905190815260200160405180910390a35060019392505050565b601c5490565b60145490565b600081565b600981565b6000806111d8613785565b600e5484106111e657600080fd5b6000848152600d6020526040908190209080519081016040528154815260019091015460208201529050805181602001519250925050915091565b6000806012548710151561123457600080fd5b600c54861061124257600080fd5b601454851061125057600080fd5b601854841061125e57600080fd5b601c54831061126c57600080fd5b6112763384612c63565b50601e5461128b81600163ffffffff612ba516565b601e5560e06040519081016040528089815260200133600160a060020a0316815260200188815260200187815260200186815260200185815260200184815250601d600083815260200190815260200160002060008201518155602082015160018201805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039290921691909117905560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c08201516006909101555090509695505050505050565b600080600080600080600061136c61379c565b601e54891061137a57600080fd5b6000898152601d6020526040908190209060e090519081016040908152825482526001830154600160a060020a031660208301526002830154908201526003820154606082015260048201546080820152600582015460a082015260069091015460c08201529050805181602001518260400151836060015184608001518560a001518660c00151959f949e50929c50909a509850965090945092505050565b61142261375a565b61142a61375a565b6000806000601e548710151561143f57600080fd5b6000878152601f602052604090205460ff16600381111561145c57fe5b60031461146857600080fd5b601054861061147657600080fd5b6000878152601d6020908152604080832060040154835260138252918290206003018054909290918281020190519081016040528092919081815260200182805480156114e257602002820191906000526020600020905b8154815260200190600101908083116114ce575b5050505050935083516000106114f757600080fd5b835160011415611528578360008151811061150e57fe5b90602001906020020151861461152357600080fd5b6115f3565b6000925061153f600185519063ffffffff612c5116565b91506115626002611556858563ffffffff612ba516565b9063ffffffff612fb816565b90505b83818151811061157157fe5b9060200190602002015186146115f3578183111561158e57600080fd5b8584828151811061159b57fe5b9060200190602002015110156115c3576115bc81600163ffffffff612ba516565b92506115d7565b6115d481600163ffffffff612c5116565b91505b6115ec6002611556858563ffffffff612ba516565b9050611565565b6020600088815260200190815260200160002060008781526020019081526020016000208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156116ab5780601f10611680576101008083540402835291602001916116ab565b820191906000526020600020905b81548152906001019060200180831161168e57829003601f168201915b505050505094505050505092915050565b600080600654841015156116cf57600080fd5b600e5483106116dd57600080fd5b506016546116f281600163ffffffff612ba516565b6016556040805190810160409081528582526020808301869052600084815260159091522081518155602082015160019091015550905092915050565b60085490565b61173d61375a565b61174561376c565b601c54831061175357600080fd5b6000838152601b60209081526040918290209151908101604052908160008201805480602002602001604051908101604052809291908181526020018280548015610f6c5760200282019190600052602060002090815481526020019060010190808311610f5857505050505081525050905080600001519392505050565b600080600a54841015156117e557600080fd5b600a5483106117f357600080fd5b50600e5461180881600163ffffffff612ba516565b600e5560408051908101604090815285825260208083018690526000848152600d9091522081518155602082015160019091015550905092915050565b600a5490565b600080611856613785565b601654841061186457600080fd5b600084815260156020526040908190209080519081016040528154815260019091015460208201529050805181602001519250925050915091565b633b9aca0081565b600160a060020a0333811660009081526002602090815260408083209386168352929052908120548083111561190457600160a060020a03338116600090815260026020908152604080832093881683529290529081205561193b565b611914818463ffffffff612c5116565b600160a060020a033381166000908152600260209081526040808320938916835292905220555b600160a060020a0333811660008181526002602090815260408083209489168084529490915290819020547f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925915190815260200160405180910390a35060019392505050565b60006119ab61375a565b60085483106119b957600080fd5b600083815260076020908152604091829020915190810160405290548152905080519392505050565b600080600854861015156119f557600080fd5b6000859010611a0357600080fd5b50600a54611a1881600163ffffffff612ba516565b600a5560606040519081016040528087815260200186815260200185858080601f01602080910402602001604051908101604052818152929190602084018383808284375050509290935250505060008281526009602052604090208151815560208201518160010155604082015181600201908051611a9c9291602001906137e3565b5091979650505050505050565b600160a060020a031660009081526020819052604090205490565b60008060065485101515611ad757600080fd5b600c548410611ae557600080fd5b6014548310611af357600080fd5b50601054611b0881600163ffffffff612ba516565b6010556060604051908101604090815286825260208083018790528183018690526000848152600f90915220815181556020820151816001015560408201516002909101555090509392505050565b601e546000908210611b6857600080fd5b506000908152601f602052604090205460ff1690565b60008060065483101515611b9157600080fd5b50600c54611ba681600163ffffffff612ba516565b600c55602060405190810160409081528482526000838152600b60205220815190555092915050565b611bd761375a565b611bdf61376c565b6004548310611bed57600080fd5b60008381526003602090815260409182902091519081016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610f6c5780601f10611c7657610100808354040283529160200191610f6c565b820191906000526020600020905b815481529060010190602001808311611c8457505050919092525091925082915050519392505050565b611cb661375a565b611cbe61376c565b6006548310611ccc57600080fd5b6000838152600560209081526040918290209151908101604052908160008201805480602002602001604051908101604052809291908181526020018280548015610f6c5760200282019190600052602060002090815481526020019060010190808311610f5857505050505081525050905080600001519392505050565b6000806000611d58613850565b601a548510611d6657600080fd5b60008581526019602052604090819020906060905190810160409081528254600160a060020a0390811683526001840154166020830152600290920154918101919091529050805181602001518260400151935093509350509193909250565b6000806000611dd361375a565b6000611ddd613870565b6014548710611deb57600080fd5b600087815260136020526040908190209060a0905190810160405290816000820160009054906101000a9004600160a060020a0316600160a060020a0316600160a060020a03168152602001600182015481526020016002820154815260200160038201805480602002602001604051908101604052809291908181526020018280548015611e9957602002820191906000526020600020905b815481526020019060010190808311611e85575b50505050508152602001600482015481525050905080600001518160200151826040015183606001518460800151939b929a50909850965090945092505050565b600080611f1784848080602002602001604051908101604052809392919081815260200183836020028082843750506004549350612bbb92505050565b50600654611f2c81600163ffffffff612ba516565b600655602060405190810160405280858580806020026020016040519081016040528093929190818152602001838360200280828437505050929093525050506000828152600560205260409020815181908051610e6392916020019061370f565b60408051908101604052600381527f4659530000000000000000000000000000000000000000000000000000000000602082015281565b677fffffffffffffff81565b60008060065483101515611fe457600080fd5b50600854611ff981600163ffffffff612ba516565b600855602060405190810160409081528482526000838152600760205220815190555092915050565b600061202c61375a565b600c54831061203a57600080fd5b6000838152600b6020908152604091829020915190810160405290548152905080519392505050565b60105490565b60125460009061208081600163ffffffff612ba516565b60125560206040519081016040528085858080601f0160208091040260200160405190810160405281815292919060208401838380828437505050929093525050506000828152601160205260409020815181908051610e639291602001906137e3565b6000600160a060020a03831615156120fb57600080fd5b600160a060020a03331660009081526020819052604090205482111561212057600080fd5b600160a060020a033316600090815260208190526040902054612149908363ffffffff612c5116565b600160a060020a03338116600090815260208190526040808220939093559085168152205461217e908363ffffffff612ba516565b60008085600160a060020a0316600160a060020a031681526020019081526020016000208190555082600160a060020a031633600160a060020a03166000805160206139398339815191528460405190815260200160405180910390a350600192915050565b60065490565b670de0b6b3a764000081565b6121fe61379c565b601e54821061220c57600080fd5b6000828152601f602052604090205460ff16600381111561222957fe5b1561223357600080fd5b6000828152601d6020526040908190209060e090519081016040908152825482526001830154600160a060020a0316602083015260028301549082015260038201546060820152600482015460808201908152600583015460a083015260069092015460c0820152915060139060009051815260208101919091526040016000205433600160a060020a039081169116146122cd57600080fd5b6122df81602001518260c00151612fcf565b6000828152601f6020526040902080546002919060ff19166001835b02179055505050565b60008061230f61375a565b6123176138af565b600a54851061232557600080fd5b60008581526009602052604090819020906060905190810160405290816000820154815260200160018201548152602001600282018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156123ee5780601f106123c3576101008083540402835291602001916123ee565b820191906000526020600020905b8154815290600101906020018083116123d157829003601f168201915b5050505050815250509050806000015181602001518260400151919790965090945092505050565b601e5490565b601054600090821061242d57600080fd5b50600160a060020a03919091166000908152602160209081526040808320938352929052205460ff1690565b60008060006124666138d1565b601054851061247457600080fd5b6000858152600f602052604090819020906060905190810160409081528254825260018301546020830152600290920154918101919091529050805181602001518260400151935093509350509193909250565b6000808281106124d757600080fd5b506004546124ec81600163ffffffff612ba516565b60045560206040519081016040528085858080601f0160208091040260200160405190810160405281815292919060208401838380828437505050929093525050506000828152600360205260409020815181908051610e639291602001906137e3565b601054600090821061256157600080fd5b600160a060020a038316600090815260216020908152604080832085845290915290205460ff16151561259357600080fd5b50600160a060020a03919091166000908152602260209081526040808320938352929052205490565b600e5490565b600160a060020a0333811660009081526002602090815260408083209386168352929052908120546125fa908363ffffffff612ba516565b600160a060020a0333811660008181526002602090815260408083209489168084529490915290819020849055919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591905190815260200160405180910390a350600192915050565b600160a060020a03918216600090815260026020908152604080832093909416825291909152205490565b61269961375a565b6126a161376c565b60125483106126af57600080fd5b60008381526011602090815260409182902091519081016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610f6c5780601f10611c7657610100808354040283529160200191610f6c565b61274061379c565b601e54821061274e57600080fd5b6000828152601f602052604090205460ff16600381111561276b57fe5b1561277557600080fd5b6000828152601d6020526040908190209060e090519081016040908152825482526001830154600160a060020a0316602083019081526002840154918301919091526003830154606083015260048301546080830152600583015460a083015260069092015460c0820152915051600160a060020a031633600160a060020a031614151561280257600080fd5b805143101561281057600080fd5b61282281602001518260c00151612fcf565b6000828152601f6020526040902080546001919060ff191682806122fb565b6000806012548710151561285457600080fd5b600c54861061286257600080fd5b61289c85858080602002602001604051908101604052809392919081815260200183836020028082843750506010549350612bbb92505050565b60145483106128aa57600080fd5b506014546128bf81600163ffffffff612ba516565b60145560a06040519081016040528033600160a060020a03168152602001888152602001878152602001868680806020026020016040519081016040528093929190818152602001838360200280828437505050928452505050602090810185905260008381526013909152604090208151815473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0391909116178155602082015181600101556040820151816002015560608201518160030190805161298792916020019061370f565b50608082015160049091015550905095945050505050565b60105482106129ad57600080fd5b600e5481106129bb57600080fd5b600160a060020a033316600090815260216020908152604080832085845290915290205460ff16156129ec57600080fd5b600160a060020a0333166000818152602260209081526040808320868452825280832094909455918152602182528281209381529290529020805460ff19166001179055565b612a3a61379c565b601e548610612a4857600080fd5b6000868152601f602052604090205460ff166003811115612a6557fe5b15612a6f57600080fd5b6000868152601d6020526040908190209060e090519081016040908152825482526001830154600160a060020a0316602083015260028301549082015260038201546060820152600482015460808201908152600583015460a083015260069092015460c0820152915060139060009051815260208101919091526040016000205433600160a060020a03908116911614612b0957600080fd5b612b728686868080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050508585808060200260200160405190810160405280939291908181526020018383602002808284375061321f945050505050565b612b7f8160c001516134ed565b50505060009283525050601f60205260409020805460ff19166003179055565b601a5490565b600082820183811015612bb457fe5b9392505050565b6000806000845160001015612c4a5784600081518110612bd757fe5b906020019060200201519250838310612bef57600080fd5b5081905060015b8451811015612c4a57848181518110612c0b57fe5b906020019060200201519250838310612c2357600080fd5b828210612c2f57600080fd5b829150612c4381600163ffffffff612ba516565b9050612bf6565b5050505050565b600082821115612c5d57fe5b50900390565b612c6b61375a565b600080612c76613850565b601c548510612c8157fe5b600160a060020a0386161515612c9357fe5b601b6000868152602001908152602001600020600001805480602002602001604051908101604052809291908181526020018280548015612cf357602002820191906000526020600020905b815481526020019060010190808311612cdf575b50505050509350600092505b8351831015612fb057838381518110612d1457fe5b90602001906020020151601a549092508210612d2c57fe5b60008281526019602052604090819020906060905190810160409081528254600160a060020a0390811683526001840154166020830152600290920154918101918252915051600010612d7b57fe5b8051600160a060020a03161515612d8e57fe5b8060200151600160a060020a03161515612da457fe5b6000808251600160a060020a0316600160a060020a031681526020019081526020016000205481604001511115612dda57600080fd5b600160a060020a0386168151600160a060020a031614612ec357600260008251600160a060020a0316600160a060020a03168152602001908152602001600020600087600160a060020a0316600160a060020a031681526020019081526020016000205481604001511115612e4e57600080fd5b612e928160400151600260008451600160a060020a03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff612c5116565b600260008351600160a060020a03908116825260208083019390935260409182016000908120918b16815292529020555b612ef681604001516000808451600160a060020a031681526020810191909152604001600020549063ffffffff612c5116565b6000808351600160a060020a0316600160a060020a0316815260200190815260200160002081905550612f4b81604001516000808052602052600080516020613959833981519152549063ffffffff612ba516565b60008080526020819052600080516020613959833981519152919091558151600160a060020a0316600080516020613939833981519152836040015160405190815260200160405180910390a3612fa983600163ffffffff612ba516565b9250612cff565b505050505050565b6000808284811515612fc657fe5b04949350505050565b612fd761375a565b600080612fe2613850565b601c548510612fed57fe5b600160a060020a0386161515612fff57fe5b601b600086815260200190815260200160002060000180548060200260200160405190810160405280929190818152602001828054801561305f57602002820191906000526020600020905b81548152602001906001019080831161304b575b50505050509350600092505b8351831015612fb05783838151811061308057fe5b90602001906020020151601a54909250821061309857fe5b60008281526019602052604090819020906060905190810160409081528254600160a060020a03908116835260018401541660208301526002909201549181019182529150516000106130e757fe5b8051600160a060020a031615156130fa57fe5b8060200151600160a060020a0316151561311057fe5b6000808052602052600080516020613959833981519152546040820151111561313557fe5b61316881604001516000808451600160a060020a031681526020810191909152604001600020549063ffffffff612ba516565b6000808351600160a060020a0316600160a060020a03168152602001908152602001600020819055506131bd81604001516000808052602052600080516020613959833981519152549063ffffffff612c5116565b6000808052602052600080516020613959833981519152558051600160a060020a03166000600080516020613939833981519152604084015160405190815260200160405180910390a361321883600163ffffffff612ba516565b925061306b565b6000613229613870565b60008061323461375a565b600080601e548a10151561324457fe5b60008a8152601d6020526040902060040154601454909750871061326457fe5b600087815260136020526040908190209060a0905190810160405290816000820160009054906101000a9004600160a060020a0316600160a060020a0316600160a060020a0316815260200160018201548152602001600282015481526020016003820180548060200260200160405190810160405280929190818152602001828054801561331257602002820191906000526020600020905b8154815260200190600101908083116132fe575b50505050508152602001600482015481525050955087518660600151511461333957600080fd5b60009450600093505b87518410156134d45787848151811061335757fe5b9060200190602002015160405180591061336e5750595b818152601f19601f830116810160200160405290509250825160001061339357600080fd5b600091505b825182101561346b57885185106133ae57600080fd5b8885815181106133ba57fe5b01602001517f010000000000000000000000000000000000000000000000000000000000000090047f01000000000000000000000000000000000000000000000000000000000000000283838151811061341057fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061345185600163ffffffff612ba516565b945061346482600163ffffffff612ba516565b9150613398565b8560600151848151811061347b57fe5b90602001906020020151601054909150811061349357fe5b60008a81526020808052604080832084845290915290208380516134bb9291602001906137e3565b506134cd84600163ffffffff612ba516565b9350613342565b885185146134e157600080fd5b50505050505050505050565b6134f561375a565b600080613500613850565b601c54851061350b57fe5b601b600086815260200190815260200160002060000180548060200260200160405190810160405280929190818152602001828054801561356b57602002820191906000526020600020905b815481526020019060010190808311613557575b50505050509350600092505b8351831015612c4a5783838151811061358c57fe5b90602001906020020151601a5490925082106135a457fe5b60008281526019602052604090819020906060905190810160409081528254600160a060020a03908116835260018401541660208301526002909201549181019182529150516000106135f357fe5b8051600160a060020a0316151561360657fe5b8060200151600160a060020a0316151561361c57fe5b61364881604001516000808052602052600080516020613959833981519152549063ffffffff612c5116565b60008080526020526000805160206139598339815191525561369660408201516000808460200151600160a060020a031681526020810191909152604001600020549063ffffffff612ba516565b6000808360200151600160a060020a0316600160a060020a03168152602001908152602001600020819055508060200151600160a060020a03166000600080516020613939833981519152604084015160405190815260200160405180910390a361370883600163ffffffff612ba516565b9250613577565b82805482825590600052602060002090810192821561374a579160200282015b8281111561374a57825182559160200191906001019061372f565b506137569291506138f3565b5090565b60206040519081016040526000815290565b60206040519081016040528061378061375a565b905290565b604080519081016040526000808252602082015290565b60e060405190810160405280600081526020016000600160a060020a0316815260200160008152602001600081526020016000815260200160008152602001600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061382457805160ff191683800117855561374a565b8280016001018555821561374a579182018281111561374a57825182559160200191906001019061372f565b606060405190810160409081526000808352602083018190529082015290565b60a0604051908101604052806000600160a060020a0316815260200160008152602001600081526020016138a261375a565b8152602001600081525090565b606060405190810160405280600081526020016000815260200161378061375a565b6060604051908101604052806000815260200160008152602001600081525090565b610c7391905b8082111561375657600081556001016138f9565b6000808315156139205760009150610e6b565b5082820282848281151561393057fe5b0414612bb457fe00ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5a165627a7a723058200fb0c3cbc8d416f4de6c6e803e18100f4a7e09d3da8bf366c4c066a943f890510029

   Swarm Source:
bzzr://0fb0c3cbc8d416f4de6c6e803e18100f4a7e09d3da8bf366c4c066a943f89051

 

View All
Block Age txn Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward
Make sure to use the "downvote" button for any spammy posts, and the "upvote" for interesting conversations.