ETH Price: $2,397.39 (+0.34%)

Contract

0x25C7b64A93Eb1261E130eC21a3e9918CaA38b611
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

More Info

Private Name Tags

TokenTracker

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve209338532024-10-10 7:55:5918 hrs ago1728546959IN
wrapped-virgin-gen-0-cryptokitties: WVG0 Token
0 ETH0.0004823410.45767766
Deposit Kitties ...209338472024-10-10 7:54:4718 hrs ago1728546887IN
wrapped-virgin-gen-0-cryptokitties: WVG0 Token
0 ETH0.0094173110.29722237
Deposit Kitties ...209338452024-10-10 7:54:2318 hrs ago1728546863IN
wrapped-virgin-gen-0-cryptokitties: WVG0 Token
0 ETH0.010177379.47925626
Approve209212552024-10-08 13:47:472 days ago1728395267IN
wrapped-virgin-gen-0-cryptokitties: WVG0 Token
0 ETH0.0011446124.64927049
Deposit Kitties ...209050322024-10-06 7:30:474 days ago1728199847IN
wrapped-virgin-gen-0-cryptokitties: WVG0 Token
0 ETH0.000891336.67363419
Deposit Kitties ...209050242024-10-06 7:29:114 days ago1728199751IN
wrapped-virgin-gen-0-cryptokitties: WVG0 Token
0 ETH0.000965256.40682547
Burn Tokens And ...208995832024-10-05 13:17:595 days ago1728134279IN
wrapped-virgin-gen-0-cryptokitties: WVG0 Token
0 ETH0.000957189.83428736
Burn Tokens And ...208984232024-10-05 9:25:355 days ago1728120335IN
wrapped-virgin-gen-0-cryptokitties: WVG0 Token
0 ETH0.000461676.1204415
Deposit Kitties ...208979142024-10-05 7:42:595 days ago1728114179IN
wrapped-virgin-gen-0-cryptokitties: WVG0 Token
0 ETH0.000799095.9830052
Deposit Kitties ...208979042024-10-05 7:40:595 days ago1728114059IN
wrapped-virgin-gen-0-cryptokitties: WVG0 Token
0 ETH0.000901495.98360754
Deposit Kitties ...208879152024-10-03 22:17:597 days ago1727993879IN
wrapped-virgin-gen-0-cryptokitties: WVG0 Token
0 ETH0.001049816.96809994
Deposit Kitties ...208878322024-10-03 22:01:237 days ago1727992883IN
wrapped-virgin-gen-0-cryptokitties: WVG0 Token
0 ETH0.001356389.00295476
Deposit Kitties ...208550622024-09-29 8:20:5911 days ago1727598059IN
wrapped-virgin-gen-0-cryptokitties: WVG0 Token
0 ETH0.001409410.5526048
Deposit Kitties ...208550562024-09-29 8:19:4711 days ago1727597987IN
wrapped-virgin-gen-0-cryptokitties: WVG0 Token
0 ETH0.0015627110.37243836
Burn Tokens And ...208404152024-09-27 7:18:1113 days ago1727421491IN
wrapped-virgin-gen-0-cryptokitties: WVG0 Token
0 ETH0.0009283211.57232252
Burn Tokens And ...208404102024-09-27 7:17:1113 days ago1727421431IN
wrapped-virgin-gen-0-cryptokitties: WVG0 Token
0 ETH0.0008832411.01041037
Burn Tokens And ...208403922024-09-27 7:13:3513 days ago1727421215IN
wrapped-virgin-gen-0-cryptokitties: WVG0 Token
0 ETH0.0012019414.9833349
Burn Tokens And ...208390372024-09-27 2:41:3513 days ago1727404895IN
wrapped-virgin-gen-0-cryptokitties: WVG0 Token
0 ETH0.0012818115.97650978
Burn Tokens And ...208390292024-09-27 2:39:5913 days ago1727404799IN
wrapped-virgin-gen-0-cryptokitties: WVG0 Token
0 ETH0.0011247114.01839761
Burn Tokens And ...208390222024-09-27 2:38:3513 days ago1727404715IN
wrapped-virgin-gen-0-cryptokitties: WVG0 Token
0 ETH0.0010909613.59774315
Burn Tokens And ...208390092024-09-27 2:35:5913 days ago1727404559IN
wrapped-virgin-gen-0-cryptokitties: WVG0 Token
0 ETH0.0011025713.74254826
Burn Tokens And ...208389712024-09-27 2:28:2313 days ago1727404103IN
wrapped-virgin-gen-0-cryptokitties: WVG0 Token
0 ETH0.0010454213.03021857
Burn Tokens And ...208389482024-09-27 2:23:4713 days ago1727403827IN
wrapped-virgin-gen-0-cryptokitties: WVG0 Token
0 ETH0.0010036112.50903414
Burn Tokens And ...208389332024-09-27 2:20:4713 days ago1727403647IN
wrapped-virgin-gen-0-cryptokitties: WVG0 Token
0 ETH0.0010714113.35411727
Burn Tokens And ...208387792024-09-27 1:49:5914 days ago1727401799IN
wrapped-virgin-gen-0-cryptokitties: WVG0 Token
0 ETH0.0010344212.89309337
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
WrappedVG0

Compiler Version
v0.5.8+commit.23d335f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-02-12
*/

pragma solidity ^0.5.8;

/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
interface IERC20 {
    function transfer(address to, uint256 value) external returns (bool);

    function approve(address spender, uint256 value) external returns (bool);

    function transferFrom(address from, address to, uint256 value) external returns (bool);

    function totalSupply() external view returns (uint256);

    function balanceOf(address who) external view returns (uint256);

    function allowance(address owner, address spender) external view returns (uint256);

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

    event Approval(address indexed owner, address indexed spender, uint256 value);
}


/**
 * @title SafeMath
 * @dev Unsigned math operations with safety checks that revert on error
 */
library SafeMath {
    /**
    * @dev Multiplies two unsigned integers, reverts on overflow.
    */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring '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;
        }

        uint256 c = a * b;
        require(c / a == b);

        return c;
    }

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

        return c;
    }

    /**
    * @dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend).
    */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a);
        uint256 c = a - b;

        return c;
    }

    /**
    * @dev Adds two unsigned integers, reverts on overflow.
    */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a);

        return c;
    }

    /**
    * @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo),
    * reverts when dividing by zero.
    */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b != 0);
        return a % b;
    }
}


/**
 * @title Standard ERC20 token
 *
 * @dev Implementation of the basic standard token.
 * https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md
 * Originally based on code by FirstBlood:
 * https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol
 *
 * This implementation emits additional Approval events, allowing applications to reconstruct the allowance status for
 * all accounts just by listening to said events. Note that this isn't required by the specification, and other
 * compliant implementations may not do it.
 */
contract ERC20 is IERC20 {
    using SafeMath for uint256;

    mapping (address => uint256) private _balances;

    mapping (address => mapping (address => uint256)) private _allowed;

    uint256 private _totalSupply;

    /**
    * @dev Total number of tokens in existence
    */
    function totalSupply() public view returns (uint256) {
        return _totalSupply;
    }

    /**
    * @dev Gets the balance of the specified address.
    * @param owner The address to query the balance of.
    * @return An uint256 representing the amount owned by the passed address.
    */
    function balanceOf(address owner) public view returns (uint256) {
        return _balances[owner];
    }

    /**
     * @dev Function to check the amount of tokens that an owner allowed to a spender.
     * @param owner address The address which owns the funds.
     * @param spender address The address which will spend the funds.
     * @return A uint256 specifying the amount of tokens still available for the spender.
     */
    function allowance(address owner, address spender) public view returns (uint256) {
        return _allowed[owner][spender];
    }

    /**
    * @dev Transfer token for a specified address
    * @param to The address to transfer to.
    * @param value The amount to be transferred.
    */
    function transfer(address to, uint256 value) public returns (bool) {
        _transfer(msg.sender, to, value);
        return true;
    }

    /**
     * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.
     * Beware that changing an allowance with this method brings the risk that someone may use both the old
     * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this
     * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     * @param spender The address which will spend the funds.
     * @param value The amount of tokens to be spent.
     */
    function approve(address spender, uint256 value) public returns (bool) {
        require(spender != address(0));

        _allowed[msg.sender][spender] = value;
        emit Approval(msg.sender, spender, value);
        return true;
    }

    /**
     * @dev Transfer tokens from one address to another.
     * Note that while this function emits an Approval event, this is not required as per the specification,
     * and other compliant implementations may not emit the event.
     * @param from address The address which you want to send tokens from
     * @param to address The address which you want to transfer to
     * @param value uint256 the amount of tokens to be transferred
     */
    function transferFrom(address from, address to, uint256 value) public returns (bool) {
        _allowed[from][msg.sender] = _allowed[from][msg.sender].sub(value);
        _transfer(from, to, value);
        emit Approval(from, msg.sender, _allowed[from][msg.sender]);
        return true;
    }

    /**
     * @dev Increase the amount of tokens that an owner allowed to a spender.
     * approve should be called when allowed_[_spender] == 0. To increment
     * allowed value is better to use this function to avoid 2 calls (and wait until
     * the first transaction is mined)
     * From MonolithDAO Token.sol
     * Emits an Approval event.
     * @param spender The address which will spend the funds.
     * @param addedValue The amount of tokens to increase the allowance by.
     */
    function increaseAllowance(address spender, uint256 addedValue) public returns (bool) {
        require(spender != address(0));

        _allowed[msg.sender][spender] = _allowed[msg.sender][spender].add(addedValue);
        emit Approval(msg.sender, spender, _allowed[msg.sender][spender]);
        return true;
    }

    /**
     * @dev Decrease the amount of tokens that an owner allowed to a spender.
     * approve should be called when allowed_[_spender] == 0. To decrement
     * allowed value is better to use this function to avoid 2 calls (and wait until
     * the first transaction is mined)
     * From MonolithDAO Token.sol
     * Emits an Approval event.
     * @param spender The address which will spend the funds.
     * @param subtractedValue The amount of tokens to decrease the allowance by.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) {
        require(spender != address(0));

        _allowed[msg.sender][spender] = _allowed[msg.sender][spender].sub(subtractedValue);
        emit Approval(msg.sender, spender, _allowed[msg.sender][spender]);
        return true;
    }

    /**
    * @dev Transfer token for a specified addresses
    * @param from The address to transfer from.
    * @param to The address to transfer to.
    * @param value The amount to be transferred.
    */
    function _transfer(address from, address to, uint256 value) internal {
        require(to != address(0));

        _balances[from] = _balances[from].sub(value);
        _balances[to] = _balances[to].add(value);
        emit Transfer(from, to, value);
    }

    /**
     * @dev Internal function that mints an amount of the token and assigns it to
     * an account. This encapsulates the modification of balances such that the
     * proper events are emitted.
     * @param account The account that will receive the created tokens.
     * @param value The amount that will be created.
     */
    function _mint(address account, uint256 value) internal {
        require(account != address(0));

        _totalSupply = _totalSupply.add(value);
        _balances[account] = _balances[account].add(value);
        emit Transfer(address(0), account, value);
    }

    /**
     * @dev Internal function that burns an amount of the token of a given
     * account.
     * @param account The account whose tokens will be burnt.
     * @param value The amount that will be burnt.
     */
    function _burn(address account, uint256 value) internal {
        require(account != address(0));

        _totalSupply = _totalSupply.sub(value);
        _balances[account] = _balances[account].sub(value);
        emit Transfer(account, address(0), value);
    }

    /**
     * @dev Internal function that burns an amount of the token of a given
     * account, deducting from the sender's allowance for said account. Uses the
     * internal burn function.
     * Emits an Approval event (reflecting the reduced allowance).
     * @param account The account whose tokens will be burnt.
     * @param value The amount that will be burnt.
     */
    function _burnFrom(address account, uint256 value) internal {
        _allowed[account][msg.sender] = _allowed[account][msg.sender].sub(value);
        _burn(account, value);
        emit Approval(account, msg.sender, _allowed[account][msg.sender]);
    }
}


/**
 * @title Helps contracts guard against reentrancy attacks.
 * @author Remco Bloemen <remco@2π.com>, Eenae <[email protected]>
 * @dev If you mark a function `nonReentrant`, you should also
 * mark it `external`.
 */
contract ReentrancyGuard {
    /// @dev counter to allow mutex lock with only one SSTORE operation
    uint256 private _guardCounter;

    constructor() public {
        // The counter starts at one to prevent changing it from zero to a non-zero
        // value, which is a more expensive operation.
        _guardCounter = 1;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and make it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        _guardCounter += 1;
        uint256 localCounter = _guardCounter;
        _;
        require(localCounter == _guardCounter);
    }
}


/// @title Main contract for Wrapped VG0. This contract converts Virgin Gen 0 Cryptokitties between the ERC721 standard 
///  and the ERC20 standard by locking cryptokitties into the contract and minting 1:1 backed ERC20 tokens, that
///  can then be redeemed for cryptokitties when desired. This concept originated with WCK (Wrapped Cryptokitties).
///  This code is only a very slight modification of the original contract; It simply adds the Gen 0 requirement, 
///	 the fast cooldown requirement, and the getKitty interfacing.
///
/// @notice When wrapping a cryptokitty, you get a generic WVG0 token. Since the WVG0 token is generic, it has no
///  no information about what cryptokitty you submitted, so you will most likely not receive the same kitty
///  back when redeeming the token unless you specify that kitty's ID. The token only entitles you to receive 
///  *a* cryptokitty in return, not necessarily the *same* cryptokitty in return. A different user can submit
///  their own WVG0 tokens to the contract and withdraw the kitty that you originally deposited. WVG0 tokens have
///  no information about which kitty was originally deposited to mint WVG0 - this is due to the very nature of 
///  the ERC20 standard being fungible, and the ERC721 standard being nonfungible.
contract WrappedVG0 is ERC20, ReentrancyGuard {

    // OpenZeppelin's SafeMath library is used for all arithmetic operations to avoid overflows/underflows.
    using SafeMath for uint256;

    /* ****** */
    /* EVENTS */
    /* ****** */

    /// @dev This event is fired when a user deposits cryptokitties into the contract in exchange
    ///  for an equal number of WVG0 ERC20 tokens.
    /// @param kittyId  The cryptokitty id of the kitty that was deposited into the contract.
    event DepositKittyAndMintToken(
        uint256 kittyId
    );

    /// @dev This event is fired when a user deposits WVG0 ERC20 tokens into the contract in exchange
    ///  for an equal number of locked cryptokitties.
    /// @param kittyId  The cryptokitty id of the kitty that was withdrawn from the contract.
    event BurnTokenAndWithdrawKitty(
        uint256 kittyId
    );

    /* ******* */
    /* STORAGE */
    /* ******* */

    /// @dev An Array containing all of the cryptokitties that are locked in the contract, backing
    ///  WVG0 ERC20 tokens 1:1
    /// @notice Some of the kitties in this array were indeed deposited to the contract, but they
    ///  are no longer held by the contract. This is because withdrawSpecificKitty() allows a 
    ///  user to withdraw a kitty "out of order". Since it would be prohibitively expensive to 
    ///  shift the entire array once we've withdrawn a single element, we instead maintain this 
    ///  mapping to determine whether an element is still contained in the contract or not. 
    uint256[] private depositedKittiesArray;

    /// @dev A mapping keeping track of which kittyIDs are currently contained within the contract.
    /// @notice We cannot rely on depositedKittiesArray as the source of truth as to which cats are
    ///  deposited in the contract. This is because burnTokensAndWithdrawKitties() allows a user to 
    ///  withdraw a kitty "out of order" of the order that they are stored in the array. Since it 
    ///  would be prohibitively expensive to shift the entire array once we've withdrawn a single 
    ///  element, we instead maintain this mapping to determine whether an element is still contained 
    ///  in the contract or not. 
    mapping (uint256 => bool) private kittyIsDepositedInContract;

    /* ********* */
    /* CONSTANTS */
    /* ********* */

    /// @dev The metadata details about the "Wrapped Virgin Gen0" WVG0 ERC20 token.
    uint8 constant public decimals = 18;
    string constant public name = "Wrapped Virgin Gen 0";
    string constant public symbol = "WVG0";

    /// @dev The address of official CryptoKitties contract that stores the metadata about each cat.
    /// @notice The owner is not capable of changing the address of the CryptoKitties Core contract
    ///  once the contract has been deployed.
    address public kittyCoreAddress = 0x06012c8cf97BEaD5deAe237070F9587f8E7A266d;
    KittyCore kittyCore;

    /* ********* */
    /* FUNCTIONS */
    /* ********* */

    /// @notice Allows a user to lock cryptokitties in the contract in exchange for an equal number
    ///  of WVG0 ERC20 tokens.
    /// @param _kittyIds  The ids of the cryptokitties that will be locked into the contract.
    /// @notice The user must first call approve() in the Cryptokitties Core contract on each kitty
    ///  that thye wish to deposit before calling depositKittiesAndMintTokens(). There is no danger 
    ///  of this contract overreaching its approval, since the CryptoKitties Core contract's approve() 
    ///  function only approves this contract for a single Cryptokitty. Calling approve() allows this 
    ///  contract to transfer the specified kitty in the depositKittiesAndMintTokens() function.
    function depositKittiesAndMintTokens(uint256[] calldata _kittyIds) external nonReentrant {

        
        require(_kittyIds.length > 0, 'you must submit an array with at least one element');
        for(uint i = 0; i < _kittyIds.length; i++){
            uint256 kittyToDeposit = _kittyIds[i];

            uint256 kittyCooldown;
            uint256 kittyGen;
            
            (,,kittyCooldown,,,,,,kittyGen,) = kittyCore.getKitty(kittyToDeposit);

            require(msg.sender == kittyCore.ownerOf(kittyToDeposit), 'you do not own this cat');
            require(kittyCore.kittyIndexToApproved(kittyToDeposit) == address(this), 'you must approve() this contract before you can deposit a cat');
            require(kittyGen == 0, 'this cat must be generation 0');
            require(kittyCooldown == 0, 'cooldown must be fast');
            kittyCore.transferFrom(msg.sender, address(this), kittyToDeposit);
            _pushKitty(kittyToDeposit);
            emit DepositKittyAndMintToken(kittyToDeposit);
        }
        _mint(msg.sender, (_kittyIds.length).mul(10**18));
    }

    /// @notice Allows a user to burn WVG0 ERC20 tokens in exchange for an equal number of locked 
    ///  cryptokitties.
    /// @param _kittyIds  The IDs of the kitties that the user wishes to withdraw. If the user submits 0 
    ///  as the ID for any kitty, the contract uses the last kitty in the array for that kitty.
    /// @param _destinationAddresses  The addresses that the withdrawn kitties will be sent to (this allows 
    ///  anyone to "airdrop" kitties to addresses that they do not own in a single transaction).
    function burnTokensAndWithdrawKitties(uint256[] calldata _kittyIds, address[] calldata _destinationAddresses) external nonReentrant {
        require(_kittyIds.length == _destinationAddresses.length, 'you did not provide a destination address for each of the cats you wish to withdraw');
        require(_kittyIds.length > 0, 'you must submit an array with at least one element');

        uint256 numTokensToBurn = _kittyIds.length;
        require(balanceOf(msg.sender) >= numTokensToBurn.mul(10**18), 'you do not own enough tokens to withdraw this many ERC721 cats');
        _burn(msg.sender, numTokensToBurn.mul(10**18));
        
        for(uint i = 0; i < numTokensToBurn; i++){
            uint256 kittyToWithdraw = _kittyIds[i];
            if(kittyToWithdraw == 0){
                kittyToWithdraw = _popKitty();
            } else {
                require(kittyIsDepositedInContract[kittyToWithdraw] == true, 'this kitty has already been withdrawn');
                require(address(this) == kittyCore.ownerOf(kittyToWithdraw), 'the contract does not own this cat');
                kittyIsDepositedInContract[kittyToWithdraw] = false;
            }
            kittyCore.transfer(_destinationAddresses[i], kittyToWithdraw);
            emit BurnTokenAndWithdrawKitty(kittyToWithdraw);
        }
    }

    /// @notice Adds a locked cryptokitty to the end of the array
    /// @param _kittyId  The id of the cryptokitty that will be locked into the contract.
    function _pushKitty(uint256 _kittyId) internal {
        depositedKittiesArray.push(_kittyId);
        kittyIsDepositedInContract[_kittyId] = true;
    }

    /// @notice Removes an unlocked cryptokitty from the end of the array
    /// @notice The reason that this function must check if the kittyIsDepositedInContract
    ///  is that the withdrawSpecificKitty() function allows a user to withdraw a kitty
    ///  from the array out of order.
    /// @return  The id of the cryptokitty that will be unlocked from the contract.
    function _popKitty() internal returns(uint256){
        require(depositedKittiesArray.length > 0, 'there are no cats in the array');
        uint256 kittyId = depositedKittiesArray[depositedKittiesArray.length - 1];
        depositedKittiesArray.length--;
        while(kittyIsDepositedInContract[kittyId] == false){
            kittyId = depositedKittiesArray[depositedKittiesArray.length - 1];
            depositedKittiesArray.length--;
        }
        kittyIsDepositedInContract[kittyId] = false;
        return kittyId;
    }

    /// @notice Removes any kitties that exist in the array but are no longer held in the
    ///  contract, which happens if the first few kitties have previously been withdrawn 
    ///  out of order using the withdrawSpecificKitty() function.
    /// @notice This function exists to prevent a griefing attack where a malicious attacker
    ///  could call withdrawSpecificKitty() on a large number of kitties at the front of the
    ///  array, causing the while-loop in _popKitty to always run out of gas.
    /// @param _numSlotsToCheck  The number of slots to check in the array.
    function batchRemoveWithdrawnKittiesFromStorage(uint256 _numSlotsToCheck) external {
        require(_numSlotsToCheck <= depositedKittiesArray.length, 'you are trying to batch remove more slots than exist in the array');
        uint256 arrayIndex = depositedKittiesArray.length;
        for(uint i = 0; i < _numSlotsToCheck; i++){
            arrayIndex = arrayIndex.sub(1);
            uint256 kittyId = depositedKittiesArray[arrayIndex];
            if(kittyIsDepositedInContract[kittyId] == false){
                depositedKittiesArray.length--;
            } else {
                return;
            }
        }
    }

    /// @notice The owner is not capable of changing the address of the CryptoKitties Core
    ///  contract once the contract has been deployed.
    constructor() public {
        kittyCore = KittyCore(kittyCoreAddress);
    }

    /// @dev We leave the fallback function payable in case the current State Rent proposals require
    ///  us to send funds to this contract to keep it alive on mainnet.
    /// @notice There is no function that allows the contract creator to withdraw any funds sent
    ///  to this contract, so any funds sent directly to the fallback function that are not used for 
    ///  State Rent are lost forever.
    function() external payable {}
}

/// @title Interface for interacting with the CryptoKitties Core contract created by Dapper Labs Inc.
contract KittyCore {
    function ownerOf(uint256 _tokenId) public view returns (address owner);
    function transferFrom(address _from, address _to, uint256 _tokenId) external;
    function transfer(address _to, uint256 _tokenId) external;
    function getKitty(uint256 _id) public view returns (bool,bool,uint256 _cooldownIndex,uint256,uint256,uint256,uint256,uint256,uint256 _generation,uint256);
    mapping (uint256 => address) public kittyIndexToApproved;
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_kittyIds","type":"uint256[]"},{"name":"_destinationAddresses","type":"address[]"}],"name":"burnTokensAndWithdrawKitties","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"kittyCoreAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_numSlotsToCheck","type":"uint256"}],"name":"batchRemoveWithdrawnKittiesFromStorage","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_kittyIds","type":"uint256[]"}],"name":"depositKittiesAndMintTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"spender","type":"address"}],"name":"allowance","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":[{"indexed":false,"name":"kittyId","type":"uint256"}],"name":"DepositKittyAndMintToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"kittyId","type":"uint256"}],"name":"BurnTokenAndWithdrawKitty","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"}]

60806040527306012c8cf97bead5deae237070f9587f8e7a266d600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034801561006557600080fd5b506001600381905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612612806100e06000396000f3fe6080604052600436106100e85760003560e01c8063395093511161008a578063a457c2d711610059578063a457c2d7146105b1578063a9059cbb14610624578063b38de03014610697578063dd62ed3e1461071d576100e8565b8063395093511461040e57806370a08231146104815780638a8d413e146104e657806395d89b4114610521576100e8565b806318160ddd116100c657806318160ddd146102c857806323b872dd146102f35780632c2ccdfb14610386578063313ce567146103dd576100e8565b806306fdde03146100ea578063095ea7b31461017a57806317a09fb7146101ed575b005b3480156100f657600080fd5b506100ff6107a2565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561013f578082015181840152602081019050610124565b50505050905090810190601f16801561016c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561018657600080fd5b506101d36004803603604081101561019d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506107db565b604051808215151515815260200191505060405180910390f35b3480156101f957600080fd5b506102c66004803603604081101561021057600080fd5b810190808035906020019064010000000081111561022d57600080fd5b82018360208201111561023f57600080fd5b8035906020019184602083028401116401000000008311171561026157600080fd5b90919293919293908035906020019064010000000081111561028257600080fd5b82018360208201111561029457600080fd5b803590602001918460208302840111640100000000831117156102b657600080fd5b9091929391929390505050610906565b005b3480156102d457600080fd5b506102dd610ddc565b6040518082815260200191505060405180910390f35b3480156102ff57600080fd5b5061036c6004803603606081101561031657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610de6565b604051808215151515815260200191505060405180910390f35b34801561039257600080fd5b5061039b610fee565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103e957600080fd5b506103f2611014565b604051808260ff1660ff16815260200191505060405180910390f35b34801561041a57600080fd5b506104676004803603604081101561043157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611019565b604051808215151515815260200191505060405180910390f35b34801561048d57600080fd5b506104d0600480360360208110156104a457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061124e565b6040518082815260200191505060405180910390f35b3480156104f257600080fd5b5061051f6004803603602081101561050957600080fd5b8101908080359060200190929190505050611296565b005b34801561052d57600080fd5b506105366113a2565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561057657808201518184015260208101905061055b565b50505050905090810190601f1680156105a35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156105bd57600080fd5b5061060a600480360360408110156105d457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506113db565b604051808215151515815260200191505060405180910390f35b34801561063057600080fd5b5061067d6004803603604081101561064757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611610565b604051808215151515815260200191505060405180910390f35b3480156106a357600080fd5b5061071b600480360360208110156106ba57600080fd5b81019080803590602001906401000000008111156106d757600080fd5b8201836020820111156106e957600080fd5b8035906020019184602083028401116401000000008311171561070b57600080fd5b9091929391929390505050611627565b005b34801561072957600080fd5b5061078c6004803603604081101561074057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cf0565b6040518082815260200191505060405180910390f35b6040518060400160405280601481526020017f577261707065642056697267696e2047656e203000000000000000000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561081657600080fd5b81600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60016003600082825401925050819055506000600354905082829050858590501461097c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260538152602001806125346053913960600191505060405180910390fd5b600085859050116109d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806125026032913960400191505060405180910390fd5b60008585905090506109fb670de0b6b3a764000082611d7790919063ffffffff16565b610a043361124e565b1015610a5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e815260200180612587603e913960400191505060405180910390fd5b610a7f33610a7a670de0b6b3a764000084611d7790919063ffffffff16565b611db1565b60008090505b81811015610dc5576000878783818110610a9b57fe5b9050602002013590506000811415610abc57610ab5611f03565b9050610c97565b600115156005600083815260200190815260200160002060009054906101000a900460ff16151514610b39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061245f6025913960400191505060405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e826040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610bac57600080fd5b505afa158015610bc0573d6000803e3d6000fd5b505050506040513d6020811015610bd657600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614610c6a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806125c56022913960400191505060405180910390fd5b60006005600083815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb878785818110610ce157fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015610d6857600080fd5b505af1158015610d7c573d6000803e3d6000fd5b505050507f2f467b677a4a63395bce26e8731fa49a02cd892ddeaf266650b403f140ba4590816040518082815260200191505060405180910390a1508080600101915050610a85565b50506003548114610dd557600080fd5b5050505050565b6000600254905090565b6000610e7782600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461205790919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f02848484612077565b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600190509392505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601281565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561105457600080fd5b6110e382600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461224190919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6004805490508111156112f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260418152602001806124846041913960600191505060405180910390fd5b6000600480549050905060008090505b8281101561139c5761132060018361205790919063ffffffff16565b915060006004838154811061133157fe5b90600052602060002001549050600015156005600083815260200190815260200160002060009054906101000a900460ff1615151415611386576004805480919060019003611380919061240d565b5061138e565b50505061139f565b508080600101915050611304565b50505b50565b6040518060400160405280600481526020017f575647300000000000000000000000000000000000000000000000000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561141657600080fd5b6114a582600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461205790919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b600061161d338484612077565b6001905092915050565b6001600360008282540192505081905550600060035490506000838390501161169b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806125026032913960400191505060405180910390fd5b60008090505b83839050811015611cb55760008484838181106116ba57fe5b905060200201359050600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e98b7f4d846040518263ffffffff1660e01b8152600401808281526020019150506101406040518083038186803b15801561173a57600080fd5b505afa15801561174e573d6000803e3d6000fd5b505050506040513d61014081101561176557600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291905050509091929394959697985090919293949596975090919293949550909192939450909192935090919250909150508092508193505050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561187857600080fd5b505afa15801561188c573d6000803e3d6000fd5b505050506040513d60208110156118a257600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611953576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f796f7520646f206e6f74206f776e20746869732063617400000000000000000081525060200191505060405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663481af3d3856040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156119dd57600080fd5b505afa1580156119f1573d6000803e3d6000fd5b505050506040513d6020811015611a0757600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614611a84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806124c5603d913960400191505060405180910390fd5b60008114611afa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f7468697320636174206d7573742062652067656e65726174696f6e203000000081525060200191505060405180910390fd5b60008214611b70576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f636f6f6c646f776e206d7573742062652066617374000000000000000000000081525060200191505060405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b158015611c4d57600080fd5b505af1158015611c61573d6000803e3d6000fd5b50505050611c6e83612260565b7f999fa95b06ad12b3436bab902713e383705707923f9d7c75f5432b28a6487010836040518082815260200191505060405180910390a150505080806001019150506116a1565b50611cdd33611cd8670de0b6b3a764000086869050611d7790919063ffffffff16565b6122bb565b6003548114611ceb57600080fd5b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600080831415611d8a5760009050611dab565b6000828402905082848281611d9b57fe5b0414611da657600080fd5b809150505b92915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611deb57600080fd5b611e008160025461205790919063ffffffff16565b600281905550611e57816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461205790919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b60008060048054905011611f7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f746865726520617265206e6f206361747320696e20746865206172726179000081525060200191505060405180910390fd5b6000600460016004805490500381548110611f9657fe5b906000526020600020015490506004805480919060019003611fb8919061240d565b505b600015156005600083815260200190815260200160002060009054906101000a900460ff161515141561202457600460016004805490500381548110611ffc57fe5b90600052602060002001549050600480548091906001900361201e919061240d565b50611fba565b60006005600083815260200190815260200160002060006101000a81548160ff0219169083151502179055508091505090565b60008282111561206657600080fd5b600082840390508091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120b157600080fd5b612102816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461205790919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612195816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461224190919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b60008082840190508381101561225657600080fd5b8091505092915050565b600481908060018154018082558091505090600182039060005260206000200160009091929091909150555060016005600083815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122f557600080fd5b61230a8160025461224190919063ffffffff16565b600281905550612361816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461224190919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b815481835581811115612434578183600052602060002091820191016124339190612439565b5b505050565b61245b91905b8082111561245757600081600090555060010161243f565b5090565b9056fe74686973206b697474792068617320616c7265616479206265656e2077697468647261776e796f752061726520747279696e6720746f2062617463682072656d6f7665206d6f726520736c6f7473207468616e20657869737420696e20746865206172726179796f75206d75737420617070726f76652829207468697320636f6e7472616374206265666f726520796f752063616e206465706f736974206120636174796f75206d757374207375626d697420616e2061727261792077697468206174206c65617374206f6e6520656c656d656e74796f7520646964206e6f742070726f7669646520612064657374696e6174696f6e206164647265737320666f722065616368206f6620746865206361747320796f75207769736820746f207769746864726177796f7520646f206e6f74206f776e20656e6f75676820746f6b656e7320746f2077697468647261772074686973206d616e7920455243373231206361747374686520636f6e747261637420646f6573206e6f74206f776e207468697320636174a165627a7a723058208ed7878df81f2ce1f94bf51235228bec493de1da64fcdbcab1267c5fe53b7b4e0029

Deployed Bytecode

0x6080604052600436106100e85760003560e01c8063395093511161008a578063a457c2d711610059578063a457c2d7146105b1578063a9059cbb14610624578063b38de03014610697578063dd62ed3e1461071d576100e8565b8063395093511461040e57806370a08231146104815780638a8d413e146104e657806395d89b4114610521576100e8565b806318160ddd116100c657806318160ddd146102c857806323b872dd146102f35780632c2ccdfb14610386578063313ce567146103dd576100e8565b806306fdde03146100ea578063095ea7b31461017a57806317a09fb7146101ed575b005b3480156100f657600080fd5b506100ff6107a2565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561013f578082015181840152602081019050610124565b50505050905090810190601f16801561016c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561018657600080fd5b506101d36004803603604081101561019d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506107db565b604051808215151515815260200191505060405180910390f35b3480156101f957600080fd5b506102c66004803603604081101561021057600080fd5b810190808035906020019064010000000081111561022d57600080fd5b82018360208201111561023f57600080fd5b8035906020019184602083028401116401000000008311171561026157600080fd5b90919293919293908035906020019064010000000081111561028257600080fd5b82018360208201111561029457600080fd5b803590602001918460208302840111640100000000831117156102b657600080fd5b9091929391929390505050610906565b005b3480156102d457600080fd5b506102dd610ddc565b6040518082815260200191505060405180910390f35b3480156102ff57600080fd5b5061036c6004803603606081101561031657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610de6565b604051808215151515815260200191505060405180910390f35b34801561039257600080fd5b5061039b610fee565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103e957600080fd5b506103f2611014565b604051808260ff1660ff16815260200191505060405180910390f35b34801561041a57600080fd5b506104676004803603604081101561043157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611019565b604051808215151515815260200191505060405180910390f35b34801561048d57600080fd5b506104d0600480360360208110156104a457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061124e565b6040518082815260200191505060405180910390f35b3480156104f257600080fd5b5061051f6004803603602081101561050957600080fd5b8101908080359060200190929190505050611296565b005b34801561052d57600080fd5b506105366113a2565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561057657808201518184015260208101905061055b565b50505050905090810190601f1680156105a35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156105bd57600080fd5b5061060a600480360360408110156105d457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506113db565b604051808215151515815260200191505060405180910390f35b34801561063057600080fd5b5061067d6004803603604081101561064757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611610565b604051808215151515815260200191505060405180910390f35b3480156106a357600080fd5b5061071b600480360360208110156106ba57600080fd5b81019080803590602001906401000000008111156106d757600080fd5b8201836020820111156106e957600080fd5b8035906020019184602083028401116401000000008311171561070b57600080fd5b9091929391929390505050611627565b005b34801561072957600080fd5b5061078c6004803603604081101561074057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cf0565b6040518082815260200191505060405180910390f35b6040518060400160405280601481526020017f577261707065642056697267696e2047656e203000000000000000000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561081657600080fd5b81600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60016003600082825401925050819055506000600354905082829050858590501461097c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260538152602001806125346053913960600191505060405180910390fd5b600085859050116109d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806125026032913960400191505060405180910390fd5b60008585905090506109fb670de0b6b3a764000082611d7790919063ffffffff16565b610a043361124e565b1015610a5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e815260200180612587603e913960400191505060405180910390fd5b610a7f33610a7a670de0b6b3a764000084611d7790919063ffffffff16565b611db1565b60008090505b81811015610dc5576000878783818110610a9b57fe5b9050602002013590506000811415610abc57610ab5611f03565b9050610c97565b600115156005600083815260200190815260200160002060009054906101000a900460ff16151514610b39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061245f6025913960400191505060405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e826040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610bac57600080fd5b505afa158015610bc0573d6000803e3d6000fd5b505050506040513d6020811015610bd657600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614610c6a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806125c56022913960400191505060405180910390fd5b60006005600083815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb878785818110610ce157fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015610d6857600080fd5b505af1158015610d7c573d6000803e3d6000fd5b505050507f2f467b677a4a63395bce26e8731fa49a02cd892ddeaf266650b403f140ba4590816040518082815260200191505060405180910390a1508080600101915050610a85565b50506003548114610dd557600080fd5b5050505050565b6000600254905090565b6000610e7782600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461205790919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f02848484612077565b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600190509392505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601281565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561105457600080fd5b6110e382600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461224190919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6004805490508111156112f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260418152602001806124846041913960600191505060405180910390fd5b6000600480549050905060008090505b8281101561139c5761132060018361205790919063ffffffff16565b915060006004838154811061133157fe5b90600052602060002001549050600015156005600083815260200190815260200160002060009054906101000a900460ff1615151415611386576004805480919060019003611380919061240d565b5061138e565b50505061139f565b508080600101915050611304565b50505b50565b6040518060400160405280600481526020017f575647300000000000000000000000000000000000000000000000000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561141657600080fd5b6114a582600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461205790919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b600061161d338484612077565b6001905092915050565b6001600360008282540192505081905550600060035490506000838390501161169b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806125026032913960400191505060405180910390fd5b60008090505b83839050811015611cb55760008484838181106116ba57fe5b905060200201359050600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e98b7f4d846040518263ffffffff1660e01b8152600401808281526020019150506101406040518083038186803b15801561173a57600080fd5b505afa15801561174e573d6000803e3d6000fd5b505050506040513d61014081101561176557600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291905050509091929394959697985090919293949596975090919293949550909192939450909192935090919250909150508092508193505050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561187857600080fd5b505afa15801561188c573d6000803e3d6000fd5b505050506040513d60208110156118a257600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611953576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f796f7520646f206e6f74206f776e20746869732063617400000000000000000081525060200191505060405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663481af3d3856040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156119dd57600080fd5b505afa1580156119f1573d6000803e3d6000fd5b505050506040513d6020811015611a0757600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614611a84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806124c5603d913960400191505060405180910390fd5b60008114611afa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f7468697320636174206d7573742062652067656e65726174696f6e203000000081525060200191505060405180910390fd5b60008214611b70576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f636f6f6c646f776e206d7573742062652066617374000000000000000000000081525060200191505060405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b158015611c4d57600080fd5b505af1158015611c61573d6000803e3d6000fd5b50505050611c6e83612260565b7f999fa95b06ad12b3436bab902713e383705707923f9d7c75f5432b28a6487010836040518082815260200191505060405180910390a150505080806001019150506116a1565b50611cdd33611cd8670de0b6b3a764000086869050611d7790919063ffffffff16565b6122bb565b6003548114611ceb57600080fd5b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600080831415611d8a5760009050611dab565b6000828402905082848281611d9b57fe5b0414611da657600080fd5b809150505b92915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611deb57600080fd5b611e008160025461205790919063ffffffff16565b600281905550611e57816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461205790919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b60008060048054905011611f7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f746865726520617265206e6f206361747320696e20746865206172726179000081525060200191505060405180910390fd5b6000600460016004805490500381548110611f9657fe5b906000526020600020015490506004805480919060019003611fb8919061240d565b505b600015156005600083815260200190815260200160002060009054906101000a900460ff161515141561202457600460016004805490500381548110611ffc57fe5b90600052602060002001549050600480548091906001900361201e919061240d565b50611fba565b60006005600083815260200190815260200160002060006101000a81548160ff0219169083151502179055508091505090565b60008282111561206657600080fd5b600082840390508091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120b157600080fd5b612102816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461205790919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612195816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461224190919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b60008082840190508381101561225657600080fd5b8091505092915050565b600481908060018154018082558091505090600182039060005260206000200160009091929091909150555060016005600083815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122f557600080fd5b61230a8160025461224190919063ffffffff16565b600281905550612361816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461224190919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b815481835581811115612434578183600052602060002091820191016124339190612439565b5b505050565b61245b91905b8082111561245757600081600090555060010161243f565b5090565b9056fe74686973206b697474792068617320616c7265616479206265656e2077697468647261776e796f752061726520747279696e6720746f2062617463682072656d6f7665206d6f726520736c6f7473207468616e20657869737420696e20746865206172726179796f75206d75737420617070726f76652829207468697320636f6e7472616374206265666f726520796f752063616e206465706f736974206120636174796f75206d757374207375626d697420616e2061727261792077697468206174206c65617374206f6e6520656c656d656e74796f7520646964206e6f742070726f7669646520612064657374696e6174696f6e206164647265737320666f722065616368206f6620746865206361747320796f75207769736820746f207769746864726177796f7520646f206e6f74206f776e20656e6f75676820746f6b656e7320746f2077697468647261772074686973206d616e7920455243373231206361747374686520636f6e747261637420646f6573206e6f74206f776e207468697320636174a165627a7a723058208ed7878df81f2ce1f94bf51235228bec493de1da64fcdbcab1267c5fe53b7b4e0029

Deployed Bytecode Sourcemap

12818:9972:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15344:52;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15344:52:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;15344:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5402:244;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5402:244:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5402:244:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;18275:1334;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18275:1334:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18275:1334:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;18275:1334:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;18275:1334:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;18275:1334:0;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;18275:1334:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;18275:1334:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;18275:1334:0;;;;;;;;;;;;:::i;:::-;;3561:91;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3561:91:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6119:299;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6119:299:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6119:299:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;15700:76;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15700:76:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;15302:35;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15302:35:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;6933:323;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6933:323:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6933:323:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3868:106;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3868:106:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3868:106:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21462:637;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21462:637:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;21462:637:0;;;;;;;;;;;;;;;;;:::i;:::-;;15403:38;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15403:38:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;15403:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7776:333;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7776:333:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7776:333:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;4615:140;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4615:140:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4615:140:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;16614:1116;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16614:1116:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16614:1116:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;16614:1116:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;16614:1116:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;16614:1116:0;;;;;;;;;;;;:::i;:::-;;4313:131;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4313:131:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4313:131:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15344:52;;;;;;;;;;;;;;;;;;;:::o;5402:244::-;5467:4;5511:1;5492:21;;:7;:21;;;;5484:30;;;;;;5559:5;5527:8;:20;5536:10;5527:20;;;;;;;;;;;;;;;:29;5548:7;5527:29;;;;;;;;;;;;;;;:37;;;;5601:7;5580:36;;5589:10;5580:36;;;5610:5;5580:36;;;;;;;;;;;;;;;;;;5634:4;5627:11;;5402:244;;;;:::o;18275:1334::-;11390:1;11373:13;;:18;;;;;;;;;;;11402:20;11425:13;;11402:36;;18446:21;;:28;;18426:9;;:16;;:48;18418:144;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18600:1;18581:9;;:16;;:20;18573:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18669:23;18695:9;;:16;;18669:42;;18755:27;18775:6;18755:15;:19;;:27;;;;:::i;:::-;18730:21;18740:10;18730:9;:21::i;:::-;:52;;18722:127;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18860:46;18866:10;18878:27;18898:6;18878:15;:19;;:27;;;;:::i;:::-;18860:5;:46::i;:::-;18931:6;18940:1;18931:10;;18927:675;18947:15;18943:1;:19;18927:675;;;18983:23;19009:9;;19019:1;19009:12;;;;;;;;;;;;;18983:38;;19058:1;19039:15;:20;19036:417;;;19097:11;:9;:11::i;:::-;19079:29;;19036:417;;;19204:4;19157:51;;:26;:43;19184:15;19157:43;;;;;;;;;;;;;;;;;;;;;:51;;;19149:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19294:9;;;;;;;;;;;:17;;;19312:15;19294:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19294:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19294:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19294:34:0;;;;;;;;;;;;;;;;19277:51;;19285:4;19277:51;;;19269:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19432:5;19386:26;:43;19413:15;19386:43;;;;;;;;;;;;:51;;;;;;;;;;;;;;;;;;19036:417;19467:9;;;;;;;;;;;:18;;;19486:21;;19508:1;19486:24;;;;;;;;;;;;;;;19512:15;19467:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19467:61:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19467:61:0;;;;19548:42;19574:15;19548:42;;;;;;;;;;;;;;;;;;18927:675;18964:3;;;;;;;18927:675;;;;11449:1;11485:13;;11469:12;:29;11461:38;;;;;;18275:1334;;;;;:::o;3561:91::-;3605:7;3632:12;;3625:19;;3561:91;:::o;6119:299::-;6198:4;6244:37;6275:5;6244:8;:14;6253:4;6244:14;;;;;;;;;;;;;;;:26;6259:10;6244:26;;;;;;;;;;;;;;;;:30;;:37;;;;:::i;:::-;6215:8;:14;6224:4;6215:14;;;;;;;;;;;;;;;:26;6230:10;6215:26;;;;;;;;;;;;;;;:66;;;;6292:26;6302:4;6308:2;6312:5;6292:9;:26::i;:::-;6349:10;6334:54;;6343:4;6334:54;;;6361:8;:14;6370:4;6361:14;;;;;;;;;;;;;;;:26;6376:10;6361:26;;;;;;;;;;;;;;;;6334:54;;;;;;;;;;;;;;;;;;6406:4;6399:11;;6119:299;;;;;:::o;15700:76::-;;;;;;;;;;;;;:::o;15302:35::-;15335:2;15302:35;:::o;6933:323::-;7013:4;7057:1;7038:21;;:7;:21;;;;7030:30;;;;;;7105:45;7139:10;7105:8;:20;7114:10;7105:20;;;;;;;;;;;;;;;:29;7126:7;7105:29;;;;;;;;;;;;;;;;:33;;:45;;;;:::i;:::-;7073:8;:20;7082:10;7073:20;;;;;;;;;;;;;;;:29;7094:7;7073:29;;;;;;;;;;;;;;;:77;;;;7187:7;7166:60;;7175:10;7166:60;;;7196:8;:20;7205:10;7196:20;;;;;;;;;;;;;;;:29;7217:7;7196:29;;;;;;;;;;;;;;;;7166:60;;;;;;;;;;;;;;;;;;7244:4;7237:11;;6933:323;;;;:::o;3868:106::-;3923:7;3950:9;:16;3960:5;3950:16;;;;;;;;;;;;;;;;3943:23;;3868:106;;;:::o;21462:637::-;21584:21;:28;;;;21564:16;:48;;21556:126;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21693:18;21714:21;:28;;;;21693:49;;21757:6;21766:1;21757:10;;21753:339;21773:16;21769:1;:20;21753:339;;;21823:17;21838:1;21823:10;:14;;:17;;;;:::i;:::-;21810:30;;21855:15;21873:21;21895:10;21873:33;;;;;;;;;;;;;;;;21855:51;;21963:5;21924:44;;:26;:35;21951:7;21924:35;;;;;;;;;;;;;;;;;;;;;:44;;;21921:160;;;21988:21;:30;;;;;;;;;;;;:::i;:::-;;21921:160;;;22059:7;;;;;21921:160;21753:339;21791:3;;;;;;;21753:339;;;;21462:637;;;:::o;15403:38::-;;;;;;;;;;;;;;;;;;;:::o;7776:333::-;7861:4;7905:1;7886:21;;:7;:21;;;;7878:30;;;;;;7953:50;7987:15;7953:8;:20;7962:10;7953:20;;;;;;;;;;;;;;;:29;7974:7;7953:29;;;;;;;;;;;;;;;;:33;;:50;;;;:::i;:::-;7921:8;:20;7930:10;7921:20;;;;;;;;;;;;;;;:29;7942:7;7921:29;;;;;;;;;;;;;;;:82;;;;8040:7;8019:60;;8028:10;8019:60;;;8049:8;:20;8058:10;8049:20;;;;;;;;;;;;;;;:29;8070:7;8049:29;;;;;;;;;;;;;;;;8019:60;;;;;;;;;;;;;;;;;;8097:4;8090:11;;7776:333;;;;:::o;4615:140::-;4676:4;4693:32;4703:10;4715:2;4719:5;4693:9;:32::i;:::-;4743:4;4736:11;;4615:140;;;;:::o;16614:1116::-;11390:1;11373:13;;:18;;;;;;;;;;;11402:20;11425:13;;11402:36;;16753:1;16734:9;;:16;;:20;16726:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16824:6;16833:1;16824:10;;16820:843;16840:9;;:16;;16836:1;:20;16820:843;;;16877:22;16902:9;;16912:1;16902:12;;;;;;;;;;;;;16877:37;;16931:21;16967:16;17047:9;;;;;;;;;;;:18;;;17066:14;17047:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17047:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17047:34:0;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;17047:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17012:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17120:9;;;;;;;;;;;:17;;;17138:14;17120:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17120:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17120:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17120:33:0;;;;;;;;;;;;;;;;17106:47;;:10;:47;;;17098:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17262:4;17204:63;;:9;;;;;;;;;;;:30;;;17235:14;17204:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17204:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17204:46:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17204:46:0;;;;;;;;;;;;;;;;:63;;;17196:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17368:1;17356:8;:13;17348:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17443:1;17426:13;:18;17418:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17485:9;;;;;;;;;;;:22;;;17508:10;17528:4;17535:14;17485:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17485:65:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17485:65:0;;;;17565:26;17576:14;17565:10;:26::i;:::-;17611:40;17636:14;17611:40;;;;;;;;;;;;;;;;;;16820:843;;;16858:3;;;;;;;16820:843;;;;17673:49;17679:10;17691:30;17714:6;17692:9;;:16;;17691:22;;:30;;;;:::i;:::-;17673:5;:49::i;:::-;11485:13;;11469:12;:29;11461:38;;;;;;16614:1116;;;:::o;4313:131::-;4385:7;4412:8;:15;4421:5;4412:15;;;;;;;;;;;;;;;:24;4428:7;4412:24;;;;;;;;;;;;;;;;4405:31;;4313:131;;;;:::o;1002:433::-;1060:7;1309:1;1304;:6;1300:47;;;1334:1;1327:8;;;;1300:47;1359:9;1375:1;1371;:5;1359:17;;1404:1;1399;1395;:5;;;;;;:10;1387:19;;;;;;1426:1;1419:8;;;1002:433;;;;;:::o;9448:269::-;9542:1;9523:21;;:7;:21;;;;9515:30;;;;;;9573:23;9590:5;9573:12;;:16;;:23;;;;:::i;:::-;9558:12;:38;;;;9628:29;9651:5;9628:9;:18;9638:7;9628:18;;;;;;;;;;;;;;;;:22;;:29;;;;:::i;:::-;9607:9;:18;9617:7;9607:18;;;;;;;;;;;;;;;:50;;;;9699:1;9673:36;;9682:7;9673:36;;;9703:5;9673:36;;;;;;;;;;;;;;;;;;9448:269;;:::o;20319:542::-;20357:7;20415:1;20384:21;:28;;;;:32;20376:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20462:15;20480:21;20533:1;20502:21;:28;;;;:32;20480:55;;;;;;;;;;;;;;;;20462:73;;20546:21;:30;;;;;;;;;;;;:::i;:::-;;20587:188;20632:5;20593:44;;:26;:35;20620:7;20593:35;;;;;;;;;;;;;;;;;;;;;:44;;;20587:188;;;20663:21;20716:1;20685:21;:28;;;;:32;20663:55;;;;;;;;;;;;;;;;20653:65;;20733:21;:30;;;;;;;;;;;;:::i;:::-;;20587:188;;;20823:5;20785:26;:35;20812:7;20785:35;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;20846:7;20839:14;;;20319:542;:::o;2007:150::-;2065:7;2098:1;2093;:6;;2085:15;;;;;;2111:9;2127:1;2123;:5;2111:17;;2148:1;2141:8;;;2007:150;;;;:::o;8331:262::-;8433:1;8419:16;;:2;:16;;;;8411:25;;;;;;8467:26;8487:5;8467:9;:15;8477:4;8467:15;;;;;;;;;;;;;;;;:19;;:26;;;;:::i;:::-;8449:9;:15;8459:4;8449:15;;;;;;;;;;;;;;;:44;;;;8520:24;8538:5;8520:9;:13;8530:2;8520:13;;;;;;;;;;;;;;;;:17;;:24;;;;:::i;:::-;8504:9;:13;8514:2;8504:13;;;;;;;;;;;;;;;:40;;;;8575:2;8560:25;;8569:4;8560:25;;;8579:5;8560:25;;;;;;;;;;;;;;;;;;8331:262;;;:::o;2243:150::-;2301:7;2321:9;2337:1;2333;:5;2321:17;;2362:1;2357;:6;;2349:15;;;;;;2384:1;2377:8;;;2243:150;;;;:::o;19775:156::-;19833:21;19860:8;19833:36;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;19833:36:0;;;;;;;;;;;;;;;;;;;;;;19919:4;19880:26;:36;19907:8;19880:36;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;19775:156;:::o;8945:269::-;9039:1;9020:21;;:7;:21;;;;9012:30;;;;;;9070:23;9087:5;9070:12;;:16;;:23;;;;:::i;:::-;9055:12;:38;;;;9125:29;9148:5;9125:9;:18;9135:7;9125:18;;;;;;;;;;;;;;;;:22;;:29;;;;:::i;:::-;9104:9;:18;9114:7;9104:18;;;;;;;;;;;;;;;:50;;;;9191:7;9170:36;;9187:1;9170:36;;;9200:5;9170:36;;;;;;;;;;;;;;;;;;8945:269;;:::o;12818:9972::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

bzzr://8ed7878df81f2ce1f94bf51235228bec493de1da64fcdbcab1267c5fe53b7b4e

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

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