ETH Price: $2,900.64 (+1.26%)
 

Overview

ETH Balance

13.235991805979547024 ETH

Eth Value

$38,392.89 (@ $2,900.64/ETH)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Withdraw62174042018-08-26 14:20:492266 days ago1535293249IN
0x9EEA7965...624429d9D
0 ETH0.000133355
Withdraw62108632018-08-25 11:59:542267 days ago1535198394IN
0x9EEA7965...624429d9D
0 ETH0.000042671.6
Create Sale Auct...62103352018-08-25 9:51:242267 days ago1535190684IN
0x9EEA7965...624429d9D
0 ETH0.000308152.19
Create Sale Auct...62103352018-08-25 9:51:242267 days ago1535190684IN
0x9EEA7965...624429d9D
0 ETH0.000295492.1
Create Sale Auct...62103352018-08-25 9:51:242267 days ago1535190684IN
0x9EEA7965...624429d9D
0 ETH0.000295492.1
Create Sale Auct...62103332018-08-25 9:51:112267 days ago1535190671IN
0x9EEA7965...624429d9D
0 ETH0.000295492.1
Create Sale Auct...62103322018-08-25 9:50:492267 days ago1535190649IN
0x9EEA7965...624429d9D
0 ETH0.000295352.1
Create Sale Auct...62103012018-08-25 9:42:142267 days ago1535190134IN
0x9EEA7965...624429d9D
0 ETH0.000295352.1
Create Sale Auct...62102862018-08-25 9:37:022267 days ago1535189822IN
0x9EEA7965...624429d9D
0 ETH0.000295352.1
Create Sale Auct...62102062018-08-25 9:14:482267 days ago1535188488IN
0x9EEA7965...624429d9D
0 ETH0.000295352.1
Create Sale Auct...62102062018-08-25 9:14:482267 days ago1535188488IN
0x9EEA7965...624429d9D
0 ETH0.000295352.1
Create Sale Auct...62101882018-08-25 9:11:312267 days ago1535188291IN
0x9EEA7965...624429d9D
0 ETH0.000295352.1
Create Sale Auct...62101882018-08-25 9:11:312267 days ago1535188291IN
0x9EEA7965...624429d9D
0 ETH0.000295352.1
Withdraw62101242018-08-25 8:53:352267 days ago1535187215IN
0x9EEA7965...624429d9D
0 ETH0.0000562.1
Register Lottery62093702018-08-25 5:41:282267 days ago1535175688IN
0x9EEA7965...624429d9D
0 ETH0.000787172.1
Create Sale Auct...62091322018-08-25 4:44:412267 days ago1535172281IN
0x9EEA7965...624429d9D
0 ETH0.000421943
Create Sale Auct...62091322018-08-25 4:44:412267 days ago1535172281IN
0x9EEA7965...624429d9D
0 ETH0.000421943
Create Sale Auct...62091252018-08-25 4:43:422267 days ago1535172222IN
0x9EEA7965...624429d9D
0 ETH0.000421943
Create Sale Auct...62091182018-08-25 4:42:322267 days ago1535172152IN
0x9EEA7965...624429d9D
0 ETH0.000393632.8
Register Lottery62067762018-08-24 19:21:292267 days ago1535138489IN
0x9EEA7965...624429d9D
0 ETH0.000702482
Register Lottery62067612018-08-24 19:18:472267 days ago1535138327IN
0x9EEA7965...624429d9D
0 ETH0.000701482
Register Lottery62027502018-08-24 3:08:082268 days ago1535080088IN
0x9EEA7965...624429d9D
0 ETH0.000736112.1
Register Lottery62027482018-08-24 3:07:562268 days ago1535080076IN
0x9EEA7965...624429d9D
0 ETH0.000735062.1
Register Lottery62027462018-08-24 3:07:462268 days ago1535080066IN
0x9EEA7965...624429d9D
0 ETH0.000734622.1
Register Lottery62027442018-08-24 3:07:352268 days ago1535080055IN
0x9EEA7965...624429d9D
0 ETH0.000733572.1
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
62174042018-08-26 14:20:492266 days ago1535293249
0x9EEA7965...624429d9D
0.04115052 ETH
62108632018-08-25 11:59:542267 days ago1535198394
0x9EEA7965...624429d9D
0.69085698 ETH
62101242018-08-25 8:53:352267 days ago1535187215
0x9EEA7965...624429d9D
0.00798242 ETH
61921342018-08-22 7:44:222270 days ago1534923862
0x9EEA7965...624429d9D
0.04979163 ETH
61908992018-08-22 2:44:382270 days ago1534905878
0x9EEA7965...624429d9D
0.04267854 ETH
61783362018-08-20 0:03:432272 days ago1534723423
0x9EEA7965...624429d9D
0.001 ETH
61725692018-08-19 0:43:292273 days ago1534639409
0x9EEA7965...624429d9D
0.02961495 ETH
61706382018-08-18 17:04:232274 days ago1534611863
0x9EEA7965...624429d9D
0.02359279 ETH
61680982018-08-18 6:37:322274 days ago1534574252
0x9EEA7965...624429d9D
0.02547005 ETH
61643102018-08-17 15:00:392275 days ago1534518039
0x9EEA7965...624429d9D
0.0075 ETH
61642942018-08-17 14:56:062275 days ago1534517766
0x9EEA7965...624429d9D
0.0075 ETH
61639362018-08-17 13:26:042275 days ago1534512364
0x9EEA7965...624429d9D
0.0075 ETH
61639232018-08-17 13:22:222275 days ago1534512142
0x9EEA7965...624429d9D
0.02547005 ETH
61614602018-08-17 3:18:322275 days ago1534475912
0x9EEA7965...624429d9D
0.05520635 ETH
61561082018-08-16 5:40:322276 days ago1534398032
0x9EEA7965...624429d9D
0.0075 ETH
61556292018-08-16 3:48:092276 days ago1534391289
0x9EEA7965...624429d9D
0.0075 ETH
61554382018-08-16 3:04:092276 days ago1534388649
0x9EEA7965...624429d9D
0.32740977 ETH
61545542018-08-15 23:19:402276 days ago1534375180
0x9EEA7965...624429d9D
0.02538424 ETH
61484942018-08-14 22:53:392277 days ago1534287219
0x9EEA7965...624429d9D
0.143286 ETH
61402582018-08-13 13:39:452279 days ago1534167585
0x9EEA7965...624429d9D
0.0005 ETH
61402582018-08-13 13:39:452279 days ago1534167585
0x9EEA7965...624429d9D
0.0077 ETH
61402552018-08-13 13:39:122279 days ago1534167552
0x9EEA7965...624429d9D
0.0005 ETH
61402552018-08-13 13:39:122279 days ago1534167552
0x9EEA7965...624429d9D
0.0077 ETH
61402512018-08-13 13:38:252279 days ago1534167505
0x9EEA7965...624429d9D
0.0005 ETH
61402512018-08-13 13:38:252279 days ago1534167505
0x9EEA7965...624429d9D
0.0077 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DogCore

Compiler Version
v0.4.18+commit.9cf6e910

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-06-06
*/

pragma solidity ^0.4.18;

contract Ownable {

    address public owner;

    function Ownable() public {
        owner = msg.sender;
    }

    modifier onlyOwner() {
        require(msg.sender == owner);
        _;
    }

    function transferOwnership(address newOwner) public onlyOwner {
        if (newOwner != address(0)) {
            owner = newOwner;
        }
    }
}


contract ERC721 {
    
    function totalSupply() public view returns (uint256 total);
    function balanceOf(address _owner) public view returns (uint256 balance);
    function ownerOf(uint256 _tokenId) external view returns (address owner);
    function approve(address _to, uint256 _tokenId) external;
    function transfer(address _to, uint256 _tokenId) external;
    function transferFrom(address _from, address _to, uint256 _tokenId) external;

    event Transfer(address from, address to, uint256 tokenId);
    event Approval(address owner, address approved, uint256 tokenId);

    function supportsInterface(bytes4 _interfaceID) external view returns (bool);
}


contract GeneScienceInterface {
    
    function isGeneScience() public pure returns (bool);

    function mixGenes(uint256 genes1, uint256 genes2, uint256 targetBlock) public returns (uint256);
}


contract VariationInterface {

    function isVariation() public pure returns(bool);
    
    function createVariation(uint256 _gene, uint256 _totalSupply) public returns (uint8);
    
    function registerVariation(uint256 _dogId, address _owner) public;
}


contract LotteryInterface {
    
    function isLottery() public pure returns (bool);

    function checkLottery(uint256 genes) public pure returns (uint8 lotclass);
    
    function registerLottery(uint256 _dogId) public payable returns (uint8);

    function getCLottery() 
        public 
        view 
        returns (
            uint8[7]        luckyGenes1,
            uint256         totalAmount1,
            uint256         openBlock1,
            bool            isReward1,
            uint256         term1,
            uint8           currentGenes1,
            uint256         tSupply,
            uint256         sPoolAmount1,
            uint256[]       reward1
        );
}


contract DogAccessControl {
    
    event ContractUpgrade(address newContract);

    address public ceoAddress;
    address public cfoAddress;
    address public cooAddress;

    bool public paused = false;

    modifier onlyCEO() {
        require(msg.sender == ceoAddress);
        _;
    }

    modifier onlyCFO() {
        require(msg.sender == cfoAddress);
        _;
    }

    modifier onlyCOO() {
        require(msg.sender == cooAddress);
        _;
    }

    modifier onlyCLevel() {
        require(msg.sender == cooAddress || msg.sender == ceoAddress || msg.sender == cfoAddress);
        _;
    }

    function setCEO(address _newCEO) external onlyCEO {
        require(_newCEO != address(0));

        ceoAddress = _newCEO;
    }

    function setCFO(address _newCFO) external onlyCEO {
        require(_newCFO != address(0));

        cfoAddress = _newCFO;
    }

    function setCOO(address _newCOO) external onlyCEO {
        require(_newCOO != address(0));

        cooAddress = _newCOO;
    }

    modifier whenNotPaused() {
        require(!paused);
        _;
    }

    modifier whenPaused {
        require(paused);
        _;
    }

    function pause() external onlyCLevel whenNotPaused {
        paused = true;
    }

    function unpause() public onlyCEO whenPaused {
        paused = false;
    }
}


contract DogBase is DogAccessControl {

    event Birth(address owner, uint256 dogId, uint256 matronId, uint256 sireId, uint256 genes, uint16 generation, uint8 variation, uint256 gen0, uint256 birthTime, uint256 income, uint16 cooldownIndex);

    event Transfer(address from, address to, uint256 tokenId);

    struct Dog {
        
        uint256 genes;

        uint256 birthTime;

        uint64 cooldownEndBlock;

        uint32 matronId;

        uint32 sireId;

        uint32 siringWithId;

        uint16 cooldownIndex;

        uint16 generation;

        uint8  variation;

        uint256 gen0;
    }

    uint32[14] public cooldowns = [
        uint32(1 minutes),
        uint32(2 minutes),
        uint32(5 minutes),
        uint32(10 minutes),
        uint32(30 minutes),
        uint32(1 hours),
        uint32(2 hours),
        uint32(4 hours),
        uint32(8 hours),
        uint32(16 hours),
        uint32(24 hours),
        uint32(2 days),
        uint32(3 days),
        uint32(5 days)
    ];

    uint256 public secondsPerBlock = 15;

    Dog[] dogs;

    mapping (uint256 => address) dogIndexToOwner;

    mapping (address => uint256) ownershipTokenCount;

    mapping (uint256 => address) public dogIndexToApproved;

    mapping (uint256 => address) public sireAllowedToAddress;

    SaleClockAuction public saleAuction;

    SiringClockAuction public siringAuction;

    VariationInterface public variation;

    LotteryInterface public lottery;

    uint256 public autoBirthFee = 7500 szabo;

    uint256 public gen0Profit = 500 szabo;
    
    uint256 public creationProfit = 1000 szabo;

    mapping (address => uint256) public profit;

    function _sendMoney(address _to, uint256 _money) internal {
        spendMoney += _money;
        require(address(this).balance >= spendMoney);
        profit[_to] += _money;
    }

    function sendMoney(address _to, uint256 _money) external {
        require(msg.sender == address(lottery) || msg.sender == address(variation));
        _sendMoney(_to, _money);
    }

    event Withdraw(address _owner, uint256 _value);

    function withdraw() public {
        uint256 value = profit[msg.sender];
        require(value > 0);
        msg.sender.transfer(value);
        spendMoney -= value;
        delete profit[msg.sender];

        Withdraw(msg.sender, value);
    }

    uint256 public spendMoney;

    function setGen0Profit(uint256 _value) public onlyCEO {        
        uint256 ration = _value * 100 / autoBirthFee;
        require(ration > 0);
        require(_value <= 100);
        gen0Profit = _value;
    }

    function setCreationProfit(uint256 _value) public onlyCEO {        
        uint256 ration = _value * 100 / autoBirthFee;
        require(ration > 0);
        require(_value <= 100);
        creationProfit = _value;
    }

    function _transfer(address _from, address _to, uint256 _tokenId) internal {
        ownershipTokenCount[_to]++;
        dogIndexToOwner[_tokenId] = _to;
        if (_from != address(0)) {
            ownershipTokenCount[_from]--;
            delete sireAllowedToAddress[_tokenId];
            delete dogIndexToApproved[_tokenId];
        }

        Transfer(_from, _to, _tokenId);
    }

    function _createDog(
        uint256 _matronId,
        uint256 _sireId,
        uint256 _generation,
        uint256 _genes,
        address _owner,
        uint8 _variation,
        uint256 _gen0,
        bool _isGen0Siring
    )
        internal
        returns (uint)
    {
        require(_matronId == uint256(uint32(_matronId)));
        require(_sireId == uint256(uint32(_sireId)));
        require(_generation == uint256(uint16(_generation)));

        uint16 cooldownIndex = uint16(_generation / 2);
        if (cooldownIndex > 13) {
            cooldownIndex = 13;
        }

        Dog memory _dog = Dog({
            genes: _genes,
            birthTime: block.number,
            cooldownEndBlock: 0,
            matronId: uint32(_matronId),
            sireId: uint32(_sireId),
            siringWithId: 0,
            cooldownIndex: cooldownIndex,
            generation: uint16(_generation),
            variation : uint8(_variation),
            gen0 : _gen0
        });
        uint256 newDogId = dogs.push(_dog) - 1;

        require(newDogId < 23887872);

        Birth(
            _owner,
            newDogId,
            uint256(_dog.matronId),
            uint256(_dog.sireId),
            _dog.genes,
            uint16(_generation),
            _variation,
            _gen0,
            block.number,
            _isGen0Siring ? 0 : gen0Profit,
            cooldownIndex
        );

        _transfer(0, _owner, newDogId);

        return newDogId;
    }

    function setSecondsPerBlock(uint256 secs) external onlyCLevel {
        require(secs < cooldowns[0]);
        secondsPerBlock = secs;
    }
}


contract DogOwnership is DogBase, ERC721 {

    string public constant name = "HelloDog";
    string public constant symbol = "HD";

    bytes4 constant InterfaceSignature_ERC165 = bytes4(keccak256("supportsInterface(bytes4)"));

    bytes4 constant InterfaceSignature_ERC721 =
        bytes4(keccak256("name()")) ^
        bytes4(keccak256("symbol()")) ^
        bytes4(keccak256("totalSupply()")) ^
        bytes4(keccak256("balanceOf(address)")) ^
        bytes4(keccak256("ownerOf(uint256)")) ^
        bytes4(keccak256("approve(address,uint256)")) ^
        bytes4(keccak256("transfer(address,uint256)")) ^
    bytes4(keccak256("transferFrom(address,address,uint256)"));

    function supportsInterface(bytes4 _interfaceID) external view returns (bool)
    {
        return ((_interfaceID == InterfaceSignature_ERC165) || (_interfaceID == InterfaceSignature_ERC721));
    }

    function _owns(address _claimant, uint256 _tokenId) internal view returns (bool) {
        return dogIndexToOwner[_tokenId] == _claimant;
    }

    function _approvedFor(address _claimant, uint256 _tokenId) internal view returns (bool) {
        return dogIndexToApproved[_tokenId] == _claimant;
    }

    function _approve(uint256 _tokenId, address _approved) internal {
        dogIndexToApproved[_tokenId] = _approved;
    }

    function balanceOf(address _owner) public view returns (uint256 count) {
        return ownershipTokenCount[_owner];
    }

    function transfer(
        address _to,
        uint256 _tokenId
    )
        external
        whenNotPaused
    {
        require(_to != address(0));
        require(_to != address(this));
        require(_to != address(saleAuction));
        require(_to != address(siringAuction));

        require(_owns(msg.sender, _tokenId));

        _transfer(msg.sender, _to, _tokenId);
    }

    function approve(
        address _to,
        uint256 _tokenId
    )
        external
        whenNotPaused
    {
        require(_owns(msg.sender, _tokenId));

        _approve(_tokenId, _to);

        Approval(msg.sender, _to, _tokenId);
    }

    function transferFrom(
        address _from,
        address _to,
        uint256 _tokenId
    )
        external
        whenNotPaused
    {
        require(_to != address(0));
        require(_to != address(this));

        require(_approvedFor(msg.sender, _tokenId));
        require(_owns(_from, _tokenId));

        _transfer(_from, _to, _tokenId);
    }

    function totalSupply() public view returns (uint) {
        return dogs.length - 1;
    }

    function ownerOf(uint256 _tokenId)
        external
        view
        returns (address owner)
    {
        owner = dogIndexToOwner[_tokenId];

        require(owner != address(0));
    }
}


contract DogBreeding is DogOwnership {

    event Pregnant(address owner, uint256 matronId, uint256 sireId, uint256 matronCooldownEndBlock, uint256 sireCooldownEndBlock, uint256 matronCooldownIndex, uint256 sireCooldownIndex);

    uint256 public pregnantDogs;

    GeneScienceInterface public geneScience;

    function setGeneScienceAddress(address _address) external onlyCEO {
        GeneScienceInterface candidateContract = GeneScienceInterface(_address);

        require(candidateContract.isGeneScience());

        geneScience = candidateContract;
    }

    function _isReadyToBreed(Dog _dog) internal view returns (bool) {
        return (_dog.siringWithId == 0) && (_dog.cooldownEndBlock <= uint64(block.number));
    }

    function _isSiringPermitted(uint256 _sireId, uint256 _matronId) internal view returns (bool) {
        address matronOwner = dogIndexToOwner[_matronId];
        address sireOwner = dogIndexToOwner[_sireId];

        return (matronOwner == sireOwner || sireAllowedToAddress[_sireId] == matronOwner);
    }

    function _triggerCooldown(Dog storage _dog) internal {
        _dog.cooldownEndBlock = uint64((cooldowns[_dog.cooldownIndex]/secondsPerBlock) + block.number);

        if (_dog.cooldownIndex < 13) {
            _dog.cooldownIndex += 1;
        }
    }

    function approveSiring(address _addr, uint256 _sireId)
        external
        whenNotPaused
    {
        require(_owns(msg.sender, _sireId));
        sireAllowedToAddress[_sireId] = _addr;
    }

    function setAutoBirthFee(uint256 val) external onlyCEO {
        require(val > 0);
        autoBirthFee = val;
    }

    function _isReadyToGiveBirth(Dog _matron) private view returns (bool) {
        return (_matron.siringWithId != 0) && (_matron.cooldownEndBlock <= uint64(block.number));
    }

    function isReadyToBreed(uint256 _dogId)
        public
        view
        returns (bool)
    {
        require(_dogId > 1);
        Dog storage dog = dogs[_dogId];
        return _isReadyToBreed(dog);
    }

    function isPregnant(uint256 _dogId)
        public
        view
        returns (bool)
    {
        return dogs[_dogId].siringWithId != 0;
    }

    function _isValidMatingPair(
        Dog storage _matron,
        uint256 _matronId,
        Dog storage _sire,
        uint256 _sireId
    )
        private
        view
        returns(bool)
    {
        if (_matronId == _sireId) {
            return false;
        }

        if (_matron.matronId == _sireId || _matron.sireId == _sireId) {
            return false;
        }
        if (_sire.matronId == _matronId || _sire.sireId == _matronId) {
            return false;
        }

        if (_sire.matronId == 0 || _matron.matronId == 0) {
            return true;
        }

        if (_sire.matronId == _matron.matronId || _sire.matronId == _matron.sireId) {
            return false;
        }
        if (_sire.sireId == _matron.matronId || _sire.sireId == _matron.sireId) {
            return false;
        }

        return true;
    }

    function _canBreedWithViaAuction(uint256 _matronId, uint256 _sireId)
        internal
        view
        returns (bool)
    {
        Dog storage matron = dogs[_matronId];
        Dog storage sire = dogs[_sireId];
        return _isValidMatingPair(matron, _matronId, sire, _sireId);
    }
    
    function getOwner(uint256 _tokenId) public view returns(address){
        address owner = dogIndexToOwner[_tokenId];
        if(owner == address(saleAuction)){
            return saleAuction.getSeller(_tokenId);
        } else if (owner == address(siringAuction)){
            return siringAuction.getSeller(_tokenId);
        } else if (owner == address(this)){
            return address(0);
        }
        return owner;
    }

    function _breedWith(uint256 _matronId, uint256 _sireId) internal {
        require(_matronId > 1);
        require(_sireId > 1);
        
        Dog storage sire = dogs[_sireId];
        Dog storage matron = dogs[_matronId];

        require(sire.variation == 0);
        require(matron.variation == 0);

        if (matron.generation > 0) {
            var(,,openBlock,,,,,,) = lottery.getCLottery();
            if (matron.birthTime < openBlock) {
                require(lottery.checkLottery(matron.genes) == 100);
            }
        }

        matron.siringWithId = uint32(_sireId);

        _triggerCooldown(sire);
        _triggerCooldown(matron);

        delete sireAllowedToAddress[_matronId];
        delete sireAllowedToAddress[_sireId];

        pregnantDogs++;

        cfoAddress.transfer(autoBirthFee);

        address owner = getOwner(0);
        if(owner != address(0)){
            _sendMoney(owner, creationProfit);
        }
        owner = getOwner(1);
        if(owner != address(0)){
            _sendMoney(owner, creationProfit);
        }

        if (matron.generation > 0) {
            owner = getOwner(matron.gen0);
            if(owner != address(0)){
                _sendMoney(owner, gen0Profit);
            }
        }

        Pregnant(dogIndexToOwner[_matronId], _matronId, _sireId, matron.cooldownEndBlock, sire.cooldownEndBlock, matron.cooldownIndex, sire.cooldownIndex);
    }

    function breedWithAuto(uint256 _matronId, uint256 _sireId)
        external
        payable
        whenNotPaused
    {        
        uint256 totalFee = autoBirthFee + creationProfit + creationProfit;
        Dog storage matron = dogs[_matronId];
        if (matron.generation > 0) {
            totalFee += gen0Profit;
        }

        require(msg.value >= totalFee);

        require(_owns(msg.sender, _matronId));

        require(_isSiringPermitted(_sireId, _matronId));

        require(_isReadyToBreed(matron));

        Dog storage sire = dogs[_sireId];

        require(_isReadyToBreed(sire));

        require(_isValidMatingPair(matron, _matronId, sire, _sireId));

        _breedWith(_matronId, _sireId);

        uint256 breedExcess = msg.value - totalFee;
        if (breedExcess > 0) {
            msg.sender.transfer(breedExcess);
        }
    }

    bool public giveBirthByUser = false;

    function setGiveBirthType(bool _value) public onlyCEO {
        giveBirthByUser = _value;
    }

    function giveBirth(uint256 _matronId, uint256 genes)
        external
        whenNotPaused
        returns(uint256)
    {
        Dog storage matron = dogs[_matronId];

        require(matron.birthTime != 0);

        require(_isReadyToGiveBirth(matron));

        uint256 sireId = matron.siringWithId;
        Dog storage sire = dogs[sireId];

        uint16 parentGen = matron.generation;
        if (sire.generation > matron.generation) {
            parentGen = sire.generation;
        }

        uint256 gen0 = matron.generation == 0 ? _matronId : matron.gen0;

        uint256 childGenes = genes;
        if(giveBirthByUser){
            require(address(geneScience) != address(0));
            childGenes = geneScience.mixGenes(matron.genes, sire.genes, matron.cooldownEndBlock - 1);
        } else {
            require(msg.sender == ceoAddress || msg.sender == cooAddress || msg.sender == cfoAddress);
        }
        
        address owner = dogIndexToOwner[_matronId];

        uint8 _variation = variation.createVariation(childGenes, dogs.length);

        bool isGen0Siring = matron.generation == 0;

        uint256 kittenId = _createDog(_matronId, matron.siringWithId, parentGen + 1, childGenes, owner, _variation, gen0, isGen0Siring);

        delete matron.siringWithId;

        pregnantDogs--;
       
        if(_variation != 0){              
            variation.registerVariation(kittenId, owner);      
            _transfer(owner, address(variation), kittenId);
        }

        return kittenId;
    }
}


contract ClockAuctionBase {

    struct Auction {
        
        address seller;
        
        uint128 startingPrice;
        
        uint128 endingPrice;
        
        uint64 duration;
        
        uint64 startedAt;
    }

    ERC721 public nonFungibleContract;

    uint256 public ownerCut;

    mapping (uint256 => Auction) tokenIdToAuction;

    event AuctionCreated(uint256 tokenId, uint256 startingPrice, uint256 endingPrice, uint256 duration);
    event AuctionSuccessful(uint256 tokenId, uint256 totalPrice, address winner);
    event AuctionCancelled(uint256 tokenId);

    function _owns(address _claimant, uint256 _tokenId) internal view returns (bool) {
        return (nonFungibleContract.ownerOf(_tokenId) == _claimant);
    }

    function _escrow(address _owner, uint256 _tokenId) internal {
        nonFungibleContract.transferFrom(_owner, this, _tokenId);
    }

    function _transfer(address _receiver, uint256 _tokenId) internal {
        nonFungibleContract.transfer(_receiver, _tokenId);
    }

    function _addAuction(uint256 _tokenId, Auction _auction) internal {
        require(_auction.duration >= 1 minutes);

        tokenIdToAuction[_tokenId] = _auction;

        AuctionCreated(
            uint256(_tokenId),
            uint256(_auction.startingPrice),
            uint256(_auction.endingPrice),
            uint256(_auction.duration)
        );
    }

    function _cancelAuction(uint256 _tokenId, address _seller) internal {
        _removeAuction(_tokenId);
        _transfer(_seller, _tokenId);
        AuctionCancelled(_tokenId);
    }

    function _bid(uint256 _tokenId, uint256 _bidAmount, address _to)
        internal
        returns (uint256)
    {
        Auction storage auction = tokenIdToAuction[_tokenId];

        require(_isOnAuction(auction));

        uint256 price = _currentPrice(auction);
        uint256 auctioneerCut = computeCut(price);

        uint256 fee = 0;
        if (_tokenId == 0 || _tokenId == 1) {
            fee = price / 5;
        }        
        require((_bidAmount + auctioneerCut + fee) >= price);

        address seller = auction.seller;

        _removeAuction(_tokenId);

        if (price > 0) {
            uint256 sellerProceeds = price - auctioneerCut - fee;

            seller.transfer(sellerProceeds);
        }

        AuctionSuccessful(_tokenId, price, _to);

        return price;
    }

    function _removeAuction(uint256 _tokenId) internal {
        delete tokenIdToAuction[_tokenId];
    }

    function _isOnAuction(Auction storage _auction) internal view returns (bool) {
        return (_auction.startedAt > 0);
    }

    function _currentPrice(Auction storage _auction)
        internal
        view
        returns (uint256)
    {
        uint256 secondsPassed = 0;

        if (now > _auction.startedAt) {
            secondsPassed = now - _auction.startedAt;
        }

        return _computeCurrentPrice(
            _auction.startingPrice,
            _auction.endingPrice,
            _auction.duration,
            secondsPassed
        );
    }

    function _computeCurrentPrice(
        uint256 _startingPrice,
        uint256 _endingPrice,
        uint256 _duration,
        uint256 _secondsPassed
    )
        internal
        pure
        returns (uint256)
    {
        if (_secondsPassed >= _duration) {
            return _endingPrice;
        } else {
            int256 totalPriceChange = int256(_endingPrice) - int256(_startingPrice);

            int256 currentPriceChange = totalPriceChange * int256(_secondsPassed) / int256(_duration);

            int256 currentPrice = int256(_startingPrice) + currentPriceChange;

            return uint256(currentPrice);
        }
    }

    function computeCut(uint256 _price) public view returns (uint256) {
        return _price * ownerCut / 10000;
    }
}


contract Pausable is Ownable {
    event Pause();
    event Unpause();

    bool public paused = false;

    modifier whenNotPaused() {
        require(!paused);
        _;
    }

    modifier whenPaused {
        require(paused);
        _;
    }

    function pause() public onlyOwner whenNotPaused returns (bool) {
        paused = true;
        Pause();
        return true;
    }

    function unpause() public onlyOwner whenPaused returns (bool) {
        paused = false;
        Unpause();
        return true;
    }
}


contract ClockAuction is Pausable, ClockAuctionBase {

    bytes4 constant InterfaceSignature_ERC721 =
        bytes4(keccak256("name()")) ^
        bytes4(keccak256("symbol()")) ^
        bytes4(keccak256("totalSupply()")) ^
        bytes4(keccak256("balanceOf(address)")) ^
        bytes4(keccak256("ownerOf(uint256)")) ^
        bytes4(keccak256("approve(address,uint256)")) ^
        bytes4(keccak256("transfer(address,uint256)")) ^
    bytes4(keccak256("transferFrom(address,address,uint256)"));

    function ClockAuction(address _nftAddress, uint256 _cut) public {
        require(_cut <= 10000);
        ownerCut = _cut;

        ERC721 candidateContract = ERC721(_nftAddress);
        require(candidateContract.supportsInterface(InterfaceSignature_ERC721));
        nonFungibleContract = candidateContract;
    }

    function withdrawBalance() external {
        address nftAddress = address(nonFungibleContract);

        require(
            msg.sender == owner ||
            msg.sender == nftAddress
        );
        nftAddress.transfer(address(this).balance);
    }

    function cancelAuction(uint256 _tokenId)
        external
    {
        require(_tokenId > 1);

        Auction storage auction = tokenIdToAuction[_tokenId];
        require(_isOnAuction(auction));
        address seller = auction.seller;
        require(msg.sender == seller);
        _cancelAuction(_tokenId, seller);
    }

    function cancelAuctionWhenPaused(uint256 _tokenId)
        whenPaused
        onlyOwner
        external
    {
        Auction storage auction = tokenIdToAuction[_tokenId];
        require(_isOnAuction(auction));
        _cancelAuction(_tokenId, auction.seller);
    }

    function getAuction(uint256 _tokenId)
        external
        view
        returns
    (
        address seller,
        uint256 startingPrice,
        uint256 endingPrice,
        uint256 duration,
        uint256 startedAt
    ) {
        Auction storage auction = tokenIdToAuction[_tokenId];
        require(_isOnAuction(auction));
        return (
            auction.seller,
            auction.startingPrice,
            auction.endingPrice,
            auction.duration,
            auction.startedAt
        );
    }

    function getSeller(uint256 _tokenId) external view returns(address){
        Auction storage auction = tokenIdToAuction[_tokenId];
        if(_isOnAuction(auction)){
            return auction.seller;
        } else {
            return nonFungibleContract.ownerOf(_tokenId);
        }
    }

    function getCurrentPrice(uint256 _tokenId)
        external
        view
        returns (uint256)
    {
        Auction storage auction = tokenIdToAuction[_tokenId];
        require(_isOnAuction(auction));
        return _currentPrice(auction);
    }

}


contract SiringClockAuction is ClockAuction {

    bool public isSiringClockAuction = true;

    function SiringClockAuction(address _nftAddr, uint256 _cut) public ClockAuction(_nftAddr, _cut) {}

    function createAuction(
        uint256 _tokenId,
        uint256 _startingPrice,
        uint256 _endingPrice,
        uint256 _duration,
        address _seller
    )
        external
    {
        require(_startingPrice == uint256(uint128(_startingPrice)));
        require(_endingPrice == uint256(uint128(_endingPrice)));
        require(_duration == uint256(uint64(_duration)));

        require(msg.sender == address(nonFungibleContract));
        _escrow(_seller, _tokenId);
        Auction memory auction = Auction(
            _seller,
            uint128(_startingPrice),
            uint128(_endingPrice),
            uint64(_duration),
            uint64(now)
        );
        _addAuction(_tokenId, auction);
    }

    function bid(uint256 _tokenId, address _to)
        external
        payable
    {
        require(msg.sender == address(nonFungibleContract));
        address seller = tokenIdToAuction[_tokenId].seller;
        _bid(_tokenId, msg.value, _to);
        _transfer(seller, _tokenId);
    }

}


contract SaleClockAuction is ClockAuction {

    bool public isSaleClockAuction = true;

    uint256 public gen0SaleCount;

    uint256[5] public lastGen0SalePrices;

    function SaleClockAuction(address _nftAddr, uint256 _cut) public ClockAuction(_nftAddr, _cut) {}

    function createAuction(
        uint256 _tokenId,
        uint256 _startingPrice,
        uint256 _endingPrice,
        uint256 _duration,
        address _seller
    )
        external
    {
        require(_startingPrice == uint256(uint128(_startingPrice)));
        require(_endingPrice == uint256(uint128(_endingPrice)));
        require(_duration == uint256(uint64(_duration)));

        require(msg.sender == address(nonFungibleContract));
        _escrow(_seller, _tokenId);
        Auction memory auction = Auction(
            _seller,
            uint128(_startingPrice),
            uint128(_endingPrice),
            uint64(_duration),
            uint64(now)
        );
        _addAuction(_tokenId, auction);
    }

    function bid(uint256 _tokenId, address _to)
        external
        payable
    {
        require(msg.sender == address(nonFungibleContract));

        address seller = tokenIdToAuction[_tokenId].seller;  

        require(seller != _to);

        uint256 price = _bid(_tokenId, msg.value, _to);
        
        _transfer(_to, _tokenId);
   
        if (seller == address(nonFungibleContract)) {
            lastGen0SalePrices[gen0SaleCount % 5] = price;
            gen0SaleCount++;
        }
    }

    function averageGen0SalePrice() external view returns (uint256) {
        uint256 sum = 0;
        for (uint256 i = 0; i < 5; i++) {
            sum += lastGen0SalePrices[i];
        }
        return sum / 5;
    }

}


contract DogAuction is DogBreeding {

    uint256 public constant GEN0_AUCTION_DURATION = 1 days;

    function setSaleAuctionAddress(address _address) external onlyCEO {
        SaleClockAuction candidateContract = SaleClockAuction(_address);

        require(candidateContract.isSaleClockAuction());

        saleAuction = candidateContract;
    }

    function setSiringAuctionAddress(address _address) external onlyCEO {
        SiringClockAuction candidateContract = SiringClockAuction(_address);

        require(candidateContract.isSiringClockAuction());

        siringAuction = candidateContract;
    }

    function createSaleAuction(
        uint256 _dogId,
        uint256 _startingPrice,
        uint256 _endingPrice,
        uint256 _duration
    )
        external
        whenNotPaused
    {
        require(_owns(msg.sender, _dogId) || _approvedFor(msg.sender, _dogId));
        require(!isPregnant(_dogId));
        _approve(_dogId, saleAuction);
        saleAuction.createAuction(
            _dogId,
            _startingPrice,
            _endingPrice,
            _duration,
            dogIndexToOwner[_dogId]
        );
    }

    function createSiringAuction(
        uint256 _dogId,
        uint256 _startingPrice,
        uint256 _endingPrice,
        uint256 _duration
    )
        external
        whenNotPaused
    {    
        Dog storage dog = dogs[_dogId];    
        require(dog.variation == 0);

        require(_owns(msg.sender, _dogId));
        require(isReadyToBreed(_dogId));
        _approve(_dogId, siringAuction);
        siringAuction.createAuction(
            _dogId,
            _startingPrice,
            _endingPrice,
            _duration,
            msg.sender
        );
    }

    function bidOnSiringAuction(
        uint256 _sireId,
        uint256 _matronId
    )
        external
        payable
        whenNotPaused
    {
        require(_owns(msg.sender, _matronId));
        require(isReadyToBreed(_matronId));
        require(_canBreedWithViaAuction(_matronId, _sireId));

        uint256 currentPrice = siringAuction.getCurrentPrice(_sireId);
        
        uint256 totalFee = currentPrice + autoBirthFee + creationProfit + creationProfit;
        Dog storage matron = dogs[_matronId];
        if (matron.generation > 0) {
            totalFee += gen0Profit;
        }        
        require(msg.value >= totalFee);

        uint256 auctioneerCut = saleAuction.computeCut(currentPrice);
        siringAuction.bid.value(currentPrice - auctioneerCut)(_sireId, msg.sender);
        _breedWith(uint32(_matronId), uint32(_sireId));

        uint256 bidExcess = msg.value - totalFee;
        if (bidExcess > 0) {
            msg.sender.transfer(bidExcess);
        }
    }

    function bidOnSaleAuction(
        uint256 _dogId
    )
        external
        payable
        whenNotPaused
    {
        Dog storage dog = dogs[_dogId];

        if (dog.generation > 0) {
            var(,,openBlock,,,,,,) = lottery.getCLottery();
            if (dog.birthTime < openBlock) {
                require(lottery.checkLottery(dog.genes) == 100);
            }
        }

        uint256 currentPrice = saleAuction.getCurrentPrice(_dogId);

        require(msg.value >= currentPrice);

        bool isCreationKitty = _dogId == 0 || _dogId == 1;
        uint256 fee = 0;
        if (isCreationKitty) {
            fee = uint256(currentPrice / 5);
        }
        uint256 auctioneerCut = saleAuction.computeCut(currentPrice);
        saleAuction.bid.value(currentPrice - (auctioneerCut + fee))(_dogId, msg.sender);

        if (isCreationKitty) {
            cfoAddress.transfer(fee);

            uint256 nextPrice = uint256(uint128(2 * currentPrice));
            if (nextPrice < currentPrice) {
                nextPrice = currentPrice;
            }
            _approve(_dogId, saleAuction);
            saleAuction.createAuction(
                _dogId,
                nextPrice,
                nextPrice,                                               
                GEN0_AUCTION_DURATION,
                msg.sender);
        }

        uint256 bidExcess = msg.value - currentPrice;
        if (bidExcess > 0) {
            msg.sender.transfer(bidExcess);
        }
    }
}


contract DogMinting is DogAuction {

    uint256 public constant GEN0_CREATION_LIMIT = 40000;

    uint256 public constant GEN0_STARTING_PRICE = 200 finney;

    uint256 public gen0CreatedCount;

    function createGen0Dog(uint256 _genes) external onlyCLevel returns(uint256) {
        require(gen0CreatedCount < GEN0_CREATION_LIMIT);
        
        uint256 dogId = _createDog(0, 0, 0, _genes, address(this), 0, 0, false);
        
        _approve(dogId, msg.sender);

        gen0CreatedCount++;
        return dogId;
    }

    function computeNextGen0Price() public view returns (uint256) {
        uint256 avePrice = saleAuction.averageGen0SalePrice();

        require(avePrice == uint256(uint128(avePrice)));

        uint256 nextPrice = avePrice + (avePrice / 2);

        if (nextPrice < GEN0_STARTING_PRICE) {
            nextPrice = GEN0_STARTING_PRICE;
        }

        return nextPrice;
    }
}


contract DogCore is DogMinting {

    address public newContractAddress;

    function DogCore() public {
        
        paused = true;

        ceoAddress = msg.sender;

        cooAddress = msg.sender;

        _createDog(0, 0, 0, uint256(0), address(this), 0, 0, false);   
        _approve(0, cooAddress);     
        _createDog(0, 0, 0, uint256(0), address(this), 0, 0, false);   
        _approve(1, cooAddress);
    }

    function setNewAddress(address _v2Address) external onlyCEO whenPaused {
        newContractAddress = _v2Address;
        ContractUpgrade(_v2Address);
    }

    function() external payable {
        require(
            msg.sender == address(saleAuction) ||
            msg.sender == address(siringAuction) ||
            msg.sender == ceoAddress
        );
    }

    function getDog(uint256 _id)
        external
        view
        returns (
        uint256 cooldownIndex,
        uint256 nextActionAt,
        uint256 siringWithId,
        uint256 birthTime,
        uint256 matronId,
        uint256 sireId,
        uint256 generation,
        uint256 genes,
        uint8 variation,
        uint256 gen0
    ) {
        Dog storage dog = dogs[_id];

        cooldownIndex = uint256(dog.cooldownIndex);
        nextActionAt = uint256(dog.cooldownEndBlock);
        siringWithId = uint256(dog.siringWithId);
        birthTime = uint256(dog.birthTime);
        matronId = uint256(dog.matronId);
        sireId = uint256(dog.sireId);
        generation = uint256(dog.generation);
        genes = uint256(dog.genes);
        variation = uint8(dog.variation);
        gen0 = uint256(dog.gen0);
    }

    function unpause() public onlyCEO whenPaused {
        require(saleAuction != address(0));
        require(siringAuction != address(0));
        require(lottery != address(0));
        require(variation != address(0));
        require(newContractAddress == address(0));

        super.unpause();
    }
      
    function setLotteryAddress(address _address) external onlyCEO {
        require(address(lottery) == address(0));

        LotteryInterface candidateContract = LotteryInterface(_address);

        require(candidateContract.isLottery());

        lottery = candidateContract;
    }  
      
    function setVariationAddress(address _address) external onlyCEO {
        require(address(variation) == address(0));

        VariationInterface candidateContract = VariationInterface(_address);

        require(candidateContract.isVariation());

        variation = candidateContract;
    }  

    function registerLottery(uint256 _dogId) external returns (uint8) {
        require(_owns(msg.sender, _dogId));
        require(lottery.registerLottery(_dogId) == 0);    
        _transfer(msg.sender, address(lottery), _dogId);
    }
    
    function getAvailableBlance() external view returns(uint256){
        return address(this).balance - spendMoney;
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[{"name":"_interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"profit","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getAvailableBlance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"cfoAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"ceoAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"giveBirthByUser","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"computeNextGen0Price","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"GEN0_STARTING_PRICE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"setSiringAuctionAddress","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":"_dogId","type":"uint256"}],"name":"isPregnant","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"GEN0_AUCTION_DURATION","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"siringAuction","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"setGeneScienceAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newCEO","type":"address"}],"name":"setCEO","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"setLotteryAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newCOO","type":"address"}],"name":"setCOO","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"pregnantDogs","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"creationProfit","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_dogId","type":"uint256"},{"name":"_startingPrice","type":"uint256"},{"name":"_endingPrice","type":"uint256"},{"name":"_duration","type":"uint256"}],"name":"createSaleAuction","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"sireAllowedToAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_dogId","type":"uint256"},{"name":"_startingPrice","type":"uint256"},{"name":"_endingPrice","type":"uint256"},{"name":"_duration","type":"uint256"}],"name":"createSiringAuction","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"val","type":"uint256"}],"name":"setAutoBirthFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"gen0Profit","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"},{"name":"_sireId","type":"uint256"}],"name":"approveSiring","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newCFO","type":"address"}],"name":"setCFO","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"secs","type":"uint256"}],"name":"setSecondsPerBlock","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"name":"owner","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"GEN0_CREATION_LIMIT","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"newContractAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_dogId","type":"uint256"}],"name":"registerLottery","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"setSaleAuctionAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"count","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_v2Address","type":"address"}],"name":"setNewAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"secondsPerBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_matronId","type":"uint256"},{"name":"genes","type":"uint256"}],"name":"giveBirth","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint256"}],"name":"getDog","outputs":[{"name":"cooldownIndex","type":"uint256"},{"name":"nextActionAt","type":"uint256"},{"name":"siringWithId","type":"uint256"},{"name":"birthTime","type":"uint256"},{"name":"matronId","type":"uint256"},{"name":"sireId","type":"uint256"},{"name":"generation","type":"uint256"},{"name":"genes","type":"uint256"},{"name":"variation","type":"uint8"},{"name":"gen0","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"cooldowns","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_value","type":"uint256"}],"name":"setGen0Profit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_genes","type":"uint256"}],"name":"createGen0Dog","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_dogId","type":"uint256"}],"name":"bidOnSaleAuction","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"cooAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"autoBirthFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lottery","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_value","type":"uint256"}],"name":"setCreationProfit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"getOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_value","type":"bool"}],"name":"setGiveBirthType","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_dogId","type":"uint256"}],"name":"isReadyToBreed","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"dogIndexToApproved","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"setVariationAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"variation","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"saleAuction","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"spendMoney","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_sireId","type":"uint256"},{"name":"_matronId","type":"uint256"}],"name":"bidOnSiringAuction","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_money","type":"uint256"}],"name":"sendMoney","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"gen0CreatedCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"geneScience","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_matronId","type":"uint256"},{"name":"_sireId","type":"uint256"}],"name":"breedWithAuto","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"matronId","type":"uint256"},{"indexed":false,"name":"sireId","type":"uint256"},{"indexed":false,"name":"matronCooldownEndBlock","type":"uint256"},{"indexed":false,"name":"sireCooldownEndBlock","type":"uint256"},{"indexed":false,"name":"matronCooldownIndex","type":"uint256"},{"indexed":false,"name":"sireCooldownIndex","type":"uint256"}],"name":"Pregnant","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"from","type":"address"},{"indexed":false,"name":"to","type":"address"},{"indexed":false,"name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"approved","type":"address"},{"indexed":false,"name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"dogId","type":"uint256"},{"indexed":false,"name":"matronId","type":"uint256"},{"indexed":false,"name":"sireId","type":"uint256"},{"indexed":false,"name":"genes","type":"uint256"},{"indexed":false,"name":"generation","type":"uint16"},{"indexed":false,"name":"variation","type":"uint8"},{"indexed":false,"name":"gen0","type":"uint256"},{"indexed":false,"name":"birthTime","type":"uint256"},{"indexed":false,"name":"income","type":"uint256"},{"indexed":false,"name":"cooldownIndex","type":"uint16"}],"name":"Birth","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_owner","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Withdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newContract","type":"address"}],"name":"ContractUpgrade","type":"event"}]

606060409081526002805460a060020a60ff02191690556101c090519081016040908152603c82526078602083015261012c9082015261025860608201526107086080820152610e1060a0820152611c2060c082015261384060e082015261708061010082015261e100610120820152620151806101408201526202a3006101608201526203f480610180820152620697806101a0820152620000a790600390600e620005f1565b50600f6005819055661aa535d3d0c00090556601c6bf5263400060105566038d7ea4c680006011556015805460a060020a60ff02191690553415620000eb57600080fd5b6002805460008054600160a060020a033316600160a060020a03199182168117835560a060020a60ff0219909316740100000000000000000000000000000000000000001716909117909155620001579080808030818080640100000000620030cc620001d082021704565b506002546200018090600090600160a060020a031664010000000062002f0b620004da82021704565b620001a1600080808030818080640100000000620030cc620001d082021704565b50600254620001ca90600190600160a060020a031664010000000062002f0b620004da82021704565b62000797565b600080620001dd62000694565b600063ffffffff8c168c14620001f257600080fd5b63ffffffff8b168b146200020557600080fd5b61ffff8a168a146200021657600080fd5b60028a049250600d8361ffff1611156200022f57600d92505b61014060405190810160409081528a8252436020830152600090820181905263ffffffff808f1660608401528d16608083015260a082015261ffff80851660c08301528b1660e082015260ff8816610100820152610120810187905260068054919350600191808301620002a48382620006e8565b600092835260209092208591600402018151815560208201518160010155604082015160028201805467ffffffffffffffff191667ffffffffffffffff9290921691909117905560608201518160020160086101000a81548163ffffffff021916908363ffffffff160217905550608082015181600201600c6101000a81548163ffffffff021916908363ffffffff16021790555060a08201518160020160106101000a81548163ffffffff021916908363ffffffff16021790555060c08201518160020160146101000a81548161ffff021916908361ffff16021790555060e08201518160020160166101000a81548161ffff021916908361ffff1602179055506101008201518160020160186101000a81548160ff021916908360ff1602179055506101208201516003909101555003905063016c80008110620003e957600080fd5b7f746319248c02be7f11174ecd7121305fe37ffe8b19a6abef96df84f321a84e338882846060015163ffffffff16856080015163ffffffff1686518f8d8d438e62000437576010546200043a565b60005b8d604051600160a060020a03909b168b5260208b01999099526040808b019890985260608a0196909652608089019490945261ffff92831660a089015260ff90911660c088015260e087015261010086019190915261012085019190915291909116610140830152610160909101905180910390a1620004cb6000898364010000000062002f596200050882021704565b9b9a5050505050505050505050565b6000918252600960205260409091208054600160a060020a031916600160a060020a03909216919091179055565b600160a060020a03808316600081815260086020908152604080832080546001019055858352600790915290208054600160a060020a03191690911790558316156200059c57600160a060020a03831660009081526008602090815260408083208054600019019055838352600a82528083208054600160a060020a03199081169091556009909252909120805490911690555b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef838383604051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a1505050565b600283019183908215620006825791602002820160005b838211156200064e57835183826101000a81548163ffffffff021916908363ffffffff160217905550926020019260040160208160030104928301926001030262000608565b8015620006805782816101000a81549063ffffffff02191690556004016020816003010492830192600103026200064e565b505b50620006909291506200071c565b5090565b6101406040519081016040908152600080835260208301819052908201819052606082018190526080820181905260a0820181905260c0820181905260e08201819052610100820181905261012082015290565b815481835581811511620007175760040281600402836000526020600020918201910162000717919062000743565b505050565b6200074091905b808211156200069057805463ffffffff1916815560010162000723565b90565b6200074091905b8082111562000690576000808255600182018190556002820180547fffffffffffffff0000000000000000000000000000000000000000000000000016905560038201556004016200074a565b613c2980620007a76000396000f3006060604052600436106102fd5763ffffffff60e060020a60003504166301ffc9a7811461034e57806302550e4d1461039a57806302e0a2ff146103cb5780630519ce79146103de57806306fdde031461040d578063095ea7b3146104975780630a0f8168146104b95780630de0b1bc146104cc5780630e0bc104146104df5780630e583df0146104f257806314001f4c1461050557806318160ddd146105245780631940a9361461053757806319c2f2011461054d57806321717ebf1461056057806323b872dd1461057357806324e7a38a1461059b57806327d7874c146105ba5780632a332b2a146105d95780632ba73c15146105f85780633369c33d1461061757806333fa59f01461062a5780633ccfd60b1461063d5780633d7d3f5a146106505780633f4ba83a1461066f57806346116e6f146106825780634ad8c938146106985780634b85fd55146106b75780634d42fc66146106cd5780634dfff04f146106e05780634e0a3379146107025780635663896e146107215780635c975abb146107375780636352211e1461074a578063680eba27146107605780636af04a57146107735780636bee2cc3146107865780636fbde40d146107b257806370a08231146107d157806371587988146107f05780637a7d49371461080f5780637b422184146108225780637c62e2a41461083b5780638456cb59146108aa57806395d89b41146108bd5780639d6fac6f146108d0578063a5ef0dd6146108ff578063a9059cbb14610915578063ab0a986514610937578063ad25ce571461094d578063b047fb5014610958578063b0c35c051461096b578063ba13a5721461097e578063c05b7cf614610991578063c41a360a146109a7578063caa14e36146109bd578063d3e6f49f146109d5578063d83970a1146109eb578063dff00e9214610a01578063e015d86314610a20578063e6cbe35114610a33578063eb8222eb14610a46578063ed60ade614610a59578063ee4ae2c914610a67578063f1ca941014610a89578063f2b47d5214610a9c578063f7d8c88314610aaf575b600b5433600160a060020a03908116911614806103285750600c5433600160a060020a039081169116145b80610341575060005433600160a060020a039081169116145b151561034c57600080fd5b005b341561035957600080fd5b6103867fffffffff0000000000000000000000000000000000000000000000000000000060043516610abd565b604051901515815260200160405180910390f35b34156103a557600080fd5b6103b9600160a060020a0360043516610ce0565b60405190815260200160405180910390f35b34156103d657600080fd5b6103b9610cf2565b34156103e957600080fd5b6103f1610d05565b604051600160a060020a03909116815260200160405180910390f35b341561041857600080fd5b610420610d14565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561045c578082015183820152602001610444565b50505050905090810190601f1680156104895780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156104a257600080fd5b61034c600160a060020a0360043516602435610d4b565b34156104c457600080fd5b6103f1610dd5565b34156104d757600080fd5b610386610de4565b34156104ea57600080fd5b6103b9610df4565b34156104fd57600080fd5b6103b9610ea4565b341561051057600080fd5b61034c600160a060020a0360043516610eb0565b341561052f57600080fd5b6103b9610f5d565b341561054257600080fd5b610386600435610f67565b341561055857600080fd5b6103b9610fa1565b341561056b57600080fd5b6103f1610fa8565b341561057e57600080fd5b61034c600160a060020a0360043581169060243516604435610fb7565b34156105a657600080fd5b61034c600160a060020a036004351661103e565b34156105c557600080fd5b61034c600160a060020a03600435166110eb565b34156105e457600080fd5b61034c600160a060020a036004351661113d565b341561060357600080fd5b61034c600160a060020a0360043516611200565b341561062257600080fd5b6103b9611252565b341561063557600080fd5b6103b9611258565b341561064857600080fd5b61034c61125e565b341561065b57600080fd5b61034c600435602435604435606435611322565b341561067a57600080fd5b61034c61142b565b341561068d57600080fd5b6103f16004356114da565b34156106a357600080fd5b61034c6004356024356044356064356114f5565b34156106c257600080fd5b61034c600435611613565b34156106d857600080fd5b6103b9611640565b34156106eb57600080fd5b61034c600160a060020a0360043516602435611646565b341561070d57600080fd5b61034c600160a060020a03600435166116a0565b341561072c57600080fd5b61034c6004356116f2565b341561074257600080fd5b61038661175a565b341561075557600080fd5b6103f160043561176a565b341561076b57600080fd5b6103b961178e565b341561077e57600080fd5b6103f1611794565b341561079157600080fd5b61079c6004356117a3565b60405160ff909116815260200160405180910390f35b34156107bd57600080fd5b61034c600160a060020a036004351661184b565b34156107dc57600080fd5b6103b9600160a060020a03600435166118f8565b34156107fb57600080fd5b61034c600160a060020a0360043516611913565b341561081a57600080fd5b6103b96119a1565b341561082d57600080fd5b6103b96004356024356119a7565b341561084657600080fd5b610851600435611dfe565b604051998a5260208a01989098526040808a01979097526060890195909552608088019390935260a087019190915260c086015260e085015260ff16610100840152610120830191909152610140909101905180910390f35b34156108b557600080fd5b61034c611f13565b34156108c857600080fd5b610420611f9f565b34156108db57600080fd5b6108e6600435611fd6565b60405163ffffffff909116815260200160405180910390f35b341561090a57600080fd5b61034c600435612003565b341561092057600080fd5b61034c600160a060020a0360043516602435612053565b341561094257600080fd5b6103b96004356120fa565b61034c600435612192565b341561096357600080fd5b6103f16125e0565b341561097657600080fd5b6103b96125ef565b341561098957600080fd5b6103f16125f5565b341561099c57600080fd5b61034c600435612604565b34156109b257600080fd5b6103f1600435612654565b34156109c857600080fd5b61034c6004351515612777565b34156109e057600080fd5b6103866004356127c1565b34156109f657600080fd5b6103f16004356128a0565b3415610a0c57600080fd5b61034c600160a060020a03600435166128bb565b3415610a2b57600080fd5b6103f161297e565b3415610a3e57600080fd5b6103f161298d565b3415610a5157600080fd5b6103b961299c565b61034c6004356024356129a2565b3415610a7257600080fd5b61034c600160a060020a0360043516602435612c01565b3415610a9457600080fd5b6103b9612c41565b3415610aa757600080fd5b6103f1612c47565b61034c600435602435612c56565b60006040517f737570706f727473496e7465726661636528627974657334290000000000000081526019016040518091039020600160e060020a03191682600160e060020a0319161480610cd857506040517f7472616e7366657246726f6d28616464726573732c616464726573732c75696e81527f7432353629000000000000000000000000000000000000000000000000000000602082015260250160405180910390206040517f7472616e7366657228616464726573732c75696e743235362900000000000000815260190160405180910390206040517f617070726f766528616464726573732c75696e74323536290000000000000000815260180160405180910390206040517f6f776e65724f662875696e743235362900000000000000000000000000000000815260100160405180910390206040517f62616c616e63654f662861646472657373290000000000000000000000000000815260120160405180910390206040517f746f74616c537570706c792829000000000000000000000000000000000000008152600d0160405180910390206040517f73796d626f6c2829000000000000000000000000000000000000000000000000815260080160405180910390206040517f6e616d65282900000000000000000000000000000000000000000000000000008152600601604051809103902018181818181818600160e060020a03191682600160e060020a031916145b90505b919050565b60126020526000908152604090205481565b601354600160a060020a03301631035b90565b600154600160a060020a031681565b60408051908101604052600881527f48656c6c6f446f67000000000000000000000000000000000000000000000000602082015281565b60025460a060020a900460ff1615610d6257600080fd5b610d6c3382612eeb565b1515610d7757600080fd5b610d818183612f0b565b7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925338383604051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a15050565b600054600160a060020a031681565b60155460a060020a900460ff1681565b600b5460009081908190600160a060020a031663eac9d94c82604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610e4257600080fd5b6102c65a03f11515610e5357600080fd5b50505060405180519250506fffffffffffffffffffffffffffffffff82168214610e7c57600080fd5b506002810481016702c68af0bb140000811015610e9e57506702c68af0bb1400005b92915050565b6702c68af0bb14000081565b6000805433600160a060020a03908116911614610ecc57600080fd5b5080600160a060020a0381166376190f8f6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610f1457600080fd5b6102c65a03f11515610f2557600080fd5b505050604051805190501515610f3a57600080fd5b600c8054600160a060020a031916600160a060020a039290921691909117905550565b6006546000190190565b6000600682815481101515610f7857fe5b6000918252602090912060049091020160020154608060020a900463ffffffff16151592915050565b6201518081565b600c54600160a060020a031681565b60025460a060020a900460ff1615610fce57600080fd5b600160a060020a0382161515610fe357600080fd5b30600160a060020a031682600160a060020a03161415151561100457600080fd5b61100e3382612f39565b151561101957600080fd5b6110238382612eeb565b151561102e57600080fd5b611039838383612f59565b505050565b6000805433600160a060020a0390811691161461105a57600080fd5b5080600160a060020a0381166354c15b826000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156110a257600080fd5b6102c65a03f115156110b357600080fd5b5050506040518051905015156110c857600080fd5b60158054600160a060020a031916600160a060020a039290921691909117905550565b60005433600160a060020a0390811691161461110657600080fd5b600160a060020a038116151561111b57600080fd5b60008054600160a060020a031916600160a060020a0392909216919091179055565b6000805433600160a060020a0390811691161461115957600080fd5b600e54600160a060020a03161561116f57600080fd5b5080600160a060020a0381166325698d896000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156111b757600080fd5b6102c65a03f115156111c857600080fd5b5050506040518051905015156111dd57600080fd5b600e8054600160a060020a031916600160a060020a039290921691909117905550565b60005433600160a060020a0390811691161461121b57600080fd5b600160a060020a038116151561123057600080fd5b60028054600160a060020a031916600160a060020a0392909216919091179055565b60145481565b60115481565b600160a060020a03331660009081526012602052604081205490811161128357600080fd5b600160a060020a03331681156108fc0282604051600060405180830381858888f1935050505015156112b457600080fd5b60138054829003905533600160a060020a038116600090815260126020526040808220919091557f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243649190839051600160a060020a03909216825260208201526040908101905180910390a150565b60025460a060020a900460ff161561133957600080fd5b6113433385612eeb565b8061135357506113533385612f39565b151561135e57600080fd5b61136784610f67565b1561137157600080fd5b600b54611388908590600160a060020a0316612f0b565b600b546000858152600760205260409081902054600160a060020a03928316926327ebe40a928892889288928892909116905160e060020a63ffffffff88160281526004810195909552602485019390935260448401919091526064830152600160a060020a0316608482015260a401600060405180830381600087803b151561141157600080fd5b6102c65a03f1151561142257600080fd5b50505050505050565b60005433600160a060020a0390811691161461144657600080fd5b60025460a060020a900460ff16151561145e57600080fd5b600b54600160a060020a0316151561147557600080fd5b600c54600160a060020a0316151561148c57600080fd5b600e54600160a060020a031615156114a357600080fd5b600d54600160a060020a031615156114ba57600080fd5b601754600160a060020a0316156114d057600080fd5b6114d8613041565b565b600a60205260009081526040902054600160a060020a031681565b60025460009060a060020a900460ff161561150f57600080fd5b600680548690811061151d57fe5b60009182526020909120600490910201600281015490915060c060020a900460ff161561154957600080fd5b6115533386612eeb565b151561155e57600080fd5b611567856127c1565b151561157257600080fd5b600c54611589908690600160a060020a0316612f0b565b600c54600160a060020a03166327ebe40a868686863360405160e060020a63ffffffff88160281526004810195909552602485019390935260448401919091526064830152600160a060020a0316608482015260a401600060405180830381600087803b15156115f857600080fd5b6102c65a03f1151561160957600080fd5b5050505050505050565b60005433600160a060020a0390811691161461162e57600080fd5b6000811161163b57600080fd5b600f55565b60105481565b60025460a060020a900460ff161561165d57600080fd5b6116673382612eeb565b151561167257600080fd5b6000908152600a602052604090208054600160a060020a031916600160a060020a0392909216919091179055565b60005433600160a060020a039081169116146116bb57600080fd5b600160a060020a03811615156116d057600080fd5b60018054600160a060020a031916600160a060020a0392909216919091179055565b60025433600160a060020a039081169116148061171d575060005433600160a060020a039081169116145b80611736575060015433600160a060020a039081169116145b151561174157600080fd5b60035463ffffffff16811061175557600080fd5b600555565b60025460a060020a900460ff1681565b600081815260076020526040902054600160a060020a0316801515610cdb57600080fd5b619c4081565b601754600160a060020a031681565b60006117af3383612eeb565b15156117ba57600080fd5b600e54600160a060020a0316636bee2cc38360006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561180b57600080fd5b6102c65a03f1151561181c57600080fd5b505050604051805160ff1615905061183357600080fd5b600e54610cdb903390600160a060020a031684612f59565b6000805433600160a060020a0390811691161461186757600080fd5b5080600160a060020a0381166385b861886000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156118af57600080fd5b6102c65a03f115156118c057600080fd5b5050506040518051905015156118d557600080fd5b600b8054600160a060020a031916600160a060020a039290921691909117905550565b600160a060020a031660009081526008602052604090205490565b60005433600160a060020a0390811691161461192e57600080fd5b60025460a060020a900460ff16151561194657600080fd5b60178054600160a060020a031916600160a060020a0383161790557f450db8da6efbe9c22f2347f7c2021231df1fc58d3ae9a2fa75d39fa44619930581604051600160a060020a03909116815260200160405180910390a150565b60055481565b6000806000806000806000806000806000600260149054906101000a900460ff161515156119d457600080fd5b600680548e9081106119e257fe5b906000526020600020906004020199508960010154600014151515611a0657600080fd5b611ab08a61014060405190810160409081528254825260018301546020830152600283015467ffffffffffffffff81169183019190915263ffffffff68010000000000000000820481166060840152606060020a820481166080840152608060020a82041660a083015261ffff60a060020a8204811660c084015260b060020a82041660e083015260ff60c060020a90910416610100820152600390910154610120820152613094565b1515611abb57600080fd5b60028a015460068054608060020a90920463ffffffff169a50908a908110611adf57fe5b600091825260209091206002808d015460049093029091019081015490995061ffff60b060020a92839004811699509190041687901115611b2d57600288015460b060020a900461ffff1696505b60028a015460b060020a900461ffff1615611b4c578960030154611b4e565b8c5b6015549096508c955060a060020a900460ff1615611c2357601554600160a060020a03161515611b7d57600080fd5b6015548a54895460028d0154600160a060020a0390931692630d9f5aed92919067ffffffffffffffff166000190160006040516020015260405160e060020a63ffffffff86160281526004810193909352602483019190915267ffffffffffffffff166044820152606401602060405180830381600087803b1515611c0157600080fd5b6102c65a03f11515611c1257600080fd5b505050604051805190509450611c72565b60005433600160a060020a0390811691161480611c4e575060025433600160a060020a039081169116145b80611c67575060015433600160a060020a039081169116145b1515611c7257600080fd5b60008d81526007602052604080822054600d54600654600160a060020a039283169850911692637b039bb69289929190516020015260405160e060020a63ffffffff851602815260048101929092526024820152604401602060405180830381600087803b1515611ce257600080fd5b6102c65a03f11515611cf357600080fd5b505050604051805160028c015490945061ffff60b060020a82048116159450611d3792508f9163ffffffff608060020a909104169060018b01168888888c896130cc565b60028b01805473ffffffff000000000000000000000000000000001916905560148054600019019055905060ff831615611dee57600d54600160a060020a0316632d0b7d53828660405160e060020a63ffffffff85160281526004810192909252600160a060020a03166024820152604401600060405180830381600087803b1515611dc257600080fd5b6102c65a03f11515611dd357600080fd5b5050600d54611dee91508590600160a060020a031683612f59565b9c9b505050505050505050505050565b600080600080600080600080600080600060068c815481101515611e1e57fe5b906000526020600020906004020190508060020160149054906101000a900461ffff1661ffff169a508060020160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1699508060020160109054906101000a900463ffffffff1663ffffffff169850806001015497508060020160089054906101000a900463ffffffff1663ffffffff16965080600201600c9054906101000a900463ffffffff1663ffffffff1695508060020160169054906101000a900461ffff1661ffff169450806000015493508060020160189054906101000a900460ff16925080600301549150509193959799509193959799565b60025433600160a060020a0390811691161480611f3e575060005433600160a060020a039081169116145b80611f57575060015433600160a060020a039081169116145b1515611f6257600080fd5b60025460a060020a900460ff1615611f7957600080fd5b6002805474ff0000000000000000000000000000000000000000191660a060020a179055565b60408051908101604052600281527f4844000000000000000000000000000000000000000000000000000000000000602082015281565b600381600e8110611fe357fe5b60089182820401919006600402915054906101000a900463ffffffff1681565b6000805433600160a060020a0390811691161461201f57600080fd5b600f548260640281151561202f57fe5b0490506000811161203f57600080fd5b606482111561204d57600080fd5b50601055565b60025460a060020a900460ff161561206a57600080fd5b600160a060020a038216151561207f57600080fd5b30600160a060020a031682600160a060020a0316141515156120a057600080fd5b600b54600160a060020a03838116911614156120bb57600080fd5b600c54600160a060020a03838116911614156120d657600080fd5b6120e03382612eeb565b15156120eb57600080fd5b6120f6338383612f59565b5050565b600254600090819033600160a060020a039081169116148061212a575060005433600160a060020a039081169116145b80612143575060015433600160a060020a039081169116145b151561214e57600080fd5b601654619c40901061215f57600080fd5b6121736000806000863060008060006130cc565b905061217f8133612f0b565b6016805460010190559050805b50919050565b600080600080600080600080600260149054906101000a900460ff161515156121ba57600080fd5b600680548a9081106121c857fe5b60009182526020822060049190910201600281015490995060b060020a900461ffff16111561232157600e54600160a060020a0316631d4f3e8b60006040516101e001526040518163ffffffff1660e060020a0281526004016101e060405180830381600087803b151561223b57600080fd5b6102c65a03f1151561224c57600080fd5b5050506040518060e00180519060200180519060200180519060200180519060200180519060200180519060200180519060200180519060200160405250505050505098505050868860010154101561232157600e548854600160a060020a039091169063f43acb529060006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156122f557600080fd5b6102c65a03f1151561230657600080fd5b5050506040518051905060ff16606414151561232157600080fd5b600b54600160a060020a031663c55d0f568a60006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561237257600080fd5b6102c65a03f1151561238357600080fd5b5050506040518051965050348690101561239c57600080fd5b8815806123a95750886001145b94506000935084156123bc576005860493505b600b54600160a060020a0316632d3a926a8760006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561240d57600080fd5b6102c65a03f1151561241e57600080fd5b5050506040518051600b54909450600160a060020a03169050639f04996d85850188038b3360405160e060020a63ffffffff86160281526004810192909252600160a060020a031660248201526044016000604051808303818588803b151561248657600080fd5b6125ee5a03f1151561249757600080fd5b50505050841561259657600154600160a060020a031684156108fc0285604051600060405180830381858888f1935050505015156124d457600080fd5b856002026fffffffffffffffffffffffffffffffff169150858210156124f8578591505b600b5461250f908a90600160a060020a0316612f0b565b600b54600160a060020a03166327ebe40a8a8480620151803360405160e060020a63ffffffff88160281526004810195909552602485019390935260448401919091526064830152600160a060020a0316608482015260a401600060405180830381600087803b151561258157600080fd5b6102c65a03f1151561259257600080fd5b5050505b853403905060008111156125d557600160a060020a03331681156108fc0282604051600060405180830381858888f1935050505015156125d557600080fd5b505050505050505050565b600254600160a060020a031681565b600f5481565b600e54600160a060020a031681565b6000805433600160a060020a0390811691161461262057600080fd5b600f548260640281151561263057fe5b0490506000811161264057600080fd5b606482111561264e57600080fd5b50601155565b600081815260076020526040812054600b54600160a060020a0391821691168114156126ed57600b54600160a060020a031663d6a9de518460006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156126cb57600080fd5b6102c65a03f115156126dc57600080fd5b50505060405180519050915061218c565b600c54600160a060020a038281169116141561275457600c54600160a060020a031663d6a9de518460006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156126cb57600080fd5b30600160a060020a031681600160a060020a03161415610e9e576000915061218c565b60005433600160a060020a0390811691161461279257600080fd5b6015805491151560a060020a0274ff000000000000000000000000000000000000000019909216919091179055565b600080600183116127d157600080fd5b60068054849081106127df57fe5b906000526020600020906004020190506128998161014060405190810160409081528254825260018301546020830152600283015467ffffffffffffffff81169183019190915263ffffffff68010000000000000000820481166060840152606060020a820481166080840152608060020a82041660a083015261ffff60a060020a8204811660c084015260b060020a82041660e083015260ff60c060020a909104166101008201526003909101546101208201526133bb565b9392505050565b600960205260009081526040902054600160a060020a031681565b6000805433600160a060020a039081169116146128d757600080fd5b600d54600160a060020a0316156128ed57600080fd5b5080600160a060020a0381166327757c496000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561293557600080fd5b6102c65a03f1151561294657600080fd5b50505060405180519050151561295b57600080fd5b600d8054600160a060020a031916600160a060020a039290921691909117905550565b600d54600160a060020a031681565b600b54600160a060020a031681565b60135481565b6000806000806000600260149054906101000a900460ff161515156129c657600080fd5b6129d03387612eeb565b15156129db57600080fd5b6129e4866127c1565b15156129ef57600080fd5b6129f986886133f2565b1515612a0457600080fd5b600c54600160a060020a031663c55d0f568860006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515612a5557600080fd5b6102c65a03f11515612a6657600080fd5b505050604051805190509450601154601154600f54870101019350600686815481101515612a9057fe5b60009182526020822060049190910201600281015490945060b060020a900461ffff161115612ac157601054840193505b3484901015612acf57600080fd5b600b54600160a060020a0316632d3a926a8660006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515612b2057600080fd5b6102c65a03f11515612b3157600080fd5b5050506040518051600c54909350600160a060020a03169050639f04996d838703893360405160e060020a63ffffffff86160281526004810192909252600160a060020a031660248201526044016000604051808303818588803b1515612b9757600080fd5b6125ee5a03f11515612ba857600080fd5b50505050612bc28663ffffffff168863ffffffff1661344a565b8334039050600081111561142257600160a060020a03331681156108fc0282604051600060405180830381858888f19350505050151561142257600080fd5b600e5433600160a060020a0390811691161480612c2c5750600d5433600160a060020a039081169116145b1515612c3757600080fd5b6120f68282613836565b60165481565b601554600160a060020a031681565b60025460009081908190819060a060020a900460ff1615612c7657600080fd5b601154601154600f5401019350600686815481101515612c9257fe5b60009182526020822060049190910201600281015490945060b060020a900461ffff161115612cc357601054840193505b3484901015612cd157600080fd5b612cdb3387612eeb565b1515612ce657600080fd5b612cf08587613878565b1515612cfb57600080fd5b612da58361014060405190810160409081528254825260018301546020830152600283015467ffffffffffffffff81169183019190915263ffffffff68010000000000000000820481166060840152606060020a820481166080840152608060020a82041660a083015261ffff60a060020a8204811660c084015260b060020a82041660e083015260ff60c060020a909104166101008201526003909101546101208201526133bb565b1515612db057600080fd5b6006805486908110612dbe57fe5b90600052602060002090600402019150612e788261014060405190810160409081528254825260018301546020830152600283015467ffffffffffffffff81169183019190915263ffffffff68010000000000000000820481166060840152606060020a820481166080840152608060020a82041660a083015261ffff60a060020a8204811660c084015260b060020a82041660e083015260ff60c060020a909104166101008201526003909101546101208201526133bb565b1515612e8357600080fd5b612e8f838784886138cd565b1515612e9a57600080fd5b612ea4868661344a565b83340390506000811115612ee357600160a060020a03331681156108fc0282604051600060405180830381858888f193505050501515612ee357600080fd5b505050505050565b600090815260076020526040902054600160a060020a0391821691161490565b6000918252600960205260409091208054600160a060020a031916600160a060020a03909216919091179055565b600090815260096020526040902054600160a060020a0391821691161490565b600160a060020a03808316600081815260086020908152604080832080546001019055858352600790915290208054600160a060020a0319169091179055831615612fec57600160a060020a03831660009081526008602090815260408083208054600019019055838352600a82528083208054600160a060020a03199081169091556009909252909120805490911690555b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef838383604051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a1505050565b60005433600160a060020a0390811691161461305c57600080fd5b60025460a060020a900460ff16151561307457600080fd5b6002805474ff000000000000000000000000000000000000000019169055565b60008160a0015163ffffffff1615801590610cd857504367ffffffffffffffff16826040015167ffffffffffffffff16111592915050565b6000806130d7613b36565b600063ffffffff8c168c146130eb57600080fd5b63ffffffff8b168b146130fd57600080fd5b61ffff8a168a1461310d57600080fd5b60028a049250600d8361ffff16111561312557600d92505b61014060405190810160409081528a8252436020830152600090820181905263ffffffff808f1660608401528d16608083015260a082015261ffff80851660c08301528b1660e082015260ff88166101008201526101208101879052600680549193506001918083016131988382613b8a565b600092835260209092208591600402018151815560208201518160010155604082015160028201805467ffffffffffffffff191667ffffffffffffffff9290921691909117905560608201518160020160086101000a81548163ffffffff021916908363ffffffff160217905550608082015181600201600c6101000a81548163ffffffff021916908363ffffffff16021790555060a08201518160020160106101000a81548163ffffffff021916908363ffffffff16021790555060c08201518160020160146101000a81548161ffff021916908361ffff16021790555060e08201518160020160166101000a81548161ffff021916908361ffff1602179055506101008201518160020160186101000a81548160ff021916908360ff1602179055506101208201516003909101555003905063016c800081106132dc57600080fd5b7f746319248c02be7f11174ecd7121305fe37ffe8b19a6abef96df84f321a84e338882846060015163ffffffff16856080015163ffffffff1686518f8d8d438e6133285760105461332b565b60005b8d604051600160a060020a03909b168b5260208b01999099526040808b019890985260608a0196909652608089019490945261ffff92831660a089015260ff90911660c088015260e087015261010086019190915261012085019190915291909116610140830152610160909101905180910390a16133ac60008983612f59565b9b9a5050505050505050505050565b60008160a0015163ffffffff16158015610cd857504367ffffffffffffffff16826040015167ffffffffffffffff16111592915050565b600080600060068581548110151561340657fe5b9060005260206000209060040201915060068481548110151561342557fe5b90600052602060002090600402019050613441828683876138cd565b95945050505050565b60008080806001861161345c57600080fd5b6001851161346957600080fd5b600680548690811061347757fe5b9060005260206000209060040201935060068681548110151561349657fe5b600091825260209091206002860154600490920201935060c060020a900460ff16156134c157600080fd5b600283015460c060020a900460ff16156134da57600080fd5b6002830154600060b060020a90910461ffff16111561362357600e54600160a060020a0316631d4f3e8b60006040516101e001526040518163ffffffff1660e060020a0281526004016101e060405180830381600087803b151561353d57600080fd5b6102c65a03f1151561354e57600080fd5b5050506040518060e00180519060200180519060200180519060200180519060200180519060200180519060200180519060200180519060200160405250505050505093505050818360010154101561362357600e548354600160a060020a039091169063f43acb529060006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156135f757600080fd5b6102c65a03f1151561360857600080fd5b5050506040518051905060ff16606414151561362357600080fd5b60028301805473ffffffff000000000000000000000000000000001916608060020a63ffffffff88160217905561365984613a70565b61366283613a70565b6000868152600a60205260408082208054600160a060020a031990811690915587835291819020805490921690915560148054600190810190915554600f54600160a060020a03909116916108fc821502919051600060405180830381858888f1935050505015156136d357600080fd5b6136dd6000612654565b9050600160a060020a038116156136fa576136fa81601154613836565b6137046001612654565b9050600160a060020a038116156137215761372181601154613836565b6002830154600060b060020a90910461ffff161115613764576137478360030154612654565b9050600160a060020a038116156137645761376481601054613836565b6000868152600760205260409081902054600280860154908701547f1ee9be14ee585b164bf130cf7a98acb8ec21d44ae3cf64cd149aee4dcc59232193600160a060020a03909316928a928a9267ffffffffffffffff808316939082169261ffff60a060020a9182900481169391909104169051600160a060020a039097168752602087019590955260408087019490945267ffffffffffffffff92831660608701529116608085015261ffff90811660a08501529190911660c083015260e0909101905180910390a1505050505050565b60138054820190819055600160a060020a03301631101561385657600080fd5b600160a060020a03909116600090815260126020526040902080549091019055565b6000818152600760205260408082205484835290822054600160a060020a0391821691168082148061344157506000858152600a6020526040902054600160a060020a03908116908316149250505092915050565b6000818414156138df57506000613a68565b600285015468010000000000000000900463ffffffff1682148061391357506002850154606060020a900463ffffffff1682145b1561392057506000613a68565b600283015468010000000000000000900463ffffffff1684148061395457506002830154606060020a900463ffffffff1684145b1561396157506000613a68565b600283015468010000000000000000900463ffffffff1615806139985750600285015468010000000000000000900463ffffffff16155b156139a557506001613a68565b60028581015490840154680100000000000000009182900463ffffffff908116929091041614806139fa57506002808601549084015468010000000000000000900463ffffffff908116606060020a90920416145b15613a0757506000613a68565b60028086015490840154606060020a900463ffffffff90811668010000000000000000909204161480613a57575060028581015490840154606060020a9182900463ffffffff9081169290910416145b15613a6457506000613a68565b5060015b949350505050565b600554600282015443919060039060a060020a900461ffff16600e8110613a9357fe5b600891828204019190066004029054906101000a900463ffffffff1663ffffffff16811515613abe57fe5b60028401805467ffffffffffffffff1916929091049290920167ffffffffffffffff161790819055600d60a060020a90910461ffff161015613b335760028101805461ffff60a060020a80830482166001019091160275ffff0000000000000000000000000000000000000000199091161790555b50565b6101406040519081016040908152600080835260208301819052908201819052606082018190526080820181905260a0820181905260c0820181905260e08201819052610100820181905261012082015290565b8154818355818115116110395760008381526020902061103991610d029160049182028101918502015b80821115613bf95760008082556001820181905560028201805478ffffffffffffffffffffffffffffffffffffffffffffffffff191690556003820155600401613bb4565b50905600a165627a7a72305820a67edf09562e4df386230d4506c315d9b04b254c0b087c3f5e850710db56e55f0029

Deployed Bytecode

0x6060604052600436106102fd5763ffffffff60e060020a60003504166301ffc9a7811461034e57806302550e4d1461039a57806302e0a2ff146103cb5780630519ce79146103de57806306fdde031461040d578063095ea7b3146104975780630a0f8168146104b95780630de0b1bc146104cc5780630e0bc104146104df5780630e583df0146104f257806314001f4c1461050557806318160ddd146105245780631940a9361461053757806319c2f2011461054d57806321717ebf1461056057806323b872dd1461057357806324e7a38a1461059b57806327d7874c146105ba5780632a332b2a146105d95780632ba73c15146105f85780633369c33d1461061757806333fa59f01461062a5780633ccfd60b1461063d5780633d7d3f5a146106505780633f4ba83a1461066f57806346116e6f146106825780634ad8c938146106985780634b85fd55146106b75780634d42fc66146106cd5780634dfff04f146106e05780634e0a3379146107025780635663896e146107215780635c975abb146107375780636352211e1461074a578063680eba27146107605780636af04a57146107735780636bee2cc3146107865780636fbde40d146107b257806370a08231146107d157806371587988146107f05780637a7d49371461080f5780637b422184146108225780637c62e2a41461083b5780638456cb59146108aa57806395d89b41146108bd5780639d6fac6f146108d0578063a5ef0dd6146108ff578063a9059cbb14610915578063ab0a986514610937578063ad25ce571461094d578063b047fb5014610958578063b0c35c051461096b578063ba13a5721461097e578063c05b7cf614610991578063c41a360a146109a7578063caa14e36146109bd578063d3e6f49f146109d5578063d83970a1146109eb578063dff00e9214610a01578063e015d86314610a20578063e6cbe35114610a33578063eb8222eb14610a46578063ed60ade614610a59578063ee4ae2c914610a67578063f1ca941014610a89578063f2b47d5214610a9c578063f7d8c88314610aaf575b600b5433600160a060020a03908116911614806103285750600c5433600160a060020a039081169116145b80610341575060005433600160a060020a039081169116145b151561034c57600080fd5b005b341561035957600080fd5b6103867fffffffff0000000000000000000000000000000000000000000000000000000060043516610abd565b604051901515815260200160405180910390f35b34156103a557600080fd5b6103b9600160a060020a0360043516610ce0565b60405190815260200160405180910390f35b34156103d657600080fd5b6103b9610cf2565b34156103e957600080fd5b6103f1610d05565b604051600160a060020a03909116815260200160405180910390f35b341561041857600080fd5b610420610d14565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561045c578082015183820152602001610444565b50505050905090810190601f1680156104895780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156104a257600080fd5b61034c600160a060020a0360043516602435610d4b565b34156104c457600080fd5b6103f1610dd5565b34156104d757600080fd5b610386610de4565b34156104ea57600080fd5b6103b9610df4565b34156104fd57600080fd5b6103b9610ea4565b341561051057600080fd5b61034c600160a060020a0360043516610eb0565b341561052f57600080fd5b6103b9610f5d565b341561054257600080fd5b610386600435610f67565b341561055857600080fd5b6103b9610fa1565b341561056b57600080fd5b6103f1610fa8565b341561057e57600080fd5b61034c600160a060020a0360043581169060243516604435610fb7565b34156105a657600080fd5b61034c600160a060020a036004351661103e565b34156105c557600080fd5b61034c600160a060020a03600435166110eb565b34156105e457600080fd5b61034c600160a060020a036004351661113d565b341561060357600080fd5b61034c600160a060020a0360043516611200565b341561062257600080fd5b6103b9611252565b341561063557600080fd5b6103b9611258565b341561064857600080fd5b61034c61125e565b341561065b57600080fd5b61034c600435602435604435606435611322565b341561067a57600080fd5b61034c61142b565b341561068d57600080fd5b6103f16004356114da565b34156106a357600080fd5b61034c6004356024356044356064356114f5565b34156106c257600080fd5b61034c600435611613565b34156106d857600080fd5b6103b9611640565b34156106eb57600080fd5b61034c600160a060020a0360043516602435611646565b341561070d57600080fd5b61034c600160a060020a03600435166116a0565b341561072c57600080fd5b61034c6004356116f2565b341561074257600080fd5b61038661175a565b341561075557600080fd5b6103f160043561176a565b341561076b57600080fd5b6103b961178e565b341561077e57600080fd5b6103f1611794565b341561079157600080fd5b61079c6004356117a3565b60405160ff909116815260200160405180910390f35b34156107bd57600080fd5b61034c600160a060020a036004351661184b565b34156107dc57600080fd5b6103b9600160a060020a03600435166118f8565b34156107fb57600080fd5b61034c600160a060020a0360043516611913565b341561081a57600080fd5b6103b96119a1565b341561082d57600080fd5b6103b96004356024356119a7565b341561084657600080fd5b610851600435611dfe565b604051998a5260208a01989098526040808a01979097526060890195909552608088019390935260a087019190915260c086015260e085015260ff16610100840152610120830191909152610140909101905180910390f35b34156108b557600080fd5b61034c611f13565b34156108c857600080fd5b610420611f9f565b34156108db57600080fd5b6108e6600435611fd6565b60405163ffffffff909116815260200160405180910390f35b341561090a57600080fd5b61034c600435612003565b341561092057600080fd5b61034c600160a060020a0360043516602435612053565b341561094257600080fd5b6103b96004356120fa565b61034c600435612192565b341561096357600080fd5b6103f16125e0565b341561097657600080fd5b6103b96125ef565b341561098957600080fd5b6103f16125f5565b341561099c57600080fd5b61034c600435612604565b34156109b257600080fd5b6103f1600435612654565b34156109c857600080fd5b61034c6004351515612777565b34156109e057600080fd5b6103866004356127c1565b34156109f657600080fd5b6103f16004356128a0565b3415610a0c57600080fd5b61034c600160a060020a03600435166128bb565b3415610a2b57600080fd5b6103f161297e565b3415610a3e57600080fd5b6103f161298d565b3415610a5157600080fd5b6103b961299c565b61034c6004356024356129a2565b3415610a7257600080fd5b61034c600160a060020a0360043516602435612c01565b3415610a9457600080fd5b6103b9612c41565b3415610aa757600080fd5b6103f1612c47565b61034c600435602435612c56565b60006040517f737570706f727473496e7465726661636528627974657334290000000000000081526019016040518091039020600160e060020a03191682600160e060020a0319161480610cd857506040517f7472616e7366657246726f6d28616464726573732c616464726573732c75696e81527f7432353629000000000000000000000000000000000000000000000000000000602082015260250160405180910390206040517f7472616e7366657228616464726573732c75696e743235362900000000000000815260190160405180910390206040517f617070726f766528616464726573732c75696e74323536290000000000000000815260180160405180910390206040517f6f776e65724f662875696e743235362900000000000000000000000000000000815260100160405180910390206040517f62616c616e63654f662861646472657373290000000000000000000000000000815260120160405180910390206040517f746f74616c537570706c792829000000000000000000000000000000000000008152600d0160405180910390206040517f73796d626f6c2829000000000000000000000000000000000000000000000000815260080160405180910390206040517f6e616d65282900000000000000000000000000000000000000000000000000008152600601604051809103902018181818181818600160e060020a03191682600160e060020a031916145b90505b919050565b60126020526000908152604090205481565b601354600160a060020a03301631035b90565b600154600160a060020a031681565b60408051908101604052600881527f48656c6c6f446f67000000000000000000000000000000000000000000000000602082015281565b60025460a060020a900460ff1615610d6257600080fd5b610d6c3382612eeb565b1515610d7757600080fd5b610d818183612f0b565b7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925338383604051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a15050565b600054600160a060020a031681565b60155460a060020a900460ff1681565b600b5460009081908190600160a060020a031663eac9d94c82604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610e4257600080fd5b6102c65a03f11515610e5357600080fd5b50505060405180519250506fffffffffffffffffffffffffffffffff82168214610e7c57600080fd5b506002810481016702c68af0bb140000811015610e9e57506702c68af0bb1400005b92915050565b6702c68af0bb14000081565b6000805433600160a060020a03908116911614610ecc57600080fd5b5080600160a060020a0381166376190f8f6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610f1457600080fd5b6102c65a03f11515610f2557600080fd5b505050604051805190501515610f3a57600080fd5b600c8054600160a060020a031916600160a060020a039290921691909117905550565b6006546000190190565b6000600682815481101515610f7857fe5b6000918252602090912060049091020160020154608060020a900463ffffffff16151592915050565b6201518081565b600c54600160a060020a031681565b60025460a060020a900460ff1615610fce57600080fd5b600160a060020a0382161515610fe357600080fd5b30600160a060020a031682600160a060020a03161415151561100457600080fd5b61100e3382612f39565b151561101957600080fd5b6110238382612eeb565b151561102e57600080fd5b611039838383612f59565b505050565b6000805433600160a060020a0390811691161461105a57600080fd5b5080600160a060020a0381166354c15b826000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156110a257600080fd5b6102c65a03f115156110b357600080fd5b5050506040518051905015156110c857600080fd5b60158054600160a060020a031916600160a060020a039290921691909117905550565b60005433600160a060020a0390811691161461110657600080fd5b600160a060020a038116151561111b57600080fd5b60008054600160a060020a031916600160a060020a0392909216919091179055565b6000805433600160a060020a0390811691161461115957600080fd5b600e54600160a060020a03161561116f57600080fd5b5080600160a060020a0381166325698d896000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156111b757600080fd5b6102c65a03f115156111c857600080fd5b5050506040518051905015156111dd57600080fd5b600e8054600160a060020a031916600160a060020a039290921691909117905550565b60005433600160a060020a0390811691161461121b57600080fd5b600160a060020a038116151561123057600080fd5b60028054600160a060020a031916600160a060020a0392909216919091179055565b60145481565b60115481565b600160a060020a03331660009081526012602052604081205490811161128357600080fd5b600160a060020a03331681156108fc0282604051600060405180830381858888f1935050505015156112b457600080fd5b60138054829003905533600160a060020a038116600090815260126020526040808220919091557f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243649190839051600160a060020a03909216825260208201526040908101905180910390a150565b60025460a060020a900460ff161561133957600080fd5b6113433385612eeb565b8061135357506113533385612f39565b151561135e57600080fd5b61136784610f67565b1561137157600080fd5b600b54611388908590600160a060020a0316612f0b565b600b546000858152600760205260409081902054600160a060020a03928316926327ebe40a928892889288928892909116905160e060020a63ffffffff88160281526004810195909552602485019390935260448401919091526064830152600160a060020a0316608482015260a401600060405180830381600087803b151561141157600080fd5b6102c65a03f1151561142257600080fd5b50505050505050565b60005433600160a060020a0390811691161461144657600080fd5b60025460a060020a900460ff16151561145e57600080fd5b600b54600160a060020a0316151561147557600080fd5b600c54600160a060020a0316151561148c57600080fd5b600e54600160a060020a031615156114a357600080fd5b600d54600160a060020a031615156114ba57600080fd5b601754600160a060020a0316156114d057600080fd5b6114d8613041565b565b600a60205260009081526040902054600160a060020a031681565b60025460009060a060020a900460ff161561150f57600080fd5b600680548690811061151d57fe5b60009182526020909120600490910201600281015490915060c060020a900460ff161561154957600080fd5b6115533386612eeb565b151561155e57600080fd5b611567856127c1565b151561157257600080fd5b600c54611589908690600160a060020a0316612f0b565b600c54600160a060020a03166327ebe40a868686863360405160e060020a63ffffffff88160281526004810195909552602485019390935260448401919091526064830152600160a060020a0316608482015260a401600060405180830381600087803b15156115f857600080fd5b6102c65a03f1151561160957600080fd5b5050505050505050565b60005433600160a060020a0390811691161461162e57600080fd5b6000811161163b57600080fd5b600f55565b60105481565b60025460a060020a900460ff161561165d57600080fd5b6116673382612eeb565b151561167257600080fd5b6000908152600a602052604090208054600160a060020a031916600160a060020a0392909216919091179055565b60005433600160a060020a039081169116146116bb57600080fd5b600160a060020a03811615156116d057600080fd5b60018054600160a060020a031916600160a060020a0392909216919091179055565b60025433600160a060020a039081169116148061171d575060005433600160a060020a039081169116145b80611736575060015433600160a060020a039081169116145b151561174157600080fd5b60035463ffffffff16811061175557600080fd5b600555565b60025460a060020a900460ff1681565b600081815260076020526040902054600160a060020a0316801515610cdb57600080fd5b619c4081565b601754600160a060020a031681565b60006117af3383612eeb565b15156117ba57600080fd5b600e54600160a060020a0316636bee2cc38360006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561180b57600080fd5b6102c65a03f1151561181c57600080fd5b505050604051805160ff1615905061183357600080fd5b600e54610cdb903390600160a060020a031684612f59565b6000805433600160a060020a0390811691161461186757600080fd5b5080600160a060020a0381166385b861886000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156118af57600080fd5b6102c65a03f115156118c057600080fd5b5050506040518051905015156118d557600080fd5b600b8054600160a060020a031916600160a060020a039290921691909117905550565b600160a060020a031660009081526008602052604090205490565b60005433600160a060020a0390811691161461192e57600080fd5b60025460a060020a900460ff16151561194657600080fd5b60178054600160a060020a031916600160a060020a0383161790557f450db8da6efbe9c22f2347f7c2021231df1fc58d3ae9a2fa75d39fa44619930581604051600160a060020a03909116815260200160405180910390a150565b60055481565b6000806000806000806000806000806000600260149054906101000a900460ff161515156119d457600080fd5b600680548e9081106119e257fe5b906000526020600020906004020199508960010154600014151515611a0657600080fd5b611ab08a61014060405190810160409081528254825260018301546020830152600283015467ffffffffffffffff81169183019190915263ffffffff68010000000000000000820481166060840152606060020a820481166080840152608060020a82041660a083015261ffff60a060020a8204811660c084015260b060020a82041660e083015260ff60c060020a90910416610100820152600390910154610120820152613094565b1515611abb57600080fd5b60028a015460068054608060020a90920463ffffffff169a50908a908110611adf57fe5b600091825260209091206002808d015460049093029091019081015490995061ffff60b060020a92839004811699509190041687901115611b2d57600288015460b060020a900461ffff1696505b60028a015460b060020a900461ffff1615611b4c578960030154611b4e565b8c5b6015549096508c955060a060020a900460ff1615611c2357601554600160a060020a03161515611b7d57600080fd5b6015548a54895460028d0154600160a060020a0390931692630d9f5aed92919067ffffffffffffffff166000190160006040516020015260405160e060020a63ffffffff86160281526004810193909352602483019190915267ffffffffffffffff166044820152606401602060405180830381600087803b1515611c0157600080fd5b6102c65a03f11515611c1257600080fd5b505050604051805190509450611c72565b60005433600160a060020a0390811691161480611c4e575060025433600160a060020a039081169116145b80611c67575060015433600160a060020a039081169116145b1515611c7257600080fd5b60008d81526007602052604080822054600d54600654600160a060020a039283169850911692637b039bb69289929190516020015260405160e060020a63ffffffff851602815260048101929092526024820152604401602060405180830381600087803b1515611ce257600080fd5b6102c65a03f11515611cf357600080fd5b505050604051805160028c015490945061ffff60b060020a82048116159450611d3792508f9163ffffffff608060020a909104169060018b01168888888c896130cc565b60028b01805473ffffffff000000000000000000000000000000001916905560148054600019019055905060ff831615611dee57600d54600160a060020a0316632d0b7d53828660405160e060020a63ffffffff85160281526004810192909252600160a060020a03166024820152604401600060405180830381600087803b1515611dc257600080fd5b6102c65a03f11515611dd357600080fd5b5050600d54611dee91508590600160a060020a031683612f59565b9c9b505050505050505050505050565b600080600080600080600080600080600060068c815481101515611e1e57fe5b906000526020600020906004020190508060020160149054906101000a900461ffff1661ffff169a508060020160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1699508060020160109054906101000a900463ffffffff1663ffffffff169850806001015497508060020160089054906101000a900463ffffffff1663ffffffff16965080600201600c9054906101000a900463ffffffff1663ffffffff1695508060020160169054906101000a900461ffff1661ffff169450806000015493508060020160189054906101000a900460ff16925080600301549150509193959799509193959799565b60025433600160a060020a0390811691161480611f3e575060005433600160a060020a039081169116145b80611f57575060015433600160a060020a039081169116145b1515611f6257600080fd5b60025460a060020a900460ff1615611f7957600080fd5b6002805474ff0000000000000000000000000000000000000000191660a060020a179055565b60408051908101604052600281527f4844000000000000000000000000000000000000000000000000000000000000602082015281565b600381600e8110611fe357fe5b60089182820401919006600402915054906101000a900463ffffffff1681565b6000805433600160a060020a0390811691161461201f57600080fd5b600f548260640281151561202f57fe5b0490506000811161203f57600080fd5b606482111561204d57600080fd5b50601055565b60025460a060020a900460ff161561206a57600080fd5b600160a060020a038216151561207f57600080fd5b30600160a060020a031682600160a060020a0316141515156120a057600080fd5b600b54600160a060020a03838116911614156120bb57600080fd5b600c54600160a060020a03838116911614156120d657600080fd5b6120e03382612eeb565b15156120eb57600080fd5b6120f6338383612f59565b5050565b600254600090819033600160a060020a039081169116148061212a575060005433600160a060020a039081169116145b80612143575060015433600160a060020a039081169116145b151561214e57600080fd5b601654619c40901061215f57600080fd5b6121736000806000863060008060006130cc565b905061217f8133612f0b565b6016805460010190559050805b50919050565b600080600080600080600080600260149054906101000a900460ff161515156121ba57600080fd5b600680548a9081106121c857fe5b60009182526020822060049190910201600281015490995060b060020a900461ffff16111561232157600e54600160a060020a0316631d4f3e8b60006040516101e001526040518163ffffffff1660e060020a0281526004016101e060405180830381600087803b151561223b57600080fd5b6102c65a03f1151561224c57600080fd5b5050506040518060e00180519060200180519060200180519060200180519060200180519060200180519060200180519060200180519060200160405250505050505098505050868860010154101561232157600e548854600160a060020a039091169063f43acb529060006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156122f557600080fd5b6102c65a03f1151561230657600080fd5b5050506040518051905060ff16606414151561232157600080fd5b600b54600160a060020a031663c55d0f568a60006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561237257600080fd5b6102c65a03f1151561238357600080fd5b5050506040518051965050348690101561239c57600080fd5b8815806123a95750886001145b94506000935084156123bc576005860493505b600b54600160a060020a0316632d3a926a8760006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561240d57600080fd5b6102c65a03f1151561241e57600080fd5b5050506040518051600b54909450600160a060020a03169050639f04996d85850188038b3360405160e060020a63ffffffff86160281526004810192909252600160a060020a031660248201526044016000604051808303818588803b151561248657600080fd5b6125ee5a03f1151561249757600080fd5b50505050841561259657600154600160a060020a031684156108fc0285604051600060405180830381858888f1935050505015156124d457600080fd5b856002026fffffffffffffffffffffffffffffffff169150858210156124f8578591505b600b5461250f908a90600160a060020a0316612f0b565b600b54600160a060020a03166327ebe40a8a8480620151803360405160e060020a63ffffffff88160281526004810195909552602485019390935260448401919091526064830152600160a060020a0316608482015260a401600060405180830381600087803b151561258157600080fd5b6102c65a03f1151561259257600080fd5b5050505b853403905060008111156125d557600160a060020a03331681156108fc0282604051600060405180830381858888f1935050505015156125d557600080fd5b505050505050505050565b600254600160a060020a031681565b600f5481565b600e54600160a060020a031681565b6000805433600160a060020a0390811691161461262057600080fd5b600f548260640281151561263057fe5b0490506000811161264057600080fd5b606482111561264e57600080fd5b50601155565b600081815260076020526040812054600b54600160a060020a0391821691168114156126ed57600b54600160a060020a031663d6a9de518460006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156126cb57600080fd5b6102c65a03f115156126dc57600080fd5b50505060405180519050915061218c565b600c54600160a060020a038281169116141561275457600c54600160a060020a031663d6a9de518460006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156126cb57600080fd5b30600160a060020a031681600160a060020a03161415610e9e576000915061218c565b60005433600160a060020a0390811691161461279257600080fd5b6015805491151560a060020a0274ff000000000000000000000000000000000000000019909216919091179055565b600080600183116127d157600080fd5b60068054849081106127df57fe5b906000526020600020906004020190506128998161014060405190810160409081528254825260018301546020830152600283015467ffffffffffffffff81169183019190915263ffffffff68010000000000000000820481166060840152606060020a820481166080840152608060020a82041660a083015261ffff60a060020a8204811660c084015260b060020a82041660e083015260ff60c060020a909104166101008201526003909101546101208201526133bb565b9392505050565b600960205260009081526040902054600160a060020a031681565b6000805433600160a060020a039081169116146128d757600080fd5b600d54600160a060020a0316156128ed57600080fd5b5080600160a060020a0381166327757c496000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561293557600080fd5b6102c65a03f1151561294657600080fd5b50505060405180519050151561295b57600080fd5b600d8054600160a060020a031916600160a060020a039290921691909117905550565b600d54600160a060020a031681565b600b54600160a060020a031681565b60135481565b6000806000806000600260149054906101000a900460ff161515156129c657600080fd5b6129d03387612eeb565b15156129db57600080fd5b6129e4866127c1565b15156129ef57600080fd5b6129f986886133f2565b1515612a0457600080fd5b600c54600160a060020a031663c55d0f568860006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515612a5557600080fd5b6102c65a03f11515612a6657600080fd5b505050604051805190509450601154601154600f54870101019350600686815481101515612a9057fe5b60009182526020822060049190910201600281015490945060b060020a900461ffff161115612ac157601054840193505b3484901015612acf57600080fd5b600b54600160a060020a0316632d3a926a8660006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515612b2057600080fd5b6102c65a03f11515612b3157600080fd5b5050506040518051600c54909350600160a060020a03169050639f04996d838703893360405160e060020a63ffffffff86160281526004810192909252600160a060020a031660248201526044016000604051808303818588803b1515612b9757600080fd5b6125ee5a03f11515612ba857600080fd5b50505050612bc28663ffffffff168863ffffffff1661344a565b8334039050600081111561142257600160a060020a03331681156108fc0282604051600060405180830381858888f19350505050151561142257600080fd5b600e5433600160a060020a0390811691161480612c2c5750600d5433600160a060020a039081169116145b1515612c3757600080fd5b6120f68282613836565b60165481565b601554600160a060020a031681565b60025460009081908190819060a060020a900460ff1615612c7657600080fd5b601154601154600f5401019350600686815481101515612c9257fe5b60009182526020822060049190910201600281015490945060b060020a900461ffff161115612cc357601054840193505b3484901015612cd157600080fd5b612cdb3387612eeb565b1515612ce657600080fd5b612cf08587613878565b1515612cfb57600080fd5b612da58361014060405190810160409081528254825260018301546020830152600283015467ffffffffffffffff81169183019190915263ffffffff68010000000000000000820481166060840152606060020a820481166080840152608060020a82041660a083015261ffff60a060020a8204811660c084015260b060020a82041660e083015260ff60c060020a909104166101008201526003909101546101208201526133bb565b1515612db057600080fd5b6006805486908110612dbe57fe5b90600052602060002090600402019150612e788261014060405190810160409081528254825260018301546020830152600283015467ffffffffffffffff81169183019190915263ffffffff68010000000000000000820481166060840152606060020a820481166080840152608060020a82041660a083015261ffff60a060020a8204811660c084015260b060020a82041660e083015260ff60c060020a909104166101008201526003909101546101208201526133bb565b1515612e8357600080fd5b612e8f838784886138cd565b1515612e9a57600080fd5b612ea4868661344a565b83340390506000811115612ee357600160a060020a03331681156108fc0282604051600060405180830381858888f193505050501515612ee357600080fd5b505050505050565b600090815260076020526040902054600160a060020a0391821691161490565b6000918252600960205260409091208054600160a060020a031916600160a060020a03909216919091179055565b600090815260096020526040902054600160a060020a0391821691161490565b600160a060020a03808316600081815260086020908152604080832080546001019055858352600790915290208054600160a060020a0319169091179055831615612fec57600160a060020a03831660009081526008602090815260408083208054600019019055838352600a82528083208054600160a060020a03199081169091556009909252909120805490911690555b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef838383604051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a1505050565b60005433600160a060020a0390811691161461305c57600080fd5b60025460a060020a900460ff16151561307457600080fd5b6002805474ff000000000000000000000000000000000000000019169055565b60008160a0015163ffffffff1615801590610cd857504367ffffffffffffffff16826040015167ffffffffffffffff16111592915050565b6000806130d7613b36565b600063ffffffff8c168c146130eb57600080fd5b63ffffffff8b168b146130fd57600080fd5b61ffff8a168a1461310d57600080fd5b60028a049250600d8361ffff16111561312557600d92505b61014060405190810160409081528a8252436020830152600090820181905263ffffffff808f1660608401528d16608083015260a082015261ffff80851660c08301528b1660e082015260ff88166101008201526101208101879052600680549193506001918083016131988382613b8a565b600092835260209092208591600402018151815560208201518160010155604082015160028201805467ffffffffffffffff191667ffffffffffffffff9290921691909117905560608201518160020160086101000a81548163ffffffff021916908363ffffffff160217905550608082015181600201600c6101000a81548163ffffffff021916908363ffffffff16021790555060a08201518160020160106101000a81548163ffffffff021916908363ffffffff16021790555060c08201518160020160146101000a81548161ffff021916908361ffff16021790555060e08201518160020160166101000a81548161ffff021916908361ffff1602179055506101008201518160020160186101000a81548160ff021916908360ff1602179055506101208201516003909101555003905063016c800081106132dc57600080fd5b7f746319248c02be7f11174ecd7121305fe37ffe8b19a6abef96df84f321a84e338882846060015163ffffffff16856080015163ffffffff1686518f8d8d438e6133285760105461332b565b60005b8d604051600160a060020a03909b168b5260208b01999099526040808b019890985260608a0196909652608089019490945261ffff92831660a089015260ff90911660c088015260e087015261010086019190915261012085019190915291909116610140830152610160909101905180910390a16133ac60008983612f59565b9b9a5050505050505050505050565b60008160a0015163ffffffff16158015610cd857504367ffffffffffffffff16826040015167ffffffffffffffff16111592915050565b600080600060068581548110151561340657fe5b9060005260206000209060040201915060068481548110151561342557fe5b90600052602060002090600402019050613441828683876138cd565b95945050505050565b60008080806001861161345c57600080fd5b6001851161346957600080fd5b600680548690811061347757fe5b9060005260206000209060040201935060068681548110151561349657fe5b600091825260209091206002860154600490920201935060c060020a900460ff16156134c157600080fd5b600283015460c060020a900460ff16156134da57600080fd5b6002830154600060b060020a90910461ffff16111561362357600e54600160a060020a0316631d4f3e8b60006040516101e001526040518163ffffffff1660e060020a0281526004016101e060405180830381600087803b151561353d57600080fd5b6102c65a03f1151561354e57600080fd5b5050506040518060e00180519060200180519060200180519060200180519060200180519060200180519060200180519060200180519060200160405250505050505093505050818360010154101561362357600e548354600160a060020a039091169063f43acb529060006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156135f757600080fd5b6102c65a03f1151561360857600080fd5b5050506040518051905060ff16606414151561362357600080fd5b60028301805473ffffffff000000000000000000000000000000001916608060020a63ffffffff88160217905561365984613a70565b61366283613a70565b6000868152600a60205260408082208054600160a060020a031990811690915587835291819020805490921690915560148054600190810190915554600f54600160a060020a03909116916108fc821502919051600060405180830381858888f1935050505015156136d357600080fd5b6136dd6000612654565b9050600160a060020a038116156136fa576136fa81601154613836565b6137046001612654565b9050600160a060020a038116156137215761372181601154613836565b6002830154600060b060020a90910461ffff161115613764576137478360030154612654565b9050600160a060020a038116156137645761376481601054613836565b6000868152600760205260409081902054600280860154908701547f1ee9be14ee585b164bf130cf7a98acb8ec21d44ae3cf64cd149aee4dcc59232193600160a060020a03909316928a928a9267ffffffffffffffff808316939082169261ffff60a060020a9182900481169391909104169051600160a060020a039097168752602087019590955260408087019490945267ffffffffffffffff92831660608701529116608085015261ffff90811660a08501529190911660c083015260e0909101905180910390a1505050505050565b60138054820190819055600160a060020a03301631101561385657600080fd5b600160a060020a03909116600090815260126020526040902080549091019055565b6000818152600760205260408082205484835290822054600160a060020a0391821691168082148061344157506000858152600a6020526040902054600160a060020a03908116908316149250505092915050565b6000818414156138df57506000613a68565b600285015468010000000000000000900463ffffffff1682148061391357506002850154606060020a900463ffffffff1682145b1561392057506000613a68565b600283015468010000000000000000900463ffffffff1684148061395457506002830154606060020a900463ffffffff1684145b1561396157506000613a68565b600283015468010000000000000000900463ffffffff1615806139985750600285015468010000000000000000900463ffffffff16155b156139a557506001613a68565b60028581015490840154680100000000000000009182900463ffffffff908116929091041614806139fa57506002808601549084015468010000000000000000900463ffffffff908116606060020a90920416145b15613a0757506000613a68565b60028086015490840154606060020a900463ffffffff90811668010000000000000000909204161480613a57575060028581015490840154606060020a9182900463ffffffff9081169290910416145b15613a6457506000613a68565b5060015b949350505050565b600554600282015443919060039060a060020a900461ffff16600e8110613a9357fe5b600891828204019190066004029054906101000a900463ffffffff1663ffffffff16811515613abe57fe5b60028401805467ffffffffffffffff1916929091049290920167ffffffffffffffff161790819055600d60a060020a90910461ffff161015613b335760028101805461ffff60a060020a80830482166001019091160275ffff0000000000000000000000000000000000000000199091161790555b50565b6101406040519081016040908152600080835260208301819052908201819052606082018190526080820181905260a0820181905260c0820181905260e08201819052610100820181905261012082015290565b8154818355818115116110395760008381526020902061103991610d029160049182028101918502015b80821115613bf95760008082556001820181905560028201805478ffffffffffffffffffffffffffffffffffffffffffffffffff191690556003820155600401613bb4565b50905600a165627a7a72305820a67edf09562e4df386230d4506c315d9b04b254c0b087c3f5e850710db56e55f0029

Swarm Source

bzzr://a67edf09562e4df386230d4506c315d9b04b254c0b087c3f5e850710db56e55f

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.