Contract Overview
Balance: 1 Ether
Ether Value: $174.00 (@ $174.00/ETH)
Transactions: 3834 txns
Misc:
Address Watch: Add To Watch List
Contract Creator: 0x0e31697fe39695801ad6b6047ca4995aa2bf38d6at txn 0xe228917e66cb1be3d5aeb80a8af8efdcd87d79e7c3e4e0e95a90f38c86654c98
Token Balance:
 Latest 25 transactions from a total of 3834 transactions

TxHash Age From To Value [TxFee]
0x5936863075821c486c38616062faedeb04b0644664d21f493cae6489b427abc520 days 10 hrs ago0x21051b5327b571fddf90760205b629f0f3d35038  IN   0x25df2edc10a16f05e579d127a902cac6fdff940e0 Ether0.0000904215
0xd278fba9affc1b7683d4c7075859524643709336ace9929c13007d8ab4bce3f921 days 12 hrs ago0xd001065ef856157317c79bd3cc91186ba64e1c98  IN   0x25df2edc10a16f05e579d127a902cac6fdff940e0 Ether0.000072216
0x838d16d09397b6fd1d60fe9095798d722a722e3107c8159a3a27e1e1d7a4103e21 days 12 hrs ago0xd001065ef856157317c79bd3cc91186ba64e1c98  IN   0x25df2edc10a16f05e579d127a902cac6fdff940e0 Ether0.0000349044
0x466682e17315bd19fd4960765827b6ce336de44a65e2cb1282806c4dffec0fdc29 days 4 hrs ago0x50dd79e607ad8dd96c8b8da742922c334b2de15a  IN   0x25df2edc10a16f05e579d127a902cac6fdff940e0.1 Ether0.00044308
0x16e51c0c471618091bb769410e3c56e60a6ed79ee57c42370632b65b03d7f42b29 days 4 hrs ago0x50dd79e607ad8dd96c8b8da742922c334b2de15a  IN   0x25df2edc10a16f05e579d127a902cac6fdff940e0.1 Ether0.00044308
0x45c87dc5748b8fc6a83ae27862f4daf5dabcd5dc3f4705bc9e9cf54b03ec3de429 days 4 hrs ago0x50dd79e607ad8dd96c8b8da742922c334b2de15a  IN   0x25df2edc10a16f05e579d127a902cac6fdff940e0.1 Ether0.00044308
0x175496707579d23e3e190b5be55fef0547e342b27b29421f6199fe2e2447be4229 days 23 hrs ago0xf5a5b477e685a1f423e6c24070e62747371b1e2c  IN   0x25df2edc10a16f05e579d127a902cac6fdff940e0 Ether0.000010553118
0x2ba02d1832fbecd07e4b62766b203a752dcd96028dcf5510f58a53787aa10cb033 days 43 mins ago0xd001065ef856157317c79bd3cc91186ba64e1c98  IN   0x25df2edc10a16f05e579d127a902cac6fdff940e0.05 Ether0.000127146
0xa4ad1cac54eb2c8515dd2b17899b3f25c491e0eb03d633a6a74f397797f52a1534 days 15 hrs ago0xd9bdfb32b04e3df59bc43d55ffd20fc52b20320f  IN   0x25df2edc10a16f05e579d127a902cac6fdff940e0 Ether0.000021191
0xdf47405656ad6d89c3674b2acc6aaa8ba108d5ba9dd8687df3e9dafef719915035 days 20 hrs ago0x21051b5327b571fddf90760205b629f0f3d35038  IN   0x25df2edc10a16f05e579d127a902cac6fdff940e0 Ether0.000111288
0x753706f6fddf18c84ce108f785b4bb83c8c2b6aaa0bff7735b4524947b2b477535 days 20 hrs ago0x21051b5327b571fddf90760205b629f0f3d35038  IN   0x25df2edc10a16f05e579d127a902cac6fdff940e0 Ether0.000101124
0x8e142e7d9b657124b9cae111ddf09ca35c9728da568a0ea7819589a941b7e47735 days 20 hrs ago0x21051b5327b571fddf90760205b629f0f3d35038  IN   0x25df2edc10a16f05e579d127a902cac6fdff940e0 Ether0.000111288
0x1744118b2494c5e10a0069d4d5fa872e9482cb573483f22e10816ec01d631d5b35 days 20 hrs ago0x21051b5327b571fddf90760205b629f0f3d35038  IN   0x25df2edc10a16f05e579d127a902cac6fdff940e0 Ether0.000111288
0xb91070aaff0a0d27938be1851da2fbf788c82fff9621c0f7acd3e4306ac8ef9835 days 20 hrs ago0x21051b5327b571fddf90760205b629f0f3d35038  IN   0x25df2edc10a16f05e579d127a902cac6fdff940e0 Ether0.00011116
0x40775ca31fb629fe84724d95e7e6e0e808df36df7818f9b88453df300e1a0da935 days 20 hrs ago0x21051b5327b571fddf90760205b629f0f3d35038  IN   0x25df2edc10a16f05e579d127a902cac6fdff940e0 Ether0.000111288
0xe8a53029578c8bea8610a8aa02ca71534399e4b23fb18ee1754da249e982441035 days 20 hrs ago0x21051b5327b571fddf90760205b629f0f3d35038  IN   0x25df2edc10a16f05e579d127a902cac6fdff940e0 Ether0.000111288
0xee9806d6237dd90e6fde0fb39ebbb26cf7d1b3b1b6d68b7c9f2d7933ccdc827735 days 20 hrs ago0x21051b5327b571fddf90760205b629f0f3d35038  IN   0x25df2edc10a16f05e579d127a902cac6fdff940e0 Ether0.000111288
0x6282f38d9f5adeb0988289967943f2debbcb20f08eb523d9907b03e224106c5035 days 20 hrs ago0x21051b5327b571fddf90760205b629f0f3d35038  IN   0x25df2edc10a16f05e579d127a902cac6fdff940e0 Ether0.000111288
0x1918718e9c4956dc9cffd7ec93888c776e8aa7b57838a8775c3b05cf3efe386b35 days 20 hrs ago0x21051b5327b571fddf90760205b629f0f3d35038  IN   0x25df2edc10a16f05e579d127a902cac6fdff940e0 Ether0.000111288
0xab1c2bebd58df0a07847a8fe3a55818455745c68b1dce25479ede91f5b1ee3dd35 days 20 hrs ago0x21051b5327b571fddf90760205b629f0f3d35038  IN   0x25df2edc10a16f05e579d127a902cac6fdff940e0 Ether0.000111288
0xf07191c1a6079babf1cd904ae0b588f46aaa79d1b83a198e34dd55476c21ca8c35 days 20 hrs ago0x21051b5327b571fddf90760205b629f0f3d35038  IN   0x25df2edc10a16f05e579d127a902cac6fdff940e0 Ether0.000111288
0xd3c6938e3b226137ed124899c057fa7d0454c708ceeee0644741502d908659e935 days 20 hrs ago0x21051b5327b571fddf90760205b629f0f3d35038  IN   0x25df2edc10a16f05e579d127a902cac6fdff940e0 Ether0.000111288
0x1ec3d3ea2e5e912f5e5c9e4f6bd821008bae4290a4d9a9cb4612083004f5bad435 days 20 hrs ago0x21051b5327b571fddf90760205b629f0f3d35038  IN   0x25df2edc10a16f05e579d127a902cac6fdff940e0 Ether0.000111288
0xf684cfbd3e7e1be0a32f45d5b2d370705f88f4cb7b268b45a8bed2c9ca62527535 days 20 hrs ago0x21051b5327b571fddf90760205b629f0f3d35038  IN   0x25df2edc10a16f05e579d127a902cac6fdff940e0 Ether0.000111288
0x29af6a8aa419cbe0c48234c60ccad56de720c35d00d53ddeae60f1b982040ef435 days 20 hrs ago0x21051b5327b571fddf90760205b629f0f3d35038  IN   0x25df2edc10a16f05e579d127a902cac6fdff940e0 Ether0.000111288
[ Download CSV Export  ] 
 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
0x5936863075821c486c38616062faedeb04b0644664d21f493cae6489b427abc5659927120 days 10 hrs ago0x25df2edc10a16f05e579d127a902cac6fdff940e0xf22ab8244701e0ff3606b78e215e7ec098641c240.4 Ether
0xdf47405656ad6d89c3674b2acc6aaa8ba108d5ba9dd8687df3e9dafef7199150650492935 days 20 hrs ago0x25df2edc10a16f05e579d127a902cac6fdff940e0xf9038748140d98ddebf158816a7e441b2295a1c60.32 Ether
0x8e142e7d9b657124b9cae111ddf09ca35c9728da568a0ea7819589a941b7e477650492935 days 20 hrs ago0x25df2edc10a16f05e579d127a902cac6fdff940e0xf1ac8e42878670295847338a58ba89a8b5d866360.1 Ether
0x1744118b2494c5e10a0069d4d5fa872e9482cb573483f22e10816ec01d631d5b650492935 days 20 hrs ago0x25df2edc10a16f05e579d127a902cac6fdff940e0xea24c2ea1c1a07f485b3c113e4a22e2c6f47d0290.1 Ether
0xb91070aaff0a0d27938be1851da2fbf788c82fff9621c0f7acd3e4306ac8ef98650492935 days 20 hrs ago0x25df2edc10a16f05e579d127a902cac6fdff940e0xe8ff0067af4ab8ee448f1a2d19aed42cd868a7200.10481343 Ether
0x40775ca31fb629fe84724d95e7e6e0e808df36df7818f9b88453df300e1a0da9650492935 days 20 hrs ago0x25df2edc10a16f05e579d127a902cac6fdff940e0xe8754d61253583b7d99661717e836072308bff480.5 Ether
0xe8a53029578c8bea8610a8aa02ca71534399e4b23fb18ee1754da249e9824410650492935 days 20 hrs ago0x25df2edc10a16f05e579d127a902cac6fdff940e0xe5e143707d2d50a22fc263469cebe8c99831d4770.1 Ether
0xee9806d6237dd90e6fde0fb39ebbb26cf7d1b3b1b6d68b7c9f2d7933ccdc8277650491735 days 20 hrs ago0x25df2edc10a16f05e579d127a902cac6fdff940e0xe25cf26f1e798bbaef6c1fc699f87ac10bb41c6f0.63 Ether
0x6282f38d9f5adeb0988289967943f2debbcb20f08eb523d9907b03e224106c50650491735 days 20 hrs ago0x25df2edc10a16f05e579d127a902cac6fdff940e0xe136f1741d65317a7fb0227a0367677b454f0d540.1 Ether
0x1918718e9c4956dc9cffd7ec93888c776e8aa7b57838a8775c3b05cf3efe386b650491735 days 20 hrs ago0x25df2edc10a16f05e579d127a902cac6fdff940e0xdddc2b6ac555bd3f6c2e07d0504155c4b619a87a0.15 Ether
0xab1c2bebd58df0a07847a8fe3a55818455745c68b1dce25479ede91f5b1ee3dd650491535 days 20 hrs ago0x25df2edc10a16f05e579d127a902cac6fdff940e0xdd947f0793087c1aba2968a65dbee0f7a0a8a01b0.1 Ether
0xf07191c1a6079babf1cd904ae0b588f46aaa79d1b83a198e34dd55476c21ca8c650491435 days 20 hrs ago0x25df2edc10a16f05e579d127a902cac6fdff940e0xdbafe35b32a037e4854ab192a9552cfc14d6ce0d0.2 Ether
0xd3c6938e3b226137ed124899c057fa7d0454c708ceeee0644741502d908659e9650491135 days 20 hrs ago0x25df2edc10a16f05e579d127a902cac6fdff940e0xd5902064550a3d1f7ce81cf7cb8adc37dd0850d81.553271188 Ether
0x1ec3d3ea2e5e912f5e5c9e4f6bd821008bae4290a4d9a9cb4612083004f5bad4650490935 days 20 hrs ago0x25df2edc10a16f05e579d127a902cac6fdff940e0xcd1fd2bd04d705bcbba0e63ba84a807e1bf23e1e1.24 Ether
0xf684cfbd3e7e1be0a32f45d5b2d370705f88f4cb7b268b45a8bed2c9ca625275650490635 days 20 hrs ago0x25df2edc10a16f05e579d127a902cac6fdff940e0xca1b973a6107e29bffde3287d93ce2f84b3b126d0.102 Ether
0x29af6a8aa419cbe0c48234c60ccad56de720c35d00d53ddeae60f1b982040ef4650490635 days 20 hrs ago0x25df2edc10a16f05e579d127a902cac6fdff940e0xc824c462c9d2ecb54f94e9def64533827413e70c5 Ether
0xa3d1a797fc07c89d4598853c671791fb50357076d4209f4f691c36b96224d08f650490435 days 20 hrs ago0x25df2edc10a16f05e579d127a902cac6fdff940e0xc3f39542e544fd3df66b04ab6cf742d07b54d17b0.2 Ether
0x62c2d33263b2ecf7e21e001ca149e71bb41f76c99c0d0f8a70264462f1c15aa5650490435 days 20 hrs ago0x25df2edc10a16f05e579d127a902cac6fdff940e0xc35dc14802404f8ec4eb5fe285119f188724d12b0.170499802162532358 Ether
0x8911fbbf378e713635f77abc348f36c90f58245a4f7ba06719b801ea42ef8b0f650490035 days 20 hrs ago0x25df2edc10a16f05e579d127a902cac6fdff940e0xc31ce182790804d1c37c9e3f3f89ca6128152ce00.1 Ether
0x4e2eb46b8fab56af081b117877065ddc4a962c2507c204e99eecd41f9daa8428650489635 days 20 hrs ago0x25df2edc10a16f05e579d127a902cac6fdff940e0xc25e3467c81da240c607b564d148def2fcddd8930.13 Ether
0xcf444678dab86c4b3956919f2723862fe8b4e86eb8a9b1fb5cbf31d672b8ed56650489635 days 20 hrs ago0x25df2edc10a16f05e579d127a902cac6fdff940e0xbf6b7376d0cdedf2bb62f7111fb1d6341cbfb6760.1 Ether
0xf8bf6afa595b642e3b9d2110e788cfec299348d839e6b3e562c930a75a9f0ab7650489435 days 20 hrs ago0x25df2edc10a16f05e579d127a902cac6fdff940e0xbe5dfc95abee1ee783c8c189a1811e37505b462e0.2 Ether
0x3a16fc390ea5822dc500ec87389f3fc263bf1ea4bf166a16a0741ef66c2b3f2a650489435 days 20 hrs ago0x25df2edc10a16f05e579d127a902cac6fdff940e0xbdb8b1cb799ab5a798a116e183917a011086343a2.1 Ether
0x0ce57594f1c9c5fcea45553d0d290372139d5b7a9e378bbb583f3b2fd43f5045650489435 days 20 hrs ago0x25df2edc10a16f05e579d127a902cac6fdff940e0xba72ea2c4a33f602121758e1ba7d73d88e10c6e60.1 Ether
0x7d86c27f158ce917c54df4d846267786f14c71a9c485de7eced5594717c9280c650489235 days 20 hrs ago0x25df2edc10a16f05e579d127a902cac6fdff940e0xb50d0c4cb2c29cc232c96a59e9c65eb82914ec750.2 Ether
[ Download CSV Export  ] 
Warning: The Compiled Contract might be susceptible to ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity), NestedArrayFunctionCallDecoder (medium-severity) SolidityCompiler Bugs.

Contract Source Code Verified (Exact Match)
Contract Name: Sale
Compiler Text: v0.4.18+commit.9cf6e910
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

/*

The Sale contract manages a token sale.

The Sale contract primarily does the following:

	- allows individuals to buy tokens during a token sale
	- allows individuals to claim the tokens after a successful token sale
	- allows individuals to receive an ETH refund after a cancelled token sale
	- allows an admin to cancel a token sale, after which individuals can request refunds
	- allows an admin to certify a token sale, after which an admin can withdraw contributed ETH
	- allows an admin to complete a token sale, after which an individual (following a brief release period) can request their tokens
	- allows an admin to return contributed ETH to individuals
	- allows an admin to grant tokens to an individual
	- allows an admin to withdraw ETH from the token sale
	- allows an admin to add and remove individuals from a whitelist
	- allows an admin to pause or activate the token sale
	
The sale runs from a start timestamp to a finish timestamp.  After the release timestamp (assuming a successful sale), individuals can claim their tokens.  If the sale is cancelled, individuals can request a refund.  Furthermore, an admin may return ETH and negate purchases to respective individuals as deemed necessary.  Once the sale is certified or completed, ETH can be withdrawn by the company.

The contract creator appoints a delegate to perform most administrative tasks.

All events are logged for the purpose of transparency.

All math uses SafeMath.

ETH and tokens (often referred to as "value" and "tokens" in variable names) are really 1/10^18 of their respective parent units.  Basically, the values represent wei and the token equivalent thereof.

*/

pragma solidity ^0.4.18;

contract SafeMath {
    function safeMul(uint a, uint b) internal returns (uint) {
        uint c = a * b;
        assert(a == 0 || c / a == b);
        return c;
    }

    function safeDiv(uint a, uint b) internal returns (uint) {
        assert(b > 0);
        uint c = a / b;
        assert(a == b * c + a % b);
        return c;
    }

    function safeSub(uint a, uint b) internal returns (uint) {
        assert(b <= a);
        return a - b;
    }

    function safeAdd(uint a, uint b) internal returns (uint) {
        uint c = a + b;
        assert(c>=a && c>=b);
        return c;
    }
}

contract SaleCallbackInterface {
    function handleSaleCompletionCallback(uint256 _tokens) external payable returns (bool);
    function handleSaleClaimCallback(address _recipient, uint256 _tokens) external returns (bool);  
}

contract Sale is SafeMath {
    
    address public creator;		    // address of the contract's creator
    address public delegate;		// address of an entity allowed to perform administrative functions on behalf of the creator
    
    address public marketplace;	    // address of another smart contract that manages the token and Smart Exchange
    
    uint256 public start;			// timestamp that the sale begins
    uint256 public finish;			// timestamp that the sale ends
    uint256 public release;			// timestamp that sale participants may "claim" their tokens (will be after the finish)
    
    uint256 public pricer;			// a multiplier (>= 1) used to determine how many tokens (or, really, 10^18 sub-units of that token) to give purchasers
    uint256 public size;			// maximum number of 10^18 sub-units of tokens that can be purchased/granted during the sale
    
    bool public restricted;		    // whether purchasers and recipients of tokens must be whitelisted manually prior to participating in the sale

    bool public active;			    // whether individuals are allowed to purchase tokens -- if false, they cannot.  if true, they can or cannot.  
    								// other factors, like start/finish, size, and others can restrict participation as well, even if active = true.
    								// this also can remain true indefinitely, even if the token sale has been cancelled or has completed.
    								
    
    int8 public progress;			// -1 = token sale cancelled, 0 = token sale ongoing, 1 = token sale certified (can withdraw ETH while sale is live), 2 = token sale completed
    
    uint256 public tokens;			// number of sub-tokens that have been purchased/granted during the sale.  purchases/grants can be reversed while progress = 0 || progress = 1 resulting in tokens going down
    uint256 public value;			// number of sub-ether (wei) that have been contributed during the sale.  purchases can be resversed while progress = 0 || progress = 1 resulting in value going down
    
    uint256 public withdrawls;		// the number of sub-ether (wei) that have been withdrawn by the contract owner
    uint256 public reserves;		// the number of sub-ether (wei) that have been sent to serve as reserve in the marketplace
    
    mapping(address => bool) public participants;			// mapping to record who has participated in the sale (purchased/granted)
    address[] public participantIndex;						// index of participants
    
    mapping(address => uint256) public participantTokens;	// sub-tokens purchased/granted to each participant
    mapping(address => uint256) public participantValues;	// sub-ether contributed by each participant
    
    mapping(address => bool) public participantRefunds;	    // mapping to record who has been awarded a refund after a cancelled sale
    mapping(address => bool) public participantClaims;		// mapping to record who has claimed their tokens after a completed sale
    
    mapping(address => bool) public whitelist;				// mapping to record who has been approved to participate in a "restricted" sale
    
    uint256[] public bonuses;								// stores bonus percentages, where even numbered elements store timestamps and odd numbered elements store bonus percentages
    
    bool public mutable;									// whether certain properties (like finish and release) of the sale can be updated to increase the liklihood of a successful token sale for all parties involved
    
    modifier ifCreator { require(msg.sender == creator); _; }		// if the caller created the contract...
    modifier ifDelegate { require(msg.sender == delegate); _; }		// if the caller is currently the appointed delegate...
    modifier ifMutable { require(mutable); _; }						// if the certain properties of the sale can be changed....
    
    event Created();																						// the contract was created
    event Bought(address indexed _buyer, address indexed _recipient, uint256 _tokens, uint256 _value);		// an individual bought tokens
    event Claimed(address indexed _recipient, uint256 _tokens);												// an individual claimed tokens after the completion of the sale and after tokens were scheduled for release
    event Refunded(address indexed _recipient, uint256 _value);												// an individual requested a refund of the ETH they contributed after a cancelled token sale
    event Reversed(address indexed _recipient, uint256 _tokens, uint256 _value);							// an individual was sent the ETH they contributed to the sale and will not receive tokens
    event Granted(address indexed _recipient, uint256 _tokens);												// an individual was granted tokens, without contributing ETH
    event Withdrew(address _recipient, uint256 _value);														// the contract creator withdrew ETH from the token sale
    event Completed(uint256 _tokens, uint256 _value, uint256 _reserves);									// the contract creator signaled that the sale completed successfuly
    event Certified(uint256 _tokens, uint256 _value);														// the contract creator certified the sale
    event Cancelled(uint256 _tokens, uint256 _value);														// the contract creator cancelled the sale
    event Listed(address _participant);																		// an individual was added to the whitelist
    event Delisted(address _participant);																	// an individual was removed from the whitelist
    event Paused();																							// the sale was paused (active = false)
    event Activated();    																					// the sale was activated (active = true)

    function Sale() {
        
        creator = msg.sender;
        delegate = msg.sender;
        
        start = 1;					            // contributions may be made as soon as the contract is published
        finish = 1535760000;				    // the sale continues through 09/01/2018 @ 00:00:00
        release = 1536969600;				    // tokens will be available to participants starting 09/15/2018 @ 00:00:00
        
        pricer = 100000;					    // each ETH is worth 100,000 tokens
        
        size = 10 ** 18 * pricer * 2000 * 2;	// 2,000 ETH, plus a 100% buffer to account for the possibility of a 50% decrease in ETH value during the sale

        restricted = false;                     // the sale accepts contributions from everyone.  
                                                // however, participants who do not submit formal KYC verification before the end of the token sale will have their contributions reverted
    
        bonuses = [1, 20];                      // the bonus during the pre-sale starts at 20%
        
        mutable = true;                         // certain attributes, such as token sale finish and release dates, may be updated to increase the liklihood of a successful token sale for all parties involved
        active = true;                          // the token sale is active from the point the contract is published in the form of a pre-sale         
        
        Created();
        Activated();
    }
    
    // returns the number of sub-tokens the calling account purchased/was granted
    
    function getMyTokenBalance() external constant returns (uint256) {
        return participantTokens[msg.sender];
    }
    
    // allows an individual to buy tokens (which will not be issued immediately)
    // individual instructs the tokens to be delivered to a specific account, which may be different than msg.sender
    
    function buy(address _recipient) public payable {
        
        // _recipient address must not be all 0's
        
        require(_recipient != address(0x0));

		// contributor must send more than 1/10 ETH
		
        require(msg.value >= 10 ** 17);

		// sale must be considered active
		
        require(active);

		// sale must be ongoing or certified

        require(progress == 0 || progress == 1);

		// current timestamp must be greater than or equal to the start of the token sale
		
        require(block.timestamp >= start);

		// current timestamp must be less than the end of the token sale
		
        require(block.timestamp < finish);
		
		// either the token sale isn't restricted, or the sender is on the whitelist

        require((! restricted) || whitelist[msg.sender]);
        
        // either the token sale isn't restricted, or the recipient is on the whitelist

        require((! restricted) || whitelist[_recipient]);
        
        // multiply sub-ether by the pricer (which will be a whole number >= 1) to get sub-tokens

        uint256 baseTokens = safeMul(msg.value, pricer);
        
        // determine how many bonus sub-tokens to award and add that to the base tokens
        
        uint256 totalTokens = safeAdd(baseTokens, safeDiv(safeMul(baseTokens, getBonusPercentage()), 100));

		// ensure the purchase does not cause the sale to exceed its maximum size
		
        require(safeAdd(tokens, totalTokens) <= size);
        
        // if the recipient is new, add them as a participant

        if (! participants[_recipient]) {
            participants[_recipient] = true;
            participantIndex.push(_recipient);
        }
        
        // increment the participant's sub-tokens and sub-ether

        participantTokens[_recipient] = safeAdd(participantTokens[_recipient], totalTokens);
        participantValues[_recipient] = safeAdd(participantValues[_recipient], msg.value);

		// increment sale sub-tokens and sub-ether

        tokens = safeAdd(tokens, totalTokens);
        value = safeAdd(value, msg.value);
        
        // log purchase event

        Bought(msg.sender, _recipient, totalTokens, msg.value);
    }
    
    // token sale participants call this to claim their tokens after the sale is completed and tokens are scheduled for release
    
    function claim() external {
	    
	    // sale must be completed
        
        require(progress == 2);
        
        // tokens must be scheduled for release
        
        require(block.timestamp >= release);
        
        // participant must have tokens to claim
        
        require(participantTokens[msg.sender] > 0);
        
        // participant must not have already claimed tokens
        
        require(! participantClaims[msg.sender]);
        
		// record that the participant claimed their tokens

        participantClaims[msg.sender] = true;
        
        // log the event
        
        Claimed(msg.sender, participantTokens[msg.sender]);
        
        // call the marketplace contract, which will actually issue the tokens to the participant
        
        SaleCallbackInterface(marketplace).handleSaleClaimCallback(msg.sender, participantTokens[msg.sender]);
    }
    
    // token sale participants call this to request a refund if the sale was cancelled
    
    function refund() external {
        
        // the sale must be cancelled
        
        require(progress == -1);
        
        // the participant must have contributed ETH
        
        require(participantValues[msg.sender] > 0);
        
        // the participant must not have already requested a refund
        
        require(! participantRefunds[msg.sender]);
        
		// record that the participant requested a refund
        
        participantRefunds[msg.sender] = true;
        
        // log the event
        
        Refunded(msg.sender, participantValues[msg.sender]);
        
        // transfer contributed ETH back to the participant
    
        address(msg.sender).transfer(participantValues[msg.sender]);
    }    
    
    // the contract creator calls this to withdraw contributed ETH to a specific address
    
    function withdraw(uint256 _sanity, address _recipient, uint256 _value) ifCreator external {
        
        // avoid unintended transaction calls
        
        require(_sanity == 100010001);
        
        // address must not be 0-value
        
        require(_recipient != address(0x0));
        
        // token sale must be certified or completed
        
        require(progress == 1 || progress == 2);
        
        // the amount of ETH in the contract must be greater than the amount the creator is attempting to withdraw
        
        require(this.balance >= _value);
        
        // increment the amount that's been withdrawn
        
        withdrawls = safeAdd(withdrawls, _value);
        
        // log the withdrawl
        
        Withdrew(_recipient, _value);
        
        // send the ETH to the recipient
        
        address(_recipient).transfer(_value);
    } 
    
    // the contract owner calls this to complete (finalize/wrap up, etc.) the sale
    
    function complete(uint256 _sanity, uint256 _value) ifCreator external {
        
        // avoid unintended transaction calls
        
        require(_sanity == 101010101);
	    
	    // the sale must be marked as ongoing or certified (aka, not cancelled -1)
        
        require(progress == 0 || progress == 1);
        
        // the sale can only be completed after the finish time
        
        require(block.timestamp >= finish);
        
        // ETH is withdrawn in the process and sent to the marketplace contract.  ensure the amount that is being withdrawn is greater than the balance in the smart contract.
        
        require(this.balance >= _value);
        
        // mark the sale as completed
        
        progress = 2;
        
        // the amount that is sent to the other contract is added to the ETH reserve.  denote this amount as reserves.
        
        reserves = safeAdd(reserves, _value);
        
        // log the completion of the sale, including the number of sub-tokens created by the sale, the amount of net sub-eth received during the sale, and the amount of sub-eth to be added to the reserve
        
        Completed(tokens, value, _value);
        
        // call the marketplace contract, sending the ETH for the reserve and including the number of sub-tokens 
        
        SaleCallbackInterface(marketplace).handleSaleCompletionCallback.value(_value)(tokens);
    }    
    
    // the creator can certify a sale, meaning it cannot be cancelled, and ETH can be withdrawn from the sale by the creator
    
    function certify(uint256 _sanity) ifCreator external {
        
        // avoid unintended transaction calls
        
        require(_sanity == 101011111);
	    
	    // the sale must be ongoing
	    
        require(progress == 0);
        
        // the sale must have started
        
        require(block.timestamp >= start);
        
        // record that the sale is certified
        
        progress = 1;
        
        // log the certification
        
        Certified(tokens, value);
    }
    
    // the creator can cancel a sale 
    
    function cancel(uint256 _sanity) ifCreator external {
        
        // avoid unintended transaction calls
        
        require(_sanity == 111110101);
	    
	    // the sale must be ongoing
	    
        require(progress == 0);
        
        // record that the sale is cancelled
        
        progress = -1;
        
        // log the cancellation
        
        Cancelled(tokens, value);
    }    
    
    // called by the delegate to reverse purchases/grants for a particular contributor
    
    function reverse(address _recipient) ifDelegate external {
        
        // the recipient address must not be all 0's
        
        require(_recipient != address(0x0));
        
        // the sale must be ongoing or certified
        
        require(progress == 0 || progress == 1);
        
        // the recipient must have contributed ETH and/or received tokens
        
        require(participantTokens[_recipient] > 0 || participantValues[_recipient] > 0);
        
        uint256 initialParticipantTokens = participantTokens[_recipient];
        uint256 initialParticipantValue = participantValues[_recipient];
        
        // subtract sub-tokens and sub-ether from sale totals
        
        tokens = safeSub(tokens, initialParticipantTokens);
        value = safeSub(value, initialParticipantValue);
        
        // reset participant sub-tokens and sub-ether
        
        participantTokens[_recipient] = 0;
        participantValues[_recipient] = 0;
        
        // log the reversal, including the initial sub-tokens and initial sub-ether
        
        Reversed(_recipient, initialParticipantTokens, initialParticipantValue);
        
        // if the participant previously sent ETH, return it
        
        if (initialParticipantValue > 0) {
            address(_recipient).transfer(initialParticipantValue);
        }
    }
    
    // called by the delegate to grant tokens to a recipient
    
    function grant(address _recipient, uint256 _tokens) ifDelegate external {
        
       	// the recipient's address cannot be 0-value
       
        require(_recipient != address(0x0));
		
		// the sale must be ongoing or certified
		
        require(progress == 0 || progress == 1);
        
        // if the recipient has not participated previously, add them as a participant
        
        if (! participants[_recipient]) {
            participants[_recipient] = true;
            participantIndex.push(_recipient);
        }
        
        // add sub-tokens to the recipient's balance
        
        participantTokens[_recipient] = safeAdd(participantTokens[_recipient], _tokens);
        
        // add sub-tokens to the sale's total
        
        tokens = safeAdd(tokens, _tokens);
        
        // log the grant
        
        Granted(_recipient, _tokens);
    }    
    
    // adds a set of addresses to the whitelist
    
    function list(address[] _addresses) ifDelegate external {
        for (uint256 i = 0; i < _addresses.length; i++) {
            whitelist[_addresses[i]] = true;
            Listed(_addresses[i]);
        }
    }
    
    // removes a set of addresses from the whitelist
    
    function delist(address[] _addresses) ifDelegate external {
        for (uint256 i = 0; i < _addresses.length; i++) {
            whitelist[_addresses[i]] = false;
            Delisted(_addresses[i]);
        }
    }  
    
	// pause the sale
    
    function pause() ifDelegate external {
        active = false;
        Paused();
    }
    
    // activate the sale

    function activate() ifDelegate external {
        active = true;
        Activated();
    }

    function setDelegate(address _delegate) ifCreator external {
        delegate = _delegate;
    }
    
    function setRestricted(bool _restricted) ifDelegate external {
        restricted = _restricted;
    }
    
    function setMarketplace(address _marketplace) ifCreator ifMutable external {
        marketplace = _marketplace;
    }
    
    function setBonuses(uint256[] _bonuses) ifDelegate ifMutable external {
        bonuses = _bonuses;
    }
    
    function setFinish(uint256 _finish) ifDelegate ifMutable external {
        finish = _finish;
    }

    function setRelease(uint256 _release) ifDelegate ifMutable external {
        release = _release;
    }     
    
    // get the current bonus percentage, as a whole number
    
    function getBonusPercentage() public constant returns (uint256) {
        
        uint256 finalBonus;
        
        uint256 iterativeTimestamp;
        uint256 iterativeBonus;
        
        // within bonuses, even numbered elements store timestamps and odd numbered elements store bonus percentages
        // timestamps are in order from oldest to newest
        // iterates over the elements and if the timestamp has been surpassed, the bonus percentage is denoted
        // the last bonus percentage that was denoted, if one was denoted at all, is the correct bonus percentage at this time
        
        for (uint256 i = 0; i < bonuses.length; i++) {
            if (i % 2 == 0) {
                iterativeTimestamp = bonuses[i];
            } else {
                iterativeBonus = bonuses[i];
                if (block.timestamp >= iterativeTimestamp) {
                    finalBonus = iterativeBonus;
                }
            }
        } 
        
        return finalBonus;
    }    
    
    function() public payable {
        buy(msg.sender);
    }
    
}

    Contract ABI  
[{"constant":false,"inputs":[{"name":"_addresses","type":"address[]"}],"name":"list","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"creator","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"active","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"participants","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"participantClaims","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"activate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_restricted","type":"bool"}],"name":"setRestricted","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_finish","type":"uint256"}],"name":"setFinish","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_addresses","type":"address[]"}],"name":"delist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_bonuses","type":"uint256[]"}],"name":"setBonuses","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"value","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_sanity","type":"uint256"}],"name":"cancel","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"claim","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"progress","outputs":[{"name":"","type":"int8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"refund","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_recipient","type":"address"},{"name":"_tokens","type":"uint256"}],"name":"grant","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"restricted","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_marketplace","type":"address"}],"name":"setMarketplace","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"reserves","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getBonusPercentage","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"release","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"participantValues","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"size","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"participantIndex","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"whitelist","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"participantRefunds","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"mutable","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pricer","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getMyTokenBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"bonuses","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"marketplace","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"start","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_sanity","type":"uint256"}],"name":"certify","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"delegate","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_delegate","type":"address"}],"name":"setDelegate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"participantTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_release","type":"uint256"}],"name":"setRelease","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"finish","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_sanity","type":"uint256"},{"name":"_value","type":"uint256"}],"name":"complete","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_recipient","type":"address"}],"name":"reverse","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_sanity","type":"uint256"},{"name":"_recipient","type":"address"},{"name":"_value","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_recipient","type":"address"}],"name":"buy","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"withdrawls","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[],"name":"Created","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_buyer","type":"address"},{"indexed":true,"name":"_recipient","type":"address"},{"indexed":false,"name":"_tokens","type":"uint256"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Bought","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_recipient","type":"address"},{"indexed":false,"name":"_tokens","type":"uint256"}],"name":"Claimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_recipient","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Refunded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_recipient","type":"address"},{"indexed":false,"name":"_tokens","type":"uint256"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Reversed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_recipient","type":"address"},{"indexed":false,"name":"_tokens","type":"uint256"}],"name":"Granted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_recipient","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Withdrew","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_tokens","type":"uint256"},{"indexed":false,"name":"_value","type":"uint256"},{"indexed":false,"name":"_reserves","type":"uint256"}],"name":"Completed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_tokens","type":"uint256"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Certified","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_tokens","type":"uint256"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Cancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_participant","type":"address"}],"name":"Listed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_participant","type":"address"}],"name":"Delisted","type":"event"},{"anonymous":false,"inputs":[],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[],"name":"Activated","type":"event"}]

  Contract Creation Code Switch To Opcodes View
606060405234156200001057600080fd5b60008054600160a060020a033316600160a060020a03199182168117909255600180549091169091178155600355635b89d680600455635b9c4b80600555620186a06006556b014adf4b7320334b900000006007556008805460ff191690556040805190810160405260018152601460208201819052620000939160026200010e565b506015805460ff191660011790556008805461ff0019166101001790557f9adeddf84386b336eb7b3e18e7a6099be08fd81ea5d5142f4d2b630f8d20cf0160405160405180910390a17fed1cd0670ee0c0017f550451a038818c696d0b6a9d6ce5b369e44275573cf9b060405160405180910390a162000183565b82805482825590600052602060002090810192821562000151579160200282015b8281111562000151578251829060ff169055916020019190600101906200012f565b506200015f92915062000163565b5090565b6200018091905b808211156200015f57600081556001016200016a565b90565b61196b80620001936000396000f30060606040526004361061020b5763ffffffff60e060020a6000350416630266ba02811461021657806302d05d3f1461023457806302fb0c5e1461026357806309e69ede1461028a5780630c2a215d146102a95780630f15f4c0146102c857806324daddc5146102db5780632f558ba0146102f357806332cd04871461030957806334bf97ea146103275780633fa4f2451461034557806340e58ee51461036a5780634e71d92d14610380578063577bd33614610393578063590e1ae3146103bf5780636370920e146103d25780637072c6b1146103f457806373ad6c2d1461040757806375172a8b146104265780638222b7e9146104395780638456cb591461044c57806386d1a69f1461045f5780639239d64514610472578063949d225d1461049157806395c3be0b146104a45780639b19251a146104ba5780639d63848a146104d9578063a4e214f9146104ec578063a5536fe71461050b578063a6138ed91461051e578063a6b3abba14610531578063ab37564114610544578063abc8c7af1461055a578063be9a65551461056d578063c6634ef514610580578063c89e436114610596578063ca5eb5e1146105a9578063cbe3b20f146105c8578063cfa4f3e8146105e7578063d56b2889146105fd578063d6380f3714610610578063e30bd74014610629578063e63697c814610648578063f088d5471461066d578063f357622014610681575b61021433610694565b005b341561022157600080fd5b6102146004803560248101910135610947565b341561023f57600080fd5b610247610a19565b604051600160a060020a03909116815260200160405180910390f35b341561026e57600080fd5b610276610a28565b604051901515815260200160405180910390f35b341561029557600080fd5b610276600160a060020a0360043516610a36565b34156102b457600080fd5b610276600160a060020a0360043516610a4b565b34156102d357600080fd5b610214610a60565b34156102e657600080fd5b6102146004351515610ab8565b34156102fe57600080fd5b610214600435610ae6565b341561031457600080fd5b6102146004803560248101910135610b17565b341561033257600080fd5b6102146004803560248101910135610be3565b341561035057600080fd5b610358610c1b565b60405190815260200160405180910390f35b341561037557600080fd5b610214600435610c21565b341561038b57600080fd5b610214610cba565b341561039e57600080fd5b6103a6610e20565b604051600091820b90910b815260200160405180910390f35b34156103ca57600080fd5b610214610e2f565b34156103dd57600080fd5b610214600160a060020a0360043516602435610f38565b34156103ff57600080fd5b6102766110b8565b341561041257600080fd5b610214600160a060020a03600435166110c1565b341561043157600080fd5b61035861111c565b341561044457600080fd5b610358611122565b341561045757600080fd5b610214611198565b341561046a57600080fd5b6103586111ec565b341561047d57600080fd5b610358600160a060020a03600435166111f2565b341561049c57600080fd5b610358611204565b34156104af57600080fd5b61024760043561120a565b34156104c557600080fd5b610276600160a060020a0360043516611232565b34156104e457600080fd5b610358611247565b34156104f757600080fd5b610276600160a060020a036004351661124d565b341561051657600080fd5b610276611262565b341561052957600080fd5b61035861126b565b341561053c57600080fd5b610358611271565b341561054f57600080fd5b61035860043561128e565b341561056557600080fd5b6102476112ad565b341561057857600080fd5b6103586112bc565b341561058b57600080fd5b6102146004356112c2565b34156105a157600080fd5b61024761136a565b34156105b457600080fd5b610214600160a060020a0360043516611379565b34156105d357600080fd5b610358600160a060020a03600435166113c3565b34156105f257600080fd5b6102146004356113d5565b341561060857600080fd5b610358611406565b341561061b57600080fd5b61021460043560243561140c565b341561063457600080fd5b610214600160a060020a036004351661157a565b341561065357600080fd5b610214600435600160a060020a0360243516604435611711565b610214600160a060020a0360043516610694565b341561068c57600080fd5b610358611825565b600080600160a060020a03831615156106ac57600080fd5b67016345785d8a00003410156106c157600080fd5b600854610100900460ff1615156106d757600080fd5b600854620100009004600090810b900b15806107025750600854620100009004600090810b900b6001145b151561070d57600080fd5b60035442101561071c57600080fd5b600454421061072a57600080fd5b60085460ff1615806107545750600160a060020a03331660009081526013602052604090205460ff165b151561075f57600080fd5b60085460ff1615806107895750600160a060020a03831660009081526013602052604090205460ff165b151561079457600080fd5b6107a03460065461182b565b91506107c6826107c16107ba856107b5611122565b61182b565b6064611856565b61188a565b90506007546107d76009548361188a565b11156107e257600080fd5b600160a060020a0383166000908152600d602052604090205460ff16151561086f57600160a060020a0383166000908152600d60205260409020805460ff19166001908117909155600e80549091810161083c83826118b6565b506000918252602090912001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0385161790555b600160a060020a0383166000908152600f6020526040902054610892908261188a565b600160a060020a0384166000908152600f60209081526040808320939093556010905220546108c1903461188a565b600160a060020a0384166000908152601060205260409020556009546108e7908261188a565b600955600a546108f7903461188a565b600a55600160a060020a038084169033167fbf77fd13a39d14dc0da779342c14105c38d9a5d0c60f2caa22f5fd1d5525416d833460405191825260208201526040908101905180910390a3505050565b60015460009033600160a060020a0390811691161461096557600080fd5b5060005b81811015610a145760016013600085858581811061098357fe5b60209081029290920135600160a060020a0316835250810191909152604001600020805460ff19169115159190911790557ffb3fdb4942f7aa0b8ecdf8508875e7f6c8142bb7870f0455b87a9f093608bc828383838181106109e157fe5b90506020020135600160a060020a0316604051600160a060020a03909116815260200160405180910390a1600101610969565b505050565b600054600160a060020a031681565b600854610100900460ff1681565b600d6020526000908152604090205460ff1681565b60126020526000908152604090205460ff1681565b60015433600160a060020a03908116911614610a7b57600080fd5b6008805461ff0019166101001790557fed1cd0670ee0c0017f550451a038818c696d0b6a9d6ce5b369e44275573cf9b060405160405180910390a1565b60015433600160a060020a03908116911614610ad357600080fd5b6008805460ff1916911515919091179055565b60015433600160a060020a03908116911614610b0157600080fd5b60155460ff161515610b1257600080fd5b600455565b60015460009033600160a060020a03908116911614610b3557600080fd5b5060005b81811015610a14576000601381858585818110610b5257fe5b60209081029290920135600160a060020a0316835250810191909152604001600020805460ff19169115159190911790557f7e1dd2258a1fa02a8360869a16fa4e1d4649c796d79a8d520f03a1dd8ae41af0838383818110610bb057fe5b90506020020135600160a060020a0316604051600160a060020a03909116815260200160405180910390a1600101610b39565b60015433600160a060020a03908116911614610bfe57600080fd5b60155460ff161515610c0f57600080fd5b610a14601483836118da565b600a5481565b60005433600160a060020a03908116911614610c3c57600080fd5b63069f67d58114610c4c57600080fd5b600854620100009004600090810b900b15610c6657600080fd5b6008805462ff0000191662ff0000179055600954600a547fa761582a460180d55522f9f5fdc076390a1f48a7a62a8afbd45c1bb797948edb919060405191825260208201526040908101905180910390a150565b600854620100009004600090810b900b600214610cd657600080fd5b600554421015610ce557600080fd5b600160a060020a0333166000908152600f602052604081205411610d0857600080fd5b600160a060020a03331660009081526012602052604090205460ff1615610d2e57600080fd5b600160a060020a0333166000818152601260209081526040808320805460ff19166001179055600f90915290819020547fd8138f8a3f377c5259ca548e70e4c2de94f129f5a11036a15b69513cba2b426a915190815260200160405180910390a2600254600160a060020a03338181166000908152600f602052604080822054939094169363bb57349c939190516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610e0357600080fd5b6102c65a03f11515610e1457600080fd5b50505060405180515050565b60085462010000900460000b81565b600854620100009004600090810b900b60001914610e4c57600080fd5b600160a060020a03331660009081526010602052604081205411610e6f57600080fd5b600160a060020a03331660009081526011602052604090205460ff1615610e9557600080fd5b600160a060020a0333166000818152601160209081526040808320805460ff19166001179055601090915290819020547fd7dee2702d63ad89917b6a4da9981c90c4d24f8c2bdfd64c604ecae57d8d0651915190815260200160405180910390a2600160a060020a033316600081815260106020526040908190205480156108fc029151600060405180830381858888f193505050501515610f3657600080fd5b565b60015433600160a060020a03908116911614610f5357600080fd5b600160a060020a0382161515610f6857600080fd5b600854620100009004600090810b900b1580610f935750600854620100009004600090810b900b6001145b1515610f9e57600080fd5b600160a060020a0382166000908152600d602052604090205460ff16151561102b57600160a060020a0382166000908152600d60205260409020805460ff19166001908117909155600e805490918101610ff883826118b6565b506000918252602090912001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0384161790555b600160a060020a0382166000908152600f602052604090205461104e908261188a565b600160a060020a0383166000908152600f6020526040902055600954611074908261188a565b600955600160a060020a0382167f640e37a8f90a1d221d5cd8176ab4eb9bc1bd82ce5616399aca28e613ecf22da48260405190815260200160405180910390a25050565b60085460ff1681565b60005433600160a060020a039081169116146110dc57600080fd5b60155460ff1615156110ed57600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600c5481565b6000808080805b60145481101561118f5760028106151561115e57601480548290811061114b57fe5b9060005260206000209001549250611187565b601480548290811061116c57fe5b90600052602060002090015491508242101515611187578193505b600101611129565b50919392505050565b60015433600160a060020a039081169116146111b357600080fd5b6008805461ff00191690557f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75260405160405180910390a1565b60055481565b60106020526000908152604090205481565b60075481565b600e80548290811061121857fe5b600091825260209091200154600160a060020a0316905081565b60136020526000908152604090205460ff1681565b60095481565b60116020526000908152604090205460ff1681565b60155460ff1681565b60065481565b600160a060020a0333166000908152600f60205260409020545b90565b601480548290811061129c57fe5b600091825260209091200154905081565b600254600160a060020a031681565b60035481565b60005433600160a060020a039081169116146112dd57600080fd5b6306054ea781146112ed57600080fd5b600854620100009004600090810b900b1561130757600080fd5b60035442101561131657600080fd5b6008805462ff0000191662010000179055600954600a547f35f340d6a48d39dff138141acce8e5c2ba077429f643ff20d02760f44b81085d919060405191825260208201526040908101905180910390a150565b600154600160a060020a031681565b60005433600160a060020a0390811691161461139457600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600f6020526000908152604090205481565b60015433600160a060020a039081169116146113f057600080fd5b60155460ff16151561140157600080fd5b600555565b60045481565b60005433600160a060020a0390811691161461142757600080fd5b6306054ab5821461143757600080fd5b600854620100009004600090810b900b15806114625750600854620100009004600090810b900b6001145b151561146d57600080fd5b60045442101561147c57600080fd5b600160a060020a033016318190101561149457600080fd5b6008805462ff0000191662020000179055600c546114b2908261188a565b600c55600954600a547fac2eeaf45d1b75aed6b3285cda3efb3c382cce02ba313558bbb90be57f8843e491908360405180848152602001838152602001828152602001935050505060405180910390a1600254600954600160a060020a039091169063f18ba98c90839060006040516020015260405160e060020a63ffffffff851602815260048101919091526024016020604051808303818588803b151561155a57600080fd5b6125ee5a03f1151561156b57600080fd5b50505050604051805150505050565b600154600090819033600160a060020a0390811691161461159a57600080fd5b600160a060020a03831615156115af57600080fd5b600854620100009004600090810b900b15806115da5750600854620100009004600090810b900b6001145b15156115e557600080fd5b600160a060020a0383166000908152600f602052604081205411806116205750600160a060020a038316600090815260106020526040812054115b151561162b57600080fd5b5050600160a060020a0381166000908152600f602090815260408083205460109092529091205460095461165f90836118a4565b600955600a5461166f90826118a4565b600a55600160a060020a0383166000818152600f602090815260408083208390556010909152808220919091557f3ad1debfc4548aa35036161d2b76897ac592f31d48bb49ee28e38a23abf11cd290849084905191825260208201526040908101905180910390a26000811115610a1457600160a060020a03831681156108fc0282604051600060405180830381858888f193505050501515610a1457600080fd5b60005433600160a060020a0390811691161461172c57600080fd5b6305f60811831461173c57600080fd5b600160a060020a038216151561175157600080fd5b600854620100009004600090810b900b6001148061177e5750600854620100009004600090810b900b6002145b151561178957600080fd5b600160a060020a03301631819010156117a157600080fd5b6117ad600b548261188a565b600b557fb244b9a17ad633c6e83b7983ee04320484956a68ddbe96a0b70dfca1cf19d7238282604051600160a060020a03909216825260208201526040908101905180910390a1600160a060020a03821681156108fc0282604051600060405180830381858888f193505050501515610a1457600080fd5b600b5481565b6000828202831580611847575082848281151561184457fe5b04145b151561184f57fe5b9392505050565b60008080831161186257fe5b828481151561186d57fe5b049050828481151561187b57fe5b06818402018414151561184f57fe5b600082820183811080159061184757508281101561184f57fe5b6000828211156118b057fe5b50900390565b815481835581811511610a1457600083815260209020610a14918101908301611925565b828054828255906000526020600020908101928215611915579160200282015b828111156119155782358255916020019190600101906118fa565b50611921929150611925565b5090565b61128b91905b80821115611921576000815560010161192b5600a165627a7a7230582015e937cb798cee1b870fcf53b50e30ae28001dc99185b7dbe69338dd1b2d509e0029

   Swarm Source:
bzzr://15e937cb798cee1b870fcf53b50e30ae28001dc99185b7dbe69338dd1b2d509e

 

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