ETH Price: $3,401.69 (+2.58%)

Token

Wrapped Gen 0 (WG0)
 

Overview

Max Total Supply

1,996 WG0

Holders

264 (0.00%)

Market

Price

$45.24 @ 0.013300 ETH

Onchain Market Cap

$90,301.71

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
40.039049180022522998 WG0

Value
$1,811.42 ( ~0.532505645988456 Eth) [2.0060%]
0x9a171e40e43a66ba7a5180e6452fa66fc56dc86a
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Wrapped Gen 0 (WG0) is an ERC20 token backed 1:1 by an ERC721 Generation 0 CryptoKitty.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
WrappedG0

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 2019-12-18
*/

/**
 *Submitted for verification at Etherscan.io on 2019-12-18
*/


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 G0. This contract converts 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 
///	 as well the getKitty interfacing.
///
/// @notice When wrapping a cryptokitty, you get a generic WG0 token. Since the WG0 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 WG0 tokens to the contract and withdraw the kitty that you originally deposited. WG0 tokens have
///  no information about which kitty was originally deposited to mint WG0 - this is due to the very nature of 
///  the ERC20 standard being fungible, and the ERC721 standard being nonfungible.
contract WrappedG0 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 WG0 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 WG0 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
    ///  WG0 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 CryptoKitties" WG0 ERC20 token.
    uint8 constant public decimals = 18;
    string constant public name = "Wrapped Gen 0";
    string constant public symbol = "WG0";

    /// @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 WG0 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');

            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 WG0 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"}]

60806040527306012c8cf97bead5deae237070f9587f8e7a266d600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034801561006557600080fd5b506001600381905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061259c806100e06000396000f3fe6080604052600436106100e85760003560e01c8063395093511161008a578063a457c2d711610059578063a457c2d7146105b1578063a9059cbb14610624578063b38de03014610697578063dd62ed3e1461071d576100e8565b8063395093511461040e57806370a08231146104815780638a8d413e146104e657806395d89b4114610521576100e8565b806318160ddd116100c657806318160ddd146102c857806323b872dd146102f35780632c2ccdfb14610386578063313ce567146103dd576100e8565b806306fdde03146100ea578063095ea7b31461017a57806317a09fb7146101ed575b005b3480156100f657600080fd5b506100ff6107a2565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561013f578082015181840152602081019050610124565b50505050905090810190601f16801561016c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561018657600080fd5b506101d36004803603604081101561019d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506107db565b604051808215151515815260200191505060405180910390f35b3480156101f957600080fd5b506102c66004803603604081101561021057600080fd5b810190808035906020019064010000000081111561022d57600080fd5b82018360208201111561023f57600080fd5b8035906020019184602083028401116401000000008311171561026157600080fd5b90919293919293908035906020019064010000000081111561028257600080fd5b82018360208201111561029457600080fd5b803590602001918460208302840111640100000000831117156102b657600080fd5b9091929391929390505050610906565b005b3480156102d457600080fd5b506102dd610ddc565b6040518082815260200191505060405180910390f35b3480156102ff57600080fd5b5061036c6004803603606081101561031657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610de6565b604051808215151515815260200191505060405180910390f35b34801561039257600080fd5b5061039b610fee565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103e957600080fd5b506103f2611014565b604051808260ff1660ff16815260200191505060405180910390f35b34801561041a57600080fd5b506104676004803603604081101561043157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611019565b604051808215151515815260200191505060405180910390f35b34801561048d57600080fd5b506104d0600480360360208110156104a457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061124e565b6040518082815260200191505060405180910390f35b3480156104f257600080fd5b5061051f6004803603602081101561050957600080fd5b8101908080359060200190929190505050611296565b005b34801561052d57600080fd5b506105366113a2565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561057657808201518184015260208101905061055b565b50505050905090810190601f1680156105a35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156105bd57600080fd5b5061060a600480360360408110156105d457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506113db565b604051808215151515815260200191505060405180910390f35b34801561063057600080fd5b5061067d6004803603604081101561064757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611610565b604051808215151515815260200191505060405180910390f35b3480156106a357600080fd5b5061071b600480360360208110156106ba57600080fd5b81019080803590602001906401000000008111156106d757600080fd5b8201836020820111156106e957600080fd5b8035906020019184602083028401116401000000008311171561070b57600080fd5b9091929391929390505050611627565b005b34801561072957600080fd5b5061078c6004803603604081101561074057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c7a565b6040518082815260200191505060405180910390f35b6040518060400160405280600d81526020017f577261707065642047656e20300000000000000000000000000000000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561081657600080fd5b81600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60016003600082825401925050819055506000600354905082829050858590501461097c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260538152602001806124be6053913960600191505060405180910390fd5b600085859050116109d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603281526020018061248c6032913960400191505060405180910390fd5b60008585905090506109fb670de0b6b3a764000082611d0190919063ffffffff16565b610a043361124e565b1015610a5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e815260200180612511603e913960400191505060405180910390fd5b610a7f33610a7a670de0b6b3a764000084611d0190919063ffffffff16565b611d3b565b60008090505b81811015610dc5576000878783818110610a9b57fe5b9050602002013590506000811415610abc57610ab5611e8d565b9050610c97565b600115156005600083815260200190815260200160002060009054906101000a900460ff16151514610b39576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806123e96025913960400191505060405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e826040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610bac57600080fd5b505afa158015610bc0573d6000803e3d6000fd5b505050506040513d6020811015610bd657600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614610c6a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061254f6022913960400191505060405180910390fd5b60006005600083815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb878785818110610ce157fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015610d6857600080fd5b505af1158015610d7c573d6000803e3d6000fd5b505050507f2f467b677a4a63395bce26e8731fa49a02cd892ddeaf266650b403f140ba4590816040518082815260200191505060405180910390a1508080600101915050610a85565b50506003548114610dd557600080fd5b5050505050565b6000600254905090565b6000610e7782600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fe190919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f02848484612001565b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600190509392505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601281565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561105457600080fd5b6110e382600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121cb90919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6004805490508111156112f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252604181526020018061240e6041913960600191505060405180910390fd5b6000600480549050905060008090505b8281101561139c57611320600183611fe190919063ffffffff16565b915060006004838154811061133157fe5b90600052602060002001549050600015156005600083815260200190815260200160002060009054906101000a900460ff16151514156113865760048054809190600190036113809190612397565b5061138e565b50505061139f565b508080600101915050611304565b50505b50565b6040518060400160405280600381526020017f574730000000000000000000000000000000000000000000000000000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561141657600080fd5b6114a582600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fe190919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b600061161d338484612001565b6001905092915050565b6001600360008282540192505081905550600060035490506000838390501161169b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603281526020018061248c6032913960400191505060405180910390fd5b60008090505b83839050811015611c3f5760008484838181106116ba57fe5b905060200201359050600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e98b7f4d846040518263ffffffff1660e01b8152600401808281526020019150506101406040518083038186803b15801561173a57600080fd5b505afa15801561174e573d6000803e3d6000fd5b505050506040513d61014081101561176557600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291905050509091929394959697985090919293949596975090919293949550909192939450909192935090919250909150508092508193505050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561187857600080fd5b505afa15801561188c573d6000803e3d6000fd5b505050506040513d60208110156118a257600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611953576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f796f7520646f206e6f74206f776e20746869732063617400000000000000000081525060200191505060405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663481af3d3856040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156119dd57600080fd5b505afa1580156119f1573d6000803e3d6000fd5b505050506040513d6020811015611a0757600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614611a84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d81526020018061244f603d913960400191505060405180910390fd5b60008114611afa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f7468697320636174206d7573742062652067656e65726174696f6e203000000081525060200191505060405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b158015611bd757600080fd5b505af1158015611beb573d6000803e3d6000fd5b50505050611bf8836121ea565b7f999fa95b06ad12b3436bab902713e383705707923f9d7c75f5432b28a6487010836040518082815260200191505060405180910390a150505080806001019150506116a1565b50611c6733611c62670de0b6b3a764000086869050611d0190919063ffffffff16565b612245565b6003548114611c7557600080fd5b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600080831415611d145760009050611d35565b6000828402905082848281611d2557fe5b0414611d3057600080fd5b809150505b92915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d7557600080fd5b611d8a81600254611fe190919063ffffffff16565b600281905550611de1816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fe190919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b60008060048054905011611f09576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f746865726520617265206e6f206361747320696e20746865206172726179000081525060200191505060405180910390fd5b6000600460016004805490500381548110611f2057fe5b906000526020600020015490506004805480919060019003611f429190612397565b505b600015156005600083815260200190815260200160002060009054906101000a900460ff1615151415611fae57600460016004805490500381548110611f8657fe5b906000526020600020015490506004805480919060019003611fa89190612397565b50611f44565b60006005600083815260200190815260200160002060006101000a81548160ff0219169083151502179055508091505090565b600082821115611ff057600080fd5b600082840390508091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561203b57600080fd5b61208c816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fe190919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061211f816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121cb90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000808284019050838110156121e057600080fd5b8091505092915050565b600481908060018154018082558091505090600182039060005260206000200160009091929091909150555060016005600083815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561227f57600080fd5b612294816002546121cb90919063ffffffff16565b6002819055506122eb816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121cb90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b8154818355818111156123be578183600052602060002091820191016123bd91906123c3565b5b505050565b6123e591905b808211156123e15760008160009055506001016123c9565b5090565b9056fe74686973206b697474792068617320616c7265616479206265656e2077697468647261776e796f752061726520747279696e6720746f2062617463682072656d6f7665206d6f726520736c6f7473207468616e20657869737420696e20746865206172726179796f75206d75737420617070726f76652829207468697320636f6e7472616374206265666f726520796f752063616e206465706f736974206120636174796f75206d757374207375626d697420616e2061727261792077697468206174206c65617374206f6e6520656c656d656e74796f7520646964206e6f742070726f7669646520612064657374696e6174696f6e206164647265737320666f722065616368206f6620746865206361747320796f75207769736820746f207769746864726177796f7520646f206e6f74206f776e20656e6f75676820746f6b656e7320746f2077697468647261772074686973206d616e7920455243373231206361747374686520636f6e747261637420646f6573206e6f74206f776e207468697320636174a165627a7a72305820062f5204f1ee45ef183f64d9e69c3763159b4f2aed30102d1e748ef1673f033a0029

Deployed Bytecode

0x6080604052600436106100e85760003560e01c8063395093511161008a578063a457c2d711610059578063a457c2d7146105b1578063a9059cbb14610624578063b38de03014610697578063dd62ed3e1461071d576100e8565b8063395093511461040e57806370a08231146104815780638a8d413e146104e657806395d89b4114610521576100e8565b806318160ddd116100c657806318160ddd146102c857806323b872dd146102f35780632c2ccdfb14610386578063313ce567146103dd576100e8565b806306fdde03146100ea578063095ea7b31461017a57806317a09fb7146101ed575b005b3480156100f657600080fd5b506100ff6107a2565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561013f578082015181840152602081019050610124565b50505050905090810190601f16801561016c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561018657600080fd5b506101d36004803603604081101561019d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506107db565b604051808215151515815260200191505060405180910390f35b3480156101f957600080fd5b506102c66004803603604081101561021057600080fd5b810190808035906020019064010000000081111561022d57600080fd5b82018360208201111561023f57600080fd5b8035906020019184602083028401116401000000008311171561026157600080fd5b90919293919293908035906020019064010000000081111561028257600080fd5b82018360208201111561029457600080fd5b803590602001918460208302840111640100000000831117156102b657600080fd5b9091929391929390505050610906565b005b3480156102d457600080fd5b506102dd610ddc565b6040518082815260200191505060405180910390f35b3480156102ff57600080fd5b5061036c6004803603606081101561031657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610de6565b604051808215151515815260200191505060405180910390f35b34801561039257600080fd5b5061039b610fee565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103e957600080fd5b506103f2611014565b604051808260ff1660ff16815260200191505060405180910390f35b34801561041a57600080fd5b506104676004803603604081101561043157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611019565b604051808215151515815260200191505060405180910390f35b34801561048d57600080fd5b506104d0600480360360208110156104a457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061124e565b6040518082815260200191505060405180910390f35b3480156104f257600080fd5b5061051f6004803603602081101561050957600080fd5b8101908080359060200190929190505050611296565b005b34801561052d57600080fd5b506105366113a2565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561057657808201518184015260208101905061055b565b50505050905090810190601f1680156105a35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156105bd57600080fd5b5061060a600480360360408110156105d457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506113db565b604051808215151515815260200191505060405180910390f35b34801561063057600080fd5b5061067d6004803603604081101561064757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611610565b604051808215151515815260200191505060405180910390f35b3480156106a357600080fd5b5061071b600480360360208110156106ba57600080fd5b81019080803590602001906401000000008111156106d757600080fd5b8201836020820111156106e957600080fd5b8035906020019184602083028401116401000000008311171561070b57600080fd5b9091929391929390505050611627565b005b34801561072957600080fd5b5061078c6004803603604081101561074057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c7a565b6040518082815260200191505060405180910390f35b6040518060400160405280600d81526020017f577261707065642047656e20300000000000000000000000000000000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561081657600080fd5b81600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60016003600082825401925050819055506000600354905082829050858590501461097c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260538152602001806124be6053913960600191505060405180910390fd5b600085859050116109d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603281526020018061248c6032913960400191505060405180910390fd5b60008585905090506109fb670de0b6b3a764000082611d0190919063ffffffff16565b610a043361124e565b1015610a5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e815260200180612511603e913960400191505060405180910390fd5b610a7f33610a7a670de0b6b3a764000084611d0190919063ffffffff16565b611d3b565b60008090505b81811015610dc5576000878783818110610a9b57fe5b9050602002013590506000811415610abc57610ab5611e8d565b9050610c97565b600115156005600083815260200190815260200160002060009054906101000a900460ff16151514610b39576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806123e96025913960400191505060405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e826040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610bac57600080fd5b505afa158015610bc0573d6000803e3d6000fd5b505050506040513d6020811015610bd657600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614610c6a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061254f6022913960400191505060405180910390fd5b60006005600083815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb878785818110610ce157fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015610d6857600080fd5b505af1158015610d7c573d6000803e3d6000fd5b505050507f2f467b677a4a63395bce26e8731fa49a02cd892ddeaf266650b403f140ba4590816040518082815260200191505060405180910390a1508080600101915050610a85565b50506003548114610dd557600080fd5b5050505050565b6000600254905090565b6000610e7782600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fe190919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f02848484612001565b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600190509392505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601281565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561105457600080fd5b6110e382600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121cb90919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6004805490508111156112f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252604181526020018061240e6041913960600191505060405180910390fd5b6000600480549050905060008090505b8281101561139c57611320600183611fe190919063ffffffff16565b915060006004838154811061133157fe5b90600052602060002001549050600015156005600083815260200190815260200160002060009054906101000a900460ff16151514156113865760048054809190600190036113809190612397565b5061138e565b50505061139f565b508080600101915050611304565b50505b50565b6040518060400160405280600381526020017f574730000000000000000000000000000000000000000000000000000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561141657600080fd5b6114a582600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fe190919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b600061161d338484612001565b6001905092915050565b6001600360008282540192505081905550600060035490506000838390501161169b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603281526020018061248c6032913960400191505060405180910390fd5b60008090505b83839050811015611c3f5760008484838181106116ba57fe5b905060200201359050600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e98b7f4d846040518263ffffffff1660e01b8152600401808281526020019150506101406040518083038186803b15801561173a57600080fd5b505afa15801561174e573d6000803e3d6000fd5b505050506040513d61014081101561176557600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291905050509091929394959697985090919293949596975090919293949550909192939450909192935090919250909150508092508193505050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561187857600080fd5b505afa15801561188c573d6000803e3d6000fd5b505050506040513d60208110156118a257600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611953576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f796f7520646f206e6f74206f776e20746869732063617400000000000000000081525060200191505060405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663481af3d3856040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156119dd57600080fd5b505afa1580156119f1573d6000803e3d6000fd5b505050506040513d6020811015611a0757600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614611a84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d81526020018061244f603d913960400191505060405180910390fd5b60008114611afa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f7468697320636174206d7573742062652067656e65726174696f6e203000000081525060200191505060405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b158015611bd757600080fd5b505af1158015611beb573d6000803e3d6000fd5b50505050611bf8836121ea565b7f999fa95b06ad12b3436bab902713e383705707923f9d7c75f5432b28a6487010836040518082815260200191505060405180910390a150505080806001019150506116a1565b50611c6733611c62670de0b6b3a764000086869050611d0190919063ffffffff16565b612245565b6003548114611c7557600080fd5b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600080831415611d145760009050611d35565b6000828402905082848281611d2557fe5b0414611d3057600080fd5b809150505b92915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d7557600080fd5b611d8a81600254611fe190919063ffffffff16565b600281905550611de1816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fe190919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b60008060048054905011611f09576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f746865726520617265206e6f206361747320696e20746865206172726179000081525060200191505060405180910390fd5b6000600460016004805490500381548110611f2057fe5b906000526020600020015490506004805480919060019003611f429190612397565b505b600015156005600083815260200190815260200160002060009054906101000a900460ff1615151415611fae57600460016004805490500381548110611f8657fe5b906000526020600020015490506004805480919060019003611fa89190612397565b50611f44565b60006005600083815260200190815260200160002060006101000a81548160ff0219169083151502179055508091505090565b600082821115611ff057600080fd5b600082840390508091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561203b57600080fd5b61208c816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fe190919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061211f816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121cb90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000808284019050838110156121e057600080fd5b8091505092915050565b600481908060018154018082558091505090600182039060005260206000200160009091929091909150555060016005600083815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561227f57600080fd5b612294816002546121cb90919063ffffffff16565b6002819055506122eb816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121cb90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b8154818355818111156123be578183600052602060002091820191016123bd91906123c3565b5b505050565b6123e591905b808211156123e15760008160009055506001016123c9565b5090565b9056fe74686973206b697474792068617320616c7265616479206265656e2077697468647261776e796f752061726520747279696e6720746f2062617463682072656d6f7665206d6f726520736c6f7473207468616e20657869737420696e20746865206172726179796f75206d75737420617070726f76652829207468697320636f6e7472616374206265666f726520796f752063616e206465706f736974206120636174796f75206d757374207375626d697420616e2061727261792077697468206174206c65617374206f6e6520656c656d656e74796f7520646964206e6f742070726f7669646520612064657374696e6174696f6e206164647265737320666f722065616368206f6620746865206361747320796f75207769736820746f207769746864726177796f7520646f206e6f74206f776e20656e6f75676820746f6b656e7320746f2077697468647261772074686973206d616e7920455243373231206361747374686520636f6e747261637420646f6573206e6f74206f776e207468697320636174a165627a7a72305820062f5204f1ee45ef183f64d9e69c3763159b4f2aed30102d1e748ef1673f033a0029

Deployed Bytecode Sourcemap

12850:9894:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15373:45;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15373:45: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;15373:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5475:244;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5475:244:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5475:244:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;18229:1334;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18229:1334:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18229:1334:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;18229:1334:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;18229: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;18229:1334:0;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;18229:1334:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;18229: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;18229:1334:0;;;;;;;;;;;;:::i;:::-;;3634:91;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3634:91:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6192:299;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6192:299:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6192:299:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;15721:76;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15721:76:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;15331:35;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15331:35:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;7006:323;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7006:323:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7006:323:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3941:106;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3941:106:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3941:106:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21416:637;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21416:637:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;21416:637:0;;;;;;;;;;;;;;;;;:::i;:::-;;15425:37;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15425:37: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;15425:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7849:333;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7849:333:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7849:333:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;4688:140;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4688:140:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4688:140:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;16634:1051;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16634:1051:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16634:1051:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;16634:1051:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;16634:1051: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;16634:1051:0;;;;;;;;;;;;:::i;:::-;;4386:131;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4386:131:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4386:131:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15373:45;;;;;;;;;;;;;;;;;;;:::o;5475:244::-;5540:4;5584:1;5565:21;;:7;:21;;;;5557:30;;;;;;5632:5;5600:8;:20;5609:10;5600:20;;;;;;;;;;;;;;;:29;5621:7;5600:29;;;;;;;;;;;;;;;:37;;;;5674:7;5653:36;;5662:10;5653:36;;;5683:5;5653:36;;;;;;;;;;;;;;;;;;5707:4;5700:11;;5475:244;;;;:::o;18229:1334::-;11463:1;11446:13;;:18;;;;;;;;;;;11475:20;11498:13;;11475:36;;18400:21;;:28;;18380:9;;:16;;:48;18372:144;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18554:1;18535:9;;:16;;:20;18527:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18623:23;18649:9;;:16;;18623:42;;18709:27;18729:6;18709:15;:19;;:27;;;;:::i;:::-;18684:21;18694:10;18684:9;:21::i;:::-;:52;;18676:127;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18814:46;18820:10;18832:27;18852:6;18832:15;:19;;:27;;;;:::i;:::-;18814:5;:46::i;:::-;18885:6;18894:1;18885:10;;18881:675;18901:15;18897:1;:19;18881:675;;;18937:23;18963:9;;18973:1;18963:12;;;;;;;;;;;;;18937:38;;19012:1;18993:15;:20;18990:417;;;19051:11;:9;:11::i;:::-;19033:29;;18990:417;;;19158:4;19111:51;;:26;:43;19138:15;19111:43;;;;;;;;;;;;;;;;;;;;;:51;;;19103:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19248:9;;;;;;;;;;;:17;;;19266:15;19248:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19248:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19248:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19248:34:0;;;;;;;;;;;;;;;;19231:51;;19239:4;19231:51;;;19223:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19386:5;19340:26;:43;19367:15;19340:43;;;;;;;;;;;;:51;;;;;;;;;;;;;;;;;;18990:417;19421:9;;;;;;;;;;;:18;;;19440:21;;19462:1;19440:24;;;;;;;;;;;;;;;19466:15;19421:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19421:61:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19421:61:0;;;;19502:42;19528:15;19502:42;;;;;;;;;;;;;;;;;;18881:675;18918:3;;;;;;;18881:675;;;;11522:1;11558:13;;11542:12;:29;11534:38;;;;;;18229:1334;;;;;:::o;3634:91::-;3678:7;3705:12;;3698:19;;3634:91;:::o;6192:299::-;6271:4;6317:37;6348:5;6317:8;:14;6326:4;6317:14;;;;;;;;;;;;;;;:26;6332:10;6317:26;;;;;;;;;;;;;;;;:30;;:37;;;;:::i;:::-;6288:8;:14;6297:4;6288:14;;;;;;;;;;;;;;;:26;6303:10;6288:26;;;;;;;;;;;;;;;:66;;;;6365:26;6375:4;6381:2;6385:5;6365:9;:26::i;:::-;6422:10;6407:54;;6416:4;6407:54;;;6434:8;:14;6443:4;6434:14;;;;;;;;;;;;;;;:26;6449:10;6434:26;;;;;;;;;;;;;;;;6407:54;;;;;;;;;;;;;;;;;;6479:4;6472:11;;6192:299;;;;;:::o;15721:76::-;;;;;;;;;;;;;:::o;15331:35::-;15364:2;15331:35;:::o;7006:323::-;7086:4;7130:1;7111:21;;:7;:21;;;;7103:30;;;;;;7178:45;7212:10;7178:8;:20;7187:10;7178:20;;;;;;;;;;;;;;;:29;7199:7;7178:29;;;;;;;;;;;;;;;;:33;;:45;;;;:::i;:::-;7146:8;:20;7155:10;7146:20;;;;;;;;;;;;;;;:29;7167:7;7146:29;;;;;;;;;;;;;;;:77;;;;7260:7;7239:60;;7248:10;7239:60;;;7269:8;:20;7278:10;7269:20;;;;;;;;;;;;;;;:29;7290:7;7269:29;;;;;;;;;;;;;;;;7239:60;;;;;;;;;;;;;;;;;;7317:4;7310:11;;7006:323;;;;:::o;3941:106::-;3996:7;4023:9;:16;4033:5;4023:16;;;;;;;;;;;;;;;;4016:23;;3941:106;;;:::o;21416:637::-;21538:21;:28;;;;21518:16;:48;;21510:126;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21647:18;21668:21;:28;;;;21647:49;;21711:6;21720:1;21711:10;;21707:339;21727:16;21723:1;:20;21707:339;;;21777:17;21792:1;21777:10;:14;;:17;;;;:::i;:::-;21764:30;;21809:15;21827:21;21849:10;21827:33;;;;;;;;;;;;;;;;21809:51;;21917:5;21878:44;;:26;:35;21905:7;21878:35;;;;;;;;;;;;;;;;;;;;;:44;;;21875:160;;;21942:21;:30;;;;;;;;;;;;:::i;:::-;;21875:160;;;22013:7;;;;;21875:160;21707:339;21745:3;;;;;;;21707:339;;;;21416:637;;;:::o;15425:37::-;;;;;;;;;;;;;;;;;;;:::o;7849:333::-;7934:4;7978:1;7959:21;;:7;:21;;;;7951:30;;;;;;8026:50;8060:15;8026:8;:20;8035:10;8026:20;;;;;;;;;;;;;;;:29;8047:7;8026:29;;;;;;;;;;;;;;;;:33;;:50;;;;:::i;:::-;7994:8;:20;8003:10;7994:20;;;;;;;;;;;;;;;:29;8015:7;7994:29;;;;;;;;;;;;;;;:82;;;;8113:7;8092:60;;8101:10;8092:60;;;8122:8;:20;8131:10;8122:20;;;;;;;;;;;;;;;:29;8143:7;8122:29;;;;;;;;;;;;;;;;8092:60;;;;;;;;;;;;;;;;;;8170:4;8163:11;;7849:333;;;;:::o;4688:140::-;4749:4;4766:32;4776:10;4788:2;4792:5;4766:9;:32::i;:::-;4816:4;4809:11;;4688:140;;;;:::o;16634:1051::-;11463:1;11446:13;;:18;;;;;;;;;;;11475:20;11498:13;;11475:36;;16773:1;16754:9;;:16;;:20;16746:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16844:6;16853:1;16844:10;;16840:778;16860:9;;:16;;16856:1;:20;16840:778;;;16897:22;16922:9;;16932:1;16922:12;;;;;;;;;;;;;16897:37;;16951:21;16987:16;17067:9;;;;;;;;;;;:18;;;17086:14;17067:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17067:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17067:34:0;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;17067:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17032:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17140:9;;;;;;;;;;;:17;;;17158:14;17140:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17140:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17140:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17140:33:0;;;;;;;;;;;;;;;;17126:47;;:10;:47;;;17118:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17282:4;17224:63;;:9;;;;;;;;;;;:30;;;17255:14;17224:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17224:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17224:46:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17224:46:0;;;;;;;;;;;;;;;;:63;;;17216:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17388:1;17376:8;:13;17368:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17440:9;;;;;;;;;;;:22;;;17463:10;17483:4;17490:14;17440:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17440:65:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17440:65:0;;;;17520:26;17531:14;17520:10;:26::i;:::-;17566:40;17591:14;17566:40;;;;;;;;;;;;;;;;;;16840:778;;;16878:3;;;;;;;16840:778;;;;17628:49;17634:10;17646:30;17669:6;17647:9;;:16;;17646:22;;:30;;;;:::i;:::-;17628:5;:49::i;:::-;11558:13;;11542:12;:29;11534:38;;;;;;16634:1051;;;:::o;4386:131::-;4458:7;4485:8;:15;4494:5;4485:15;;;;;;;;;;;;;;;:24;4501:7;4485:24;;;;;;;;;;;;;;;;4478:31;;4386:131;;;;:::o;1075:433::-;1133:7;1382:1;1377;:6;1373:47;;;1407:1;1400:8;;;;1373:47;1432:9;1448:1;1444;:5;1432:17;;1477:1;1472;1468;:5;;;;;;:10;1460:19;;;;;;1499:1;1492:8;;;1075:433;;;;;:::o;9521:269::-;9615:1;9596:21;;:7;:21;;;;9588:30;;;;;;9646:23;9663:5;9646:12;;:16;;:23;;;;:::i;:::-;9631:12;:38;;;;9701:29;9724:5;9701:9;:18;9711:7;9701:18;;;;;;;;;;;;;;;;:22;;:29;;;;:::i;:::-;9680:9;:18;9690:7;9680:18;;;;;;;;;;;;;;;:50;;;;9772:1;9746:36;;9755:7;9746:36;;;9776:5;9746:36;;;;;;;;;;;;;;;;;;9521:269;;:::o;20273:542::-;20311:7;20369:1;20338:21;:28;;;;:32;20330:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20416:15;20434:21;20487:1;20456:21;:28;;;;:32;20434:55;;;;;;;;;;;;;;;;20416:73;;20500:21;:30;;;;;;;;;;;;:::i;:::-;;20541:188;20586:5;20547:44;;:26;:35;20574:7;20547:35;;;;;;;;;;;;;;;;;;;;;:44;;;20541:188;;;20617:21;20670:1;20639:21;:28;;;;:32;20617:55;;;;;;;;;;;;;;;;20607:65;;20687:21;:30;;;;;;;;;;;;:::i;:::-;;20541:188;;;20777:5;20739:26;:35;20766:7;20739:35;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;20800:7;20793:14;;;20273:542;:::o;2080:150::-;2138:7;2171:1;2166;:6;;2158:15;;;;;;2184:9;2200:1;2196;:5;2184:17;;2221:1;2214:8;;;2080:150;;;;:::o;8404:262::-;8506:1;8492:16;;:2;:16;;;;8484:25;;;;;;8540:26;8560:5;8540:9;:15;8550:4;8540:15;;;;;;;;;;;;;;;;:19;;:26;;;;:::i;:::-;8522:9;:15;8532:4;8522:15;;;;;;;;;;;;;;;:44;;;;8593:24;8611:5;8593:9;:13;8603:2;8593:13;;;;;;;;;;;;;;;;:17;;:24;;;;:::i;:::-;8577:9;:13;8587:2;8577:13;;;;;;;;;;;;;;;:40;;;;8648:2;8633:25;;8642:4;8633:25;;;8652:5;8633:25;;;;;;;;;;;;;;;;;;8404:262;;;:::o;2316:150::-;2374:7;2394:9;2410:1;2406;:5;2394:17;;2435:1;2430;:6;;2422:15;;;;;;2457:1;2450:8;;;2316:150;;;;:::o;19729:156::-;19787:21;19814:8;19787:36;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;19787:36:0;;;;;;;;;;;;;;;;;;;;;;19873:4;19834:26;:36;19861:8;19834:36;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;19729:156;:::o;9018:269::-;9112:1;9093:21;;:7;:21;;;;9085:30;;;;;;9143:23;9160:5;9143:12;;:16;;:23;;;;:::i;:::-;9128:12;:38;;;;9198:29;9221:5;9198:9;:18;9208:7;9198:18;;;;;;;;;;;;;;;;:22;;:29;;;;:::i;:::-;9177:9;:18;9187:7;9177:18;;;;;;;;;;;;;;;:50;;;;9264:7;9243:36;;9260:1;9243:36;;;9273:5;9243:36;;;;;;;;;;;;;;;;;;9018:269;;:::o;12850:9894::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

bzzr://062f5204f1ee45ef183f64d9e69c3763159b4f2aed30102d1e748ef1673f033a
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.