Sponsored:   LH-CRYPTO - 200 instruments (BTC, EUR, GOLD, OIL, SHARES). Leverage up to 1:500. OPEN ACCOUNT
Contract Overview
Balance: 0 Ether
Ether Value: $0
Transactions: 27311 txns
Misc:
Address Watch: Add To Watch List
Contract Creator: 0xf31930014f57b93496f967698f92b2430c62fc43at txn 0x5e3a9db209f5728869b25104740a33a52b150d8fbdc3cd019ab90411a4ca48be
Token Balance:
 Latest 25 transactions from a total of 27311 transactions

TxHash Age From To Value [TxFee]
0x5276eb3113d829543cd0cf7fddc8f3abe6efd92f70674a66ec04f33bd8558c4018 days 6 mins ago0xf31930014f57b93496f967698f92b2430c62fc43  IN   0x899f3b22908ff5674f8237c321ab3094178876060 Ether0.000214936
0xb60ddb061c7265c5db554296a5f7c8389096d95a9eca073824313b543b55be0318 days 21 mins ago0xf31930014f57b93496f967698f92b2430c62fc43  IN   0x899f3b22908ff5674f8237c321ab3094178876060 Ether0.000563712
0xa79e2d456680525f5b688008796ea726555fddfb6b1e8c5c70434bd76cef346a19 days 4 hrs ago0xf31930014f57b93496f967698f92b2430c62fc43  IN   0x899f3b22908ff5674f8237c321ab3094178876060 Ether0.0005888
0x3ff54016e81abe70adc95818e15da73d84ec9b2946aa89f613ef30bcafdcc3e020 days 21 mins ago0xf31930014f57b93496f967698f92b2430c62fc43  IN   0x899f3b22908ff5674f8237c321ab3094178876060 Ether0.0005888
0x8d7ecce08081ca9a84099fe8dc5713a3f3e3bbddd91756b5e3d045db48e598b520 days 36 mins ago0xf31930014f57b93496f967698f92b2430c62fc43  IN   0x899f3b22908ff5674f8237c321ab3094178876060 Ether0.000563712
0xd43126cc611b88326c69acb22592985678e7acef13e83016959c88c2200a825476 days 1 hr ago0xcb23dc840271c26ad9ec3588dbfc2c7f6e730641  IN   0x899f3b22908ff5674f8237c321ab3094178876060 Ether0.00036276
0xfe33aa154a23c6a7a26e6507b97b96f782b8186185f1d5a2b7217637e5b52d8776 days 1 hr ago0xcb23dc840271c26ad9ec3588dbfc2c7f6e730641  IN   0x899f3b22908ff5674f8237c321ab3094178876060 Ether0.000981624
0x157a7fa03c7ebe9f889b33f9cc9e80ce9c8f96b692967b878a8e7ba2f582fae784 days 1 hr ago0xf31930014f57b93496f967698f92b2430c62fc43  IN   0x899f3b22908ff5674f8237c321ab3094178876060 Ether0.000793544
0xa6da98dff33f09e3d8812821e77323670f0097197fe018c86a771416ecc2551e87 days 4 hrs ago0xe324e9320c42f4f55de0b1ef3f5a60029023430e  IN   0x899f3b22908ff5674f8237c321ab3094178876060 Ether0.00024802
0xe450099aa7f71c8ed5da35091ecbd53ae4f22677f15c95f91eec5f6c4113f44287 days 4 hrs ago0xe324e9320c42f4f55de0b1ef3f5a60029023430e  IN   0x899f3b22908ff5674f8237c321ab3094178876060 Ether0.000773375
0xbcdf0fa0ac0d960b720e07482f70a7cfb6e323a245b8f4f96b0478bb2e6260c187 days 5 hrs ago0xe324e9320c42f4f55de0b1ef3f5a60029023430e  IN   0x899f3b22908ff5674f8237c321ab3094178876060 Ether0.00049604
0x60706213d60355b835ba4f7e4820c734e0b5a7c14b3c7c949ff51095598e312b87 days 5 hrs ago0xe324e9320c42f4f55de0b1ef3f5a60029023430e  IN   0x899f3b22908ff5674f8237c321ab3094178876060 Ether0.00154675
0x959db501a0a8ce04b9c471774a506ff9b964094c3e255b711ed24df6743b587787 days 5 hrs ago0xe324e9320c42f4f55de0b1ef3f5a60029023430e  IN   0x899f3b22908ff5674f8237c321ab3094178876060 Ether0.00099208
0xa7718f8bf22d0bce13090662900eecd40d49dc4f52782552ebc73d3536f5915987 days 6 hrs ago0xe324e9320c42f4f55de0b1ef3f5a60029023430e  IN   0x899f3b22908ff5674f8237c321ab3094178876060 Ether0.003815675
0x179ec257731a3407064ee4585226258930850a68356f693a8f7ea68a5b622a5088 days 19 hrs ago0xf31930014f57b93496f967698f92b2430c62fc43  IN   0x899f3b22908ff5674f8237c321ab3094178876060 Ether0.000683712
0x87519a3f40807cd45791ff199f95a4b584b1a973788f672329c37169b8ca888689 days 1 hr ago0xf31930014f57b93496f967698f92b2430c62fc43  IN   0x899f3b22908ff5674f8237c321ab3094178876060 Ether0.000224924765
0x457816e8b754040e7e4a758f46c0ee36680d22fe739c112fa1ec1584e17fb9e789 days 2 hrs ago0x283597a44cfcbb78d02b734c744ee8d56010e13b  IN   0x899f3b22908ff5674f8237c321ab3094178876060 Ether0.00076134
0x8eda92a27acff8caad922f9a25785ce2bb4153fe8d2d11d04f063f751681909089 days 3 hrs ago0x283597a44cfcbb78d02b734c744ee8d56010e13b  IN   0x899f3b22908ff5674f8237c321ab3094178876060 Ether0.002318205
0x714c29d78e90efd832629ba75ae55fecb6c0fa3c6f5c317fcccfb397bf0227b889 days 22 hrs ago0xf31930014f57b93496f967698f92b2430c62fc43  IN   0x899f3b22908ff5674f8237c321ab3094178876060 Ether0.0005888
0xf7aaac0818020631656cf125ca4a619e9396a4a4c58f52f9c6b4f20b78e8f56489 days 22 hrs ago0xf31930014f57b93496f967698f92b2430c62fc43  IN   0x899f3b22908ff5674f8237c321ab3094178876060 Ether0.0005888
0x63c794b85b54e9567a95a47aa3f76bcd0186f612e7c723d75f0aea6a7e59f4e489 days 22 hrs ago0xf31930014f57b93496f967698f92b2430c62fc43  IN   0x899f3b22908ff5674f8237c321ab3094178876060 Ether0.0005888
0xa30b3bec260127e7574ff1a4493b2dc8464ca6cdd414e76e568301428e88137790 days 1 hr ago0xf31930014f57b93496f967698f92b2430c62fc43  IN   0x899f3b22908ff5674f8237c321ab3094178876060 Ether0.0005888
0x25c453630a03eedc7e224b99d558f00d8ddb12c1a22ced53922d4c721b2b1cd890 days 1 hr ago0x283597a44cfcbb78d02b734c744ee8d56010e13b  IN   0x899f3b22908ff5674f8237c321ab3094178876060 Ether0.00050756
0xcc6ee03fa4e37d35ff80d59e391763eb025b0fdbabedbf44711ed93ad81db71990 days 1 hr ago0xe324e9320c42f4f55de0b1ef3f5a60029023430e  IN   0x899f3b22908ff5674f8237c321ab3094178876060 Ether0.00015406
0xaee78cb6b269f53f26b8cc95b99f2df49d4d62769443b5a5ab63f2f622d3694990 days 1 hr ago0x283597a44cfcbb78d02b734c744ee8d56010e13b  IN   0x899f3b22908ff5674f8237c321ab3094178876060 Ether0.00154547
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
View All
ParentTxHash Block Age From To Value
Warning: The Compiled Contract might be susceptible to ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity) SolidityCompiler Bugs.

Contract Source Code Verified (Exact Match)
Contract Name: Atonomi
Compiler Text: v0.4.23+commit.124ca40d
Optimization Enabled: No
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.23;

// File: zeppelin-solidity/contracts/ownership/Ownable.sol

/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
contract Ownable {
  address public owner;


  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);


  /**
   * @dev The Ownable constructor sets the original `owner` of the contract to the sender
   * account.
   */
  function Ownable() public {
    owner = msg.sender;
  }

  /**
   * @dev Throws if called by any account other than the owner.
   */
  modifier onlyOwner() {
    require(msg.sender == owner);
    _;
  }

  /**
   * @dev Allows the current owner to transfer control of the contract to a newOwner.
   * @param newOwner The address to transfer ownership to.
   */
  function transferOwnership(address newOwner) public onlyOwner {
    require(newOwner != address(0));
    emit OwnershipTransferred(owner, newOwner);
    owner = newOwner;
  }

}

// File: zeppelin-solidity/contracts/lifecycle/Pausable.sol

/**
 * @title Pausable
 * @dev Base contract which allows children to implement an emergency stop mechanism.
 */
contract Pausable is Ownable {
  event Pause();
  event Unpause();

  bool public paused = false;


  /**
   * @dev Modifier to make a function callable only when the contract is not paused.
   */
  modifier whenNotPaused() {
    require(!paused);
    _;
  }

  /**
   * @dev Modifier to make a function callable only when the contract is paused.
   */
  modifier whenPaused() {
    require(paused);
    _;
  }

  /**
   * @dev called by the owner to pause, triggers stopped state
   */
  function pause() onlyOwner whenNotPaused public {
    paused = true;
    emit Pause();
  }

  /**
   * @dev called by the owner to unpause, returns to normal state
   */
  function unpause() onlyOwner whenPaused public {
    paused = false;
    emit Unpause();
  }
}

// File: zeppelin-solidity/contracts/token/ERC20/ERC20Basic.sol

/**
 * @title ERC20Basic
 * @dev Simpler version of ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/179
 */
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);
}

// File: zeppelin-solidity/contracts/lifecycle/TokenDestructible.sol

/**
 * @title TokenDestructible:
 * @author Remco Bloemen <[email protected]π.com>
 * @dev Base contract that can be destroyed by owner. All funds in contract including
 * listed tokens will be sent to the owner.
 */
contract TokenDestructible is Ownable {

  function TokenDestructible() public payable { }

  /**
   * @notice Terminate contract and refund to owner
   * @param tokens List of addresses of ERC20 or ERC20Basic token contracts to
   refund.
   * @notice The called token contracts could try to re-enter this contract. Only
   supply token contracts you trust.
   */
  function destroy(address[] tokens) onlyOwner public {

    // Transfer tokens to owner
    for (uint256 i = 0; i < tokens.length; i++) {
      ERC20Basic token = ERC20Basic(tokens[i]);
      uint256 balance = token.balanceOf(this);
      token.transfer(owner, balance);
    }

    // Transfer Eth to owner and terminate contract
    selfdestruct(owner);
  }
}

// File: contracts/Atonomi.sol

// solhint-disable-line




/// @title ERC-20 Token Standard
/// @author Fabian Vogelsteller <[email protected]>, Vitalik Buterin <[email protected]>
/// @dev https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md
interface ERC20Interface {
    function decimals() public constant returns (uint8);
    function totalSupply() public constant returns (uint);
    function balanceOf(address tokenOwner) public constant returns (uint balance);
    function allowance(address tokenOwner, address spender) public constant returns (uint remaining);
    function transfer(address to, uint tokens) public returns (bool success);
    function approve(address spender, uint tokens) public returns (bool success);
    function transferFrom(address from, address to, uint tokens) public returns (bool success);

    event Transfer(address indexed from, address indexed to, uint tokens);   // solhint-disable-line
    event Approval(address indexed tokenOwner, address indexed spender, uint tokens);
}


/// @title Safe Math library
/// @dev Math operations with safety checks that throw on error
/// @dev https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/math/SafeMath.sol
library SafeMath {
    /// @dev Multiplies two numbers, throws on overflow.
    function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
        if (a == 0) {
            return 0;
        }
        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 a / b;
    }

    /// @dev Subtracts 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 c) {
        c = a + b;
        assert(c >= a);
        return c;
    }
}


/// @dev Interface for the Network Settings contract
interface SettingsInterface {
    function registrationFee() external view returns (uint256);
    function activationFee() external view returns (uint256);
    function defaultReputationReward() external view returns (uint256);
    function reputationIRNNodeShare() external view returns (uint256);
    function blockThreshold() external view returns (uint256);
}


/// @title Atonomi Smart Contract
/// @author Atonomi
/// @notice Governs the activation, registration, and reputation of devices on the Atonomi network
/// @dev Ownable: Owner governs the access of Atonomi Admins, Fees, and Rewards on the network
/// @dev Pausable: Gives ability for Owner to pull emergency stop to prevent actions on the network
/// @dev TokenDestructible: Gives owner ability to kill the contract and extract funds to a new contract
contract Atonomi is Pausable, TokenDestructible {
    using SafeMath for uint256;

    /// @title ATMI Token
    /// @notice Standard ERC20 Token
    /// @dev AMLToken source: https://github.com/TokenMarketNet/ico/blob/master/contracts/AMLToken.sol
    ERC20Interface public token;

    /// @title Network Settings
    /// @notice Atonomi Owner controlled settings are governed in this contract
    SettingsInterface public settings;

    ///
    /// STORAGE MAPPINGS 
    ///
    /// @title Atonomi Devices registry
    /// @notice Contains all devices participating in the Atonomi Network
    /// @dev Key is a keccak256 hash of the device id
    /// @dev Value is a struct that contains the device status and metadata
    mapping (bytes32 => Device) public devices;

    /// @title Atonomi Participant whitelist
    /// @notice Contains all the network participants
    /// @dev Atonomi Admins: Govern the access to manufacturers and IRN Nodes on the network
    /// @dev IRN Nodes: Governs reputation score data of devices
    /// @dev Manufacturers: Governs devices on the network
    /// @dev Key is ethereum account of the participant
    /// @dev Value is a struct that contains the role of the participant
    mapping (address => NetworkMember) public network;

    /// @title Token Pools
    /// @notice each manufacturer will manage a pool of tokens for reputation rewards
    /// @dev Key is ethereum account for pool owner
    /// @dev Value is struct representing token pool attributes
    /// @dev incoming tokens will come from registrations, activations, or public donations
    /// @dev outgoing tokens will come from reputation rewards
    mapping (address => TokenPool) public pools;

    /// @title Reward Balances
    /// @notice balances of rewards that are able to be claimed by participants
    /// @dev Key is ethereum account of the owner of the tokens
    /// @dev Value is tokens available for withdraw
    mapping (address => uint256) public rewards;

    /// @title Lookup by Manufacturer ID the wallet for reputation rewards
    /// @dev Key is the manufacturer id
    /// @dev Value is ethereum account to be rewarded
    mapping (bytes32 => address) public manufacturerRewards;

    /// @title Track last write by reputation author
    /// @dev First key is the ethereum address of the reputation author
    /// @dev Second key is the device id
    /// @dev Value is the block number of the last time the author has submitted a score for the device
    mapping (address => mapping (bytes32 => uint256)) public authorWrites;

    /// @title Default Repuration score for manufacturers
    /// @dev Key is the manufacturer id
    /// @dev value is the score to use for newly registered devices
    mapping (bytes32 => bytes32) public defaultManufacturerReputations;

    ///
    /// TYPES 
    ///
    /// @title Atonomi Device
    /// @notice Contains the device state on the Atonomi network
    /// @dev manufacturerId is the manufacturer the device belongs to
    /// @dev deviceType is the type of device categorized by the manufacturer
    /// @dev registered is true when device is registered, otherwise false
    /// @dev activated is true when device is activated, otherwise false
    /// @dev reputationScore is official Atonomi Reputation score for the device
    /// @dev devicePublicKey is public key used by IRN Nodes for validation
    struct Device {
        bytes32 manufacturerId;
        bytes32 deviceType;
        bool registered;
        bool activated;
        bytes32 reputationScore;
        bytes32 devicePublicKey;
    }

    /// @title Token Pool
    /// @notice Contains balance and reputation reward amounts for each token pool
    /// @dev balance is total amount of tokens available in the pool
    /// @dev rewardAmount is the total amount distributed between the manufacturer and reputation author
    struct TokenPool {
        uint256 balance;
        uint256 rewardAmount;
    }

    /// @title Atonomi Network Participant
    /// @notice Contains role information for a participant
    /// @dev isIRNAdmin is true if participant is an IRN Admin, otherwise false
    /// @dev isManufacturer is true if participant is a Manufacturer, otherwise false
    /// @dev isIRNNode is true if participant is an IRN Node, otherwise false
    /// @dev memberId is the manufacturer id, for all other participants this will be 0
    struct NetworkMember {
        bool isIRNAdmin;
        bool isManufacturer;
        bool isIRNNode;
        bytes32 memberId;
    }

    ///
    /// MODIFIERS
    ///
    /// @notice only manufacturers can call, otherwise throw
    modifier onlyManufacturer() {
        require(network[msg.sender].isManufacturer, "must be a manufacturer");
        _;
    }

    /// @notice only IRNAdmins or Owner can call, otherwise throw
    modifier onlyIRNorOwner() {
        require(msg.sender == owner || network[msg.sender].isIRNAdmin, "must be owner or an irn admin");
        _;
    }

    /// @notice only IRN Nodes can call, otherwise throw
    modifier onlyIRNNode() {
        require(network[msg.sender].isIRNNode, "must be an irn node");
        _;
    }

    /// @notice Constructor sets the ERC Token contract and initial values for network fees
    /// @param _token is the Atonomi Token contract address (must be ERC20)
    /// @param _settings is the Atonomi Network Settings contract address
    constructor (
        address _token,
        address _settings) public {
        require(_token != address(0), "token address cannot be 0x0");
        require(_settings != address(0), "settings address cannot be 0x0");
        token = ERC20Interface(_token);
        settings = SettingsInterface(_settings);
    }

    ///
    /// EVENTS 
    ///
    /// @notice emitted on successful device registration
    /// @param _sender manufacturer paying for registration
    /// @param _fee registration fee paid by manufacturer
    /// @param _deviceHashKey keccak256 hash of device id used as the key in devices mapping
    /// @param _manufacturerId of the manufacturer the device belongs to
    /// @param _deviceType is the type of device categorized by the manufacturer
    event DeviceRegistered(
        address indexed _sender,
        uint256 _fee,
        bytes32 indexed _deviceHashKey,
        bytes32 indexed _manufacturerId,
        bytes32 _deviceType
    );

    /// @notice emitted on successful device activation
    /// @param _sender manufacturer or device owner paying for activation
    /// @param _fee registration fee paid by manufacturer
    /// @param _deviceId the real device id (only revealed after activation)
    /// @param _manufacturerId of the manufacturer the device belongs to
    /// @param _deviceType is the type of device categorized by the manufacturer
    event DeviceActivated(
        address indexed _sender,
        uint256 _fee,
        bytes32 indexed _deviceId,
        bytes32 indexed _manufacturerId,
        bytes32 _deviceType
    );

    /// @notice emitted on reputation change for a device
    /// @param _deviceId device id of the target device
    /// @param _deviceType is the type of device categorized by the manufacturer
    /// @param _newScore updated reputation score
    /// @param _irnNode IRN node submitting the new reputation
    /// @param _irnReward tokens awarded to irn node
    /// @param _manufacturerWallet manufacturer associated with the device is rewared a share of tokens
    /// @param _manufacturerReward tokens awarded to contributor
    event ReputationScoreUpdated(
        bytes32 indexed _deviceId,
        bytes32 _deviceType,
        bytes32 _newScore,
        address indexed _irnNode,
        uint256 _irnReward,
        address indexed _manufacturerWallet,
        uint256 _manufacturerReward
    );

    /// @notice emitted on successful addition of network member address
    /// @param _sender ethereum account of participant that made the change
    /// @param _member address of added member
    /// @param _memberId manufacturer id for manufacturer, otherwise 0x0
    event NetworkMemberAdded(
        address indexed _sender,
        address indexed _member,
        bytes32 indexed _memberId
    );

    /// @notice emitted on successful removal of network member address
    /// @param _sender ethereum account of participant that made the change
    /// @param _member address of removed member
    /// @param _memberId manufacturer id for manufacturer, otherwise 0x0
    event NetworkMemberRemoved(
        address indexed _sender,
        address indexed _member,
        bytes32 indexed _memberId
    );

    /// @notice emitted everytime a manufacturer changes their wallet for rewards
    /// @param _old ethereum account
    /// @param _new ethereum account
    /// @param _manufacturerId that the member belongs to
    event ManufacturerRewardWalletChanged(
        address indexed _old,
        address indexed _new,
        bytes32 indexed _manufacturerId
    );

    /// @notice emitted everytime a token pool reward amount changes
    /// @param _sender ethereum account of the token pool owner
    /// @param _newReward new reward value in ATMI tokens
    event TokenPoolRewardUpdated(
        address indexed _sender,
        uint256 _newReward
    );

    /// @notice emitted everytime someone donates tokens to a manufacturer
    /// @param _sender ethereum account of the donater
    /// @param _manufacturerId of the manufacturer
    /// @param _manufacturer ethereum account
    /// @param _amount of tokens deposited
    event TokensDeposited(
        address indexed _sender,
        bytes32 indexed _manufacturerId,
        address indexed _manufacturer,
        uint256 _amount
    );
    
    /// @notice emitted everytime a participant withdraws from token pool
    /// @param _sender ethereum account of participant that made the change
    /// @param _amount tokens withdrawn
    event TokensWithdrawn(
        address indexed _sender,
        uint256 _amount
    );

    /// @notice emitted everytime the default reputation for a manufacturer changes
    /// @param _sender ethereum account of participant that made the change
    /// @param _manufacturerId of the manufacturer
    /// @param _newDefaultScore to use for newly registered devices
    event DefaultReputationScoreChanged(
        address indexed _sender,
        bytes32 indexed _manufacturerId,
        bytes32 _newDefaultScore
    );

    ///
    /// DEVICE ONBOARDING
    ///
    /// @notice registers device on the Atonomi network
    /// @param _deviceIdHash keccak256 hash of the device's id (needs to be hashed by caller)
    /// @param _deviceType is the type of device categorized by the manufacturer
    /// @dev devicePublicKey is public key used by IRN Nodes for validation
    /// @return true if successful, otherwise false
    /// @dev msg.sender is expected to be the manufacturer
    /// @dev tokens will be deducted from the manufacturer and added to the token pool
    /// @dev owner has ability to pause this operation
    function registerDevice(
        bytes32 _deviceIdHash,
        bytes32 _deviceType,
        bytes32 _devicePublicKey)
        public onlyManufacturer whenNotPaused returns (bool)
    {
        uint256 registrationFee = settings.registrationFee();
        Device memory d = _registerDevice(msg.sender, _deviceIdHash, _deviceType, _devicePublicKey);
        emit DeviceRegistered(
            msg.sender,
            registrationFee,
            _deviceIdHash,
            d.manufacturerId,
            _deviceType);
        _depositTokens(msg.sender, registrationFee);
        require(token.transferFrom(msg.sender, address(this), registrationFee), "transferFrom failed");
        return true;
    }

    /// @notice Activates the device
    /// @param _deviceId id of the real device id to be activated (not the hash of the device id)
    /// @return true if successful, otherwise false
    /// @dev if the hash doesnt match, the device is considered not registered and will throw
    /// @dev anyone with the device id (in hand) is considered the device owner
    /// @dev tokens will be deducted from the device owner and added to the token pool
    /// @dev owner has ability to pause this operation
    function activateDevice(bytes32 _deviceId) public whenNotPaused returns (bool) {
        uint256 activationFee = settings.activationFee();
        Device memory d = _activateDevice(_deviceId);
        emit DeviceActivated(msg.sender, activationFee, _deviceId, d.manufacturerId, d.deviceType);
        address manufacturer = manufacturerRewards[d.manufacturerId];
        require(manufacturer != address(this), "manufacturer is unknown");
        _depositTokens(manufacturer, activationFee);
        require(token.transferFrom(msg.sender, address(this), activationFee), "transferFrom failed");
        return true;
    }

    /// @notice Registers and immediately activates device, used by manufacturers to prepay activation
    /// @param _deviceId id of the real device id to be activated (not the has of the device id)
    /// @param _deviceType is the type of device categorized by the manufacturer
    /// @return true if successful, otherwise false
    /// @dev since the manufacturer is trusted, no need for the caller to hash the device id
    /// @dev msg.sender is expected to be the manufacturer
    /// @dev tokens will be deducted from the manufacturer and added to the token pool
    /// @dev owner has ability to pause this operation
    function registerAndActivateDevice(
        bytes32 _deviceId,
        bytes32 _deviceType,
        bytes32 _devicePublicKey) 
        public onlyManufacturer whenNotPaused returns (bool)
    {
        uint256 registrationFee = settings.registrationFee();
        uint256 activationFee = settings.activationFee();

        bytes32 deviceIdHash = keccak256(_deviceId);
        Device memory d = _registerDevice(msg.sender, deviceIdHash, _deviceType, _devicePublicKey);
        bytes32 manufacturerId = d.manufacturerId;
        emit DeviceRegistered(msg.sender, registrationFee, deviceIdHash, manufacturerId, _deviceType);

        d = _activateDevice(_deviceId);
        emit DeviceActivated(msg.sender, activationFee, _deviceId, manufacturerId, _deviceType);

        uint256 fee = registrationFee.add(activationFee);
        _depositTokens(msg.sender, fee);
        require(token.transferFrom(msg.sender, address(this), fee), "transferFrom failed");
        return true;
    }

    ///
    /// REPUTATION MANAGEMENT
    ///
    /// @notice updates reputation for a device
    /// @param _deviceId target device Id
    /// @param _reputationScore updated reputation score computed by the author
    /// @return true if successful, otherwise false
    /// @dev msg.sender is expected to be the reputation author (either irn node or the reputation auditor)
    /// @dev tokens will be deducted from the contract pool
    /// @dev author and manufacturer will be rewarded a split of the tokens
    /// @dev owner has ability to pause this operation
    function updateReputationScore(
        bytes32 _deviceId,
        bytes32 _reputationScore)
        public onlyIRNNode whenNotPaused returns (bool)
    {
        Device memory d = _updateReputationScore(_deviceId, _reputationScore);

        address _manufacturerWallet = manufacturerRewards[d.manufacturerId];
        require(_manufacturerWallet != address(0), "_manufacturerWallet cannot be 0x0");
        require(_manufacturerWallet != msg.sender, "manufacturers cannot collect the full reward");

        uint256 irnReward;
        uint256 manufacturerReward;
        (irnReward, manufacturerReward) = getReputationRewards(msg.sender, _manufacturerWallet, _deviceId);
        _distributeRewards(_manufacturerWallet, msg.sender, irnReward);
        _distributeRewards(_manufacturerWallet, _manufacturerWallet, manufacturerReward);
        emit ReputationScoreUpdated(
            _deviceId,
            d.deviceType,
            _reputationScore,
            msg.sender,
            irnReward,
            _manufacturerWallet,
            manufacturerReward);
        authorWrites[msg.sender][_deviceId] = block.number;
        return true;
    }

    /// @notice computes the portion of the reputation reward allotted to the manufacturer and author
    /// @param author is the reputation node submitting the score
    /// @param manufacturer is the token pool owner
    /// @param deviceId of the device being updated
    /// @return irnReward and manufacturerReward
    function getReputationRewards(
        address author,
        address manufacturer,
        bytes32 deviceId)
        public view returns (uint256 irnReward, uint256 manufacturerReward)
    {
        uint256 lastWrite = authorWrites[author][deviceId];
        uint256 blocks = 0;
        if (lastWrite > 0) {
            blocks = block.number.sub(lastWrite);
        }
        uint256 totalRewards = calculateReward(pools[manufacturer].rewardAmount, blocks);
        irnReward = totalRewards.mul(settings.reputationIRNNodeShare()).div(100);
        manufacturerReward = totalRewards.sub(irnReward);
    }

    /// @notice computes total reward based on the authors last submission
    /// @param rewardAmount total amount available for reward
    /// @param blocksSinceLastWrite number of blocks since last write
    /// @return actual reward available
    function calculateReward(uint256 rewardAmount, uint256 blocksSinceLastWrite) public view returns (uint256) {
        uint256 totalReward = rewardAmount;
        uint256 blockThreshold = settings.blockThreshold();
        if (blocksSinceLastWrite > 0 && blocksSinceLastWrite < blockThreshold) {
            uint256 multiplier = 10 ** uint256(token.decimals());
            totalReward = rewardAmount.mul(blocksSinceLastWrite.mul(multiplier)).div(blockThreshold.mul(multiplier));
        }
        return totalReward;
    }

    ///
    /// BULK OPERATIONS
    ///
    /// @notice registers multiple devices on the Atonomi network
    /// @param _deviceIdHashes array of keccak256 hashed ID's of each device
    /// @param _deviceTypes array of types of device categorized by the manufacturer
    /// @param _devicePublicKeys array of public keys associated with the devices
    /// @return true if successful, otherwise false
    /// @dev msg.sender is expected to be the manufacturer
    /// @dev tokens will be deducted from the manufacturer and added to the token pool
    /// @dev owner has ability to pause this operation
    function registerDevices(
        bytes32[] _deviceIdHashes,
        bytes32[] _deviceTypes,
        bytes32[] _devicePublicKeys)
        public onlyManufacturer whenNotPaused returns (bool)
    {
        require(_deviceIdHashes.length > 0, "at least one device is required");
        require(
            _deviceIdHashes.length == _deviceTypes.length,
            "device type array needs to be same size as devices"
        );
        require(
            _deviceIdHashes.length == _devicePublicKeys.length,
            "device public key array needs to be same size as devices"
        );

        uint256 runningBalance = 0;
        uint256 registrationFee = settings.registrationFee();
        for (uint256 i = 0; i < _deviceIdHashes.length; i++) {
            bytes32 deviceIdHash = _deviceIdHashes[i];
            bytes32 deviceType = _deviceTypes[i];
            bytes32 devicePublicKey = _devicePublicKeys[i];
            Device memory d = _registerDevice(msg.sender, deviceIdHash, deviceType, devicePublicKey);
            emit DeviceRegistered(msg.sender, registrationFee, deviceIdHash, d.manufacturerId, deviceType);

            runningBalance = runningBalance.add(registrationFee);
        }

        _depositTokens(msg.sender, runningBalance);
        require(token.transferFrom(msg.sender, address(this), runningBalance), "transferFrom failed");
        return true;
    }

    ///
    /// WHITELIST PARTICIPANT MANAGEMENT
    ///
    /// @notice add a member to the network
    /// @param _member ethereum address of member to be added
    /// @param _isIRNAdmin true if an irn admin, otherwise false
    /// @param _isManufacturer true if an manufactuter, otherwise false
    /// @param _memberId manufacturer id for manufacturers, otherwise 0x0
    /// @return true if successful, otherwise false
    /// @dev _memberId is only relevant for manufacturer, but is flexible to allow use for other purposes
    /// @dev msg.sender is expected to be either owner or irn admin
    function addNetworkMember(
        address _member,
        bool _isIRNAdmin,
        bool _isManufacturer,
        bool _isIRNNode,
        bytes32 _memberId)
        public onlyIRNorOwner returns(bool)
    {
        NetworkMember storage m = network[_member];
        require(!m.isIRNAdmin, "already an irn admin");
        require(!m.isManufacturer, "already a manufacturer");
        require(!m.isIRNNode, "already an irn node");
        require(m.memberId == 0, "already assigned a member id");

        m.isIRNAdmin = _isIRNAdmin;
        m.isManufacturer = _isManufacturer;
        m.isIRNNode = _isIRNNode;
        m.memberId = _memberId;

        if (m.isManufacturer) {
            require(_memberId != 0, "manufacturer id is required");

            // keep lookup for rewards in sync
            require(manufacturerRewards[m.memberId] == address(0), "manufacturer is already assigned");
            manufacturerRewards[m.memberId] = _member;

            // set reputation reward if token pool doesnt exist
            if (pools[_member].rewardAmount == 0) {
                pools[_member].rewardAmount = settings.defaultReputationReward();
            }
        }

        emit NetworkMemberAdded(msg.sender, _member, _memberId);

        return true;
    }

    /// @notice remove a member from the network
    /// @param _member ethereum address of member to be removed
    /// @return true if successful, otherwise false
    /// @dev msg.sender is expected to be either owner or irn admin
    function removeNetworkMember(address _member) public onlyIRNorOwner returns(bool) {
        bytes32 memberId = network[_member].memberId;
        if (network[_member].isManufacturer) {
            // remove token pool if there is a zero balance
            if (pools[_member].balance == 0) {
                delete pools[_member];
            }

            // keep lookup with rewards in sync
            delete manufacturerRewards[memberId];
        }

        delete network[_member];

        emit NetworkMemberRemoved(msg.sender, _member, memberId);
        return true;
    }

    //
    // TOKEN POOL MANAGEMENT
    //
    /// @notice changes the ethereum wallet for a manufacturer used in reputation rewards
    /// @param _new new ethereum account
    /// @return true if successful, otherwise false
    /// @dev msg.sender is expected to be original manufacturer account
    function changeManufacturerWallet(address _new) public onlyManufacturer returns (bool) {
        require(_new != address(0), "new address cannot be 0x0");

        NetworkMember memory old = network[msg.sender];
        require(old.isManufacturer && old.memberId != 0, "must be a manufacturer");

        // copy permissions
        require(!network[_new].isIRNAdmin, "already an irn admin");
        require(!network[_new].isManufacturer, "already a manufacturer");
        require(!network[_new].isIRNNode, "already an irn node");
        require(network[_new].memberId == 0, "memberId already exists");
        network[_new] = NetworkMember(
            old.isIRNAdmin,
            old.isManufacturer,
            old.isIRNNode,
            old.memberId
        );

        // transfer balance from old pool to the new pool
        require(pools[_new].balance == 0 && pools[_new].rewardAmount == 0, "new token pool already exists");
        pools[_new].balance = pools[msg.sender].balance;
        pools[_new].rewardAmount = pools[msg.sender].rewardAmount;
        delete pools[msg.sender];

        // update reward mapping
        manufacturerRewards[old.memberId] = _new;

        // delete old member
        delete network[msg.sender];

        emit ManufacturerRewardWalletChanged(msg.sender, _new, old.memberId);
        return true;
    }

    /// @notice allows a token pool owner to set a new reward amount
    /// @param newReward new reputation reward amount
    /// @return true if successful, otherwise false
    /// @dev msg.sender expected to be manufacturer
    function setTokenPoolReward(uint256 newReward) public onlyManufacturer returns (bool) {
        require(newReward != 0, "newReward is required");

        TokenPool storage p = pools[msg.sender];
        require(p.rewardAmount != newReward, "newReward should be different");

        p.rewardAmount = newReward;
        emit TokenPoolRewardUpdated(msg.sender, newReward);
        return true;
    }

    /// @notice anyone can donate tokens to a manufacturer's pool
    /// @param manufacturerId of the manufacturer to receive the tokens
    /// @param amount of tokens to deposit
    function depositTokens(bytes32 manufacturerId, uint256 amount) public returns (bool) {
        require(manufacturerId != 0, "manufacturerId is required");
        require(amount > 0, "amount is required");

        address manufacturer = manufacturerRewards[manufacturerId];
        require(manufacturer != address(0));

        _depositTokens(manufacturer, amount);
        emit TokensDeposited(msg.sender, manufacturerId, manufacturer, amount);

        require(token.transferFrom(msg.sender, address(this), amount));
        return true;
    }

    /// @notice allows participants in the Atonomi network to claim their rewards
    /// @return true if successful, otherwise false
    /// @dev owner has ability to pause this operation
    function withdrawTokens() public whenNotPaused returns (bool) {
        uint256 amount = rewards[msg.sender];
        require(amount > 0, "amount is zero");

        rewards[msg.sender] = 0;
        emit TokensWithdrawn(msg.sender, amount);

        require(token.transfer(msg.sender, amount), "token transfer failed");
        return true;
    }

    /// @notice allows the owner to change the default reputation for manufacturers
    /// @param _manufacturerId of the manufacturer
    /// @param _newDefaultScore to use for newly registered devices
    /// @return true if successful, otherwise false
    /// @dev owner is the only one with this feature
    function setDefaultReputationForManufacturer(
        bytes32 _manufacturerId,
        bytes32 _newDefaultScore) public onlyOwner returns (bool) {
        require(_manufacturerId != 0, "_manufacturerId is required");
        require(
            _newDefaultScore != defaultManufacturerReputations[_manufacturerId],
            "_newDefaultScore should be different"
        );

        defaultManufacturerReputations[_manufacturerId] = _newDefaultScore;
        emit DefaultReputationScoreChanged(msg.sender, _manufacturerId, _newDefaultScore);
        return true;
    }

    ///
    /// INTERNAL FUNCTIONS
    ///
    /// @dev track balances of any deposits going into a token pool
    function _depositTokens(address _owner, uint256 _amount) internal {
        pools[_owner].balance = pools[_owner].balance.add(_amount);
    }

    /// @dev track balances of any rewards going out of the token pool
    function _distributeRewards(address _manufacturer, address _owner, uint256 _amount) internal {
        require(_amount > 0, "_amount is required");
        pools[_manufacturer].balance = pools[_manufacturer].balance.sub(_amount);
        rewards[_owner] = rewards[_owner].add(_amount);
    }

    /// @dev ensure a device is validated for registration
    /// @dev updates device registry
    function _registerDevice(
        address _manufacturer,
        bytes32 _deviceIdHash,
        bytes32 _deviceType,
        bytes32 _devicePublicKey) internal returns (Device) {
        require(_manufacturer != address(0), "manufacturer is required");
        require(_deviceIdHash != 0, "device id hash is required");
        require(_deviceType != 0, "device type is required");
        require(_devicePublicKey != 0, "device public key is required");

        Device storage d = devices[_deviceIdHash];
        require(!d.registered, "device is already registered");
        require(!d.activated, "device is already activated");

        bytes32 manufacturerId = network[_manufacturer].memberId;
        require(manufacturerId != 0, "manufacturer id is unknown");

        d.manufacturerId = manufacturerId;
        d.deviceType = _deviceType;
        d.registered = true;
        d.activated = false;
        d.reputationScore = defaultManufacturerReputations[manufacturerId];
        d.devicePublicKey = _devicePublicKey;
        return d;
    }

    /// @dev ensure a device is validated for activation
    /// @dev updates device registry
    function _activateDevice(bytes32 _deviceId) internal returns (Device) {
        bytes32 deviceIdHash = keccak256(_deviceId);
        Device storage d = devices[deviceIdHash];
        require(d.registered, "not registered");
        require(!d.activated, "already activated");
        require(d.manufacturerId != 0, "no manufacturer id was found");

        d.activated = true;
        return d;
    }

    /// @dev ensure a device is validated for a new reputation score
    /// @dev updates device registry
    function _updateReputationScore(bytes32 _deviceId, bytes32 _reputationScore) internal returns (Device) {
        require(_deviceId != 0, "device id is empty");

        Device storage d = devices[keccak256(_deviceId)];
        require(d.registered, "not registered");
        require(d.activated, "not activated");
        require(d.reputationScore != _reputationScore, "new score needs to be different");

        d.reputationScore = _reputationScore;
        return d;
    }
}

    Contract ABI  
[{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"rewards","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"manufacturerRewards","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_member","type":"address"},{"name":"_isIRNAdmin","type":"bool"},{"name":"_isManufacturer","type":"bool"},{"name":"_isIRNNode","type":"bool"},{"name":"_memberId","type":"bytes32"}],"name":"addNetworkMember","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"rewardAmount","type":"uint256"},{"name":"blocksSinceLastWrite","type":"uint256"}],"name":"calculateReward","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_manufacturerId","type":"bytes32"},{"name":"_newDefaultScore","type":"bytes32"}],"name":"setDefaultReputationForManufacturer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"author","type":"address"},{"name":"manufacturer","type":"address"},{"name":"deviceId","type":"bytes32"}],"name":"getReputationRewards","outputs":[{"name":"irnReward","type":"uint256"},{"name":"manufacturerReward","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"manufacturerId","type":"bytes32"},{"name":"amount","type":"uint256"}],"name":"depositTokens","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newReward","type":"uint256"}],"name":"setTokenPoolReward","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_deviceId","type":"bytes32"},{"name":"_reputationScore","type":"bytes32"}],"name":"updateReputationScore","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"defaultManufacturerReputations","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_deviceId","type":"bytes32"}],"name":"activateDevice","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_deviceId","type":"bytes32"},{"name":"_deviceType","type":"bytes32"},{"name":"_devicePublicKey","type":"bytes32"}],"name":"registerAndActivateDevice","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_deviceIdHash","type":"bytes32"},{"name":"_deviceType","type":"bytes32"},{"name":"_devicePublicKey","type":"bytes32"}],"name":"registerDevice","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_new","type":"address"}],"name":"changeManufacturerWallet","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdrawTokens","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_deviceIdHashes","type":"bytes32[]"},{"name":"_deviceTypes","type":"bytes32[]"},{"name":"_devicePublicKeys","type":"bytes32[]"}],"name":"registerDevices","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"pools","outputs":[{"name":"balance","type":"uint256"},{"name":"rewardAmount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_member","type":"address"}],"name":"removeNetworkMember","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"network","outputs":[{"name":"isIRNAdmin","type":"bool"},{"name":"isManufacturer","type":"bool"},{"name":"isIRNNode","type":"bool"},{"name":"memberId","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"devices","outputs":[{"name":"manufacturerId","type":"bytes32"},{"name":"deviceType","type":"bytes32"},{"name":"registered","type":"bool"},{"name":"activated","type":"bool"},{"name":"reputationScore","type":"bytes32"},{"name":"devicePublicKey","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"tokens","type":"address[]"}],"name":"destroy","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"settings","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"bytes32"}],"name":"authorWrites","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_token","type":"address"},{"name":"_settings","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_sender","type":"address"},{"indexed":false,"name":"_fee","type":"uint256"},{"indexed":true,"name":"_deviceHashKey","type":"bytes32"},{"indexed":true,"name":"_manufacturerId","type":"bytes32"},{"indexed":false,"name":"_deviceType","type":"bytes32"}],"name":"DeviceRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_sender","type":"address"},{"indexed":false,"name":"_fee","type":"uint256"},{"indexed":true,"name":"_deviceId","type":"bytes32"},{"indexed":true,"name":"_manufacturerId","type":"bytes32"},{"indexed":false,"name":"_deviceType","type":"bytes32"}],"name":"DeviceActivated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_deviceId","type":"bytes32"},{"indexed":false,"name":"_deviceType","type":"bytes32"},{"indexed":false,"name":"_newScore","type":"bytes32"},{"indexed":true,"name":"_irnNode","type":"address"},{"indexed":false,"name":"_irnReward","type":"uint256"},{"indexed":true,"name":"_manufacturerWallet","type":"address"},{"indexed":false,"name":"_manufacturerReward","type":"uint256"}],"name":"ReputationScoreUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_sender","type":"address"},{"indexed":true,"name":"_member","type":"address"},{"indexed":true,"name":"_memberId","type":"bytes32"}],"name":"NetworkMemberAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_sender","type":"address"},{"indexed":true,"name":"_member","type":"address"},{"indexed":true,"name":"_memberId","type":"bytes32"}],"name":"NetworkMemberRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_old","type":"address"},{"indexed":true,"name":"_new","type":"address"},{"indexed":true,"name":"_manufacturerId","type":"bytes32"}],"name":"ManufacturerRewardWalletChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_sender","type":"address"},{"indexed":false,"name":"_newReward","type":"uint256"}],"name":"TokenPoolRewardUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_sender","type":"address"},{"indexed":true,"name":"_manufacturerId","type":"bytes32"},{"indexed":true,"name":"_manufacturer","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"TokensDeposited","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_sender","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"TokensWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_sender","type":"address"},{"indexed":true,"name":"_manufacturerId","type":"bytes32"},{"indexed":false,"name":"_newDefaultScore","type":"bytes32"}],"name":"DefaultReputationScoreChanged","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

  Contract Creation Code Switch To Opcodes View
608060405260008060146101000a81548160ff0219169083151502179055503480156200002b57600080fd5b5060405160408062005f6f8339810180604052810190808051906020019092919080519060200190929190505050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156200013f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f746f6b656e20616464726573732063616e6e6f7420626520307830000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515620001e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f73657474696e677320616464726573732063616e6e6f7420626520307830000081525060200191505060405180910390fd5b81600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050615cf680620002796000396000f300608060405260043610610175576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630700037d1461017a578063135ca124146101d157806313ac2bdb1461024257806313ed0846146102cf5780631db1c8051461031a5780632217bf7814610371578063222b8947146103fd578063252dbc36146104505780633d32cb63146104955780633e870203146104ec5780633f4ba83a14610539578063568f9ce1146105505780635c975abb146105995780636d54ec91146105c85780637900438b1461062d5780638456cb59146106925780638b3edbdf146106a95780638d8f2adb146107045780638da5cb5b1461073357806395f62fb91461078a578063a4063dbc1461088e578063b27f829e146108ec578063c3aa168414610947578063c5c400de146109c7578063c6786e5a14610a57578063e06174e414610abd578063f2fde38b14610b14578063fc0c546a14610b57578063fe4a22eb14610bae575b600080fd5b34801561018657600080fd5b506101bb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610c13565b6040518082815260200191505060405180910390f35b3480156101dd57600080fd5b506102006004803603810190808035600019169060200190929190505050610c2b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561024e57600080fd5b506102b5600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291908035151590602001909291908035151590602001909291908035600019169060200190929190505050610c5e565b604051808215151515815260200191505060405180910390f35b3480156102db57600080fd5b5061030460048036038101908080359060200190929190803590602001909291905050506113cf565b6040518082815260200191505060405180910390f35b34801561032657600080fd5b50610357600480360381019080803560001916906020019092919080356000191690602001909291905050506115d0565b604051808215151515815260200191505060405180910390f35b34801561037d57600080fd5b506103e0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080356000191690602001909291905050506117f7565b604051808381526020018281526020019250505060405180910390f35b34801561040957600080fd5b506104366004803603810190808035600019169060200190929190803590602001909291905050506119d3565b604051808215151515815260200191505060405180910390f35b34801561045c57600080fd5b5061047b60048036038101908080359060200190929190505050611d06565b604051808215151515815260200191505060405180910390f35b3480156104a157600080fd5b506104d260048036038101908080356000191690602001909291908035600019169060200190929190505050611f64565b604051808215151515815260200191505060405180910390f35b3480156104f857600080fd5b5061051b6004803603810190808035600019169060200190929190505050612360565b60405180826000191660001916815260200191505060405180910390f35b34801561054557600080fd5b5061054e612378565b005b34801561055c57600080fd5b5061057f6004803603810190808035600019169060200190929190505050612436565b604051808215151515815260200191505060405180910390f35b3480156105a557600080fd5b506105ae612840565b604051808215151515815260200191505060405180910390f35b3480156105d457600080fd5b50610613600480360381019080803560001916906020019092919080356000191690602001909291908035600019169060200190929190505050612853565b604051808215151515815260200191505060405180910390f35b34801561063957600080fd5b50610678600480360381019080803560001916906020019092919080356000191690602001909291908035600019169060200190929190505050612db2565b604051808215151515815260200191505060405180910390f35b34801561069e57600080fd5b506106a7613199565b005b3480156106b557600080fd5b506106ea600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613259565b604051808215151515815260200191505060405180910390f35b34801561071057600080fd5b50610719613cc8565b604051808215151515815260200191505060405180910390f35b34801561073f57600080fd5b50610748613fb0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561079657600080fd5b50610874600480360381019080803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091929192908035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919291929080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050613fd5565b604051808215151515815260200191505060405180910390f35b34801561089a57600080fd5b506108cf600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614602565b604051808381526020018281526020019250505060405180910390f35b3480156108f857600080fd5b5061092d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614626565b604051808215151515815260200191505060405180910390f35b34801561095357600080fd5b50610988600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506149aa565b60405180851515151581526020018415151515815260200183151515158152602001826000191660001916815260200194505050505060405180910390f35b3480156109d357600080fd5b506109f66004803603810190808035600019169060200190929190505050614a01565b6040518087600019166000191681526020018660001916600019168152602001851515151581526020018415151515815260200183600019166000191681526020018260001916600019168152602001965050505050505060405180910390f35b348015610a6357600080fd5b50610abb60048036038101908080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050614a57565b005b348015610ac957600080fd5b50610ad2614cfe565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b2057600080fd5b50610b55600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614d24565b005b348015610b6357600080fd5b50610b6c614e79565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610bba57600080fd5b50610bfd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035600019169060200190929190505050614e9f565b6040518082815260200191505060405180910390f35b60066020528060005260406000206000915090505481565b60076020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610d085750600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff165b1515610d7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f6d757374206265206f776e6572206f7220616e2069726e2061646d696e00000081525060200191505060405180910390fd5b600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060000160009054906101000a900460ff16151515610e44576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f616c726561647920616e2069726e2061646d696e00000000000000000000000081525060200191505060405180910390fd5b8060000160019054906101000a900460ff16151515610ecb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f616c72656164792061206d616e7566616374757265720000000000000000000081525060200191505060405180910390fd5b8060000160029054906101000a900460ff16151515610f52576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f616c726561647920616e2069726e206e6f64650000000000000000000000000081525060200191505060405180910390fd5b6000600102816001015460001916141515610fd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f616c72656164792061737369676e65642061206d656d6265722069640000000081525060200191505060405180910390fd5b858160000160006101000a81548160ff021916908315150217905550848160000160016101000a81548160ff021916908315150217905550838160000160026101000a81548160ff021916908315150217905550828160010181600019169055508060000160019054906101000a900460ff16156113625760006001028360001916141515156110cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f6d616e756661637475726572206964206973207265717569726564000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166007600083600101546000191660001916815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156111b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f6d616e75666163747572657220697320616c72656164792061737369676e656481525060200191505060405180910390fd5b866007600083600101546000191660001916815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154141561136157600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a10a77826040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156112df57600080fd5b505af11580156112f3573d6000803e3d6000fd5b505050506040513d602081101561130957600080fd5b8101908080519060200190929190505050600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b5b82600019168773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fdb4fd010b1822efc1cfe6c978216999bda713c5f143d17f2e142d61d79c2cfaf60405160405180910390a4600191505095945050505050565b600080600080859250600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634c41a6c76040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561145e57600080fd5b505af1158015611472573d6000803e3d6000fd5b505050506040513d602081101561148857600080fd5b810190808051906020019092919050505091506000851180156114aa57508185105b156115c457600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561153557600080fd5b505af1158015611549573d6000803e3d6000fd5b505050506040513d602081101561155f57600080fd5b810190808051906020019092919050505060ff16600a0a90506115c161158e8284614ec490919063ffffffff16565b6115b36115a48489614ec490919063ffffffff16565b89614ec490919063ffffffff16565b614efc90919063ffffffff16565b92505b82935050505092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561162d57600080fd5b60006001028360001916141515156116ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f5f6d616e7566616374757265724964206973207265717569726564000000000081525060200191505060405180910390fd5b600960008460001916600019168152602001908152602001600020546000191682600019161415151561176e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001807f5f6e657744656661756c7453636f72652073686f756c6420626520646966666581526020017f72656e740000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b81600960008560001916600019168152602001908152602001600020816000191690555082600019163373ffffffffffffffffffffffffffffffffffffffff167f06d7e68cd9327cfb10eceecb9d9ad605c95ee202de1c6c65dbe0436ef4a5e6138460405180826000191660001916815260200191505060405180910390a36001905092915050565b6000806000806000600860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000876000191660001916815260200190815260200160002054925060009150600083111561187d5761187a8343614f1290919063ffffffff16565b91505b6118c9600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154836113cf565b90506119b160646119a3600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663aaabdf166040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561195957600080fd5b505af115801561196d573d6000803e3d6000fd5b505050506040513d602081101561198357600080fd5b810190808051906020019092919050505084614ec490919063ffffffff16565b614efc90919063ffffffff16565b94506119c68582614f1290919063ffffffff16565b9350505050935093915050565b6000806000600102846000191614151515611a56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f6d616e756661637475726572496420697320726571756972656400000000000081525060200191505060405180910390fd5b600083111515611ace576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f616d6f756e74206973207265717569726564000000000000000000000000000081525060200191505060405180910390fd5b60076000856000191660001916815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611b4857600080fd5b611b528184614f2b565b8073ffffffffffffffffffffffffffffffffffffffff1684600019163373ffffffffffffffffffffffffffffffffffffffff167f811880d278d5f75cf96199a9c79c2fa6e8eebee04e2afda088a7b1dd765889bb866040518082815260200191505060405180910390a4600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611cb557600080fd5b505af1158015611cc9573d6000803e3d6000fd5b505050506040513d6020811015611cdf57600080fd5b81019080805190602001909291905050501515611cfb57600080fd5b600191505092915050565b600080600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160019054906101000a900460ff161515611dcd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6d7573742062652061206d616e7566616374757265720000000000000000000081525060200191505060405180910390fd5b60008314151515611e46576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f6e6577526577617264206973207265717569726564000000000000000000000081525060200191505060405180910390fd5b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905082816001015414151515611f03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f6e65775265776172642073686f756c6420626520646966666572656e7400000081525060200191505060405180910390fd5b8281600101819055503373ffffffffffffffffffffffffffffffffffffffff167f78b008c8623496713f0a108a67aa2804f75d388bf5f12cd93e8a5bb404b579e5846040518082815260200191505060405180910390a26001915050919050565b6000611f6e615c51565b6000806000600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160029054906101000a900460ff161515612037576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6d75737420626520616e2069726e206e6f64650000000000000000000000000081525060200191505060405180910390fd5b600060149054906101000a900460ff1615151561205357600080fd5b61205d8787614fca565b93506007600085600001516000191660001916815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169250600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561216c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f5f6d616e75666163747572657257616c6c65742063616e6e6f7420626520307881526020017f300000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515612236576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001807f6d616e756661637475726572732063616e6e6f7420636f6c6c6563742074686581526020017f2066756c6c20726577617264000000000000000000000000000000000000000081525060400191505060405180910390fd5b6122413384896117f7565b80925081935050506122548333846152be565b61225f8384836152be565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1688600019167f623469fb6c872fc53daa40e4a20f7eb2fc3fe6816dacc59ad6f3b924f679174587602001518a8787604051808560001916600019168152602001846000191660001916815260200183815260200182815260200194505050505060405180910390a443600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000896000191660001916815260200190815260200160002081905550600194505050505092915050565b60096020528060005260406000206000915090505481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156123d357600080fd5b600060149054906101000a900460ff1615156123ee57600080fd5b60008060146101000a81548160ff0219169083151502179055507f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1565b600080612441615c51565b60008060149054906101000a900460ff1615151561245e57600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166377d630ae6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156124e457600080fd5b505af11580156124f8573d6000803e3d6000fd5b505050506040513d602081101561250e57600080fd5b8101908080519060200190929190505050925061252a8561546b565b915081600001516000191685600019163373ffffffffffffffffffffffffffffffffffffffff167fba2136e45a61f966f69316c7c8ff08dc8ffb4886fc5d9027314755ee1a6238578686602001516040518083815260200182600019166000191681526020019250505060405180910390a46007600083600001516000191660001916815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515612682576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f6d616e75666163747572657220697320756e6b6e6f776e00000000000000000081525060200191505060405180910390fd5b61268c8184614f2b565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561278557600080fd5b505af1158015612799573d6000803e3d6000fd5b505050506040513d60208110156127af57600080fd5b81019080805190602001909291905050501515612834576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f7472616e7366657246726f6d206661696c65640000000000000000000000000081525060200191505060405180910390fd5b60019350505050919050565b600060149054906101000a900460ff1681565b600080600080612861615c51565b600080600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160019054906101000a900460ff161515612928576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6d7573742062652061206d616e7566616374757265720000000000000000000081525060200191505060405180910390fd5b600060149054906101000a900460ff1615151561294457600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314c44e096040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156129ca57600080fd5b505af11580156129de573d6000803e3d6000fd5b505050506040513d60208110156129f457600080fd5b81019080805190602001909291905050509550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166377d630ae6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015612a8d57600080fd5b505af1158015612aa1573d6000803e3d6000fd5b505050506040513d6020811015612ab757600080fd5b810190808051906020019092919050505094508960405180826000191660001916815260200191505060405180910390209350612af633858b8b6156f5565b925082600001519150816000191684600019163373ffffffffffffffffffffffffffffffffffffffff167f0eb7a49a7f427b424a9fe87d487fd12d3f155c956145b0ac06a72ea85235e7d5898d6040518083815260200182600019166000191681526020019250505060405180910390a4612b708a61546b565b925081600019168a600019163373ffffffffffffffffffffffffffffffffffffffff167fba2136e45a61f966f69316c7c8ff08dc8ffb4886fc5d9027314755ee1a623857888d6040518083815260200182600019166000191681526020019250505060405180910390a4612bed8587615c3590919063ffffffff16565b9050612bf93382614f2b565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015612cf257600080fd5b505af1158015612d06573d6000803e3d6000fd5b505050506040513d6020811015612d1c57600080fd5b81019080805190602001909291905050501515612da1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f7472616e7366657246726f6d206661696c65640000000000000000000000000081525060200191505060405180910390fd5b600196505050505050509392505050565b600080612dbd615c51565b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160019054906101000a900460ff161515612e81576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6d7573742062652061206d616e7566616374757265720000000000000000000081525060200191505060405180910390fd5b600060149054906101000a900460ff16151515612e9d57600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314c44e096040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015612f2357600080fd5b505af1158015612f37573d6000803e3d6000fd5b505050506040513d6020811015612f4d57600080fd5b81019080805190602001909291905050509150612f6c338787876156f5565b905080600001516000191686600019163373ffffffffffffffffffffffffffffffffffffffff167f0eb7a49a7f427b424a9fe87d487fd12d3f155c956145b0ac06a72ea85235e7d585896040518083815260200182600019166000191681526020019250505060405180910390a4612fe43383614f2b565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156130dd57600080fd5b505af11580156130f1573d6000803e3d6000fd5b505050506040513d602081101561310757600080fd5b8101908080519060200190929190505050151561318c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f7472616e7366657246726f6d206661696c65640000000000000000000000000081525060200191505060405180910390fd5b6001925050509392505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156131f457600080fd5b600060149054906101000a900460ff1615151561321057600080fd5b6001600060146101000a81548160ff0219169083151502179055507f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a1565b6000613263615c98565b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160019054906101000a900460ff161515613327576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6d7573742062652061206d616e7566616374757265720000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156133cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f6e657720616464726573732063616e6e6f74206265203078300000000000000081525060200191505060405180910390fd5b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020608060405190810160405290816000820160009054906101000a900460ff161515151581526020016000820160019054906101000a900460ff161515151581526020016000820160029054906101000a900460ff1615151515815260200160018201546000191660001916815250509050806020015180156134995750600060010281606001516000191614155b151561350d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6d7573742062652061206d616e7566616374757265720000000000000000000081525060200191505060405180910390fd5b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff161515156135d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f616c726561647920616e2069726e2061646d696e00000000000000000000000081525060200191505060405180910390fd5b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160019054906101000a900460ff16151515613697576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f616c72656164792061206d616e7566616374757265720000000000000000000081525060200191505060405180910390fd5b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160029054906101000a900460ff1615151561375c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f616c726561647920616e2069726e206e6f64650000000000000000000000000081525060200191505060405180910390fd5b6000600102600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546000191614151561381d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f6d656d626572496420616c72656164792065786973747300000000000000000081525060200191505060405180910390fd5b608060405190810160405280826000015115158152602001826020015115158152602001826040015115158152602001826060015160001916815250600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548160ff02191690831515021790555060408201518160000160026101000a81548160ff021916908315150217905550606082015181600101906000191690559050506000600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414801561399f57506000600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154145b1515613a13576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f6e657720746f6b656e20706f6f6c20616c72656164792065786973747300000081525060200191505060405180910390fd5b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000181905550600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090555050826007600083606001516000191660001916815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600080820160006101000a81549060ff02191690556000820160016101000a81549060ff02191690556000820160026101000a81549060ff0219169055600182016000905550508060600151600019168373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fcd2abdf6b4e963e07e9584816486597def4b3ec7dee88f7f66ad7dfb2c40d79e60405160405180910390a46001915050919050565b600080600060149054906101000a900460ff16151515613ce757600080fd5b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081111515613da1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f616d6f756e74206973207a65726f00000000000000000000000000000000000081525060200191505060405180910390fd5b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff167f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b826040518082815260200191505060405180910390a2600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015613ef957600080fd5b505af1158015613f0d573d6000803e3d6000fd5b505050506040513d6020811015613f2357600080fd5b81019080805190602001909291905050501515613fa8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f746f6b656e207472616e73666572206661696c6564000000000000000000000081525060200191505060405180910390fd5b600191505090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000806000806000613fe8615c51565b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160019054906101000a900460ff1615156140ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6d7573742062652061206d616e7566616374757265720000000000000000000081525060200191505060405180910390fd5b600060149054906101000a900460ff161515156140c857600080fd5b60008b51111515614141576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f6174206c65617374206f6e65206465766963652069732072657175697265640081525060200191505060405180910390fd5b89518b511415156141e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001807f6465766963652074797065206172726179206e6565647320746f20626520736181526020017f6d652073697a652061732064657669636573000000000000000000000000000081525060400191505060405180910390fd5b88518b5114151561427f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260388152602001807f646576696365207075626c6963206b6579206172726179206e6565647320746f81526020017f2062652073616d652073697a652061732064657669636573000000000000000081525060400191505060405180910390fd5b60009650600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314c44e096040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561430957600080fd5b505af115801561431d573d6000803e3d6000fd5b505050506040513d602081101561433357600080fd5b81019080805190602001909291905050509550600094505b8a5185101561443e578a8581518110151561436257fe5b906020019060200201519350898581518110151561437c57fe5b906020019060200201519250888581518110151561439657fe5b9060200190602002015191506143ae338585856156f5565b905080600001516000191684600019163373ffffffffffffffffffffffffffffffffffffffff167f0eb7a49a7f427b424a9fe87d487fd12d3f155c956145b0ac06a72ea85235e7d589876040518083815260200182600019166000191681526020019250505060405180910390a461442f8688615c3590919063ffffffff16565b9650848060010195505061434b565b6144483388614f2b565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd33308a6040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561454157600080fd5b505af1158015614555573d6000803e3d6000fd5b505050506040513d602081101561456b57600080fd5b810190808051906020019092919050505015156145f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f7472616e7366657246726f6d206661696c65640000000000000000000000000081525060200191505060405180910390fd5b60019750505050505050509392505050565b60056020528060005260406000206000915090508060000154908060010154905082565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806146d05750600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff165b1515614744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f6d757374206265206f776e6572206f7220616e2069726e2061646d696e00000081525060200191505060405180910390fd5b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549050600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160019054906101000a900460ff16156148bb576000600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141561487c57600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600080820160009055600182016000905550505b60076000826000191660001916815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600080820160006101000a81549060ff02191690556000820160016101000a81549060ff02191690556000820160026101000a81549060ff02191690556001820160009055505080600019168373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fdb9b3d3fa67ccdd9e527c3495268d215a339f094b8e0997c3bc9eef209a5016060405160405180910390a46001915050919050565b60046020528060005260406000206000915090508060000160009054906101000a900460ff16908060000160019054906101000a900460ff16908060000160029054906101000a900460ff16908060010154905084565b60036020528060005260406000206000915090508060000154908060010154908060020160009054906101000a900460ff16908060020160019054906101000a900460ff16908060030154908060040154905086565b60008060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515614ab757600080fd5b600092505b8351831015614cc4578383815181101515614ad357fe5b9060200190602002015191508173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b158015614b7a57600080fd5b505af1158015614b8e573d6000803e3d6000fd5b505050506040513d6020811015614ba457600080fd5b810190808051906020019092919050505090508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015614c7b57600080fd5b505af1158015614c8f573d6000803e3d6000fd5b505050506040513d6020811015614ca557600080fd5b8101908080519060200190929190505050508280600101935050614abc565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515614d7f57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515614dbb57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6008602052816000526040600020602052806000526040600020600091509150505481565b600080831415614ed75760009050614ef6565b8183029050818382811515614ee857fe5b04141515614ef257fe5b8090505b92915050565b60008183811515614f0957fe5b04905092915050565b6000828211151515614f2057fe5b818303905092915050565b614f8081600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154615c3590919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055505050565b614fd2615c51565b600080600102846000191614151515615053576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f64657669636520696420697320656d707479000000000000000000000000000081525060200191505060405180910390fd5b600360008560405180826000191660001916815260200191505060405180910390206000191660001916815260200190815260200160002090508060020160009054906101000a900460ff161515615113576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f6e6f74207265676973746572656400000000000000000000000000000000000081525060200191505060405180910390fd5b8060020160019054906101000a900460ff161515615199576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f6e6f74206163746976617465640000000000000000000000000000000000000081525060200191505060405180910390fd5b82600019168160030154600019161415151561521d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f6e65772073636f7265206e6565647320746f20626520646966666572656e740081525060200191505060405180910390fd5b828160030181600019169055508060c060405190810160405290816000820154600019166000191681526020016001820154600019166000191681526020016002820160009054906101000a900460ff161515151581526020016002820160019054906101000a900460ff16151515158152602001600382015460001916600019168152602001600482015460001916600019168152505091505092915050565b600081111515615336576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f5f616d6f756e742069732072657175697265640000000000000000000000000081525060200191505060405180910390fd5b61538b81600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154614f1290919063ffffffff16565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555061542381600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054615c3590919063ffffffff16565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b615473615c51565b600080836040518082600019166000191681526020019150506040518091039020915060036000836000191660001916815260200190815260200160002090508060020160009054906101000a900460ff161515615539576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f6e6f74207265676973746572656400000000000000000000000000000000000081525060200191505060405180910390fd5b8060020160019054906101000a900460ff161515156155c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f616c72656164792061637469766174656400000000000000000000000000000081525060200191505060405180910390fd5b600060010281600001546000191614151515615644576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f6e6f206d616e7566616374757265722069642077617320666f756e640000000081525060200191505060405180910390fd5b60018160020160016101000a81548160ff0219169083151502179055508060c060405190810160405290816000820154600019166000191681526020016001820154600019166000191681526020016002820160009054906101000a900460ff161515151581526020016002820160019054906101000a900460ff16151515158152602001600382015460001916600019168152602001600482015460001916600019168152505092505050919050565b6156fd615c51565b600080600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16141515156157a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f6d616e756661637475726572206973207265717569726564000000000000000081525060200191505060405180910390fd5b6000600102866000191614151515615825576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f646576696365206964206861736820697320726571756972656400000000000081525060200191505060405180910390fd5b60006001028560001916141515156158a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f646576696365207479706520697320726571756972656400000000000000000081525060200191505060405180910390fd5b6000600102846000191614151515615925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f646576696365207075626c6963206b657920697320726571756972656400000081525060200191505060405180910390fd5b60036000876000191660001916815260200190815260200160002091508160020160009054906101000a900460ff161515156159c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f64657669636520697320616c726561647920726567697374657265640000000081525060200191505060405180910390fd5b8160020160019054906101000a900460ff16151515615a50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f64657669636520697320616c726561647920616374697661746564000000000081525060200191505060405180910390fd5b600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490506000600102816000191614151515615b15576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f6d616e75666163747572657220696420697320756e6b6e6f776e00000000000081525060200191505060405180910390fd5b808260000181600019169055508482600101816000191690555060018260020160006101000a81548160ff02191690831515021790555060008260020160016101000a81548160ff02191690831515021790555060096000826000191660001916815260200190815260200160002054826003018160001916905550838260040181600019169055508160c060405190810160405290816000820154600019166000191681526020016001820154600019166000191681526020016002820160009054906101000a900460ff161515151581526020016002820160019054906101000a900460ff16151515158152602001600382015460001916600019168152602001600482015460001916600019168152505092505050949350505050565b60008183019050828110151515615c4857fe5b80905092915050565b60c060405190810160405280600080191681526020016000801916815260200160001515815260200160001515815260200160008019168152602001600080191681525090565b6080604051908101604052806000151581526020016000151581526020016000151581526020016000801916815250905600a165627a7a723058204d2ff784448524fb6edf8e9272a47100642593d626e1d13ec6015e6dfe28949b002900000000000000000000000097aeb5066e1a590e868b511457beb6fe99d329f50000000000000000000000002566c658331eac75d3b3ccd0e45c78d9cf6c4c4c

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

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000097aeb5066e1a590e868b511457beb6fe99d329f5
Arg [1] : 0000000000000000000000002566c658331eac75d3b3ccd0e45c78d9cf6c4c4c


   Swarm Source:
bzzr://4d2ff784448524fb6edf8e9272a47100642593d626e1d13ec6015e6dfe28949b

 

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