ETH Price: $2,066.49 (-5.61%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Attack Castle67832232018-11-27 16:47:452294 days ago1543337265IN
0xC43eAE20...96908dBd6
0 ETH0.0010080440
Attack Castle49553862018-01-23 1:22:502603 days ago1516670570IN
0xC43eAE20...96908dBd6
0 ETH0.000204688
Attack Castle49457672018-01-21 10:09:292604 days ago1516529369IN
0xC43eAE20...96908dBd6
0 ETH0.000002520.1
Attack Castle49442152018-01-21 3:37:142605 days ago1516505834IN
0xC43eAE20...96908dBd6
0 ETH0.000002530.1
Attack Castle49438032018-01-21 1:54:132605 days ago1516499653IN
0xC43eAE20...96908dBd6
0 ETH0.000002520.1
Attack Castle49383802018-01-20 3:47:372606 days ago1516420057IN
0xC43eAE20...96908dBd6
0 ETH0.000050652
Attack Castle49383532018-01-20 3:39:232606 days ago1516419563IN
0xC43eAE20...96908dBd6
0 ETH0.000012660.5
Attack Castle49357242018-01-19 16:40:232606 days ago1516380023IN
0xC43eAE20...96908dBd6
0 ETH0.000002520.1
Attack Castle49343492018-01-19 10:50:502606 days ago1516359050IN
0xC43eAE20...96908dBd6
0 ETH0.000025050.989
Attack Castle49328702018-01-19 4:29:532607 days ago1516336193IN
0xC43eAE20...96908dBd6
0 ETH0.00002521
Attack Castle49287662018-01-18 10:59:402607 days ago1516273180IN
0xC43eAE20...96908dBd6
0 ETH0.000027721.1
Attack Castle49275152018-01-18 5:39:042607 days ago1516253944IN
0xC43eAE20...96908dBd6
0 ETH0.00005042
Attack Castle49274792018-01-18 5:28:572607 days ago1516253337IN
0xC43eAE20...96908dBd6
0 ETH0.000051172
Attack Castle49070632018-01-14 12:37:282611 days ago1515933448IN
0xC43eAE20...96908dBd6
0 ETH0.000101314
Attack Castle49050612018-01-14 4:06:322612 days ago1515902792IN
0xC43eAE20...96908dBd6
0 ETH0.0002520110
Update Maintaini...49045202018-01-14 1:43:252612 days ago1515894205IN
0xC43eAE20...96908dBd6
0 ETH0.0012393945
Attack Castle49016542018-01-13 12:58:332612 days ago1515848313IN
0xC43eAE20...96908dBd6
0 ETH0.000226694
Attack Castle49009302018-01-13 9:56:442612 days ago1515837404IN
0xC43eAE20...96908dBd6
0 ETH0.000366215
Attack Castle49008852018-01-13 9:44:562612 days ago1515836696IN
0xC43eAE20...96908dBd6
0 ETH0.000283365
Create Castle49002852018-01-13 7:05:112612 days ago1515827111IN
0xC43eAE20...96908dBd6
0.08 ETH0.0032075640
Attack Castle49002852018-01-13 7:05:112612 days ago1515827111IN
0xC43eAE20...96908dBd6
0 ETH0.0014661420
Attack Castle49001162018-01-13 6:18:082612 days ago1515824288IN
0xC43eAE20...96908dBd6
0 ETH0.004808886
Attack Castle48999552018-01-13 5:36:362612 days ago1515821796IN
0xC43eAE20...96908dBd6
0 ETH0.004865886
Withdraw Ether48746712018-01-08 13:20:102617 days ago1515417610IN
0xC43eAE20...96908dBd6
0 ETH0.0021212440
Attack Castle48731162018-01-08 6:38:252617 days ago1515393505IN
0xC43eAE20...96908dBd6
0 ETH0.001099615
View all transactions

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer48746712018-01-08 13:20:102617 days ago1515417610
0xC43eAE20...96908dBd6
6.256 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
EtheremonBattle

Compiler Version
v0.4.19+commit.c4cbbb05

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

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

pragma solidity ^0.4.16;

// copyright [email protected]

contract SafeMath {

    /* function assert(bool assertion) internal { */
    /*   if (!assertion) { */
    /*     throw; */
    /*   } */
    /* }      // assert no longer needed once solidity is on 0.4.10 */

    function safeAdd(uint256 x, uint256 y) pure internal returns(uint256) {
      uint256 z = x + y;
      assert((z >= x) && (z >= y));
      return z;
    }

    function safeSubtract(uint256 x, uint256 y) pure internal returns(uint256) {
      assert(x >= y);
      uint256 z = x - y;
      return z;
    }

    function safeMult(uint256 x, uint256 y) pure internal returns(uint256) {
      uint256 z = x * y;
      assert((x == 0)||(z/x == y));
      return z;
    }

}

contract BasicAccessControl {
    address public owner;
    // address[] public moderators;
    uint16 public totalModerators = 0;
    mapping (address => bool) public moderators;
    bool public isMaintaining = true;

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

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

    modifier onlyModerators() {
        require(msg.sender == owner || moderators[msg.sender] == true);
        _;
    }

    modifier isActive {
        require(!isMaintaining);
        _;
    }

    function ChangeOwner(address _newOwner) onlyOwner public {
        if (_newOwner != address(0)) {
            owner = _newOwner;
        }
    }


    function AddModerator(address _newModerator) onlyOwner public {
        if (moderators[_newModerator] == false) {
            moderators[_newModerator] = true;
            totalModerators += 1;
        }
    }
    
    function RemoveModerator(address _oldModerator) onlyOwner public {
        if (moderators[_oldModerator] == true) {
            moderators[_oldModerator] = false;
            totalModerators -= 1;
        }
    }

    function UpdateMaintaining(bool _isMaintaining) onlyOwner public {
        isMaintaining = _isMaintaining;
    }
}

contract EtheremonEnum {

    enum ResultCode {
        SUCCESS,
        ERROR_CLASS_NOT_FOUND,
        ERROR_LOW_BALANCE,
        ERROR_SEND_FAIL,
        ERROR_NOT_TRAINER,
        ERROR_NOT_ENOUGH_MONEY,
        ERROR_INVALID_AMOUNT,
        ERROR_OBJ_NOT_FOUND,
        ERROR_OBJ_INVALID_OWNERSHIP
    }
    
    enum ArrayType {
        CLASS_TYPE,
        STAT_STEP,
        STAT_START,
        STAT_BASE,
        OBJ_SKILL
    }

    enum PropertyType {
        ANCESTOR,
        XFACTOR
    }
    
    enum BattleResult {
        CASTLE_WIN,
        CASTLE_LOSE,
        CASTLE_DESTROYED
    }
    
    enum CacheClassInfoType {
        CLASS_TYPE,
        CLASS_STEP,
        CLASS_ANCESTOR
    }
}

contract EtheremonDataBase is EtheremonEnum, BasicAccessControl, SafeMath {
    
    uint64 public totalMonster;
    uint32 public totalClass;
    
    // read
    function getSizeArrayType(ArrayType _type, uint64 _id) constant public returns(uint);
    function getElementInArrayType(ArrayType _type, uint64 _id, uint _index) constant public returns(uint8);
    function getMonsterClass(uint32 _classId) constant public returns(uint32 classId, uint256 price, uint256 returnPrice, uint32 total, bool catchable);
    function getMonsterObj(uint64 _objId) constant public returns(uint64 objId, uint32 classId, address trainer, uint32 exp, uint32 createIndex, uint32 lastClaimIndex, uint createTime);
    function getMonsterName(uint64 _objId) constant public returns(string name);
    function getExtraBalance(address _trainer) constant public returns(uint256);
    function getMonsterDexSize(address _trainer) constant public returns(uint);
    function getMonsterObjId(address _trainer, uint index) constant public returns(uint64);
    function getExpectedBalance(address _trainer) constant public returns(uint256);
    function getMonsterReturn(uint64 _objId) constant public returns(uint256 current, uint256 total);
}

interface EtheremonTradeInterface {
    function isOnTrading(uint64 _objId) constant external returns(bool);
}

contract EtheremonGateway is EtheremonEnum, BasicAccessControl {
    // using for battle contract later
    function increaseMonsterExp(uint64 _objId, uint32 amount) onlyModerators public;
    function decreaseMonsterExp(uint64 _objId, uint32 amount) onlyModerators public;
    
    // read 
    function isGason(uint64 _objId) constant external returns(bool);
    function getObjBattleInfo(uint64 _objId) constant external returns(uint32 classId, uint32 exp, bool isGason, 
        uint ancestorLength, uint xfactorsLength);
    function getClassPropertySize(uint32 _classId, PropertyType _type) constant external returns(uint);
    function getClassPropertyValue(uint32 _classId, PropertyType _type, uint index) constant external returns(uint32);
}

contract EtheremonCastleContract is EtheremonEnum, BasicAccessControl{

    uint32 public totalCastle = 0;
    uint64 public totalBattle = 0;
    
    function getCastleBasicInfo(address _owner) constant external returns(uint32, uint, uint32);
    function getCastleBasicInfoById(uint32 _castleId) constant external returns(uint, address, uint32);
    function countActiveCastle() constant external returns(uint);
    function getCastleObjInfo(uint32 _castleId) constant external returns(uint64, uint64, uint64, uint64, uint64, uint64);
    function getCastleStats(uint32 _castleId) constant external returns(string, address, uint32, uint32, uint32, uint);
    function isOnCastle(uint32 _castleId, uint64 _objId) constant external returns(bool);
    function getCastleWinLose(uint32 _castleId) constant external returns(uint32, uint32, uint32);
    function getTrainerBrick(address _trainer) constant external returns(uint32);

    function addCastle(address _trainer, string _name, uint64 _a1, uint64 _a2, uint64 _a3, uint64 _s1, uint64 _s2, uint64 _s3, uint32 _brickNumber) 
        onlyModerators external returns(uint32 currentCastleId);
    function renameCastle(uint32 _castleId, string _name) onlyModerators external;
    function removeCastleFromActive(uint32 _castleId) onlyModerators external;
    function deductTrainerBrick(address _trainer, uint32 _deductAmount) onlyModerators external returns(bool);
    
    function addBattleLog(uint32 _castleId, address _attacker, 
        uint8 _ran1, uint8 _ran2, uint8 _ran3, uint8 _result, uint32 _castleExp1, uint32 _castleExp2, uint32 _castleExp3) onlyModerators external returns(uint64);
    function addBattleLogMonsterInfo(uint64 _battleId, uint64 _a1, uint64 _a2, uint64 _a3, uint64 _s1, uint64 _s2, uint64 _s3, uint32 _exp1, uint32 _exp2, uint32 _exp3) onlyModerators external;
}

contract EtheremonBattle is EtheremonEnum, BasicAccessControl, SafeMath {
    uint8 constant public NO_MONSTER = 3;
    uint8 constant public STAT_COUNT = 6;
    uint8 constant public GEN0_NO = 24;
    
    struct MonsterClassAcc {
        uint32 classId;
        uint256 price;
        uint256 returnPrice;
        uint32 total;
        bool catchable;
    }

    struct MonsterObjAcc {
        uint64 monsterId;
        uint32 classId;
        address trainer;
        string name;
        uint32 exp;
        uint32 createIndex;
        uint32 lastClaimIndex;
        uint createTime;
    }
    
    struct BattleMonsterData {
        uint64 a1;
        uint64 a2;
        uint64 a3;
        uint64 s1;
        uint64 s2;
        uint64 s3;
    }

    struct SupporterData {
        uint32 classId1;
        bool isGason1;
        uint8 type1;
        uint32 classId2;
        bool isGason2;
        uint8 type2;
        uint32 classId3;
        bool isGason3;
        uint8 type3;
    }

    struct AttackData {
        uint64 aa;
        SupporterData asup;
        uint16 aAttackSupport;
        uint64 ba;
        SupporterData bsup;
        uint16 bAttackSupport;
        uint8 index;
    }
    
    struct MonsterBattleLog {
        uint64 objId;
        uint32 exp;
    }
    
    struct BattleLogData {
        address castleOwner;
        uint64 battleId;
        uint32 castleId;
        uint32 castleBrickBonus;
        uint castleIndex;
        uint32[6] monsterExp;
        uint8[3] randoms;
        bool win;
        BattleResult result;
    }
    
    struct CacheClassInfo {
        uint8[] types;
        uint8[] steps;
        uint32[] ancestors;
    }

    // event
    event EventCreateCastle(address indexed owner, uint32 castleId);
    event EventAttackCastle(address indexed attacker, uint32 castleId, uint8 result);
    event EventRemoveCastle(uint32 indexed castleId);
    
    // linked smart contract
    address public worldContract;
    address public dataContract;
    address public tradeContract;
    address public castleContract;
    
    // global variable
    mapping(uint8 => uint8) typeAdvantages;
    mapping(uint32 => CacheClassInfo) cacheClasses;
    mapping(uint8 => uint32) levelExps;
    uint8 public ancestorBuffPercentage = 10;
    uint8 public gasonBuffPercentage = 10;
    uint8 public typeBuffPercentage = 20;
    uint8 public maxLevel = 100;
    uint16 public maxActiveCastle = 30;
    uint8 public maxRandomRound = 4;
    
    uint8 public winBrickReturn = 8;
    uint32 public castleMinBrick = 5;
    uint256 public brickPrice = 0.008 ether;
    uint8 public minHpDeducted = 10;
    
    uint256 public totalEarn = 0;
    uint256 public totalWithdraw = 0;
    
    address private lastAttacker = address(0x0);
    
    // modifier
    modifier requireDataContract {
        require(dataContract != address(0));
        _;
    }
    
    modifier requireTradeContract {
        require(tradeContract != address(0));
        _;
    }
    
    modifier requireCastleContract {
        require(castleContract != address(0));
        _;
    }
    
    modifier requireWorldContract {
        require(worldContract != address(0));
        _;
    }


    function EtheremonBattle(address _dataContract, address _worldContract, address _tradeContract, address _castleContract) public {
        dataContract = _dataContract;
        worldContract = _worldContract;
        tradeContract = _tradeContract;
        castleContract = _castleContract;
    }
    
     // admin & moderators
    function setTypeAdvantages() onlyModerators external {
        typeAdvantages[1] = 14;
        typeAdvantages[2] = 16;
        typeAdvantages[3] = 8;
        typeAdvantages[4] = 9;
        typeAdvantages[5] = 2;
        typeAdvantages[6] = 11;
        typeAdvantages[7] = 3;
        typeAdvantages[8] = 5;
        typeAdvantages[9] = 15;
        typeAdvantages[11] = 18;
        // skipp 10
        typeAdvantages[12] = 7;
        typeAdvantages[13] = 6;
        typeAdvantages[14] = 17;
        typeAdvantages[15] = 13;
        typeAdvantages[16] = 12;
        typeAdvantages[17] = 1;
        typeAdvantages[18] = 4;
    }
    
    function setTypeAdvantage(uint8 _type1, uint8 _type2) onlyModerators external {
        typeAdvantages[_type1] = _type2;
    }
    
    function setCacheClassInfo(uint32 _classId) onlyModerators requireDataContract requireWorldContract public {
        EtheremonDataBase data = EtheremonDataBase(dataContract);
         EtheremonGateway gateway = EtheremonGateway(worldContract);
        uint i = 0;
        CacheClassInfo storage classInfo = cacheClasses[_classId];

        // add type
        i = data.getSizeArrayType(ArrayType.CLASS_TYPE, uint64(_classId));
        uint8[] memory aTypes = new uint8[](i);
        for(; i > 0 ; i--) {
            aTypes[i-1] = data.getElementInArrayType(ArrayType.CLASS_TYPE, uint64(_classId), i-1);
        }
        classInfo.types = aTypes;

        // add steps
        i = data.getSizeArrayType(ArrayType.STAT_STEP, uint64(_classId));
        uint8[] memory steps = new uint8[](i);
        for(; i > 0 ; i--) {
            steps[i-1] = data.getElementInArrayType(ArrayType.STAT_STEP, uint64(_classId), i-1);
        }
        classInfo.steps = steps;
        
        // add ancestor
        i = gateway.getClassPropertySize(_classId, PropertyType.ANCESTOR);
        uint32[] memory ancestors = new uint32[](i);
        for(; i > 0 ; i--) {
            ancestors[i-1] = gateway.getClassPropertyValue(_classId, PropertyType.ANCESTOR, i-1);
        }
        classInfo.ancestors = ancestors;
    }
     
    function withdrawEther(address _sendTo, uint _amount) onlyModerators external {
        if (_amount > this.balance) {
            revert();
        }
        uint256 validAmount = safeSubtract(totalEarn, totalWithdraw);
        if (_amount > validAmount) {
            revert();
        }
        totalWithdraw += _amount;
        _sendTo.transfer(_amount);
    }
    
    function setContract(address _dataContract, address _worldContract, address _tradeContract, address _castleContract) onlyModerators external {
        dataContract = _dataContract;
        worldContract = _worldContract;
        tradeContract = _tradeContract;
        castleContract = _castleContract;
    }
    
    function setConfig(uint8 _ancestorBuffPercentage, uint8 _gasonBuffPercentage, uint8 _typeBuffPercentage, uint32 _castleMinBrick, 
        uint8 _maxLevel, uint16 _maxActiveCastle, uint8 _maxRandomRound, uint8 _minHpDeducted) onlyModerators external{
        ancestorBuffPercentage = _ancestorBuffPercentage;
        gasonBuffPercentage = _gasonBuffPercentage;
        typeBuffPercentage = _typeBuffPercentage;
        castleMinBrick = _castleMinBrick;
        maxLevel = _maxLevel;
        maxActiveCastle = _maxActiveCastle;
        maxRandomRound = _maxRandomRound;
        minHpDeducted = _minHpDeducted;
    }
    
    function genLevelExp() onlyModerators external {
        uint8 level = 1;
        uint32 requirement = 100;
        uint32 sum = requirement;
        while(level <= 100) {
            levelExps[level] = sum;
            level += 1;
            requirement = (requirement * 11) / 10 + 5;
            sum += requirement;
        }
    }
    
    // public 
    function getCacheClassSize(uint32 _classId) constant public returns(uint, uint, uint) {
        CacheClassInfo storage classInfo = cacheClasses[_classId];
        return (classInfo.types.length, classInfo.steps.length, classInfo.ancestors.length);
    }
    
    function getRandom(uint8 maxRan, uint8 index, address priAddress) constant public returns(uint8) {
        uint256 genNum = uint256(block.blockhash(block.number-1)) + uint256(priAddress);
        for (uint8 i = 0; i < index && i < 6; i ++) {
            genNum /= 256;
        }
        return uint8(genNum % maxRan);
    }
    
    function getLevel(uint32 exp) view public returns (uint8) {
        uint8 minIndex = 1;
        uint8 maxIndex = 100;
        uint8 currentIndex;
     
        while (minIndex < maxIndex) {
            currentIndex = (minIndex + maxIndex) / 2;
            while (minIndex < maxIndex) {
                currentIndex = (minIndex + maxIndex) / 2;
                if (exp < levelExps[currentIndex])
                    maxIndex = currentIndex;
                else
                    minIndex = currentIndex + 1;
            }
        }
        return minIndex;
    }
    
    function getGainExp(uint32 _exp1, uint32 _exp2, bool _win) view public returns(uint32){
        uint8 level = getLevel(_exp2);
        uint8 level2 = getLevel(_exp1);
        uint8 halfLevel1 = level;
        if (level > level2 + 3) {
            halfLevel1 = (level2 + 3) / 2;
        } else {
            halfLevel1 = level / 2;
        }
        uint32 gainExp = 1;
        uint256 rate = (21 ** uint256(halfLevel1)) * 1000 / (20 ** uint256(halfLevel1));
        rate = rate * rate;
        if ((level > level2 + 3 && level2 + 3 > 2 * halfLevel1) || (level <= level2 + 3 && level > 2 * halfLevel1)) rate = rate * 21 / 20;
        if (_win) {
            gainExp = uint32(30 * rate / 1000000);
        } else {
            gainExp = uint32(10 * rate / 1000000);
        }
        
        if (level2 >= level + 5) {
            gainExp /= uint32(2) ** ((level2 - level) / 5);
        }
        return gainExp;
    }
    
    function getMonsterLevel(uint64 _objId) constant external returns(uint32, uint8) {
        EtheremonDataBase data = EtheremonDataBase(dataContract);
        MonsterObjAcc memory obj;
        uint32 _ = 0;
        (obj.monsterId, obj.classId, obj.trainer, obj.exp, _, _, obj.createTime) = data.getMonsterObj(_objId);
     
        return (obj.exp, getLevel(obj.exp));
    }
    
    function getMonsterCP(uint64 _objId) constant external returns(uint64) {
        uint16[6] memory stats;
        uint32 classId = 0;
        uint32 exp = 0;
        (classId, exp, stats) = getCurrentStats(_objId);
        
        uint256 total;
        for(uint i=0; i < STAT_COUNT; i+=1) {
            total += stats[i];
        }
        return uint64(total/STAT_COUNT);
    }
    
    function isOnBattle(uint64 _objId) constant external returns(bool) {
        EtheremonDataBase data = EtheremonDataBase(dataContract);
        EtheremonCastleContract castle = EtheremonCastleContract(castleContract);
        uint32 castleId;
        uint castleIndex = 0;
        uint256 price = 0;
        MonsterObjAcc memory obj;
        (obj.monsterId, obj.classId, obj.trainer, obj.exp, obj.createIndex, obj.lastClaimIndex, obj.createTime) = data.getMonsterObj(_objId);
        (castleId, castleIndex, price) = castle.getCastleBasicInfo(obj.trainer);
        if (castleId > 0 && castleIndex > 0)
            return castle.isOnCastle(castleId, _objId);
        return false;
    }
    
    function isValidOwner(uint64 _objId, address _owner) constant public returns(bool) {
        EtheremonDataBase data = EtheremonDataBase(dataContract);
        MonsterObjAcc memory obj;
        (obj.monsterId, obj.classId, obj.trainer, obj.exp, obj.createIndex, obj.lastClaimIndex, obj.createTime) = data.getMonsterObj(_objId);
        return (obj.trainer == _owner);
    }
    
    function getObjExp(uint64 _objId) constant public returns(uint32, uint32) {
        EtheremonDataBase data = EtheremonDataBase(dataContract);
        MonsterObjAcc memory obj;
        uint32 _ = 0;
        (_objId, obj.classId, obj.trainer, obj.exp, _, _, obj.createTime) = data.getMonsterObj(_objId);
        return (obj.classId, obj.exp);
    }
    
    function getCurrentStats(uint64 _objId) constant public returns(uint32, uint32, uint16[6]){
        EtheremonDataBase data = EtheremonDataBase(dataContract);
        uint16[6] memory stats;
        uint32 classId;
        uint32 exp;
        (classId, exp) = getObjExp(_objId);
        if (classId == 0)
            return (classId, exp, stats);
        
        uint i = 0;
        uint8 level = getLevel(exp);
        for(i=0; i < STAT_COUNT; i+=1) {
            stats[i] += data.getElementInArrayType(ArrayType.STAT_BASE, _objId, i);
        }
        for(i=0; i < cacheClasses[classId].steps.length; i++) {
            stats[i] += uint16(safeMult(cacheClasses[classId].steps[i], level*3));
        }
        return (classId, exp, stats);
    }
    
    function safeDeduct(uint16 a, uint16 b) pure private returns(uint16){
        if (a > b) {
            return a - b;
        }
        return 0;
    }
    
    function calHpDeducted(uint16 _attack, uint16 _specialAttack, uint16 _defense, uint16 _specialDefense, bool _lucky) view public returns(uint16){
        if (_lucky) {
            _attack = _attack * 13 / 10;
            _specialAttack = _specialAttack * 13 / 10;
        }
        uint16 hpDeducted = safeDeduct(_attack, _defense * 3 /4);
        uint16 hpSpecialDeducted = safeDeduct(_specialAttack, _specialDefense* 3 / 4);
        if (hpDeducted < minHpDeducted && hpSpecialDeducted < minHpDeducted)
            return minHpDeducted;
        if (hpDeducted > hpSpecialDeducted)
            return hpDeducted;
        return hpSpecialDeducted;
    }
    
    function getAncestorBuff(uint32 _classId, SupporterData _support) constant private returns(uint16){
        // check ancestors
        uint i =0;
        uint8 countEffect = 0;
        uint ancestorSize = cacheClasses[_classId].ancestors.length;
        if (ancestorSize > 0) {
            uint32 ancestorClass = 0;
            for (i=0; i < ancestorSize; i ++) {
                ancestorClass = cacheClasses[_classId].ancestors[i];
                if (ancestorClass == _support.classId1 || ancestorClass == _support.classId2 || ancestorClass == _support.classId3) {
                    countEffect += 1;
                }
            }
        }
        return countEffect * ancestorBuffPercentage;
    }
    
    function getGasonSupport(uint32 _classId, SupporterData _sup) constant private returns(uint16 defenseSupport) {
        uint i = 0;
        uint8 classType = 0;
        for (i = 0; i < cacheClasses[_classId].types.length; i++) {
            classType = cacheClasses[_classId].types[i];
             if (_sup.isGason1) {
                if (classType == _sup.type1) {
                    defenseSupport += 1;
                    continue;
                }
            }
            if (_sup.isGason2) {
                if (classType == _sup.type2) {
                    defenseSupport += 1;
                    continue;
                }
            }
            if (_sup.isGason3) {
                if (classType == _sup.type3) {
                    defenseSupport += 1;
                    continue;
                }
            }
            defenseSupport = defenseSupport * gasonBuffPercentage;
        }
    }
    
    function getTypeSupport(uint32 _aClassId, uint32 _bClassId) constant private returns (uint16 aAttackSupport, uint16 bAttackSupport) {
        // check types 
        bool aHasAdvantage;
        bool bHasAdvantage;
        for (uint i = 0; i < cacheClasses[_aClassId].types.length; i++) {
            for (uint j = 0; j < cacheClasses[_bClassId].types.length; j++) {
                if (typeAdvantages[cacheClasses[_aClassId].types[i]] == cacheClasses[_bClassId].types[j]) {
                    aHasAdvantage = true;
                }
                if (typeAdvantages[cacheClasses[_bClassId].types[j]] == cacheClasses[_aClassId].types[i]) {
                    bHasAdvantage = true;
                }
            }
        }
        
        if (aHasAdvantage)
            aAttackSupport += typeBuffPercentage;
        if (bHasAdvantage)
            bAttackSupport += typeBuffPercentage;
    }
    
    function calculateBattleStats(AttackData att) constant private returns(uint32 aExp, uint16[6] aStats, uint32 bExp, uint16[6] bStats) {
        uint32 aClassId = 0;
        (aClassId, aExp, aStats) = getCurrentStats(att.aa);
        uint32 bClassId = 0;
        (bClassId, bExp, bStats) = getCurrentStats(att.ba);
        
        // check gasonsupport
        (att.aAttackSupport, att.bAttackSupport) = getTypeSupport(aClassId, bClassId);
        att.aAttackSupport += getAncestorBuff(aClassId, att.asup);
        att.bAttackSupport += getAncestorBuff(bClassId, att.bsup);
        
        uint16 aDefenseBuff = getGasonSupport(aClassId, att.asup);
        uint16 bDefenseBuff = getGasonSupport(bClassId, att.bsup);
        
        // add attack
        aStats[1] += aStats[1] * att.aAttackSupport;
        aStats[3] += aStats[3] * att.aAttackSupport;
        bStats[1] += bStats[1] * att.bAttackSupport;
        bStats[3] += bStats[3] * att.bAttackSupport;
        
        // add offense
        aStats[2] += aStats[2] * aDefenseBuff;
        aStats[4] += aStats[4] * aDefenseBuff;
        bStats[2] += bStats[2] * bDefenseBuff;
        bStats[4] += bStats[4] * bDefenseBuff;
        
    }
    
    function attack(AttackData att) constant private returns(uint32 aExp, uint32 bExp, uint8 ran, bool win) {
        uint16[6] memory aStats;
        uint16[6] memory bStats;
        (aExp, aStats, bExp, bStats) = calculateBattleStats(att);
        
        ran = getRandom(maxRandomRound+2, att.index, lastAttacker);
        uint16 round = 0;
        while (round < maxRandomRound && aStats[0] > 0 && bStats[0] > 0) {
            if (aStats[5] > bStats[5]) {
                if (round % 2 == 0) {
                    // a attack 
                    bStats[0] = safeDeduct(bStats[0], calHpDeducted(aStats[1], aStats[3], bStats[2], bStats[4], round==ran));
                } else {
                    aStats[0] = safeDeduct(aStats[0], calHpDeducted(bStats[1], bStats[3], aStats[2], aStats[4], round==ran));
                }
                
            } else {
                if (round % 2 != 0) {
                    bStats[0] = safeDeduct(bStats[0], calHpDeducted(aStats[1], aStats[3], bStats[2], bStats[4], round==ran));
                } else {
                    aStats[0] = safeDeduct(aStats[0], calHpDeducted(bStats[1], bStats[3], aStats[2], aStats[4], round==ran));
                }
            }
            round+= 1;
        }
        
        win = aStats[0] >= bStats[0];
    }
    
    function destroyCastle(uint32 _castleId, bool win) requireCastleContract private returns(uint32){
        // if castle win, ignore
        if (win)
            return 0;
        EtheremonCastleContract castle = EtheremonCastleContract(castleContract);
        uint32 totalWin;
        uint32 totalLose;
        uint32 brickNumber;
        (totalWin, totalLose, brickNumber) = castle.getCastleWinLose(_castleId);
        if (brickNumber + totalWin/winBrickReturn <= totalLose + 1) {
            castle.removeCastleFromActive(_castleId);
            return brickNumber;
        }
        return 0;
    }
    
    function hasValidParam(address trainer, uint64 _a1, uint64 _a2, uint64 _a3, uint64 _s1, uint64 _s2, uint64 _s3) constant public returns(bool) {
        if (_a1 == 0 || _a2 == 0 || _a3 == 0)
            return false;
        if (_a1 == _a2 || _a1 == _a3 || _a1 == _s1 || _a1 == _s2 || _a1 == _s3)
            return false;
        if (_a2 == _a3 || _a2 == _s1 || _a2 == _s2 || _a2 == _s3)
            return false;
        if (_a3 == _s1 || _a3 == _s2 || _a3 == _s3)
            return false;
        if (_s1 > 0 && (_s1 == _s2 || _s1 == _s3))
            return false;
        if (_s2 > 0 && (_s2 == _s3))
            return false;
        
        if (!isValidOwner(_a1, trainer) || !isValidOwner(_a2, trainer) || !isValidOwner(_a3, trainer))
            return false;
        if (_s1 > 0 && !isValidOwner(_s1, trainer))
            return false;
        if (_s2 > 0 && !isValidOwner(_s2, trainer))
            return false;
        if (_s3 > 0 && !isValidOwner(_s3, trainer))
            return false;
        return true;
    }
    
    // public
    function createCastle(string _name, uint64 _a1, uint64 _a2, uint64 _a3, uint64 _s1, uint64 _s2, uint64 _s3) isActive requireDataContract 
        requireTradeContract requireCastleContract payable external {
        
        if (!hasValidParam(msg.sender, _a1, _a2, _a3, _s1, _s2, _s3))
            revert();
        
        EtheremonTradeInterface trade = EtheremonTradeInterface(tradeContract);
        if (trade.isOnTrading(_a1) || trade.isOnTrading(_a2) || trade.isOnTrading(_a3) || 
            trade.isOnTrading(_s1) || trade.isOnTrading(_s2) || trade.isOnTrading(_s3))
            revert();
        
        EtheremonCastleContract castle = EtheremonCastleContract(castleContract);
        uint32 castleId;
        uint castleIndex = 0;
        uint32 numberBrick = 0;
        (castleId, castleIndex, numberBrick) = castle.getCastleBasicInfo(msg.sender);
        if (castleId > 0 || castleIndex > 0)
            revert();

        if (castle.countActiveCastle() >= uint(maxActiveCastle))
            revert();
        numberBrick = uint32(msg.value / brickPrice) + castle.getTrainerBrick(msg.sender);
        if (numberBrick < castleMinBrick) {
            revert();
        }
        castle.deductTrainerBrick(msg.sender, castle.getTrainerBrick(msg.sender));
        totalEarn += msg.value;
        castleId = castle.addCastle(msg.sender, _name, _a1, _a2, _a3, _s1, _s2, _s3, numberBrick);
        EventCreateCastle(msg.sender, castleId);
    }
    
    function renameCastle(uint32 _castleId, string _name) isActive requireCastleContract external {
        EtheremonCastleContract castle = EtheremonCastleContract(castleContract);
        uint index;
        address owner;
        uint256 price;
        (index, owner, price) = castle.getCastleBasicInfoById(_castleId);
        if (owner != msg.sender)
            revert();
        castle.renameCastle(_castleId, _name);
    }
    
    function removeCastle(uint32 _castleId) isActive requireCastleContract external {
        EtheremonCastleContract castle = EtheremonCastleContract(castleContract);
        uint index;
        address owner;
        uint256 price;
        (index, owner, price) = castle.getCastleBasicInfoById(_castleId);
        if (owner != msg.sender)
            revert();
        if (index > 0) {
            castle.removeCastleFromActive(_castleId);
        }
        EventRemoveCastle(_castleId);
    }
    
    function getSupporterInfo(uint64 s1, uint64 s2, uint64 s3) constant public returns(SupporterData sData) {
        uint temp;
        uint32 __;
        EtheremonGateway gateway = EtheremonGateway(worldContract);
        if (s1 > 0)
            (sData.classId1, __, sData.isGason1, temp, temp) = gateway.getObjBattleInfo(s1);
        if (s2 > 0)
            (sData.classId2, __, sData.isGason2, temp, temp) = gateway.getObjBattleInfo(s2);
        if (s3 > 0)
            (sData.classId3, __, sData.isGason3, temp, temp) = gateway.getObjBattleInfo(s3);

        EtheremonDataBase data = EtheremonDataBase(dataContract);
        if (sData.isGason1) {
            sData.type1 = data.getElementInArrayType(ArrayType.CLASS_TYPE, uint64(sData.classId1), 0);
        }
        
        if (sData.isGason2) {
            sData.type2 = data.getElementInArrayType(ArrayType.CLASS_TYPE, uint64(sData.classId2), 0);
        }
        
        if (sData.isGason3) {
            sData.type3 = data.getElementInArrayType(ArrayType.CLASS_TYPE, uint64(sData.classId3), 0);
        }
    }
    
    function attackCastle(uint32 _castleId, uint64 _aa1, uint64 _aa2, uint64 _aa3, uint64 _as1, uint64 _as2, uint64 _as3) isActive requireDataContract 
        requireTradeContract requireCastleContract external {
        if (!hasValidParam(msg.sender, _aa1, _aa2, _aa3, _as1, _as2, _as3))
            revert();
        
        EtheremonCastleContract castle = EtheremonCastleContract(castleContract);
        BattleLogData memory log;
        (log.castleIndex, log.castleOwner, log.castleBrickBonus) = castle.getCastleBasicInfoById(_castleId);
        if (log.castleIndex == 0 || log.castleOwner == msg.sender)
            revert();
        
        EtheremonGateway gateway = EtheremonGateway(worldContract);
        BattleMonsterData memory b;
        (b.a1, b.a2, b.a3, b.s1, b.s2, b.s3) = castle.getCastleObjInfo(_castleId);
        lastAttacker = msg.sender;

        // init data
        uint8 countWin = 0;
        AttackData memory att;
        att.asup = getSupporterInfo(b.s1, b.s2, b.s3);
        att.bsup = getSupporterInfo(_as1, _as2, _as3);
        
        att.index = 0;
        att.aa = b.a1;
        att.ba = _aa1;
        (log.monsterExp[0], log.monsterExp[3], log.randoms[0], log.win) = attack(att);
        gateway.increaseMonsterExp(att.aa, getGainExp(log.monsterExp[0], log.monsterExp[3], log.win));
        gateway.increaseMonsterExp(att.ba, getGainExp(log.monsterExp[3], log.monsterExp[0], !log.win));
        if (log.win)
            countWin += 1;
        
        
        att.index = 1;
        att.aa = b.a2;
        att.ba = _aa2;
        (log.monsterExp[1], log.monsterExp[4], log.randoms[1], log.win) = attack(att);
        gateway.increaseMonsterExp(att.aa, getGainExp(log.monsterExp[1], log.monsterExp[4], log.win));
        gateway.increaseMonsterExp(att.ba, getGainExp(log.monsterExp[4], log.monsterExp[1], !log.win));
        if (log.win)
            countWin += 1;   

        att.index = 2;
        att.aa = b.a3;
        att.ba = _aa3;
        (log.monsterExp[2], log.monsterExp[5], log.randoms[2], log.win) = attack(att);
        gateway.increaseMonsterExp(att.aa, getGainExp(log.monsterExp[2], log.monsterExp[5], log.win));
        gateway.increaseMonsterExp(att.ba, getGainExp(log.monsterExp[5], log.monsterExp[2], !log.win));
        if (log.win)
            countWin += 1; 
        
        
        log.castleBrickBonus = destroyCastle(_castleId, countWin>1);
        if (countWin>1) {
            log.result = BattleResult.CASTLE_WIN;
        } else {
            if (log.castleBrickBonus > 0) {
                log.result = BattleResult.CASTLE_DESTROYED;
            } else {
                log.result = BattleResult.CASTLE_LOSE;
            }
        }
        
        log.battleId = castle.addBattleLog(_castleId, msg.sender, log.randoms[0], log.randoms[1], log.randoms[2], 
            uint8(log.result), log.monsterExp[0], log.monsterExp[1], log.monsterExp[2]);
        
        castle.addBattleLogMonsterInfo(log.battleId, _aa1, _aa2, _aa3, _as1, _as2, _as3, log.monsterExp[3], log.monsterExp[4], log.monsterExp[5]);
    
        EventAttackCastle(msg.sender, _castleId, uint8(log.result));
    }
    
}

Contract Security Audit

Contract ABI

API
[{"constant":true,"inputs":[{"name":"_objId","type":"uint64"}],"name":"getMonsterCP","outputs":[{"name":"","type":"uint64"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"dataContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"moderators","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"worldContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"trainer","type":"address"},{"name":"_a1","type":"uint64"},{"name":"_a2","type":"uint64"},{"name":"_a3","type":"uint64"},{"name":"_s1","type":"uint64"},{"name":"_s2","type":"uint64"},{"name":"_s3","type":"uint64"}],"name":"hasValidParam","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_objId","type":"uint64"}],"name":"getObjExp","outputs":[{"name":"","type":"uint32"},{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_attack","type":"uint16"},{"name":"_specialAttack","type":"uint16"},{"name":"_defense","type":"uint16"},{"name":"_specialDefense","type":"uint16"},{"name":"_lucky","type":"bool"}],"name":"calHpDeducted","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_type1","type":"uint8"},{"name":"_type2","type":"uint8"}],"name":"setTypeAdvantage","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"genLevelExp","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"setTypeAdvantages","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_objId","type":"uint64"}],"name":"isOnBattle","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"maxRan","type":"uint8"},{"name":"index","type":"uint8"},{"name":"priAddress","type":"address"}],"name":"getRandom","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_castleId","type":"uint32"},{"name":"_name","type":"string"}],"name":"renameCastle","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalWithdraw","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_castleId","type":"uint32"},{"name":"_aa1","type":"uint64"},{"name":"_aa2","type":"uint64"},{"name":"_aa3","type":"uint64"},{"name":"_as1","type":"uint64"},{"name":"_as2","type":"uint64"},{"name":"_as3","type":"uint64"}],"name":"attackCastle","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_isMaintaining","type":"bool"}],"name":"UpdateMaintaining","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"castleMinBrick","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"string"},{"name":"_a1","type":"uint64"},{"name":"_a2","type":"uint64"},{"name":"_a3","type":"uint64"},{"name":"_s1","type":"uint64"},{"name":"_s2","type":"uint64"},{"name":"_s3","type":"uint64"}],"name":"createCastle","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"totalModerators","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_classId","type":"uint32"}],"name":"getCacheClassSize","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_sendTo","type":"address"},{"name":"_amount","type":"uint256"}],"name":"withdrawEther","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"s1","type":"uint64"},{"name":"s2","type":"uint64"},{"name":"s3","type":"uint64"}],"name":"getSupporterInfo","outputs":[{"components":[{"name":"classId1","type":"uint32"},{"name":"isGason1","type":"bool"},{"name":"type1","type":"uint8"},{"name":"classId2","type":"uint32"},{"name":"isGason2","type":"bool"},{"name":"type2","type":"uint8"},{"name":"classId3","type":"uint32"},{"name":"isGason3","type":"bool"},{"name":"type3","type":"uint8"}],"name":"sData","type":"tuple"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_dataContract","type":"address"},{"name":"_worldContract","type":"address"},{"name":"_tradeContract","type":"address"},{"name":"_castleContract","type":"address"}],"name":"setContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"winBrickReturn","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newModerator","type":"address"}],"name":"AddModerator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_ancestorBuffPercentage","type":"uint8"},{"name":"_gasonBuffPercentage","type":"uint8"},{"name":"_typeBuffPercentage","type":"uint8"},{"name":"_castleMinBrick","type":"uint32"},{"name":"_maxLevel","type":"uint8"},{"name":"_maxActiveCastle","type":"uint16"},{"name":"_maxRandomRound","type":"uint8"},{"name":"_minHpDeducted","type":"uint8"}],"name":"setConfig","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"GEN0_NO","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"NO_MONSTER","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_objId","type":"uint64"}],"name":"getCurrentStats","outputs":[{"name":"","type":"uint32"},{"name":"","type":"uint32"},{"name":"","type":"uint16[6]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ancestorBuffPercentage","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"typeBuffPercentage","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_classId","type":"uint32"}],"name":"setCacheClassInfo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"maxActiveCastle","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"exp","type":"uint32"}],"name":"getLevel","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_oldModerator","type":"address"}],"name":"RemoveModerator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_exp1","type":"uint32"},{"name":"_exp2","type":"uint32"},{"name":"_win","type":"bool"}],"name":"getGainExp","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maxLevel","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"minHpDeducted","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_objId","type":"uint64"}],"name":"getMonsterLevel","outputs":[{"name":"","type":"uint32"},{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_castleId","type":"uint32"}],"name":"removeCastle","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"gasonBuffPercentage","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"brickPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"STAT_COUNT","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_objId","type":"uint64"},{"name":"_owner","type":"address"}],"name":"isValidOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalEarn","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"castleContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maxRandomRound","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isMaintaining","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"ChangeOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"tradeContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_dataContract","type":"address"},{"name":"_worldContract","type":"address"},{"name":"_tradeContract","type":"address"},{"name":"_castleContract","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":false,"name":"castleId","type":"uint32"}],"name":"EventCreateCastle","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"attacker","type":"address"},{"indexed":false,"name":"castleId","type":"uint32"},{"indexed":false,"name":"result","type":"uint8"}],"name":"EventAttackCastle","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"castleId","type":"uint32"}],"name":"EventRemoveCastle","type":"event"}]

606060405260008060146101000a81548161ffff021916908361ffff1602179055506001600260006101000a81548160ff021916908315150217905550600a600960006101000a81548160ff021916908360ff160217905550600a600960016101000a81548160ff021916908360ff1602179055506014600960026101000a81548160ff021916908360ff1602179055506064600960036101000a81548160ff021916908360ff160217905550601e600960046101000a81548161ffff021916908361ffff1602179055506004600960066101000a81548160ff021916908360ff1602179055506008600960076101000a81548160ff021916908360ff1602179055506005600960086101000a81548163ffffffff021916908363ffffffff160217905550661c6bf526340000600a55600a600b60006101000a81548160ff021916908360ff1602179055506000600c556000600d556000600e60006101000a815481600160a060020a030219169083600160a060020a03160217905550341561018857600080fd5b604051608080614d0d8339810160405280805191906020018051919060200180519190602001805160008054600160a060020a03338116600160a060020a0319928316179092556003805498831698821698909817909755600280549682166101000261010060a860020a03199097169690961790955560048054948616948716949094179093555050600580549290911691909216179055614add806102306000396000f30060606040526004361061024d5763ffffffff60e060020a6000350416630672859b81146102525780630d6688181461028d57806314d0f1ba146102bc57806318758480146102ef5780631bab0908146103025780631cd982351461034b57806320046e911461038b5780633171cec4146103d357806333ced321146103f457806333d24dc41461040757806335f097f31461041a5780633a34f09a1461043957806343b37b451461047a578063455fd623146104a257806347cf8971146104c757806348ef5aa81461050d5780634a3d3c09146105255780634aaff006146105515780634efb023e14610590578063500e4297146105a3578063522f6815146105e357806354f0bde714610605578063615dbebb146106305780636b2a2691146106615780636c81fd6d14610674578063720ffedb1461069357806373d65c00146106dc578063775e38f7146106ef57806384be816c1461070257806385bbb53a1461076f578063891fe103146107825780638da5cb5b146107955780638fd8f783146107a8578063a0c66b43146107c4578063b2cad9b7146107d7578063b85d6275146107f3578063be44bd2114610812578063cc06c35914610839578063cfa830791461084c578063d2169d2f1461085f578063d4c15161146108a0578063d5425571146108bc578063d8e20e2c146108cf578063d98e14bd146108e2578063da5671ad146108f5578063dffd722f14610920578063eb83f01514610933578063ebfa3c1b14610946578063ee4e441614610959578063f28532921461096c578063ffa640d81461098b575b600080fd5b341561025d57600080fd5b6102716001604060020a036004351661099e565b6040516001604060020a03909116815260200160405180910390f35b341561029857600080fd5b6102a06109fb565b604051600160a060020a03909116815260200160405180910390f35b34156102c757600080fd5b6102db600160a060020a0360043516610a0a565b604051901515815260200160405180910390f35b34156102fa57600080fd5b6102a0610a1f565b341561030d57600080fd5b6102db600160a060020a03600435166001604060020a0360243581169060443581169060643581169060843581169060a43581169060c43516610a33565b341561035657600080fd5b61036a6001604060020a0360043516610d2e565b60405163ffffffff9283168152911660208201526040908101905180910390f35b341561039657600080fd5b6103bc61ffff600435811690602435811690604435811690606435166084351515610e1b565b60405161ffff909116815260200160405180910390f35b34156103de57600080fd5b6103f260ff60043581169060243516610ec7565b005b34156103ff57600080fd5b6103f2610f2f565b341561041257600080fd5b6103f2610fdd565b341561042557600080fd5b6102db6001604060020a0360043516611306565b341561044457600080fd5b61046460ff60043581169060243516600160a060020a0360443516611538565b60405160ff909116815260200160405180910390f35b341561048557600080fd5b6103f26004803563ffffffff169060248035908101910135611592565b34156104ad57600080fd5b6104b56116f8565b60405190815260200160405180910390f35b34156104d257600080fd5b6103f263ffffffff600435166001604060020a0360243581169060443581169060643581169060843581169060a43581169060c435166116fe565b341561051857600080fd5b6103f260043515156120a7565b341561053057600080fd5b6105386120d5565b60405163ffffffff909116815260200160405180910390f35b6103f260246004803582810192910135906001604060020a03903581169060443581169060643581169060843581169060a43581169060c435166120ed565b341561059b57600080fd5b6103bc612847565b34156105ae57600080fd5b6105bf63ffffffff60043516612869565b60405180848152602001838152602001828152602001935050505060405180910390f35b34156105ee57600080fd5b6103f2600160a060020a036004351660243561288e565b341561061057600080fd5b6104b56001604060020a0360043581169060243581169060443516612942565b341561063b57600080fd5b6103f2600160a060020a0360043581169060243581169060443581169060643516612dc1565b341561066c57600080fd5b610464612e7f565b341561067f57600080fd5b6103f2600160a060020a0360043516612e93565b341561069e57600080fd5b6103f260ff60043581169060243581169060443581169063ffffffff606435169060843581169061ffff60a435169060c43581169060e43516612f3d565b34156106e757600080fd5b610464613045565b34156106fa57600080fd5b61046461304a565b341561070d57600080fd5b6107216001604060020a036004351661304f565b60405163ffffffff808516825283166020820152604081018260c080838360005b8381101561075a578082015183820152602001610742565b50505050905001935050505060405180910390f35b341561077a57600080fd5b610464613239565b341561078d57600080fd5b610464613242565b34156107a057600080fd5b6102a0613251565b34156107b357600080fd5b6103f263ffffffff60043516613260565b34156107cf57600080fd5b6103bc613821565b34156107e257600080fd5b61046463ffffffff60043516613833565b34156107fe57600080fd5b6103f2600160a060020a03600435166138b4565b341561081d57600080fd5b61053863ffffffff60043581169060243516604435151561395e565b341561084457600080fd5b610464613a90565b341561085757600080fd5b610464613aa0565b341561086a57600080fd5b61087e6001604060020a0360043516613aa9565b60405163ffffffff909216825260ff1660208201526040908101905180910390f35b34156108ab57600080fd5b6103f263ffffffff60043516613ba6565b34156108c757600080fd5b610464613d19565b34156108da57600080fd5b6104b5613d27565b34156108ed57600080fd5b610464613d2d565b341561090057600080fd5b6102db6001604060020a0360043516600160a060020a0360243516613d32565b341561092b57600080fd5b6104b5613e39565b341561093e57600080fd5b6102a0613e3f565b341561095157600080fd5b610464613e4e565b341561096457600080fd5b6102db613e61565b341561097757600080fd5b6103f2600160a060020a0360043516613e6a565b341561099657600080fd5b6102a0613ec1565b60006109a8614771565b60008080806109b68761304f565b96509094509250600090505b60068110156109ed578481600681106109d757fe5b602002015161ffff1691909101906001016109c2565b506006900495945050505050565b600354600160a060020a031681565b60016020526000908152604090205460ff1681565b6002546101009004600160a060020a031681565b60006001604060020a0387161580610a5257506001604060020a038616155b80610a6457506001604060020a038516155b15610a7157506000610d23565b856001604060020a0316876001604060020a03161480610aa25750846001604060020a0316876001604060020a0316145b80610abe5750836001604060020a0316876001604060020a0316145b80610ada5750826001604060020a0316876001604060020a0316145b80610af65750816001604060020a0316876001604060020a0316145b15610b0357506000610d23565b846001604060020a0316866001604060020a03161480610b345750836001604060020a0316866001604060020a0316145b80610b505750826001604060020a0316866001604060020a0316145b80610b6c5750816001604060020a0316866001604060020a0316145b15610b7957506000610d23565b836001604060020a0316856001604060020a03161480610baa5750826001604060020a0316856001604060020a0316145b80610bc65750816001604060020a0316856001604060020a0316145b15610bd357506000610d23565b6000846001604060020a0316118015610c185750826001604060020a0316846001604060020a03161480610c185750816001604060020a0316846001604060020a0316145b15610c2557506000610d23565b6000836001604060020a0316118015610c4f5750816001604060020a0316836001604060020a0316145b15610c5c57506000610d23565b610c668789613d32565b1580610c795750610c778689613d32565b155b80610c8b5750610c898589613d32565b155b15610c9857506000610d23565b6000846001604060020a0316118015610cb85750610cb68489613d32565b155b15610cc557506000610d23565b6000836001604060020a0316118015610ce55750610ce38389613d32565b155b15610cf257506000610d23565b6000826001604060020a0316118015610d125750610d108289613d32565b155b15610d1f57506000610d23565b5060015b979650505050505050565b6000806000610d3b614799565b600354600160a060020a031691506000826307202460878360405160e0015260405160e060020a63ffffffff84160281526001604060020a03909116600482015260240160e060405180830381600087803b1515610d9857600080fd5b6102c65a03f11515610da957600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805190602001805160e08a0152505063ffffffff9182166080880152600160a060020a0390921660408701529190911660208501908152919750915051826080015194509450505050915091565b60008060008315610e4157600a61ffff600d8a0216049750600a61ffff600d8902160496505b610e5688600461ffff60038a02165b04613ed0565b9150610e6b87600461ffff6003890216610e50565b600b5490915060ff1661ffff8316108015610e8e5750600b5460ff1661ffff8216105b15610ea057600b5460ff169250610ebc565b8061ffff168261ffff161115610eb857819250610ebc565b8092505b505095945050505050565b60005433600160a060020a0390811691161480610f025750600160a060020a03331660009081526001602081905260409091205460ff161515145b1515610f0d57600080fd5b60ff9182166000908152600660205260409020805460ff191691909216179055565b600080548190819033600160a060020a0390811691161480610f6f5750600160a060020a03331660009081526001602081905260409091205460ff161515145b1515610f7a57600080fd5b506001915060649050805b606460ff841611610fd85760ff83166000908152600860205260409020805463ffffffff191663ffffffff83811691909117909155600190930192600a90600b8402160460050191508181019050610f85565b505050565b60005433600160a060020a03908116911614806110185750600160a060020a03331660009081526001602081905260409091205460ff161515145b151561102357600080fd5b600660208190527f3e5fec24aa4dc4e5aee2e025e51e1392c72a2500577559fae9665c6d52bd6a31805460ff19908116600e179091557f8819ef417987f8ae7a81f42cdfb18815282fe989326fbff903d13cf0e03ace298054821660101790557f75f96ab15d697e93042dc45b5c896c4b27e89bb6eaf39475c5c371cb2513f7d28054821660081790557fc5069e24aaadb2addc3e52e868fcf3f4f8acf5a87e24300992fd4540c2a87eed8054821660091790557fbfd358e93f18da3ed276c3afdbdba00b8f0b6008a03476a6a86bd6320ee6938b8054821660021790557f697b2bd7bb2984c4e0dc14c79c987d37818484a62958b9c45a0e8b962f20650f80548216600b1790557f4ced6d0d36392b04cc5d8761b1327b3bbba6e1089c77f60a9a9ca18e05e4f00e8054821660031790557fb8d683c9d414f481826f3e7fe14b3ac6ae8c73450778287390c4bb8cb9f2e80b8054821660051790557fca4d0c6c94a9477136dd41a99cc19ecbe441c8f6609efe7c6fa65be007a4732380548216600f1790557f85291c2e7881182c13e19eca9b58927ebfdc2c5d04882018eeb33d8241d357118054821660129081179091557f0b94fa1b86997cc1f1148bfbe25b674e8cefc7cc6f976aa8d7c7966bd4cca3478054831660071790557f248457bacb20e239ae314d8db91c0f270e453c28ee138c84f97aea6cfcf9a499805483169093179092557faca6cdb4b5fe0ec50731a73f714dd191dc1911bfeb3f9eeb9e94ed0f6065ef8d8054821660111790557ff130046d53bc87538ab17e4752ba5f5082985eecc06ccb932c5a55e8242dd50280548216600d1790557f6fac4587033fa036e2426ad0134940d3a683633cc2b2b7862f39195344f163d180548216600c1790557f84a4048ee77615560f9afb39551a46e123dd0dd6c928af241dc565271d0325698054821660011790556000919091527fee4750d043edce57577a49a1f0c4b389e3b8c38c27dc693bc6b7154c0728077180549091166004179055565b600080600080600080611317614799565b600354600554600160a060020a03918216975016945060009250829150856307202460898460405160e0015260405160e060020a63ffffffff84160281526001604060020a03909116600482015260240160e060405180830381600087803b151561138157600080fd5b6102c65a03f1151561139257600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805190602001805160e08901525063ffffffff90811660c088015290811660a08701529081166080860152600160a060020a0391821660408601908152921660208501526001604060020a0390921683529086169063f8a74501905160006040516060015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401606060405180830381600087803b151561145957600080fd5b6102c65a03f1151561146a57600080fd5b50505060405180519060200180519060200180519296509094505063ffffffff908116925060009085161180156114a15750600083115b156115285784600160a060020a031663dc268db9858a60006040516020015260405163ffffffff84811660e060020a0282529290921660048301526001604060020a03166024820152604401602060405180830381600087803b151561150657600080fd5b6102c65a03f1151561151757600080fd5b50505060405180519050965061152d565b600096505b505050505050919050565b6000600019430140600160a060020a03831601815b8460ff168160ff16108015611565575060068160ff16105b15611579576101008204915060010161154d565b8560ff168281151561158757fe5b069695505050505050565b60025460009081908190819060ff16156115ab57600080fd5b600554600160a060020a031615156115c257600080fd5b600554600160a060020a031693508363f31dec5a8860006040516060015260405163ffffffff83811660e060020a028252919091166004820152602401606060405180830381600087803b151561161857600080fd5b6102c65a03f1151561162957600080fd5b50505060405180519060200180519060200180519295509093505063ffffffff16905033600160a060020a039081169083161461166557600080fd5b83600160a060020a03166343b37b458888886040518463ffffffff1660e060020a028152600401808463ffffffff1663ffffffff1681526020018060200182810382528484828181526020019250808284378201915050945050505050600060405180830381600087803b15156116db57600080fd5b6102c65a03f115156116ec57600080fd5b50505050505050505050565b600d5481565b60006117086147e5565b600061171261483e565b600061171c614873565b60025460ff161561172c57600080fd5b600354600160a060020a0316151561174357600080fd5b600454600160a060020a0316151561175a57600080fd5b600554600160a060020a0316151561177157600080fd5b611780338d8d8d8d8d8d610a33565b151561178b57600080fd5b600554600160a060020a031695508563f31dec5a8e60006040516060015260405163ffffffff83811660e060020a028252919091166004820152602401606060405180830381600087803b15156117e157600080fd5b6102c65a03f115156117f257600080fd5b505050604051805190602001805190602001805163ffffffff16606089015250600160a060020a03168652608086019081525115806118435750600160a060020a0333168551600160a060020a0316145b1561184d57600080fd5b600254600160a060020a036101009091048116945086166301d439458e600060405160c0015260405163ffffffff83811660e060020a02825291909116600482015260240160c060405180830381600087803b15156118ab57600080fd5b6102c65a03f115156118bc57600080fd5b50505060405180519060200180519060200180519060200180519060200180519060200180516001604060020a0390811660a08b015291821660808a015250908116606088019081529181166040880152918216602087015291168452600e805473ffffffffffffffffffffffffffffffffffffffff191633600160a060020a031617905560009250611959905184608001518560a00151612942565b6020820152611969898989612942565b6080820152600060c082015282516001604060020a0390811682528c16606082015261199481613ef5565b8860a0015160a08a015160600160c08b015192151560e08c015260ff9390931690915263ffffffff92831690915291169052600160a060020a038416635643a71182516119f78860a00151518960a0015160035b60200201518a60e0015161395e565b60405163ffffffff84811660e060020a0282526001604060020a0393909316600482015291166024820152604401600060405180830381600087803b1515611a3e57600080fd5b6102c65a03f11515611a4f57600080fd5b50505083600160a060020a0316635643a7118260600151611a8a8860a00151606001518960a0015160005b60200201518a60e001511561395e565b60405163ffffffff84811660e060020a0282526001604060020a0393909316600482015291166024820152604401600060405180830381600087803b1515611ad157600080fd5b6102c65a03f11515611ae257600080fd5b5050508460e0015115611af6576001820191505b600160c082015260208301516001604060020a0390811682528b166060820152611b1f81613ef5565b8860a0015160200160a08a015160800160c08b015192151560e08c015260ff9390931660209092019190915263ffffffff92831690915291169052600160a060020a038416635643a7118251611b838860a00151602001518960a0015160046119e8565b60405163ffffffff84811660e060020a0282526001604060020a0393909316600482015291166024820152604401600060405180830381600087803b1515611bca57600080fd5b6102c65a03f11515611bdb57600080fd5b50505083600160a060020a0316635643a7118260600151611c0a8860a00151608001518960a001516001611a7a565b60405163ffffffff84811660e060020a0282526001604060020a0393909316600482015291166024820152604401600060405180830381600087803b1515611c5157600080fd5b6102c65a03f11515611c6257600080fd5b5050508460e0015115611c76576001820191505b600260c082015260408301516001604060020a0390811682528a166060820152611c9f81613ef5565b8860a0015160400160a08a015160a00160c08b015192151560e08c015260ff9390931660409092019190915263ffffffff92831690915291169052600160a060020a038416635643a7118251611d038860a00151604001518960a0015160056119e8565b60405163ffffffff84811660e060020a0282526001604060020a0393909316600482015291166024820152604401600060405180830381600087803b1515611d4a57600080fd5b6102c65a03f11515611d5b57600080fd5b50505083600160a060020a0316635643a7118260600151611d8a8860a0015160a001518960a001516002611a7a565b60405163ffffffff84811660e060020a0282526001604060020a0393909316600482015291166024820152604401600060405180830381600087803b1515611dd157600080fd5b6102c65a03f11515611de257600080fd5b5050508460e0015115611df6576001820191505b611e068d60018460ff161161409a565b63ffffffff166060860152600160ff83161115611e3a57610100850160005b90816002811115611e3257fe5b905250611e62565b6000856060015163ffffffff161115611e595761010085016002611e25565b60016101008601525b85600160a060020a0316631f674b5a8e338860c00151518960c00151602001518a60c00151604001518b61010001516002811115611e9c57fe5b8c60a00151518d60a00151602001518e60a001516040015160006040516020015260405163ffffffff8b811660e060020a028252998a166004820152600160a060020a0398909816602489015260ff968716604489015294861660648801529285166084870152931660a485015291841660c484015290831660e483015290911661010482015261012401602060405180830381600087803b1515611f4057600080fd5b6102c65a03f11515611f5157600080fd5b50505060405180516001604060020a031660208701908152600160a060020a03881691506330a8087090518e8e8e8e8e8e8d60a00151606001518e60a00151608001518f60a0015160a0015160405163ffffffff8c811660e060020a0282526001604060020a039b8c166004830152998b166024820152978a1660448901529589166064880152938816608487015291871660a486015290951660c484015293831660e4830152928216610104820152911661012482015261014401600060405180830381600087803b151561202657600080fd5b6102c65a03f1151561203757600080fd5b50505033600160a060020a03167f26194856c6c579d36bc6b21531c958237d96b3f18856c8a745fd16e0133f1e8a8e876101000151600281111561207757fe5b60405163ffffffff909216825260ff1660208201526040908101905180910390a250505050505050505050505050565b60005433600160a060020a039081169116146120c257600080fd5b6002805460ff1916911515919091179055565b60095468010000000000000000900463ffffffff1681565b600254600090819081908190819060ff161561210857600080fd5b600354600160a060020a0316151561211f57600080fd5b600454600160a060020a0316151561213657600080fd5b600554600160a060020a0316151561214d57600080fd5b61215c338c8c8c8c8c8c610a33565b151561216757600080fd5b600454600160a060020a031694508463a847a71c8c60006040516020015260405160e060020a63ffffffff84160281526001604060020a039091166004820152602401602060405180830381600087803b15156121c357600080fd5b6102c65a03f115156121d457600080fd5b5050506040518051905080612257575084600160a060020a031663a847a71c8b60006040516020015260405160e060020a63ffffffff84160281526001604060020a039091166004820152602401602060405180830381600087803b151561223b57600080fd5b6102c65a03f1151561224c57600080fd5b505050604051805190505b806122d0575084600160a060020a031663a847a71c8a60006040516020015260405160e060020a63ffffffff84160281526001604060020a039091166004820152602401602060405180830381600087803b15156122b457600080fd5b6102c65a03f115156122c557600080fd5b505050604051805190505b80612349575084600160a060020a031663a847a71c8960006040516020015260405160e060020a63ffffffff84160281526001604060020a039091166004820152602401602060405180830381600087803b151561232d57600080fd5b6102c65a03f1151561233e57600080fd5b505050604051805190505b806123c2575084600160a060020a031663a847a71c8860006040516020015260405160e060020a63ffffffff84160281526001604060020a039091166004820152602401602060405180830381600087803b15156123a657600080fd5b6102c65a03f115156123b757600080fd5b505050604051805190505b8061243b575084600160a060020a031663a847a71c8760006040516020015260405160e060020a63ffffffff84160281526001604060020a039091166004820152602401602060405180830381600087803b151561241f57600080fd5b6102c65a03f1151561243057600080fd5b505050604051805190505b1561244557600080fd5b5050600554600160a060020a031691506000808363f8a7450133836040516060015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401606060405180830381600087803b15156124a557600080fd5b6102c65a03f115156124b657600080fd5b505050604051805190602001805190602001805192955090935090915050600063ffffffff841611806124e95750600082115b156124f357600080fd5b600954640100000000900461ffff16600160a060020a03851663d7ebf53d6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561254857600080fd5b6102c65a03f1151561255957600080fd5b5050506040518051905010151561256f57600080fd5b83600160a060020a0316632ecfa02c3360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156125c657600080fd5b6102c65a03f115156125d757600080fd5b50505060405180519050600a54348115156125ee57fe5b04019050600960089054906101000a900463ffffffff1663ffffffff168163ffffffff16101561261d57600080fd5b600160a060020a038416635b188d403382632ecfa02c8260006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561267b57600080fd5b6102c65a03f1151561268c57600080fd5b5050506040518051905060006040516020015260405163ffffffff84811660e060020a028252600160a060020a0393909316600482015291166024820152604401602060405180830381600087803b15156126e657600080fd5b6102c65a03f115156126f757600080fd5b50505060405180515050600c805434019055600160a060020a03841663b5e5a50a338f8f8f8f8f8f8f8f8b60006040516020015260405163ffffffff8c811660e060020a028252600160a060020a038c16600483019081526001604060020a038a811660448501528981166064850152888116608485015287811660a485015286811660c4850152851660e48401529083166101048301526101206024830190815261012483018b90529091610144018b8b8082843782019150509b505050505050505050505050602060405180830381600087803b15156127d857600080fd5b6102c65a03f115156127e957600080fd5b5050506040518051935050600160a060020a0333167fb67c02473855217c5523d6db57e34ef9aeea067dffec2a3e33dc642f751dc1498460405163ffffffff909116815260200160405180910390a250505050505050505050505050565b60005474010000000000000000000000000000000000000000900461ffff1681565b63ffffffff166000908152600760205260409020805460018201546002909201549092565b6000805433600160a060020a03908116911614806128ca5750600160a060020a03331660009081526001602081905260409091205460ff161515145b15156128d557600080fd5b30600160a060020a0316318211156128ec57600080fd5b6128fa600c54600d546141fd565b90508082111561290957600080fd5b600d805483019055600160a060020a03831682156108fc0283604051600060405180830381858888f193505050501515610fd857600080fd5b61294a6148a6565b60025460009081906101009004600160a060020a0316816001604060020a03881681901115612a145781600160a060020a031662119f3489600060405160a0015260405160e060020a63ffffffff84160281526001604060020a03909116600482015260240160a060405180830381600087803b15156129c957600080fd5b6102c65a03f115156129da57600080fd5b50505060405180519060200180519060200180519060200180519060200180515050901515602089015263ffffffff909216875290945092505b6000876001604060020a03161115612aca5781600160a060020a031662119f3488600060405160a0015260405160e060020a63ffffffff84160281526001604060020a03909116600482015260240160a060405180830381600087803b1515612a7c57600080fd5b6102c65a03f11515612a8d57600080fd5b50505060405180519060200180519060200180519060200180519060200180515050901515608089015263ffffffff909216606088015290945092505b6000866001604060020a03161115612b805781600160a060020a031662119f3487600060405160a0015260405160e060020a63ffffffff84160281526001604060020a03909116600482015260240160a060405180830381600087803b1515612b3257600080fd5b6102c65a03f11515612b4357600080fd5b5050506040518051906020018051906020018051906020018051906020018051505090151560e089015263ffffffff90921660c088015290945092505b50600354600160a060020a0316602085015115612c4357600160a060020a0381166362b21ad76000875163ffffffff16600080604051602001526040518463ffffffff1660e060020a02815260040180846004811115612bdc57fe5b60ff168152602001836001604060020a03166001604060020a031681526020018281526020019350505050602060405180830381600087803b1515612c2057600080fd5b6102c65a03f11515612c3157600080fd5b505050604051805160ff166040870152505b846080015115612cfc5780600160a060020a03166362b21ad76000876060015163ffffffff16600080604051602001526040518463ffffffff1660e060020a02815260040180846004811115612c9557fe5b60ff168152602001836001604060020a03166001604060020a031681526020018281526020019350505050602060405180830381600087803b1515612cd957600080fd5b6102c65a03f11515612cea57600080fd5b505050604051805160ff1660a0870152505b8460e0015115612db65780600160a060020a03166362b21ad760008760c0015163ffffffff16600080604051602001526040518463ffffffff1660e060020a02815260040180846004811115612d4e57fe5b60ff168152602001836001604060020a03166001604060020a031681526020018281526020019350505050602060405180830381600087803b1515612d9257600080fd5b6102c65a03f11515612da357600080fd5b505050604051805160ff16610100870152505b505050509392505050565b60005433600160a060020a0390811691161480612dfc5750600160a060020a03331660009081526001602081905260409091205460ff161515145b1515612e0757600080fd5b60038054600160a060020a0395861673ffffffffffffffffffffffffffffffffffffffff1991821617909155600280549486166101000274ffffffffffffffffffffffffffffffffffffffff001990951694909417909355600480549285169284169290921790915560058054919093169116179055565b600954670100000000000000900460ff1681565b60005433600160a060020a03908116911614612eae57600080fd5b600160a060020a03811660009081526001602052604090205460ff161515612f3a57600160a060020a03811660009081526001602081905260408220805460ff191682179055815461ffff7401000000000000000000000000000000000000000080830482169093011690910275ffff0000000000000000000000000000000000000000199091161790555b50565b60005433600160a060020a0390811691161480612f785750600160a060020a03331660009081526001602081905260409091205460ff161515145b1515612f8357600080fd5b6009805460ff1990811660ff9a8b161761ff001916610100998b16999099029890981762ff0000191662010000978a1697909702969096176bffffffff000000000000000019166801000000000000000063ffffffff96909616959095029490941763ff00000019166301000000938816939093029290921765ffff00000000191664010000000061ffff92909216919091021766ff000000000000191666010000000000009186169190910217909155600b80549092169216919091179055565b601881565b600381565b60008061305a614771565b6000613064614771565b600354600160a060020a0316915060008080806130808a610d2e565b909450925063ffffffff841615156130a05783838698509850985061322c565b600091506130ad83613833565b9050600091505b60068210156131845785600160a060020a03166362b21ad760038c856000604051602001526040518463ffffffff1660e060020a028152600401808460048111156130fb57fe5b60ff168152602001836001604060020a03166001604060020a031681526020018281526020019350505050602060405180830381600087803b151561313f57600080fd5b6102c65a03f1151561315057600080fd5b505050604051805160ff16905085836006811061316957fe5b602002018181510161ffff16905250600191909101906130b4565b600091505b63ffffffff84166000908152600760205260409020600101548210156132225763ffffffff8416600090815260076020526040902060010180546131fb9190849081106131d257fe5b6000918252602091829020828204015460ff929091066101000a90048116906003840216614211565b85836006811061320757fe5b6020020181815161ffff910116905250600190910190613189565b8383869850985098505b5050505050509193909250565b60095460ff1681565b60095462010000900460ff1681565b600054600160a060020a031681565b60008060008061326e6148f2565b6132766148f2565b61327e6148f2565b60005433600160a060020a03908116911614806132b95750600160a060020a03331660009081526001602081905260409091205460ff161515145b15156132c457600080fd5b600354600160a060020a031615156132db57600080fd5b6002546101009004600160a060020a031615156132f757600080fd5b60035460025463ffffffff8a16600081815260076020526040808220600160a060020a039586169c506101009094049094169950975090955088916341b0eb53918891829051602001526040518363ffffffff1660e060020a0281526004018083600481111561336357fe5b60ff168152602001826001604060020a03166001604060020a0316815260200192505050602060405180830381600087803b15156133a057600080fd5b6102c65a03f115156133b157600080fd5b505050604051805190509450846040518059106133cb5750595b908082528060200260200182016040525092505b60008511156134ba5786600160a060020a03166362b21ad760008a63ffffffff16600189036000604051602001526040518463ffffffff1660e060020a0281526004018084600481111561342f57fe5b60ff168152602001836001604060020a03166001604060020a031681526020018281526020019350505050602060405180830381600087803b151561347357600080fd5b6102c65a03f1151561348457600080fd5b5050506040518051905083600187038151811061349d57fe5b60ff909216602092830290910190910152600019909401936133df565b838380516134cc929160200190614904565b5086600160a060020a03166341b0eb5360018a63ffffffff166000604051602001526040518363ffffffff1660e060020a0281526004018083600481111561351057fe5b60ff168152602001826001604060020a03166001604060020a0316815260200192505050602060405180830381600087803b151561354d57600080fd5b6102c65a03f1151561355e57600080fd5b505050604051805190509450846040518059106135785750595b908082528060200260200182016040525091505b60008511156136675786600160a060020a03166362b21ad760018a63ffffffff16600189036000604051602001526040518463ffffffff1660e060020a028152600401808460048111156135dc57fe5b60ff168152602001836001604060020a03166001604060020a031681526020018281526020019350505050602060405180830381600087803b151561362057600080fd5b6102c65a03f1151561363157600080fd5b5050506040518051905082600187038151811061364a57fe5b60ff9092166020928302909101909101526000199094019361358c565b6001840182805161367c929160200190614904565b5085600160a060020a03166388e9abb689600080604051602001526040518363ffffffff1660e060020a028152600401808363ffffffff1663ffffffff1681526020018260018111156136cb57fe5b60ff16815260200192505050602060405180830381600087803b15156136f057600080fd5b6102c65a03f1151561370157600080fd5b5050506040518051905094508460405180591061371b5750595b908082528060200260200182016040525090505b60008511156138015785600160a060020a0316635b626339896000600189036000604051602001526040518463ffffffff1660e060020a028152600401808463ffffffff1663ffffffff16815260200183600181111561378b57fe5b60ff1681526020018281526020019350505050602060405180830381600087803b15156137b757600080fd5b6102c65a03f115156137c857600080fd5b505050604051805190508160018703815181106137e157fe5b63ffffffff9092166020928302909101909101526000199094019361372f565b600284018180516138169291602001906149aa565b505050505050505050565b600954640100000000900461ffff1681565b600060016064825b8160ff168360ff1610156138ab5750600281830160ff16045b8160ff168360ff1610156138a657600260ff848401160460ff811660009081526008602052604090205490915063ffffffff908116908616101561389a578091506138a1565b8060010192505b613854565b61383b565b50909392505050565b60005433600160a060020a039081169116146138cf57600080fd5b600160a060020a03811660009081526001602081905260409091205460ff1615151415612f3a57600160a060020a03166000908152600160205260408120805460ff19169055805475ffff0000000000000000000000000000000000000000198116740100000000000000000000000000000000000000009182900461ffff9081166000190116909102179055565b60008060008060008061397088613833565b945061397b89613833565b93508492508360030160ff168560ff1611156139a257600260ff60038601160492506139ac565b600260ff86160492505b600191508260ff1660140a8360ff1660150a6103e8028115156139cb57fe5b048002905060ff6003850181169086161180156139f357508260020260ff168460030160ff16115b80613a1a57508360030160ff168560ff1611158015613a1a57508260020260ff168560ff16115b15613a29576014601582020490505b8615613a3f57620f4240601e8202049150613a4b565b620f4240600a82020491505b60ff60058601811690851610613a8457600560ff868603160460ff1660020a63ffffffff168263ffffffff16811515613a8057fe5b0491505b50979650505050505050565b6009546301000000900460ff1681565b600b5460ff1681565b6000806000613ab6614799565b600354600160a060020a031691506000826307202460878360405160e0015260405160e060020a63ffffffff84160281526001604060020a03909116600482015260240160e060405180830381600087803b1515613b1357600080fd5b6102c65a03f11515613b2457600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805190602001805160e08a0152505063ffffffff91821660808801908152600160a060020a039093166040880152921660208601526001604060020a039092168452915051613b9a8360800151613833565b94509450505050915091565b60025460009081908190819060ff1615613bbf57600080fd5b600554600160a060020a03161515613bd657600080fd5b600554600160a060020a031693508363f31dec5a8660006040516060015260405163ffffffff83811660e060020a028252919091166004820152602401606060405180830381600087803b1515613c2c57600080fd5b6102c65a03f11515613c3d57600080fd5b50505060405180519060200180519060200180519295509093505063ffffffff16905033600160a060020a0390811690831614613c7957600080fd5b6000831115613cdf5783600160a060020a0316634377c1cf8660405163ffffffff83811660e060020a028252919091166004820152602401600060405180830381600087803b1515613cca57600080fd5b6102c65a03f11515613cdb57600080fd5b5050505b8463ffffffff167f7896e0932299b049700f86ae09c1e775b823c8527fb25549987819578913046a60405160405180910390a25050505050565b600954610100900460ff1681565b600a5481565b600681565b600080613d3d614799565b600354600160a060020a0316915081630720246086600060405160e0015260405160e060020a63ffffffff84160281526001604060020a03909116600482015260240160e060405180830381600087803b1515613d9957600080fd5b6102c65a03f11515613daa57600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805190602001805160e08901525063ffffffff90811660c088015290811660a08701529081166080860152600160a060020a0391821660408601908152921660208501526001604060020a0390921683529085169051600160a060020a03161492505b505092915050565b600c5481565b600554600160a060020a031681565b6009546601000000000000900460ff1681565b60025460ff1681565b60005433600160a060020a03908116911614613e8557600080fd5b600160a060020a03811615612f3a5760008054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff1990911617905550565b600454600160a060020a031681565b60008161ffff168361ffff161115613eeb5750808203613eef565b5060005b92915050565b600080600080613f03614771565b613f0b614771565b6000613f168861423c565b600954939a509098509094509250613f4e906601000000000000900460ff1660020160c08a0151600e54600160a060020a0316611538565b9450600090505b6009546601000000000000900460ff1661ffff8216108015613f7c57506000835161ffff16115b8015613f8d57506000825161ffff16115b156140805760a082015161ffff1660a084015161ffff16111561404257600261ffff82160661ffff166000141561400457613ff98260005b6020020151613ff46020860151606087015160408701518760045b60200201518b60ff168861ffff1614610e1b565b613ed0565b61ffff16825261403d565b61402a8360005b6020020151613ff4602085015160608601516040880151886004613fe0565b8360005b61ffff90921660209290920201525b614078565b600261ffff82160661ffff16156140665761405e826000613fc5565b82600061402e565b61407183600061400b565b61ffff1683525b600101613f55565b815161ffff16835161ffff16101593505050509193509193565b6005546000908190819081908190600160a060020a031615156140bc57600080fd5b85156140cb57600094506141f3565b600554600160a060020a031693508363bb583f198860006040516060015260405163ffffffff83811660e060020a028252919091166004820152602401606060405180830381600087803b151561412157600080fd5b6102c65a03f1151561413257600080fd5b50505060405180519060200180519060200180516009549396509194509092505063ffffffff6001840181169160ff6701000000000000009091041690851681151561417a57fe5b04820163ffffffff161115156141ee5783600160a060020a0316634377c1cf8860405163ffffffff83811660e060020a028252919091166004820152602401600060405180830381600087803b15156141d257600080fd5b6102c65a03f115156141e357600080fd5b5050508094506141f3565b600094505b5050505092915050565b6000808284101561420a57fe5b5050900390565b600082820283158061422d575082848281151561422a57fe5b04145b151561423557fe5b9392505050565b6000614246614771565b6000614250614771565b600080808061425f895161304f565b909950975093506000925061427760608a015161304f565b9097509550925061428884846143c3565b61ffff90811660a08c01521660408a01526142a78460208b0151614589565b896040018181510161ffff169052506142c48360808b0151614589565b8960a0018181510161ffff169052506142e18460208b015161467f565b91506142f1838a6080015161467f565b90508860400151602088015102602088018181510161ffff169052506040890151606088015102606088018181510161ffff1690525060a0890151602086015102602086018181510161ffff1690525060a0890151606086015102606086018181510161ffff1690525081604088015102604088018181510161ffff1690525081608088015102608088018181510161ffff1690525080604086015102604086018181510161ffff1690525080608086015102608086018181510161ffff169052509698959750939550919392505050565b600080808080805b63ffffffff881660009081526007602052604090205482101561454e575060005b63ffffffff87166000908152600760205260409020548110156145435763ffffffff8716600090815260076020526040902080548290811061442a57fe5b60009182526020808320818304015463ffffffff8c16845260078252604084208054929093066101000a900460ff169260069290918690811061446957fe5b60009182526020808320818304015460ff928290066101000a90048216845283019390935260409091019020541614156144a257600193505b63ffffffff881660009081526007602052604090208054839081106144c357fe5b60009182526020808320818304015463ffffffff8b16845260078252604084208054929093066101000a900460ff169260069290918590811061450257fe5b60009182526020808320818304015460ff928290066101000a900482168452830193909352604090910190205416141561453b57600192505b6001016143ec565b6001909101906143cb565b83156145665760095462010000900460ff1695909501945b821561457e5760095462010000900460ff1694909401935b505050509250929050565b63ffffffff8216600090815260076020526040812060020154819081908180821115614668575060009250825b818410156146685763ffffffff871660009081526007602052604090206002018054859081106145e257fe5b90600052602060002090600891828204019190066004029054906101000a900463ffffffff169050856000015163ffffffff168163ffffffff1614806146375750856060015163ffffffff168163ffffffff16145b8061465157508560c0015163ffffffff168163ffffffff16145b1561465d576001830192505b6001909301926145b6565b60095460ff90811684021694505050505092915050565b600080805b63ffffffff8516600090815260076020526040902054821015613e315763ffffffff851660009081526007602052604090208054839081106146c257fe5b6000918252602091829020828204015460ff918390066101000a90041691508401511561470657836040015160ff168160ff16141561470657600183019250614766565b83608001511561472d578360a0015160ff168160ff16141561472d57600183019250614766565b8360e00151156147555783610100015160ff168160ff16141561475557600183019250614766565b600954610100900460ff1692909202915b600190910190614684565b60c06040519081016040526006815b6000815260001990910190602001816147805790505090565b610100604051908101604090815260008083526020830181905290820152606081016147c36148f2565b8152600060208201819052604082018190526060820181905260809091015290565b610200604051908101604090815260008083526020830181905290820181905260608201819052608082015260a0810161481d614771565b815260200161482a614a55565b815260006020820181905260409091015290565b60c06040519081016040908152600080835260208301819052908201819052606082018190526080820181905260a082015290565b6102e0604051908101604052600081526020810161488f6148a6565b8152600060208201819052604082015260600161482a5b6101206040519081016040908152600080835260208301819052908201819052606082018190526080820181905260a0820181905260c0820181905260e0820181905261010082015290565b60206040519081016040526000815290565b82805482825590600052602060002090601f0160209004810192821561499a5791602002820160005b8382111561496b57835183826101000a81548160ff021916908360ff160217905550926020019260010160208160000104928301926001030261492d565b80156149985782816101000a81549060ff021916905560010160208160000104928301926001030261496b565b505b506149a6929150614a6f565b5090565b82805482825590600052602060002090600701600890048101928215614a495791602002820160005b83821115614a1757835183826101000a81548163ffffffff021916908363ffffffff16021790555092602001926004016020816003010492830192600103026149d3565b8015614a475782816101000a81549063ffffffff0219169055600401602081600301049283019260010302614a17565b505b506149a6929150614a90565b606060405190810160405260008152600260208201614780565b614a8d91905b808211156149a657805460ff19168155600101614a75565b90565b614a8d91905b808211156149a657805463ffffffff19168155600101614a965600a165627a7a7230582061caabcde420fb9a8f926ce3c35c312fbcdce18e7260d0f6d548c8de0b58a5130029000000000000000000000000abc1c404424bdf24c19a5cc5ef8f47781d18eb3e0000000000000000000000001fc7bd85293f3982f40d52698df8d26be89360d600000000000000000000000065c440683088134aef7af22f3fad6a9ee5c19fed00000000000000000000000075aa01dc00f6aeefe14bd58a5b6cbb091c6dc57b

Deployed Bytecode

0x60606040526004361061024d5763ffffffff60e060020a6000350416630672859b81146102525780630d6688181461028d57806314d0f1ba146102bc57806318758480146102ef5780631bab0908146103025780631cd982351461034b57806320046e911461038b5780633171cec4146103d357806333ced321146103f457806333d24dc41461040757806335f097f31461041a5780633a34f09a1461043957806343b37b451461047a578063455fd623146104a257806347cf8971146104c757806348ef5aa81461050d5780634a3d3c09146105255780634aaff006146105515780634efb023e14610590578063500e4297146105a3578063522f6815146105e357806354f0bde714610605578063615dbebb146106305780636b2a2691146106615780636c81fd6d14610674578063720ffedb1461069357806373d65c00146106dc578063775e38f7146106ef57806384be816c1461070257806385bbb53a1461076f578063891fe103146107825780638da5cb5b146107955780638fd8f783146107a8578063a0c66b43146107c4578063b2cad9b7146107d7578063b85d6275146107f3578063be44bd2114610812578063cc06c35914610839578063cfa830791461084c578063d2169d2f1461085f578063d4c15161146108a0578063d5425571146108bc578063d8e20e2c146108cf578063d98e14bd146108e2578063da5671ad146108f5578063dffd722f14610920578063eb83f01514610933578063ebfa3c1b14610946578063ee4e441614610959578063f28532921461096c578063ffa640d81461098b575b600080fd5b341561025d57600080fd5b6102716001604060020a036004351661099e565b6040516001604060020a03909116815260200160405180910390f35b341561029857600080fd5b6102a06109fb565b604051600160a060020a03909116815260200160405180910390f35b34156102c757600080fd5b6102db600160a060020a0360043516610a0a565b604051901515815260200160405180910390f35b34156102fa57600080fd5b6102a0610a1f565b341561030d57600080fd5b6102db600160a060020a03600435166001604060020a0360243581169060443581169060643581169060843581169060a43581169060c43516610a33565b341561035657600080fd5b61036a6001604060020a0360043516610d2e565b60405163ffffffff9283168152911660208201526040908101905180910390f35b341561039657600080fd5b6103bc61ffff600435811690602435811690604435811690606435166084351515610e1b565b60405161ffff909116815260200160405180910390f35b34156103de57600080fd5b6103f260ff60043581169060243516610ec7565b005b34156103ff57600080fd5b6103f2610f2f565b341561041257600080fd5b6103f2610fdd565b341561042557600080fd5b6102db6001604060020a0360043516611306565b341561044457600080fd5b61046460ff60043581169060243516600160a060020a0360443516611538565b60405160ff909116815260200160405180910390f35b341561048557600080fd5b6103f26004803563ffffffff169060248035908101910135611592565b34156104ad57600080fd5b6104b56116f8565b60405190815260200160405180910390f35b34156104d257600080fd5b6103f263ffffffff600435166001604060020a0360243581169060443581169060643581169060843581169060a43581169060c435166116fe565b341561051857600080fd5b6103f260043515156120a7565b341561053057600080fd5b6105386120d5565b60405163ffffffff909116815260200160405180910390f35b6103f260246004803582810192910135906001604060020a03903581169060443581169060643581169060843581169060a43581169060c435166120ed565b341561059b57600080fd5b6103bc612847565b34156105ae57600080fd5b6105bf63ffffffff60043516612869565b60405180848152602001838152602001828152602001935050505060405180910390f35b34156105ee57600080fd5b6103f2600160a060020a036004351660243561288e565b341561061057600080fd5b6104b56001604060020a0360043581169060243581169060443516612942565b341561063b57600080fd5b6103f2600160a060020a0360043581169060243581169060443581169060643516612dc1565b341561066c57600080fd5b610464612e7f565b341561067f57600080fd5b6103f2600160a060020a0360043516612e93565b341561069e57600080fd5b6103f260ff60043581169060243581169060443581169063ffffffff606435169060843581169061ffff60a435169060c43581169060e43516612f3d565b34156106e757600080fd5b610464613045565b34156106fa57600080fd5b61046461304a565b341561070d57600080fd5b6107216001604060020a036004351661304f565b60405163ffffffff808516825283166020820152604081018260c080838360005b8381101561075a578082015183820152602001610742565b50505050905001935050505060405180910390f35b341561077a57600080fd5b610464613239565b341561078d57600080fd5b610464613242565b34156107a057600080fd5b6102a0613251565b34156107b357600080fd5b6103f263ffffffff60043516613260565b34156107cf57600080fd5b6103bc613821565b34156107e257600080fd5b61046463ffffffff60043516613833565b34156107fe57600080fd5b6103f2600160a060020a03600435166138b4565b341561081d57600080fd5b61053863ffffffff60043581169060243516604435151561395e565b341561084457600080fd5b610464613a90565b341561085757600080fd5b610464613aa0565b341561086a57600080fd5b61087e6001604060020a0360043516613aa9565b60405163ffffffff909216825260ff1660208201526040908101905180910390f35b34156108ab57600080fd5b6103f263ffffffff60043516613ba6565b34156108c757600080fd5b610464613d19565b34156108da57600080fd5b6104b5613d27565b34156108ed57600080fd5b610464613d2d565b341561090057600080fd5b6102db6001604060020a0360043516600160a060020a0360243516613d32565b341561092b57600080fd5b6104b5613e39565b341561093e57600080fd5b6102a0613e3f565b341561095157600080fd5b610464613e4e565b341561096457600080fd5b6102db613e61565b341561097757600080fd5b6103f2600160a060020a0360043516613e6a565b341561099657600080fd5b6102a0613ec1565b60006109a8614771565b60008080806109b68761304f565b96509094509250600090505b60068110156109ed578481600681106109d757fe5b602002015161ffff1691909101906001016109c2565b506006900495945050505050565b600354600160a060020a031681565b60016020526000908152604090205460ff1681565b6002546101009004600160a060020a031681565b60006001604060020a0387161580610a5257506001604060020a038616155b80610a6457506001604060020a038516155b15610a7157506000610d23565b856001604060020a0316876001604060020a03161480610aa25750846001604060020a0316876001604060020a0316145b80610abe5750836001604060020a0316876001604060020a0316145b80610ada5750826001604060020a0316876001604060020a0316145b80610af65750816001604060020a0316876001604060020a0316145b15610b0357506000610d23565b846001604060020a0316866001604060020a03161480610b345750836001604060020a0316866001604060020a0316145b80610b505750826001604060020a0316866001604060020a0316145b80610b6c5750816001604060020a0316866001604060020a0316145b15610b7957506000610d23565b836001604060020a0316856001604060020a03161480610baa5750826001604060020a0316856001604060020a0316145b80610bc65750816001604060020a0316856001604060020a0316145b15610bd357506000610d23565b6000846001604060020a0316118015610c185750826001604060020a0316846001604060020a03161480610c185750816001604060020a0316846001604060020a0316145b15610c2557506000610d23565b6000836001604060020a0316118015610c4f5750816001604060020a0316836001604060020a0316145b15610c5c57506000610d23565b610c668789613d32565b1580610c795750610c778689613d32565b155b80610c8b5750610c898589613d32565b155b15610c9857506000610d23565b6000846001604060020a0316118015610cb85750610cb68489613d32565b155b15610cc557506000610d23565b6000836001604060020a0316118015610ce55750610ce38389613d32565b155b15610cf257506000610d23565b6000826001604060020a0316118015610d125750610d108289613d32565b155b15610d1f57506000610d23565b5060015b979650505050505050565b6000806000610d3b614799565b600354600160a060020a031691506000826307202460878360405160e0015260405160e060020a63ffffffff84160281526001604060020a03909116600482015260240160e060405180830381600087803b1515610d9857600080fd5b6102c65a03f11515610da957600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805190602001805160e08a0152505063ffffffff9182166080880152600160a060020a0390921660408701529190911660208501908152919750915051826080015194509450505050915091565b60008060008315610e4157600a61ffff600d8a0216049750600a61ffff600d8902160496505b610e5688600461ffff60038a02165b04613ed0565b9150610e6b87600461ffff6003890216610e50565b600b5490915060ff1661ffff8316108015610e8e5750600b5460ff1661ffff8216105b15610ea057600b5460ff169250610ebc565b8061ffff168261ffff161115610eb857819250610ebc565b8092505b505095945050505050565b60005433600160a060020a0390811691161480610f025750600160a060020a03331660009081526001602081905260409091205460ff161515145b1515610f0d57600080fd5b60ff9182166000908152600660205260409020805460ff191691909216179055565b600080548190819033600160a060020a0390811691161480610f6f5750600160a060020a03331660009081526001602081905260409091205460ff161515145b1515610f7a57600080fd5b506001915060649050805b606460ff841611610fd85760ff83166000908152600860205260409020805463ffffffff191663ffffffff83811691909117909155600190930192600a90600b8402160460050191508181019050610f85565b505050565b60005433600160a060020a03908116911614806110185750600160a060020a03331660009081526001602081905260409091205460ff161515145b151561102357600080fd5b600660208190527f3e5fec24aa4dc4e5aee2e025e51e1392c72a2500577559fae9665c6d52bd6a31805460ff19908116600e179091557f8819ef417987f8ae7a81f42cdfb18815282fe989326fbff903d13cf0e03ace298054821660101790557f75f96ab15d697e93042dc45b5c896c4b27e89bb6eaf39475c5c371cb2513f7d28054821660081790557fc5069e24aaadb2addc3e52e868fcf3f4f8acf5a87e24300992fd4540c2a87eed8054821660091790557fbfd358e93f18da3ed276c3afdbdba00b8f0b6008a03476a6a86bd6320ee6938b8054821660021790557f697b2bd7bb2984c4e0dc14c79c987d37818484a62958b9c45a0e8b962f20650f80548216600b1790557f4ced6d0d36392b04cc5d8761b1327b3bbba6e1089c77f60a9a9ca18e05e4f00e8054821660031790557fb8d683c9d414f481826f3e7fe14b3ac6ae8c73450778287390c4bb8cb9f2e80b8054821660051790557fca4d0c6c94a9477136dd41a99cc19ecbe441c8f6609efe7c6fa65be007a4732380548216600f1790557f85291c2e7881182c13e19eca9b58927ebfdc2c5d04882018eeb33d8241d357118054821660129081179091557f0b94fa1b86997cc1f1148bfbe25b674e8cefc7cc6f976aa8d7c7966bd4cca3478054831660071790557f248457bacb20e239ae314d8db91c0f270e453c28ee138c84f97aea6cfcf9a499805483169093179092557faca6cdb4b5fe0ec50731a73f714dd191dc1911bfeb3f9eeb9e94ed0f6065ef8d8054821660111790557ff130046d53bc87538ab17e4752ba5f5082985eecc06ccb932c5a55e8242dd50280548216600d1790557f6fac4587033fa036e2426ad0134940d3a683633cc2b2b7862f39195344f163d180548216600c1790557f84a4048ee77615560f9afb39551a46e123dd0dd6c928af241dc565271d0325698054821660011790556000919091527fee4750d043edce57577a49a1f0c4b389e3b8c38c27dc693bc6b7154c0728077180549091166004179055565b600080600080600080611317614799565b600354600554600160a060020a03918216975016945060009250829150856307202460898460405160e0015260405160e060020a63ffffffff84160281526001604060020a03909116600482015260240160e060405180830381600087803b151561138157600080fd5b6102c65a03f1151561139257600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805190602001805160e08901525063ffffffff90811660c088015290811660a08701529081166080860152600160a060020a0391821660408601908152921660208501526001604060020a0390921683529086169063f8a74501905160006040516060015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401606060405180830381600087803b151561145957600080fd5b6102c65a03f1151561146a57600080fd5b50505060405180519060200180519060200180519296509094505063ffffffff908116925060009085161180156114a15750600083115b156115285784600160a060020a031663dc268db9858a60006040516020015260405163ffffffff84811660e060020a0282529290921660048301526001604060020a03166024820152604401602060405180830381600087803b151561150657600080fd5b6102c65a03f1151561151757600080fd5b50505060405180519050965061152d565b600096505b505050505050919050565b6000600019430140600160a060020a03831601815b8460ff168160ff16108015611565575060068160ff16105b15611579576101008204915060010161154d565b8560ff168281151561158757fe5b069695505050505050565b60025460009081908190819060ff16156115ab57600080fd5b600554600160a060020a031615156115c257600080fd5b600554600160a060020a031693508363f31dec5a8860006040516060015260405163ffffffff83811660e060020a028252919091166004820152602401606060405180830381600087803b151561161857600080fd5b6102c65a03f1151561162957600080fd5b50505060405180519060200180519060200180519295509093505063ffffffff16905033600160a060020a039081169083161461166557600080fd5b83600160a060020a03166343b37b458888886040518463ffffffff1660e060020a028152600401808463ffffffff1663ffffffff1681526020018060200182810382528484828181526020019250808284378201915050945050505050600060405180830381600087803b15156116db57600080fd5b6102c65a03f115156116ec57600080fd5b50505050505050505050565b600d5481565b60006117086147e5565b600061171261483e565b600061171c614873565b60025460ff161561172c57600080fd5b600354600160a060020a0316151561174357600080fd5b600454600160a060020a0316151561175a57600080fd5b600554600160a060020a0316151561177157600080fd5b611780338d8d8d8d8d8d610a33565b151561178b57600080fd5b600554600160a060020a031695508563f31dec5a8e60006040516060015260405163ffffffff83811660e060020a028252919091166004820152602401606060405180830381600087803b15156117e157600080fd5b6102c65a03f115156117f257600080fd5b505050604051805190602001805190602001805163ffffffff16606089015250600160a060020a03168652608086019081525115806118435750600160a060020a0333168551600160a060020a0316145b1561184d57600080fd5b600254600160a060020a036101009091048116945086166301d439458e600060405160c0015260405163ffffffff83811660e060020a02825291909116600482015260240160c060405180830381600087803b15156118ab57600080fd5b6102c65a03f115156118bc57600080fd5b50505060405180519060200180519060200180519060200180519060200180519060200180516001604060020a0390811660a08b015291821660808a015250908116606088019081529181166040880152918216602087015291168452600e805473ffffffffffffffffffffffffffffffffffffffff191633600160a060020a031617905560009250611959905184608001518560a00151612942565b6020820152611969898989612942565b6080820152600060c082015282516001604060020a0390811682528c16606082015261199481613ef5565b8860a0015160a08a015160600160c08b015192151560e08c015260ff9390931690915263ffffffff92831690915291169052600160a060020a038416635643a71182516119f78860a00151518960a0015160035b60200201518a60e0015161395e565b60405163ffffffff84811660e060020a0282526001604060020a0393909316600482015291166024820152604401600060405180830381600087803b1515611a3e57600080fd5b6102c65a03f11515611a4f57600080fd5b50505083600160a060020a0316635643a7118260600151611a8a8860a00151606001518960a0015160005b60200201518a60e001511561395e565b60405163ffffffff84811660e060020a0282526001604060020a0393909316600482015291166024820152604401600060405180830381600087803b1515611ad157600080fd5b6102c65a03f11515611ae257600080fd5b5050508460e0015115611af6576001820191505b600160c082015260208301516001604060020a0390811682528b166060820152611b1f81613ef5565b8860a0015160200160a08a015160800160c08b015192151560e08c015260ff9390931660209092019190915263ffffffff92831690915291169052600160a060020a038416635643a7118251611b838860a00151602001518960a0015160046119e8565b60405163ffffffff84811660e060020a0282526001604060020a0393909316600482015291166024820152604401600060405180830381600087803b1515611bca57600080fd5b6102c65a03f11515611bdb57600080fd5b50505083600160a060020a0316635643a7118260600151611c0a8860a00151608001518960a001516001611a7a565b60405163ffffffff84811660e060020a0282526001604060020a0393909316600482015291166024820152604401600060405180830381600087803b1515611c5157600080fd5b6102c65a03f11515611c6257600080fd5b5050508460e0015115611c76576001820191505b600260c082015260408301516001604060020a0390811682528a166060820152611c9f81613ef5565b8860a0015160400160a08a015160a00160c08b015192151560e08c015260ff9390931660409092019190915263ffffffff92831690915291169052600160a060020a038416635643a7118251611d038860a00151604001518960a0015160056119e8565b60405163ffffffff84811660e060020a0282526001604060020a0393909316600482015291166024820152604401600060405180830381600087803b1515611d4a57600080fd5b6102c65a03f11515611d5b57600080fd5b50505083600160a060020a0316635643a7118260600151611d8a8860a0015160a001518960a001516002611a7a565b60405163ffffffff84811660e060020a0282526001604060020a0393909316600482015291166024820152604401600060405180830381600087803b1515611dd157600080fd5b6102c65a03f11515611de257600080fd5b5050508460e0015115611df6576001820191505b611e068d60018460ff161161409a565b63ffffffff166060860152600160ff83161115611e3a57610100850160005b90816002811115611e3257fe5b905250611e62565b6000856060015163ffffffff161115611e595761010085016002611e25565b60016101008601525b85600160a060020a0316631f674b5a8e338860c00151518960c00151602001518a60c00151604001518b61010001516002811115611e9c57fe5b8c60a00151518d60a00151602001518e60a001516040015160006040516020015260405163ffffffff8b811660e060020a028252998a166004820152600160a060020a0398909816602489015260ff968716604489015294861660648801529285166084870152931660a485015291841660c484015290831660e483015290911661010482015261012401602060405180830381600087803b1515611f4057600080fd5b6102c65a03f11515611f5157600080fd5b50505060405180516001604060020a031660208701908152600160a060020a03881691506330a8087090518e8e8e8e8e8e8d60a00151606001518e60a00151608001518f60a0015160a0015160405163ffffffff8c811660e060020a0282526001604060020a039b8c166004830152998b166024820152978a1660448901529589166064880152938816608487015291871660a486015290951660c484015293831660e4830152928216610104820152911661012482015261014401600060405180830381600087803b151561202657600080fd5b6102c65a03f1151561203757600080fd5b50505033600160a060020a03167f26194856c6c579d36bc6b21531c958237d96b3f18856c8a745fd16e0133f1e8a8e876101000151600281111561207757fe5b60405163ffffffff909216825260ff1660208201526040908101905180910390a250505050505050505050505050565b60005433600160a060020a039081169116146120c257600080fd5b6002805460ff1916911515919091179055565b60095468010000000000000000900463ffffffff1681565b600254600090819081908190819060ff161561210857600080fd5b600354600160a060020a0316151561211f57600080fd5b600454600160a060020a0316151561213657600080fd5b600554600160a060020a0316151561214d57600080fd5b61215c338c8c8c8c8c8c610a33565b151561216757600080fd5b600454600160a060020a031694508463a847a71c8c60006040516020015260405160e060020a63ffffffff84160281526001604060020a039091166004820152602401602060405180830381600087803b15156121c357600080fd5b6102c65a03f115156121d457600080fd5b5050506040518051905080612257575084600160a060020a031663a847a71c8b60006040516020015260405160e060020a63ffffffff84160281526001604060020a039091166004820152602401602060405180830381600087803b151561223b57600080fd5b6102c65a03f1151561224c57600080fd5b505050604051805190505b806122d0575084600160a060020a031663a847a71c8a60006040516020015260405160e060020a63ffffffff84160281526001604060020a039091166004820152602401602060405180830381600087803b15156122b457600080fd5b6102c65a03f115156122c557600080fd5b505050604051805190505b80612349575084600160a060020a031663a847a71c8960006040516020015260405160e060020a63ffffffff84160281526001604060020a039091166004820152602401602060405180830381600087803b151561232d57600080fd5b6102c65a03f1151561233e57600080fd5b505050604051805190505b806123c2575084600160a060020a031663a847a71c8860006040516020015260405160e060020a63ffffffff84160281526001604060020a039091166004820152602401602060405180830381600087803b15156123a657600080fd5b6102c65a03f115156123b757600080fd5b505050604051805190505b8061243b575084600160a060020a031663a847a71c8760006040516020015260405160e060020a63ffffffff84160281526001604060020a039091166004820152602401602060405180830381600087803b151561241f57600080fd5b6102c65a03f1151561243057600080fd5b505050604051805190505b1561244557600080fd5b5050600554600160a060020a031691506000808363f8a7450133836040516060015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401606060405180830381600087803b15156124a557600080fd5b6102c65a03f115156124b657600080fd5b505050604051805190602001805190602001805192955090935090915050600063ffffffff841611806124e95750600082115b156124f357600080fd5b600954640100000000900461ffff16600160a060020a03851663d7ebf53d6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561254857600080fd5b6102c65a03f1151561255957600080fd5b5050506040518051905010151561256f57600080fd5b83600160a060020a0316632ecfa02c3360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156125c657600080fd5b6102c65a03f115156125d757600080fd5b50505060405180519050600a54348115156125ee57fe5b04019050600960089054906101000a900463ffffffff1663ffffffff168163ffffffff16101561261d57600080fd5b600160a060020a038416635b188d403382632ecfa02c8260006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561267b57600080fd5b6102c65a03f1151561268c57600080fd5b5050506040518051905060006040516020015260405163ffffffff84811660e060020a028252600160a060020a0393909316600482015291166024820152604401602060405180830381600087803b15156126e657600080fd5b6102c65a03f115156126f757600080fd5b50505060405180515050600c805434019055600160a060020a03841663b5e5a50a338f8f8f8f8f8f8f8f8b60006040516020015260405163ffffffff8c811660e060020a028252600160a060020a038c16600483019081526001604060020a038a811660448501528981166064850152888116608485015287811660a485015286811660c4850152851660e48401529083166101048301526101206024830190815261012483018b90529091610144018b8b8082843782019150509b505050505050505050505050602060405180830381600087803b15156127d857600080fd5b6102c65a03f115156127e957600080fd5b5050506040518051935050600160a060020a0333167fb67c02473855217c5523d6db57e34ef9aeea067dffec2a3e33dc642f751dc1498460405163ffffffff909116815260200160405180910390a250505050505050505050505050565b60005474010000000000000000000000000000000000000000900461ffff1681565b63ffffffff166000908152600760205260409020805460018201546002909201549092565b6000805433600160a060020a03908116911614806128ca5750600160a060020a03331660009081526001602081905260409091205460ff161515145b15156128d557600080fd5b30600160a060020a0316318211156128ec57600080fd5b6128fa600c54600d546141fd565b90508082111561290957600080fd5b600d805483019055600160a060020a03831682156108fc0283604051600060405180830381858888f193505050501515610fd857600080fd5b61294a6148a6565b60025460009081906101009004600160a060020a0316816001604060020a03881681901115612a145781600160a060020a031662119f3489600060405160a0015260405160e060020a63ffffffff84160281526001604060020a03909116600482015260240160a060405180830381600087803b15156129c957600080fd5b6102c65a03f115156129da57600080fd5b50505060405180519060200180519060200180519060200180519060200180515050901515602089015263ffffffff909216875290945092505b6000876001604060020a03161115612aca5781600160a060020a031662119f3488600060405160a0015260405160e060020a63ffffffff84160281526001604060020a03909116600482015260240160a060405180830381600087803b1515612a7c57600080fd5b6102c65a03f11515612a8d57600080fd5b50505060405180519060200180519060200180519060200180519060200180515050901515608089015263ffffffff909216606088015290945092505b6000866001604060020a03161115612b805781600160a060020a031662119f3487600060405160a0015260405160e060020a63ffffffff84160281526001604060020a03909116600482015260240160a060405180830381600087803b1515612b3257600080fd5b6102c65a03f11515612b4357600080fd5b5050506040518051906020018051906020018051906020018051906020018051505090151560e089015263ffffffff90921660c088015290945092505b50600354600160a060020a0316602085015115612c4357600160a060020a0381166362b21ad76000875163ffffffff16600080604051602001526040518463ffffffff1660e060020a02815260040180846004811115612bdc57fe5b60ff168152602001836001604060020a03166001604060020a031681526020018281526020019350505050602060405180830381600087803b1515612c2057600080fd5b6102c65a03f11515612c3157600080fd5b505050604051805160ff166040870152505b846080015115612cfc5780600160a060020a03166362b21ad76000876060015163ffffffff16600080604051602001526040518463ffffffff1660e060020a02815260040180846004811115612c9557fe5b60ff168152602001836001604060020a03166001604060020a031681526020018281526020019350505050602060405180830381600087803b1515612cd957600080fd5b6102c65a03f11515612cea57600080fd5b505050604051805160ff1660a0870152505b8460e0015115612db65780600160a060020a03166362b21ad760008760c0015163ffffffff16600080604051602001526040518463ffffffff1660e060020a02815260040180846004811115612d4e57fe5b60ff168152602001836001604060020a03166001604060020a031681526020018281526020019350505050602060405180830381600087803b1515612d9257600080fd5b6102c65a03f11515612da357600080fd5b505050604051805160ff16610100870152505b505050509392505050565b60005433600160a060020a0390811691161480612dfc5750600160a060020a03331660009081526001602081905260409091205460ff161515145b1515612e0757600080fd5b60038054600160a060020a0395861673ffffffffffffffffffffffffffffffffffffffff1991821617909155600280549486166101000274ffffffffffffffffffffffffffffffffffffffff001990951694909417909355600480549285169284169290921790915560058054919093169116179055565b600954670100000000000000900460ff1681565b60005433600160a060020a03908116911614612eae57600080fd5b600160a060020a03811660009081526001602052604090205460ff161515612f3a57600160a060020a03811660009081526001602081905260408220805460ff191682179055815461ffff7401000000000000000000000000000000000000000080830482169093011690910275ffff0000000000000000000000000000000000000000199091161790555b50565b60005433600160a060020a0390811691161480612f785750600160a060020a03331660009081526001602081905260409091205460ff161515145b1515612f8357600080fd5b6009805460ff1990811660ff9a8b161761ff001916610100998b16999099029890981762ff0000191662010000978a1697909702969096176bffffffff000000000000000019166801000000000000000063ffffffff96909616959095029490941763ff00000019166301000000938816939093029290921765ffff00000000191664010000000061ffff92909216919091021766ff000000000000191666010000000000009186169190910217909155600b80549092169216919091179055565b601881565b600381565b60008061305a614771565b6000613064614771565b600354600160a060020a0316915060008080806130808a610d2e565b909450925063ffffffff841615156130a05783838698509850985061322c565b600091506130ad83613833565b9050600091505b60068210156131845785600160a060020a03166362b21ad760038c856000604051602001526040518463ffffffff1660e060020a028152600401808460048111156130fb57fe5b60ff168152602001836001604060020a03166001604060020a031681526020018281526020019350505050602060405180830381600087803b151561313f57600080fd5b6102c65a03f1151561315057600080fd5b505050604051805160ff16905085836006811061316957fe5b602002018181510161ffff16905250600191909101906130b4565b600091505b63ffffffff84166000908152600760205260409020600101548210156132225763ffffffff8416600090815260076020526040902060010180546131fb9190849081106131d257fe5b6000918252602091829020828204015460ff929091066101000a90048116906003840216614211565b85836006811061320757fe5b6020020181815161ffff910116905250600190910190613189565b8383869850985098505b5050505050509193909250565b60095460ff1681565b60095462010000900460ff1681565b600054600160a060020a031681565b60008060008061326e6148f2565b6132766148f2565b61327e6148f2565b60005433600160a060020a03908116911614806132b95750600160a060020a03331660009081526001602081905260409091205460ff161515145b15156132c457600080fd5b600354600160a060020a031615156132db57600080fd5b6002546101009004600160a060020a031615156132f757600080fd5b60035460025463ffffffff8a16600081815260076020526040808220600160a060020a039586169c506101009094049094169950975090955088916341b0eb53918891829051602001526040518363ffffffff1660e060020a0281526004018083600481111561336357fe5b60ff168152602001826001604060020a03166001604060020a0316815260200192505050602060405180830381600087803b15156133a057600080fd5b6102c65a03f115156133b157600080fd5b505050604051805190509450846040518059106133cb5750595b908082528060200260200182016040525092505b60008511156134ba5786600160a060020a03166362b21ad760008a63ffffffff16600189036000604051602001526040518463ffffffff1660e060020a0281526004018084600481111561342f57fe5b60ff168152602001836001604060020a03166001604060020a031681526020018281526020019350505050602060405180830381600087803b151561347357600080fd5b6102c65a03f1151561348457600080fd5b5050506040518051905083600187038151811061349d57fe5b60ff909216602092830290910190910152600019909401936133df565b838380516134cc929160200190614904565b5086600160a060020a03166341b0eb5360018a63ffffffff166000604051602001526040518363ffffffff1660e060020a0281526004018083600481111561351057fe5b60ff168152602001826001604060020a03166001604060020a0316815260200192505050602060405180830381600087803b151561354d57600080fd5b6102c65a03f1151561355e57600080fd5b505050604051805190509450846040518059106135785750595b908082528060200260200182016040525091505b60008511156136675786600160a060020a03166362b21ad760018a63ffffffff16600189036000604051602001526040518463ffffffff1660e060020a028152600401808460048111156135dc57fe5b60ff168152602001836001604060020a03166001604060020a031681526020018281526020019350505050602060405180830381600087803b151561362057600080fd5b6102c65a03f1151561363157600080fd5b5050506040518051905082600187038151811061364a57fe5b60ff9092166020928302909101909101526000199094019361358c565b6001840182805161367c929160200190614904565b5085600160a060020a03166388e9abb689600080604051602001526040518363ffffffff1660e060020a028152600401808363ffffffff1663ffffffff1681526020018260018111156136cb57fe5b60ff16815260200192505050602060405180830381600087803b15156136f057600080fd5b6102c65a03f1151561370157600080fd5b5050506040518051905094508460405180591061371b5750595b908082528060200260200182016040525090505b60008511156138015785600160a060020a0316635b626339896000600189036000604051602001526040518463ffffffff1660e060020a028152600401808463ffffffff1663ffffffff16815260200183600181111561378b57fe5b60ff1681526020018281526020019350505050602060405180830381600087803b15156137b757600080fd5b6102c65a03f115156137c857600080fd5b505050604051805190508160018703815181106137e157fe5b63ffffffff9092166020928302909101909101526000199094019361372f565b600284018180516138169291602001906149aa565b505050505050505050565b600954640100000000900461ffff1681565b600060016064825b8160ff168360ff1610156138ab5750600281830160ff16045b8160ff168360ff1610156138a657600260ff848401160460ff811660009081526008602052604090205490915063ffffffff908116908616101561389a578091506138a1565b8060010192505b613854565b61383b565b50909392505050565b60005433600160a060020a039081169116146138cf57600080fd5b600160a060020a03811660009081526001602081905260409091205460ff1615151415612f3a57600160a060020a03166000908152600160205260408120805460ff19169055805475ffff0000000000000000000000000000000000000000198116740100000000000000000000000000000000000000009182900461ffff9081166000190116909102179055565b60008060008060008061397088613833565b945061397b89613833565b93508492508360030160ff168560ff1611156139a257600260ff60038601160492506139ac565b600260ff86160492505b600191508260ff1660140a8360ff1660150a6103e8028115156139cb57fe5b048002905060ff6003850181169086161180156139f357508260020260ff168460030160ff16115b80613a1a57508360030160ff168560ff1611158015613a1a57508260020260ff168560ff16115b15613a29576014601582020490505b8615613a3f57620f4240601e8202049150613a4b565b620f4240600a82020491505b60ff60058601811690851610613a8457600560ff868603160460ff1660020a63ffffffff168263ffffffff16811515613a8057fe5b0491505b50979650505050505050565b6009546301000000900460ff1681565b600b5460ff1681565b6000806000613ab6614799565b600354600160a060020a031691506000826307202460878360405160e0015260405160e060020a63ffffffff84160281526001604060020a03909116600482015260240160e060405180830381600087803b1515613b1357600080fd5b6102c65a03f11515613b2457600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805190602001805160e08a0152505063ffffffff91821660808801908152600160a060020a039093166040880152921660208601526001604060020a039092168452915051613b9a8360800151613833565b94509450505050915091565b60025460009081908190819060ff1615613bbf57600080fd5b600554600160a060020a03161515613bd657600080fd5b600554600160a060020a031693508363f31dec5a8660006040516060015260405163ffffffff83811660e060020a028252919091166004820152602401606060405180830381600087803b1515613c2c57600080fd5b6102c65a03f11515613c3d57600080fd5b50505060405180519060200180519060200180519295509093505063ffffffff16905033600160a060020a0390811690831614613c7957600080fd5b6000831115613cdf5783600160a060020a0316634377c1cf8660405163ffffffff83811660e060020a028252919091166004820152602401600060405180830381600087803b1515613cca57600080fd5b6102c65a03f11515613cdb57600080fd5b5050505b8463ffffffff167f7896e0932299b049700f86ae09c1e775b823c8527fb25549987819578913046a60405160405180910390a25050505050565b600954610100900460ff1681565b600a5481565b600681565b600080613d3d614799565b600354600160a060020a0316915081630720246086600060405160e0015260405160e060020a63ffffffff84160281526001604060020a03909116600482015260240160e060405180830381600087803b1515613d9957600080fd5b6102c65a03f11515613daa57600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805190602001805160e08901525063ffffffff90811660c088015290811660a08701529081166080860152600160a060020a0391821660408601908152921660208501526001604060020a0390921683529085169051600160a060020a03161492505b505092915050565b600c5481565b600554600160a060020a031681565b6009546601000000000000900460ff1681565b60025460ff1681565b60005433600160a060020a03908116911614613e8557600080fd5b600160a060020a03811615612f3a5760008054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff1990911617905550565b600454600160a060020a031681565b60008161ffff168361ffff161115613eeb5750808203613eef565b5060005b92915050565b600080600080613f03614771565b613f0b614771565b6000613f168861423c565b600954939a509098509094509250613f4e906601000000000000900460ff1660020160c08a0151600e54600160a060020a0316611538565b9450600090505b6009546601000000000000900460ff1661ffff8216108015613f7c57506000835161ffff16115b8015613f8d57506000825161ffff16115b156140805760a082015161ffff1660a084015161ffff16111561404257600261ffff82160661ffff166000141561400457613ff98260005b6020020151613ff46020860151606087015160408701518760045b60200201518b60ff168861ffff1614610e1b565b613ed0565b61ffff16825261403d565b61402a8360005b6020020151613ff4602085015160608601516040880151886004613fe0565b8360005b61ffff90921660209290920201525b614078565b600261ffff82160661ffff16156140665761405e826000613fc5565b82600061402e565b61407183600061400b565b61ffff1683525b600101613f55565b815161ffff16835161ffff16101593505050509193509193565b6005546000908190819081908190600160a060020a031615156140bc57600080fd5b85156140cb57600094506141f3565b600554600160a060020a031693508363bb583f198860006040516060015260405163ffffffff83811660e060020a028252919091166004820152602401606060405180830381600087803b151561412157600080fd5b6102c65a03f1151561413257600080fd5b50505060405180519060200180519060200180516009549396509194509092505063ffffffff6001840181169160ff6701000000000000009091041690851681151561417a57fe5b04820163ffffffff161115156141ee5783600160a060020a0316634377c1cf8860405163ffffffff83811660e060020a028252919091166004820152602401600060405180830381600087803b15156141d257600080fd5b6102c65a03f115156141e357600080fd5b5050508094506141f3565b600094505b5050505092915050565b6000808284101561420a57fe5b5050900390565b600082820283158061422d575082848281151561422a57fe5b04145b151561423557fe5b9392505050565b6000614246614771565b6000614250614771565b600080808061425f895161304f565b909950975093506000925061427760608a015161304f565b9097509550925061428884846143c3565b61ffff90811660a08c01521660408a01526142a78460208b0151614589565b896040018181510161ffff169052506142c48360808b0151614589565b8960a0018181510161ffff169052506142e18460208b015161467f565b91506142f1838a6080015161467f565b90508860400151602088015102602088018181510161ffff169052506040890151606088015102606088018181510161ffff1690525060a0890151602086015102602086018181510161ffff1690525060a0890151606086015102606086018181510161ffff1690525081604088015102604088018181510161ffff1690525081608088015102608088018181510161ffff1690525080604086015102604086018181510161ffff1690525080608086015102608086018181510161ffff169052509698959750939550919392505050565b600080808080805b63ffffffff881660009081526007602052604090205482101561454e575060005b63ffffffff87166000908152600760205260409020548110156145435763ffffffff8716600090815260076020526040902080548290811061442a57fe5b60009182526020808320818304015463ffffffff8c16845260078252604084208054929093066101000a900460ff169260069290918690811061446957fe5b60009182526020808320818304015460ff928290066101000a90048216845283019390935260409091019020541614156144a257600193505b63ffffffff881660009081526007602052604090208054839081106144c357fe5b60009182526020808320818304015463ffffffff8b16845260078252604084208054929093066101000a900460ff169260069290918590811061450257fe5b60009182526020808320818304015460ff928290066101000a900482168452830193909352604090910190205416141561453b57600192505b6001016143ec565b6001909101906143cb565b83156145665760095462010000900460ff1695909501945b821561457e5760095462010000900460ff1694909401935b505050509250929050565b63ffffffff8216600090815260076020526040812060020154819081908180821115614668575060009250825b818410156146685763ffffffff871660009081526007602052604090206002018054859081106145e257fe5b90600052602060002090600891828204019190066004029054906101000a900463ffffffff169050856000015163ffffffff168163ffffffff1614806146375750856060015163ffffffff168163ffffffff16145b8061465157508560c0015163ffffffff168163ffffffff16145b1561465d576001830192505b6001909301926145b6565b60095460ff90811684021694505050505092915050565b600080805b63ffffffff8516600090815260076020526040902054821015613e315763ffffffff851660009081526007602052604090208054839081106146c257fe5b6000918252602091829020828204015460ff918390066101000a90041691508401511561470657836040015160ff168160ff16141561470657600183019250614766565b83608001511561472d578360a0015160ff168160ff16141561472d57600183019250614766565b8360e00151156147555783610100015160ff168160ff16141561475557600183019250614766565b600954610100900460ff1692909202915b600190910190614684565b60c06040519081016040526006815b6000815260001990910190602001816147805790505090565b610100604051908101604090815260008083526020830181905290820152606081016147c36148f2565b8152600060208201819052604082018190526060820181905260809091015290565b610200604051908101604090815260008083526020830181905290820181905260608201819052608082015260a0810161481d614771565b815260200161482a614a55565b815260006020820181905260409091015290565b60c06040519081016040908152600080835260208301819052908201819052606082018190526080820181905260a082015290565b6102e0604051908101604052600081526020810161488f6148a6565b8152600060208201819052604082015260600161482a5b6101206040519081016040908152600080835260208301819052908201819052606082018190526080820181905260a0820181905260c0820181905260e0820181905261010082015290565b60206040519081016040526000815290565b82805482825590600052602060002090601f0160209004810192821561499a5791602002820160005b8382111561496b57835183826101000a81548160ff021916908360ff160217905550926020019260010160208160000104928301926001030261492d565b80156149985782816101000a81549060ff021916905560010160208160000104928301926001030261496b565b505b506149a6929150614a6f565b5090565b82805482825590600052602060002090600701600890048101928215614a495791602002820160005b83821115614a1757835183826101000a81548163ffffffff021916908363ffffffff16021790555092602001926004016020816003010492830192600103026149d3565b8015614a475782816101000a81549063ffffffff0219169055600401602081600301049283019260010302614a17565b505b506149a6929150614a90565b606060405190810160405260008152600260208201614780565b614a8d91905b808211156149a657805460ff19168155600101614a75565b90565b614a8d91905b808211156149a657805463ffffffff19168155600101614a965600a165627a7a7230582061caabcde420fb9a8f926ce3c35c312fbcdce18e7260d0f6d548c8de0b58a5130029

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000abc1c404424bdf24c19a5cc5ef8f47781d18eb3e0000000000000000000000001fc7bd85293f3982f40d52698df8d26be89360d600000000000000000000000065c440683088134aef7af22f3fad6a9ee5c19fed00000000000000000000000075aa01dc00f6aeefe14bd58a5b6cbb091c6dc57b

-----Decoded View---------------
Arg [0] : _dataContract (address): 0xABC1c404424BDF24C19A5cC5EF8F47781D18Eb3E
Arg [1] : _worldContract (address): 0x1fC7bD85293f3982f40D52698DF8D26be89360d6
Arg [2] : _tradeContract (address): 0x65c440683088134aEF7aF22F3FAd6A9eE5C19fED
Arg [3] : _castleContract (address): 0x75AA01dC00F6aEeFe14bd58A5B6cbb091C6dC57B

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000abc1c404424bdf24c19a5cc5ef8f47781d18eb3e
Arg [1] : 0000000000000000000000001fc7bd85293f3982f40d52698df8d26be89360d6
Arg [2] : 00000000000000000000000065c440683088134aef7af22f3fad6a9ee5c19fed
Arg [3] : 00000000000000000000000075aa01dc00f6aeefe14bd58a5b6cbb091c6dc57b


Swarm Source

bzzr://61caabcde420fb9a8f926ce3c35c312fbcdce18e7260d0f6d548c8de0b58a513

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.