Contract 0x698Ff47B84837d3971118a369c570172EE7e54c2 2

 
 
Txn Hash
Method
Block
From
To
Value
0x8e79e082050aab6b5491fb181a4a43681766812e4fd8888211c7df8a70302431Make Offer112468322020-11-13 3:16:09755 days 19 hrs agoENS Name richardchen.eth IN  Origin: Marketplace v10.0038 Ether0.0050776640.95126
0x431e298eebcc6d6c0bd4254d29db23b20fb74015a538a99333bedd9fa0fd4605Create Listing112424632020-11-12 11:12:07756 days 12 hrs ago0xe5d5147f3c1c793e2754b8460fd7b5d1603293d2 IN  Origin: Marketplace v10 Ether0.0069087893
0x1b4799cf072be0e1dcbc8087c5acdc02c48b72e8911e68e2db5a147449998dafCreate Listing112424632020-11-12 11:12:07756 days 12 hrs ago0xe5d5147f3c1c793e2754b8460fd7b5d1603293d2 IN  Origin: Marketplace v10 Ether0.0069087893
0x7a9ae1dde5d6eebecf5e29734c363dc109334a5998e46adf7ac3aad01402ee41Create Listing112424632020-11-12 11:12:07756 days 12 hrs ago0xe5d5147f3c1c793e2754b8460fd7b5d1603293d2 IN  Origin: Marketplace v10 Ether0.0069087893
0x45e6e3aaf889a878039d2ccbac2e924b984e9f0b853917715b965523356e7062Accept Offer111985482020-11-05 17:26:15763 days 5 hrs ago0x593e3e2ca0f447fef1fbb8ed7688db4f1e88f9cd IN  Origin: Marketplace v10 Ether0.00314376120
0x75dc0d5b9f00d6e2dc542c23859caa1e2039e89c3c2f7831a75f987111092b71Create Listing111950312020-11-05 4:24:40763 days 18 hrs ago0x5c6dca301cc848d401f6b9422cf8b70792ef8fd4 IN  Origin: Marketplace v10 Ether0.0045315661
0x42ff1cba1701512ba014eda0e62882860ff06f1d7dd65e28c29df99798e48d21Finalize110430232020-10-12 20:48:15787 days 2 hrs agoENS Name lanlyd.eth IN  Origin: Marketplace v10 Ether0.0007995223.00000145
0xdd0e4fd0cbf81584544dfcef9a9c00447afbe19ace5c740b2ef4b769edd4a2a5Finalize110430202020-10-12 20:47:41787 days 2 hrs agoENS Name lanlyd.eth IN  Origin: Marketplace v10 Ether0.0007996623.00000145
0xb33d103dca48bfd359575616901d53462e5ec88da97db2456bab1561191a70abMake Offer109807862020-10-03 4:18:02796 days 18 hrs agoENS Name tylersorensen.eth IN  Origin: Marketplace v10.0689 Ether0.0057042346
0xe6a59f1742a006192c6bc4bdcfa5507049ce124ddfe0206b2b35c10134b9836bMake Offer109725172020-10-01 21:03:28798 days 2 hrs ago0x29ad3317a7e230dcf30438fff631c9ca6d733bbd IN  Origin: Marketplace v10.0895 Ether0.008061165
0xf27f29204a418a9204f5e1191dc64e66d005d929d78b130697847cc0d528fa88Accept Offer109334982020-09-25 18:48:58804 days 4 hrs agoENS Name lanlyd.eth IN  Origin: Marketplace v10 Ether0.0035399179
0x89ed06b57e24f2dea534d49081d98db3a7cb3770b3a23cb648c2d0e6ce50600eFinalize109334892020-09-25 18:46:51804 days 4 hrs agoENS Name lanlyd.eth IN  Origin: Marketplace v10 Ether0.0027461979
0x65fde23842842c2cb5bdca88234cf08d0807eaf7f9512670cdf00a260fa74af0Accept Offer109334772020-09-25 18:43:17804 days 4 hrs agoENS Name lanlyd.eth IN  Origin: Marketplace v10 Ether0.0035408579
0xd3d3df0a211e945409928fc686ee4ed0140c79b8b86b71a5901f29e00193e443Create Listing109158732020-09-23 1:39:24806 days 21 hrs ago0x577982e9a28615d3ccfba337995f4ed94341e7e0 IN  Origin: Marketplace v10 Ether0.037144500
0x80ed2e3af0fcdef340744e74eb35d65c3425fb8d480595afca9b68fe24b11e88Make Offer109151092020-09-22 23:01:14807 days 14 mins ago0xab6e57438d178927da2e73aef71a2f7b7b78a9e1 IN  Origin: Marketplace v10.1586 Ether0.0129285893
0x5611f3be9b889a6b569b146f858f42024d30dad5b76a013eb96d0d69cb686129Create Listing109150912020-09-22 22:58:46807 days 17 mins ago0xe8572c97de7d4611ac6635a7c2712223d05edad0 IN  Origin: Marketplace v10 Ether0.0069087893
0xa2ecc3a1ca9a31b50b4ddfe370f12bf283da145e073fd82afad5bf01461f95b2Create Listing109150852020-09-22 22:56:49807 days 19 mins ago0xe8572c97de7d4611ac6635a7c2712223d05edad0 IN  Origin: Marketplace v10 Ether0.0069087893
0x23a0d344561b03ba2ce4d9faea99e784a7bad3de0e1753ef8499334dcf2644c4Create Listing109150852020-09-22 22:56:49807 days 19 mins ago0xe8572c97de7d4611ac6635a7c2712223d05edad0 IN  Origin: Marketplace v10 Ether0.00765166103
0x2a4706b173946a44c41eed1778789ead8e8da772a68b66f436f7eaf697568884Make Offer109145062020-09-22 20:45:43807 days 2 hrs ago0xdf73af150b8e446a6d39fddc2cfa7bf067b88936 IN  Origin: Marketplace v10 Ether0.01516412109.1281576
0xe86ab5a7f152d86be15a0b439419e96efd8f1354dda69bd380d8814e6c987307Make Offer109144942020-09-22 20:43:53807 days 2 hrs ago0xdf73af150b8e446a6d39fddc2cfa7bf067b88936 IN  Origin: Marketplace v10 Ether0.01352719109.1281576
0x5b048059ecdba82f20406437441747637722faf709aefb36d21ce34c0b9326f8Make Offer109143072020-09-22 19:57:59807 days 3 hrs ago0xdf73af150b8e446a6d39fddc2cfa7bf067b88936 IN  Origin: Marketplace v10 Ether0.01259898101.64
0x551fad168031e040106afbd14c825e791319cb585d84ec607dcb2bc075f98c89Make Offer109142612020-09-22 19:45:55807 days 3 hrs ago0xdf73af150b8e446a6d39fddc2cfa7bf067b88936 IN  Origin: Marketplace v10 Ether0.0114536292.4
0x24ac176b280e62a1ad4bf794f97d4e3df6f0598aef09d5af54f450ff67f750c1Make Offer109133142020-09-22 16:14:35807 days 7 hrs ago0xdf73af150b8e446a6d39fddc2cfa7bf067b88936 IN  Origin: Marketplace v10 Ether0.03098624249.99998474
0x03e69ddab70a45209edd1dd4300ae85d0f9e6131780d8ce82fa4647b5fa37d93Create Listing109132612020-09-22 16:04:33807 days 7 hrs ago0xc607c8bcf92c7558c013c0c7b4e1cd111367a485 IN  Origin: Marketplace v10 Ether0.01857199249.99998474
0xd66391c087d4e3acd23686e105265a9999787a6b2e36f16d050086f0f6304cccCreate Listing109132612020-09-22 16:04:33807 days 7 hrs ago0xc607c8bcf92c7558c013c0c7b4e1cd111367a485 IN  Origin: Marketplace v10 Ether0.01857199249.99998474
[ Download CSV Export 

OVERVIEW

Origin's marketplace contract

Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x429e9c040cfd17dd1554e2465bdc86570fe4ec8a1341e7c865cc0de645feaae5107502552020-08-28 16:29:46832 days 6 hrs ago Origin: Marketplace v10xebe4890e6274872bb619fe4f4c2ed59fecc75c280.0104 Ether
0xbb0f03366ba5964c132e84352899faa2ed5f0a9341722eafaa7a6bbd3f287cec107059772020-08-21 21:25:24839 days 1 hr ago Origin: Marketplace v10xe27969a2f7ee8386c6e9a7188a425c41c2044c080.1626 Ether
0x3e2eb0a6dcf097ece1e1aabb82d1a722eda645f9a91d002cd09d301b2a70b927107054772020-08-21 19:29:58839 days 3 hrs ago Origin: Marketplace v10xe27969a2f7ee8386c6e9a7188a425c41c2044c080.1373 Ether
0xe5b784fabb202fcd2560b1d56ac8051c35561f2e4a72c9791152adec1703720c106327652020-08-10 14:37:31850 days 8 hrs ago Origin: Marketplace v10xa3170f45c80daba5a6473a0e67ccfa42418ae73b0.0505 Ether
0x81495573677082dce4e331f8ccfc3705adfd722af5a70704ffd53d61e96af952106031662020-08-06 1:14:41854 days 22 hrs ago Origin: Marketplace v10xa3a3c6df9fe3e22e9ef4df63bb1151ef47e2cf540.1628 Ether
0x2cb1b085423c2fb9dd649d85e21ef08ca372bddd07ec8a49b246414eada5d6f3106029032020-08-06 0:16:25854 days 22 hrs ago Origin: Marketplace v1ENS Name lanlyd.eth0.0178 Ether
0x75a90f09fcb2fab1653608eff283f459fb7e204f35f5556ac1d8f498960f941f105108872020-07-22 18:41:08869 days 4 hrs ago 0x4dc2f10bf2d6d3939d7bafa313bedf34fd7b4a51 Origin: Marketplace v10.05 Ether
0xad559db1fdc6173b9c88b3ca7ab9b7538d5d5e50bc3ba284344c2460be0bf5c4105108522020-07-22 18:33:35869 days 4 hrs ago 0x4dc2f10bf2d6d3939d7bafa313bedf34fd7b4a51 Origin: Marketplace v10.05 Ether
0xa32db1449e4bdb1457a1d49491834b5a347a9113955e87e5b45351307aad4af5105103552020-07-22 16:49:21869 days 6 hrs ago 0x4dc2f10bf2d6d3939d7bafa313bedf34fd7b4a51 Origin: Marketplace v10.05 Ether
0x7b03c4f6c5c220150f697c2c9b4a3b0cee44f46efff84445197d079aae890271105092872020-07-22 12:49:27869 days 10 hrs ago 0x4dc2f10bf2d6d3939d7bafa313bedf34fd7b4a51 Origin: Marketplace v10.05 Ether
0x77229e755d4d39e14268e003745f72aaa711fd82662d07961ff992c5dfabb2e3104989322020-07-20 22:01:43871 days 1 hr ago Origin: Marketplace v10x449e0b5564e0d141b3bc3829e74ffa0ea8c08ad50.0084 Ether
0xfd64db2b31b4efff874112fb826e4302495cbd5c9b5bc772b228a69995af76d1104790762020-07-17 20:16:20874 days 2 hrs ago Origin: Marketplace v10x449e0b5564e0d141b3bc3829e74ffa0ea8c08ad50.0042 Ether
0x18e6b621c5557d6407942a5f4b43316d3d558aa7136dab39ccb0937f0e9a8792104735942020-07-16 23:56:26874 days 23 hrs ago Origin: Marketplace v10x48ce919a8f3b75f75a43a7f5698ce69bb590e2ca0.0038 Ether
0x04167fbce193906e3de19a961135febea555b99d6b6e66f49b2b2c0da07a847c104732462020-07-16 22:36:05875 days 40 mins ago Origin: Marketplace v1ENS Name franckc.eth0.0004 Ether
0x2f945baada7b851c5cbfde346371ce54d0456db30fd2ee558c83aa6f67717586104706632020-07-16 12:53:49875 days 10 hrs ago Origin: Marketplace v10x449e0b5564e0d141b3bc3829e74ffa0ea8c08ad50.0085 Ether
0x796e7e3a67b993764578fd94dfa487d653a897d195413165a02563d155918972102448842020-06-11 14:17:13910 days 8 hrs ago Origin: Marketplace v1 0xc58aa31b1c527fc30fb5ab76aa89ef6721778f500.28797999 Ether
0x0f09e3f8a03cd2f655f36d1aadbd699a58f62119ee206c87cbd4c2a8ee1c6c3c102448792020-06-11 14:15:28910 days 9 hrs ago Origin: Marketplace v1 0xc58aa31b1c527fc30fb5ab76aa89ef6721778f500.57428 Ether
0x112b71ec2f374ef7b0ba479666e930ef4bfa1112c4244c3f964a8144f46de5a4102315222020-06-09 12:35:29912 days 10 hrs ago 0xc58aa31b1c527fc30fb5ab76aa89ef6721778f50 Origin: Marketplace v10.57428 Ether
0x5bbc21fd41ea175cb42f42f21547e065f50e22bdab24d99f24ce0b55ef7a1350102305352020-06-09 8:55:12912 days 14 hrs ago 0xc58aa31b1c527fc30fb5ab76aa89ef6721778f50 Origin: Marketplace v10.28797999 Ether
0xceff7bd8515f3078dd7ceaf7999922361a655be1e7f53dea8e99c4bef103a97a102273302020-06-08 20:39:32913 days 2 hrs ago Origin: Marketplace v1ENS Name etherealboys.eth0.007054 Ether
0x15cd6b21c3849dd4865ccb881a1da3059128b799833095e8e3eb62dbf5e10411100034042020-05-05 1:56:19947 days 21 hrs ago Origin: Marketplace v1 0xfd82b3760b98cf179b0f656a4c3e011d176a09380.024615 Ether
0x0d2885c62f7657ec20afbd25fbaa0650495bd3d1d4dc821c38e0ed17b430b968100018232020-05-04 20:06:55948 days 3 hrs ago 0xfd82b3760b98cf179b0f656a4c3e011d176a0938 Origin: Marketplace v10.024615 Ether
0x27164e96c197ed3002b7c34ae4a3fab1c2c5be6452a239f76db8fc3b3ad4666c99858342020-05-02 9:06:49950 days 14 hrs ago Origin: Marketplace v1 0x0fdd7b403a3a5b0a74c5e7fb1f409954a5fe4b460.0009474 Ether
0x88b53d6a4945a45f7987bcb24fe733fc1c925dc03a4107c62754440f64f5bf3199857932020-05-02 8:56:42950 days 14 hrs ago 0x9a1955ab265b7b9bccd2c0773b2008f049f4a18d Origin: Marketplace v10.0009474 Ether
0xacf5991b718234fd3bbe922297be905606ad72942bb4ce186598b753a3cc4e7499856472020-05-02 8:27:00950 days 14 hrs ago Origin: Marketplace v1 0x9a1955ab265b7b9bccd2c0773b2008f049f4a18d0.0023085 Ether
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
V01_Marketplace

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2019-09-19
*/

pragma solidity ^0.4.24;

/*
 * Origin Protocol
 * https://originprotocol.com
 *
 * Released under the MIT license
 * https://github.com/OriginProtocol
 *
 * Copyright 2019 Origin Protocol, Inc
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 * 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */

/**
 * @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 OwnershipRenounced(address indexed previousOwner);
  event OwnershipTransferred(
    address indexed previousOwner,
    address indexed newOwner
  );


  /**
   * @dev The Ownable constructor sets the original `owner` of the contract to the sender
   * account.
   */
  constructor() 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 relinquish control of the contract.
   * @notice Renouncing to ownership will leave the contract without an owner.
   * It will not be possible to call the functions with the `onlyOwner`
   * modifier anymore.
   */
  function renounceOwnership() public onlyOwner {
    emit OwnershipRenounced(owner);
    owner = address(0);
  }

  /**
   * @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 {
    _transferOwnership(_newOwner);
  }

  /**
   * @dev Transfers control of the contract to a newOwner.
   * @param _newOwner The address to transfer ownership to.
   */
  function _transferOwnership(address _newOwner) internal {
    require(_newOwner != address(0));
    emit OwnershipTransferred(owner, _newOwner);
    owner = _newOwner;
  }
}


contract ERC20 {
    function transfer(address _to, uint256 _value) external returns (bool);
    function transferFrom(address _from, address _to, uint256 _value) external returns (bool);
}


/**
 * @title A Marketplace contract for managing listings, offers, payments, escrow and arbitration
 *
 * Listings may be priced in ETH or ERC20.
 */
contract V01_Marketplace is Ownable {

    /**
    * @notice All events have the same indexed signature offsets for easy filtering
    */
    event MarketplaceData  (address indexed party, bytes32 ipfsHash);
    event AffiliateAdded   (address indexed party, bytes32 ipfsHash);
    event AffiliateRemoved (address indexed party, bytes32 ipfsHash);
    event ListingCreated   (address indexed party, uint indexed listingID, bytes32 ipfsHash);
    event ListingUpdated   (address indexed party, uint indexed listingID, bytes32 ipfsHash);
    event ListingWithdrawn (address indexed party, uint indexed listingID, bytes32 ipfsHash);
    event ListingArbitrated(address indexed party, uint indexed listingID, bytes32 ipfsHash);
    event ListingData      (address indexed party, uint indexed listingID, bytes32 ipfsHash);
    event OfferCreated     (address indexed party, uint indexed listingID, uint indexed offerID, bytes32 ipfsHash);
    event OfferAccepted    (address indexed party, uint indexed listingID, uint indexed offerID, bytes32 ipfsHash);
    event OfferFinalized   (address indexed party, uint indexed listingID, uint indexed offerID, bytes32 ipfsHash);
    event OfferWithdrawn   (address indexed party, uint indexed listingID, uint indexed offerID, bytes32 ipfsHash);
    event OfferFundsAdded  (address indexed party, uint indexed listingID, uint indexed offerID, bytes32 ipfsHash);
    event OfferDisputed    (address indexed party, uint indexed listingID, uint indexed offerID, bytes32 ipfsHash);
    event OfferRuling      (address indexed party, uint indexed listingID, uint indexed offerID, bytes32 ipfsHash, uint ruling);
    event OfferData        (address indexed party, uint indexed listingID, uint indexed offerID, bytes32 ipfsHash);

    struct Listing {
        address seller;     // Seller wallet / identity contract / other contract
        uint deposit;       // Deposit in Origin Token
        address depositManager; // Address that decides token distribution
    }

    struct Offer {
        uint value;         // Amount in Eth or ERC20 buyer is offering
        uint commission;    // Amount of commission earned if offer is finalized
        uint refund;        // Amount to refund buyer upon finalization
        ERC20 currency;     // Currency of listing
        address buyer;      // Buyer wallet / identity contract / other contract
        address affiliate;  // Address to send any commission
        address arbitrator; // Address that settles disputes
        uint finalizes;     // Timestamp offer finalizes
        uint8 status;       // 0: Undefined, 1: Created, 2: Accepted, 3: Disputed
    }

    Listing[] public listings;
    mapping(uint => Offer[]) public offers; // listingID => Offers
    mapping(address => bool) public allowedAffiliates;

    ERC20 public tokenAddr; // Origin Token address

    constructor(address _tokenAddr) public {
        owner = msg.sender;
        setTokenAddr(_tokenAddr); // Origin Token contract
        allowedAffiliates[0x0] = true; // Allow null affiliate by default
    }

    // @dev Return the total number of listings
    function totalListings() public view returns (uint) {
        return listings.length;
    }

    // @dev Return the total number of offers
    function totalOffers(uint listingID) public view returns (uint) {
        return offers[listingID].length;
    }

    // @dev Seller creates listing
    function createListing(bytes32 _ipfsHash, uint _deposit, address _depositManager)
        public
    {
        _createListing(msg.sender, _ipfsHash, _deposit, _depositManager);
    }

    // @dev Can only be called by token
    function createListingWithSender(
        address _seller,
        bytes32 _ipfsHash,
        uint _deposit,
        address _depositManager
    )
        public returns (bool)
    {
        require(msg.sender == address(tokenAddr), "Token must call");
        _createListing(_seller, _ipfsHash, _deposit, _depositManager);
        return true;
    }

    // Private
    function _createListing(
        address _seller,
        bytes32 _ipfsHash,  // IPFS JSON with details, pricing, availability
        uint _deposit,      // Deposit in Origin Token
        address _depositManager // Address of listing depositManager
    )
        private
    {
        /* require(_deposit > 0); // Listings must deposit some amount of Origin Token */
        require(_depositManager != 0x0, "Must specify depositManager");

        listings.push(Listing({
            seller: _seller,
            deposit: _deposit,
            depositManager: _depositManager
        }));

        if (_deposit > 0) {
            require(
                tokenAddr.transferFrom(_seller, this, _deposit), // Transfer Origin Token
                "transferFrom failed"
            );
        }
        emit ListingCreated(_seller, listings.length - 1, _ipfsHash);
    }

    // @dev Seller updates listing
    function updateListing(
        uint listingID,
        bytes32 _ipfsHash,
        uint _additionalDeposit
    ) public {
        _updateListing(msg.sender, listingID, _ipfsHash, _additionalDeposit);
    }

    function updateListingWithSender(
        address _seller,
        uint listingID,
        bytes32 _ipfsHash,
        uint _additionalDeposit
    )
        public returns (bool)
    {
        require(msg.sender == address(tokenAddr), "Token must call");
        _updateListing(_seller, listingID, _ipfsHash, _additionalDeposit);
        return true;
    }

    function _updateListing(
        address _seller,
        uint listingID,
        bytes32 _ipfsHash,      // Updated IPFS hash
        uint _additionalDeposit // Additional deposit to add
    ) private {
        Listing storage listing = listings[listingID];
        require(listing.seller == _seller, "Seller must call");

        if (_additionalDeposit > 0) {
            listing.deposit += _additionalDeposit;
            require(
                tokenAddr.transferFrom(_seller, this, _additionalDeposit),
                "transferFrom failed"
            );
        }

        emit ListingUpdated(listing.seller, listingID, _ipfsHash);
    }

    // @dev Listing depositManager withdraws listing. IPFS hash contains reason for withdrawl.
    function withdrawListing(uint listingID, address _target, bytes32 _ipfsHash) public {
        Listing storage listing = listings[listingID];
        require(msg.sender == listing.depositManager, "Must be depositManager");
        require(_target != 0x0, "No target");
        uint deposit = listing.deposit;
        listing.deposit = 0; // Prevent multiple deposit withdrawals
        require(tokenAddr.transfer(_target, deposit), "transfer failed"); // Send deposit to target
        emit ListingWithdrawn(_target, listingID, _ipfsHash);
    }

    // @dev Buyer makes offer.
    function makeOffer(
        uint listingID,
        bytes32 _ipfsHash,   // IPFS hash containing offer data
        uint _finalizes,     // Timestamp an accepted offer will finalize
        address _affiliate,  // Address to send any required commission to
        uint256 _commission, // Amount of commission to send in Origin Token if offer finalizes
        uint _value,         // Offer amount in ERC20 or Eth
        ERC20 _currency,     // ERC20 token address or 0x0 for Eth
        address _arbitrator  // Escrow arbitrator
    )
        public
        payable
    {
        bool affiliateWhitelistDisabled = allowedAffiliates[address(this)];
        require(
            affiliateWhitelistDisabled || allowedAffiliates[_affiliate],
            "Affiliate not allowed"
        );

        if (_affiliate == 0x0) {
            // Avoid commission tokens being trapped in marketplace contract.
            require(_commission == 0, "commission requires affiliate");
        }

        offers[listingID].push(Offer({
            status: 1,
            buyer: msg.sender,
            finalizes: _finalizes,
            affiliate: _affiliate,
            commission: _commission,
            currency: _currency,
            value: _value,
            arbitrator: _arbitrator,
            refund: 0
        }));

        if (address(_currency) == 0x0) { // Listing is in ETH
            require(msg.value == _value, "ETH value doesn't match offer");
        } else { // Listing is in ERC20
            require(msg.value == 0, "ETH would be lost");
            require(
                _currency.transferFrom(msg.sender, this, _value),
                "transferFrom failed"
            );
        }

        emit OfferCreated(msg.sender, listingID, offers[listingID].length-1, _ipfsHash);
    }

    // @dev Seller accepts offer
    function acceptOffer(uint listingID, uint offerID, bytes32 _ipfsHash) public {
        Listing storage listing = listings[listingID];
        Offer storage offer = offers[listingID][offerID];
        require(msg.sender == listing.seller, "Seller must accept");
        require(offer.status == 1, "status != created");
        require(
            listing.deposit >= offer.commission,
            "deposit must cover commission"
        );
        if (offer.finalizes < 1000000000) { // Relative finalization window
            offer.finalizes = now + offer.finalizes;
        }
        listing.deposit -= offer.commission; // Accepting an offer puts Origin Token into escrow
        offer.status = 2; // Set offer to 'Accepted'
        emit OfferAccepted(msg.sender, listingID, offerID, _ipfsHash);
    }

    // @dev Buyer withdraws offer. IPFS hash contains reason for withdrawl.
    function withdrawOffer(uint listingID, uint offerID, bytes32 _ipfsHash) public {
        Listing storage listing = listings[listingID];
        Offer memory offer = offers[listingID][offerID];
        require(
            msg.sender == offer.buyer || msg.sender == listing.seller,
            "Restricted to buyer or seller"
        );
        require(offer.status == 1, "status != created");
        delete offers[listingID][offerID];
        refundBuyer(offer.buyer, offer.currency, offer.value);
        emit OfferWithdrawn(msg.sender, listingID, offerID, _ipfsHash);
    }

    // @dev Buyer adds extra funds to an accepted offer.
    function addFunds(uint listingID, uint offerID, bytes32 _ipfsHash, uint _value) public payable {
        Offer storage offer = offers[listingID][offerID];
        require(msg.sender == offer.buyer, "Buyer must call");
        require(offer.status == 2, "status != accepted");
        offer.value += _value;
        if (address(offer.currency) == 0x0) { // Listing is in ETH
            require(
                msg.value == _value,
                "sent != offered value"
            );
        } else { // Listing is in ERC20
            require(msg.value == 0, "ETH must not be sent");
            require(
                offer.currency.transferFrom(msg.sender, this, _value),
                "transferFrom failed"
            );
        }
        emit OfferFundsAdded(msg.sender, listingID, offerID, _ipfsHash);
    }

    // @dev Buyer must finalize transaction to receive commission
    function finalize(uint listingID, uint offerID, bytes32 _ipfsHash) public {
        Listing storage listing = listings[listingID];
        Offer memory offer = offers[listingID][offerID];
        if (now <= offer.finalizes) { // Only buyer can finalize before finalization window
            require(
                msg.sender == offer.buyer,
                "Only buyer can finalize"
            );
        } else { // Allow both seller and buyer to finalize if finalization window has passed
            require(
                msg.sender == offer.buyer || msg.sender == listing.seller,
                "Seller or buyer must finalize"
            );
        }
        require(offer.status == 2, "status != accepted");
        delete offers[listingID][offerID];

        if (msg.sender != offer.buyer) {
            listing.deposit += offer.commission; // Refund commission to seller
        } else {
            // Only pay commission if buyer is finalizing
            payCommission(offer.affiliate, offer.commission);
        }

        paySeller(listing.seller, offer.buyer, offer.currency, offer.value, offer.refund); // Pay seller

        emit OfferFinalized(msg.sender, listingID, offerID, _ipfsHash);
    }

    // @dev Buyer or seller can dispute transaction during finalization window
    function dispute(uint listingID, uint offerID, bytes32 _ipfsHash) public {
        Listing storage listing = listings[listingID];
        Offer storage offer = offers[listingID][offerID];
        require(
            msg.sender == offer.buyer || msg.sender == listing.seller,
            "Must be seller or buyer"
        );
        require(offer.status == 2, "status != accepted");
        require(now <= offer.finalizes, "Already finalized");
        offer.status = 3; // Set status to "Disputed"
        emit OfferDisputed(msg.sender, listingID, offerID, _ipfsHash);
    }

    // @dev Called by arbitrator
    function executeRuling(
        uint listingID,
        uint offerID,
        bytes32 _ipfsHash,
        uint _ruling, // 0: Seller, 1: Buyer, 2: Com + Seller, 3: Com + Buyer
        uint _refund
    ) public {
        Listing storage listing = listings[listingID];
        Offer memory offer = offers[listingID][offerID];
        require(msg.sender == offer.arbitrator, "Must be arbitrator");
        require(offer.status == 3, "status != disputed");
        require(_refund <= offer.value, "refund too high");
        delete offers[listingID][offerID];
        if (_ruling & 2 == 2) {
            payCommission(offer.affiliate, offer.commission);
        } else  { // Refund commission to seller
            listings[listingID].deposit += offer.commission;
        }
        if (_ruling & 1 == 1) {
            refundBuyer(offer.buyer, offer.currency, offer.value);
        } else  {
            paySeller(listing.seller, offer.buyer, offer.currency, offer.value, _refund); // Pay seller
        }
        emit OfferRuling(offer.arbitrator, listingID, offerID, _ipfsHash, _ruling);
    }

    // @dev Sets the amount that a seller wants to refund to a buyer.
    function updateRefund(uint listingID, uint offerID, uint _refund, bytes32 _ipfsHash) public {
        Offer storage offer = offers[listingID][offerID];
        Listing storage listing = listings[listingID];
        require(msg.sender == listing.seller, "Seller must call");
        require(offer.status == 2, "status != accepted");
        require(_refund <= offer.value, "Excessive refund");
        offer.refund = _refund;
        emit OfferData(msg.sender, listingID, offerID, _ipfsHash);
    }

    // @dev Refunds buyer in ETH or ERC20 - used by 1) executeRuling() and 2) to allow a seller to refund a purchase
    function refundBuyer(address buyer, ERC20 currency, uint value) private {
        if (address(currency) == 0x0) {
            require(buyer.send(value), "ETH refund failed");
        } else {
            require(
                currency.transfer(buyer, value),
                "Refund failed"
            );
        }
    }

    // @dev Pay seller in ETH or ERC20
    function paySeller(address seller, address buyer, ERC20 currency, uint offerValue, uint offerRefund) private {
        uint value = offerValue - offerRefund;

        if (address(currency) == 0x0) {
            require(buyer.send(offerRefund), "ETH refund failed");
            require(seller.send(value), "ETH send failed");
        } else {
            require(
                currency.transfer(buyer, offerRefund),
                "Refund failed"
            );
            require(
                currency.transfer(seller, value),
                "Transfer failed"
            );
        }
    }

    // @dev Pay commission to affiliate
    function payCommission(address affiliate, uint commission) private {
        if (affiliate != 0x0) {
            require(
                tokenAddr.transfer(affiliate, commission),
                "Commission transfer failed"
            );
        }
    }

    // @dev Associate ipfs data with the marketplace
    function addData(bytes32 ipfsHash) public {
        emit MarketplaceData(msg.sender, ipfsHash);
    }

    // @dev Associate ipfs data with a listing
    function addData(uint listingID, bytes32 ipfsHash) public {
        emit ListingData(msg.sender, listingID, ipfsHash);
    }

    // @dev Associate ipfs data with an offer
    function addData(uint listingID, uint offerID, bytes32 ipfsHash) public {
        emit OfferData(msg.sender, listingID, offerID, ipfsHash);
    }

    // @dev Allow listing depositManager to send deposit
    function sendDeposit(uint listingID, address target, uint value, bytes32 ipfsHash) public {
        Listing storage listing = listings[listingID];
        require(listing.depositManager == msg.sender, "depositManager must call");
        require(listing.deposit >= value, "Value too high");
        listing.deposit -= value;
        require(tokenAddr.transfer(target, value), "Transfer failed");
        emit ListingArbitrated(target, listingID, ipfsHash);
    }

    // @dev Set the address of the Origin token contract
    function setTokenAddr(address _tokenAddr) public onlyOwner {
        tokenAddr = ERC20(_tokenAddr);
    }

    // @dev Add affiliate to whitelist. Set to address(this) to disable.
    function addAffiliate(address _affiliate, bytes32 ipfsHash) public onlyOwner {
        allowedAffiliates[_affiliate] = true;
        emit AffiliateAdded(_affiliate, ipfsHash);
    }

    // @dev Remove affiliate from whitelist.
    function removeAffiliate(address _affiliate, bytes32 ipfsHash) public onlyOwner {
        delete allowedAffiliates[_affiliate];
        emit AffiliateRemoved(_affiliate, ipfsHash);
    }
}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[{"name":"listingID","type":"uint256"},{"name":"offerID","type":"uint256"},{"name":"_refund","type":"uint256"},{"name":"_ipfsHash","type":"bytes32"}],"name":"updateRefund","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"ipfsHash","type":"bytes32"}],"name":"addData","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenAddr","type":"address"}],"name":"setTokenAddr","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"name":"offers","outputs":[{"name":"value","type":"uint256"},{"name":"commission","type":"uint256"},{"name":"refund","type":"uint256"},{"name":"currency","type":"address"},{"name":"buyer","type":"address"},{"name":"affiliate","type":"address"},{"name":"arbitrator","type":"address"},{"name":"finalizes","type":"uint256"},{"name":"status","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"listingID","type":"uint256"},{"name":"_ipfsHash","type":"bytes32"},{"name":"_finalizes","type":"uint256"},{"name":"_affiliate","type":"address"},{"name":"_commission","type":"uint256"},{"name":"_value","type":"uint256"},{"name":"_currency","type":"address"},{"name":"_arbitrator","type":"address"}],"name":"makeOffer","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"listingID","type":"uint256"},{"name":"target","type":"address"},{"name":"value","type":"uint256"},{"name":"ipfsHash","type":"bytes32"}],"name":"sendDeposit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"tokenAddr","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"listingID","type":"uint256"},{"name":"offerID","type":"uint256"},{"name":"_ipfsHash","type":"bytes32"}],"name":"dispute","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_affiliate","type":"address"},{"name":"ipfsHash","type":"bytes32"}],"name":"addAffiliate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"listingID","type":"uint256"},{"name":"offerID","type":"uint256"},{"name":"_ipfsHash","type":"bytes32"},{"name":"_value","type":"uint256"}],"name":"addFunds","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"listingID","type":"uint256"}],"name":"totalOffers","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"allowedAffiliates","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"listingID","type":"uint256"},{"name":"ipfsHash","type":"bytes32"}],"name":"addData","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"listingID","type":"uint256"},{"name":"offerID","type":"uint256"},{"name":"_ipfsHash","type":"bytes32"}],"name":"acceptOffer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_affiliate","type":"address"},{"name":"ipfsHash","type":"bytes32"}],"name":"removeAffiliate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"listingID","type":"uint256"},{"name":"_target","type":"address"},{"name":"_ipfsHash","type":"bytes32"}],"name":"withdrawListing","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"listingID","type":"uint256"},{"name":"_ipfsHash","type":"bytes32"},{"name":"_additionalDeposit","type":"uint256"}],"name":"updateListing","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"listingID","type":"uint256"},{"name":"offerID","type":"uint256"},{"name":"_ipfsHash","type":"bytes32"},{"name":"_ruling","type":"uint256"},{"name":"_refund","type":"uint256"}],"name":"executeRuling","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalListings","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_ipfsHash","type":"bytes32"},{"name":"_deposit","type":"uint256"},{"name":"_depositManager","type":"address"}],"name":"createListing","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_seller","type":"address"},{"name":"listingID","type":"uint256"},{"name":"_ipfsHash","type":"bytes32"},{"name":"_additionalDeposit","type":"uint256"}],"name":"updateListingWithSender","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"listingID","type":"uint256"},{"name":"offerID","type":"uint256"},{"name":"ipfsHash","type":"bytes32"}],"name":"addData","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_seller","type":"address"},{"name":"_ipfsHash","type":"bytes32"},{"name":"_deposit","type":"uint256"},{"name":"_depositManager","type":"address"}],"name":"createListingWithSender","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"listings","outputs":[{"name":"seller","type":"address"},{"name":"deposit","type":"uint256"},{"name":"depositManager","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"listingID","type":"uint256"},{"name":"offerID","type":"uint256"},{"name":"_ipfsHash","type":"bytes32"}],"name":"withdrawOffer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"listingID","type":"uint256"},{"name":"offerID","type":"uint256"},{"name":"_ipfsHash","type":"bytes32"}],"name":"finalize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_tokenAddr","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"party","type":"address"},{"indexed":false,"name":"ipfsHash","type":"bytes32"}],"name":"MarketplaceData","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"party","type":"address"},{"indexed":false,"name":"ipfsHash","type":"bytes32"}],"name":"AffiliateAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"party","type":"address"},{"indexed":false,"name":"ipfsHash","type":"bytes32"}],"name":"AffiliateRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"party","type":"address"},{"indexed":true,"name":"listingID","type":"uint256"},{"indexed":false,"name":"ipfsHash","type":"bytes32"}],"name":"ListingCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"party","type":"address"},{"indexed":true,"name":"listingID","type":"uint256"},{"indexed":false,"name":"ipfsHash","type":"bytes32"}],"name":"ListingUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"party","type":"address"},{"indexed":true,"name":"listingID","type":"uint256"},{"indexed":false,"name":"ipfsHash","type":"bytes32"}],"name":"ListingWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"party","type":"address"},{"indexed":true,"name":"listingID","type":"uint256"},{"indexed":false,"name":"ipfsHash","type":"bytes32"}],"name":"ListingArbitrated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"party","type":"address"},{"indexed":true,"name":"listingID","type":"uint256"},{"indexed":false,"name":"ipfsHash","type":"bytes32"}],"name":"ListingData","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"party","type":"address"},{"indexed":true,"name":"listingID","type":"uint256"},{"indexed":true,"name":"offerID","type":"uint256"},{"indexed":false,"name":"ipfsHash","type":"bytes32"}],"name":"OfferCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"party","type":"address"},{"indexed":true,"name":"listingID","type":"uint256"},{"indexed":true,"name":"offerID","type":"uint256"},{"indexed":false,"name":"ipfsHash","type":"bytes32"}],"name":"OfferAccepted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"party","type":"address"},{"indexed":true,"name":"listingID","type":"uint256"},{"indexed":true,"name":"offerID","type":"uint256"},{"indexed":false,"name":"ipfsHash","type":"bytes32"}],"name":"OfferFinalized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"party","type":"address"},{"indexed":true,"name":"listingID","type":"uint256"},{"indexed":true,"name":"offerID","type":"uint256"},{"indexed":false,"name":"ipfsHash","type":"bytes32"}],"name":"OfferWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"party","type":"address"},{"indexed":true,"name":"listingID","type":"uint256"},{"indexed":true,"name":"offerID","type":"uint256"},{"indexed":false,"name":"ipfsHash","type":"bytes32"}],"name":"OfferFundsAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"party","type":"address"},{"indexed":true,"name":"listingID","type":"uint256"},{"indexed":true,"name":"offerID","type":"uint256"},{"indexed":false,"name":"ipfsHash","type":"bytes32"}],"name":"OfferDisputed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"party","type":"address"},{"indexed":true,"name":"listingID","type":"uint256"},{"indexed":true,"name":"offerID","type":"uint256"},{"indexed":false,"name":"ipfsHash","type":"bytes32"},{"indexed":false,"name":"ruling","type":"uint256"}],"name":"OfferRuling","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"party","type":"address"},{"indexed":true,"name":"listingID","type":"uint256"},{"indexed":true,"name":"offerID","type":"uint256"},{"indexed":false,"name":"ipfsHash","type":"bytes32"}],"name":"OfferData","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

60806040523480156200001157600080fd5b5060405160208062002f8383398101604052516000805433600160a060020a0319918216811790911617905562000051816401000000006200008d810204565b506000805260036020527f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff805460ff19166001179055620000c7565b600054600160a060020a03163314620000a557600080fd5b60048054600160a060020a031916600160a060020a0392909216919091179055565b612eac80620000d76000396000f30060806040526004361061015b5763ffffffff60e060020a6000350416631d34be47811461016057806328af94c8146101835780632ebd1e281461019b5780634d03a9a5146101bc57806351b182501461022f5780635f0da25b146102605780635fbe4d1d1461028a57806370809757146102bb578063715018a6146102d957806378572816146102ee5780637d19514d146103125780638da5cb5b1461032657806391f1f3101461033b578063963ff4cb146103655780639a8d10a31461039a5780639c3f7ca2146103b5578063a0823111146103d3578063a3111d7c146103f7578063bf77aa1f1461041e578063c73111dd1461043c578063c78b616c14610460578063ca27eb1c14610475578063cea4b6871461049c578063d9fefbf8146104c6578063de400629146104e4578063de74e57b14610513578063ebe65f6014610556578063f2fde38b14610574578063fde34dc414610595575b600080fd5b34801561016c57600080fd5b506101816004356024356044356064356105b3565b005b34801561018f57600080fd5b50610181600435610752565b3480156101a757600080fd5b50610181600160a060020a036004351661078b565b3480156101c857600080fd5b506101d76004356024356107c4565b60408051998a5260208a019890985288880196909652600160a060020a039485166060890152928416608088015290831660a087015290911660c085015260e084015260ff1661010083015251908190036101200190f35b610181600435602435604435600160a060020a036064358116906084359060a4359060c43581169060e43516610841565b34801561026c57600080fd5b50610181600435600160a060020a0360243516604435606435610cc3565b34801561029657600080fd5b5061029f610eef565b60408051600160a060020a039092168252519081900360200190f35b3480156102c757600080fd5b50610181600435602435604435610efe565b3480156102e557600080fd5b506101816110c6565b3480156102fa57600080fd5b50610181600160a060020a0360043516602435611125565b610181600435602435604435606435611198565b34801561033257600080fd5b5061029f611452565b34801561034757600080fd5b50610353600435611461565b60408051918252519081900360200190f35b34801561037157600080fd5b50610386600160a060020a0360043516611473565b604080519115158252519081900360200190f35b3480156103a657600080fd5b50610181600435602435611488565b3480156103c157600080fd5b506101816004356024356044356114c3565b3480156103df57600080fd5b50610181600160a060020a03600435166024356116b3565b34801561040357600080fd5b50610181600435600160a060020a0360243516604435611723565b34801561042a57600080fd5b50610181600435602435604435611958565b34801561044857600080fd5b50610181600435602435604435606435608435611969565b34801561046c57600080fd5b50610353611cc3565b34801561048157600080fd5b50610181600435602435600160a060020a0360443516611cc9565b3480156104a857600080fd5b50610386600160a060020a0360043516602435604435606435611cd5565b3480156104d257600080fd5b50610181600435602435604435611d51565b3480156104f057600080fd5b50610386600160a060020a03600435811690602435906044359060643516611d90565b34801561051f57600080fd5b5061052b600435611e01565b60408051600160a060020a039485168152602081019390935292168183015290519081900360600190f35b34801561056257600080fd5b50610181600435602435604435611e3d565b34801561058057600080fd5b50610181600160a060020a03600435166120ba565b3480156105a157600080fd5b506101816004356024356044356120dd565b60008481526002602052604081208054829190869081106105d057fe5b906000526020600020906009020191506001868154811015156105ef57fe5b600091825260209091206003909102018054909150600160a060020a03163314610663576040805160e560020a62461bcd02815260206004820152601060248201527f53656c6c6572206d7573742063616c6c00000000000000000000000000000000604482015290519081900360640190fd5b600882015460ff166002146106b0576040805160e560020a62461bcd0281526020600482015260126024820152600080516020612e41833981519152604482015290519081900360640190fd5b8154841115610709576040805160e560020a62461bcd02815260206004820152601060248201527f45786365737369766520726566756e6400000000000000000000000000000000604482015290519081900360640190fd5b600282018490556040805184815290518691889133917f9b7312a236066d2da679eba7e3a2e86d2d07a973819499846c0efd2fd2506c80919081900360200190a4505050505050565b60408051828152905133917f8e530f3a09c59fdf1b0d5ed714b7a5b94c059256cdc29b8521e9891734c6a2b7919081900360200190a250565b600054600160a060020a031633146107a257600080fd5b60048054600160a060020a031916600160a060020a0392909216919091179055565b6002602052816000526040600020818154811015156107df57fe5b60009182526020909120600990910201805460018201546002830154600384015460048501546005860154600687015460078801546008909801549699509497509295600160a060020a03928316959183169493831693909216919060ff1689565b3060009081526003602052604090205460ff1680806108785750600160a060020a03861660009081526003602052604090205460ff165b15156108ce576040805160e560020a62461bcd02815260206004820152601560248201527f416666696c69617465206e6f7420616c6c6f7765640000000000000000000000604482015290519081900360640190fd5b600160a060020a0386161515610934578415610934576040805160e560020a62461bcd02815260206004820152601d60248201527f636f6d6d697373696f6e20726571756972657320616666696c69617465000000604482015290519081900360640190fd5b600260008a8152602001908152602001600020610120604051908101604052808681526020018781526020016000815260200185600160a060020a0316815260200133600160a060020a0316815260200188600160a060020a0316815260200184600160a060020a03168152602001898152602001600160ff168152509080600181540180825580915050906001820390600052602060002090600902016000909192909190915060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a815481600160a060020a030219169083600160a060020a0316021790555060808201518160040160006101000a815481600160a060020a030219169083600160a060020a0316021790555060a08201518160050160006101000a815481600160a060020a030219169083600160a060020a0316021790555060c08201518160060160006101000a815481600160a060020a030219169083600160a060020a0316021790555060e082015181600701556101008201518160080160006101000a81548160ff021916908360ff16021790555050505082600160a060020a031660001415610b4b57348414610b46576040805160e560020a62461bcd02815260206004820152601d60248201527f4554482076616c756520646f65736e2774206d61746368206f66666572000000604482015290519081900360640190fd5b610c69565b3415610ba1576040805160e560020a62461bcd02815260206004820152601160248201527f45544820776f756c64206265206c6f7374000000000000000000000000000000604482015290519081900360640190fd5b6040805160e060020a6323b872dd028152336004820152306024820152604481018690529051600160a060020a038516916323b872dd9160648083019260209291908290030181600087803b158015610bf957600080fd5b505af1158015610c0d573d6000803e3d6000fd5b505050506040513d6020811015610c2357600080fd5b50511515610c69576040805160e560020a62461bcd0281526020600482015260136024820152600080516020612e61833981519152604482015290519081900360640190fd5b6000898152600260209081526040918290205482518b81529251600019909101928c9233927f6ee68cb753f284cf771c1a32c236d7ffcab6011345186a30e57837d761e868379281900390910190a4505050505050505050565b6000600185815481101515610cd457fe5b60009182526020909120600260039092020190810154909150600160a060020a03163314610d4c576040805160e560020a62461bcd02815260206004820152601860248201527f6465706f7369744d616e61676572206d7573742063616c6c0000000000000000604482015290519081900360640190fd5b6001810154831115610da8576040805160e560020a62461bcd02815260206004820152600e60248201527f56616c756520746f6f2068696768000000000000000000000000000000000000604482015290519081900360640190fd5b600181018054849003905560048054604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a0388811694820194909452602481018790529051929091169163a9059cbb916044808201926020929091908290030181600087803b158015610e2657600080fd5b505af1158015610e3a573d6000803e3d6000fd5b505050506040513d6020811015610e5057600080fd5b50511515610ea8576040805160e560020a62461bcd02815260206004820152600f60248201527f5472616e73666572206661696c65640000000000000000000000000000000000604482015290519081900360640190fd5b6040805183815290518691600160a060020a038716917f9c9827b799328bcbadbd04862686713436136571c54d7ca0388bd952f314f8909181900360200190a35050505050565b600454600160a060020a031681565b600080600185815481101515610f1057fe5b906000526020600020906003020191506002600086815260200190815260200160002084815481101515610f4057fe5b600091825260209091206009909102016004810154909150600160a060020a0316331480610f7757508154600160a060020a031633145b1515610fcd576040805160e560020a62461bcd02815260206004820152601760248201527f4d7573742062652073656c6c6572206f72206275796572000000000000000000604482015290519081900360640190fd5b600881015460ff1660021461101a576040805160e560020a62461bcd0281526020600482015260126024820152600080516020612e41833981519152604482015290519081900360640190fd5b6007810154421115611076576040805160e560020a62461bcd02815260206004820152601160248201527f416c72656164792066696e616c697a6564000000000000000000000000000000604482015290519081900360640190fd5b60088101805460ff191660031790556040805184815290518591879133917f11c45991938e1dec0b00887cd2368a2195fccb46b08cc56483ac3053ddb609b2919081900360200190a45050505050565b600054600160a060020a031633146110dd57600080fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a260008054600160a060020a0319169055565b600054600160a060020a0316331461113c57600080fd5b600160a060020a038216600081815260036020908152604091829020805460ff19166001179055815184815291517f5e48128fde8c162f70ea9f59d0a58f1d1cc40c2eec4b4c71356ab395650bfbdf9281900390910190a25050565b60008481526002602052604081208054859081106111b257fe5b600091825260209091206009909102016004810154909150600160a060020a03163314611229576040805160e560020a62461bcd02815260206004820152600f60248201527f4275796572206d7573742063616c6c0000000000000000000000000000000000604482015290519081900360640190fd5b600881015460ff16600214611276576040805160e560020a62461bcd0281526020600482015260126024820152600080516020612e41833981519152604482015290519081900360640190fd5b8054820181556003810154600160a060020a031615156112ec573482146112e7576040805160e560020a62461bcd02815260206004820152601560248201527f73656e7420213d206f6666657265642076616c75650000000000000000000000604482015290519081900360640190fd5b611411565b3415611342576040805160e560020a62461bcd02815260206004820152601460248201527f455448206d757374206e6f742062652073656e74000000000000000000000000604482015290519081900360640190fd5b60038101546040805160e060020a6323b872dd028152336004820152306024820152604481018590529051600160a060020a03909216916323b872dd916064808201926020929091908290030181600087803b1580156113a157600080fd5b505af11580156113b5573d6000803e3d6000fd5b505050506040513d60208110156113cb57600080fd5b50511515611411576040805160e560020a62461bcd0281526020600482015260136024820152600080516020612e61833981519152604482015290519081900360640190fd5b6040805184815290518591879133917f5f0e66c42b81a43cbd35b11ea0a599d0be1d8e1fdb61d1d4f7a98243ba6cc26b919081900360200190a45050505050565b600054600160a060020a031681565b60009081526002602052604090205490565b60036020526000908152604090205460ff1681565b604080518281529051839133917f12dc84d4005dd5b86fd88951106aa76927a62b83b85ba9c912a7268582906aa99181900360200190a35050565b6000806001858154811015156114d557fe5b90600052602060002090600302019150600260008681526020019081526020016000208481548110151561150557fe5b6000918252602090912083546009909202019150600160a060020a03163314611578576040805160e560020a62461bcd02815260206004820152601260248201527f53656c6c6572206d757374206163636570740000000000000000000000000000604482015290519081900360640190fd5b600881015460ff166001146115d7576040805160e560020a62461bcd02815260206004820152601160248201527f73746174757320213d2063726561746564000000000000000000000000000000604482015290519081900360640190fd5b600180820154908301541015611637576040805160e560020a62461bcd02815260206004820152601d60248201527f6465706f736974206d75737420636f76657220636f6d6d697373696f6e000000604482015290519081900360640190fd5b633b9aca008160070154101561165257600781018054420190555b600180820154908301805491909103905560088101805460ff191660021790556040805184815290518591879133917f449224201a35688b74a38ff24770e8b2a326ebf42357bf19a36f5fedbbe552a0919081900360200190a45050505050565b600054600160a060020a031633146116ca57600080fd5b600160a060020a038216600081815260036020908152604091829020805460ff19169055815184815291517f3553c89fbe376344fc3e6cfb39cce65e6d961cece468c297dad2a1e31d4fa2b69281900390910190a25050565b60008060018581548110151561173557fe5b600091825260209091206003909102016002810154909250600160a060020a031633146117ac576040805160e560020a62461bcd02815260206004820152601660248201527f4d757374206265206465706f7369744d616e6167657200000000000000000000604482015290519081900360640190fd5b600160a060020a038416151561180c576040805160e560020a62461bcd02815260206004820152600960248201527f4e6f207461726765740000000000000000000000000000000000000000000000604482015290519081900360640190fd5b5060018101805460009182905560048054604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a03898116948201949094526024810185905290519394929091169263a9059cbb92604480840193602093929083900390910190829087803b15801561188f57600080fd5b505af11580156118a3573d6000803e3d6000fd5b505050506040513d60208110156118b957600080fd5b50511515611911576040805160e560020a62461bcd02815260206004820152600f60248201527f7472616e73666572206661696c65640000000000000000000000000000000000604482015290519081900360640190fd5b6040805184815290518691600160a060020a038716917fafa3dc4f271ef3419006f21140d375eba48ef3def56e8bfe6d54d0c72a81a3079181900360200190a35050505050565b6119643384848461241a565b505050565b6000611973612df4565b600180548890811061198157fe5b9060005260206000209060030201915060026000888152602001908152602001600020868154811015156119b157fe5b600091825260209182902060408051610120810182526009909302909101805483526001810154938301939093526002830154908201526003820154600160a060020a0390811660608301526004830154811660808301526005830154811660a083015260068301541660c08201819052600783015460e083015260089092015460ff1661010082015291503314611a93576040805160e560020a62461bcd02815260206004820152601260248201527f4d7573742062652061726269747261746f720000000000000000000000000000604482015290519081900360640190fd5b80610100015160ff166003141515611af5576040805160e560020a62461bcd02815260206004820152601260248201527f73746174757320213d2064697370757465640000000000000000000000000000604482015290519081900360640190fd5b8051831115611b4e576040805160e560020a62461bcd02815260206004820152600f60248201527f726566756e6420746f6f20686967680000000000000000000000000000000000604482015290519081900360640190fd5b6000878152600260205260409020805487908110611b6857fe5b600091825260208220600990910201818155600181018290556002808201839055600382018054600160a060020a0319908116909155600483018054821690556005830180548216905560068301805490911690556007820192909255600801805460ff191690558481161415611bf057611beb8160a0015182602001516125d1565b611c1e565b60208101516001805489908110611c0357fe5b60009182526020909120600160039092020101805490910190555b8360011660011415611c4657611c418160800151826060015183600001516126d9565b611c6a565b8154608082015160608301518351611c6a93600160a060020a03169291908761284e565b60c08101516040805187815260208101879052815189938b93600160a060020a03909116927f3e4d55eb2a402ba6f500db5d75f9303dfe863a2e8319054aeddb6a35ec7e3c61929081900390910190a450505050505050565b60015490565b61196433848484612b2e565b600454600090600160a060020a03163314611d3a576040805160e560020a62461bcd02815260206004820152600f60248201527f546f6b656e206d7573742063616c6c0000000000000000000000000000000000604482015290519081900360640190fd5b611d468585858561241a565b506001949350505050565b6040805182815290518391859133917f9b7312a236066d2da679eba7e3a2e86d2d07a973819499846c0efd2fd2506c80919081900360200190a4505050565b600454600090600160a060020a03163314611df5576040805160e560020a62461bcd02815260206004820152600f60248201527f546f6b656e206d7573742063616c6c0000000000000000000000000000000000604482015290519081900360640190fd5b611d4685858585612b2e565b6001805482908110611e0f57fe5b6000918252602090912060039091020180546001820154600290920154600160a060020a0391821693501683565b6000611e47612df4565b6001805486908110611e5557fe5b906000526020600020906003020191506002600086815260200190815260200160002084815481101515611e8557fe5b600091825260209182902060408051610120810182526009909302909101805483526001810154938301939093526002830154908201526003820154600160a060020a03908116606083015260048301548116608083018190526005840154821660a0840152600684015490911660c0830152600783015460e083015260089092015460ff166101008201529150331480611f2957508154600160a060020a031633145b1515611f7f576040805160e560020a62461bcd02815260206004820152601d60248201527f5265737472696374656420746f206275796572206f722073656c6c6572000000604482015290519081900360640190fd5b80610100015160ff166001141515611fe1576040805160e560020a62461bcd02815260206004820152601160248201527f73746174757320213d2063726561746564000000000000000000000000000000604482015290519081900360640190fd5b6000858152600260205260409020805485908110611ffb57fe5b6000918252602082206009909102018181556001810182905560028101829055600381018054600160a060020a0319908116909155600482018054821690556005820180548216905560068201805490911690556007810191909155600801805460ff191690556080810151606082015182516120799291906126d9565b6040805184815290518591879133917fe9ae767ab1c8f3f874a5b2810a1f6323b43283a5b462b52a4de5f8ed53a4fe25919081900360200190a45050505050565b600054600160a060020a031633146120d157600080fd5b6120da81612d84565b50565b60006120e7612df4565b60018054869081106120f557fe5b90600052602060002090600302019150600260008681526020019081526020016000208481548110151561212557fe5b600091825260209182902060408051610120810182526009909302909101805483526001810154938301939093526002830154908201526003820154600160a060020a0390811660608301526004830154811660808301526005830154811660a083015260068301541660c0820152600782015460e0820181905260089092015460ff1661010082015291504211612220576080810151600160a060020a0316331461221b576040805160e560020a62461bcd02815260206004820152601760248201527f4f6e6c792062757965722063616e2066696e616c697a65000000000000000000604482015290519081900360640190fd5b6122a3565b8060800151600160a060020a031633600160a060020a0316148061224d57508154600160a060020a031633145b15156122a3576040805160e560020a62461bcd02815260206004820152601d60248201527f53656c6c6572206f72206275796572206d7573742066696e616c697a65000000604482015290519081900360640190fd5b80610100015160ff1660021415156122f3576040805160e560020a62461bcd0281526020600482015260126024820152600080516020612e41833981519152604482015290519081900360640190fd5b600085815260026020526040902080548590811061230d57fe5b600091825260208220600991909102018181556001810182905560028101829055600381018054600160a060020a0319908116909155600482018054821690556005820180548216905560068201805490911690556007810191909155600801805460ff191690556080810151600160a060020a0316331461239e57602081015160018301805490910190556123b0565b6123b08160a0015182602001516125d1565b815460808201516060830151835160408501516123d994600160a060020a03169392919061284e565b6040805184815290518591879133917fbfefa76df66ac53c6517b1939b14bfc4d5fdf714b93a71aea2e50977d1b3b8e6919081900360200190a45050505050565b600060018481548110151561242b57fe5b600091825260209091206003909102018054909150600160a060020a038681169116146124a2576040805160e560020a62461bcd02815260206004820152601060248201527f53656c6c6572206d7573742063616c6c00000000000000000000000000000000604482015290519081900360640190fd5b60008211156125885760018101805483019055600480546040805160e060020a6323b872dd028152600160a060020a038981169482019490945230602482015260448101869052905192909116916323b872dd916064808201926020929091908290030181600087803b15801561251857600080fd5b505af115801561252c573d6000803e3d6000fd5b505050506040513d602081101561254257600080fd5b50511515612588576040805160e560020a62461bcd0281526020600482015260136024820152600080516020612e61833981519152604482015290519081900360640190fd5b80546040805185815290518692600160a060020a0316917f470503ad37642fff73a57bac35e69733b6b38281a893f39b50c285aad1f040e0919081900360200190a35050505050565b600160a060020a038216156126d55760048054604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a0386811694820194909452602481018590529051929091169163a9059cbb916044808201926020929091908290030181600087803b15801561265357600080fd5b505af1158015612667573d6000803e3d6000fd5b505050506040513d602081101561267d57600080fd5b505115156126d5576040805160e560020a62461bcd02815260206004820152601a60248201527f436f6d6d697373696f6e207472616e73666572206661696c6564000000000000604482015290519081900360640190fd5b5050565b600160a060020a038216151561276957604051600160a060020a0384169082156108fc029083906000818181858888f193505050501515612764576040805160e560020a62461bcd02815260206004820152601160248201527f45544820726566756e64206661696c6564000000000000000000000000000000604482015290519081900360640190fd5b611964565b81600160a060020a031663a9059cbb84836040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b1580156127cc57600080fd5b505af11580156127e0573d6000803e3d6000fd5b505050506040513d60208110156127f657600080fd5b50511515611964576040805160e560020a62461bcd02815260206004820152600d60248201527f526566756e64206661696c656400000000000000000000000000000000000000604482015290519081900360640190fd5b808203600160a060020a038416151561295c57604051600160a060020a0386169083156108fc029084906000818181858888f1935050505015156128dc576040805160e560020a62461bcd02815260206004820152601160248201527f45544820726566756e64206661696c6564000000000000000000000000000000604482015290519081900360640190fd5b604051600160a060020a0387169082156108fc029083906000818181858888f193505050501515612957576040805160e560020a62461bcd02815260206004820152600f60248201527f4554482073656e64206661696c65640000000000000000000000000000000000604482015290519081900360640190fd5b612b26565b83600160a060020a031663a9059cbb86846040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b1580156129bf57600080fd5b505af11580156129d3573d6000803e3d6000fd5b505050506040513d60208110156129e957600080fd5b50511515612a41576040805160e560020a62461bcd02815260206004820152600d60248201527f526566756e64206661696c656400000000000000000000000000000000000000604482015290519081900360640190fd5b83600160a060020a031663a9059cbb87836040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b158015612aa457600080fd5b505af1158015612ab8573d6000803e3d6000fd5b505050506040513d6020811015612ace57600080fd5b50511515612b26576040805160e560020a62461bcd02815260206004820152600f60248201527f5472616e73666572206661696c65640000000000000000000000000000000000604482015290519081900360640190fd5b505050505050565b600160a060020a0381161515612b8e576040805160e560020a62461bcd02815260206004820152601b60248201527f4d7573742073706563696679206465706f7369744d616e616765720000000000604482015290519081900360640190fd5b60408051606081018252600160a060020a038087168252602082018581528482169383019384526001805480820182556000918252935160039094027fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf681018054958516600160a060020a031996871617905591517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf783015593517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf89091018054919092169216919091179055821115612d3557600480546040805160e060020a6323b872dd028152600160a060020a038881169482019490945230602482015260448101869052905192909116916323b872dd916064808201926020929091908290030181600087803b158015612cc557600080fd5b505af1158015612cd9573d6000803e3d6000fd5b505050506040513d6020811015612cef57600080fd5b50511515612d35576040805160e560020a62461bcd0281526020600482015260136024820152600080516020612e61833981519152604482015290519081900360640190fd5b60015460408051858152905160001990920191600160a060020a038716917fec3d306143145322b45d2788d826e3b7b9ad062f16e1ec59a5eaba214f96ee3c919081900360200190a350505050565b600160a060020a0381161515612d9957600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360008054600160a060020a031916600160a060020a0392909216919091179055565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081019190915290560073746174757320213d20616363657074656400000000000000000000000000007472616e7366657246726f6d206661696c656400000000000000000000000000a165627a7a723058207a46bb4eab2446f6310429368a6aca7cd68db18cb7c8888777f1ec503f43101f0029000000000000000000000000a115e16ef6e217f7a327a57031f75ce0487aadb8

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

000000000000000000000000a115e16ef6e217f7a327a57031f75ce0487aadb8

-----Decoded View---------------
Arg [0] : _tokenAddr (address): 0xA115e16ef6e217f7a327a57031F75cE0487AaDb8

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000a115e16ef6e217f7a327a57031f75ce0487aadb8


Deployed ByteCode Sourcemap

3383:18203:0:-;;;;;;;;;-1:-1:-1;;;3383:18203:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17876:505;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;17876:505:0;;;;;;;;;;;;;19879:103;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;19879:103:0;;;;;20967:107;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;20967:107:0;-1:-1:-1;;;;;20967:107:0;;;;;6104:38;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6104:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6104:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10368:1842;;;;;;;;-1:-1:-1;;;;;10368:1842:0;;;;;;;;;;;;;;;;;;;;;20432:469;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;20432:469:0;;;-1:-1:-1;;;;;20432:469:0;;;;;;;;;6230:22;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6230:22:0;;;;;;;;-1:-1:-1;;;;;6230:22:0;;;;;;;;;;;;;;16056:586;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;16056:586:0;;;;;;;;;2317:114;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2317:114:0;;;;21156:184;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;21156:184:0;-1:-1:-1;;;;;21156:184:0;;;;;;;13809:839;;;;;;;;;;;;1522:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1522:20:0;;;;6701:114;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6701:114:0;;;;;;;;;;;;;;;;;;;;;6172:49;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6172:49:0;-1:-1:-1;;;;;6172:49:0;;;;;;;;;;;;;;;;;;;;;;;20038:126;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;20038:126:0;;;;;;;12252:819;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;12252:819:0;;;;;;;;;21394:189;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;21394:189:0;-1:-1:-1;;;;;21394:189:0;;;;;;;9776:552;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9776:552:0;;;-1:-1:-1;;;;;9776:552:0;;;;;;;8416:211;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;8416:211:0;;;;;;;;;16684:1113;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;16684:1113:0;;;;;;;;;;;;;6553:93;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6553:93:0;;;;6859:186;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6859:186:0;;;;;-1:-1:-1;;;;;6859:186:0;;;;;8635:366;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;8635:366:0;-1:-1:-1;;;;;8635:366:0;;;;;;;;;;;20219:147;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;20219:147:0;;;;;;;;;7094:361;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7094:361:0;-1:-1:-1;;;;;7094:361:0;;;;;;;;;;;;;;;;6072:25;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6072:25:0;;;;;;;;;-1:-1:-1;;;;;6072:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;13156:587;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;13156:587:0;;;;;;;;;2599:105;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2599:105:0;-1:-1:-1;;;;;2599:105:0;;;;;14723:1245;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;14723:1245:0;;;;;;;;;17876:505;17979:19;18001:17;;;:6;:17;;;;;:26;;17979:19;;18001:17;18019:7;;18001:26;;;;;;;;;;;;;;;;17979:48;;18064:8;18073:9;18064:19;;;;;;;;;;;;;;;;;;;;;;;18116:14;;18064:19;;-1:-1:-1;;;;;;18116:14:0;18102:10;:28;18094:57;;;;;-1:-1:-1;;;;;18094:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;18170:12;;;;;;18186:1;18170:17;18162:48;;;;;-1:-1:-1;;;;;18162:48:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18162:48:0;;;;;;;;;;;;;;;18240:11;;18229:22;;;18221:51;;;;;-1:-1:-1;;;;;18221:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;18283:12;;;:22;;;18321:52;;;;;;;;18354:7;;18343:9;;18331:10;;18321:52;;;;;;;;;;17876:505;;;;;;:::o;19879:103::-;19937:37;;;;;;;;19953:10;;19937:37;;;;;;;;;;19879:103;:::o;20967:107::-;2025:5;;-1:-1:-1;;;;;2025:5:0;2011:10;:19;2003:28;;;;;;21037:9;:29;;-1:-1:-1;;;;;;21037:29:0;-1:-1:-1;;;;;21037:29:0;;;;;;;;;;20967:107::o;6104:38::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6104:38:0;;-1:-1:-1;6104:38:0;;-1:-1:-1;;;;;6104:38:0;;;;;;;;;;;;;;;;;;;;:::o;10368:1842::-;11023:4;10963:31;10997:32;;;:17;:32;;;;;;;;;;11062:59;;-1:-1:-1;;;;;;11092:29:0;;;;;;:17;:29;;;;;;;;11062:59;11040:130;;;;;;;-1:-1:-1;;;;;11040:130:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11187:17:0;;;11183:187;;;11308:16;;11300:58;;;;;-1:-1:-1;;;;;11300:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;11382:6;:17;11389:9;11382:17;;;;;;;;;;;11405:308;;;;;;;;;11633:6;11405:308;;;;11566:11;11405:308;;;;11700:1;11405:308;;;;11602:9;-1:-1:-1;;;;;11405:308:0;;;;;11457:10;-1:-1:-1;;;;;11405:308:0;;;;;11529:10;-1:-1:-1;;;;;11405:308:0;;;;;11666:11;-1:-1:-1;;;;;11405:308:0;;;;;11493:10;11405:308;;;;11434:1;11405:308;;;;;11382:332;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;11382:332:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11382:332:0;;;;;-1:-1:-1;;;;;11382:332:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11382:332:0;;;;;-1:-1:-1;;;;;11382:332:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11382:332:0;;;;;-1:-1:-1;;;;;11382:332:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11382:332:0;;;;;-1:-1:-1;;;;;11382:332:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11739:9;-1:-1:-1;;;;;11731:25:0;11753:3;11731:25;11727:384;;;11802:9;:19;;11794:61;;;;;-1:-1:-1;;;;;11794:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;11727:384;;;11919:9;:14;11911:44;;;;;-1:-1:-1;;;;;11911:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;11996:48;;;-1:-1:-1;;;;;11996:48:0;;12019:10;11996:48;;;;12031:4;11996:48;;;;;;;;;;;;-1:-1:-1;;;;;11996:22:0;;;;;:48;;;;;;;;;;;;;;-1:-1:-1;11996:22:0;:48;;;5:2:-1;;;;30:1;27;20:12;5:2;11996:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11996:48:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11996:48:0;11970:129;;;;;;;-1:-1:-1;;;;;11970:129:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;11970:129:0;;;;;;;;;;;;;;;12164:17;;;;:6;:17;;;;;;;;;:24;12128:74;;;;;;;-1:-1:-1;;12164:26:0;;;;12171:9;;12141:10;;12128:74;;;;;;;;;;10368:1842;;;;;;;;;:::o;20432:469::-;20533:23;20559:8;20568:9;20559:19;;;;;;;;;;;;;;;;;;20597:22;20559:19;;;;;20597:22;;;;20559:19;;-1:-1:-1;;;;;;20597:22:0;20623:10;20597:36;20589:73;;;;;-1:-1:-1;;;;;20589:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;20681:15;;;;:24;-1:-1:-1;20681:24:0;20673:51;;;;;-1:-1:-1;;;;;20673:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;20735:15;;;:24;;;;;;;20778:9;;;:33;;;;;;-1:-1:-1;;;;;20778:33:0;;;;;;;;;;;;;;;;;;:9;;;;;:18;;:33;;;;;;;;;;;;;;;20735:15;20778:9;:33;;;5:2:-1;;;;30:1;27;20:12;5:2;20778:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20778:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20778:33:0;20770:61;;;;;;;-1:-1:-1;;;;;20770:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;20847:46;;;;;;;;20873:9;;-1:-1:-1;;;;;20847:46:0;;;;;;;;;;;;20432:469;;;;;:::o;6230:22::-;;;-1:-1:-1;;;;;6230:22:0;;:::o;16056:586::-;16140:23;16196:19;16166:8;16175:9;16166:19;;;;;;;;;;;;;;;;;;;;16140:45;;16218:6;:17;16225:9;16218:17;;;;;;;;;;;16236:7;16218:26;;;;;;;;;;;;;;;;;;;;;;;16291:11;;;;16218:26;;-1:-1:-1;;;;;;16291:11:0;16277:10;:25;;:57;;-1:-1:-1;16320:14:0;;-1:-1:-1;;;;;16320:14:0;16306:10;:28;16277:57;16255:130;;;;;;;-1:-1:-1;;;;;16255:130:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;16404:12;;;;;;16420:1;16404:17;16396:48;;;;;-1:-1:-1;;;;;16396:48:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16396:48:0;;;;;;;;;;;;;;;16470:15;;;;16463:3;:22;;16455:52;;;;;-1:-1:-1;;;;;16455:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;16518:12;;;:16;;-1:-1:-1;;16518:16:0;16533:1;16518:16;;;16578:56;;;;;;;;16615:7;;16604:9;;16592:10;;16578:56;;;;;;;;;;16056:586;;;;;:::o;2317:114::-;2025:5;;-1:-1:-1;;;;;2025:5:0;2011:10;:19;2003:28;;;;;;2394:5;;;2375:25;;-1:-1:-1;;;;;2394:5:0;;;;2375:25;;;2423:1;2407:18;;-1:-1:-1;;;;;;2407:18:0;;;2317:114::o;21156:184::-;2025:5;;-1:-1:-1;;;;;2025:5:0;2011:10;:19;2003:28;;;;;;-1:-1:-1;;;;;21244:29:0;;;;;;:17;:29;;;;;;;;;:36;;-1:-1:-1;;21244:36:0;21276:4;21244:36;;;21296;;;;;;;;;;;;;;;;;21156:184;;:::o;13809:839::-;13915:19;13937:17;;;:6;:17;;;;;:26;;13955:7;;13937:26;;;;;;;;;;;;;;;;;;;13996:11;;;;13937:26;;-1:-1:-1;;;;;;13996:11:0;13982:10;:25;13974:53;;;;;-1:-1:-1;;;;;13974:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14046:12;;;;;;14062:1;14046:17;14038:48;;;;;-1:-1:-1;;;;;14038:48:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14038:48:0;;;;;;;;;;;;;;;14097:21;;;;;;14141:14;;;;-1:-1:-1;;;;;14141:14:0;14133:30;14129:438;;;14227:9;:19;;14201:102;;;;;-1:-1:-1;;;;;14201:102:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14129:438;;;14367:9;:14;14359:47;;;;;-1:-1:-1;;;;;14359:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14447:14;;;;:53;;;-1:-1:-1;;;;;14447:53:0;;14475:10;14447:53;;;;14487:4;14447:53;;;;;;;;;;;;-1:-1:-1;;;;;14447:14:0;;;;:27;;:53;;;;;;;;;;;;;;;:14;;:53;;;5:2:-1;;;;30:1;27;20:12;5:2;14447:53:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14447:53:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14447:53:0;14421:134;;;;;;;-1:-1:-1;;;;;14421:134:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14421:134:0;;;;;;;;;;;;;;;14582:58;;;;;;;;14621:7;;14610:9;;14598:10;;14582:58;;;;;;;;;;13809:839;;;;;:::o;1522:20::-;;;-1:-1:-1;;;;;1522:20:0;;:::o;6701:114::-;6759:4;6783:17;;;:6;:17;;;;;:24;;6701:114::o;6172:49::-;;;;;;;;;;;;;;;:::o;20038:126::-;20112:44;;;;;;;;20136:9;;20124:10;;20112:44;;;;;;;;;20038:126;;:::o;12252:819::-;12340:23;12396:19;12366:8;12375:9;12366:19;;;;;;;;;;;;;;;;;;;;12340:45;;12418:6;:17;12425:9;12418:17;;;;;;;;;;;12436:7;12418:26;;;;;;;;;;;;;;;;;;12477:14;;12418:26;;;;;;-1:-1:-1;;;;;;12477:14:0;12463:10;:28;12455:59;;;;;-1:-1:-1;;;;;12455:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;12533:12;;;;;;;:17;12525:47;;;;;-1:-1:-1;;;;;12525:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;12624:16;;;;;12605:15;;;;:35;;12583:114;;;;;-1:-1:-1;;;;;12583:114:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;12730:10;12712:5;:15;;;:28;12708:132;;;12813:15;;;;;12807:3;:21;12789:39;;12708:132;12869:16;;;;;12850:15;;;:35;;;;;;;;12948:12;;;:16;;-1:-1:-1;;12948:16:0;12963:1;12948:16;;;13007:56;;;;;;;;13044:7;;13033:9;;13021:10;;13007:56;;;;;;;;;;12252:819;;;;;:::o;21394:189::-;2025:5;;-1:-1:-1;;;;;2025:5:0;2011:10;:19;2003:28;;;;;;-1:-1:-1;;;;;21492:29:0;;;;;;:17;:29;;;;;;;;;21485:36;;-1:-1:-1;;21485:36:0;;;21537:38;;;;;;;;;;;;;;;;;21394:189;;:::o;9776:552::-;9871:23;10056:12;9897:8;9906:9;9897:19;;;;;;;;;;;;;;;;;;;;;;;9949:22;;;;9897:19;;-1:-1:-1;;;;;;9949:22:0;9935:10;:36;9927:71;;;;;-1:-1:-1;;;;;9927:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10017:14:0;;;;10009:36;;;;;-1:-1:-1;;;;;10009:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10071:15:0;;;;;10115:1;10097:19;;;;10175:9;;;:36;;;;;;-1:-1:-1;;;;;10175:36:0;;;;;;;;;;;;;;;;;;10071:15;;10175:9;;;;;:18;;:36;;;;;;;;;;;;;;;;;;:9;:36;;;5:2:-1;;;;30:1;27;20:12;5:2;10175:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10175:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10175:36:0;10167:64;;;;;;;-1:-1:-1;;;;;10167:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10273:47;;;;;;;;10299:9;;-1:-1:-1;;;;;10273:47:0;;;;;;;;;;;;9776:552;;;;;:::o;8416:211::-;8551:68;8566:10;8578:9;8589;8600:18;8551:14;:68::i;:::-;8416:211;;;:::o;16684:1113::-;16910:23;16966:18;;:::i;:::-;16936:8;:19;;16945:9;;16936:19;;;;;;;;;;;;;;;;16910:45;;16987:6;:17;16994:9;16987:17;;;;;;;;;;;17005:7;16987:26;;;;;;;;;;;;;;;;;;;16966:47;;;;;;;;16987:26;;;;;;;16966:47;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16966:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17032:10:0;:30;17024:61;;;;;-1:-1:-1;;;;;17024:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;17104:5;:12;;;:17;;17120:1;17104:17;17096:48;;;;;;;-1:-1:-1;;;;;17096:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;17174:11;;17163:22;;;17155:50;;;;;-1:-1:-1;;;;;17155:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;17223:17;;;;:6;:17;;;;;:26;;17241:7;;17223:26;;;;;;;;;;;;;;;;;;17216:33;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;17216:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17216:33:0;;;17264:11;;;:16;17260:209;;;17297:48;17311:5;:15;;;17328:5;:16;;;17297:13;:48::i;:::-;17260:209;;;17441:16;;;;17410:8;:19;;17419:9;;17410:19;;;;;;;;;;;;;;:27;:19;;;;;:27;:47;;;;;;;17260:209;17483:7;17493:1;17483:11;17498:1;17483:16;17479:226;;;17516:53;17528:5;:11;;;17541:5;:14;;;17557:5;:11;;;17516;:53::i;:::-;17479:226;;;17613:14;;17629:11;;;;17642:14;;;;17658:11;;17603:76;;-1:-1:-1;;;;;17613:14:0;;17629:11;17642:14;17671:7;17603:9;:76::i;:::-;17732:16;;;;17720:69;;;;;;;;;;;;;;17761:7;;17750:9;;-1:-1:-1;;;;;17720:69:0;;;;;;;;;;;;;;;16684:1113;;;;;;;:::o;6553:93::-;6623:8;:15;6553:93;:::o;6859:186::-;6973:64;6988:10;7000:9;7011:8;7021:15;6973:14;:64::i;8635:366::-;8865:9;;8813:4;;-1:-1:-1;;;;;8865:9:0;8843:10;:32;8835:60;;;;;-1:-1:-1;;;;;8835:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;8906:65;8921:7;8930:9;8941;8952:18;8906:14;:65::i;:::-;-1:-1:-1;8989:4:0;8635:366;;;;;;:::o;20219:147::-;20307:51;;;;;;;;20340:7;;20329:9;;20317:10;;20307:51;;;;;;;;;;20219:147;;;:::o;7094:361::-;7323:9;;7271:4;;-1:-1:-1;;;;;7323:9:0;7301:10;:32;7293:60;;;;;-1:-1:-1;;;;;7293:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;7364:61;7379:7;7388:9;7399:8;7409:15;7364:14;:61::i;6072:25::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6072:25:0;;;;-1:-1:-1;6072:25:0;;:::o;13156:587::-;13246:23;13302:18;;:::i;:::-;13272:8;:19;;13281:9;;13272:19;;;;;;;;;;;;;;;;13246:45;;13323:6;:17;13330:9;13323:17;;;;;;;;;;;13341:7;13323:26;;;;;;;;;;;;;;;;;;;13302:47;;;;;;;;13323:26;;;;;;;13302:47;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13302:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13382:10:0;:25;;:57;;-1:-1:-1;13425:14:0;;-1:-1:-1;;;;;13425:14:0;13411:10;:28;13382:57;13360:136;;;;;;;-1:-1:-1;;;;;13360:136:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;13515:5;:12;;;:17;;13531:1;13515:17;13507:47;;;;;;;-1:-1:-1;;;;;13507:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;13572:17;;;;:6;:17;;;;;:26;;13590:7;;13572:26;;;;;;;;;;;;;;;;;;13565:33;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;13565:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13565:33:0;;;13621:11;;;;13634:14;;;;13650:11;;13609:53;;13621:11;13634:14;13609:11;:53::i;:::-;13678:57;;;;;;;;13716:7;;13705:9;;13693:10;;13678:57;;;;;;;;;;13156:587;;;;;:::o;2599:105::-;2025:5;;-1:-1:-1;;;;;2025:5:0;2011:10;:19;2003:28;;;;;;2669:29;2688:9;2669:18;:29::i;:::-;2599:105;:::o;14723:1245::-;14808:23;14864:18;;:::i;:::-;14834:8;:19;;14843:9;;14834:19;;;;;;;;;;;;;;;;14808:45;;14885:6;:17;14892:9;14885:17;;;;;;;;;;;14903:7;14885:26;;;;;;;;;;;;;;;;;;;14864:47;;;;;;;;14885:26;;;;;;;14864:47;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14864:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14926:3:0;:22;14922:477;;15059:11;;;;-1:-1:-1;;;;;15045:25:0;:10;:25;15019:110;;;;;-1:-1:-1;;;;;15019:110:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14922:477;;;15279:5;:11;;;-1:-1:-1;;;;;15265:25:0;:10;-1:-1:-1;;;;;15265:25:0;;:57;;;-1:-1:-1;15308:14:0;;-1:-1:-1;;;;;15308:14:0;15294:10;:28;15265:57;15239:148;;;;;;;-1:-1:-1;;;;;15239:148:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15417:5;:12;;;:17;;15433:1;15417:17;15409:48;;;;;;;-1:-1:-1;;;;;15409:48:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15409:48:0;;;;;;;;;;;;;;;15475:17;;;;:6;:17;;;;;:26;;15493:7;;15475:26;;;;;;;;;;;;;;;;;;;15468:33;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15468:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;15468:33:0;;;15532:11;;;;-1:-1:-1;;;;;15518:25:0;:10;:25;15514:264;;15579:16;;;;15560:15;;;:35;;;;;;;15514:264;;;15718:48;15732:5;:15;;;15749:5;:16;;;15718:13;:48::i;:::-;15800:14;;15816:11;;;;15829:14;;;;15845:11;;15858:12;;;;15790:81;;-1:-1:-1;;;;;15800:14:0;;15816:11;15829:14;15845:11;15790:9;:81::i;:::-;15903:57;;;;;;;;15941:7;;15930:9;;15918:10;;15903:57;;;;;;;;;;14723:1245;;;;;:::o;9009:663::-;9227:23;9253:8;9262:9;9253:19;;;;;;;;;;;;;;;;;;;;;;;9291:14;;9253:19;;-1:-1:-1;;;;;;9291:25:0;;;:14;;:25;9283:54;;;;;-1:-1:-1;;;;;9283:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;9375:1;9354:18;:22;9350:245;;;9393:15;;;:37;;;;;;9471:9;;;:57;;;-1:-1:-1;;;;;9471:57:0;;-1:-1:-1;;;;;9471:57:0;;;;;;;;;;9503:4;9471:57;;;;;;;;;;;;:9;;;;;:22;;:57;;;;;;;;;;;;;;;9393:15;9471:9;:57;;;5:2:-1;;;;30:1;27;20:12;5:2;9471:57:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9471:57:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9471:57:0;9445:138;;;;;;;-1:-1:-1;;;;;9445:138:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9445:138:0;;;;;;;;;;;;;;;9627:14;;9612:52;;;;;;;;9643:9;;-1:-1:-1;;;;;9627:14:0;;9612:52;;;;;;;;;;9009:663;;;;;:::o;19554:263::-;-1:-1:-1;;;;;19636:16:0;;;19632:178;;19695:9;;;:41;;;;;;-1:-1:-1;;;;;19695:41:0;;;;;;;;;;;;;;;;;;:9;;;;;:18;;:41;;;;;;;;;;;;;;;:9;;:41;;;5:2:-1;;;;30:1;27;20:12;5:2;19695:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19695:41:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19695:41:0;19669:129;;;;;;;-1:-1:-1;;;;;19669:129:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19554:263;;:::o;18507:333::-;-1:-1:-1;;;;;18594:24:0;;;18590:243;;;18643:17;;-1:-1:-1;;;;;18643:10:0;;;:17;;;;;18654:5;;18643:17;;;;18654:5;18643:10;:17;;;;;;;18635:47;;;;;;;-1:-1:-1;;;;;18635:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;18590:243;;;18741:8;-1:-1:-1;;;;;18741:17:0;;18759:5;18766;18741:31;;;;;-1:-1:-1;;;18741:31:0;;;;;;;-1:-1:-1;;;;;18741:31:0;-1:-1:-1;;;;;18741:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18741:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18741:31:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18741:31:0;18715:106;;;;;;;-1:-1:-1;;;;;18715:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;18888:617;19021:24;;;-1:-1:-1;;;;;19062:24:0;;;19058:440;;;19111:23;;-1:-1:-1;;;;;19111:10:0;;;:23;;;;;19122:11;;19111:23;;;;19122:11;19111:10;:23;;;;;;;19103:53;;;;;;;-1:-1:-1;;;;;19103:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19179:18;;-1:-1:-1;;;;;19179:11:0;;;:18;;;;;19191:5;;19179:18;;;;19191:5;19179:11;:18;;;;;;;19171:46;;;;;;;-1:-1:-1;;;;;19171:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19058:440;;;19276:8;-1:-1:-1;;;;;19276:17:0;;19294:5;19301:11;19276:37;;;;;-1:-1:-1;;;19276:37:0;;;;;;;-1:-1:-1;;;;;19276:37:0;-1:-1:-1;;;;;19276:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19276:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19276:37:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19276:37:0;19250:112;;;;;;;-1:-1:-1;;;;;19250:112:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19403:8;-1:-1:-1;;;;;19403:17:0;;19421:6;19429:5;19403:32;;;;;-1:-1:-1;;;19403:32:0;;;;;;;-1:-1:-1;;;;;19403:32:0;-1:-1:-1;;;;;19403:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19403:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19403:32:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19403:32:0;19377:109;;;;;;;-1:-1:-1;;;;;19377:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;18888:617;;;;;;:::o;7479:893::-;-1:-1:-1;;;;;7873:22:0;;;;7865:62;;;;;-1:-1:-1;;;;;7865:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;7954:128;;;;;;;;-1:-1:-1;;;;;7954:128:0;;;;;;;;;;;;;;;;;;;;7940:8;27:10:-1;;23:18;;;45:23;;-1:-1;7940:143:0;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;7940:143:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8100:12;;8096:198;;;8155:9;;;:47;;;-1:-1:-1;;;;;8155:47:0;;-1:-1:-1;;;;;8155:47:0;;;;;;;;;;8187:4;8155:47;;;;;;;;;;;;:9;;;;;:22;;:47;;;;;;;;;;;;;;;:9;;:47;;;5:2:-1;;;;30:1;27;20:12;5:2;8155:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8155:47:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8155:47:0;8129:153;;;;;;;-1:-1:-1;;;;;8129:153:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8129:153:0;;;;;;;;;;;;;;;8351:1;8333:15;8309:55;;;;;;;;-1:-1:-1;;8333:19:0;;;;-1:-1:-1;;;;;8309:55:0;;;;;;;;;;;;;7479:893;;;;:::o;2845:175::-;-1:-1:-1;;;;;2916:23:0;;;;2908:32;;;;;;2973:5;;;2952:38;;-1:-1:-1;;;;;2952:38:0;;;;2973:5;;;2952:38;;;2997:5;:17;;-1:-1:-1;;;;;;2997:17:0;-1:-1:-1;;;;;2997:17:0;;;;;;;;;;2845:175::o;3383:18203::-;;;;;;;;;-1:-1:-1;3383:18203:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

bzzr://7a46bb4eab2446f6310429368a6aca7cd68db18cb7c8888777f1ec503f43101f
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.