Contract 0x4459B42D034330ecC1E4D604c0a5c855b857Df2c

 

Contract Overview

Balance:
0.7714127027 Ether

EtherValue:
$106.18 (@ $137.64/ETH)

Token:
TxHash Block Age From To Value [TxFee]
0x79f6134191f297023f222300103e56026fb67d733501228dec8194c312129d9474139331 day 1 hr ago0xbf4c0787198dfba4a71c8882300db013ba21ff43 IN  0x4459b42d034330ecc1e4d604c0a5c855b857df2c0 Ether0.0016319394
0x7b9f4d4cc0ea80d8919c4be9926e9aefc7c70d034c9524a4a533e6494344d9df74139181 day 1 hr ago0xbf4c0787198dfba4a71c8882300db013ba21ff43 IN  0x4459b42d034330ecc1e4d604c0a5c855b857df2c0 Ether0.02483487
0xcec1cb37a2f815e10b6e801ca996f8a016940b897d555146e355c0dcfd6b35c574139041 day 1 hr ago0xbf4c0787198dfba4a71c8882300db013ba21ff43 IN  0x4459b42d034330ecc1e4d604c0a5c855b857df2c0 Ether0.025815861
0xefcab15bd69e0ee9700f5263c9df2c89afad5c0f337a13487dcce9a36345dd7974138971 day 1 hr ago0xbf4c0787198dfba4a71c8882300db013ba21ff43 IN  0x4459b42d034330ecc1e4d604c0a5c855b857df2c0 Ether0.0261177048
0xf91389c941e086dec6c6b1f52dc5328fa3356388bdab108a42a84965ef6419e674138921 day 1 hr ago0xbf4c0787198dfba4a71c8882300db013ba21ff43 IN  0x4459b42d034330ecc1e4d604c0a5c855b857df2c0 Ether0.0261180504
0xf8dd3880f0ca9586e740e45abd7c4bcbea051f067c9a6edb1cc6b280d183244774137771 day 1 hr ago0x4645f78d0a2094117990ef47212aa579b6d22d36 IN  0x4459b42d034330ecc1e4d604c0a5c855b857df2c0 Ether0.0000831992
0xf4dfaebaf2dc16aa52b29e3e6ae14ef2b1d498dfc60faf7a2254c5993e4d3f6174137651 day 1 hr ago0x4645f78d0a2094117990ef47212aa579b6d22d36 IN  0x4459b42d034330ecc1e4d604c0a5c855b857df2c0 Ether0.0001041992
0x9ac5527e9a109b87da5fd0563446c21b9fd3f1b52a59596d3ed79e98cee0c8b874137651 day 1 hr ago0xbf4c0787198dfba4a71c8882300db013ba21ff43 IN  0x4459b42d034330ecc1e4d604c0a5c855b857df2c0 Ether0.0278155944
0x5c437fc96b5d6a80975fc91a599cf776f829d8ba2197f2a452cb4ff1aa9cefb974137521 day 2 hrs ago0xbf4c0787198dfba4a71c8882300db013ba21ff43 IN  0x4459b42d034330ecc1e4d604c0a5c855b857df2c0 Ether0.0267650136
0xd870ec7cc4997809e2b4c02ef3a7c281995de6dbb79dabf6f72e3738d5d417c474137501 day 2 hrs ago0xbf4c0787198dfba4a71c8882300db013ba21ff43 IN  0x4459b42d034330ecc1e4d604c0a5c855b857df2c0 Ether0.0261197784
0x5d4e3cfe52b66edf407193045b22f0defcee86d8c393be859f3b17c6e47bb87a74137401 day 2 hrs ago0xbf4c0787198dfba4a71c8882300db013ba21ff43 IN  0x4459b42d034330ecc1e4d604c0a5c855b857df2c0 Ether0.0274137048
0x740b0ff51c434f737eb3af30563e53f7bbae783d449a3ebed4c1e74c697b8f2b74137331 day 2 hrs ago0xbf4c0787198dfba4a71c8882300db013ba21ff43 IN  0x4459b42d034330ecc1e4d604c0a5c855b857df2c0 Ether0.0093731202
0xac02e04bc4501ed11e9c2f779644845dab3466c82cd20de7bced02cd8683bdc774137291 day 2 hrs ago0xbf4c0787198dfba4a71c8882300db013ba21ff43 IN  0x4459b42d034330ecc1e4d604c0a5c855b857df2c0 Ether0.0340543224
0x8064575403f3d94724066d15b5d24a7808b52f3250b04a1714043300252b8b3174137241 day 2 hrs ago0xbf4c0787198dfba4a71c8882300db013ba21ff43 IN  0x4459b42d034330ecc1e4d604c0a5c855b857df2c0 Ether0.0343402524
0xd7ac4ceb916dd87a96c64031fd763b916dcdb43e7955eaf412ba638e3ec3e1d974137211 day 2 hrs ago0xbf4c0787198dfba4a71c8882300db013ba21ff43 IN  0x4459b42d034330ecc1e4d604c0a5c855b857df2c0 Ether0.0264420504
0xe2e27607f651043558d3fbbb38d98f83c2cdb1afc9dc03153f79008aa8eb096574137071 day 2 hrs ago0xbf4c0787198dfba4a71c8882300db013ba21ff43 IN  0x4459b42d034330ecc1e4d604c0a5c855b857df2c0 Ether0.0261163224
0x91f773722abbde39263a3272780243dd39f849a6568256b4cda9f180e67a301f74137051 day 2 hrs ago0xbf4c0787198dfba4a71c8882300db013ba21ff43 IN  0x4459b42d034330ecc1e4d604c0a5c855b857df2c0 Ether0.0323550504
0x5012421b84d4a6a0a70903ea8ef982cc6c849a527fe36fa50ed134dcb2e45f6274136431 day 2 hrs ago0xbf4c0787198dfba4a71c8882300db013ba21ff43 IN  0x4459b42d034330ecc1e4d604c0a5c855b857df2c0 Ether0.0260370504
0x9e127e03f94b2b48eeeb7cb31db12dd1f955349cb032b140cd6559d16e188e5a74135561 day 2 hrs ago0xbf4c0787198dfba4a71c8882300db013ba21ff43 IN  0x4459b42d034330ecc1e4d604c0a5c855b857df2c0 Ether0.035107668
0xf328ec0b5abbacfe4c416dde441e39018f1e199f89ec4bcbae9bbffe763ec83f74134991 day 2 hrs ago0xbf4c0787198dfba4a71c8882300db013ba21ff43 IN  0x4459b42d034330ecc1e4d604c0a5c855b857df2c0 Ether0.0351914328
0xadfadb3ca8a52b643a87077507a5dad734e7119a13a80b6a0fc432386b1c483b74134401 day 3 hrs ago0xbf4c0787198dfba4a71c8882300db013ba21ff43 IN  0x4459b42d034330ecc1e4d604c0a5c855b857df2c0 Ether0.035512668
0xd6009a79f44c24b7f0fbb0092cd185fa6668a65de8bd84a81ea2041a9be6ed0974133871 day 3 hrs ago0xbf4c0787198dfba4a71c8882300db013ba21ff43 IN  0x4459b42d034330ecc1e4d604c0a5c855b857df2c0.15 Ether0.0003035899
0x62390016525af74efcecaa9bfae47a44e8bd09f455902f30578a700f0972b3b674133201 day 3 hrs ago0xbf4c0787198dfba4a71c8882300db013ba21ff43 IN  0x4459b42d034330ecc1e4d604c0a5c855b857df2c0 Ether0.00185287
0x9efe4df667371c33c0d65134530ea6c1c8c4741c8794bd4d5e538f6c2bb48abb74133061 day 3 hrs ago0xbf4c0787198dfba4a71c8882300db013ba21ff43 IN  0x4459b42d034330ecc1e4d604c0a5c855b857df2c0 Ether0.001848422
0xe7946cdc513a4ca0cdb571d5a3ff5b3e271f01962abde1dc3916f4326c7d9f5374132801 day 3 hrs ago0xbf4c0787198dfba4a71c8882300db013ba21ff43 IN  0x4459b42d034330ecc1e4d604c0a5c855b857df2c0 Ether0.0058223486
[ Download CSV Export 

Latest 25 internal transaction, Click here to view more Internal Transactions as a result of Contract Execution

Parent TxHash Block Age From To Value
0x79f6134191f297023f222300103e56026fb67d733501228dec8194c312129d9474139331 day 1 hr ago0x4459b42d034330ecc1e4d604c0a5c855b857df2c0x210efca155797119a5b0f1cfde64ca1fe55ec5440.00045 Ether
0x7b9f4d4cc0ea80d8919c4be9926e9aefc7c70d034c9524a4a533e6494344d9df74139181 day 1 hr ago0x4459b42d034330ecc1e4d604c0a5c855b857df2c0x210efca155797119a5b0f1cfde64ca1fe55ec5440.00805 Ether
0xcec1cb37a2f815e10b6e801ca996f8a016940b897d555146e355c0dcfd6b35c574139041 day 1 hr ago0x4459b42d034330ecc1e4d604c0a5c855b857df2c0x210efca155797119a5b0f1cfde64ca1fe55ec5440.0084 Ether
0xefcab15bd69e0ee9700f5263c9df2c89afad5c0f337a13487dcce9a36345dd7974138971 day 1 hr ago0x4459b42d034330ecc1e4d604c0a5c855b857df2c0x210efca155797119a5b0f1cfde64ca1fe55ec5440.0085 Ether
0xf91389c941e086dec6c6b1f52dc5328fa3356388bdab108a42a84965ef6419e674138921 day 1 hr ago0x4459b42d034330ecc1e4d604c0a5c855b857df2c0x210efca155797119a5b0f1cfde64ca1fe55ec5440.0085 Ether
0x9ac5527e9a109b87da5fd0563446c21b9fd3f1b52a59596d3ed79e98cee0c8b874137651 day 1 hr ago0x4459b42d034330ecc1e4d604c0a5c855b857df2c0x210efca155797119a5b0f1cfde64ca1fe55ec5440.0085 Ether
0x5c437fc96b5d6a80975fc91a599cf776f829d8ba2197f2a452cb4ff1aa9cefb974137521 day 2 hrs ago0x4459b42d034330ecc1e4d604c0a5c855b857df2c0x210efca155797119a5b0f1cfde64ca1fe55ec5440.0085 Ether
0xd870ec7cc4997809e2b4c02ef3a7c281995de6dbb79dabf6f72e3738d5d417c474137501 day 2 hrs ago0x4459b42d034330ecc1e4d604c0a5c855b857df2c0x210efca155797119a5b0f1cfde64ca1fe55ec5440.0085 Ether
0x5d4e3cfe52b66edf407193045b22f0defcee86d8c393be859f3b17c6e47bb87a74137401 day 2 hrs ago0x4459b42d034330ecc1e4d604c0a5c855b857df2c0x210efca155797119a5b0f1cfde64ca1fe55ec5440.0085 Ether
0x740b0ff51c434f737eb3af30563e53f7bbae783d449a3ebed4c1e74c697b8f2b74137331 day 2 hrs ago0x4459b42d034330ecc1e4d604c0a5c855b857df2c0x210efca155797119a5b0f1cfde64ca1fe55ec5440.00295 Ether
0xac02e04bc4501ed11e9c2f779644845dab3466c82cd20de7bced02cd8683bdc774137291 day 2 hrs ago0x4459b42d034330ecc1e4d604c0a5c855b857df2c0x210efca155797119a5b0f1cfde64ca1fe55ec5440.0085 Ether
0x8064575403f3d94724066d15b5d24a7808b52f3250b04a1714043300252b8b3174137241 day 2 hrs ago0x4459b42d034330ecc1e4d604c0a5c855b857df2c0x210efca155797119a5b0f1cfde64ca1fe55ec5440.0083 Ether
0xd7ac4ceb916dd87a96c64031fd763b916dcdb43e7955eaf412ba638e3ec3e1d974137211 day 2 hrs ago0x4459b42d034330ecc1e4d604c0a5c855b857df2c0x210efca155797119a5b0f1cfde64ca1fe55ec5440.0085 Ether
0xe2e27607f651043558d3fbbb38d98f83c2cdb1afc9dc03153f79008aa8eb096574137071 day 2 hrs ago0x4459b42d034330ecc1e4d604c0a5c855b857df2c0x210efca155797119a5b0f1cfde64ca1fe55ec5440.0085 Ether
0x91f773722abbde39263a3272780243dd39f849a6568256b4cda9f180e67a301f74137051 day 2 hrs ago0x4459b42d034330ecc1e4d604c0a5c855b857df2c0x210efca155797119a5b0f1cfde64ca1fe55ec5440.0085 Ether
0x5012421b84d4a6a0a70903ea8ef982cc6c849a527fe36fa50ed134dcb2e45f6274136431 day 2 hrs ago0x4459b42d034330ecc1e4d604c0a5c855b857df2c0x210efca155797119a5b0f1cfde64ca1fe55ec5440.0085 Ether
0x9e127e03f94b2b48eeeb7cb31db12dd1f955349cb032b140cd6559d16e188e5a74135561 day 2 hrs ago0x4459b42d034330ecc1e4d604c0a5c855b857df2c0x210efca155797119a5b0f1cfde64ca1fe55ec5440.0085 Ether
0xf328ec0b5abbacfe4c416dde441e39018f1e199f89ec4bcbae9bbffe763ec83f74134991 day 2 hrs ago0x4459b42d034330ecc1e4d604c0a5c855b857df2c0x210efca155797119a5b0f1cfde64ca1fe55ec5440.0085 Ether
0xadfadb3ca8a52b643a87077507a5dad734e7119a13a80b6a0fc432386b1c483b74134401 day 3 hrs ago0x4459b42d034330ecc1e4d604c0a5c855b857df2c0x210efca155797119a5b0f1cfde64ca1fe55ec5440.0085 Ether
0x0950262221f4cbc5c2be4081c60806a84443ab2f9f809a5607068ae31fbf015a74131811 day 4 hrs ago0x4459b42d034330ecc1e4d604c0a5c855b857df2c0x210efca155797119a5b0f1cfde64ca1fe55ec5440.0019 Ether
0x04ff82e1dc61c751746818479c42b1b96048e81e570a4eda47c9a29a762f0b9c74130381 day 4 hrs ago0x4459b42d034330ecc1e4d604c0a5c855b857df2c0x210efca155797119a5b0f1cfde64ca1fe55ec5440.00845 Ether
0xa030df8ac0672be4d4d3d5a985745388508ae282dd0fe1cc2f9f346a5e4e34d274130071 day 4 hrs ago0x4459b42d034330ecc1e4d604c0a5c855b857df2c0x210efca155797119a5b0f1cfde64ca1fe55ec5440.0085 Ether
0x9ac0b2acf4c3ba42a4595c548a2d49f547059c9d7cc96560a6bb8b05d1bc0f8d74129961 day 4 hrs ago0x4459b42d034330ecc1e4d604c0a5c855b857df2c0x210efca155797119a5b0f1cfde64ca1fe55ec5440.0085 Ether
0x637fd7cfced205a32085d6d7b236fbef96520bbf0c02da5373965e82a6593ce074129771 day 4 hrs ago0x4459b42d034330ecc1e4d604c0a5c855b857df2c0x210efca155797119a5b0f1cfde64ca1fe55ec5440.0085 Ether
0x0ca2c649d6c5b7a82cd290d2cb52cd4dfd30124aab8d1ca9eb1272ac0eae411274128721 day 5 hrs ago0x4459b42d034330ecc1e4d604c0a5c855b857df2c0x210efca155797119a5b0f1cfde64ca1fe55ec5440.0085 Ether
[ Download CSV Export 

Contract Source Code Verified (Exact Match)

Contract Name:
DappleAirdrops

Compiler Version
v0.4.19+commit.c4cbbb05

Optimization Enabled:
Yes

Runs (Optimizer):
200

Contract Source Code

/***
 * ██████╗ █████╗██████╗██████╗██╗    ███████╗     █████╗████████╗██████╗██████╗ ██████╗██████╗███████╗
 * ██╔══████╔══████╔══████╔══████║    ██╔════╝    ██╔══██████╔══████╔══████╔══████╔═══████╔══████╔════╝
 * ██║  ███████████████╔██████╔██║    █████╗      ███████████████╔██║  ████████╔██║   ████████╔███████╗
 * ██║  ████╔══████╔═══╝██╔═══╝██║    ██╔══╝      ██╔══██████╔══████║  ████╔══████║   ████╔═══╝╚════██║
 * ██████╔██║  ████║    ██║    ██████████████╗    ██║  ██████║  ████████╔██║  ██╚██████╔██║    ███████║
 * ╚═════╝╚═╝  ╚═╚═╝    ╚═╝    ╚══════╚══════╝    ╚═╝  ╚═╚═╚═╝  ╚═╚═════╝╚═╝  ╚═╝╚═════╝╚═╝    ╚══════╝
 *        
 * MIT License
 *
 * Copyright (c) 2018 Dapple Airdrops
 * 
 * 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.
 * 
 * @author Zenos Pavlakou
 */
 
pragma solidity ^0.4.19;

library SafeMath {
    
    /**
    * @dev Multiplies two numbers, throws on overflow.
    */
    function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
        // Gas optimization: this is cheaper than asserting 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
        if (a == 0) {
            return 0;
        }
        
        c = a * b;
        assert(c / a == b);
        return c;
    }
    

    /**
    * @dev Integer division of two numbers, truncating the quotient.
    */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        // assert(b > 0); // Solidity automatically throws when dividing by 0
        // uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
        return a / b;
    }


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


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



contract Ownable {
    
    address public owner;
    
    event OwnershipTransferred(address indexed from, address indexed to);
    
    
    /**
     * Constructor assigns ownership to the address used to deploy the contract.
     * */
    function Ownable() public {
        owner = msg.sender;
    }


    /**
     * Any function with this modifier in its method signature can only be executed by
     * the owner of the contract. Any attempt made by any other account to invoke the 
     * functions with this modifier will result in a loss of gas and the contract's state
     * will remain untampered.
     * */
    modifier onlyOwner {
        require(msg.sender == owner);
        _;
    }

    /**
     * Allows for the transfer of ownership to another address;
     * 
     * @param _newOwner The address to be assigned new ownership.
     * */
    function transferOwnership(address _newOwner) public onlyOwner {
        require(
            _newOwner != address(0)
            && _newOwner != owner 
        );
        OwnershipTransferred(owner, _newOwner);
        owner = _newOwner;
    }
}



/**
 * Contract acts as an interface between the DappleAirdrops contract and all ERC20 compliant
 * tokens. 
 * */
contract ERCInterface {
    function transferFrom(address _from, address _to, uint256 _value) public;
    function balanceOf(address who) constant public returns (uint256);
    function allowance(address owner, address spender) constant public returns (uint256);
    function transfer(address to, uint256 value) public returns(bool);
}



contract DappleAirdrops is Ownable {
    
    using SafeMath for uint256;
    
    mapping (address => uint256) public bonusDropsOf;
    mapping (address => uint256) public ethBalanceOf;
    mapping (address => bool) public tokenIsBanned;
    mapping (address => uint256) public trialDrops;
        
    uint256 public rate;
    uint256 public dropUnitPrice;
    uint256 public bonus;
    uint256 public maxDropsPerTx;
    uint256 public maxTrialDrops;
    string public constant website = "www.dappleairdrops.com";
    
    event BonusCreditGranted(address indexed to, uint256 credit);
    event BonusCreditRevoked(address indexed from, uint256 credit);
    event CreditPurchased(address indexed by, uint256 etherValue, uint256 credit);
    event AirdropInvoked(address indexed by, uint256 creditConsumed);
    event BonustChanged(uint256 from, uint256 to);
    event TokenBanned(address indexed tokenAddress);
    event TokenUnbanned(address indexed tokenAddress);
    event EthWithdrawn(address indexed by, uint256 totalWei);
    event RateChanged(uint256 from, uint256 to);
    event MaxDropsChanged(uint256 from, uint256 to);
    event RefundIssued(address indexed to, uint256 totalWei);
    event ERC20TokensWithdrawn(address token, address sentTo, uint256 value);

    
    /**
     * Constructor sets the rate such that 1 ETH = 10,000 credits (i.e., 10,000 airdrop recipients)
     * which equates to a unit price of 0.00001 ETH per airdrop recipient. The bonus percentage
     * is set to 20% but is subject to change. Bonus credits will only be issued after once normal
     * credits have been used (unless credits have been granted to an address by the owner of the 
     * contract).
     * */
    function DappleAirdrops() public {
        rate = 10000;
        dropUnitPrice = 1e14; 
        bonus = 20;
        maxDropsPerTx = 100;
        maxTrialDrops = 100;
    }
    
    
    /**
     * Checks whether or not an ERC20 token has used its free trial of 100 drops. This is a constant 
     * function which does not alter the state of the contract and therefore does not require any gas 
     * or a signature to be executed. 
     * 
     * @param _addressOfToken The address of the token being queried.
     * 
     * @return true if the token being queried has not used its 100 first free trial drops, false
     * otherwise.
     * */
    function tokenHasFreeTrial(address _addressOfToken) public view returns(bool) {
        return trialDrops[_addressOfToken] < maxTrialDrops;
    }
    
    
    /**
     * Checks how many remaining free trial drops a token has.
     * 
     * @param _addressOfToken the address of the token being queried.
     * 
     * @return the total remaining free trial drops of a token.
     * */
    function getRemainingTrialDrops(address _addressOfToken) public view returns(uint256) {
        if(tokenHasFreeTrial(_addressOfToken)) {
            return maxTrialDrops.sub(trialDrops[_addressOfToken]);
        } 
        return 0;
    }
    
    
    /**
     * Allows for the price of drops to be changed by the owner of the contract. Any attempt made by 
     * any other account to invoke the function will result in a loss of gas and the price will remain 
     * untampered.
     * 
     * @return true if function executes successfully, false otherwise.
     * */
    function setRate(uint256 _newRate) public onlyOwner returns(bool) {
        require(
            _newRate != rate 
            && _newRate > 0
        );
        RateChanged(rate, _newRate);
        rate = _newRate;
        uint256 eth = 1 ether;
        dropUnitPrice = eth.div(rate);
        return true;
    }
    
    
    function getRate() public view returns(uint256) {
        return rate;
    }

    
    /**
     * Allows for the maximum number of participants to be queried. This is a constant function 
     * which does not alter the state of the contract and therefore does not require any gas or a
     * signature to be executed. 
     * 
     * @return the maximum number of recipients per transaction.
     * */
    function getMaxDropsPerTx() public view returns(uint256) {
        return maxDropsPerTx;
    }
    
    
    /**
     * Allows for the maximum number of recipients per transaction to be changed by the owner. 
     * Any attempt made by any other account to invoke the function will result in a loss of gas 
     * and the maximum number of recipients will remain untampered.
     * 
     * @return true if function executes successfully, false otherwise.
     * */
    function setMaxDrops(uint256 _maxDrops) public onlyOwner returns(bool) {
        require(_maxDrops >= 100);
        MaxDropsChanged(maxDropsPerTx, _maxDrops);
        maxDropsPerTx = _maxDrops;
        return true;
    }
    
    /**
     * Allows for the bonus to be changed at any point in time by the owner of the contract. Any
     * attempt made by any other account to invoke the function will result in a loss of gas and 
     * the bonus will remain untampered.
     * 
     * @param _newBonus The value of the new bonus to be set.
     * */
    function setBonus(uint256 _newBonus) public onlyOwner returns(bool) {
        require(bonus != _newBonus);
        BonustChanged(bonus, _newBonus);
        bonus = _newBonus;
    }
    
    
    /**
     * Allows for bonus drops to be granted to a recipient address by the owner of the contract. 
     * Any attempt made by any other account to invoke the function will result in a loss of gas 
     * and the bonus drops of the recipient will remain untampered.
     * 
     * @param _addr The address which will receive bonus credits.
     * @param _bonusDrops The amount of bonus drops to be granted.
     * 
     * @return true if function executes successfully, false otherwise.
     * */
    function grantBonusDrops(address _addr, uint256 _bonusDrops) public onlyOwner returns(bool) {
        require(
            _addr != address(0) 
            && _bonusDrops > 0
        );
        bonusDropsOf[_addr] = bonusDropsOf[_addr].add(_bonusDrops);
        BonusCreditGranted(_addr, _bonusDrops);
        return true;
    }
    
    
    /**
     * Allows for bonus drops of an address to be revoked by the owner of the contract. Any 
     * attempt made by any other account to invoke the function will result in a loss of gas
     * and the bonus drops of the recipient will remain untampered.
     * 
     * @param _addr The address to revoke bonus credits from.
     * @param _bonusDrops The amount of bonus drops to be revoked.
     * 
     * @return true if function executes successfully, false otherwise.
     * */
    function revokeBonusCreditOf(address _addr, uint256 _bonusDrops) public onlyOwner returns(bool) {
        require(
            _addr != address(0) 
            && bonusDropsOf[_addr] >= _bonusDrops
        );
        bonusDropsOf[_addr] = bonusDropsOf[_addr].sub(_bonusDrops);
        BonusCreditRevoked(_addr, _bonusDrops);
        return true;
    }
    
    
    /**
     * Allows for the credit of an address to be queried. This is a constant function which
     * does not alter the state of the contract and therefore does not require any gas or a
     * signature to be executed. 
     * 
     * @param _addr The address of which to query the credit balance of. 
     * 
     * @return The total amount of credit the address has (minus any bonus credits).
     * */
    function getDropsOf(address _addr) public view returns(uint256) {
        return (ethBalanceOf[_addr].mul(rate)).div(10 ** 18);
    }
    
    
    /**
     * Allows for the bonus credit of an address to be queried. This is a constant function 
     * which does not alter the state of the contract and therefore does not require any gas 
     * or a signature to be executed. 
     * 
     * @param _addr The address of which to query the bonus credits. 
     * 
     * @return The total amount of bonus credit the address has (minus non-bonus credit).
     * */
    function getBonusDropsOf(address _addr) public view returns(uint256) {
        return bonusDropsOf[_addr];
    }
    
    
    /**
     * Allows for the total credit (bonus + non-bonus) of an address to be queried. This is a 
     * constant function which does not alter the state of the contract and therefore does not  
     * require any gas or a signature to be executed. 
     * 
     * @param _addr The address of which to query the total credits. 
     * 
     * @return The total amount of credit the address has (bonus + non-bonus credit).
     * */
    function getTotalDropsOf(address _addr) public view returns(uint256) {
        return getDropsOf(_addr).add(getBonusDropsOf(_addr));
    }
    
    
    /**
     * Allows for the total ETH balance of an address to be queried. This is a constant
     * function which does not alter the state of the contract and therefore does not  
     * require any gas or a signature to be executed. 
     * 
     * @param _addr The address of which to query the total ETH balance. 
     * 
     * @return The total amount of ETH balance the address has.
     * */
    function getEthBalanceOf(address _addr) public view returns(uint256) {
        return ethBalanceOf[_addr];
    }

    
    /**
     * Allows for suspected fraudulent ERC20 tokens to be banned from being airdropped by the 
     * owner of the contract. Any attempt made by any other account to invoke the function will 
     * result in a loss of gas and the token to remain unbanned.
     * 
     * @param _tokenAddr The contract address of the ERC20 token to be banned from being airdropped. 
     * 
     * @return true if function executes successfully, false otherwise.
     * */
    function banToken(address _tokenAddr) public onlyOwner returns(bool) {
        require(!tokenIsBanned[_tokenAddr]);
        tokenIsBanned[_tokenAddr] = true;
        TokenBanned(_tokenAddr);
        return true;
    }
    
    
    /**
     * Allows for previously suspected fraudulent ERC20 tokens to become unbanned by the owner
     * of the contract. Any attempt made by any other account to invoke the function will 
     * result in a loss of gas and the token to remain banned.
     * 
     * @param _tokenAddr The contract address of the ERC20 token to be banned from being airdropped. 
     * 
     * @return true if function executes successfully, false otherwise.
     **/
    function unbanToken(address _tokenAddr) public onlyOwner returns(bool) {
        require(tokenIsBanned[_tokenAddr]);
        tokenIsBanned[_tokenAddr] = false;
        TokenUnbanned(_tokenAddr);
        return true;
    }
    
    
    /**
     * Allows for the allowance of a token from its owner to this contract to be queried. 
     * 
     * As part of the ERC20 standard all tokens which fall under this category have an allowance 
     * function which enables owners of tokens to allow (or give permission) to another address 
     * to spend tokens on behalf of the owner. This contract uses this as part of its protocol.
     * Users must first give permission to the contract to transfer tokens on their behalf, however,
     * this does not mean that the tokens will ever be transferrable without the permission of the 
     * owner. This is a security feature which was implemented on this contract. It is not possible
     * for the owner of this contract or anyone else to transfer the tokens which belong to others. 
     * 
     * @param _addr The address of the token's owner.
     * @param _addressOfToken The contract address of the ERC20 token.
     * 
     * @return The ERC20 token allowance from token owner to this contract. 
     * */
    function getTokenAllowance(address _addr, address _addressOfToken) public view returns(uint256) {
        ERCInterface token = ERCInterface(_addressOfToken);
        return token.allowance(_addr, address(this));
    }
    
    
    /**
     * Allows users to buy and receive credits automatically when sending ETH to the contract address.
     * */
    function() public payable {
        ethBalanceOf[msg.sender] = ethBalanceOf[msg.sender].add(msg.value);
        CreditPurchased(msg.sender, msg.value, msg.value.mul(rate));
    }

    
    /**
     * Allows users to withdraw their ETH for drops which they have bought and not used. This 
     * will result in the credit of the user being set back to 0. However, bonus credits will 
     * remain the same because they are granted when users use their drops. 
     * 
     * @param _eth The amount of ETH to withdraw
     * 
     * @return true if function executes successfully, false otherwise.
     * */
    function withdrawEth(uint256 _eth) public returns(bool) {
        require(
            ethBalanceOf[msg.sender] >= _eth
            && _eth > 0 
        );
        uint256 toTransfer = _eth;
        ethBalanceOf[msg.sender] = ethBalanceOf[msg.sender].sub(_eth);
        msg.sender.transfer(toTransfer);
        EthWithdrawn(msg.sender, toTransfer);
    }
    
    
    /**
     * Allows for refunds to be made by the owner of the contract. Any attempt made by any other account 
     * to invoke the function will result in a loss of gas and no refunds will be made.
     * */
    function issueRefunds(address[] _addrs) public onlyOwner returns(bool) {
        require(_addrs.length <= maxDropsPerTx);
        for(uint i = 0; i < _addrs.length; i++) {
            if(_addrs[i] != address(0) && ethBalanceOf[_addrs[i]] > 0) {
                uint256 toRefund = ethBalanceOf[_addrs[i]];
                ethBalanceOf[_addrs[i]] = 0;
                _addrs[i].transfer(toRefund);
                RefundIssued(_addrs[i], toRefund);
            }
        }
    }
    
    
    /**
     * Allows for the distribution of an ERC20 token to be transferred to up to 100 recipients at 
     * a time. This function only facilitates batch transfers of constant values (i.e., all recipients
     * will receive the same amount of tokens).
     * 
     * @param _addressOfToken The contract address of an ERC20 token.
     * @param _recipients The list of addresses which will receive tokens. 
     * @param _value The amount of tokens all addresses will receive. 
     * 
     * @return true if function executes successfully, false otherwise.
     * */
    function singleValueAirdrop(address _addressOfToken,  address[] _recipients, uint256 _value) public returns(bool) {
        ERCInterface token = ERCInterface(_addressOfToken);
        require(
            _recipients.length <= maxDropsPerTx 
            && (
                getTotalDropsOf(msg.sender)>= _recipients.length 
                || tokenHasFreeTrial(_addressOfToken) 
            )
            && !tokenIsBanned[_addressOfToken]
        );
        for(uint i = 0; i < _recipients.length; i++) {
            if(_recipients[i] != address(0)) {
                token.transferFrom(msg.sender, _recipients[i], _value);
            }
        }
        if(tokenHasFreeTrial(_addressOfToken)) {
            trialDrops[_addressOfToken] = trialDrops[_addressOfToken].add(_recipients.length);
        } else {
            updateMsgSenderBonusDrops(_recipients.length);
        }
        AirdropInvoked(msg.sender, _recipients.length);
        return true;
    }
    
    
    /**
     * Allows for the distribution of an ERC20 token to be transferred to up to 100 recipients at 
     * a time. This function facilitates batch transfers of differing values (i.e., all recipients
     * can receive different amounts of tokens).
     * 
     * @param _addressOfToken The contract address of an ERC20 token.
     * @param _recipients The list of addresses which will receive tokens. 
     * @param _values The corresponding values of tokens which each address will receive.
     * 
     * @return true if function executes successfully, false otherwise.
     * */    
    function multiValueAirdrop(address _addressOfToken,  address[] _recipients, uint256[] _values) public returns(bool) {
        ERCInterface token = ERCInterface(_addressOfToken);
        require(
            _recipients.length <= maxDropsPerTx 
            && _recipients.length == _values.length 
            && (
                getTotalDropsOf(msg.sender) >= _recipients.length
                || tokenHasFreeTrial(_addressOfToken)
            )
            && !tokenIsBanned[_addressOfToken]
        );
        for(uint i = 0; i < _recipients.length; i++) {
            if(_recipients[i] != address(0) && _values[i] > 0) {
                token.transferFrom(msg.sender, _recipients[i], _values[i]);
            }
        }
        if(tokenHasFreeTrial(_addressOfToken)) {
            trialDrops[_addressOfToken] = trialDrops[_addressOfToken].add(_recipients.length);
        } else {
            updateMsgSenderBonusDrops(_recipients.length);
        }
        AirdropInvoked(msg.sender, _recipients.length);
        return true;
    }
    
    
    /**
     * Invoked internally by the airdrop functions. The purpose of thie function is to grant bonus 
     * drops to users who spend their ETH airdropping tokens, and to remove bonus drops when users 
     * no longer have ETH in their account but do have some bonus drops when airdropping tokens.
     * 
     * @param _drops The amount of recipients which received tokens from the airdrop.
     * */
    function updateMsgSenderBonusDrops(uint256 _drops) internal {
        if(_drops <= getDropsOf(msg.sender)) {
            bonusDropsOf[msg.sender] = bonusDropsOf[msg.sender].add(_drops.mul(bonus).div(100));
            ethBalanceOf[msg.sender] = ethBalanceOf[msg.sender].sub(_drops.mul(dropUnitPrice));
            owner.transfer(_drops.mul(dropUnitPrice));
        } else {
            uint256 remainder = _drops.sub(getDropsOf(msg.sender));
            if(ethBalanceOf[msg.sender] > 0) {
                bonusDropsOf[msg.sender] = bonusDropsOf[msg.sender].add(getDropsOf(msg.sender).mul(bonus).div(100));
                owner.transfer(ethBalanceOf[msg.sender]);
                ethBalanceOf[msg.sender] = 0;
            }
            bonusDropsOf[msg.sender] = bonusDropsOf[msg.sender].sub(remainder);
        }
    }
    

    /**
     * Allows for any ERC20 tokens which have been mistakenly  sent to this contract to be returned 
     * to the original sender by the owner of the contract. Any attempt made by any other account 
     * to invoke the function will result in a loss of gas and no tokens will be transferred out.
     * 
     * @param _addressOfToken The contract address of an ERC20 token.
     * @param _recipient The address which will receive tokens. 
     * @param _value The amount of tokens to refund.
     * 
     * @return true if function executes successfully, false otherwise.
     * */  
    function withdrawERC20Tokens(address _addressOfToken,  address _recipient, uint256 _value) public onlyOwner returns(bool){
        require(
            _addressOfToken != address(0)
            && _recipient != address(0)
            && _value > 0
        );
        ERCInterface token = ERCInterface(_addressOfToken);
        token.transfer(_recipient, _value);
        ERC20TokensWithdrawn(_addressOfToken, _recipient, _value);
        return true;
    }
}

Contract ABI

[{"constant":true,"inputs":[],"name":"maxDropsPerTx","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newBonus","type":"uint256"}],"name":"setBonus","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenAddr","type":"address"}],"name":"banToken","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_addressOfToken","type":"address"}],"name":"tokenHasFreeTrial","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"},{"name":"_bonusDrops","type":"uint256"}],"name":"grantBonusDrops","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"rate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newRate","type":"uint256"}],"name":"setRate","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getMaxDropsPerTx","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"tokenIsBanned","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_addr","type":"address"}],"name":"getTotalDropsOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_addrs","type":"address[]"}],"name":"issueRefunds","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"trialDrops","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_addr","type":"address"}],"name":"getDropsOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_addressOfToken","type":"address"},{"name":"_recipients","type":"address[]"},{"name":"_values","type":"uint256[]"}],"name":"multiValueAirdrop","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"ethBalanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"bonus","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"bonusDropsOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_addressOfToken","type":"address"},{"name":"_recipients","type":"address[]"},{"name":"_value","type":"uint256"}],"name":"singleValueAirdrop","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_addr","type":"address"}],"name":"getBonusDropsOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"dropUnitPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_addressOfToken","type":"address"}],"name":"getRemainingTrialDrops","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_addr","type":"address"}],"name":"getEthBalanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_addressOfToken","type":"address"},{"name":"_recipient","type":"address"},{"name":"_value","type":"uint256"}],"name":"withdrawERC20Tokens","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"website","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maxTrialDrops","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_eth","type":"uint256"}],"name":"withdrawEth","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"},{"name":"_bonusDrops","type":"uint256"}],"name":"revokeBonusCreditOf","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_addr","type":"address"},{"name":"_addressOfToken","type":"address"}],"name":"getTokenAllowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_maxDrops","type":"uint256"}],"name":"setMaxDrops","outputs":[{"name":"","type":"bool"}],"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":"_tokenAddr","type":"address"}],"name":"unbanToken","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"credit","type":"uint256"}],"name":"BonusCreditGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":false,"name":"credit","type":"uint256"}],"name":"BonusCreditRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"by","type":"address"},{"indexed":false,"name":"etherValue","type":"uint256"},{"indexed":false,"name":"credit","type":"uint256"}],"name":"CreditPurchased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"by","type":"address"},{"indexed":false,"name":"creditConsumed","type":"uint256"}],"name":"AirdropInvoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"from","type":"uint256"},{"indexed":false,"name":"to","type":"uint256"}],"name":"BonustChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"tokenAddress","type":"address"}],"name":"TokenBanned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"tokenAddress","type":"address"}],"name":"TokenUnbanned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"by","type":"address"},{"indexed":false,"name":"totalWei","type":"uint256"}],"name":"EthWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"from","type":"uint256"},{"indexed":false,"name":"to","type":"uint256"}],"name":"RateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"from","type":"uint256"},{"indexed":false,"name":"to","type":"uint256"}],"name":"MaxDropsChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"totalWei","type":"uint256"}],"name":"RefundIssued","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"token","type":"address"},{"indexed":false,"name":"sentTo","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"ERC20TokensWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

Contract Creation Code

6060604052341561000f57600080fd5b60008054600160a060020a033316600160a060020a0319909116179055612710600555655af3107a40006006556014600755606460088190556009556118778061005a6000396000f3006060604052600436106101875763ffffffff60e060020a60003504166303a19a4f811461021d5780630b98f9751461024257806318fe1a8d1461026c57806323a0fb021461028b5780632a501a43146102aa5780632c4e722e146102cc57806334fcf437146102df5780633f92edaf146102f55780634db67caf146103085780634f95e96014610327578063528976de14610346578063656b6b6b14610395578063679aefce146103b457806371f124c5146103c7578063724ef94c146103e65780637252bbf21461048357806375b4d78c146104a25780638da5cb5b146104b55780638eb5f58e146104e45780639d06583814610503578063a379298514610562578063a39a2b7614610581578063adc7612614610594578063b28fc973146105b3578063bcdd1e13146105d2578063beb0a416146105fa578063c13e285d14610684578063c311d04914610697578063c44412e3146106ad578063ea7ee010146106cf578063eb1cfa82146106f4578063f2fde38b1461070a578063f332a2451461072b575b600160a060020a0333166000908152600260205260409020546101b0903463ffffffff61074a16565b600160a060020a0333166000818152600260205260409020919091556005547fc4174c525ef524021f6e3727a9bbe7fa797780670e51c9cd76ceb8e5dfe6c97b90349061020490829063ffffffff61076016565b60405191825260208201526040908101905180910390a2005b341561022857600080fd5b61023061078f565b60405190815260200160405180910390f35b341561024d57600080fd5b610258600435610795565b604051901515815260200160405180910390f35b341561027757600080fd5b610258600160a060020a0360043516610805565b341561029657600080fd5b610258600160a060020a03600435166108a0565b34156102b557600080fd5b610258600160a060020a03600435166024356108c2565b34156102d757600080fd5b610230610985565b34156102ea57600080fd5b61025860043561098b565b341561030057600080fd5b610230610a2d565b341561031357600080fd5b610258600160a060020a0360043516610a33565b341561033257600080fd5b610230600160a060020a0360043516610a48565b341561035157600080fd5b6102586004602481358181019083013580602081810201604051908101604052809392919081815260200183836020028082843750949650610a6b95505050505050565b34156103a057600080fd5b610230600160a060020a0360043516610c35565b34156103bf57600080fd5b610230610c47565b34156103d257600080fd5b610230600160a060020a0360043516610c4d565b34156103f157600080fd5b61025860048035600160a060020a031690604460248035908101908301358060208082020160405190810160405280939291908181526020018383602002808284378201915050505050509190803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843750949650610c9595505050505050565b341561048e57600080fd5b610230600160a060020a0360043516610eac565b34156104ad57600080fd5b610230610ebe565b34156104c057600080fd5b6104c8610ec4565b604051600160a060020a03909116815260200160405180910390f35b34156104ef57600080fd5b610230600160a060020a0360043516610ed3565b341561050e57600080fd5b61025860048035600160a060020a03169060446024803590810190830135806020808202016040519081016040528093929190818152602001838360200280828437509496505093359350610ee592505050565b341561056d57600080fd5b610230600160a060020a036004351661100d565b341561058c57600080fd5b610230611028565b341561059f57600080fd5b610230600160a060020a036004351661102e565b34156105be57600080fd5b610230600160a060020a0360043516611078565b34156105dd57600080fd5b610258600160a060020a0360043581169060243516604435611093565b341561060557600080fd5b61060d6111bd565b60405160208082528190810183818151815260200191508051906020019080838360005b83811015610649578082015183820152602001610631565b50505050905090810190601f1680156106765780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561068f57600080fd5b6102306111f4565b34156106a257600080fd5b6102586004356111fa565b34156106b857600080fd5b610258600160a060020a03600435166024356112e5565b34156106da57600080fd5b610230600160a060020a03600435811690602435166113c1565b34156106ff57600080fd5b610258600435611444565b341561071557600080fd5b610729600160a060020a03600435166114b3565b005b341561073657600080fd5b610258600160a060020a036004351661156a565b60008282018381101561075957fe5b9392505050565b600082151561077157506000610789565b5081810281838281151561078157fe5b041461078957fe5b92915050565b60085481565b6000805433600160a060020a039081169116146107b157600080fd5b6007548214156107c057600080fd5b7fc233b8877183b2d7aeb5d3baf2b545240e5c94d7a1f5ed6938ff87a1cf95a2d16007548360405191825260208201526040908101905180910390a160079190915590565b6000805433600160a060020a0390811691161461082157600080fd5b600160a060020a03821660009081526003602052604090205460ff161561084757600080fd5b600160a060020a03821660008181526003602052604090819020805460ff191660011790557f5f9fbe3bc9355d7eb80002cf096327839eecbdf5ffc15955fbe7609433b18c55905160405180910390a25060015b919050565b600954600160a060020a03821660009081526004602052604090205410919050565b6000805433600160a060020a039081169116146108de57600080fd5b600160a060020a038316158015906108f65750600082115b151561090157600080fd5b600160a060020a03831660009081526001602052604090205461092a908363ffffffff61074a16565b600160a060020a0384166000818152600160205260409081902092909255907f17641426a9871fbd505cf22302be09d58b40768a741ae1b9a270bdb46ff72cf69084905190815260200160405180910390a250600192915050565b60055481565b60008054819033600160a060020a039081169116146109a957600080fd5b60055483141580156109bb5750600083115b15156109c657600080fd5b7f4ac9052a820bf4f8c02d7588587cae835573b5b99ea7ad4ca002f17f319f71866005548460405191825260208201526040908101905180910390a1506005829055670de0b6b3a7640000610a21818463ffffffff61160216565b60065550600192915050565b60085490565b60036020526000908152604090205460ff1681565b6000610789610a568361100d565b610a5f84610c4d565b9063ffffffff61074a16565b600080548190819033600160a060020a03908116911614610a8b57600080fd5b60085484511115610a9b57600080fd5b600091505b8351821015610c2e576000848381518110610ab757fe5b90602001906020020151600160a060020a031614158015610b125750600060026000868581518110610ae557fe5b90602001906020020151600160a060020a0316600160a060020a0316815260200190815260200160002054115b15610c235760026000858481518110610b2757fe5b90602001906020020151600160a060020a0316600160a060020a03168152602001908152602001600020549050600060026000868581518110610b6657fe5b90602001906020020151600160a060020a03168152602081019190915260400160002055838281518110610b9657fe5b90602001906020020151600160a060020a031681156108fc0282604051600060405180830381858888f193505050501515610bd057600080fd5b838281518110610bdc57fe5b90602001906020020151600160a060020a03167fa171b6942063c6f2800ce40a780edce37baa2b618571b11eedd1e69e626e7d768260405190815260200160405180910390a25b600190910190610aa0565b5050919050565b60046020526000908152604090205481565b60055490565b600554600160a060020a038216600090815260026020526040812054909161078991670de0b6b3a764000091610c89919063ffffffff61076016565b9063ffffffff61160216565b6000806000859150600854855111158015610cb1575083518551145b8015610cd457508451610cc333610a48565b101580610cd45750610cd4866108a0565b8015610cf95750600160a060020a03861660009081526003602052604090205460ff16155b1515610d0457600080fd5b5060005b8451811015610e02576000858281518110610d1f57fe5b90602001906020020151600160a060020a031614158015610d5557506000848281518110610d4957fe5b90602001906020020151115b15610dfa5781600160a060020a03166323b872dd33878481518110610d7657fe5b90602001906020020151878581518110610d8c57fe5b9060200190602002015160405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401600060405180830381600087803b1515610de557600080fd5b6102c65a03f11515610df657600080fd5b5050505b600101610d08565b610e0b866108a0565b15610e5857610e3a8551600160a060020a0388166000908152600460205260409020549063ffffffff61074a16565b600160a060020a038716600090815260046020526040902055610e62565b610e628551611617565b33600160a060020a03167f22a4421eda5c487da9a0a4a06f0c582468448c11c1d02478e2442686d8de589a865160405190815260200160405180910390a250600195945050505050565b60026020526000908152604090205481565b60075481565b600054600160a060020a031681565b60016020526000908152604090205481565b6000806000859150600854855111158015610f1757508451610f0633610a48565b101580610f175750610f17866108a0565b8015610f3c5750600160a060020a03861660009081526003602052604090205460ff16155b1515610f4757600080fd5b5060005b8451811015610e02576000858281518110610f6257fe5b90602001906020020151600160a060020a0316146110055781600160a060020a03166323b872dd33878481518110610f9657fe5b906020019060200201518760405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401600060405180830381600087803b1515610ff057600080fd5b6102c65a03f1151561100157600080fd5b5050505b600101610f4b565b600160a060020a031660009081526001602052604090205490565b60065481565b6000611039826108a0565b1561107057600160a060020a0382166000908152600460205260409020546009546110699163ffffffff61183916565b905061089b565b506000919050565b600160a060020a031660009081526002602052604090205490565b60008054819033600160a060020a039081169116146110b157600080fd5b600160a060020a038516158015906110d15750600160a060020a03841615155b80156110dd5750600083115b15156110e857600080fd5b5083600160a060020a03811663a9059cbb858560006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561114757600080fd5b6102c65a03f1151561115857600080fd5b50505060405180519050507ee763f7778b8ceef7270c89b7d1df1008b0e482da39c43831417733af96fb0d858585604051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a1506001949350505050565b60408051908101604052601681527f7777772e646170706c6561697264726f70732e636f6d00000000000000000000602082015281565b60095481565b600160a060020a03331660009081526002602052604081205481908390108015906112255750600083115b151561123057600080fd5b50600160a060020a033316600090815260026020526040902054829061125c908263ffffffff61183916565b600160a060020a03331660008181526002602052604090819020929092559082156108fc0290839051600060405180830381858888f1935050505015156112a257600080fd5b33600160a060020a03167f8455ae6be5d92f1df1c3c1484388e247a36c7e60d72055ae216dbc258f257d4b8260405190815260200160405180910390a250919050565b6000805433600160a060020a0390811691161461130157600080fd5b600160a060020a038316158015906113325750600160a060020a038316600090815260016020526040902054829010155b151561133d57600080fd5b600160a060020a038316600090815260016020526040902054611366908363ffffffff61183916565b600160a060020a0384166000818152600160205260409081902092909255907fc1bc87fca69dd3948590175e7c7e66a498d583b1bf99540547fc38e7f10058599084905190815260200160405180910390a250600192915050565b600081600160a060020a03811663dd62ed3e8530856040516020015260405160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401602060405180830381600087803b151561142257600080fd5b6102c65a03f1151561143357600080fd5b505050604051805195945050505050565b6000805433600160a060020a0390811691161461146057600080fd5b606482101561146e57600080fd5b7f9b7e3ed6ece2694ef31c25bc941a429a17a30546dd406649a5b7178d76c215996008548360405191825260208201526040908101905180910390a150600855600190565b60005433600160a060020a039081169116146114ce57600080fd5b600160a060020a038116158015906114f45750600054600160a060020a03828116911614155b15156114ff57600080fd5b600054600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000805433600160a060020a0390811691161461158657600080fd5b600160a060020a03821660009081526003602052604090205460ff1615156115ad57600080fd5b600160a060020a03821660008181526003602052604090819020805460ff191690557fe9c9a473410d8fd0bb91117f70a4b750bce859ab398b18cc49160f5ff41d66e4905160405180910390a2506001919050565b6000818381151561160f57fe5b049392505050565b600061162233610c4d565b82116117245761166a6116456064610c896007548661076090919063ffffffff16565b600160a060020a0333166000908152600160205260409020549063ffffffff61074a16565b600160a060020a0333166000908152600160205260409020556006546116c09061169b90849063ffffffff61076016565b600160a060020a0333166000908152600260205260409020549063ffffffff61183916565b600160a060020a0333811660009081526002602052604081209290925590546006549116906108fc906116fa90859063ffffffff61076016565b9081150290604051600060405180830381858888f19350505050151561171f57600080fd5b611835565b61173d61173033610c4d565b839063ffffffff61183916565b600160a060020a0333166000908152600260205260408120549192509011156117f2576117836116456064610c8960075461177733610c4d565b9063ffffffff61076016565b600160a060020a0333811660009081526001602090815260408083209490945581546002909152908390205491169181156108fc02919051600060405180830381858888f1935050505015156117d857600080fd5b600160a060020a0333166000908152600260205260408120555b600160a060020a03331660009081526001602052604090205461181b908263ffffffff61183916565b600160a060020a0333166000908152600160205260409020555b5050565b60008282111561184557fe5b509003905600a165627a7a72305820a8090f9412a7d9c8f57e4257f36c53e68d08da3bbae797eb767bd2d9f8077a5f0029

Swarm Source

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