ETH Price: $2,761.20 (+5.19%)

Contract

0x19c320b43744254ebdBcb1F1BD0e2a3dc08E01dc
 

Overview

ETH Balance

45.489333333333333333 ETH

Eth Value

$125,605.21 (@ $2,761.20/ETH)

Multichain Info

1 address found via
Transaction Hash
Method
Block
From
To
Transfer179052802023-08-13 10:16:23376 days ago1691921783IN
0x19c320b4...dc08E01dc
0 ETH0.0004551612.12569614
Transfer179052792023-08-13 10:16:11376 days ago1691921771IN
0x19c320b4...dc08E01dc
0 ETH0.0005307212.53566885
Transfer179052472023-08-13 10:09:47376 days ago1691921387IN
0x19c320b4...dc08E01dc
0 ETH0.0003377412.55656045
Transfer179052422023-08-13 10:08:47376 days ago1691921327IN
0x19c320b4...dc08E01dc
0 ETH0.0008090913.61265413
Offer Cat For Sa...178926952023-08-11 15:59:47378 days ago1691769587IN
0x19c320b4...dc08E01dc
0 ETH0.0013416129.38858449
Withdraw178384772023-08-04 1:55:23385 days ago1691114123IN
0x19c320b4...dc08E01dc
0 ETH0.0003364414.07418731
Withdraw174481722023-06-10 7:03:47440 days ago1686380627IN
0x19c320b4...dc08E01dc
0 ETH0.0006938324.25574726
Withdraw166045092023-02-11 9:05:11559 days ago1676106311IN
0x19c320b4...dc08E01dc
0 ETH0.0005091217.79846721
Buy Cat166010482023-02-10 21:29:23559 days ago1676064563IN
0x19c320b4...dc08E01dc
0.3 ETH0.0021875723.46206971
Withdraw165919262023-02-09 14:55:23561 days ago1675954523IN
0x19c320b4...dc08E01dc
0 ETH0.0011724540.98789826
Offer Cat For Sa...165783662023-02-07 17:22:47563 days ago1675790567IN
0x19c320b4...dc08E01dc
0 ETH0.0030217837.84280698
Cat No Longer Fo...165783572023-02-07 17:20:59563 days ago1675790459IN
0x19c320b4...dc08E01dc
0 ETH0.0014272640.49550023
Offer Cat For Sa...165783542023-02-07 17:20:23563 days ago1675790423IN
0x19c320b4...dc08E01dc
0 ETH0.0046830639.13937228
Offer Cat For Sa...165783532023-02-07 17:20:11563 days ago1675790411IN
0x19c320b4...dc08E01dc
0 ETH0.0043351136.2313437
Withdraw165471232023-02-03 8:40:47567 days ago1675413647IN
0x19c320b4...dc08E01dc
0 ETH0.0005925320.71445396
Buy Cat165470992023-02-03 8:35:59567 days ago1675413359IN
0x19c320b4...dc08E01dc
0.21 ETH0.0012987321.99783198
Buy Cat165470982023-02-03 8:35:47567 days ago1675413347IN
0x19c320b4...dc08E01dc
0.21 ETH0.0012335820.89436563
Buy Cat165470922023-02-03 8:34:35567 days ago1675413275IN
0x19c320b4...dc08E01dc
0.21 ETH0.0015842120.80686949
Offer Cat For Sa...165470232023-02-03 8:20:35567 days ago1675412435IN
0x19c320b4...dc08E01dc
0 ETH0.0026670822.29051288
Offer Cat For Sa...165470232023-02-03 8:20:35567 days ago1675412435IN
0x19c320b4...dc08E01dc
0 ETH0.0009551722.29051288
Offer Cat For Sa...165470222023-02-03 8:20:23567 days ago1675412423IN
0x19c320b4...dc08E01dc
0 ETH0.0026354622.02623207
Withdraw165469902023-02-03 8:13:47567 days ago1675412027IN
0x19c320b4...dc08E01dc
0 ETH0.0005722320.00472597
Buy Cat165469572023-02-03 8:07:11567 days ago1675411631IN
0x19c320b4...dc08E01dc
0.22 ETH0.0012268520.78043153
Buy Cat165469552023-02-03 8:06:47567 days ago1675411607IN
0x19c320b4...dc08E01dc
0.21 ETH0.0011732519.8724849
Buy Cat165469542023-02-03 8:06:35567 days ago1675411595IN
0x19c320b4...dc08E01dc
0.21 ETH0.0011598919.6463304
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
174481722023-06-10 7:03:47440 days ago1686380627
0x19c320b4...dc08E01dc
0.19 ETH
166045092023-02-11 9:05:11559 days ago1676106311
0x19c320b4...dc08E01dc
0.3 ETH
165919262023-02-09 14:55:23561 days ago1675954523
0x19c320b4...dc08E01dc
0.6 ETH
165471232023-02-03 8:40:47567 days ago1675413647
0x19c320b4...dc08E01dc
0.63 ETH
165469902023-02-03 8:13:47567 days ago1675412027
0x19c320b4...dc08E01dc
2.32 ETH
165468452023-02-03 7:44:35567 days ago1675410275
0x19c320b4...dc08E01dc
0.21 ETH
152525882022-07-31 21:13:25753 days ago1659302005
0x19c320b4...dc08E01dc
0.3 ETH
141679962022-02-08 22:05:17926 days ago1644357917
0x19c320b4...dc08E01dc
2.77 ETH
141304742022-02-03 2:55:21932 days ago1643856921
0x19c320b4...dc08E01dc
4.4 ETH
141275252022-02-02 15:50:31933 days ago1643817031
0x19c320b4...dc08E01dc
12.55 ETH
141244532022-02-02 4:22:35933 days ago1643775755
0x19c320b4...dc08E01dc
1 ETH
141237722022-02-02 1:49:07933 days ago1643766547
0x19c320b4...dc08E01dc
1 ETH
141231852022-02-01 23:42:11933 days ago1643758931
0x19c320b4...dc08E01dc
0.5 ETH
141230352022-02-01 23:10:50933 days ago1643757050
0x19c320b4...dc08E01dc
0.5 ETH
141229272022-02-01 22:47:35933 days ago1643755655
0x19c320b4...dc08E01dc
3 ETH
141222832022-02-01 20:24:13933 days ago1643747053
0x19c320b4...dc08E01dc
3 ETH
141207642022-02-01 14:58:09934 days ago1643727489
0x19c320b4...dc08E01dc
3.12 ETH
140071052022-01-15 1:25:31951 days ago1642209931
0x19c320b4...dc08E01dc
0.2 ETH
139880732022-01-12 2:30:22954 days ago1641954622
0x19c320b4...dc08E01dc
0.25 ETH
131286952021-08-30 19:11:261089 days ago1630350686
0x19c320b4...dc08E01dc
1.1 ETH
130221892021-08-14 8:30:521105 days ago1628929852
0x19c320b4...dc08E01dc
0.19 ETH
130197222021-08-13 23:10:471105 days ago1628896247
0x19c320b4...dc08E01dc
0.5 ETH
130188532021-08-13 19:59:361106 days ago1628884776
0x19c320b4...dc08E01dc
0.3 ETH
130176072021-08-13 15:20:231106 days ago1628868023
0x19c320b4...dc08E01dc
0.09 ETH
130136972021-08-13 0:52:091106 days ago1628815929
0x19c320b4...dc08E01dc
0.12 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CryptoCatsMarket

Compiler Version
v0.4.19+commit.c4cbbb05

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2021-03-19
*/

/**
 *Submitted for verification at Etherscan.io on 2017-12-31
*/

pragma solidity ^0.4.18;

// -----------------------------------------------------------------------------------------------
// CryptoCatsMarket v3
//
// Ethereum contract for Cryptocats (cryptocats.thetwentysix.io),
// a digital asset marketplace DAPP for unique 8-bit cats on the Ethereum blockchain.
// 
// Versions:  
// 3.0 - Bug fix to make ETH value sent in with getCat function withdrawable by contract owner.
//       Special thanks to BokkyPooBah (https://github.com/bokkypoobah) who found this issue!
// 2.0 - Remove claimCat function with getCat function that is payable and accepts incoming ETH. 
//       Feature added to set ETH pricing by each cat release and also for specific cats
// 1.0 - Feature added to create new cat releases, add attributes and offer to sell/buy cats
// 0.0 - Initial contract to support ownership of 12 unique 8-bit cats on the Ethereum blockchain
// 
// Original contract code based off Cryptopunks DAPP by the talented people from Larvalabs 
// (https://github.com/larvalabs/cryptopunks)
//
// (c) Nas Munawar / Gendry Morales / Jochy Reyes / TheTwentySix. 2017. The MIT Licence.
// ----------------------------------------------------------------------------------------------

contract CryptoCatsMarket {
    
    /* modifier to add to function that should only be callable by contract owner */
    modifier onlyBy(address _account)
    {
        require(msg.sender == _account);
        _;
    }


    /* You can use this hash to verify the image file containing all cats */
    string public imageHash = "3b82cfd5fb39faff3c2c9241ca5a24439f11bdeaa7d6c0771eb782ea7c963917";

    /* Variables to store contract owner and contract token standard details */
    address owner;
    string public standard = 'CryptoCats';
    string public name;
    string public symbol;
    uint8 public decimals;
    uint256 public _totalSupply;
    
    // Store reference to previous cryptocat contract containing alpha release owners
    // PROD - previous contract address
    // address public previousContractAddress = 0x9508008227b6b3391959334604677d60169EF540;

    // ROPSTEN - previous contract address
    address public previousContractAddress = 0xccEC9B9cB223854C46843A1990c36C4A37D80E2e;

    uint8 public contractVersion;
    bool public totalSupplyIsLocked;

    bool public allCatsAssigned = false;        // boolean flag to indicate if all available cats are claimed
    uint public catsRemainingToAssign = 0;   // variable to track cats remaining to be assigned/claimed
    uint public currentReleaseCeiling;       // variable to track maximum cat index for latest release

    /* Create array to store cat index to owner address */
    mapping (uint => address) public catIndexToAddress;
    
    /* Create array to store cat release id to price in wei for all cats in that release */
    mapping (uint32 => uint) public catReleaseToPrice;

    /* Create array to store cat index to any exception price deviating from release price */
    mapping (uint => uint) public catIndexToPriceException;

    /* Create an array with all balances */
    mapping (address => uint) public balanceOf;
    /* Store type descriptor string for each attribute number */
    mapping (uint => string) public attributeType;
    /* Store up to 6 cat attribute strings where attribute types are defined in attributeType */
    mapping (uint => string[6]) public catAttributes;

    /* Struct that is used to describe seller offer details */
    struct Offer {
        bool isForSale;         // flag identifying if cat is for sale
        uint catIndex;
        address seller;         // owner address
        uint minPrice;       // price in ETH owner is willing to sell cat for
        address sellOnlyTo;     // address identifying only buyer that seller is wanting to offer cat to
    }

    uint[] public releaseCatIndexUpperBound;

    // Store sale Offer details for each cat made for sale by its owner
    mapping (uint => Offer) public catsForSale;

    // Store pending withdrawal amounts in ETH that a failed bidder or successful seller is able to withdraw
    mapping (address => uint) public pendingWithdrawals;

    /* Define event types to publish transaction details related to transfer and buy/sell activities */
    event CatTransfer(address indexed from, address indexed to, uint catIndex);
    event CatOffered(uint indexed catIndex, uint minPrice, address indexed toAddress);
    event CatBought(uint indexed catIndex, uint price, address indexed fromAddress, address indexed toAddress);
    event CatNoLongerForSale(uint indexed catIndex);

    /* Define event types used to publish to EVM log when cat assignment/claim and cat transfer occurs */
    event Assign(address indexed to, uint256 catIndex);
    event Transfer(address indexed from, address indexed to, uint256 value);
    /* Define event for reporting new cats release transaction details into EVM log */
    event ReleaseUpdate(uint256 indexed newCatsAdded, uint256 totalSupply, uint256 catPrice, string newImageHash);
    /* Define event for logging update to cat price for existing release of cats (only impacts unclaimed cats) */
    event UpdateReleasePrice(uint32 releaseId, uint256 catPrice);
    /* Define event for logging transactions that change any cat attributes into EVM log*/
    event UpdateAttribute(uint indexed attributeNumber, address indexed ownerAddress, bytes32 oldValue, bytes32 newValue);

    /* Initializes contract with initial supply tokens to the creator of the contract */
    function CryptoCatsMarket() payable {
        owner = msg.sender;                          // Set contract creation sender as owner
        _totalSupply = 625;                          // Set total supply
        catsRemainingToAssign = _totalSupply;        // Initialise cats remaining to total supply amount
        name = "CRYPTOCATS";                         // Set the name for display purposes
        symbol = "CCAT";                             // Set the symbol for display purposes
        decimals = 0;                                // Amount of decimals for display purposes
        contractVersion = 3;
        currentReleaseCeiling = 625;
        totalSupplyIsLocked = false;

        releaseCatIndexUpperBound.push(12);             // Register release 0 getting to 12 cats
        releaseCatIndexUpperBound.push(189);            // Register release 1 getting to 189 cats
        releaseCatIndexUpperBound.push(_totalSupply);   // Register release 2 getting to 625 cats

        catReleaseToPrice[0] = 0;                       // Set price for release 0
        catReleaseToPrice[1] = 0;                       // Set price for release 1
        catReleaseToPrice[2] = 80000000000000000;       // Set price for release 2 to Wei equivalent of 0.08 ETH
    }
    
    /* Admin function to make total supply permanently locked (callable by owner only) */
    function lockTotalSupply()
        onlyBy(owner)
    {
        totalSupplyIsLocked = true;
    }

    /* Admin function to set attribute type descriptor text (callable by owner only) */
    function setAttributeType(uint attributeIndex, string descriptionText)
        onlyBy(owner)
    {
        require(attributeIndex >= 0 && attributeIndex < 6);
        attributeType[attributeIndex] = descriptionText;
    }
    
    /* Admin function to release new cat index numbers and update image hash for new cat releases */
    function releaseCats(uint32 _releaseId, uint numberOfCatsAdded, uint256 catPrice, string newImageHash) 
        onlyBy(owner)
        returns (uint256 newTotalSupply) 
    {
        require(!totalSupplyIsLocked);                  // Check that new cat releases still available
        require(numberOfCatsAdded > 0);                 // Require release to have more than 0 cats 
        currentReleaseCeiling = currentReleaseCeiling + numberOfCatsAdded;  // Add new cats to release ceiling
        uint _previousSupply = _totalSupply;
        _totalSupply = _totalSupply + numberOfCatsAdded;
        catsRemainingToAssign = catsRemainingToAssign + numberOfCatsAdded;  // Update cats remaining to assign count
        imageHash = newImageHash;                                           // Update image hash

        catReleaseToPrice[_releaseId] = catPrice;                           // Update price for new release of cats                    
        releaseCatIndexUpperBound.push(_totalSupply);                       // Track upper bound of cat index for this release

        ReleaseUpdate(numberOfCatsAdded, _totalSupply, catPrice, newImageHash); // Send EVM event containing details of release
        return _totalSupply;                                                    // Return new total supply of cats
    }

    /* Admin function to update price for an entire release of cats still available for claiming */
    function updateCatReleasePrice(uint32 _releaseId, uint256 catPrice)
        onlyBy(owner)
    {
        require(_releaseId <= releaseCatIndexUpperBound.length);            // Check that release is id valid
        catReleaseToPrice[_releaseId] = catPrice;                           // Update price for cat release
        UpdateReleasePrice(_releaseId, catPrice);                           // Send EVM event with release id and price details
    }
   
    /* Migrate details of previous contract cat owners addresses and cat balances to new contract instance */
    function migrateCatOwnersFromPreviousContract(uint startIndex, uint endIndex) 
        onlyBy(owner)
    {
        PreviousCryptoCatsContract previousCatContract = PreviousCryptoCatsContract(previousContractAddress);
        for (uint256 catIndex = startIndex; catIndex <= endIndex; catIndex++) {     // Loop through cat index based on start/end index
            address catOwner = previousCatContract.catIndexToAddress(catIndex);     // Retrieve owner address from previous contract

            if (catOwner != 0x0) {                                                  // Check that cat index has an owner address and is not unclaimed
                catIndexToAddress[catIndex] = catOwner;                             // Update owner address in current contract
                uint256 ownerBalance = previousCatContract.balanceOf(catOwner);     
                balanceOf[catOwner] = ownerBalance;                                 // Update owner cat balance
            }
        }

        catsRemainingToAssign = previousCatContract.catsRemainingToAssign();        // Update count of total cats remaining to assign from prev contract
    }
    
    /* Add value for cat attribute that has been defined (only for cat owner) */
    function setCatAttributeValue(uint catIndex, uint attrIndex, string attrValue) {
        require(catIndex < _totalSupply);                      // cat index requested should not exceed total supply
        require(catIndexToAddress[catIndex] == msg.sender);    // require sender to be cat owner
        require(attrIndex >= 0 && attrIndex < 6);              // require that attribute index is 0 - 5
        bytes memory tempAttributeTypeText = bytes(attributeType[attrIndex]);
        require(tempAttributeTypeText.length != 0);            // require that attribute being stored is not empty
        catAttributes[catIndex][attrIndex] = attrValue;        // store attribute value string in contract based on cat index
    }

    /* Transfer cat by owner to another wallet address
       Different usage in Cryptocats than in normal token transfers 
       This will transfer an owner's cat to another wallet's address
       Cat is identified by cat index passed in as _value */
    function transfer(address _to, uint256 _value) returns (bool success) {
        if (_value < _totalSupply &&                    // ensure cat index is valid
            catIndexToAddress[_value] == msg.sender &&  // ensure sender is owner of cat
            balanceOf[msg.sender] > 0) {                // ensure sender balance of cat exists
            balanceOf[msg.sender]--;                    // update (reduce) cat balance  from owner
            catIndexToAddress[_value] = _to;            // set new owner of cat in cat index
            balanceOf[_to]++;                           // update (include) cat balance for recepient
            Transfer(msg.sender, _to, _value);          // trigger event with transfer details to EVM
            success = true;                             // set success as true after transfer completed
        } else {
            success = false;                            // set success as false if conditions not met
        }
        return success;                                 // return success status
    }

    /* Returns count of how many cats are owned by an owner */
    function balanceOf(address _owner) constant returns (uint256 balance) {
        require(balanceOf[_owner] != 0);    // requires that cat owner balance is not 0
        return balanceOf[_owner];           // return number of cats owned from array of balances by owner address
    }

    /* Return total supply of cats existing */
    function totalSupply() constant returns (uint256 totalSupply) {
        return _totalSupply;
    }

    /* Claim cat at specified index if it is unassigned - Deprecated as replaced with getCat function in v2.0 */
    // function claimCat(uint catIndex) {
    //     require(!allCatsAssigned);                      // require all cats have not been assigned/claimed
    //     require(catsRemainingToAssign != 0);            // require cats remaining to be assigned count is not 0
    //     require(catIndexToAddress[catIndex] == 0x0);    // require owner address for requested cat index is empty
    //     require(catIndex < _totalSupply);               // require cat index requested does not exceed total supply
    //     require(catIndex < currentReleaseCeiling);      // require cat index to not be above current ceiling of released cats
    //     catIndexToAddress[catIndex] = msg.sender;       // Assign sender's address as owner of cat
    //     balanceOf[msg.sender]++;                        // Increase sender's balance holder 
    //     catsRemainingToAssign--;                        // Decrease cats remaining count
    //     Assign(msg.sender, catIndex);                   // Triggers address assignment event to EVM's
    //                                                     // log to allow javascript callbacks
    // }

    /* Return the release index for a cat based on the cat index */
    function getCatRelease(uint catIndex) returns (uint32) {
        for (uint32 i = 0; i < releaseCatIndexUpperBound.length; i++) {     // loop through release index record array
            if (releaseCatIndexUpperBound[i] > catIndex) {                  // check if highest cat index for release is higher than submitted cat index 
                return i;                                                   // return release id
            }
        }   
    }

    /* Gets cat price for a particular cat index */
    function getCatPrice(uint catIndex) returns (uint catPrice) {
        require(catIndex < _totalSupply);                   // Require that cat index is valid

        if(catIndexToPriceException[catIndex] != 0) {       // Check if there is any exception pricing
            return catIndexToPriceException[catIndex];      // Return price if there is overriding exception pricing
        }

        uint32 releaseId = getCatRelease(catIndex);         
        return catReleaseToPrice[releaseId];                // Return cat price based on release pricing if no exception pricing
    }

    /* Sets exception price in Wei that differs from release price for single cat based on cat index */
    function setCatPrice(uint catIndex, uint catPrice)
        onlyBy(owner) 
    {
        require(catIndex < _totalSupply);                   // Require that cat index is valid
        require(catPrice > 0);                              // Check that cat price is not 0
        catIndexToPriceException[catIndex] = catPrice;      // Create cat price record in exception pricing array for this cat index
    }

    /* Get cat with no owner at specified index by paying price */
    function getCat(uint catIndex) payable {
        require(!allCatsAssigned);                      // require all cats have not been assigned/claimed
        require(catsRemainingToAssign != 0);            // require cats remaining to be assigned count is not 0
        require(catIndexToAddress[catIndex] == 0x0);    // require owner address for requested cat index is empty
        require(catIndex < _totalSupply);               // require cat index requested does not exceed total supply
        require(catIndex < currentReleaseCeiling);      // require cat index to not be above current ceiling of released cats
        require(getCatPrice(catIndex) <= msg.value);    // require ETH amount sent with tx is sufficient for cat price

        catIndexToAddress[catIndex] = msg.sender;       // Assign sender's address as owner of cat
        balanceOf[msg.sender]++;                        // Increase sender's balance holder 
        catsRemainingToAssign--;                        // Decrease cats remaining count
        pendingWithdrawals[owner] += msg.value;         // Add paid amount to pending withdrawals for contract owner (bugfix in v3.0)
        Assign(msg.sender, catIndex);                   // Triggers address assignment event to EVM's
                                                        // log to allow javascript callbacks
    }

    /* Get address of owner based on cat index */
    function getCatOwner(uint256 catIndex) public returns (address) {
        require(catIndexToAddress[catIndex] != 0x0);
        return catIndexToAddress[catIndex];             // Return address at array position of cat index
    }

    /* Get address of contract owner who performed contract creation and initialisation */
    function getContractOwner() public returns (address) {
        return owner;                                   // Return address of contract owner
    }

    /* Indicate that cat is no longer for sale (by cat owner only) */
    function catNoLongerForSale(uint catIndex) {
        require (catIndexToAddress[catIndex] == msg.sender);                // Require that sender is cat owner
        require (catIndex < _totalSupply);                                  // Require that cat index is valid
        catsForSale[catIndex] = Offer(false, catIndex, msg.sender, 0, 0x0); // Switch cat for sale flag to false and reset all other values
        CatNoLongerForSale(catIndex);                                       // Create EVM event logging that cat is no longer for sale 
    }

    /* Create sell offer for cat with a certain minimum sale price in wei (by cat owner only) */
    function offerCatForSale(uint catIndex, uint minSalePriceInWei) {
        require (catIndexToAddress[catIndex] == msg.sender);                // Require that sender is cat owner 
        require (catIndex < _totalSupply);                                  // Require that cat index is valid
        catsForSale[catIndex] = Offer(true, catIndex, msg.sender, minSalePriceInWei, 0x0);  // Set cat for sale flag to true and update with price details 
        CatOffered(catIndex, minSalePriceInWei, 0x0);                       // Create EVM event to log details of cat sale
    }

    /* Create sell offer for cat only to a particular buyer address with certain minimum sale price in wei (by cat owner only) */
    function offerCatForSaleToAddress(uint catIndex, uint minSalePriceInWei, address toAddress) {
        require (catIndexToAddress[catIndex] == msg.sender);                // Require that sender is cat owner 
        require (catIndex < _totalSupply);                                  // Require that cat index is valid
        catsForSale[catIndex] = Offer(true, catIndex, msg.sender, minSalePriceInWei, toAddress); // Set cat for sale flag to true and update with price details and only sell to address
        CatOffered(catIndex, minSalePriceInWei, toAddress);                 // Create EVM event to log details of cat sale
    }

    /* Buy cat that is currently on offer  */
    function buyCat(uint catIndex) payable {
        require (catIndex < _totalSupply);                      // require that cat index is valid and less than total cat index                
        Offer offer = catsForSale[catIndex];
        require (offer.isForSale);                              // require that cat is marked for sale  // require buyer to have required address if indicated in offer 
        require (msg.value >= offer.minPrice);                  // require buyer sent enough ETH
        require (offer.seller == catIndexToAddress[catIndex]);  // require seller must still be owner of cat
        if (offer.sellOnlyTo != 0x0) {                          // if cat offer sell only to address is not blank
            require (offer.sellOnlyTo == msg.sender);           // require that buyer is allowed to buy offer
        }
        
        address seller = offer.seller;

        catIndexToAddress[catIndex] = msg.sender;               // update cat owner address to buyer's address
        balanceOf[seller]--;                                    // reduce cat balance of seller
        balanceOf[msg.sender]++;                                // increase cat balance of buyer
        Transfer(seller, msg.sender, 1);                        // create EVM event logging transfer of 1 cat from seller to owner

        CatNoLongerForSale(catIndex);                           // create EVM event logging cat is no longer for sale
        pendingWithdrawals[seller] += msg.value;                // increase pending withdrawal amount of seller based on amount sent in buyer's message
        CatBought(catIndex, msg.value, seller, msg.sender);     // create EVM event logging details of cat purchase

    }

    /* Withdraw any pending ETH amount that is owed to failed bidder or successful seller */
    function withdraw() {
        uint amount = pendingWithdrawals[msg.sender];   // store amount that can be withdrawn by sender
        pendingWithdrawals[msg.sender] = 0;             // zero pending withdrawal amount
        msg.sender.transfer(amount);                    // before performing transfer to message sender
    }
}

contract PreviousCryptoCatsContract {

    /* You can use this hash to verify the image file containing all cats */
    string public imageHash = "e055fe5eb1d95ea4e42b24d1038db13c24667c494ce721375bdd827d34c59059";

    /* Variables to store contract owner and contract token standard details */
    address owner;
    string public standard = 'CryptoCats';
    string public name;
    string public symbol;
    uint8 public decimals;
    uint256 public _totalSupply;
    
    // Store reference to previous cryptocat contract containing alpha release owners
    // PROD
    address public previousContractAddress = 0xa185B9E63FB83A5a1A13A4460B8E8605672b6020;
    // ROPSTEN
    // address public previousContractAddress = 0x0b0DB7bd68F944C219566E54e84483b6c512737B;
    uint8 public contractVersion;
    bool public totalSupplyIsLocked;

    bool public allCatsAssigned = false;        // boolean flag to indicate if all available cats are claimed
    uint public catsRemainingToAssign = 0;   // variable to track cats remaining to be assigned/claimed
    uint public currentReleaseCeiling;       // variable to track maximum cat index for latest release

    /* Create array to store cat index to owner address */
    mapping (uint => address) public catIndexToAddress;

    /* Create an array with all balances */
    mapping (address => uint) public balanceOf;

    /* Initializes contract with initial supply tokens to the creator of the contract */
    function PreviousCryptoCatsContract() payable {
        owner = msg.sender;                          // Set contract creation sender as owner
    }

    /* Returns count of how many cats are owned by an owner */
    function balanceOf(address _owner) constant returns (uint256 balance) {
        require(balanceOf[_owner] != 0);    // requires that cat owner balance is not 0
        return balanceOf[_owner];           // return number of cats owned from array of balances by owner address
    }

    /* Return total supply of cats existing */
    function totalSupply() constant returns (uint256 totalSupply) {
        return _totalSupply;
    }

    /* Get address of owner based on cat index */
    function getCatOwner(uint256 catIndex) public returns (address) {
        require(catIndexToAddress[catIndex] != 0x0);
        return catIndexToAddress[catIndex];             // Return address at array position of cat index
    }

    /* Get address of contract owner who performed contract creation and initialisation */
    function getContractOwner() public returns (address) {
        return owner;                                   // Return address of contract owner
    }

}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"totalSupply","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"catIndex","type":"uint256"}],"name":"catNoLongerForSale","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"catIndexToAddress","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":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"_totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"releaseCatIndexUpperBound","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_releaseId","type":"uint32"},{"name":"catPrice","type":"uint256"}],"name":"updateCatReleasePrice","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"getContractOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"catIndex","type":"uint256"}],"name":"getCat","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"imageHash","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"catIndex","type":"uint256"}],"name":"getCatPrice","outputs":[{"name":"catPrice","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"attributeType","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"catIndex","type":"uint256"},{"name":"minSalePriceInWei","type":"uint256"},{"name":"toAddress","type":"address"}],"name":"offerCatForSaleToAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"standard","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupplyIsLocked","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"catIndex","type":"uint256"},{"name":"attrIndex","type":"uint256"},{"name":"attrValue","type":"string"}],"name":"setCatAttributeValue","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint32"}],"name":"catReleaseToPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_releaseId","type":"uint32"},{"name":"numberOfCatsAdded","type":"uint256"},{"name":"catPrice","type":"uint256"},{"name":"newImageHash","type":"string"}],"name":"releaseCats","outputs":[{"name":"newTotalSupply","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"previousContractAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"catIndex","type":"uint256"}],"name":"getCatRelease","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"catsForSale","outputs":[{"name":"isForSale","type":"bool"},{"name":"catIndex","type":"uint256"},{"name":"seller","type":"address"},{"name":"minPrice","type":"uint256"},{"name":"sellOnlyTo","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"allCatsAssigned","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"contractVersion","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"startIndex","type":"uint256"},{"name":"endIndex","type":"uint256"}],"name":"migrateCatOwnersFromPreviousContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"attributeIndex","type":"uint256"},{"name":"descriptionText","type":"string"}],"name":"setAttributeType","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"currentReleaseCeiling","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"catIndex","type":"uint256"},{"name":"catPrice","type":"uint256"}],"name":"setCatPrice","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"catIndex","type":"uint256"}],"name":"getCatOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"catIndex","type":"uint256"}],"name":"buyCat","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"catIndex","type":"uint256"},{"name":"minSalePriceInWei","type":"uint256"}],"name":"offerCatForSale","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"catIndexToPriceException","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"catsRemainingToAssign","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"lockTotalSupply","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"pendingWithdrawals","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"name":"catAttributes","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":true,"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"catIndex","type":"uint256"}],"name":"CatTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"catIndex","type":"uint256"},{"indexed":false,"name":"minPrice","type":"uint256"},{"indexed":true,"name":"toAddress","type":"address"}],"name":"CatOffered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"catIndex","type":"uint256"},{"indexed":false,"name":"price","type":"uint256"},{"indexed":true,"name":"fromAddress","type":"address"},{"indexed":true,"name":"toAddress","type":"address"}],"name":"CatBought","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"catIndex","type":"uint256"}],"name":"CatNoLongerForSale","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"catIndex","type":"uint256"}],"name":"Assign","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":"newCatsAdded","type":"uint256"},{"indexed":false,"name":"totalSupply","type":"uint256"},{"indexed":false,"name":"catPrice","type":"uint256"},{"indexed":false,"name":"newImageHash","type":"string"}],"name":"ReleaseUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"releaseId","type":"uint32"},{"indexed":false,"name":"catPrice","type":"uint256"}],"name":"UpdateReleasePrice","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"attributeNumber","type":"uint256"},{"indexed":true,"name":"ownerAddress","type":"address"},{"indexed":false,"name":"oldValue","type":"bytes32"},{"indexed":false,"name":"newValue","type":"bytes32"}],"name":"UpdateAttribute","type":"event"}]

6060604052606060405190810160405280604081526020017f336238326366643566623339666166663363326339323431636135613234343381526020017f3966313162646561613764366330373731656237383265613763393633393137815250600090805190602001906200007892919062000378565b506040805190810160405280600a81526020017f43727970746f436174730000000000000000000000000000000000000000000081525060029080519060200190620000c692919062000378565b5073ccec9b9cb223854c46843a1990c36c4a37d80e2e600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600760166101000a81548160ff021916908315150217905550600060085533600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506102716006819055506006546008819055506040805190810160405280600a81526020017f43525950544f434154530000000000000000000000000000000000000000000081525060039080519060200190620001dc92919062000378565b506040805190810160405280600481526020017f4343415400000000000000000000000000000000000000000000000000000000815250600490805190602001906200022a92919062000378565b506000600560006101000a81548160ff021916908360ff1602179055506003600760146101000a81548160ff021916908360ff1602179055506102716009819055506000600760156101000a81548160ff021916908315150217905550601080548060010182816200029d9190620003ff565b91600052602060002090016000600c9091909150555060108054806001018281620002c99190620003ff565b9160005260206000209001600060bd9091909150555060108054806001018281620002f59190620003ff565b91600052602060002090016000600654909190915055506000600b60008063ffffffff168152602001908152602001600020819055506000600b6000600163ffffffff1681526020019081526020016000208190555067011c37937e080000600b6000600263ffffffff1681526020019081526020016000208190555062000456565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620003bb57805160ff1916838001178555620003ec565b82800160010185558215620003ec579182015b82811115620003eb578251825591602001919060010190620003ce565b5b509050620003fb91906200042e565b5090565b81548183558181151162000429578183600052602060002091820191016200042891906200042e565b5b505050565b6200045391905b808211156200044f57600081600090555060010162000435565b5090565b90565b612efd80620004666000396000f3006060604052600436106101ee576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146101f357806318160ddd146102815780631fd9f187146102aa578063210fe93b146102cd578063313ce567146103305780633ccfd60b1461035f5780633eaaf86b1461037457806340c558b21461039d57806342a4af66146103d4578063442890d5146104065780634da2b48e1461045b57806351605d801461047357806351ecfd161461050157806353e9dcae1461053857806355bdd4ac146105d45780635a3b7e421461061f57806361718141146106ad57806368d89792146106da57806370a08231146107495780637b2c514814610796578063861dd0a5146107d357806393fffddc1461086557806395d89b41146108ba5780639c9cc12a146109485780639d773a1b1461098b5780639e3e687814610a3a578063a0a8e46014610a67578063a2093e1b14610a96578063a7e1a8ee14610ac2578063a9059cbb14610b28578063ab179e9f14610b82578063b3c6487b14610bab578063b936483514610bd7578063d72503ba14610c3a578063dddf33cc14610c52578063e3acc49a14610c7e578063ea34130914610cb5578063ebeb0f4814610cde578063f3f4370314610cf3578063f7e2367714610d40575b600080fd5b34156101fe57600080fd5b610206610de5565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561024657808201518184015260208101905061022b565b50505050905090810190601f1680156102735780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561028c57600080fd5b610294610e83565b6040518082815260200191505060405180910390f35b34156102b557600080fd5b6102cb6004808035906020019091905050610e8d565b005b34156102d857600080fd5b6102ee600480803590602001909190505061106b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561033b57600080fd5b61034361109e565b604051808260ff1660ff16815260200191505060405180910390f35b341561036a57600080fd5b6103726110b1565b005b341561037f57600080fd5b61038761117d565b6040518082815260200191505060405180910390f35b34156103a857600080fd5b6103be6004808035906020019091905050611183565b6040518082815260200191505060405180910390f35b34156103df57600080fd5b610404600480803563ffffffff169060200190919080359060200190919050506111a7565b005b341561041157600080fd5b610419611292565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61047160048080359060200190919050506112bc565b005b341561047e57600080fd5b6104866114ed565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156104c65780820151818401526020810190506104ab565b50505050905090810190601f1680156104f35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561050c57600080fd5b610522600480803590602001909190505061158b565b6040518082815260200191505060405180910390f35b341561054357600080fd5b610559600480803590602001909190505061160a565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561059957808201518184015260208101905061057e565b50505050905090810190601f1680156105c65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156105df57600080fd5b61061d600480803590602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506116ba565b005b341561062a57600080fd5b6106326118ba565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610672578082015181840152602081019050610657565b50505050905090810190601f16801561069f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156106b857600080fd5b6106c0611958565b604051808215151515815260200191505060405180910390f35b34156106e557600080fd5b610747600480803590602001909190803590602001909190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190505061196b565b005b341561075457600080fd5b610780600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611b07565b6040518082815260200191505060405180910390f35b34156107a157600080fd5b6107bd600480803563ffffffff16906020019091905050611b9e565b6040518082815260200191505060405180910390f35b34156107de57600080fd5b61084f600480803563ffffffff1690602001909190803590602001909190803590602001909190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050611bb6565b6040518082815260200191505060405180910390f35b341561087057600080fd5b610878611d8b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156108c557600080fd5b6108cd611db1565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561090d5780820151818401526020810190506108f2565b50505050905090810190601f16801561093a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561095357600080fd5b6109696004808035906020019091905050611e4f565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b341561099657600080fd5b6109ac6004808035906020019091905050611eae565b60405180861515151581526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019550505050505060405180910390f35b3415610a4557600080fd5b610a4d611f31565b604051808215151515815260200191505060405180910390f35b3415610a7257600080fd5b610a7a611f44565b604051808260ff1660ff16815260200191505060405180910390f35b3415610aa157600080fd5b610ac06004808035906020019091908035906020019091905050611f57565b005b3415610acd57600080fd5b610b26600480803590602001909190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190505061229a565b005b3415610b3357600080fd5b610b68600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050612340565b604051808215151515815260200191505060405180910390f35b3415610b8d57600080fd5b610b9561256e565b6040518082815260200191505060405180910390f35b3415610bb657600080fd5b610bd56004808035906020019091908035906020019091905050612574565b005b3415610be257600080fd5b610bf8600480803590602001909190505061260d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610c5060048080359060200190919050506126a2565b005b3415610c5d57600080fd5b610c7c6004808035906020019091908035906020019091905050612a91565b005b3415610c8957600080fd5b610c9f6004808035906020019091905050612c7c565b6040518082815260200191505060405180910390f35b3415610cc057600080fd5b610cc8612c94565b6040518082815260200191505060405180910390f35b3415610ce957600080fd5b610cf1612c9a565b005b3415610cfe57600080fd5b610d2a600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612d15565b6040518082815260200191505060405180910390f35b3415610d4b57600080fd5b610d6a6004808035906020019091908035906020019091905050612d2d565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610daa578082015181840152602081019050610d8f565b50505050905090810190601f168015610dd75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b60038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610e7b5780601f10610e5057610100808354040283529160200191610e7b565b820191906000526020600020905b815481529060010190602001808311610e5e57829003601f168201915b505050505081565b6000600654905090565b3373ffffffffffffffffffffffffffffffffffffffff16600a600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515610efa57600080fd5b60065481101515610f0a57600080fd5b60a0604051908101604052806000151581526020018281526020013373ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff168152506011600083815260200190815260200160002060008201518160000160006101000a81548160ff0219169083151502179055506020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506060820151816003015560808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550905050807f7d5dcd38c1855f2d3253f06fbd995a7b03b1bd0d20277c21ffcb093862ccb0df60405160405180910390a250565b600a6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900460ff1681565b6000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050151561117a57600080fd5b50565b60065481565b60108181548110151561119257fe5b90600052602060002090016000915090505481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561120457600080fd5b6010805490508363ffffffff161115151561121e57600080fd5b81600b60008563ffffffff1663ffffffff168152602001908152602001600020819055507f0d18952b49d796ef682b17341dc9347e1cbd53ede7fa0529048f9d1c2c485fd48383604051808363ffffffff1663ffffffff1681526020018281526020019250505060405180910390a1505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760169054906101000a900460ff161515156112d857600080fd5b6000600854141515156112ea57600080fd5b6000600a600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561134257600080fd5b6006548110151561135257600080fd5b6009548110151561136257600080fd5b3461136c8261158b565b1115151561137957600080fd5b33600a600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001019190505550600860008154809291906001900391905055503460126000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055503373ffffffffffffffffffffffffffffffffffffffff167f8a0e37b73a0d9c82e205d4d1a3ff3d0b57ce5f4d7bccf6bac03336dc101cb7ba826040518082815260200191505060405180910390a250565b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115835780601f1061155857610100808354040283529160200191611583565b820191906000526020600020905b81548152906001019060200180831161156657829003601f168201915b505050505081565b6000806006548310151561159e57600080fd5b6000600c6000858152602001908152602001600020541415156115d657600c6000848152602001908152602001600020549150611604565b6115df83611e4f565b9050600b60008263ffffffff1663ffffffff1681526020019081526020016000205491505b50919050565b600e6020528060005260406000206000915090508054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156116b25780601f10611687576101008083540402835291602001916116b2565b820191906000526020600020905b81548152906001019060200180831161169557829003601f168201915b505050505081565b3373ffffffffffffffffffffffffffffffffffffffff16600a600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561172757600080fd5b6006548310151561173757600080fd5b60a0604051908101604052806001151581526020018481526020013373ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018273ffffffffffffffffffffffffffffffffffffffff168152506011600085815260200190815260200160002060008201518160000160006101000a81548160ff0219169083151502179055506020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506060820151816003015560808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050508073ffffffffffffffffffffffffffffffffffffffff16837f76eaef99642f3e716e9cfa6e3047136d4087a9fc18673cb754c35f522fa6f61f846040518082815260200191505060405180910390a3505050565b60028054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156119505780601f1061192557610100808354040283529160200191611950565b820191906000526020600020905b81548152906001019060200180831161193357829003601f168201915b505050505081565b600760159054906101000a900460ff1681565b611973612dec565b6006548410151561198357600080fd5b3373ffffffffffffffffffffffffffffffffffffffff16600a600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156119f057600080fd5b60008310158015611a015750600683105b1515611a0c57600080fd5b600e60008481526020019081526020016000208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611ab35780601f10611a8857610100808354040283529160200191611ab3565b820191906000526020600020905b815481529060010190602001808311611a9657829003601f168201915b505050505090506000815114151515611acb57600080fd5b81600f600086815260200190815260200160002084600681101515611aec57fe5b019080519060200190611b00929190612e00565b5050505050565b600080600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414151515611b5757600080fd5b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600b6020528060005260406000206000915090505481565b600080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611c1657600080fd5b600760159054906101000a900460ff16151515611c3257600080fd5b600086111515611c4157600080fd5b85600954016009819055506006549150856006540160068190555085600854016008819055508360009080519060200190611c7d929190612e00565b5084600b60008963ffffffff1663ffffffff1681526020019081526020016000208190555060108054806001018281611cb69190612e80565b9160005260206000209001600060065490919091505550857f76edb1b512062ed2fa9a21753f6906d5806f2522b48caf004f8b78eac6418ee560065487876040518084815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611d40578082015181840152602081019050611d25565b50505050905090810190601f168015611d6d5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a260065492505050949350505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611e475780601f10611e1c57610100808354040283529160200191611e47565b820191906000526020600020905b815481529060010190602001808311611e2a57829003601f168201915b505050505081565b600080600090505b6010805490508163ffffffff161015611ea7578260108263ffffffff16815481101515611e8057fe5b9060005260206000209001541115611e9a57809150611ea8565b8080600101915050611e57565b5b50919050565b60116020528060005260406000206000915090508060000160009054906101000a900460ff16908060010154908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060030154908060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905085565b600760169054906101000a900460ff1681565b600760149054906101000a900460ff1681565b600080600080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611fba57600080fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1694508693505b8584111515612204578473ffffffffffffffffffffffffffffffffffffffff1663210fe93b856000604051602001526040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b151561206357600080fd5b6102c65a03f1151561207457600080fd5b50505060405180519050925060008373ffffffffffffffffffffffffffffffffffffffff161415156121f75782600a600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508473ffffffffffffffffffffffffffffffffffffffff166370a08231846000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b151561219557600080fd5b6102c65a03f115156121a657600080fd5b50505060405180519050915081600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8380600101945050611fe3565b8473ffffffffffffffffffffffffffffffffffffffff1663ea3413096000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b151561227057600080fd5b6102c65a03f1151561228157600080fd5b5050506040518051905060088190555050505050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156122f757600080fd5b600083101580156123085750600683105b151561231357600080fd5b81600e6000858152602001908152602001600020908051906020019061233a929190612e00565b50505050565b6000600654821080156123b157503373ffffffffffffffffffffffffffffffffffffffff16600a600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80156123fc57506000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561256057600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919060019003919050555082600a600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919060010191905055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050612565565b600090505b80905092915050565b60095481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156125d157600080fd5b600654831015156125e157600080fd5b6000821115156125f057600080fd5b81600c600085815260200190815260200160002081905550505050565b600080600a600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415151561266757600080fd5b600a600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600080600654831015156126b557600080fd5b6011600084815260200190815260200160002091508160000160009054906101000a900460ff1615156126e757600080fd5b816003015434101515156126fa57600080fd5b600a600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561278b57600080fd5b60008260040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561282e573373ffffffffffffffffffffffffffffffffffffffff168260040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561282d57600080fd5b5b8160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905033600a600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600d60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600190039190505550600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919060010191905055503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60016040518082815260200191505060405180910390a3827f7d5dcd38c1855f2d3253f06fbd995a7b03b1bd0d20277c21ffcb093862ccb0df60405160405180910390a234601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16847f6bd7e7dd1046023e899374de62f095782f09a5ad4633e535375a11724bafed74346040518082815260200191505060405180910390a4505050565b3373ffffffffffffffffffffffffffffffffffffffff16600a600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515612afe57600080fd5b60065482101515612b0e57600080fd5b60a0604051908101604052806001151581526020018381526020013373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001600073ffffffffffffffffffffffffffffffffffffffff168152506011600084815260200190815260200160002060008201518160000160006101000a81548160ff0219169083151502179055506020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506060820151816003015560808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050506000827f76eaef99642f3e716e9cfa6e3047136d4087a9fc18673cb754c35f522fa6f61f836040518082815260200191505060405180910390a35050565b600c6020528060005260406000206000915090505481565b60085481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612cf757600080fd5b6001600760156101000a81548160ff02191690831515021790555050565b60126020528060005260406000206000915090505481565b600f60205281600052604060002081600681101515612d4857fe5b01600091509150508054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612de45780601f10612db957610100808354040283529160200191612de4565b820191906000526020600020905b815481529060010190602001808311612dc757829003601f168201915b505050505081565b602060405190810160405280600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612e4157805160ff1916838001178555612e6f565b82800160010185558215612e6f579182015b82811115612e6e578251825591602001919060010190612e53565b5b509050612e7c9190612eac565b5090565b815481835581811511612ea757818360005260206000209182019101612ea69190612eac565b5b505050565b612ece91905b80821115612eca576000816000905550600101612eb2565b5090565b905600a165627a7a72305820b792cd9a79cc96a4af85586e03209a6ca366987cc676d6dd123226f23b5d938f0029

Deployed Bytecode

0x6060604052600436106101ee576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146101f357806318160ddd146102815780631fd9f187146102aa578063210fe93b146102cd578063313ce567146103305780633ccfd60b1461035f5780633eaaf86b1461037457806340c558b21461039d57806342a4af66146103d4578063442890d5146104065780634da2b48e1461045b57806351605d801461047357806351ecfd161461050157806353e9dcae1461053857806355bdd4ac146105d45780635a3b7e421461061f57806361718141146106ad57806368d89792146106da57806370a08231146107495780637b2c514814610796578063861dd0a5146107d357806393fffddc1461086557806395d89b41146108ba5780639c9cc12a146109485780639d773a1b1461098b5780639e3e687814610a3a578063a0a8e46014610a67578063a2093e1b14610a96578063a7e1a8ee14610ac2578063a9059cbb14610b28578063ab179e9f14610b82578063b3c6487b14610bab578063b936483514610bd7578063d72503ba14610c3a578063dddf33cc14610c52578063e3acc49a14610c7e578063ea34130914610cb5578063ebeb0f4814610cde578063f3f4370314610cf3578063f7e2367714610d40575b600080fd5b34156101fe57600080fd5b610206610de5565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561024657808201518184015260208101905061022b565b50505050905090810190601f1680156102735780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561028c57600080fd5b610294610e83565b6040518082815260200191505060405180910390f35b34156102b557600080fd5b6102cb6004808035906020019091905050610e8d565b005b34156102d857600080fd5b6102ee600480803590602001909190505061106b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561033b57600080fd5b61034361109e565b604051808260ff1660ff16815260200191505060405180910390f35b341561036a57600080fd5b6103726110b1565b005b341561037f57600080fd5b61038761117d565b6040518082815260200191505060405180910390f35b34156103a857600080fd5b6103be6004808035906020019091905050611183565b6040518082815260200191505060405180910390f35b34156103df57600080fd5b610404600480803563ffffffff169060200190919080359060200190919050506111a7565b005b341561041157600080fd5b610419611292565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61047160048080359060200190919050506112bc565b005b341561047e57600080fd5b6104866114ed565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156104c65780820151818401526020810190506104ab565b50505050905090810190601f1680156104f35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561050c57600080fd5b610522600480803590602001909190505061158b565b6040518082815260200191505060405180910390f35b341561054357600080fd5b610559600480803590602001909190505061160a565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561059957808201518184015260208101905061057e565b50505050905090810190601f1680156105c65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156105df57600080fd5b61061d600480803590602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506116ba565b005b341561062a57600080fd5b6106326118ba565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610672578082015181840152602081019050610657565b50505050905090810190601f16801561069f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156106b857600080fd5b6106c0611958565b604051808215151515815260200191505060405180910390f35b34156106e557600080fd5b610747600480803590602001909190803590602001909190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190505061196b565b005b341561075457600080fd5b610780600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611b07565b6040518082815260200191505060405180910390f35b34156107a157600080fd5b6107bd600480803563ffffffff16906020019091905050611b9e565b6040518082815260200191505060405180910390f35b34156107de57600080fd5b61084f600480803563ffffffff1690602001909190803590602001909190803590602001909190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050611bb6565b6040518082815260200191505060405180910390f35b341561087057600080fd5b610878611d8b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156108c557600080fd5b6108cd611db1565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561090d5780820151818401526020810190506108f2565b50505050905090810190601f16801561093a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561095357600080fd5b6109696004808035906020019091905050611e4f565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b341561099657600080fd5b6109ac6004808035906020019091905050611eae565b60405180861515151581526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019550505050505060405180910390f35b3415610a4557600080fd5b610a4d611f31565b604051808215151515815260200191505060405180910390f35b3415610a7257600080fd5b610a7a611f44565b604051808260ff1660ff16815260200191505060405180910390f35b3415610aa157600080fd5b610ac06004808035906020019091908035906020019091905050611f57565b005b3415610acd57600080fd5b610b26600480803590602001909190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190505061229a565b005b3415610b3357600080fd5b610b68600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050612340565b604051808215151515815260200191505060405180910390f35b3415610b8d57600080fd5b610b9561256e565b6040518082815260200191505060405180910390f35b3415610bb657600080fd5b610bd56004808035906020019091908035906020019091905050612574565b005b3415610be257600080fd5b610bf8600480803590602001909190505061260d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610c5060048080359060200190919050506126a2565b005b3415610c5d57600080fd5b610c7c6004808035906020019091908035906020019091905050612a91565b005b3415610c8957600080fd5b610c9f6004808035906020019091905050612c7c565b6040518082815260200191505060405180910390f35b3415610cc057600080fd5b610cc8612c94565b6040518082815260200191505060405180910390f35b3415610ce957600080fd5b610cf1612c9a565b005b3415610cfe57600080fd5b610d2a600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612d15565b6040518082815260200191505060405180910390f35b3415610d4b57600080fd5b610d6a6004808035906020019091908035906020019091905050612d2d565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610daa578082015181840152602081019050610d8f565b50505050905090810190601f168015610dd75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b60038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610e7b5780601f10610e5057610100808354040283529160200191610e7b565b820191906000526020600020905b815481529060010190602001808311610e5e57829003601f168201915b505050505081565b6000600654905090565b3373ffffffffffffffffffffffffffffffffffffffff16600a600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515610efa57600080fd5b60065481101515610f0a57600080fd5b60a0604051908101604052806000151581526020018281526020013373ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff168152506011600083815260200190815260200160002060008201518160000160006101000a81548160ff0219169083151502179055506020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506060820151816003015560808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550905050807f7d5dcd38c1855f2d3253f06fbd995a7b03b1bd0d20277c21ffcb093862ccb0df60405160405180910390a250565b600a6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900460ff1681565b6000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050151561117a57600080fd5b50565b60065481565b60108181548110151561119257fe5b90600052602060002090016000915090505481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561120457600080fd5b6010805490508363ffffffff161115151561121e57600080fd5b81600b60008563ffffffff1663ffffffff168152602001908152602001600020819055507f0d18952b49d796ef682b17341dc9347e1cbd53ede7fa0529048f9d1c2c485fd48383604051808363ffffffff1663ffffffff1681526020018281526020019250505060405180910390a1505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760169054906101000a900460ff161515156112d857600080fd5b6000600854141515156112ea57600080fd5b6000600a600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561134257600080fd5b6006548110151561135257600080fd5b6009548110151561136257600080fd5b3461136c8261158b565b1115151561137957600080fd5b33600a600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001019190505550600860008154809291906001900391905055503460126000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055503373ffffffffffffffffffffffffffffffffffffffff167f8a0e37b73a0d9c82e205d4d1a3ff3d0b57ce5f4d7bccf6bac03336dc101cb7ba826040518082815260200191505060405180910390a250565b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115835780601f1061155857610100808354040283529160200191611583565b820191906000526020600020905b81548152906001019060200180831161156657829003601f168201915b505050505081565b6000806006548310151561159e57600080fd5b6000600c6000858152602001908152602001600020541415156115d657600c6000848152602001908152602001600020549150611604565b6115df83611e4f565b9050600b60008263ffffffff1663ffffffff1681526020019081526020016000205491505b50919050565b600e6020528060005260406000206000915090508054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156116b25780601f10611687576101008083540402835291602001916116b2565b820191906000526020600020905b81548152906001019060200180831161169557829003601f168201915b505050505081565b3373ffffffffffffffffffffffffffffffffffffffff16600a600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561172757600080fd5b6006548310151561173757600080fd5b60a0604051908101604052806001151581526020018481526020013373ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018273ffffffffffffffffffffffffffffffffffffffff168152506011600085815260200190815260200160002060008201518160000160006101000a81548160ff0219169083151502179055506020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506060820151816003015560808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050508073ffffffffffffffffffffffffffffffffffffffff16837f76eaef99642f3e716e9cfa6e3047136d4087a9fc18673cb754c35f522fa6f61f846040518082815260200191505060405180910390a3505050565b60028054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156119505780601f1061192557610100808354040283529160200191611950565b820191906000526020600020905b81548152906001019060200180831161193357829003601f168201915b505050505081565b600760159054906101000a900460ff1681565b611973612dec565b6006548410151561198357600080fd5b3373ffffffffffffffffffffffffffffffffffffffff16600a600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156119f057600080fd5b60008310158015611a015750600683105b1515611a0c57600080fd5b600e60008481526020019081526020016000208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611ab35780601f10611a8857610100808354040283529160200191611ab3565b820191906000526020600020905b815481529060010190602001808311611a9657829003601f168201915b505050505090506000815114151515611acb57600080fd5b81600f600086815260200190815260200160002084600681101515611aec57fe5b019080519060200190611b00929190612e00565b5050505050565b600080600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414151515611b5757600080fd5b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600b6020528060005260406000206000915090505481565b600080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611c1657600080fd5b600760159054906101000a900460ff16151515611c3257600080fd5b600086111515611c4157600080fd5b85600954016009819055506006549150856006540160068190555085600854016008819055508360009080519060200190611c7d929190612e00565b5084600b60008963ffffffff1663ffffffff1681526020019081526020016000208190555060108054806001018281611cb69190612e80565b9160005260206000209001600060065490919091505550857f76edb1b512062ed2fa9a21753f6906d5806f2522b48caf004f8b78eac6418ee560065487876040518084815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611d40578082015181840152602081019050611d25565b50505050905090810190601f168015611d6d5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a260065492505050949350505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611e475780601f10611e1c57610100808354040283529160200191611e47565b820191906000526020600020905b815481529060010190602001808311611e2a57829003601f168201915b505050505081565b600080600090505b6010805490508163ffffffff161015611ea7578260108263ffffffff16815481101515611e8057fe5b9060005260206000209001541115611e9a57809150611ea8565b8080600101915050611e57565b5b50919050565b60116020528060005260406000206000915090508060000160009054906101000a900460ff16908060010154908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060030154908060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905085565b600760169054906101000a900460ff1681565b600760149054906101000a900460ff1681565b600080600080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611fba57600080fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1694508693505b8584111515612204578473ffffffffffffffffffffffffffffffffffffffff1663210fe93b856000604051602001526040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b151561206357600080fd5b6102c65a03f1151561207457600080fd5b50505060405180519050925060008373ffffffffffffffffffffffffffffffffffffffff161415156121f75782600a600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508473ffffffffffffffffffffffffffffffffffffffff166370a08231846000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b151561219557600080fd5b6102c65a03f115156121a657600080fd5b50505060405180519050915081600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8380600101945050611fe3565b8473ffffffffffffffffffffffffffffffffffffffff1663ea3413096000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b151561227057600080fd5b6102c65a03f1151561228157600080fd5b5050506040518051905060088190555050505050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156122f757600080fd5b600083101580156123085750600683105b151561231357600080fd5b81600e6000858152602001908152602001600020908051906020019061233a929190612e00565b50505050565b6000600654821080156123b157503373ffffffffffffffffffffffffffffffffffffffff16600a600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80156123fc57506000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561256057600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919060019003919050555082600a600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919060010191905055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050612565565b600090505b80905092915050565b60095481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156125d157600080fd5b600654831015156125e157600080fd5b6000821115156125f057600080fd5b81600c600085815260200190815260200160002081905550505050565b600080600a600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415151561266757600080fd5b600a600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600080600654831015156126b557600080fd5b6011600084815260200190815260200160002091508160000160009054906101000a900460ff1615156126e757600080fd5b816003015434101515156126fa57600080fd5b600a600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561278b57600080fd5b60008260040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561282e573373ffffffffffffffffffffffffffffffffffffffff168260040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561282d57600080fd5b5b8160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905033600a600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600d60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600190039190505550600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919060010191905055503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60016040518082815260200191505060405180910390a3827f7d5dcd38c1855f2d3253f06fbd995a7b03b1bd0d20277c21ffcb093862ccb0df60405160405180910390a234601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16847f6bd7e7dd1046023e899374de62f095782f09a5ad4633e535375a11724bafed74346040518082815260200191505060405180910390a4505050565b3373ffffffffffffffffffffffffffffffffffffffff16600a600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515612afe57600080fd5b60065482101515612b0e57600080fd5b60a0604051908101604052806001151581526020018381526020013373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001600073ffffffffffffffffffffffffffffffffffffffff168152506011600084815260200190815260200160002060008201518160000160006101000a81548160ff0219169083151502179055506020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506060820151816003015560808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050506000827f76eaef99642f3e716e9cfa6e3047136d4087a9fc18673cb754c35f522fa6f61f836040518082815260200191505060405180910390a35050565b600c6020528060005260406000206000915090505481565b60085481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612cf757600080fd5b6001600760156101000a81548160ff02191690831515021790555050565b60126020528060005260406000206000915090505481565b600f60205281600052604060002081600681101515612d4857fe5b01600091509150508054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612de45780601f10612db957610100808354040283529160200191612de4565b820191906000526020600020905b815481529060010190602001808311612dc757829003601f168201915b505050505081565b602060405190810160405280600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612e4157805160ff1916838001178555612e6f565b82800160010185558215612e6f579182015b82811115612e6e578251825591602001919060010190612e53565b5b509050612e7c9190612eac565b5090565b815481835581811511612ea757818360005260206000209182019101612ea69190612eac565b5b505050565b612ece91905b80821115612eca576000816000905550600101612eb2565b5090565b905600a165627a7a72305820b792cd9a79cc96a4af85586e03209a6ca366987cc676d6dd123226f23b5d938f0029

Deployed Bytecode Sourcemap

1316:21443:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1876:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:2;8:100;;;99:1;94:3;90;84:5;80:1;75:3;71;64:6;52:2;49:1;45:3;40:15;;8:100;;;12:14;3:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13372:100:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18518:554;;;;;;;;;;;;;;;;;;;;;;;;;;2812:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1928:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22427:329;;;;;;;;;;;;;;1956:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3975:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9068:453;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18285:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16529:1365;;;;;;;;;;;;;;;;;;1630:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:2;8:100;;;99:1;94:3;90;84:5;80:1;75:3;71;64:6;52:2;49:1;45:3;40:15;;8:100;;;12:14;3:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15335:593:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3344:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:2;8:100;;;99:1;94:3;90;84:5;80:1;75:3;71;64:6;52:2;49:1;45:3;40:15;;8:100;;;12:14;3:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19896:636:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1832:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:2;8:100;;;99:1;94:3;90;84:5;80:1;75:3;71;64:6;52:2;49:1;45:3;40:15;;8:100;;;12:14;3:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2390:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10896:730;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13033:283;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2968:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7624:1335;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2263:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1901:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:2;8:100;;;99:1;94:3;90;84:5;80:1;75:3;71;64:6;52:2;49:1;45:3;40:15;;8:100;;;12:14;3:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14809:465:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4096:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2430:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2355:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9643:1159;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7284:226;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11892:1069;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2646:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16041:412;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17953:232;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20587:1738;;;;;;;;;;;;;;;;;;19178:579;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3121:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2541:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7087:100;;;;;;;;;;;;;;4257:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3494:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:2;8:100;;;99:1;94:3;90;84:5;80:1;75:3;71;64:6;52:2;49:1;45:3;40:15;;8:100;;;12:14;3:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1876:18:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;13372:100::-;13413:19;13452:12;;13445:19;;13372:100;:::o;18518:554::-;18612:10;18581:41;;:17;:27;18599:8;18581:27;;;;;;;;;;;;;;;;;;;;;:41;;;18572:51;;;;;;;;18705:12;;18694:8;:23;18685:33;;;;;;;;18821:42;;;;;;;;;18827:5;18821:42;;;;;;18834:8;18821:42;;;;18844:10;18821:42;;;;;;18856:1;18821:42;;;;18859:3;18821:42;;;;;18797:11;:21;18809:8;18797:21;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18957:8;18938:28;;;;;;;;;;18518:554;:::o;2812:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;1928:21::-;;;;;;;;;;;;;:::o;22427:329::-;22458:11;22472:18;:30;22491:10;22472:30;;;;;;;;;;;;;;;;22458:44;;22596:1;22563:18;:30;22582:10;22563:30;;;;;;;;;;;;;;;:34;;;;22654:10;:19;;:27;22674:6;22654:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22427:329;:::o;1956:27::-;;;;:::o;3975:39::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;9068:453::-;9152:5;;;;;;;;;;;1513:8;1499:22;;:10;:22;;;1491:31;;;;;;;;9197:25;:32;;;;9183:10;:46;;;;9175:55;;;;;;;;9318:8;9286:17;:29;9304:10;9286:29;;;;;;;;;;;;;;;:40;;;;9395;9414:10;9426:8;9395:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;9068:453;;;:::o;18285:154::-;18329:7;18356:5;;;;;;;;;;;18349:12;;18285:154;:::o;16529:1365::-;16588:15;;;;;;;;;;;16587:16;16579:25;;;;;;;;16720:1;16695:21;;:26;;16687:35;;;;;;;;16839:3;16808:17;:27;16826:8;16808:27;;;;;;;;;;;;;;;;;;;;;:34;;;16800:43;;;;;;;;16934:12;;16923:8;:23;16915:32;;;;;;;;17051:21;;17040:8;:32;17032:41;;;;;;;;17192:9;17167:21;17179:8;17167:11;:21::i;:::-;:34;;17159:43;;;;;;;;17311:10;17281:17;:27;17299:8;17281:27;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;17381:9;:21;17391:10;17381:21;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;17475:21;;:23;;;;;;;;;;;;;;17594:9;17565:18;:25;17584:5;;;;;;;;;;;17565:25;;;;;;;;;;;;;;;;:38;;;;;;;;;;;17707:10;17700:28;;;17719:8;17700:28;;;;;;;;;;;;;;;;;;16529:1365;:::o;1630:92::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;15335:593::-;15380:13;15739:16;15425:12;;15414:8;:23;15406:32;;;;;;;;15545:1;15507:24;:34;15532:8;15507:34;;;;;;;;;;;;:39;;15504:223;;;15619:24;:34;15644:8;15619:34;;;;;;;;;;;;15612:41;;;;15504:223;15758:23;15772:8;15758:13;:23::i;:::-;15739:42;;15808:17;:28;15826:9;15808:28;;;;;;;;;;;;;;;;15801:35;;15335:593;;;;;:::o;3344:45::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;19896:636::-;20039:10;20008:41;;:17;:27;20026:8;20008:27;;;;;;;;;;;;;;;;;;;;;:41;;;19999:51;;;;;;;;20133:12;;20122:8;:23;20113:33;;;;;;;;20249:63;;;;;;;;;20255:4;20249:63;;;;;;20261:8;20249:63;;;;20271:10;20249:63;;;;;;20283:17;20249:63;;;;20302:9;20249:63;;;;;20225:11;:21;20237:8;20225:21;;;;;;;;;;;:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20451:9;20411:50;;20422:8;20411:50;20432:17;20411:50;;;;;;;;;;;;;;;;;;19896:636;;;:::o;1832:37::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2390:31::-;;;;;;;;;;;;;:::o;10896:730::-;11307:34;;:::i;:::-;11005:12;;10994:8;:23;10986:32;;;;;;;;11143:10;11112:41;;:17;:27;11130:8;11112:27;;;;;;;;;;;;;;;;;;;;;:41;;;11104:50;;;;;;;;11223:1;11210:9;:14;;:31;;;;;11240:1;11228:9;:13;11210:31;11202:40;;;;;;;;11350:13;:24;11364:9;11350:24;;;;;;;;;;;11307:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11426:1;11394:21;:28;:33;;11386:42;;;;;;;;11539:9;11502:13;:23;11516:8;11502:23;;;;;;;;;;;11526:9;11502:34;;;;;;;;;;:46;;;;;;;;;;;;:::i;:::-;;10896:730;;;;:::o;13033:283::-;13086:15;13143:1;13122:9;:17;13132:6;13122:17;;;;;;;;;;;;;;;;:22;;13114:31;;;;;;;;13210:9;:17;13220:6;13210:17;;;;;;;;;;;;;;;;13203:24;;13033:283;;;:::o;2968:49::-;;;;;;;;;;;;;;;;;:::o;7624:1335::-;7769:22;8128:20;7744:5;;;;;;;;;;;1513:8;1499:22;;:10;:22;;;1491:31;;;;;;;;7819:19;;;;;;;;;;;7818:20;7810:29;;;;;;;;7942:1;7922:17;:21;7914:30;;;;;;;;8064:17;8040:21;;:41;8016:21;:65;;;;8151:12;;8128:35;;8204:17;8189:12;;:32;8174:12;:47;;;;8280:17;8256:21;;:41;8232:21;:65;;;;8362:12;8350:9;:24;;;;;;;;;;;;:::i;:::-;;8482:8;8450:17;:29;8468:10;8450:29;;;;;;;;;;;;;;;:40;;;;8587:25;:44;;;;;;;;;;;:::i;:::-;;;;;;;;;;8618:12;;8587:44;;;;;;;8731:17;8717:70;8750:12;;8764:8;8774:12;8717:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:2;8:100;;;99:1;94:3;90;84:5;80:1;75:3;71;64:6;52:2;49:1;45:3;40:15;;8:100;;;12:14;3:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8853:12:0;;8846:19;;7624:1335;;;;;;;;:::o;2263:83::-;;;;;;;;;;;;;:::o;1901:20::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14809:465::-;14856:6;14880:8;14891:1;14880:12;;14875:389;14898:25;:32;;;;14894:1;:36;;;14875:389;;;15034:8;15003:25;15029:1;15003:28;;;;;;;;;;;;;;;;;;;;;:39;14999:254;;;15165:1;15158:8;;;;14999:254;14932:3;;;;;;;14875:389;;;14809:465;;;;;:::o;4096:42::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2430:35::-;;;;;;;;;;;;;:::o;2355:28::-;;;;;;;;;;;;;:::o;9643:1159::-;9761:46;9877:16;10012;10432:20;9738:5;;;;;;;;;;;1513:8;1499:22;;:10;:22;;;1491:31;;;;;;;;9837:23;;;;;;;;;;;9761:100;;9896:10;9877:29;;9872:767;9920:8;9908;:20;;9872:767;;;10031:19;:37;;;10069:8;10031:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10012:66;;10164:3;10152:8;:15;;;;10148:480;;;10333:8;10303:17;:27;10321:8;10303:27;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;10455:19;:29;;;10485:8;10455:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10432:62;;10540:12;10518:9;:19;10528:8;10518:19;;;;;;;;;;;;;;;:34;;;;10148:480;9930:10;;;;;;;9872:767;;;10675:19;:41;;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10651:21;:67;;;;9643:1159;;;;;;;:::o;7284:226::-;7371:5;;;;;;;;;;;1513:8;1499:22;;:10;:22;;;1491:31;;;;;;;;7420:1;7402:14;:19;;:41;;;;;7442:1;7425:14;:18;7402:41;7394:50;;;;;;;;7487:15;7455:13;:29;7469:14;7455:29;;;;;;;;;;;:47;;;;;;;;;;;;:::i;:::-;;7284:226;;;:::o;11892:1069::-;11948:12;11986;;11977:6;:21;:125;;;;;12092:10;12063:39;;:17;:25;12081:6;12063:25;;;;;;;;;;;;;;;;;;;;;:39;;;11977:125;:201;;;;;12177:1;12153:9;:21;12163:10;12153:21;;;;;;;;;;;;;;;;:25;11977:201;11973:899;;;12249:9;:21;12259:10;12249:21;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;12377:3;12349:17;:25;12367:6;12349:25;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;12443:9;:14;12453:3;12443:14;;;;;;;;;;;;;;;;:16;;;;;;;;;;;;;12567:3;12546:33;;12555:10;12546:33;;;12572:6;12546:33;;;;;;;;;;;;;;;;;;12659:4;12649:14;;11973:899;;;12782:5;12772:15;;11973:899;12889:7;12882:14;;11892:1069;;;;:::o;2646:33::-;;;;:::o;16041:412::-;16108:5;;;;;;;;;;;1513:8;1499:22;;:10;:22;;;1491:31;;;;;;;;16151:12;;16140:8;:23;16132:32;;;;;;;;16247:1;16236:8;:12;16228:21;;;;;;;;16359:8;16322:24;:34;16347:8;16322:34;;;;;;;;;;;:45;;;;16041:412;;;:::o;17953:232::-;18008:7;18067:3;18036:17;:27;18054:8;18036:27;;;;;;;;;;;;;;;;;;;;;:34;;;;18028:43;;;;;;;;18089:17;:27;18107:8;18089:27;;;;;;;;;;;;;;;;;;;;;18082:34;;17953:232;;;:::o;20587:1738::-;20783:11;21454:14;20657:12;;20646:8;:23;20637:33;;;;;;;;20797:11;:21;20809:8;20797:21;;;;;;;;;;;20783:35;;20838:5;:15;;;;;;;;;;;;20829:25;;;;;;;;21021:5;:14;;;21008:9;:27;;20999:37;;;;;;;;21122:17;:27;21140:8;21122:27;;;;;;;;;;;;;;;;;;;;;21106:43;;:5;:12;;;;;;;;;;;;:43;;;21097:53;;;;;;;;21231:3;21211:5;:16;;;;;;;;;;;;:23;;;;21207:227;;;21355:10;21335:30;;:5;:16;;;;;;;;;;;;:30;;;21326:40;;;;;;;;21207:227;21471:5;:12;;;;;;;;;;;;21454:29;;21526:10;21496:17;:27;21514:8;21496:27;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;21608:9;:17;21618:6;21608:17;;;;;;;;;;;;;;;;:19;;;;;;;;;;;;;;21705:9;:21;21715:10;21705:21;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;21820:10;21803:31;;21812:6;21803:31;;;21832:1;21803:31;;;;;;;;;;;;;;;;;;21956:8;21937:28;;;;;;;;;;22086:9;22056:18;:26;22075:6;22056:26;;;;;;;;;;;;;;;;:39;;;;;;;;;;;22248:10;22209:50;;22240:6;22209:50;;22219:8;22209:50;22229:9;22209:50;;;;;;;;;;;;;;;;;;20587:1738;;;:::o;19178:579::-;19293:10;19262:41;;:17;:27;19280:8;19262:27;;;;;;;;;;;;;;;;;;;;;:41;;;19253:51;;;;;;;;19387:12;;19376:8;:23;19367:33;;;;;;;;19503:57;;;;;;;;;19509:4;19503:57;;;;;;19515:8;19503:57;;;;19525:10;19503:57;;;;;;19537:17;19503:57;;;;19556:3;19503:57;;;;;19479:11;:21;19491:8;19479:21;;;;;;;;;;;:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19676:3;19647:8;19636:44;19657:17;19636:44;;;;;;;;;;;;;;;;;;19178:579;;:::o;3121:54::-;;;;;;;;;;;;;;;;;:::o;2541:37::-;;;;:::o;7087:100::-;7130:5;;;;;;;;;;;1513:8;1499:22;;:10;:22;;;1491:31;;;;;;;;7175:4;7153:19;;:26;;;;;;;;;;;;;;;;;;7087:100;:::o;4257:51::-;;;;;;;;;;;;;;;;;:::o;3494:48::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1316:21443::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

bzzr://b792cd9a79cc96a4af85586e03209a6ca366987cc676d6dd123226f23b5d938f

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  ]
[ 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.