Latest 25 txns From a total of 27024 Transactions
(+1 PendingTxn)

TxHash Age From To Value [TxFee]
0x428d63a9a40461ef3a232102c0931ed52dbc7d6ffe70b5bd7b1223d9498e2399(pending)0x2b69342619b315c319a56cea3528cc15921e1c43  IN  0xcaef67f72114b4d2b4f43e7407455285b7de8de50.001 Ether(Pending)
0x6b669261bdfe8e360feeb5364bccac7e1b15bc74bf6087eb7b189adc951df8e858 mins ago0x02ad01cb456d36abf62d9acfb4a5e881e48955f5  IN   Etheremon_Gym0.001 Ether0.000811132
0x9df805ac53f01fb4f534e18d34efd698aeeddc1f17396aedf1128fda57ce309e1 hr 32 mins ago0x4abd4859934fb77418fc4496a21ae90ca9912ea6  IN   Etheremon_Gym0.001 Ether0.00110802912
0x7acbd4168d2e862eb08bf0deb6303e81057f1567a9bcea4c6b460737bc83f8b41 hr 59 mins ago0x4abd4859934fb77418fc4496a21ae90ca9912ea6  IN   Etheremon_Gym0.001 Ether0.00106875984
0x42a27fcc2017c23e6fd1b1406204414e98f5ea57081d907db670f25e277d32802 hrs 2 mins ago0x02ad01cb456d36abf62d9acfb4a5e881e48955f5  IN   Etheremon_Gym0.001 Ether0.000778664
0x1e0af3bafd89414d7f3042c51a211e14be8d799be02b3f793933dbc5040f523a2 hrs 18 mins ago0x4abd4859934fb77418fc4496a21ae90ca9912ea6  IN   Etheremon_Gym0.001 Ether0.0009940944
0x27464c9f1495cea0c83982c1f0814c30a4022c89d018353da2baea1b2fc79acb2 hrs 28 mins ago0x4abd4859934fb77418fc4496a21ae90ca9912ea6  IN   Etheremon_Gym0.001 Ether0.0014286657
0x66100df85c426c28a78ec1cae2d115df4bae040050c406a015e7b186f1924c8f2 hrs 43 mins ago0x4abd4859934fb77418fc4496a21ae90ca9912ea6  IN   Etheremon_Gym0.001 Ether0.001724077125
0x37fdffd6b301a23502ea4a0f083c10ef3ec7aeb96349674ee898451a4609c63f3 hrs 9 mins ago0xd130b116a536965b9b08d955a53c2482ea36fe39  IN   Etheremon_Gym0.001 Ether0.00465754
0x7c1651b37b32247766464f37a133a75f5a032632edc4223952e913da4f7d1b633 hrs 28 mins ago0x1bdf1f5dd2547920f72cdda2da78abe1f142c572  IN   Etheremon_Gym0.001 Ether0.00098254
0x2c25e854eb37c554de30455a96cec87b88eb41f999bc779c5b81f2c6d4d0a8a64 hrs 10 mins ago0x83ac654be75487b9cfcc80117cdfb4a4c70b68a1  IN   Etheremon_Gym0.001 Ether0.00046372
0x007d9b59cec0bf5087e1a8c666ff4524aa0ef57255cae13671ca2afc22dfc9484 hrs 20 mins ago0x06edf0354e361e93d7e1388d59dd34ff9defce5f  IN   Etheremon_Gym0.001 Ether0.00081644
0x24189aedd70502c49c3da1c8ec4e72a17965683130a9a02172e41cb2ce57c68d4 hrs 22 mins ago0x06edf0354e361e93d7e1388d59dd34ff9defce5f  IN   Etheremon_Gym0.001 Ether0.00101854
0xadf06985a16068a919961434660b732b72c76e982388605116b416f6c5a9f2cd4 hrs 22 mins ago0xedb7cf2aa0159569286d5874c6dd7fa8bea6b713  IN   Etheremon_Gym0.001 Ether0.0009893286
0xf2444a5448f5b538ff55c86ade1cf3fe010e5841703050b2c86796a634e056c74 hrs 25 mins ago0xedb7cf2aa0159569286d5874c6dd7fa8bea6b713  IN   Etheremon_Gym0.001 Ether0.000601369
0x749019a5ebc2942f589ef1acb79ca7472b6d784ed901252f5ed88fef5435dfe36 hrs 28 mins ago0x4abd4859934fb77418fc4496a21ae90ca9912ea6  IN   Etheremon_Gym0.001 Ether0.001193484
0x5c83409a0200bd19c7bc23821d032211e95ba638222c0cfcac49156eabc28b056 hrs 46 mins ago0x6815daa1aa3d44d814a63656ab56af30298c6134  IN   Etheremon_Gym0.001 Ether0.000591243
0x878f3c5526610b3e239bd6a74d40ed7547527fde2a649036ae0720e0bbde630d6 hrs 46 mins ago0x4bc3d0a3900b7e5a908fbfb25e5554f3f3018796  IN   Etheremon_Gym0.001 Ether0.000573786
0x93bfd7559b8dbc2f142eae0d942f4fd0fd179830b9bdb61c2829a0188c1b82fc6 hrs 53 mins ago0x6815daa1aa3d44d814a63656ab56af30298c6134  IN   Etheremon_Gym0.001 Ether0.000534828
0x00498bde2ea209c1032cdda6457ae9dedf37f68b975c113746e61bf76de905346 hrs 56 mins ago0x6815daa1aa3d44d814a63656ab56af30298c6134  IN   Etheremon_Gym0.001 Ether0.000682242
0xbc178cf47d982313ff8141f0557b684eb5350de469e6b8bfe42f4e094b1efcea7 hrs 18 mins ago0x4bc3d0a3900b7e5a908fbfb25e5554f3f3018796  IN   Etheremon_Gym0.001 Ether0.000574797
0x3b0a39347245189a77320645b799e197435fc314a9cf35d2c4780fefcda194447 hrs 24 mins ago0x4bc3d0a3900b7e5a908fbfb25e5554f3f3018796  IN   Etheremon_Gym0.001 Ether0.000574977
0x6c0ecc1d31c97327cba69dcc255e6fa4e6247e65aaeb66ceed356c9122b37a247 hrs 26 mins ago0x43d7108f8493c8675158a29d7860af60f2218de4  IN   Etheremon_Gym0.001 Ether0.000597966
0x51ebd4d8e9670ce13bcc9d49dde12e6c80dd8a7ec0aa132c42810fe6fdfa6f1c7 hrs 29 mins ago0x4bc3d0a3900b7e5a908fbfb25e5554f3f3018796  IN   Etheremon_Gym0.001 Ether0.0005823
0xdd8bceaf0d34c26634cdfb72fca8ff9b150622a7933f0ab2988ef5581484abdd7 hrs 38 mins ago0x4bc3d0a3900b7e5a908fbfb25e5554f3f3018796  IN   Etheremon_Gym0.001 Ether0.000625377
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
 Latest 3 Internal Transactions

ParentTxHash Block Age From To Value
0x0dfa860cab5f89967552e0587cb859f21db216c931a0f1d5a2e6e86fb37ef8b7646822917 days 1 hr ago0xcaef67f72114b4d2b4f43e7407455285b7de8de50xf35728a27318156ae04ba8a6dff8074fe98b19b83.824 Ether
0xc1855e38c91a9083b8836c0df28e0d4b1ddc918de3f5c40a211b49ff3b791607607271183 days 2 hrs ago0xcaef67f72114b4d2b4f43e7407455285b7de8de50xf35728a27318156ae04ba8a6dff8074fe98b19b87.047 Ether
0xfed4746bac5e4253d46065263443b02e4fecccc46dd2176539761e39f60ac79c5354302206 days 19 hrs ago0xcaef67f72114b4d2b4f43e7407455285b7de8de50xd3b6d520906bb14c0eab0faf7a8b13fe31f8cbda14.505 Ether
[ Download CSV Export  ] 
Warning: The Compiled Contract might be susceptible to ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity), NestedArrayFunctionCallDecoder (medium-severity) SolidityCompiler Bugs.

Contract Source Code Verified (Exact Match)
Contract Name: EtheremonGym
Compiler Text: v0.4.19+commit.c4cbbb05
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

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);
}

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 EtheremonGym is EtheremonEnum, BasicAccessControl, SafeMath {
    uint8 constant public STAT_COUNT = 6;
    
    struct MonsterObjAcc {
        uint64 monsterId;
        uint32 classId;
        address trainer;
        string name;
        uint32 exp;
        uint32 createIndex;
        uint32 lastClaimIndex;
        uint createTime;
    }
    
    struct AttackData {
        uint32 objClassId;
        address trainee;
        uint8 objLevel;
        uint8 winCount;
        uint32 winExp;
        uint32 loseExp;
    }
    
    struct HpData {
        uint16 aHpAttack;
        uint16 aHpAttackCritical;
        uint16 bHpAttack;
        uint16 bHpAttackCritical;        
    }
    
    struct GymTrainer {
        uint32 classId;
        uint8[6] statBases;
    }
    
    struct TrainingLog {
        uint8[3] trainers;
        uint8 trainerLevel;
        uint64 objId;
        uint8 objLevel;
        uint8 ran;
    }
    
    struct CacheClassInfo {
        uint8[] types;
        uint8[] steps;
        uint32[] ancestors;
    }
    
    mapping(uint8 => GymTrainer) public gymTrainers;
    mapping(address => TrainingLog) public trainees;
    mapping(uint8 => uint8) typeAdvantages;
    mapping(uint32 => CacheClassInfo) cacheClasses;
    mapping(uint8 => uint32) levelExps;
    mapping(uint8 => uint32) levelExpGains;
    uint256 public gymFee = 0.001 ether;
    uint8 public maxTrainerLevel = 5;
    uint8 public totalTrainer = 0;
    uint8 public maxRandomRound = 4;
    uint8 public typeBuffPercentage = 20;
    uint8 public minHpDeducted = 10;
    uint8 public expPercentage = 70;
    
    // contract
    address public worldContract;
    address public dataContract;

   // modifier
    modifier requireDataContract {
        require(dataContract != address(0));
        _;
    }
    
    modifier requireWorldContract {
        require(worldContract != address(0));
        _;
    }
    
    // constructor
    function EtheremonGym(address _dataContract, address _worldContract) public {
        dataContract = _dataContract;
        worldContract = _worldContract;
    }
    
    
     // 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 fastSetCacheClassInfo(uint32 _classId1, uint32 _classId2, uint32 _classId3, uint32 _classId4) onlyModerators requireDataContract requireWorldContract external {
        setCacheClassInfo(_classId1);
        setCacheClassInfo(_classId2);
        setCacheClassInfo(_classId3);
        setCacheClassInfo(_classId4);
    }
    
    function presetGymTrainer() onlyModerators external {
        GymTrainer storage trainer1 = gymTrainers[1];
        trainer1.classId = 12;
        trainer1.statBases[0] = 85;
        trainer1.statBases[1] = 95;
        trainer1.statBases[2] = 65;
        trainer1.statBases[3] = 50;
        trainer1.statBases[4] = 50;
        trainer1.statBases[5] = 50;
        GymTrainer storage trainer2 = gymTrainers[2];
        trainer2.classId = 15;
        trainer2.statBases[0] = 50;
        trainer2.statBases[1] = 55;
        trainer2.statBases[2] = 85;
        trainer2.statBases[3] = 85;
        trainer2.statBases[4] = 40;
        trainer2.statBases[5] = 75;
        GymTrainer storage trainer3 = gymTrainers[3];
        trainer3.classId = 8;
        trainer3.statBases[0] = 110;
        trainer3.statBases[1] = 60;
        trainer3.statBases[2] = 40;
        trainer3.statBases[3] = 60;
        trainer3.statBases[4] = 40;
        trainer3.statBases[5] = 40;
        GymTrainer storage trainer4 = gymTrainers[4];
        trainer4.classId = 4;
        trainer4.statBases[0] = 54;
        trainer4.statBases[1] = 69;
        trainer4.statBases[2] = 58;
        trainer4.statBases[3] = 75;
        trainer4.statBases[4] = 75;
        trainer4.statBases[5] = 70;
        GymTrainer storage trainer5 = gymTrainers[5];
        trainer5.classId = 6;
        trainer5.statBases[0] = 50;
        trainer5.statBases[1] = 50;
        trainer5.statBases[2] = 50;
        trainer5.statBases[3] = 105;
        trainer5.statBases[4] = 55;
        trainer5.statBases[5] = 95;
        GymTrainer storage trainer6 = gymTrainers[6];
        trainer6.classId = 13;
        trainer6.statBases[0] = 55;
        trainer6.statBases[1] = 90;
        trainer6.statBases[2] = 95;
        trainer6.statBases[3] = 45;
        trainer6.statBases[4] = 35;
        trainer6.statBases[5] = 35;
        GymTrainer storage trainer7 = gymTrainers[7];
        trainer7.classId = 7;
        trainer7.statBases[0] = 85;
        trainer7.statBases[1] = 60;
        trainer7.statBases[2] = 73;
        trainer7.statBases[3] = 75;
        trainer7.statBases[4] = 80;
        trainer7.statBases[5] = 50;
        GymTrainer storage trainer8 = gymTrainers[8];
        trainer8.classId = 24;
        trainer8.statBases[0] = 140;
        trainer8.statBases[1] = 135;
        trainer8.statBases[2] = 70;
        trainer8.statBases[3] = 77;
        trainer8.statBases[4] = 90;
        trainer8.statBases[5] = 50;
        GymTrainer storage trainer9 = gymTrainers[9];
        trainer9.classId = 16;
        trainer9.statBases[0] = 70;
        trainer9.statBases[1] = 105;
        trainer9.statBases[2] = 80;
        trainer9.statBases[3] = 60;
        trainer9.statBases[4] = 80;
        trainer9.statBases[5] = 90;
        totalTrainer = 9;
    }
    
    function setGymTrainer(uint8 _trainerId, uint32 _classId, uint8 _s0, uint8 _s1, uint8 _s2, uint8 _s3, uint8 _s4, uint8 _s5) onlyModerators external {
        GymTrainer storage trainer = gymTrainers[_trainerId];
        if (trainer.classId == 0)
            totalTrainer += 1;
        trainer.classId = _classId;
        trainer.statBases[0] = _s0;
        trainer.statBases[1] = _s1;
        trainer.statBases[2] = _s2;
        trainer.statBases[3] = _s3;
        trainer.statBases[4] = _s4;
        trainer.statBases[5] = _s5;
    }
    
    function setContract(address _dataContract, address _worldContract) onlyModerators external {
        dataContract = _dataContract;
        worldContract = _worldContract;
    }
    
    function setConfig(uint256 _gymFee, uint8 _maxTrainerLevel, uint8 _maxRandomRound, uint8 _typeBuffPercentage, 
        uint8 _minHpDeducted, uint8 _expPercentage) onlyModerators external {
        gymFee = _gymFee;
        maxTrainerLevel = _maxTrainerLevel;
        maxRandomRound = _maxRandomRound;
        typeBuffPercentage = _typeBuffPercentage;
        minHpDeducted = _minHpDeducted;
        expPercentage = _expPercentage;
    }
    
    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;
        }
    }
    
    function genLevelExpGain() onlyModerators external {
        levelExpGains[1] = 31;
        levelExpGains[2] = 33;
        levelExpGains[3] = 34;
        levelExpGains[4] = 36;
        levelExpGains[5] = 38;
        levelExpGains[6] = 40;
        levelExpGains[7] = 42;
        levelExpGains[8] = 44;
        levelExpGains[9] = 46;
        levelExpGains[10] = 48;
    }
    
    function setLevelExpGain(uint8 _level, uint32 _exp) onlyModerators external {
        levelExpGains[_level] = _exp;
    }
    
    function withdrawEther(address _sendTo, uint _amount) onlyModerators external {
        if (_amount > this.balance) {
            revert();
        }
        _sendTo.transfer(_amount);
    }
    
    // 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 getTrainerInfo(uint8 _trainerId) constant external returns(uint32, uint8, uint8, uint8, uint8, uint8, uint8) {
        GymTrainer memory trainer = gymTrainers[_trainerId];
        return (trainer.classId, trainer.statBases[0], trainer.statBases[1], trainer.statBases[2], trainer.statBases[3],
            trainer.statBases[4], trainer.statBases[5]);
    }
    
    function getRandom(uint8 maxRan, uint8 index) constant public returns(uint8) {
        uint256 genNum = uint256(block.blockhash(block.number-1));
        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;
            if (exp < levelExps[currentIndex])
                maxIndex = currentIndex;
            else
                minIndex = currentIndex + 1;
        }
        return minIndex;
    }
    
    function getGainExp(uint8 xLevel, uint8 yLevel) constant public returns(uint32 winExp, uint32 loseExp){
        winExp = levelExpGains[yLevel] * expPercentage / 100;
        if (xLevel > yLevel) {
            if (xLevel > yLevel + 10) {
                winExp = 5;
            } else {
                winExp /= uint32(3) ** (xLevel - yLevel) / uint32(2) ** (xLevel - yLevel);
                if (winExp < 5)
                    winExp = 5;
            }
        }
        loseExp = winExp / 3;
    }
    
    function safeDeduct(uint16 a, uint16 b) pure private returns(uint16){
        if (a > b) {
            return a - b;
        }
        return 0;
    }
    
    function getTypeSupport(uint32 _aClassId, uint32 _bClassId) constant private returns (bool aHasAdvantage, bool bHasAdvantage) {
        // check types 
        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;
                }
            }
        }
    }
    
    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 attack(uint8 _index, uint8 _ran, uint16[6] _aStats, uint16[6] _bStats) constant public returns(bool win) {
        if (_ran < _index * maxRandomRound)
            _ran = maxRandomRound;
        else
            _ran = _ran - _index * maxRandomRound;
            
        uint16 round = 0;
        uint16 aHp = _aStats[0];
        uint16 bHp = _bStats[0];
        if (_aStats[5] > _bStats[5]) {
            while (round < maxRandomRound && aHp > 0 && bHp > 0) {
                if (round % 2 == 0) {
                    // a attack 
                    bHp = safeDeduct(bHp, calHpDeducted(_aStats[1], _aStats[3], _bStats[2], _bStats[4], round==_ran));
                } else {
                    aHp = safeDeduct(aHp, calHpDeducted(_bStats[1], _bStats[3], _aStats[2], _aStats[4], round==_ran));
                }
                round++;
            }
        } else {
            while (round < maxRandomRound && aHp > 0 && bHp > 0) {
                if (round % 2 != 0) {
                    bHp = safeDeduct(bHp, calHpDeducted(_aStats[1], _aStats[3], _bStats[2], _bStats[4], round==_ran));
                } else {
                    aHp = safeDeduct(aHp, calHpDeducted(_bStats[1], _bStats[3], _aStats[2], _aStats[4], round==_ran));
                }
                round++;
            }
        }
        
        win = aHp >= bHp;
    }
    
    function attackTrainer(uint8 _index, uint8 _ran, uint8 _trainerId, uint8 _trainerLevel, uint32 _objClassId, uint16[6] _objStats) constant public returns(bool result) {
        GymTrainer memory trainer = gymTrainers[_trainerId];
        uint16[6] memory trainerStats;
        uint i = 0;
        for (i=0; i < STAT_COUNT; i+=1) {
            trainerStats[i] = trainer.statBases[i];
        }
        for (i=0; i < cacheClasses[trainer.classId].steps.length; i++) {
            trainerStats[i] += uint16(safeMult(cacheClasses[trainer.classId].steps[i], _trainerLevel*3));
        }
        
        bool objHasAdvantage;
        bool trainerHasAdvantage;
        (objHasAdvantage, trainerHasAdvantage) = getTypeSupport(_objClassId, trainer.classId);
        uint16 originAttack = _objStats[1];
        uint16 originAttackSpecial = _objStats[3];
        if (objHasAdvantage) {
            _objStats[1] += _objStats[1] * typeBuffPercentage / 100;
            _objStats[3] += _objStats[3] * typeBuffPercentage / 100;
        }
        if (trainerHasAdvantage) {
            trainerStats[1] += trainerStats[1] * typeBuffPercentage / 100;
            trainerStats[3] += trainerStats[3] * typeBuffPercentage / 100;
        }
        result = attack(_index, _ran, _objStats, trainerStats);
        _objStats[1] = originAttack;
        _objStats[3] = originAttackSpecial;
    }
    
    function getObjInfo(uint64 _objId) constant public returns(uint32 classId, address trainee, uint8 level) {
        EtheremonDataBase data = EtheremonDataBase(dataContract);
        MonsterObjAcc memory obj;
        (obj.monsterId, classId, trainee, obj.exp, obj.createIndex, obj.lastClaimIndex, obj.createTime) = data.getMonsterObj(_objId);
        level = getLevel(obj.exp);
    }
    
    function startTraining(uint64 _objId, uint8 _trainerLevel, uint8 _t1, uint8 _t2, uint8 _t3) isActive requireDataContract requireWorldContract payable external {
        if (_trainerLevel > maxTrainerLevel)
            revert();
        if (msg.value != gymFee)
            revert();
        if (_t1 == _t2 || _t1 == _t3 || _t2 == _t3)
            revert();
        if (_t1 == 0 || _t2 == 0 || _t3 == 0 || _t1 > totalTrainer || _t2 > totalTrainer || _t3 > totalTrainer)
            revert();

        AttackData memory att;
        (att.objClassId, att.trainee, att.objLevel) = getObjInfo(_objId);
        if (msg.sender != att.trainee)
            revert();

        uint i = 0;
        uint16[6] memory objStats;
        EtheremonDataBase data = EtheremonDataBase(dataContract);
        for (i=0; i < STAT_COUNT; i+=1) {
            objStats[i] = data.getElementInArrayType(ArrayType.STAT_BASE, _objId, i);
        }
        for (i=0; i < cacheClasses[att.objClassId].steps.length; i++) {
            objStats[i] += uint16(safeMult(cacheClasses[att.objClassId].steps[i], att.objLevel*3));
        }
        
        att.winCount = 0;
        uint8 ran = getRandom(maxRandomRound*3, 0);
        if (attackTrainer(0, ran, _t1, _trainerLevel, att.objClassId, objStats))
            att.winCount += 1;
        if (attackTrainer(1, ran, _t2, _trainerLevel, att.objClassId, objStats))
            att.winCount += 1;
        if (attackTrainer(2, ran, _t3, _trainerLevel, att.objClassId, objStats))
            att.winCount += 1;

        (att.winExp, att.loseExp) = getGainExp(att.objLevel, _trainerLevel);
        EtheremonGateway gateway = EtheremonGateway(worldContract);
        gateway.increaseMonsterExp(_objId, att.winCount * att.winExp + (3 - att.winCount) * att.loseExp);
        
        TrainingLog storage trainingLog = trainees[msg.sender];
        trainingLog.trainers[0] = _t1;
        trainingLog.trainers[1] = _t2;
        trainingLog.trainers[2] = _t3;
        trainingLog.trainerLevel = _trainerLevel;
        trainingLog.objId = _objId;
        trainingLog.objLevel = att.objLevel;
        trainingLog.ran = ran;
    }
    
    function getTrainingLog(address _trainee) constant external returns(uint8, uint8, uint8, uint64, uint8, uint8, uint8) {
        TrainingLog memory trainingLog = trainees[_trainee];
        return (trainingLog.trainers[0], trainingLog.trainers[1], trainingLog.trainers[2], 
            trainingLog.objId, trainingLog.trainerLevel, trainingLog.objLevel, trainingLog.ran);
    }
}

    Contract ABI  
[{"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":false,"inputs":[{"name":"_gymFee","type":"uint256"},{"name":"_maxTrainerLevel","type":"uint8"},{"name":"_maxRandomRound","type":"uint8"},{"name":"_typeBuffPercentage","type":"uint8"},{"name":"_minHpDeducted","type":"uint8"},{"name":"_expPercentage","type":"uint8"}],"name":"setConfig","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"worldContract","outputs":[{"name":"","type":"address"}],"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":"_classId1","type":"uint32"},{"name":"_classId2","type":"uint32"},{"name":"_classId3","type":"uint32"},{"name":"_classId4","type":"uint32"}],"name":"fastSetCacheClassInfo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_trainerId","type":"uint8"},{"name":"_classId","type":"uint32"},{"name":"_s0","type":"uint8"},{"name":"_s1","type":"uint8"},{"name":"_s2","type":"uint8"},{"name":"_s3","type":"uint8"},{"name":"_s4","type":"uint8"},{"name":"_s5","type":"uint8"}],"name":"setGymTrainer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"genLevelExpGain","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_dataContract","type":"address"},{"name":"_worldContract","type":"address"}],"name":"setContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"expPercentage","outputs":[{"name":"","type":"uint8"}],"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":false,"inputs":[{"name":"_level","type":"uint8"},{"name":"_exp","type":"uint32"}],"name":"setLevelExpGain","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_objId","type":"uint64"}],"name":"getObjInfo","outputs":[{"name":"classId","type":"uint32"},{"name":"trainee","type":"address"},{"name":"level","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_trainerId","type":"uint8"}],"name":"getTrainerInfo","outputs":[{"name":"","type":"uint32"},{"name":"","type":"uint8"},{"name":"","type":"uint8"},{"name":"","type":"uint8"},{"name":"","type":"uint8"},{"name":"","type":"uint8"},{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_isMaintaining","type":"bool"}],"name":"UpdateMaintaining","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_index","type":"uint8"},{"name":"_ran","type":"uint8"},{"name":"_aStats","type":"uint16[6]"},{"name":"_bStats","type":"uint16[6]"}],"name":"attack","outputs":[{"name":"win","type":"bool"}],"payable":false,"stateMutability":"view","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":false,"inputs":[{"name":"_newModerator","type":"address"}],"name":"AddModerator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalTrainer","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint8"}],"name":"gymTrainers","outputs":[{"name":"classId","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"gymFee","outputs":[{"name":"","type":"uint256"}],"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":"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":"_trainee","type":"address"}],"name":"getTrainingLog","outputs":[{"name":"","type":"uint8"},{"name":"","type":"uint8"},{"name":"","type":"uint8"},{"name":"","type":"uint64"},{"name":"","type":"uint8"},{"name":"","type":"uint8"},{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"xLevel","type":"uint8"},{"name":"yLevel","type":"uint8"}],"name":"getGainExp","outputs":[{"name":"winExp","type":"uint32"},{"name":"loseExp","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"trainees","outputs":[{"name":"trainerLevel","type":"uint8"},{"name":"objId","type":"uint64"},{"name":"objLevel","type":"uint8"},{"name":"ran","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_objId","type":"uint64"},{"name":"_trainerLevel","type":"uint8"},{"name":"_t1","type":"uint8"},{"name":"_t2","type":"uint8"},{"name":"_t3","type":"uint8"}],"name":"startTraining","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"minHpDeducted","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_index","type":"uint8"},{"name":"_ran","type":"uint8"},{"name":"_trainerId","type":"uint8"},{"name":"_trainerLevel","type":"uint8"},{"name":"_objClassId","type":"uint32"},{"name":"_objStats","type":"uint16[6]"}],"name":"attackTrainer","outputs":[{"name":"result","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maxTrainerLevel","outputs":[{"name":"","type":"uint8"}],"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":"maxRandomRound","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"maxRan","type":"uint8"},{"name":"index","type":"uint8"}],"name":"getRandom","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":false,"inputs":[],"name":"presetGymTrainer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_dataContract","type":"address"},{"name":"_worldContract","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"}]

  Contract Creation Code Switch To Opcodes View
60606040526000805460a060020a61ffff02191690556002805460ff1990811660011790915566038d7ea4c68000600955600a8054600592169190911762ffff001916620400001763ff000000191663140000001764ff000000001916640a000000001765ff0000000000191665460000000000179055341561008157600080fd5b60405160408061390e833981016040528080519190602001805160008054600160a060020a03338116600160a060020a031992831617909255600b80549683169690911695909517909455600a805494909116660100000000000002603060020a60d060020a031990941693909317909255505061380a806101046000396000f3006060604052600436106101f55763ffffffff60e060020a6000350416630d66881881146101fa57806314d0f1ba146102295780631576fc551461025c578063187584801461029257806320046e91146102a557806325ae9c97146102ed578063278f9f6e1461031b57806327979b35146103625780632bf6e0a5146103755780632c2da3cf1461039a5780633171cec4146103c357806333ced321146103e257806333d24dc4146103f55780633d5dbaed146104085780634538bc951461042a57806348e889ed1461048057806348ef5aa8146104e757806349d165f6146104ff5780634efb023e1461056e578063500e429714610581578063522f6815146105c15780636c81fd6d146105e35780637216ee0014610602578063830146cf14610615578063838985d714610647578063891fe1031461066c5780638da5cb5b1461067f5780638fd8f78314610692578063b2cad9b7146106ae578063b85d6275146106ca578063b952bb30146106e9578063bb9ea07c14610758578063bda7b1cb14610798578063bfcece9f146107f0578063cfa830791461081d578063d60ef60214610830578063d8819e0a1461088d578063d98e14bd146108a0578063ebfa3c1b146108b3578063ed30e558146108c6578063ee4e4416146108e5578063f2853292146108f8578063fb214f4c14610917575b600080fd5b341561020557600080fd5b61020d61092a565b604051600160a060020a03909116815260200160405180910390f35b341561023457600080fd5b610248600160a060020a0360043516610939565b604051901515815260200160405180910390f35b341561026757600080fd5b61029060043560ff60243581169060443581169060643581169060843581169060a4351661094e565b005b341561029d57600080fd5b61020d610a0a565b34156102b057600080fd5b6102d661ffff600435811690602435811690604435811690606435166084351515610a23565b60405161ffff909116815260200160405180910390f35b34156102f857600080fd5b61029063ffffffff60043581169060243581169060443581169060643516610ae7565b341561032657600080fd5b61029060ff60043581169063ffffffff602435169060443581169060643581169060843581169060a43581169060c43581169060e43516610b8f565b341561036d57600080fd5b610290610cd1565b341561038057600080fd5b610290600160a060020a0360043581169060243516610ed0565b34156103a557600080fd5b6103ad610f76565b60405160ff909116815260200160405180910390f35b34156103ce57600080fd5b61029060ff60043581169060243516610f88565b34156103ed57600080fd5b610290610ff0565b341561040057600080fd5b61029061109e565b341561041357600080fd5b61029060ff6004351663ffffffff602435166113c4565b341561043557600080fd5b61044a67ffffffffffffffff60043516611437565b60405163ffffffff9093168352600160a060020a03909116602083015260ff166040808301919091526060909101905180910390f35b341561048b57600080fd5b61049960ff60043516611529565b60405163ffffffff909716875260ff958616602088015293851660408088019190915292851660608701529084166080860152831660a0850152911660c083015260e0909101905180910390f35b34156104f257600080fd5b6102906004351515611613565b341561050a57600080fd5b61024860ff6004803582169160243516906101046044600660c06040519081016040529190828260c080828437820191505050505091908060c001906006806020026040519081016040529190828260c08082843750939550611641945050505050565b341561057957600080fd5b6102d66117fe565b341561058c57600080fd5b61059d63ffffffff60043516611820565b60405180848152602001838152602001828152602001935050505060405180910390f35b34156105cc57600080fd5b610290600160a060020a0360043516602435611845565b34156105ee57600080fd5b610290600160a060020a03600435166118d7565b341561060d57600080fd5b6103ad611981565b341561062057600080fd5b61062e60ff6004351661198f565b60405163ffffffff909116815260200160405180910390f35b341561065257600080fd5b61065a6119a7565b60405190815260200160405180910390f35b341561067757600080fd5b6103ad6119ad565b341561068a57600080fd5b61020d6119bd565b341561069d57600080fd5b61029063ffffffff600435166119cc565b34156106b957600080fd5b6103ad63ffffffff60043516611f9f565b34156106d557600080fd5b610290600160a060020a0360043516612002565b34156106f457600080fd5b610708600160a060020a03600435166120ac565b60405160ff9788168152958716602087015293861660408087019190915267ffffffffffffffff90931660608601529085166080850152841660a0840152921660c082015260e001905180910390f35b341561076357600080fd5b61077760ff600435811690602435166121c5565b60405163ffffffff9283168152911660208201526040908101905180910390f35b34156107a357600080fd5b6107b7600160a060020a0360043516612283565b60405160ff948516815267ffffffffffffffff909316602084015290831660408084019190915292166060820152608001905180910390f35b61029067ffffffffffffffff6004351660ff602435811690604435811690606435811690608435166122cd565b341561082857600080fd5b6103ad61282e565b341561083b57600080fd5b61024860ff60048035821691602435811691604435821691606435169063ffffffff608435169061016460a4600660c06040519081016040529190828260c0808284375093955061283f945050505050565b341561089857600080fd5b6103ad612b06565b34156108ab57600080fd5b6103ad612b0f565b34156108be57600080fd5b6103ad612b14565b34156108d157600080fd5b6103ad60ff60043581169060243516612b23565b34156108f057600080fd5b610248612b71565b341561090357600080fd5b610290600160a060020a0360043516612b7a565b341561092257600080fd5b610290612bd1565b600b54600160a060020a031681565b60016020526000908152604090205460ff1681565b60005433600160a060020a03908116911614806109895750600160a060020a03331660009081526001602081905260409091205460ff161515145b151561099457600080fd5b600995909555600a805460ff191660ff9586161762ff0000191662010000948616949094029390931763ff00000019166301000000928516929092029190911764ff000000001916640100000000918416919091021765ff00000000001916650100000000009290931691909102919091179055565b600a5466010000000000009004600160a060020a031681565b60008060008315610a4957600a61ffff600d8a0216049750600a61ffff600d8902160496505b610a5e88600461ffff60038a02165b04613360565b9150610a7387600461ffff6003890216610a58565b600a54909150640100000000900460ff1661ffff8316108015610aa65750600a54640100000000900460ff1661ffff8216105b15610ac057600a54640100000000900460ff169250610adc565b8061ffff168261ffff161115610ad857819250610adc565b8092505b505095945050505050565b60005433600160a060020a0390811691161480610b225750600160a060020a03331660009081526001602081905260409091205460ff161515145b1515610b2d57600080fd5b600b54600160a060020a03161515610b4457600080fd5b600a5466010000000000009004600160a060020a03161515610b6557600080fd5b610b6e846119cc565b610b77836119cc565b610b80826119cc565b610b89816119cc565b50505050565b6000805433600160a060020a0390811691161480610bcb5750600160a060020a03331660009081526001602081905260409091205460ff161515145b1515610bd657600080fd5b5060ff88166000908152600360205260409020805463ffffffff161515610c1757600a805460ff61010080830482166001019091160261ff00199091161790555b805463ffffffff191663ffffffff891617815560018101805460ff191660ff8981169190911761ff001916610100898316021762ff0000191662010000888316021763ff000000191663010000009187169190910217815583906004602091828204019190066101000a81548160ff021916908360ff16021790555081816001016005600681101515610ca657fe5b602091828204019190066101000a81548160ff021916908360ff160217905550505050505050505050565b60005433600160a060020a0390811691161480610d0c5750600160a060020a03331660009081526001602081905260409091205460ff161515145b1515610d1757600080fd5b60086020527fad67d757c34507f157cacfa2e3153e9f260a2244f30428821be7be64587ac55f805463ffffffff19908116601f179091557f6add646517a5b0f6793cd5891b7937d28a5b2981a5d88ebc7cd776088fea90418054821660211790557f625b35f5e76f098dd7c3a05b10e2e5e78a4a01228d60c3b143426cdf36d264558054821660221790557f9321edea6e3be4df59a344b401fab4f888b556fda1f954244cff9204bad624b88054821660241790557f91238f30f286c9a1c6e901c4eda3b214c381c846e3dbe48df95c21488e8e1fdb8054821660261790557f13acf3fc7bed94759963f076d5d3443d88732026bffc8253bdf4a6e65f21ecc58054821660281790557f24cd397636bedc6cf9b490d0edd57c769c19b367fb7d5c2344ae1ddc7d21c14480548216602a1790557fe4c2e8be66af8dd2d277000f4f830a10546f8b14e45cd850b875c98ba0f0d2cd80548216602c1790557f82c9e868e45873bb5a4f47c09e14a12f6a6314e13aabd611e4374762bb4e8b3680548216602e179055600a6000527f586689db7536874b78a6eac0f58556a56a106985743f7c16a699b27bb02f88bd80549091166030179055565b60005433600160a060020a0390811691161480610f0b5750600160a060020a03331660009081526001602081905260409091205460ff161515145b1515610f1657600080fd5b600b8054600160a060020a0393841673ffffffffffffffffffffffffffffffffffffffff19909116179055600a80549190921666010000000000000279ffffffffffffffffffffffffffffffffffffffff00000000000019909116179055565b600a5465010000000000900460ff1681565b60005433600160a060020a0390811691161480610fc35750600160a060020a03331660009081526001602081905260409091205460ff161515145b1515610fce57600080fd5b60ff9182166000908152600560205260409020805460ff191691909216179055565b600080548190819033600160a060020a03908116911614806110305750600160a060020a03331660009081526001602081905260409091205460ff161515145b151561103b57600080fd5b506001915060649050805b606460ff8416116110995760ff83166000908152600760205260409020805463ffffffff191663ffffffff83811691909117909155600190930192600a90600b8402160460050191508181019050611046565b505050565b60005433600160a060020a03908116911614806110d95750600160a060020a03331660009081526001602081905260409091205460ff161515145b15156110e457600080fd5b600560208190527f1471eb6eb2c5e789fc3de43f8ce62938c7d1836ec861730447e2ada8fd81017b805460ff19908116600e179091557f89832631fb3c3307a103ba2c84ab569c64d6182a18893dcd163f0f1c2090733a8054821660101790557fa9bc9a3a348c357ba16b37005d7e6b3236198c0e939f4af8c5f19b8deeb8ebc08054821660081790557f3eec716f11ba9e820c81ca75eb978ffb45831ef8b7a53e5e422c26008e1ca6d58054821660091790557f458b30c2d72bfd2c6317304a4594ecbafe5f729d3111b65fdc3a33bd48e5432d8054821660021790557f069400f22b28c6c362558d92f66163cec5671cba50b61abd2eecfcd0eaeac51880548216600b1790557feddb6698d7c569ff62ff64f1f1492bf14a54594835ba0faac91f84b4f5d814608054821660031790557ffb33122aa9f93cc639ebe80a7bc4784c11e6053dde89c6f4f7e268c6a623da1e805482169092179091557fc0a4a8be475dfebc377ebef2d7c4ff47656f572a08dd92b81017efcdba0febe180548216600f1790557f40f28f99a40bc9f6beea1013afdbc3cdcc689eb76b82c4de06c0acf1e1932ed58054821660129081179091557ff907e7e6656fa73566b18c1215272fe9fca2c55c552e62c923e21e000ac4b4e68054831660071790557f03145c75015e7a856ecd94c41432ef3cb669d6360af23433588937fefdfac8258054831660061790557f783638979e3582b3ffd6d53fc06c949ac31d1ac75a5e2c3531fbe1f91045eb538054831660111790557f58f00e8ecc6f5419941dd0bafec65a4cc188d31713fb1fe224257460930df8af80548316600d1790557f8b32256db898364c465749decac34aee435952ffe1739257aa5b0235e266d9c580548316600c1790557fb4e18992ad424cdedc46668609f2bafcf665a8d99577618d5923c69264d9cf5f8054831660011790556000527fd1ccbf1f9f869f51cd81e6f099f905636b057f682c706fe990614b112051692880549091166004179055565b60005433600160a060020a03908116911614806113ff5750600160a060020a03331660009081526001602081905260409091205460ff161515145b151561140a57600080fd5b60ff919091166000908152600860205260409020805463ffffffff191663ffffffff909216919091179055565b600080600080611445613542565b600b54600160a060020a0316915081630720246087600060405160e0015260405160e060020a63ffffffff841602815267ffffffffffffffff909116600482015260240160e060405180830381600087803b15156114a257600080fd5b6102c65a03f115156114b357600080fd5b505050604051805190602001805190602001805190602001805190602001805190602001805190602001805160e08901525063ffffffff90811660c088015290811660a0870152166080850190815267ffffffffffffffff9093168452909650945061151f9051611f9f565b9496939550505050565b600080600080600080600061153c61358e565b60ff8916600090815260036020526040908190209080519081016040908152825463ffffffff1682529091906020830190600183019060069060c09051908101604052919060c08301826000855b825461010083900a900460ff1681526020600192830181810494850194909303909202910180841161158a57905050505050508152505090508060000151816020015151826020015160200151836020015160400151846020015160600151856020015160800151866020015160a00151959f949e50929c50909a509850965090945092505050565b60005433600160a060020a0390811691161461162e57600080fd5b6002805460ff1916911515919091179055565b600080600080600a60029054906101000a900460ff16880260ff168760ff16101561167957600a5462010000900460ff16965061168c565b600a5462010000900460ff168802909603955b60009250855191508451905060a085015161ffff1660a087015161ffff16111561176f575b600a5462010000900460ff1661ffff84161080156116d3575060008261ffff16115b80156116e3575060008161ffff16115b1561176a57600261ffff84160661ffff166000141561173a576117338161172e8860015b602002015160608a015160408a01518a60045b60200201518d60ff168a61ffff1614610a23565b613360565b905061175f565b61175c8261172e8760015b6020020151606089015160408b01518b600461171a565b91505b6001909201916116b1565b6117ea565b600a5462010000900460ff1661ffff8416108015611791575060008261ffff16115b80156117a1575060008161ffff16115b156117ea57600261ffff84160661ffff16156117cd576117c68161172e886001611707565b90506117df565b6117dc8261172e876001611745565b91505b60019092019161176f565b61ffff908116911610159695505050505050565b60005474010000000000000000000000000000000000000000900461ffff1681565b63ffffffff166000908152600660205260409020805460018201546002909201549092565b60005433600160a060020a03908116911614806118805750600160a060020a03331660009081526001602081905260409091205460ff161515145b151561188b57600080fd5b30600160a060020a0316318111156118a257600080fd5b600160a060020a03821681156108fc0282604051600060405180830381858888f1935050505015156118d357600080fd5b5050565b60005433600160a060020a039081169116146118f257600080fd5b600160a060020a03811660009081526001602052604090205460ff16151561197e57600160a060020a03811660009081526001602081905260408220805460ff191682179055815461ffff7401000000000000000000000000000000000000000080830482169093011690910275ffff0000000000000000000000000000000000000000199091161790555b50565b600a54610100900460ff1681565b60036020526000908152604090205463ffffffff1681565b60095481565b600a546301000000900460ff1681565b600054600160a060020a031681565b6000806000806119da6135ae565b6119e26135ae565b6119ea6135ae565b60005433600160a060020a0390811691161480611a255750600160a060020a03331660009081526001602081905260409091205460ff161515145b1515611a3057600080fd5b600b54600160a060020a03161515611a4757600080fd5b600a5466010000000000009004600160a060020a03161515611a6857600080fd5b600b54600a5463ffffffff8a16600081815260066020526040808220600160a060020a039586169c5066010000000000009094049094169950975090955088916341b0eb53918891829051602001526040518363ffffffff1660e060020a02815260040180836004811115611ad957fe5b60ff1681526020018267ffffffffffffffff1667ffffffffffffffff16815260200192505050602060405180830381600087803b1515611b1857600080fd5b6102c65a03f11515611b2957600080fd5b50505060405180519050945084604051805910611b435750595b908082528060200260200182016040525092505b6000851115611c345786600160a060020a03166362b21ad760008a63ffffffff16600189036000604051602001526040518463ffffffff1660e060020a02815260040180846004811115611ba757fe5b60ff1681526020018367ffffffffffffffff1667ffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1515611bed57600080fd5b6102c65a03f11515611bfe57600080fd5b50505060405180519050836001870381518110611c1757fe5b60ff90921660209283029091019091015260001990940193611b57565b83838051611c469291602001906135c0565b5086600160a060020a03166341b0eb5360018a63ffffffff166000604051602001526040518363ffffffff1660e060020a02815260040180836004811115611c8a57fe5b60ff1681526020018267ffffffffffffffff1667ffffffffffffffff16815260200192505050602060405180830381600087803b1515611cc957600080fd5b6102c65a03f11515611cda57600080fd5b50505060405180519050945084604051805910611cf45750595b908082528060200260200182016040525091505b6000851115611de55786600160a060020a03166362b21ad760018a63ffffffff16600189036000604051602001526040518463ffffffff1660e060020a02815260040180846004811115611d5857fe5b60ff1681526020018367ffffffffffffffff1667ffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1515611d9e57600080fd5b6102c65a03f11515611daf57600080fd5b50505060405180519050826001870381518110611dc857fe5b60ff90921660209283029091019091015260001990940193611d08565b60018401828051611dfa9291602001906135c0565b5085600160a060020a03166388e9abb689600080604051602001526040518363ffffffff1660e060020a028152600401808363ffffffff1663ffffffff168152602001826001811115611e4957fe5b60ff16815260200192505050602060405180830381600087803b1515611e6e57600080fd5b6102c65a03f11515611e7f57600080fd5b50505060405180519050945084604051805910611e995750595b908082528060200260200182016040525090505b6000851115611f7f5785600160a060020a0316635b626339896000600189036000604051602001526040518463ffffffff1660e060020a028152600401808463ffffffff1663ffffffff168152602001836001811115611f0957fe5b60ff1681526020018281526020019350505050602060405180830381600087803b1515611f3557600080fd5b6102c65a03f11515611f4657600080fd5b50505060405180519050816001870381518110611f5f57fe5b63ffffffff90921660209283029091019091015260001990940193611ead565b60028401818051611f94929160200190613666565b505050505050505050565b600060016064825b8160ff168360ff161015611ff957600260ff848401160460ff811660009081526007602052604090205490915063ffffffff9081169086161015611fed57809150611ff4565b8060010192505b611fa7565b50909392505050565b60005433600160a060020a0390811691161461201d57600080fd5b600160a060020a03811660009081526001602081905260409091205460ff161515141561197e57600160a060020a03166000908152600160205260408120805460ff19169055805475ffff0000000000000000000000000000000000000000198116740100000000000000000000000000000000000000009182900461ffff9081166000190116909102179055565b60008060008060008060006120bf613711565b600160a060020a038916600090815260046020526040908190209060a09051908101604052908160008201600380602002604051908101604052919060608301826000855b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411612104575050509284525050506001919091015460ff8082166020840152610100820467ffffffffffffffff16604084015269010000000000000000008204811660608401526a01000000000000000000009091041660809091015290508051518151602001518251604001518360400151846020015185606001518660800151959f949e50929c50909a509850965090945092505050565b600a5460ff828116600081815260086020526040812054606465010000000000909504841663ffffffff9182160216939093049291851611156122715782600a0160ff168460ff16111561221c5760059150612271565b82840360ff1660020a63ffffffff1683850360ff1660030a63ffffffff1681151561224357fe5b0463ffffffff168263ffffffff1681151561225a57fe5b04915060058263ffffffff16101561227157600591505b5092600363ffffffff85160492509050565b60046020526000908152604090206001015460ff8082169167ffffffffffffffff61010082041691690100000000000000000082048116916a010000000000000000000090041684565b6122d5613725565b60006122df61375a565b60025460009081908190819060ff16156122f857600080fd5b600b54600160a060020a0316151561230f57600080fd5b600a5466010000000000009004600160a060020a0316151561233057600080fd5b600a5460ff908116908c16111561234657600080fd5b600954341461235457600080fd5b8860ff168a60ff16148061236d57508760ff168a60ff16145b8061237d57508760ff168960ff16145b1561238757600080fd5b60ff8a161580612398575060ff8916155b806123a4575060ff8816155b806123bc5750600a5460ff6101009091048116908b16115b806123d45750600a5460ff6101009091048116908a16115b806123ec5750600a5460ff6101009091048116908916115b156123f657600080fd5b6123ff8c611437565b60ff1660408a0152600160a060020a03166020890190815263ffffffff909116885251600160a060020a031633600160a060020a031614151561244157600080fd5b600b5460009650600160a060020a031693505b60068610156125255783600160a060020a03166362b21ad760038e896000604051602001526040518463ffffffff1660e060020a0281526004018084600481111561249b57fe5b60ff1681526020018367ffffffffffffffff1667ffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15156124e157600080fd5b6102c65a03f115156124f257600080fd5b505050604051805160ff16905085876006811061250b57fe5b61ffff909216602092909202015260019590950194612454565b600095505b60066000885163ffffffff1681526020810191909152604001600020600101548610156125d2576125ab60066000895163ffffffff168152602081019190915260400160002060010180548890811061257f57fe5b600091825260209182902082820401549190066101000a900460ff16604089015160030260ff16613385565b8587600681106125b757fe5b6020020181815161ffff91011690525060019095019461252a565b600060608801819052600a546125f89160036201000090920460ff169190910290612b23565b925061260a6000848c8e8b518a61283f565b15612620576001876060018181510160ff169052505b6126306001848b8e8b518a61283f565b15612646576001876060018181510160ff169052505b6126566002848a8e8b518a61283f565b1561266c576001876060018181510160ff169052505b61267a87604001518c6121c5565b63ffffffff90811660a08a0190815291166080890152600a5466010000000000009004600160a060020a031692508290635643a711908e90518a6060015160030360ff16028a608001518b6060015160ff16020160405163ffffffff84811660e060020a02825267ffffffffffffffff93909316600482015291166024820152604401600060405180830381600087803b151561271657600080fd5b6102c65a03f1151561272757600080fd5b50505033600160a060020a03166000908152600460205260409020805460ff8b81166101000261ff0019918e1660ff199093169290921716178155905087816002602091828204019190066101000a81548160ff021916908360ff1602179055508a8160010160006101000a81548160ff021916908360ff1602179055508b8160010160016101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508660400151600191909101805469ff0000000000000000001916690100000000000000000060ff93841602176aff0000000000000000000019166a010000000000000000000094909216939093021790915550505050505050505050565b600a54640100000000900460ff1681565b600061284961358e565b61285161375a565b60ff871660009081526003602052604080822082918291829182919080519081016040908152825463ffffffff1682529091906020830190600183019060069060c09051908101604052919060c08301826000855b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116128a6575050509290935250929950600097505050505b600685101561292c57866020015185600681106128fe57fe5b602002015160ff1686866006811061291257fe5b61ffff9092166020929092020152600194909401936128e5565b600094505b60066000885163ffffffff1681526020810191909152604001600020600101548510156129d6576129af60066000895163ffffffff168152602081019190915260400160002060010180548790811061298657fe5b6000918252602091829020828204015460ff929091066101000a900481169060038e0216613385565b8686600681106129bb57fe5b6020020181815161ffff910116905250600190940193612931565b6129e18a88516133b0565b909450925060208901519150606089015190508315612a6457600a546064906301000000900460ff1660208b01510261ffff16811515612a1d57fe5b0460208a018181510161ffff16905250600a546064906301000000900460ff168a600360200201510261ffff16811515612a5357fe5b0460608a018181510161ffff169052505b8215612ad457600a546064906301000000900460ff1660208801510261ffff16811515612a8d57fe5b04602087018181510161ffff16905250600a546064906301000000900460ff1687600360200201510261ffff16811515612ac357fe5b04606087018181510161ffff169052505b612ae08e8e8b89611641565b61ffff92831660208b0152911660609098019790975250949a9950505050505050505050565b600a5460ff1681565b600681565b600a5462010000900460ff1681565b6000600019430140815b8360ff168160ff16108015612b45575060068160ff16105b15612b595761010082049150600101612b2d565b8460ff1682811515612b6757fe5b0695945050505050565b60025460ff1681565b60005433600160a060020a03908116911614612b9557600080fd5b600160a060020a0381161561197e5760008054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff1990911617905550565b60008060008060008060008060008060009054906101000a9004600160a060020a0316600160a060020a031633600160a060020a03161480612c315750600160a060020a03331660009081526001602081905260409091205460ff161515145b1515612c3c57600080fd5b600160005260036020527fa15bc60c955c405d20d9149c709e2460f1c2d9a497496a7f46004d1772c3054c8054600c63ffffffff199091161781557fa15bc60c955c405d20d9149c709e2460f1c2d9a497496a7f46004d1772c3054d805460ff191660551761ff001916615f001762ff00001916624100001763ff000000191663320000001764ff0000000019166432000000001781559099506032906005602080820492909201805460ff948516928490066101000a9283029490920219909116929092179091556002600052600390527fc3a24b0501bd2c13a7e57f2db4369ec4c223447539fc0724a9d55ac4a06ebd4d805463ffffffff1916600f1781557fc3a24b0501bd2c13a7e57f2db4369ec4c223447539fc0724a9d55ac4a06ebd4e8054603260ff199091161761ff0019166137001762ff00001916625500001763ff000000191663550000001764ff000000001916642800000000178155909850604b906005602080820492909201805460ff948516928490066101000a9283029490920219909116929092179091556003600081905290527fcbc4e5fb02c3d1de23a9f1e014b4d2ee5aeaea9505df5e855c9210bf472495af805463ffffffff191660081781557fcbc4e5fb02c3d1de23a9f1e014b4d2ee5aeaea9505df5e855c9210bf472495b08054606e60ff199091161761ff001916613c001762ff00001916622800001763ff0000001916633c0000001764ff00000000191664280000000017815590975060289060056020808204929092018054918390066101000a60ff818102199093169490921691909102929092179091556004600081905260039091527f83ec6a1f0257b830b5e016457c9cf1435391bf56cc98f369a58a54fe93772465805463ffffffff191690911781557f83ec6a1f0257b830b5e016457c9cf1435391bf56cc98f369a58a54fe93772466805460ff191660361761ff0019166145001762ff00001916623a00001763ff0000001916634b0000001764ff000000001916644b000000001781559096506046906005602080820492909201805460ff948516928490066101000a9283029490920219909116929092179091556005600081905260039091527f405aad32e1adbac89bb7f176e338b8fc6e994ca210c9bb7bdca249b465942250805463ffffffff191660061781557f405aad32e1adbac89bb7f176e338b8fc6e994ca210c9bb7bdca249b4659422518054603260ff199091161761ff0019166132001762ff00001916623200001763ff000000191663690000001764ff000000001916643700000000178155909650605f91602080820492909201805460ff948516928490066101000a9283029490920219909116929092179091556006600052600390527fc69056f16cbaa3c616b828e333ab7d3a32310765507f8f58359e99ebb7a885f3805463ffffffff1916600d1781557fc69056f16cbaa3c616b828e333ab7d3a32310765507f8f58359e99ebb7a885f48054603760ff199091161761ff001916615a001762ff00001916625f00001763ff0000001916632d0000001764ff00000000191664230000000017815590945060239060056020808204929092018054918390066101000a60ff818102199093169490921691909102929092179091556007600081905260039091527ff2c49132ed1cee2a7e75bde50d332a2f81f1d01e5456d8a19d1df09bd561dbd2805463ffffffff191690911781557ff2c49132ed1cee2a7e75bde50d332a2f81f1d01e5456d8a19d1df09bd561dbd3805460ff191660551761ff001916613c001762ff00001916624900001763ff0000001916634b0000001764ff0000000019166450000000001781559093506032906005602080820492909201805460ff948516928490066101000a9283029490920219909116929092179091556008600052600390527f85aaa47b6dc46495bb8824fad4583769726fea36efd831a35556690b830a8fbe805463ffffffff191660181781557f85aaa47b6dc46495bb8824fad4583769726fea36efd831a35556690b830a8fbf8054608c60ff199091161761ff0019166187001762ff00001916624600001763ff0000001916634d0000001764ff000000001916645a000000001781559092506032906005602080820492909201805460ff948516928490066101000a928302949092021990911692909217909155600960005260039052507f8a8dc4e5242ea8b1ab1d60606dae757e6c2cca9f92a2cced9f72c19960bcb458805463ffffffff191660101781557f8a8dc4e5242ea8b1ab1d60606dae757e6c2cca9f92a2cced9f72c19960bcb4598054604660ff199091161761ff0019166169001762ff00001916625000001763ff0000001916633c0000001764ff000000001916645000000000178155605a9060056020808204909201805460ff948516939092066101000a9283029390920219169190911790555050600a805461090061ff001990911617905550505050505050565b60008161ffff168361ffff16111561337b575080820361337f565b5060005b92915050565b60008282028315806133a1575082848281151561339e57fe5b04145b15156133a957fe5b9392505050565b60008080805b63ffffffff8616600090815260066020526040902054821015613539575060005b63ffffffff851660009081526006602052604090205481101561352e5763ffffffff8516600090815260066020526040902080548290811061341557fe5b60009182526020808320818304015463ffffffff8a16845260068252604084208054929093066101000a900460ff169260059290918690811061345457fe5b60009182526020808320818304015460ff928290066101000a900482168452830193909352604090910190205416141561348d57600193505b63ffffffff861660009081526006602052604090208054839081106134ae57fe5b60009182526020808320818304015463ffffffff8916845260068252604084208054929093066101000a900460ff16926005929091859081106134ed57fe5b60009182526020808320818304015460ff928290066101000a900482168452830193909352604090910190205416141561352657600192505b6001016133d7565b6001909101906133b6565b50509250929050565b6101006040519081016040908152600080835260208301819052908201526060810161356c6135ae565b8152600060208201819052604082018190526060820181905260809091015290565b60e060405190810160405260008152602081016135a961375a565b905290565b60206040519081016040526000815290565b82805482825590600052602060002090601f016020900481019282156136565791602002820160005b8382111561362757835183826101000a81548160ff021916908360ff16021790555092602001926001016020816000010492830192600103026135e9565b80156136545782816101000a81549060ff0219169055600101602081600001049283019260010302613627565b505b50613662929150613782565b5090565b828054828255906000526020600020906007016008900481019282156137055791602002820160005b838211156136d357835183826101000a81548163ffffffff021916908363ffffffff160217905550926020019260040160208160030104928301926001030261368f565b80156137035782816101000a81549063ffffffff02191690556004016020816003010492830192600103026136d3565b505b506136629291506137a3565b60e06040519081016040528061356c6137c4565b60c06040519081016040908152600080835260208301819052908201819052606082018190526080820181905260a082015290565b60c06040519081016040526006815b6000815260001990910190602001816137695790505090565b6137a091905b8082111561366257805460ff19168155600101613788565b90565b6137a091905b8082111561366257805463ffffffff191681556001016137a9565b6060604051908101604052600081526002602082016137695600a165627a7a72305820aa58eb55d185b351c219eabf73ca8ffb70e5a24083eea4cdb0a2b1b4642160aa0029000000000000000000000000abc1c404424bdf24c19a5cc5ef8f47781d18eb3e0000000000000000000000001fc7bd85293f3982f40d52698df8d26be89360d6

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

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000abc1c404424bdf24c19a5cc5ef8f47781d18eb3e
Arg [1] : 0000000000000000000000001fc7bd85293f3982f40d52698df8d26be89360d6


   Swarm Source:
bzzr://aa58eb55d185b351c219eabf73ca8ffb70e5a24083eea4cdb0a2b1b4642160aa

 

View All
Block Age transaction Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.