Sponsored Link:   trade.io - The Future of Crypto Trading - A Better, Faster, Smarter Crypto Exchange - Pre-Register Now!
Contract Overview
Balance: 0 Ether
Ether Value: $0
Transactions: 4011 txns
 Latest 25 txns from a total Of 4011 transactions
(> more than 25 PendingTxns)

TxHash Age From To Value [TxFee]
0x00d98bfdc6bce2206a637b7f1746c804d97ee189a91975e4637e4671c2cfc20e(pending)0xdf36d97497f922a7c5c226036aa1233c3bea0d29  IN  0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0.009 Ether(pending)
0x1c0486356b3777450ddb9848756cfbcd2149a8e5a97e6b8dc8eef48296b53fee(pending)0x954d9420a67469af8b6dcc934688e703a43c9c8c  IN  0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0.0000024 Ether(pending)
0xcf95b1e011cba8d6dcacd5eee81d83c8c12adfb057f822c594e274c02b46a2c9(pending)0xd9be72468f0a1f7869447cb2e3d692954ca3e1a3  IN  0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0.655 Ether(pending)
0xf1218856c56921c3fa42b6e2074088756981f0497d5f68560b1240bb248f77ff(pending)0x56f2aed56854fc68181667a7babb970c03e76841  IN  0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0.1 Ether(pending)
0xbcb3f2dad78938fcf915a786b314d39fbeae0bc07c261310b13c0335571519d1(pending)0x8b80028c8c644c7de49031aefa327b75c29f65b0  IN  0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0.42 Ether(pending)
0x0fe03933fd13767f604ea0a3b78d81061c07eae8b4db9d27a47c265a16ed3e2d(pending)0x8b80028c8c644c7de49031aefa327b75c29f65b0  IN  0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0.42 Ether(pending)
0xe04724a373c3432bce1e6bd9c32ffc699e2119c1a874572f59dd3d1806314f2c(pending)0x8b80028c8c644c7de49031aefa327b75c29f65b0  IN  0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0.14 Ether(pending)
0xd2b6d0b8bb6a72141656b6718830a6f96d38f641037297071e235997de3cfadf(pending)0x8b80028c8c644c7de49031aefa327b75c29f65b0  IN  0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0.048 Ether(pending)
0x2d77255ad7c0619afec05c828a4d800a29e110cff4886f68f7e3211af4f9c4f7(pending)0x8b80028c8c644c7de49031aefa327b75c29f65b0  IN  0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0.07 Ether(pending)
0xee30efa2d59f9667a6107f06e2e3dc41d6564900e745ec96fdefa9635a3eedb4(pending)0x8b80028c8c644c7de49031aefa327b75c29f65b0  IN  0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0.0014 Ether(pending)
0xc01827950473342f72da81d39b8f70caf247dc580c38f3369652f30ac0526f41(pending)0x8b80028c8c644c7de49031aefa327b75c29f65b0  IN  0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0.0036 Ether(pending)
0x1c713a2cf9acb412a564d6fd8bf3935159876bcfdc1f7949d05eeeb2bd9f485b(pending)0x8b80028c8c644c7de49031aefa327b75c29f65b0  IN  0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0.00038 Ether(pending)
0x72904e7f8120c7df2f1e6cfa56589494176b722ed09905e61ccaf76edb50f5cf(pending)0x8b80028c8c644c7de49031aefa327b75c29f65b0  IN  0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0.0065 Ether(pending)
0x44a0ca06ee6174ca831778d91a43e3def416796e34987f19e1b31d9eaa8de90f(pending)0xafef03f6a77df7c553eb96756ed37e071b0c427c  IN  0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0.22 Ether(pending)
0xad51664fc2c4e65a48d795b5b33b81542b6bfb8e6348f75059d4429e27f91be2(pending)0x4a2c5a0af8b29cd5fd8eb1d02a83150a3ee10488  IN  0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0.06 Ether(pending)
0x3f923e73cd8a79dedc5579c971f10039fdca5bc7e07b649fef2527565ddfe194(pending)0x5b985d300f3aac578bb9bd709da2a21a67cd3d88  IN  0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0.75 Ether(pending)
0xdf293dd06d4f9a196478205f051605ea309c338c6b55aa5662f4a1fb246bcd68(pending)0x200d001ecd3df423fa1e862f80e122b16688cfc4  IN  0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0.085 Ether(pending)
0xcd0fb1dd4410bb57e34a42285815222e12b0922ea921067356a8088bc80f51ef(pending)0x1e17a75616cd74f5846b1b71622aa8e10ea26cc0  IN  0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0.029 Ether(pending)
0xe9e7cb2c30442937e444c22d573743459b4cf42ed1f3336f901600cd62a3ff41(pending)0x1e17a75616cd74f5846b1b71622aa8e10ea26cc0  IN  0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0.029 Ether(pending)
0x8c0461a9df4fd5dc0656c98fb9bd8ff14e76120c121b97b98821f6243607c63f(pending)0x1e17a75616cd74f5846b1b71622aa8e10ea26cc0  IN  0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0.029 Ether(pending)
0x27a2fa11b164ecfda2d218010e2fa2aee502e689f89cab68f3d276ddf2672444(pending)0x1e17a75616cd74f5846b1b71622aa8e10ea26cc0  IN  0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0.045 Ether(pending)
0xb5e901a018cb37a1e67ec84cd93a486812f1ca91c0aa4a2a8c2efe900493fce3(pending)0x1e17a75616cd74f5846b1b71622aa8e10ea26cc0  IN  0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0.045 Ether(pending)
0xf6d6af3b427cf1e0972cda26b02ff5d05bb458c074b0f691a3cd4d1fc4eeec2b(pending)0xdbaa5f211aefcd1161b785b336e3818a19d98be9  IN  0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0.15 Ether(pending)
0x08f576dd6661c4974942e8dff632f3d1b6f3846481566e1927e32313f12e18e0(pending)0x35e2e4c306ddfcebe7aecf8da0858033710f5ebd  IN  0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0.3 Ether(pending)
0x42f5992d37715240d3cf87d44c7f9f5fb7ac87e9f48c138cc0a5d10f3d86f599(pending)0x8b80028c8c644c7de49031aefa327b75c29f65b0  IN  0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0.002 Ether(pending)
 Internal Transactions as a result of Contract Execution
 Latest 25 Internal Txns, Click here to View More View All
ParentTxHash Block Age From To Value
0xb077eb3518044871d336f9a882d375ad7e7abb73f782a4b7f76f64cbf00f16c1600799729 mins ago0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0xd5524179cb7ae012f5b642c1d6d700bbaa76b96b0.05 Ether
0x5109978d063d4a6520df66a45904b520a56fb46658546f91592e03997456e12b600798531 mins ago0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0xd5524179cb7ae012f5b642c1d6d700bbaa76b96b0.1 Ether
0x430b21f4bab13a26397a32edf6d8ee4e22e82e5435a7a7d6154249739d40d585600795040 mins ago0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0xd5524179cb7ae012f5b642c1d6d700bbaa76b96b0.15 Ether
0x7fbd58bb6acc3b441825848c8f90c20b01d18dc8350d64fa602b970eda3af4b3600791850 mins ago0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0xd5524179cb7ae012f5b642c1d6d700bbaa76b96b0.01 Ether
0x8aa6acc4c95e289333233c7763023f2e2ab34edf8e4735315f03ae21b527933160078691 hr 1 min ago0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0xd5524179cb7ae012f5b642c1d6d700bbaa76b96b0.085 Ether
0x0f5b32a85a0dc0d222c453b198803a1d9f329addcea56af98ba1b9425dd89b6b60078661 hr 1 min ago0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0xd5524179cb7ae012f5b642c1d6d700bbaa76b96b0.134 Ether
0x58a2c68b31544e3599701676710689e3f6c9b0e2cb6c08757b1e2e2236ccb68b60078641 hr 1 min ago0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0xd5524179cb7ae012f5b642c1d6d700bbaa76b96b0.0002 Ether
0x7e0638c24ef4943be01c4965b28dd29c10960922afdb13e0f139767d319d34ab60078541 hr 4 mins ago0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0xd5524179cb7ae012f5b642c1d6d700bbaa76b96b0.0089 Ether
0x87d3103692560d2d7bb1504d9659d1063a815939b01e96a1f5f4616db187eb0560078301 hr 10 mins ago0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0xd5524179cb7ae012f5b642c1d6d700bbaa76b96b0.0105 Ether
0x6a827e4020616e05de67ec950c733c5a36bf0842725c6a22a326737f6a047afe60078241 hr 11 mins ago0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0xd5524179cb7ae012f5b642c1d6d700bbaa76b96b0.04 Ether
0xe07d4a5ab8248702e0654e1940fa135a7a0a57144d203a04567ee274c36c199e60078221 hr 11 mins ago0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0xd5524179cb7ae012f5b642c1d6d700bbaa76b96b0.05 Ether
0xba9ccfdac600c995f26530e5ffaf7d46f901913e716e67b50949062b1668eba460076471 hr 55 mins ago0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0xd5524179cb7ae012f5b642c1d6d700bbaa76b96b0.645 Ether
0xcf599d74decd348b4c4f2431dd8a2443cfc531f51d6f0be648767167382dfd9960075762 hrs 11 mins ago0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0xd5524179cb7ae012f5b642c1d6d700bbaa76b96b0.082 Ether
0x9165eee0a382de472fe7822c876ab02d31683380bf960cb851beeee3fdbc24db60073493 hrs ago0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0xd5524179cb7ae012f5b642c1d6d700bbaa76b96b0.035 Ether
0x07201c45aac2e029c3440e1f48370db9aec86543569b61d91d3b535c36e9583060072673 hrs 18 mins ago0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0xd5524179cb7ae012f5b642c1d6d700bbaa76b96b0.645 Ether
0x08b7ef6b99e830fe9b49d221baad9915919456bbbab07c2fe6e994508ec4f65360072583 hrs 21 mins ago0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0xd5524179cb7ae012f5b642c1d6d700bbaa76b96b0.005 Ether
0x0fa98cc6e29ce1c68bf161858d745f3be7d7c4196a8deb3d7d64451d14016eb560071433 hrs 51 mins ago0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0xd5524179cb7ae012f5b642c1d6d700bbaa76b96b0.375 Ether
0x58367f378054b862a66e1f8c431516f3a5a3655edfc0a887f166cf67c70d161f60069884 hrs 27 mins ago0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0xd5524179cb7ae012f5b642c1d6d700bbaa76b96b0.3575 Ether
0xea5a4cbf281de1684425eb79ceb16b601393a7247afbf6325441ba2c9836804860069864 hrs 27 mins ago0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0xd5524179cb7ae012f5b642c1d6d700bbaa76b96b0.385 Ether
0xa901cf22d2a2f2759e09f23e7e614995063dfe760c2b2dd182fabaa70b5b573660069564 hrs 36 mins ago0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0xd5524179cb7ae012f5b642c1d6d700bbaa76b96b0.043 Ether
0x60a4c5090eec44f5ac14ee3fd9d2e2e2a4e6eba5b198bffa0c1f8a4c519c411a60069314 hrs 41 mins ago0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0xd5524179cb7ae012f5b642c1d6d700bbaa76b96b0.082 Ether
0x4c540e2d582bac8e0827a606e3266270901ba550ef6ad585cdb7248d16c1b51c60069204 hrs 43 mins ago0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0xd5524179cb7ae012f5b642c1d6d700bbaa76b96b0.0375 Ether
0x41686c7935a55c0c5d4141eb97dc1c6c51a134fc6ccf0adcc1843c0ffc49f5a160066145 hrs 58 mins ago0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0xd5524179cb7ae012f5b642c1d6d700bbaa76b96b0.2 Ether
0x874cede4b09f229c923cfe3b01f1ca45ec301ad1c292176543e5bab302f137a260066115 hrs 58 mins ago0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0xd5524179cb7ae012f5b642c1d6d700bbaa76b96b0.042 Ether
0xd2f0c99f308337ee38e95216b063814ace2481909e6aadd278bbbbe32f443e0760065376 hrs 14 mins ago0x24e2b1d415e6e0d04042eaa45dc2a08fc33ca6cd0xd5524179cb7ae012f5b642c1d6d700bbaa76b96b0.3 Ether
[ Download CSV Export  ] 
Contract Source Code Verified (Exact match)
Contract Name: Trade
Compiler Version: v0.4.20+commit.3155dd80
Optimization Enabled: Yes
Runs (Optimiser):  500



  Contract Source Code   Find Similiar Contracts

pragma solidity 0.4.20;

contract IAugur {
    function createChildUniverse(bytes32 _parentPayoutDistributionHash, uint256[] _parentPayoutNumerators, bool _parentInvalid) public returns (IUniverse);
    function isKnownUniverse(IUniverse _universe) public view returns (bool);
    function trustedTransfer(ERC20 _token, address _from, address _to, uint256 _amount) public returns (bool);
    function logMarketCreated(bytes32 _topic, string _description, string _extraInfo, IUniverse _universe, address _market, address _marketCreator, bytes32[] _outcomes, int256 _minPrice, int256 _maxPrice, IMarket.MarketType _marketType) public returns (bool);
    function logMarketCreated(bytes32 _topic, string _description, string _extraInfo, IUniverse _universe, address _market, address _marketCreator, int256 _minPrice, int256 _maxPrice, IMarket.MarketType _marketType) public returns (bool);
    function logInitialReportSubmitted(IUniverse _universe, address _reporter, address _market, uint256 _amountStaked, bool _isDesignatedReporter, uint256[] _payoutNumerators, bool _invalid) public returns (bool);
    function disputeCrowdsourcerCreated(IUniverse _universe, address _market, address _disputeCrowdsourcer, uint256[] _payoutNumerators, uint256 _size, bool _invalid) public returns (bool);
    function logDisputeCrowdsourcerContribution(IUniverse _universe, address _reporter, address _market, address _disputeCrowdsourcer, uint256 _amountStaked) public returns (bool);
    function logDisputeCrowdsourcerCompleted(IUniverse _universe, address _market, address _disputeCrowdsourcer) public returns (bool);
    function logInitialReporterRedeemed(IUniverse _universe, address _reporter, address _market, uint256 _amountRedeemed, uint256 _repReceived, uint256 _reportingFeesReceived, uint256[] _payoutNumerators) public returns (bool);
    function logDisputeCrowdsourcerRedeemed(IUniverse _universe, address _reporter, address _market, uint256 _amountRedeemed, uint256 _repReceived, uint256 _reportingFeesReceived, uint256[] _payoutNumerators) public returns (bool);
    function logFeeWindowRedeemed(IUniverse _universe, address _reporter, uint256 _amountRedeemed, uint256 _reportingFeesReceived) public returns (bool);
    function logMarketFinalized(IUniverse _universe) public returns (bool);
    function logMarketMigrated(IMarket _market, IUniverse _originalUniverse) public returns (bool);
    function logReportingParticipantDisavowed(IUniverse _universe, IMarket _market) public returns (bool);
    function logMarketParticipantsDisavowed(IUniverse _universe) public returns (bool);
    function logOrderCanceled(IUniverse _universe, address _shareToken, address _sender, bytes32 _orderId, Order.Types _orderType, uint256 _tokenRefund, uint256 _sharesRefund) public returns (bool);
    function logOrderCreated(Order.Types _orderType, uint256 _amount, uint256 _price, address _creator, uint256 _moneyEscrowed, uint256 _sharesEscrowed, bytes32 _tradeGroupId, bytes32 _orderId, IUniverse _universe, address _shareToken) public returns (bool);
    function logOrderFilled(IUniverse _universe, address _shareToken, address _filler, bytes32 _orderId, uint256 _numCreatorShares, uint256 _numCreatorTokens, uint256 _numFillerShares, uint256 _numFillerTokens, uint256 _marketCreatorFees, uint256 _reporterFees, uint256 _amountFilled, bytes32 _tradeGroupId) public returns (bool);
    function logCompleteSetsPurchased(IUniverse _universe, IMarket _market, address _account, uint256 _numCompleteSets) public returns (bool);
    function logCompleteSetsSold(IUniverse _universe, IMarket _market, address _account, uint256 _numCompleteSets) public returns (bool);
    function logTradingProceedsClaimed(IUniverse _universe, address _shareToken, address _sender, address _market, uint256 _numShares, uint256 _numPayoutTokens, uint256 _finalTokenBalance) public returns (bool);
    function logUniverseForked() public returns (bool);
    function logFeeWindowTransferred(IUniverse _universe, address _from, address _to, uint256 _value) public returns (bool);
    function logReputationTokensTransferred(IUniverse _universe, address _from, address _to, uint256 _value) public returns (bool);
    function logDisputeCrowdsourcerTokensTransferred(IUniverse _universe, address _from, address _to, uint256 _value) public returns (bool);
    function logShareTokensTransferred(IUniverse _universe, address _from, address _to, uint256 _value) public returns (bool);
    function logReputationTokenBurned(IUniverse _universe, address _target, uint256 _amount) public returns (bool);
    function logReputationTokenMinted(IUniverse _universe, address _target, uint256 _amount) public returns (bool);
    function logShareTokenBurned(IUniverse _universe, address _target, uint256 _amount) public returns (bool);
    function logShareTokenMinted(IUniverse _universe, address _target, uint256 _amount) public returns (bool);
    function logFeeWindowBurned(IUniverse _universe, address _target, uint256 _amount) public returns (bool);
    function logFeeWindowMinted(IUniverse _universe, address _target, uint256 _amount) public returns (bool);
    function logDisputeCrowdsourcerTokensBurned(IUniverse _universe, address _target, uint256 _amount) public returns (bool);
    function logDisputeCrowdsourcerTokensMinted(IUniverse _universe, address _target, uint256 _amount) public returns (bool);
    function logFeeWindowCreated(IFeeWindow _feeWindow, uint256 _id) public returns (bool);
    function logFeeTokenTransferred(IUniverse _universe, address _from, address _to, uint256 _value) public returns (bool);
    function logFeeTokenBurned(IUniverse _universe, address _target, uint256 _amount) public returns (bool);
    function logFeeTokenMinted(IUniverse _universe, address _target, uint256 _amount) public returns (bool);
    function logTimestampSet(uint256 _newTimestamp) public returns (bool);
    function logInitialReporterTransferred(IUniverse _universe, IMarket _market, address _from, address _to) public returns (bool);
    function logMarketTransferred(IUniverse _universe, address _from, address _to) public returns (bool);
    function logMarketMailboxTransferred(IUniverse _universe, IMarket _market, address _from, address _to) public returns (bool);
    function logEscapeHatchChanged(bool _isOn) public returns (bool);
}

contract IControlled {
    function getController() public view returns (IController);
    function setController(IController _controller) public returns(bool);
}

contract Controlled is IControlled {
    IController internal controller;

    modifier onlyWhitelistedCallers {
        require(controller.assertIsWhitelisted(msg.sender));
        _;
    }

    modifier onlyCaller(bytes32 _key) {
        require(msg.sender == controller.lookup(_key));
        _;
    }

    modifier onlyControllerCaller {
        require(IController(msg.sender) == controller);
        _;
    }

    modifier onlyInGoodTimes {
        require(controller.stopInEmergency());
        _;
    }

    modifier onlyInBadTimes {
        require(controller.onlyInEmergency());
        _;
    }

    function Controlled() public {
        controller = IController(msg.sender);
    }

    function getController() public view returns(IController) {
        return controller;
    }

    function setController(IController _controller) public onlyControllerCaller returns(bool) {
        controller = _controller;
        return true;
    }
}

contract IController {
    function assertIsWhitelisted(address _target) public view returns(bool);
    function lookup(bytes32 _key) public view returns(address);
    function stopInEmergency() public view returns(bool);
    function onlyInEmergency() public view returns(bool);
    function getAugur() public view returns (IAugur);
    function getTimestamp() public view returns (uint256);
}

contract CashAutoConverter is Controlled {
    /**
     * @dev Convert any ETH provided in the transaction into Cash before the function executes and convert any remaining Cash balance into ETH after the function completes
     */
    modifier convertToAndFromCash() {
        ethToCash();
        _;
        cashToEth();
    }

    function ethToCash() private returns (bool) {
        if (msg.value > 0) {
            ICash(controller.lookup("Cash")).depositEtherFor.value(msg.value)(msg.sender);
        }
        return true;
    }

    function cashToEth() private returns (bool) {
        ICash _cash = ICash(controller.lookup("Cash"));
        uint256 _tokenBalance = _cash.balanceOf(msg.sender);
        if (_tokenBalance > 0) {
            IAugur augur = controller.getAugur();
            augur.trustedTransfer(_cash, msg.sender, this, _tokenBalance);
            _cash.withdrawEtherTo(msg.sender, _tokenBalance);
        }
        return true;
    }
}

contract IOwnable {
    function getOwner() public view returns (address);
    function transferOwnership(address newOwner) public returns (bool);
}

contract ITyped {
    function getTypeName() public view returns (bytes32);
}

contract Initializable {
    bool private initialized = false;

    modifier afterInitialized {
        require(initialized);
        _;
    }

    modifier beforeInitialized {
        require(!initialized);
        _;
    }

    function endInitialization() internal beforeInitialized returns (bool) {
        initialized = true;
        return true;
    }

    function getInitialized() public view returns (bool) {
        return initialized;
    }
}

contract MarketValidator is Controlled {
    modifier marketIsLegit(IMarket _market) {
        IUniverse _universe = _market.getUniverse();
        require(controller.getAugur().isKnownUniverse(_universe));
        require(_universe.isContainerForMarket(_market));
        _;
    }
}

contract ReentrancyGuard {
    /**
     * @dev We use a single lock for the whole contract.
     */
    bool private rentrancyLock = false;

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * @notice If you mark a function `nonReentrant`, you should also mark it `external`. Calling one nonReentrant function from another is not supported. Instead, you can implement a `private` function doing the actual work, and a `external` wrapper marked as `nonReentrant`.
     */
    modifier nonReentrant() {
        require(!rentrancyLock);
        rentrancyLock = true;
        _;
        rentrancyLock = false;
    }
}

library SafeMathUint256 {
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a * b;
        require(a == 0 || c / a == b);
        return c;
    }

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

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

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

    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a <= b) {
            return a;
        } else {
            return b;
        }
    }

    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a >= b) {
            return a;
        } else {
            return b;
        }
    }

    function getUint256Min() internal pure returns (uint256) {
        return 0;
    }

    function getUint256Max() internal pure returns (uint256) {
        return 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff;
    }

    function isMultipleOf(uint256 a, uint256 b) internal pure returns (bool) {
        return a % b == 0;
    }

    // Float [fixed point] Operations
    function fxpMul(uint256 a, uint256 b, uint256 base) internal pure returns (uint256) {
        return div(mul(a, b), base);
    }

    function fxpDiv(uint256 a, uint256 b, uint256 base) internal pure returns (uint256) {
        return div(mul(a, base), b);
    }
}

contract ERC20Basic {
    event Transfer(address indexed from, address indexed to, uint256 value);

    function balanceOf(address _who) public view returns (uint256);
    function transfer(address _to, uint256 _value) public returns (bool);
    function totalSupply() public view returns (uint256);
}

contract ERC20 is ERC20Basic {
    event Approval(address indexed owner, address indexed spender, uint256 value);

    function allowance(address _owner, address _spender) public view returns (uint256);
    function transferFrom(address _from, address _to, uint256 _value) public returns (bool);
    function approve(address _spender, uint256 _value) public returns (bool);
}

contract IFeeToken is ERC20, Initializable {
    function initialize(IFeeWindow _feeWindow) public returns (bool);
    function getFeeWindow() public view returns (IFeeWindow);
    function feeWindowBurn(address _target, uint256 _amount) public returns (bool);
    function mintForReportingParticipant(address _target, uint256 _amount) public returns (bool);
}

contract IFeeWindow is ITyped, ERC20 {
    function initialize(IUniverse _universe, uint256 _feeWindowId) public returns (bool);
    function getUniverse() public view returns (IUniverse);
    function getReputationToken() public view returns (IReputationToken);
    function getStartTime() public view returns (uint256);
    function getEndTime() public view returns (uint256);
    function getNumMarkets() public view returns (uint256);
    function getNumInvalidMarkets() public view returns (uint256);
    function getNumIncorrectDesignatedReportMarkets() public view returns (uint256);
    function getNumDesignatedReportNoShows() public view returns (uint256);
    function getFeeToken() public view returns (IFeeToken);
    function isActive() public view returns (bool);
    function isOver() public view returns (bool);
    function onMarketFinalized() public returns (bool);
    function buy(uint256 _attotokens) public returns (bool);
    function redeem(address _sender) public returns (bool);
    function redeemForReportingParticipant() public returns (bool);
    function mintFeeTokens(uint256 _amount) public returns (bool);
    function trustedUniverseBuy(address _buyer, uint256 _attotokens) public returns (bool);
}

contract IMailbox {
    function initialize(address _owner, IMarket _market) public returns (bool);
    function depositEther() public payable returns (bool);
}

contract IMarket is ITyped, IOwnable {
    enum MarketType {
        YES_NO,
        CATEGORICAL,
        SCALAR
    }

    function initialize(IUniverse _universe, uint256 _endTime, uint256 _feePerEthInAttoeth, ICash _cash, address _designatedReporterAddress, address _creator, uint256 _numOutcomes, uint256 _numTicks) public payable returns (bool _success);
    function derivePayoutDistributionHash(uint256[] _payoutNumerators, bool _invalid) public view returns (bytes32);
    function getUniverse() public view returns (IUniverse);
    function getFeeWindow() public view returns (IFeeWindow);
    function getNumberOfOutcomes() public view returns (uint256);
    function getNumTicks() public view returns (uint256);
    function getDenominationToken() public view returns (ICash);
    function getShareToken(uint256 _outcome)  public view returns (IShareToken);
    function getMarketCreatorSettlementFeeDivisor() public view returns (uint256);
    function getForkingMarket() public view returns (IMarket _market);
    function getEndTime() public view returns (uint256);
    function getMarketCreatorMailbox() public view returns (IMailbox);
    function getWinningPayoutDistributionHash() public view returns (bytes32);
    function getWinningPayoutNumerator(uint256 _outcome) public view returns (uint256);
    function getReputationToken() public view returns (IReputationToken);
    function getFinalizationTime() public view returns (uint256);
    function getInitialReporterAddress() public view returns (address);
    function deriveMarketCreatorFeeAmount(uint256 _amount) public view returns (uint256);
    function isContainerForShareToken(IShareToken _shadyTarget) public view returns (bool);
    function isContainerForReportingParticipant(IReportingParticipant _reportingParticipant) public view returns (bool);
    function isInvalid() public view returns (bool);
    function finalize() public returns (bool);
    function designatedReporterWasCorrect() public view returns (bool);
    function designatedReporterShowed() public view returns (bool);
    function isFinalized() public view returns (bool);
    function finalizeFork() public returns (bool);
    function assertBalances() public view returns (bool);
}

contract IReportingParticipant {
    function getStake() public view returns (uint256);
    function getPayoutDistributionHash() public view returns (bytes32);
    function liquidateLosing() public returns (bool);
    function redeem(address _redeemer) public returns (bool);
    function isInvalid() public view returns (bool);
    function isDisavowed() public view returns (bool);
    function migrate() public returns (bool);
    function getPayoutNumerator(uint256 _outcome) public view returns (uint256);
    function getMarket() public view returns (IMarket);
    function getSize() public view returns (uint256);
}

contract IDisputeCrowdsourcer is IReportingParticipant, ERC20 {
    function initialize(IMarket market, uint256 _size, bytes32 _payoutDistributionHash, uint256[] _payoutNumerators, bool _invalid) public returns (bool);
    function contribute(address _participant, uint256 _amount) public returns (uint256);
}

contract IReputationToken is ITyped, ERC20 {
    function initialize(IUniverse _universe) public returns (bool);
    function migrateOut(IReputationToken _destination, uint256 _attotokens) public returns (bool);
    function migrateIn(address _reporter, uint256 _attotokens) public returns (bool);
    function trustedReportingParticipantTransfer(address _source, address _destination, uint256 _attotokens) public returns (bool);
    function trustedMarketTransfer(address _source, address _destination, uint256 _attotokens) public returns (bool);
    function trustedFeeWindowTransfer(address _source, address _destination, uint256 _attotokens) public returns (bool);
    function trustedUniverseTransfer(address _source, address _destination, uint256 _attotokens) public returns (bool);
    function getUniverse() public view returns (IUniverse);
    function getTotalMigrated() public view returns (uint256);
    function getTotalTheoreticalSupply() public view returns (uint256);
    function mintForReportingParticipant(uint256 _amountMigrated) public returns (bool);
}

contract IUniverse is ITyped {
    function initialize(IUniverse _parentUniverse, bytes32 _parentPayoutDistributionHash) external returns (bool);
    function fork() public returns (bool);
    function getParentUniverse() public view returns (IUniverse);
    function createChildUniverse(uint256[] _parentPayoutNumerators, bool _invalid) public returns (IUniverse);
    function getChildUniverse(bytes32 _parentPayoutDistributionHash) public view returns (IUniverse);
    function getReputationToken() public view returns (IReputationToken);
    function getForkingMarket() public view returns (IMarket);
    function getForkEndTime() public view returns (uint256);
    function getForkReputationGoal() public view returns (uint256);
    function getParentPayoutDistributionHash() public view returns (bytes32);
    function getDisputeRoundDurationInSeconds() public view returns (uint256);
    function getOrCreateFeeWindowByTimestamp(uint256 _timestamp) public returns (IFeeWindow);
    function getOrCreateCurrentFeeWindow() public returns (IFeeWindow);
    function getOrCreateNextFeeWindow() public returns (IFeeWindow);
    function getOpenInterestInAttoEth() public view returns (uint256);
    function getRepMarketCapInAttoeth() public view returns (uint256);
    function getTargetRepMarketCapInAttoeth() public view returns (uint256);
    function getOrCacheValidityBond() public returns (uint256);
    function getOrCacheDesignatedReportStake() public returns (uint256);
    function getOrCacheDesignatedReportNoShowBond() public returns (uint256);
    function getOrCacheReportingFeeDivisor() public returns (uint256);
    function getDisputeThresholdForFork() public view returns (uint256);
    function getInitialReportMinValue() public view returns (uint256);
    function calculateFloatingValue(uint256 _badMarkets, uint256 _totalMarkets, uint256 _targetDivisor, uint256 _previousValue, uint256 _defaultValue, uint256 _floor) public pure returns (uint256 _newValue);
    function getOrCacheMarketCreationCost() public returns (uint256);
    function getCurrentFeeWindow() public view returns (IFeeWindow);
    function getOrCreateFeeWindowBefore(IFeeWindow _feeWindow) public returns (IFeeWindow);
    function isParentOf(IUniverse _shadyChild) public view returns (bool);
    function updateTentativeWinningChildUniverse(bytes32 _parentPayoutDistributionHash) public returns (bool);
    function isContainerForFeeWindow(IFeeWindow _shadyTarget) public view returns (bool);
    function isContainerForMarket(IMarket _shadyTarget) public view returns (bool);
    function isContainerForReportingParticipant(IReportingParticipant _reportingParticipant) public view returns (bool);
    function isContainerForShareToken(IShareToken _shadyTarget) public view returns (bool);
    function isContainerForFeeToken(IFeeToken _shadyTarget) public view returns (bool);
    function addMarketTo() public returns (bool);
    function removeMarketFrom() public returns (bool);
    function decrementOpenInterest(uint256 _amount) public returns (bool);
    function decrementOpenInterestFromMarket(uint256 _amount) public returns (bool);
    function incrementOpenInterest(uint256 _amount) public returns (bool);
    function incrementOpenInterestFromMarket(uint256 _amount) public returns (bool);
    function getWinningChildUniverse() public view returns (IUniverse);
    function isForking() public view returns (bool);
}

contract ICash is ERC20 {
    function depositEther() external payable returns(bool);
    function depositEtherFor(address _to) external payable returns(bool);
    function withdrawEther(uint256 _amount) external returns(bool);
    function withdrawEtherTo(address _to, uint256 _amount) external returns(bool);
    function withdrawEtherToIfPossible(address _to, uint256 _amount) external returns (bool);
}

contract ICreateOrder {
    function publicCreateOrder(Order.Types, uint256, uint256, IMarket, uint256, bytes32, bytes32, bytes32) external payable returns (bytes32);
    function createOrder(address, Order.Types, uint256, uint256, IMarket, uint256, bytes32, bytes32, bytes32) external returns (bytes32);
}

contract IFillOrder {
    function publicFillOrder(bytes32 _orderId, uint256 _amountFillerWants, bytes32 _tradeGroupId) external payable returns (uint256);
    function fillOrder(address _filler, bytes32 _orderId, uint256 _amountFillerWants, bytes32 tradeGroupId) external returns (uint256);
}

contract IOrders {
    function saveOrder(Order.Types _type, IMarket _market, uint256 _fxpAmount, uint256 _price, address _sender, uint256 _outcome, uint256 _moneyEscrowed, uint256 _sharesEscrowed, bytes32 _betterOrderId, bytes32 _worseOrderId, bytes32 _tradeGroupId) public returns (bytes32 _orderId);
    function removeOrder(bytes32 _orderId) public returns (bool);
    function getMarket(bytes32 _orderId) public view returns (IMarket);
    function getOrderType(bytes32 _orderId) public view returns (Order.Types);
    function getOutcome(bytes32 _orderId) public view returns (uint256);
    function getAmount(bytes32 _orderId) public view returns (uint256);
    function getPrice(bytes32 _orderId) public view returns (uint256);
    function getOrderCreator(bytes32 _orderId) public view returns (address);
    function getOrderSharesEscrowed(bytes32 _orderId) public view returns (uint256);
    function getOrderMoneyEscrowed(bytes32 _orderId) public view returns (uint256);
    function getBetterOrderId(bytes32 _orderId) public view returns (bytes32);
    function getWorseOrderId(bytes32 _orderId) public view returns (bytes32);
    function getBestOrderId(Order.Types _type, IMarket _market, uint256 _outcome) public view returns (bytes32);
    function getWorstOrderId(Order.Types _type, IMarket _market, uint256 _outcome) public view returns (bytes32);
    function getLastOutcomePrice(IMarket _market, uint256 _outcome) public view returns (uint256);
    function getOrderId(Order.Types _type, IMarket _market, uint256 _fxpAmount, uint256 _price, address _sender, uint256 _blockNumber, uint256 _outcome, uint256 _moneyEscrowed, uint256 _sharesEscrowed) public pure returns (bytes32);
    function getTotalEscrowed(IMarket _market) public view returns (uint256);
    function isBetterPrice(Order.Types _type, uint256 _price, bytes32 _orderId) public view returns (bool);
    function isWorsePrice(Order.Types _type, uint256 _price, bytes32 _orderId) public view returns (bool);
    function assertIsNotBetterPrice(Order.Types _type, uint256 _price, bytes32 _betterOrderId) public view returns (bool);
    function assertIsNotWorsePrice(Order.Types _type, uint256 _price, bytes32 _worseOrderId) public returns (bool);
    function recordFillOrder(bytes32 _orderId, uint256 _sharesFilled, uint256 _tokensFilled) public returns (bool);
    function setPrice(IMarket _market, uint256 _outcome, uint256 _price) external returns (bool);
    function incrementTotalEscrowed(IMarket _market, uint256 _amount) external returns (bool);
    function decrementTotalEscrowed(IMarket _market, uint256 _amount) external returns (bool);
}

contract IShareToken is ITyped, ERC20 {
    function initialize(IMarket _market, uint256 _outcome) external returns (bool);
    function createShares(address _owner, uint256 _amount) external returns (bool);
    function destroyShares(address, uint256 balance) external returns (bool);
    function getMarket() external view returns (IMarket);
    function getOutcome() external view returns (uint256);
    function trustedOrderTransfer(address _source, address _destination, uint256 _attotokens) public returns (bool);
    function trustedFillOrderTransfer(address _source, address _destination, uint256 _attotokens) public returns (bool);
    function trustedCancelOrderTransfer(address _source, address _destination, uint256 _attotokens) public returns (bool);
}

library Order {
    using SafeMathUint256 for uint256;

    enum Types {
        Bid, Ask
    }

    enum TradeDirections {
        Long, Short
    }

    struct Data {
        // Contracts
        IOrders orders;
        IMarket market;
        IAugur augur;

        // Order
        bytes32 id;
        address creator;
        uint256 outcome;
        Order.Types orderType;
        uint256 amount;
        uint256 price;
        uint256 sharesEscrowed;
        uint256 moneyEscrowed;
        bytes32 betterOrderId;
        bytes32 worseOrderId;
    }

    //
    // Constructor
    //

    // No validation is needed here as it is simply a librarty function for organizing data
    function create(IController _controller, address _creator, uint256 _outcome, Order.Types _type, uint256 _attoshares, uint256 _price, IMarket _market, bytes32 _betterOrderId, bytes32 _worseOrderId) internal view returns (Data) {
        require(_outcome < _market.getNumberOfOutcomes());
        require(_price < _market.getNumTicks());

        IOrders _orders = IOrders(_controller.lookup("Orders"));
        IAugur _augur = _controller.getAugur();

        return Data({
            orders: _orders,
            market: _market,
            augur: _augur,
            id: 0,
            creator: _creator,
            outcome: _outcome,
            orderType: _type,
            amount: _attoshares,
            price: _price,
            sharesEscrowed: 0,
            moneyEscrowed: 0,
            betterOrderId: _betterOrderId,
            worseOrderId: _worseOrderId
        });
    }

    //
    // "public" functions
    //

    function getOrderId(Order.Data _orderData) internal view returns (bytes32) {
        if (_orderData.id == bytes32(0)) {
            bytes32 _orderId = _orderData.orders.getOrderId(_orderData.orderType, _orderData.market, _orderData.amount, _orderData.price, _orderData.creator, block.number, _orderData.outcome, _orderData.moneyEscrowed, _orderData.sharesEscrowed);
            require(_orderData.orders.getAmount(_orderId) == 0);
            _orderData.id = _orderId;
        }
        return _orderData.id;
    }

    function getOrderTradingTypeFromMakerDirection(Order.TradeDirections _creatorDirection) internal pure returns (Order.Types) {
        return (_creatorDirection == Order.TradeDirections.Long) ? Order.Types.Bid : Order.Types.Ask;
    }

    function getOrderTradingTypeFromFillerDirection(Order.TradeDirections _fillerDirection) internal pure returns (Order.Types) {
        return (_fillerDirection == Order.TradeDirections.Long) ? Order.Types.Ask : Order.Types.Bid;
    }

    function escrowFunds(Order.Data _orderData) internal returns (bool) {
        if (_orderData.orderType == Order.Types.Ask) {
            return escrowFundsForAsk(_orderData);
        } else if (_orderData.orderType == Order.Types.Bid) {
            return escrowFundsForBid(_orderData);
        }
    }

    function saveOrder(Order.Data _orderData, bytes32 _tradeGroupId) internal returns (bytes32) {
        return _orderData.orders.saveOrder(_orderData.orderType, _orderData.market, _orderData.amount, _orderData.price, _orderData.creator, _orderData.outcome, _orderData.moneyEscrowed, _orderData.sharesEscrowed, _orderData.betterOrderId, _orderData.worseOrderId, _tradeGroupId);
    }

    //
    // Private functions
    //

    function escrowFundsForBid(Order.Data _orderData) private returns (bool) {
        require(_orderData.moneyEscrowed == 0);
        require(_orderData.sharesEscrowed == 0);
        uint256 _attosharesToCover = _orderData.amount;
        uint256 _numberOfOutcomes = _orderData.market.getNumberOfOutcomes();

        // Figure out how many almost-complete-sets (just missing `outcome` share) the creator has
        uint256 _attosharesHeld = 2**254;
        for (uint256 _i = 0; _i < _numberOfOutcomes; _i++) {
            if (_i != _orderData.outcome) {
                uint256 _creatorShareTokenBalance = _orderData.market.getShareToken(_i).balanceOf(_orderData.creator);
                _attosharesHeld = SafeMathUint256.min(_creatorShareTokenBalance, _attosharesHeld);
            }
        }

        // Take shares into escrow if they have any almost-complete-sets
        if (_attosharesHeld > 0) {
            _orderData.sharesEscrowed = SafeMathUint256.min(_attosharesHeld, _attosharesToCover);
            _attosharesToCover -= _orderData.sharesEscrowed;
            for (_i = 0; _i < _numberOfOutcomes; _i++) {
                if (_i != _orderData.outcome) {
                    _orderData.market.getShareToken(_i).trustedOrderTransfer(_orderData.creator, _orderData.market, _orderData.sharesEscrowed);
                }
            }
        }
        // If not able to cover entire order with shares alone, then cover remaining with tokens
        if (_attosharesToCover > 0) {
            _orderData.moneyEscrowed = _attosharesToCover.mul(_orderData.price);
            require(_orderData.augur.trustedTransfer(_orderData.market.getDenominationToken(), _orderData.creator, _orderData.market, _orderData.moneyEscrowed));
        }

        return true;
    }

    function escrowFundsForAsk(Order.Data _orderData) private returns (bool) {
        require(_orderData.moneyEscrowed == 0);
        require(_orderData.sharesEscrowed == 0);
        IShareToken _shareToken = _orderData.market.getShareToken(_orderData.outcome);
        uint256 _attosharesToCover = _orderData.amount;

        // Figure out how many shares of the outcome the creator has
        uint256 _attosharesHeld = _shareToken.balanceOf(_orderData.creator);

        // Take shares in escrow if user has shares
        if (_attosharesHeld > 0) {
            _orderData.sharesEscrowed = SafeMathUint256.min(_attosharesHeld, _attosharesToCover);
            _attosharesToCover -= _orderData.sharesEscrowed;
            _shareToken.trustedOrderTransfer(_orderData.creator, _orderData.market, _orderData.sharesEscrowed);
        }

        // If not able to cover entire order with shares alone, then cover remaining with tokens
        if (_attosharesToCover > 0) {
            _orderData.moneyEscrowed = _orderData.market.getNumTicks().sub(_orderData.price).mul(_attosharesToCover);
            require(_orderData.augur.trustedTransfer(_orderData.market.getDenominationToken(), _orderData.creator, _orderData.market, _orderData.moneyEscrowed));
        }

        return true;
    }
}

contract Trade is CashAutoConverter, ReentrancyGuard, MarketValidator {
    uint256 internal constant FILL_ORDER_MINIMUM_GAS_NEEDED = 2000000;
    uint256 internal constant CREATE_ORDER_MINIMUM_GAS_NEEDED = 700000;

    function publicBuy(IMarket _market, uint256 _outcome, uint256 _fxpAmount, uint256 _price, bytes32 _betterOrderId, bytes32 _worseOrderId, bytes32 _tradeGroupId) external payable marketIsLegit(_market) convertToAndFromCash onlyInGoodTimes returns (bytes32) {
        bytes32 _result = trade(msg.sender, Order.TradeDirections.Long, _market, _outcome, _fxpAmount, _price, _betterOrderId, _worseOrderId, _tradeGroupId);
        _market.assertBalances();
        return _result;
    }

    function publicSell(IMarket _market, uint256 _outcome, uint256 _fxpAmount, uint256 _price, bytes32 _betterOrderId, bytes32 _worseOrderId, bytes32 _tradeGroupId) external payable marketIsLegit(_market) convertToAndFromCash onlyInGoodTimes returns (bytes32) {
        bytes32 _result = trade(msg.sender, Order.TradeDirections.Short, _market, _outcome, _fxpAmount, _price, _betterOrderId, _worseOrderId, _tradeGroupId);
        _market.assertBalances();
        return _result;
    }

    function publicTrade(Order.TradeDirections _direction, IMarket _market, uint256 _outcome, uint256 _fxpAmount, uint256 _price, bytes32 _betterOrderId, bytes32 _worseOrderId, bytes32 _tradeGroupId) external payable marketIsLegit(_market) convertToAndFromCash onlyInGoodTimes returns (bytes32) {
        bytes32 _result = trade(msg.sender, _direction, _market, _outcome, _fxpAmount, _price, _betterOrderId, _worseOrderId, _tradeGroupId);
        _market.assertBalances();
        return _result;
    }

    function publicFillBestOrder(Order.TradeDirections _direction, IMarket _market, uint256 _outcome, uint256 _fxpAmount, uint256 _price, bytes32 _tradeGroupId) external payable marketIsLegit(_market) convertToAndFromCash onlyInGoodTimes returns (uint256) {
        uint256 _result = fillBestOrder(msg.sender, _direction, _market, _outcome, _fxpAmount, _price, _tradeGroupId);
        _market.assertBalances();
        return _result;
    }

    function trade(address _sender, Order.TradeDirections _direction, IMarket _market, uint256 _outcome, uint256 _fxpAmount, uint256 _price, bytes32 _betterOrderId, bytes32 _worseOrderId, bytes32 _tradeGroupId) internal returns (bytes32) {
        uint256 _bestFxpAmount = fillBestOrder(_sender, _direction, _market, _outcome, _fxpAmount, _price, _tradeGroupId);
        if (_bestFxpAmount == 0) {
            return bytes32(1);
        }
        if (msg.gas < getCreateOrderMinGasNeeded()) {
            return bytes32(1);
        }
        Order.Types _type = Order.getOrderTradingTypeFromMakerDirection(_direction);
        return ICreateOrder(controller.lookup("CreateOrder")).createOrder(_sender, _type, _bestFxpAmount, _price, _market, _outcome, _betterOrderId, _worseOrderId, _tradeGroupId);
    }

    function fillBestOrder(address _sender, Order.TradeDirections _direction, IMarket _market, uint256 _outcome, uint256 _fxpAmount, uint256 _price, bytes32 _tradeGroupId) internal nonReentrant returns (uint256 _bestFxpAmount) {
        // we need to fill a BID if we want to SELL and we need to fill an ASK if we want to BUY
        Order.Types _type = Order.getOrderTradingTypeFromFillerDirection(_direction);
        IOrders _orders = IOrders(controller.lookup("Orders"));
        bytes32 _orderId = _orders.getBestOrderId(_type, _market, _outcome);
        _bestFxpAmount = _fxpAmount;

        while (_orderId != 0 && _bestFxpAmount > 0 && msg.gas >= getFillOrderMinGasNeeded()) {
            uint256 _orderPrice = _orders.getPrice(_orderId);
            // If the price is acceptable relative to the trade type
            if (_type == Order.Types.Bid ? _orderPrice >= _price : _orderPrice <= _price) {
                bytes32 _nextOrderId = _orders.getWorseOrderId(_orderId);
                _orders.setPrice(_market, _outcome, _orderPrice);
                _bestFxpAmount = IFillOrder(controller.lookup("FillOrder")).fillOrder(_sender, _orderId, _bestFxpAmount, _tradeGroupId);
                _orderId = _nextOrderId;
            } else {
                _orderId = bytes32(0);
            }
        }
        if (_orderId != 0) {
            return 0;
        }
        return _bestFxpAmount;
    }

    function publicBuyWithLimit(IMarket _market, uint256 _outcome, uint256 _fxpAmount, uint256 _price, bytes32 _betterOrderId, bytes32 _worseOrderId, bytes32 _tradeGroupId, uint256 _loopLimit) external payable marketIsLegit(_market) convertToAndFromCash onlyInGoodTimes returns (bytes32) {
        bytes32 _result = tradeWithLimit(msg.sender, Order.TradeDirections.Long, _market, _outcome, _fxpAmount, _price, _betterOrderId, _worseOrderId, _tradeGroupId, _loopLimit);
        _market.assertBalances();
        return _result;
    }

    function publicSellWithLimit(IMarket _market, uint256 _outcome, uint256 _fxpAmount, uint256 _price, bytes32 _betterOrderId, bytes32 _worseOrderId, bytes32 _tradeGroupId, uint256 _loopLimit) external payable marketIsLegit(_market) convertToAndFromCash onlyInGoodTimes returns (bytes32) {
        bytes32 _result = tradeWithLimit(msg.sender, Order.TradeDirections.Short, _market, _outcome, _fxpAmount, _price, _betterOrderId, _worseOrderId, _tradeGroupId, _loopLimit);
        _market.assertBalances();
        return _result;
    }

    function publicTradeWithLimit(Order.TradeDirections _direction, IMarket _market, uint256 _outcome, uint256 _fxpAmount, uint256 _price, bytes32 _betterOrderId, bytes32 _worseOrderId, bytes32 _tradeGroupId, uint256 _loopLimit) external payable marketIsLegit(_market) convertToAndFromCash onlyInGoodTimes returns (bytes32) {
        bytes32 _result = tradeWithLimit(msg.sender, _direction, _market, _outcome, _fxpAmount, _price, _betterOrderId, _worseOrderId, _tradeGroupId, _loopLimit);
        _market.assertBalances();
        return _result;
    }

    function publicFillBestOrderWithLimit(Order.TradeDirections _direction, IMarket _market, uint256 _outcome, uint256 _fxpAmount, uint256 _price, bytes32 _tradeGroupId, uint256 _loopLimit) external payable marketIsLegit(_market) convertToAndFromCash onlyInGoodTimes returns (uint256) {
        uint256 _result = fillBestOrderWithLimit(msg.sender, _direction, _market, _outcome, _fxpAmount, _price, _tradeGroupId, _loopLimit);
        _market.assertBalances();
        return _result;
    }

    function tradeWithLimit(address _sender, Order.TradeDirections _direction, IMarket _market, uint256 _outcome, uint256 _fxpAmount, uint256 _price, bytes32 _betterOrderId, bytes32 _worseOrderId, bytes32 _tradeGroupId, uint256 _loopLimit) internal returns (bytes32) {
        uint256 _bestFxpAmount = fillBestOrderWithLimit(_sender, _direction, _market, _outcome, _fxpAmount, _price, _tradeGroupId, _loopLimit);
        if (_bestFxpAmount == 0) {
            return bytes32(1);
        }
        return ICreateOrder(controller.lookup("CreateOrder")).createOrder(_sender, Order.getOrderTradingTypeFromMakerDirection(_direction), _bestFxpAmount, _price, _market, _outcome, _betterOrderId, _worseOrderId, _tradeGroupId);
    }

    function fillBestOrderWithLimit(address _sender, Order.TradeDirections _direction, IMarket _market, uint256 _outcome, uint256 _fxpAmount, uint256 _price, bytes32 _tradeGroupId, uint256 _loopLimit) internal nonReentrant returns (uint256 _bestFxpAmount) {
        // we need to fill a BID if we want to SELL and we need to fill an ASK if we want to BUY
        Order.Types _type = Order.getOrderTradingTypeFromFillerDirection(_direction);
        IOrders _orders = IOrders(controller.lookup("Orders"));
        bytes32 _orderId = _orders.getBestOrderId(_type, _market, _outcome);
        _bestFxpAmount = _fxpAmount;
        while (_orderId != 0 && _bestFxpAmount > 0 && _loopLimit > 0) {
            uint256 _orderPrice = _orders.getPrice(_orderId);
            // If the price is acceptable relative to the trade type
            if (_type == Order.Types.Bid ? _orderPrice >= _price : _orderPrice <= _price) {
                bytes32 _nextOrderId = _orders.getWorseOrderId(_orderId);
                _orders.setPrice(_market, _outcome, _orderPrice);
                _bestFxpAmount = IFillOrder(controller.lookup("FillOrder")).fillOrder(_sender, _orderId, _bestFxpAmount, _tradeGroupId);
                _orderId = _nextOrderId;
            } else {
                _orderId = bytes32(0);
            }
            _loopLimit -= 1;
        }
        if (_orderId != 0) {
            return 0;
        }
        return _bestFxpAmount;
    }

    // COVERAGE: This is not covered and cannot be. We need to use a different minimum gas while running coverage since the additional logging make the cost rise a great deal
    function getFillOrderMinGasNeeded() internal pure returns (uint256) {
        return FILL_ORDER_MINIMUM_GAS_NEEDED;
    }

    function getCreateOrderMinGasNeeded() internal pure returns (uint256) {
        return CREATE_ORDER_MINIMUM_GAS_NEEDED;
    }
}

    Contract ABI  
[{"constant":false,"inputs":[{"name":"_market","type":"address"},{"name":"_outcome","type":"uint256"},{"name":"_fxpAmount","type":"uint256"},{"name":"_price","type":"uint256"},{"name":"_betterOrderId","type":"bytes32"},{"name":"_worseOrderId","type":"bytes32"},{"name":"_tradeGroupId","type":"bytes32"},{"name":"_loopLimit","type":"uint256"}],"name":"publicSellWithLimit","outputs":[{"name":"","type":"bytes32"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_direction","type":"uint8"},{"name":"_market","type":"address"},{"name":"_outcome","type":"uint256"},{"name":"_fxpAmount","type":"uint256"},{"name":"_price","type":"uint256"},{"name":"_betterOrderId","type":"bytes32"},{"name":"_worseOrderId","type":"bytes32"},{"name":"_tradeGroupId","type":"bytes32"}],"name":"publicTrade","outputs":[{"name":"","type":"bytes32"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"getController","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_direction","type":"uint8"},{"name":"_market","type":"address"},{"name":"_outcome","type":"uint256"},{"name":"_fxpAmount","type":"uint256"},{"name":"_price","type":"uint256"},{"name":"_betterOrderId","type":"bytes32"},{"name":"_worseOrderId","type":"bytes32"},{"name":"_tradeGroupId","type":"bytes32"},{"name":"_loopLimit","type":"uint256"}],"name":"publicTradeWithLimit","outputs":[{"name":"","type":"bytes32"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_controller","type":"address"}],"name":"setController","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_direction","type":"uint8"},{"name":"_market","type":"address"},{"name":"_outcome","type":"uint256"},{"name":"_fxpAmount","type":"uint256"},{"name":"_price","type":"uint256"},{"name":"_tradeGroupId","type":"bytes32"},{"name":"_loopLimit","type":"uint256"}],"name":"publicFillBestOrderWithLimit","outputs":[{"name":"","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_market","type":"address"},{"name":"_outcome","type":"uint256"},{"name":"_fxpAmount","type":"uint256"},{"name":"_price","type":"uint256"},{"name":"_betterOrderId","type":"bytes32"},{"name":"_worseOrderId","type":"bytes32"},{"name":"_tradeGroupId","type":"bytes32"}],"name":"publicSell","outputs":[{"name":"","type":"bytes32"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_direction","type":"uint8"},{"name":"_market","type":"address"},{"name":"_outcome","type":"uint256"},{"name":"_fxpAmount","type":"uint256"},{"name":"_price","type":"uint256"},{"name":"_tradeGroupId","type":"bytes32"}],"name":"publicFillBestOrder","outputs":[{"name":"","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_market","type":"address"},{"name":"_outcome","type":"uint256"},{"name":"_fxpAmount","type":"uint256"},{"name":"_price","type":"uint256"},{"name":"_betterOrderId","type":"bytes32"},{"name":"_worseOrderId","type":"bytes32"},{"name":"_tradeGroupId","type":"bytes32"},{"name":"_loopLimit","type":"uint256"}],"name":"publicBuyWithLimit","outputs":[{"name":"","type":"bytes32"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_market","type":"address"},{"name":"_outcome","type":"uint256"},{"name":"_fxpAmount","type":"uint256"},{"name":"_price","type":"uint256"},{"name":"_betterOrderId","type":"bytes32"},{"name":"_worseOrderId","type":"bytes32"},{"name":"_tradeGroupId","type":"bytes32"}],"name":"publicBuy","outputs":[{"name":"","type":"bytes32"}],"payable":true,"stateMutability":"payable","type":"function"}]

  Contract Creation Code Switch To Opcodes View
606060405260008054600160a060020a033316600160a860020a0319909116179055612854806100306000396000f30060606040526004361061008a5763ffffffff60e060020a6000350416630a9a877b811461008f57806315c64b61146100ca5780633018205f146100f6578063554de08c1461012557806392eefe9b14610155578063a127d74e14610188578063b1b12ef6146101b1578063ef01e5a3146101d7578063f0697887146101fd578063f2beaf5914610226575b600080fd5b6100b8600160a060020a036004351660243560443560643560843560a43560c43560e43561024c565b60405190815260200160405180910390f35b6100b860ff60043516600160a060020a036024351660443560643560843560a43560c43560e43561051e565b341561010157600080fd5b6101096107b7565b604051600160a060020a03909116815260200160405180910390f35b6100b860ff60043516600160a060020a036024351660443560643560843560a43560c43560e435610104356107c6565b341561016057600080fd5b610174600160a060020a0360043516610a98565b604051901515815260200160405180910390f35b6100b860ff60043516600160a060020a036024351660443560643560843560a43560c435610ae6565b6100b8600160a060020a036004351660243560443560643560843560a43560c435610db4565b6100b860ff60043516600160a060020a036024351660443560643560843560a43561104e565b6100b8600160a060020a036004351660243560443560643560843560a43560c43560e43561131a565b6100b8600160a060020a036004351660243560443560643560843560a43560c43561156d565b60008089600081600160a060020a031663870c426d6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561029857600080fd5b6102c65a03f115156102a957600080fd5b505050604051805160008054919350600160a060020a039091169150634e94c82990604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561030057600080fd5b6102c65a03f1151561031157600080fd5b50505060405180519050600160a060020a0316638cfb8f218260006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561037157600080fd5b6102c65a03f1151561038257600080fd5b50505060405180519050151561039757600080fd5b80600160a060020a0316639f7e1bf68360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156103ee57600080fd5b6102c65a03f115156103ff57600080fd5b50505060405180519050151561041457600080fd5b61041c6117bf565b5060008054600160a060020a0316906322763ae190604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561046657600080fd5b6102c65a03f1151561047757600080fd5b50505060405180519050151561048c57600080fd5b61049f3360018e8e8e8e8e8e8e8e6118cc565b92508b600160a060020a031663a0695f246000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156104e757600080fd5b6102c65a03f115156104f857600080fd5b505050604051805190505082935061050e611a69565b5050505098975050505050505050565b60008088600081600160a060020a031663870c426d6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561056a57600080fd5b6102c65a03f1151561057b57600080fd5b505050604051805160008054919350600160a060020a039091169150634e94c82990604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156105d257600080fd5b6102c65a03f115156105e357600080fd5b50505060405180519050600160a060020a0316638cfb8f218260006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561064357600080fd5b6102c65a03f1151561065457600080fd5b50505060405180519050151561066957600080fd5b80600160a060020a0316639f7e1bf68360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156106c057600080fd5b6102c65a03f115156106d157600080fd5b5050506040518051905015156106e657600080fd5b6106ee6117bf565b5060008054600160a060020a0316906322763ae190604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561073857600080fd5b6102c65a03f1151561074957600080fd5b50505060405180519050151561075e57600080fd5b61076f338d8d8d8d8d8d8d8d611ce9565b92508a600160a060020a031663a0695f246000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156104e757600080fd5b600054600160a060020a031690565b60008089600081600160a060020a031663870c426d6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561081257600080fd5b6102c65a03f1151561082357600080fd5b505050604051805160008054919350600160a060020a039091169150634e94c82990604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561087a57600080fd5b6102c65a03f1151561088b57600080fd5b50505060405180519050600160a060020a0316638cfb8f218260006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156108eb57600080fd5b6102c65a03f115156108fc57600080fd5b50505060405180519050151561091157600080fd5b80600160a060020a0316639f7e1bf68360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561096857600080fd5b6102c65a03f1151561097957600080fd5b50505060405180519050151561098e57600080fd5b6109966117bf565b5060008054600160a060020a0316906322763ae190604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156109e057600080fd5b6102c65a03f115156109f157600080fd5b505050604051805190501515610a0657600080fd5b610a18338e8e8e8e8e8e8e8e8e6118cc565b92508b600160a060020a031663a0695f246000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610a6057600080fd5b6102c65a03f11515610a7157600080fd5b5050506040518051905050829350610a87611a69565b505050509998505050505050505050565b6000805433600160a060020a03908116911614610ab457600080fd5b5060008054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff199091161790556001919050565b60008087600081600160a060020a031663870c426d6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610b3257600080fd5b6102c65a03f11515610b4357600080fd5b505050604051805160008054919350600160a060020a039091169150634e94c82990604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610b9a57600080fd5b6102c65a03f11515610bab57600080fd5b50505060405180519050600160a060020a0316638cfb8f218260006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610c0b57600080fd5b6102c65a03f11515610c1c57600080fd5b505050604051805190501515610c3157600080fd5b80600160a060020a0316639f7e1bf68360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610c8857600080fd5b6102c65a03f11515610c9957600080fd5b505050604051805190501515610cae57600080fd5b610cb66117bf565b5060008054600160a060020a0316906322763ae190604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610d0057600080fd5b6102c65a03f11515610d1157600080fd5b505050604051805190501515610d2657600080fd5b610d36338c8c8c8c8c8c8c611ea5565b925089600160a060020a031663a0695f246000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610d7e57600080fd5b6102c65a03f11515610d8f57600080fd5b5050506040518051905050829350610da5611a69565b50505050979650505050505050565b60008088600081600160a060020a031663870c426d6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610e0057600080fd5b6102c65a03f11515610e1157600080fd5b505050604051805160008054919350600160a060020a039091169150634e94c82990604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610e6857600080fd5b6102c65a03f11515610e7957600080fd5b50505060405180519050600160a060020a0316638cfb8f218260006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610ed957600080fd5b6102c65a03f11515610eea57600080fd5b505050604051805190501515610eff57600080fd5b80600160a060020a0316639f7e1bf68360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610f5657600080fd5b6102c65a03f11515610f6757600080fd5b505050604051805190501515610f7c57600080fd5b610f846117bf565b5060008054600160a060020a0316906322763ae190604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610fce57600080fd5b6102c65a03f11515610fdf57600080fd5b505050604051805190501515610ff457600080fd5b6110063360018d8d8d8d8d8d8d611ce9565b92508a600160a060020a031663a0695f246000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610d7e57600080fd5b60008086600081600160a060020a031663870c426d6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561109a57600080fd5b6102c65a03f115156110ab57600080fd5b505050604051805160008054919350600160a060020a039091169150634e94c82990604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561110257600080fd5b6102c65a03f1151561111357600080fd5b50505060405180519050600160a060020a0316638cfb8f218260006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561117357600080fd5b6102c65a03f1151561118457600080fd5b50505060405180519050151561119957600080fd5b80600160a060020a0316639f7e1bf68360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156111f057600080fd5b6102c65a03f1151561120157600080fd5b50505060405180519050151561121657600080fd5b61121e6117bf565b5060008054600160a060020a0316906322763ae190604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561126857600080fd5b6102c65a03f1151561127957600080fd5b50505060405180519050151561128e57600080fd5b61129d338b8b8b8b8b8b61233c565b925088600160a060020a031663a0695f246000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156112e557600080fd5b6102c65a03f115156112f657600080fd5b505050604051805190505082935061130c611a69565b505050509695505050505050565b60008089600081600160a060020a031663870c426d6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561136657600080fd5b6102c65a03f1151561137757600080fd5b505050604051805160008054919350600160a060020a039091169150634e94c82990604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156113ce57600080fd5b6102c65a03f115156113df57600080fd5b50505060405180519050600160a060020a0316638cfb8f218260006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561143f57600080fd5b6102c65a03f1151561145057600080fd5b50505060405180519050151561146557600080fd5b80600160a060020a0316639f7e1bf68360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156114bc57600080fd5b6102c65a03f115156114cd57600080fd5b5050506040518051905015156114e257600080fd5b6114ea6117bf565b5060008054600160a060020a0316906322763ae190604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561153457600080fd5b6102c65a03f1151561154557600080fd5b50505060405180519050151561155a57600080fd5b61049f3360008e8e8e8e8e8e8e8e6118cc565b60008088600081600160a060020a031663870c426d6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156115b957600080fd5b6102c65a03f115156115ca57600080fd5b505050604051805160008054919350600160a060020a039091169150634e94c82990604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561162157600080fd5b6102c65a03f1151561163257600080fd5b50505060405180519050600160a060020a0316638cfb8f218260006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561169257600080fd5b6102c65a03f115156116a357600080fd5b5050506040518051905015156116b857600080fd5b80600160a060020a0316639f7e1bf68360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561170f57600080fd5b6102c65a03f1151561172057600080fd5b50505060405180519050151561173557600080fd5b61173d6117bf565b5060008054600160a060020a0316906322763ae190604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561178757600080fd5b6102c65a03f1151561179857600080fd5b5050506040518051905015156117ad57600080fd5b6110063360008d8d8d8d8d8d8d611ce9565b6000803411156118c65760008054600160a060020a03169063f39ec1f7906040516020015260405160e060020a63ffffffff83160281527f43617368000000000000000000000000000000000000000000000000000000006004820152602401602060405180830381600087803b151561183857600080fd5b6102c65a03f1151561184957600080fd5b50505060405180519050600160a060020a0316634faa8a26343360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390911660048201526024016020604051808303818588803b15156118a957600080fd5b6125ee5a03f115156118ba57600080fd5b50505050604051805150505b50600190565b6000806118df8c8c8c8c8c8c8a8a611ea5565b90508015156118f15760019150611a5a565b60008054600160a060020a03169063f39ec1f7906040516020015260405160e060020a63ffffffff83160281527f4372656174654f726465720000000000000000000000000000000000000000006004820152602401602060405180830381600087803b151561196057600080fd5b6102c65a03f1151561197157600080fd5b50505060405180519050600160a060020a031663f79383288d6119938e6127d3565b848b8f8f8d8d8d6000604051602001526040518a63ffffffff1660e060020a028152600401808a600160a060020a0316600160a060020a031681526020018960018111156119dd57fe5b60ff168152602080820199909952604080820198909852600160a060020a03909616606087015250608085019390935260a084019190915260c083015260e08201526101000193509091505180830381600087803b1515611a3d57600080fd5b6102c65a03f11515611a4e57600080fd5b50505060405180519250505b509a9950505050505050505050565b60008054819081908190600160a060020a031663f39ec1f7826040516020015260405160e060020a63ffffffff83160281527f43617368000000000000000000000000000000000000000000000000000000006004820152602401602060405180830381600087803b1515611add57600080fd5b6102c65a03f11515611aee57600080fd5b5050506040518051935050600160a060020a0383166370a082313360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515611b5057600080fd5b6102c65a03f11515611b6157600080fd5b50505060405180519250506000821115611cdf5760008054600160a060020a031690634e94c82990604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515611bbe57600080fd5b6102c65a03f11515611bcf57600080fd5b5050506040518051915050600160a060020a03811663ec2389948433308660006040516020015260405160e060020a63ffffffff8716028152600160a060020a0394851660048201529284166024840152921660448201526064810191909152608401602060405180830381600087803b1515611c4b57600080fd5b6102c65a03f11515611c5c57600080fd5b50505060405180515050600160a060020a038316631baffe38338460006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515611cc357600080fd5b6102c65a03f11515611cd457600080fd5b505050604051805150505b6001935050505090565b6000806000611cfd8c8c8c8c8c8c8a61233c565b9150811515611d0f5760019250611e96565b611d176127f7565b5a1015611d275760019250611e96565b611d308b6127d3565b60008054919250600160a060020a039091169063f39ec1f7906040516020015260405160e060020a63ffffffff83160281527f4372656174654f726465720000000000000000000000000000000000000000006004820152602401602060405180830381600087803b1515611da457600080fd5b6102c65a03f11515611db557600080fd5b50505060405180519050600160a060020a031663f79383288d83858b8f8f8d8d8d6000604051602001526040518a63ffffffff1660e060020a028152600401808a600160a060020a0316600160a060020a03168152602001896001811115611e1957fe5b60ff168152602080820199909952604080820198909852600160a060020a03909616606087015250608085019390935260a084019190915260c083015260e08201526101000193509091505180830381600087803b1515611e7957600080fd5b6102c65a03f11515611e8a57600080fd5b50505060405180519350505b50509998505050505050505050565b600080600080600080600060149054906101000a900460ff16151515611eca57600080fd5b6000805474ff0000000000000000000000000000000000000000191674010000000000000000000000000000000000000000179055611f088d6127fe565b60008054919650600160a060020a039091169063f39ec1f7906040516020015260405160e060020a63ffffffff83160281527f4f726465727300000000000000000000000000000000000000000000000000006004820152602401602060405180830381600087803b1515611f7c57600080fd5b6102c65a03f11515611f8d57600080fd5b5050506040518051945050600160a060020a038416637b6eaa65868e8e6000604051602001526040518463ffffffff1660e060020a02815260040180846001811115611fd557fe5b60ff16815260200183600160a060020a0316600160a060020a031681526020018281526020019350505050602060405180830381600087803b151561201957600080fd5b6102c65a03f1151561202a57600080fd5b50505060405180518b97509350505b82158015906120485750600086115b80156120545750600087115b156123015783600160a060020a03166331d98b3f8460006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156120a857600080fd5b6102c65a03f115156120b957600080fd5b50505060405180519250600090508560018111156120d357fe5b146120e157888211156120e6565b888210155b156122f15783600160a060020a0316638925f9e98460006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561213a57600080fd5b6102c65a03f1151561214b57600080fd5b5050506040518051915050600160a060020a038416633011e16a8d8d8560006040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b15156121bc57600080fd5b6102c65a03f115156121cd57600080fd5b5050506040518051505060008054600160a060020a03169063f39ec1f7906040516020015260405160e060020a63ffffffff83160281527f46696c6c4f7264657200000000000000000000000000000000000000000000006004820152602401602060405180830381600087803b151561224657600080fd5b6102c65a03f1151561225757600080fd5b50505060405180519050600160a060020a0316631faf89958f85898c60006040516020015260405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401602060405180830381600087803b15156122cc57600080fd5b6102c65a03f115156122dd57600080fd5b5050506040518051905095508092506122f6565b600092505b600187039650612039565b821561230c57600095505b50506000805474ff00000000000000000000000000000000000000001916905550919a9950505050505050505050565b600080600080600080600060149054906101000a900460ff1615151561236157600080fd5b6000805474ff000000000000000000000000000000000000000019167401000000000000000000000000000000000000000017905561239f8c6127fe565b60008054919650600160a060020a039091169063f39ec1f7906040516020015260405160e060020a63ffffffff83160281527f4f726465727300000000000000000000000000000000000000000000000000006004820152602401602060405180830381600087803b151561241357600080fd5b6102c65a03f1151561242457600080fd5b5050506040518051945050600160a060020a038416637b6eaa65868d8d6000604051602001526040518463ffffffff1660e060020a0281526004018084600181111561246c57fe5b60ff16815260200183600160a060020a0316600160a060020a031681526020018281526020019350505050602060405180830381600087803b15156124b057600080fd5b6102c65a03f115156124c157600080fd5b50505060405180518a97509350505b82158015906124df5750600086115b80156124f257506124ee612821565b5a10155b156127995783600160a060020a03166331d98b3f8460006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561254657600080fd5b6102c65a03f1151561255757600080fd5b505050604051805192506000905085600181111561257157fe5b1461257f5787821115612584565b878210155b1561278f5783600160a060020a0316638925f9e98460006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156125d857600080fd5b6102c65a03f115156125e957600080fd5b5050506040518051915050600160a060020a038416633011e16a8c8c8560006040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b151561265a57600080fd5b6102c65a03f1151561266b57600080fd5b5050506040518051505060008054600160a060020a03169063f39ec1f7906040516020015260405160e060020a63ffffffff83160281527f46696c6c4f7264657200000000000000000000000000000000000000000000006004820152602401602060405180830381600087803b15156126e457600080fd5b6102c65a03f115156126f557600080fd5b50505060405180519050600160a060020a0316631faf89958e85898b60006040516020015260405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401602060405180830381600087803b151561276a57600080fd5b6102c65a03f1151561277b57600080fd5b505050604051805190509550809250612794565b600092505b6124d0565b82156127a457600095505b50506000805474ff00000000000000000000000000000000000000001916905550919998505050505050505050565b6000808260018111156127e257fe5b146127ee5760016127f1565b60005b92915050565b620aae6090565b60008082600181111561280d57fe5b146128195760006127f1565b506001919050565b621e8480905600a165627a7a723058200500e1a87e08b214e06bb4855347ffacaa09452fc18bdcb06206029873f1aecf0029

   Swarm Source:
bzzr://0500e1a87e08b214e06bb4855347ffacaa09452fc18bdcb06206029873f1aecf

 

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