Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0.0515 ETH
Eth Value
$86.81 (@ $1,685.58/ETH)More Info
Private Name Tags
ContractCreator
Multi Chain
Multichain Addresses
1 address found via
Latest 17 from a total of 17 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
Set Starter Pack | 6230067 | 1859 days 16 hrs ago | IN | 0 ETH | 0.0000659 | ||||
Set Card Draw Pr... | 6230023 | 1859 days 16 hrs ago | IN | 0 ETH | 0.00002716 | ||||
Challenge | 6186027 | 1867 days 2 hrs ago | IN | 0.02 ETH | 0.00028884 | ||||
Challenge | 6185923 | 1867 days 3 hrs ago | IN | 0.02 ETH | 0.00027281 | ||||
Level Up | 6185891 | 1867 days 3 hrs ago | IN | 0.01 ETH | 0.00016619 | ||||
Level Up | 6185889 | 1867 days 3 hrs ago | IN | 0.01 ETH | 0.00016631 | ||||
Challenge | 6185808 | 1867 days 3 hrs ago | IN | 0.02 ETH | 0.0003188 | ||||
Level Up | 6185801 | 1867 days 3 hrs ago | IN | 0.01 ETH | 0.00021745 | ||||
Generate Initial... | 6182078 | 1867 days 18 hrs ago | IN | 0 ETH | 0.0008627 | ||||
Generate Initial... | 6182010 | 1867 days 18 hrs ago | IN | 0 ETH | 0.00084964 | ||||
Generate Initial... | 6181867 | 1867 days 19 hrs ago | IN | 0 ETH | 0.00086273 | ||||
Generate Initial... | 6181516 | 1867 days 20 hrs ago | IN | 0 ETH | 0.00084964 | ||||
Generate Initial... | 6181236 | 1867 days 21 hrs ago | IN | 0 ETH | 0.00088714 | ||||
Generate Initial... | 6180305 | 1868 days 1 hr ago | IN | 0 ETH | 0.00084964 | ||||
Set Setting Valu... | 6174288 | 1869 days 2 hrs ago | IN | 0 ETH | 0.00025777 | ||||
Set Marketplace ... | 6174218 | 1869 days 2 hrs ago | IN | 0 ETH | 0.00011737 | ||||
0x610d0060 | 6173878 | 1869 days 3 hrs ago | IN | Create: Battle | 0 ETH | 0.01725841 |
Loading...
Loading
Contract Name:
Battle
Compiler Version
v0.4.24+commit.e67f0147
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2018-08-19 */ pragma solidity ^0.4.24; library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 // uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return a / b; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of "user permissions". */ contract Ownable { address public owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } } /** * @title Pausable * @dev Base contract which allows children to implement an emergency stop mechanism. */ contract Pausable is Ownable { event Pause(); event Unpause(); bool public paused = false; /** * @dev Modifier to make a function callable only when the contract is not paused. */ modifier whenNotPaused() { require(!paused); _; } /** * @dev Modifier to make a function callable only when the contract is paused. */ modifier whenPaused() { require(paused); _; } /** * @dev called by the owner to pause, triggers stopped state */ function pause() onlyOwner whenNotPaused public { paused = true; emit Pause(); } /** * @dev called by the owner to unpause, returns to normal state */ function unpause() onlyOwner whenPaused public { paused = false; emit Unpause(); } } contract BattleBase is Ownable { using SafeMath for uint256; /***********************************************************************************/ /* EVENTS /***********************************************************************************/ /** * History sequence will be represented by uint256, in other words the max round is 256 (rounds more than this will decide on hp left or draw) * 1 is challenger attack * 2 is defender attack * 3 is challenger attack with critical * 4 is defender attack with critical */ event BattleHistory( uint256 historyId, uint8 winner, // 0 - challenger; 1 - defender; 2 - draw; uint64 battleTime, uint256 sequence, uint256 blockNumber, uint256 tokensGained); event BattleHistoryChallenger( uint256 historyId, uint256 cardId, uint8 element, uint16 level, uint32 attack, uint32 defense, uint32 hp, uint32 speed, uint32 criticalRate, uint256 rank); event BattleHistoryDefender( uint256 historyId, uint256 cardId, uint8 element, uint16 level, uint32 attack, uint32 defense, uint32 hp, uint32 speed, uint16 criticalRate, uint256 rank); event RejectChallenge( uint256 challengerId, uint256 defenderId, uint256 defenderRank, uint8 rejectCode, uint256 blockNumber); event HashUpdated( uint256 cardId, uint256 cardHash); event LevelUp(uint256 cardId); event CardCreated(address owner, uint256 cardId); /***********************************************************************************/ /* CONST DATA /***********************************************************************************/ uint32[] expToNextLevelArr = [0,103,103,207,207,207,414,414,414,414,724,724,724,828,828,931,931,1035,1035,1138,1138,1242,1242,1345,1345,1449,1449,1552,1552,1656,1656,1759,1759,1863,1863,1966,1966,2070,2070,2173,2173,2173,2277,2277,2380,2380,2484,2484,2587,2587,2691,2691,2794,2794,2898,2898,3001,3001,3105,3105,3208,3208,3312,3312,3415,3415,3519,3519,3622,3622,3622,3726,3726,3829,3829,3933,3933,4036,4036,4140,4140,4243,4243,4347,4347,4450,4450,4554,4554,4657,4657,4761,4761,4864,4864,4968,4968,5071,5071,5175]; uint32[] activeWinExp = [10,11,14,19,26,35,46,59,74,91,100,103,108,116,125,135,146,158,171,185,200,215,231,248,265,283,302,321,341,361,382]; /***********************************************************************************/ /* DATA VARIABLES /***********************************************************************************/ //Card structure that holds all information for battle struct Card { uint8 element; // 1 - fire; 2 - water; 3 - wood; 8 - light; 9 - dark; uint16 level; //"unlimited" level bound to uint16 Max level is 65535 uint32 attack; uint32 defense; uint32 hp; uint32 speed; uint16 criticalRate; //max 8000 uint32 flexiGems; uint256 cardHash; uint32 currentExp; uint32 expToNextLevel; uint64 createdDatetime; uint256 rank; //rank is n-1 (need to add 1 for display); //uint8 passiveSkill; //TBC } // Mapping from tokenId to Card Struct mapping (uint256 => Card) public cards; uint256[] ranking; //stores the token id according to array position starts from 0 (rank 1) // Mapping from rank to amount held in that rank (challenge tokens) mapping (uint256 => uint256) public rankTokens; uint8 public currentElement = 0; //start with 0 as +1 will become fire uint256 public historyId = 0; /***********************************************************************************/ /* CONFIGURATIONS /***********************************************************************************/ /// @dev The address of the HogSmashToken HogSmashToken public hogsmashToken; /// @dev The address of the Marketplace Marketplace public marketplace; // Challenge fee changes on ranking difference uint256 public challengeFee; // Upgrade fee uint256 public upgradeFee; // Avatar fee uint256 public avatarFee; // Referrer fee in % (x10000) uint256 public referrerFee; // Developer Cut in % (x10000) uint256 public developerCut; uint256 internal totalDeveloperCut; // Price for each card draw (in wei) uint256 public cardDrawPrice; // Gems provided for upgrade every level up uint8 public upgradeGems; // // Gems provided for upgrade every 10 level up uint8 public upgradeGemsSpecial; // 1 Gem to attack conversion uint16 public gemAttackConversion; // 1 Gem to defense conversion uint16 public gemDefenseConversion; // 1 Gem to hp conversion uint16 public gemHpConversion; // 1 Gem to speed conversion uint16 public gemSpeedConversion; // 1 Gem to critical rate conversion divided by 100, eg 25 = 0.25 uint16 public gemCriticalRateConversion; //% to get a gold card, 0 to 100 uint8 public goldPercentage; //% to get a silver card, 0 to 100 uint8 public silverPercentage; //Range of event card number 1-99999999 uint32 public eventCardRangeMin; //Range of event card number 1-99999999 uint32 public eventCardRangeMax; // Maximum rounds of battle, cannot exceed 128 uint8 public maxBattleRounds; // // Record how much tokens are held as rank tokens uint256 internal totalRankTokens; // Flag for start fighting bool internal battleStart; //Flag for starter pack sale bool internal starterPackOnSale; uint256 public starterPackPrice; //price of starter pack uint16 public starterPackCardLevel; //card level from starter pack /***********************************************************************************/ /* ADMIN FUNCTIONS FOR SETTING CONFIGS /***********************************************************************************/ /// @dev Sets the reference to the marketplace. /// @param _address - Address of marketplace. function setMarketplaceAddress(address _address) external onlyOwner { Marketplace candidateContract = Marketplace(_address); require(candidateContract.isMarketplace(),"needs to be marketplace"); // Set the new contract address marketplace = candidateContract; } /** * @dev set upgrade gems for each level up and each 10 level up * @param _upgradeGems upgrade gems for normal levels * @param _upgradeGemsSpecial upgrade gems for every n levels * @param _gemAttackConversion gem to attack conversion * @param _gemDefenseConversion gem to defense conversion * @param _gemHpConversion gem to hp conversion * @param _gemSpeedConversion gem to speed conversion * @param _gemCriticalRateConversion gem to critical rate conversion * @param _goldPercentage percentage to get gold card * @param _silverPercentage percentage to get silver card * @param _eventCardRangeMin event card hash range start (inclusive) * @param _eventCardRangeMax event card hash range end (inclusive) * @param _newMaxBattleRounds maximum battle rounds */ function setSettingValues( uint8 _upgradeGems, uint8 _upgradeGemsSpecial, uint16 _gemAttackConversion, uint16 _gemDefenseConversion, uint16 _gemHpConversion, uint16 _gemSpeedConversion, uint16 _gemCriticalRateConversion, uint8 _goldPercentage, uint8 _silverPercentage, uint32 _eventCardRangeMin, uint32 _eventCardRangeMax, uint8 _newMaxBattleRounds) external onlyOwner { require(_eventCardRangeMax >= _eventCardRangeMin, "range max must be larger or equals range min" ); require(_eventCardRangeMax<100000000, "range max cannot exceed 99999999"); require((_newMaxBattleRounds <= 128) && (_newMaxBattleRounds >0), "battle rounds must be between 0 and 128"); upgradeGems = _upgradeGems; upgradeGemsSpecial = _upgradeGemsSpecial; gemAttackConversion = _gemAttackConversion; gemDefenseConversion = _gemDefenseConversion; gemHpConversion = _gemHpConversion; gemSpeedConversion = _gemSpeedConversion; gemCriticalRateConversion = _gemCriticalRateConversion; goldPercentage = _goldPercentage; silverPercentage = _silverPercentage; eventCardRangeMin = _eventCardRangeMin; eventCardRangeMax = _eventCardRangeMax; maxBattleRounds = _newMaxBattleRounds; } // @dev function to allow contract owner to change the price (in wei) per card draw function setStarterPack(uint256 _newStarterPackPrice, uint16 _newStarterPackCardLevel) external onlyOwner { require(_newStarterPackCardLevel<=20, "starter pack level cannot exceed 20"); //starter pack level cannot exceed 20 starterPackPrice = _newStarterPackPrice; starterPackCardLevel = _newStarterPackCardLevel; } // @dev function to allow contract owner to enable/disable starter pack sale function setStarterPackOnSale(bool _newStarterPackOnSale) external onlyOwner { starterPackOnSale = _newStarterPackOnSale; } // @dev function to allow contract owner to start/stop the battle function setBattleStart(bool _newBattleStart) external onlyOwner { battleStart = _newBattleStart; } // @dev function to allow contract owner to change the price (in wei) per card draw function setCardDrawPrice(uint256 _newCardDrawPrice) external onlyOwner { cardDrawPrice = _newCardDrawPrice; } // @dev function to allow contract owner to change the referrer fee (in %, eg 3.75% is 375) function setReferrerFee(uint256 _newReferrerFee) external onlyOwner { referrerFee = _newReferrerFee; } // @dev function to allow contract owner to change the challenge fee (in wei) function setChallengeFee(uint256 _newChallengeFee) external onlyOwner { challengeFee = _newChallengeFee; } // @dev function to allow contract owner to change the upgrade fee (in wei) function setUpgradeFee(uint256 _newUpgradeFee) external onlyOwner { upgradeFee = _newUpgradeFee; } // @dev function to allow contract owner to change the avatar fee (in wei) function setAvatarFee(uint256 _newAvatarFee) external onlyOwner { avatarFee = _newAvatarFee; } // @dev function to allow contract owner to change the developer cut (%) divide by 100 function setDeveloperCut(uint256 _newDeveloperCut) external onlyOwner { developerCut = _newDeveloperCut; } function getTotalDeveloperCut() external view onlyOwner returns (uint256) { return totalDeveloperCut; } function getTotalRankTokens() external view returns (uint256) { return totalRankTokens; } /***********************************************************************************/ /* GET SETTINGS FUNCTION /***********************************************************************************/ /** * @dev get upgrade gems and conversion ratios of each field * @return _upgradeGems upgrade gems for normal levels * @return _upgradeGemsSpecial upgrade gems for every n levels * @return _gemAttackConversion gem to attack conversion * @return _gemDefenseConversion gem to defense conversion * @return _gemHpConversion gem to hp conversion * @return _gemSpeedConversion gem to speed conversion * @return _gemCriticalRateConversion gem to critical rate conversion */ function getSettingValues() external view returns( uint8 _upgradeGems, uint8 _upgradeGemsSpecial, uint16 _gemAttackConversion, uint16 _gemDefenseConversion, uint16 _gemHpConversion, uint16 _gemSpeedConversion, uint16 _gemCriticalRateConversion, uint8 _maxBattleRounds) { _upgradeGems = uint8(upgradeGems); _upgradeGemsSpecial = uint8(upgradeGemsSpecial); _gemAttackConversion = uint16(gemAttackConversion); _gemDefenseConversion = uint16(gemDefenseConversion); _gemHpConversion = uint16(gemHpConversion); _gemSpeedConversion = uint16(gemSpeedConversion); _gemCriticalRateConversion = uint16(gemCriticalRateConversion); _maxBattleRounds = uint8(maxBattleRounds); } } /***********************************************************************************/ /* RANDOM GENERATOR /***********************************************************************************/ contract Random { uint private pSeed = block.number; function getRandom() internal returns(uint256) { return (pSeed = uint(keccak256(abi.encodePacked(pSeed, blockhash(block.number - 1), blockhash(block.number - 3), blockhash(block.number - 5), blockhash(block.number - 7)) ))); } } /***********************************************************************************/ /* CORE BATTLE CONTRACT /***********************************************************************************/ /** * Omits fallback to prevent accidentally sending ether to this contract */ contract Battle is BattleBase, Random, Pausable { /***********************************************************************************/ /* CONSTRUCTOR /***********************************************************************************/ // @dev Contructor for Battle Contract constructor(address _tokenAddress) public { HogSmashToken candidateContract = HogSmashToken(_tokenAddress); // Set the new contract address hogsmashToken = candidateContract; starterPackPrice = 30000000000000000; starterPackCardLevel = 5; starterPackOnSale = true; // start by selling starter pack challengeFee = 10000000000000000; upgradeFee = 10000000000000000; avatarFee = 50000000000000000; developerCut = 375; referrerFee = 2000; cardDrawPrice = 15000000000000000; battleStart = true; paused = false; //default contract paused totalDeveloperCut = 0; //init to 0 } /***********************************************************************************/ /* MODIFIER /***********************************************************************************/ /** * @dev Guarantees msg.sender is owner of the given token * @param _tokenId uint256 ID of the token to validate its ownership belongs to msg.sender */ modifier onlyOwnerOf(uint256 _tokenId) { require(hogsmashToken.ownerOf(_tokenId) == msg.sender, "must be owner of token"); _; } /***********************************************************************************/ /* GAME FUNCTIONS /***********************************************************************************/ /** * @dev External function for getting info of card * @param _id card id of target query card * @return information of the card */ function getCard(uint256 _id) external view returns ( uint256 cardId, address owner, uint8 element, uint16 level, uint32[] stats, uint32 currentExp, uint32 expToNextLevel, uint256 cardHash, uint64 createdDatetime, uint256 rank ) { cardId = _id; owner = hogsmashToken.ownerOf(_id); Card storage card = cards[_id]; uint32[] memory tempStats = new uint32[](6); element = uint8(card.element); level = uint16(card.level); tempStats[0] = uint32(card.attack); tempStats[1] = uint32(card.defense); tempStats[2] = uint32(card.hp); tempStats[3] = uint32(card.speed); tempStats[4] = uint16(card.criticalRate); tempStats[5] = uint32(card.flexiGems); stats = tempStats; currentExp = uint32(card.currentExp); expToNextLevel = uint32(card.expToNextLevel); cardHash = uint256(card.cardHash); createdDatetime = uint64(card.createdDatetime); rank = uint256(card.rank); } /** * @dev External function for querying card Id at rank (zero based) * @param _rank zero based rank of the card * @return id of the card at the rank */ function getCardIdByRank(uint256 _rank) external view returns(uint256 cardId) { return ranking[_rank]; } /** * @dev External function for drafting new card * @return uint of cardId */ function draftNewCard() external payable whenNotPaused returns (uint256) { require(msg.value == cardDrawPrice, "fee must be equal to draw price"); //make sure the fee is enough for drafting a new card` require(address(marketplace) != address(0), "marketplace not set"); //need to set up marketplace before drafting new cards is allowed hogsmashToken.setApprovalForAllByContract(msg.sender, marketplace, true); //let marketplace have approval for escrow if the card goes on sale totalDeveloperCut = totalDeveloperCut.add(cardDrawPrice); return _createCard(msg.sender, 1); //level 1 cards } /** * @dev External function for drafting new card * @return uint of cardId */ function draftNewCardWithReferrer(address referrer) external payable whenNotPaused returns (uint256 cardId) { require(msg.value == cardDrawPrice, "fee must be equal to draw price"); //make sure the fee is enough for drafting a new card` require(address(marketplace) != address(0), "marketplace not set"); //need to set up marketplace before drafting new cards is allowed hogsmashToken.setApprovalForAllByContract(msg.sender, marketplace, true); //let marketplace have approval for escrow if the card goes on sale cardId = _createCard(msg.sender, 1); //level 1 cards if ((referrer != address(0)) && (referrerFee!=0) && (referrer!=msg.sender) && (hogsmashToken.balanceOf(referrer)>0)) { uint256 referrerCut = msg.value.mul(referrerFee)/10000; require(referrerCut<=msg.value, "referre cut cannot be larger than fee"); referrer.transfer(referrerCut); totalDeveloperCut = totalDeveloperCut.add(cardDrawPrice.sub(referrerCut)); } else { totalDeveloperCut = totalDeveloperCut.add(cardDrawPrice); } } /** * @dev External function for leveling up * @param _id card id of target query card * @param _attackLevelUp gems allocated to each attribute for upgrade * @param _defenseLevelUp gems allocated to each attribute for upgrade * @param _hpLevelUp gems allocated to each attribute for upgrade * @param _speedLevelUp gems allocated to each attribute for upgrade * @param _criticalRateLevelUp gems allocated to each attribute for upgrade * @param _flexiGemsLevelUp are gems allocated to each attribute for upgrade */ function levelUp( uint256 _id, uint16 _attackLevelUp, uint16 _defenseLevelUp, uint16 _hpLevelUp, uint16 _speedLevelUp, uint16 _criticalRateLevelUp, uint16 _flexiGemsLevelUp) external payable whenNotPaused onlyOwnerOf(_id) { require( _attackLevelUp >= 0 && _defenseLevelUp >= 0 && _hpLevelUp >= 0 && _speedLevelUp >= 0 && _criticalRateLevelUp >= 0 && _flexiGemsLevelUp >= 0, "level up attributes must be more than 0" ); //make sure all upgrade attributes will not be negative require(msg.value == upgradeFee, "fee must be equals to upgrade price"); //make sure the fee is enough for upgrade Card storage card = cards[_id]; require(card.currentExp==card.expToNextLevel, "exp is not max yet for level up"); //reject if currentexp not maxed out require(card.level < 65535, "card level maximum has reached"); //make sure level is not maxed out, although not likely require((card.criticalRate + (_criticalRateLevelUp * gemCriticalRateConversion))<=7000, "critical rate max of 70 has reached"); //make sure criticalrate is not upgraded when it reaches 70 to prevent waste uint totalInputGems = _attackLevelUp + _defenseLevelUp + _hpLevelUp; totalInputGems += _speedLevelUp + _criticalRateLevelUp + _flexiGemsLevelUp; uint16 numOfSpecials = 0; //Cater for initial high level cards but have not leveled up before if ((card.level > 1) && (card.attack==1) && (card.defense==1) && (card.hp==3) && (card.speed==1) && (card.criticalRate==25) && (card.flexiGems==1)) { numOfSpecials = (card.level+1)/5; //auto floor to indicate how many Ns for upgradeGemsSpecial; cardlevel +1 is the new level uint totalGems = (numOfSpecials * upgradeGemsSpecial) + (((card.level) - numOfSpecials) * upgradeGems); require(totalInputGems==totalGems, "upgrade gems not used up"); //must use up all gems when upgrade } else { if (((card.level+1)%5)==0) { //special gem every 5 levels require(totalInputGems==upgradeGemsSpecial, "upgrade gems not used up"); //must use up all gems when upgrade numOfSpecials = 1; } else { require(totalInputGems==upgradeGems, "upgrade gems not used up"); //must use up all gems when upgrade } } totalDeveloperCut = totalDeveloperCut.add(upgradeFee); //start level up process _upgradeLevel(_id, _attackLevelUp, _defenseLevelUp, _hpLevelUp, _speedLevelUp, _criticalRateLevelUp, _flexiGemsLevelUp, numOfSpecials); emit LevelUp(_id); } function _upgradeLevel( uint256 _id, uint16 _attackLevelUp, uint16 _defenseLevelUp, uint16 _hpLevelUp, uint16 _speedLevelUp, uint16 _criticalRateLevelUp, uint16 _flexiGemsLevelUp, uint16 numOfSpecials) private { Card storage card = cards[_id]; uint16[] memory extraStats = new uint16[](5); //attack, defense, hp, speed, flexigem if (numOfSpecials>0) { //special gem every 5 levels if (card.cardHash%100 >= 70) { //6* or 7* cards uint cardType = (uint(card.cardHash/10000000000))%100; //0-99 if (cardType < 20) { extraStats[0]+=numOfSpecials; } else if (cardType < 40) { extraStats[1]+=numOfSpecials; } else if (cardType < 60) { extraStats[2]+=numOfSpecials; } else if (cardType < 80) { extraStats[3]+=numOfSpecials; } else { extraStats[4]+=numOfSpecials; } if (card.cardHash%100 >=90) { //7* cards uint cardTypeInner = cardType%10; //0-9 if (cardTypeInner < 2) { extraStats[0]+=numOfSpecials; } else if (cardTypeInner < 4) { extraStats[1]+=numOfSpecials; } else if (cardTypeInner < 6) { extraStats[2]+=numOfSpecials; } else if (cardTypeInner < 8) { extraStats[3]+=numOfSpecials; } else { extraStats[4]+=numOfSpecials; } } } } card.attack += (_attackLevelUp + extraStats[0]) * gemAttackConversion; card.defense += (_defenseLevelUp + extraStats[1]) * gemDefenseConversion; card.hp += (_hpLevelUp + extraStats[2]) * gemHpConversion; card.speed += (_speedLevelUp + extraStats[3]) * gemSpeedConversion; card.criticalRate += uint16(_criticalRateLevelUp * gemCriticalRateConversion); card.flexiGems += _flexiGemsLevelUp + extraStats[4]; // turn Gem into FlexiGem card.level += 1; //level + 1 card.currentExp = 0; //reset exp //card.expToNextLevel = card.level*100 + max(0,card.level-8) * (1045/1000)**card.level; uint256 tempExpLevel = card.level; if (tempExpLevel > expToNextLevelArr.length) { tempExpLevel = expToNextLevelArr.length; //cap it at max level exp } card.expToNextLevel = expToNextLevelArr[tempExpLevel]; } function max(uint a, uint b) private pure returns (uint) { return a > b ? a : b; } function challenge( uint256 _challengerCardId, uint32[5] _statUp, //0-attack, 1-defense, 2-hp, 3-speed, 4-criticalrate uint256 _defenderCardId, uint256 _defenderRank, uint16 _defenderLevel) external payable whenNotPaused onlyOwnerOf(_challengerCardId) { require(battleStart != false, "battle has not started"); //make sure the battle has started require(msg.sender != hogsmashToken.ownerOf(_defenderCardId), "cannot challenge own cards"); //make sure user doesn't attack his own cards Card storage challenger = cards[_challengerCardId]; require((_statUp[0] + _statUp[1] + _statUp[2] + _statUp[3] + _statUp[4])==challenger.flexiGems, "flexi gems not used up"); //flexi points must be exactly used, not more not less Card storage defender = cards[_defenderCardId]; if (defender.rank != _defenderRank) { emit RejectChallenge(_challengerCardId, _defenderCardId, _defenderRank, 1, uint256(block.number)); (msg.sender).transfer(msg.value); return; } if (defender.level != _defenderLevel) { emit RejectChallenge(_challengerCardId, _defenderCardId, _defenderRank, 2, uint256(block.number)); (msg.sender).transfer(msg.value); return; } uint256 requiredChallengeFee = challengeFee; if (defender.rank <150) { //0-149 rank within 150 requiredChallengeFee = requiredChallengeFee.mul(2); } require(msg.value == requiredChallengeFee, "fee must be equals to challenge price"); //challenge fee to challenge defender uint256 developerFee = 0; if (msg.value > 0) { developerFee = _calculateFee(msg.value); } uint256[] memory stats = new uint256[](14); //challengerattack, challengerdefense, challengerhp, challengerspeed, challengercritical, defendercritical, defenderhp, finalWinner stats[0] = challenger.attack + (_statUp[0] * gemAttackConversion); stats[1] = challenger.defense + (_statUp[1] * gemDefenseConversion); stats[2] = challenger.hp + (_statUp[2] * gemHpConversion); stats[3] = challenger.speed + (_statUp[3] * gemSpeedConversion); stats[4] = challenger.criticalRate + (_statUp[4] * gemCriticalRateConversion); stats[5] = defender.criticalRate; stats[6] = defender.hp; stats[8] = challenger.hp + (_statUp[2] * gemHpConversion); //challenger hp for record purpose stats[9] = challenger.rank; //for looting stats[10] = defender.rank; //for looting stats[11] = 0; //tokensGained stats[12] = _challengerCardId; stats[13] = _defenderCardId; //check challenger critical rate if (stats[4]>7000) { stats[4] = 7000; //hard cap at 70 critical rate } //check defender critical rate if (stats[5]>7000) { stats[5] = 7000; //hard cap at 70 critical rate } // 1 - fire; 2 - water; 3 - wood; 8 - light; 9 - dark; if (((challenger.element-1) == defender.element) || ((challenger.element==1) && (defender.element==3)) || ((challenger.element==8) && (defender.element==9))) { stats[4] += 3000; //30% critical rate increase for challenger if (stats[4]>8000) { stats[4] = 8000; //hard cap at 80 critical rate for element advantage } } if (((defender.element-1) == challenger.element) || ((defender.element==1) && (challenger.element==3)) || ((defender.element==8) && (challenger.element==9))) { stats[5] += 3000; //30% critical rate increase for defender if (stats[5]>8000) { stats[5] = 8000; //hard cap at 80 critical rate for element advantage } } uint256 battleSequence = _simulateBattle(challenger, defender, stats); stats[11] = _transferFees(_challengerCardId, stats, developerFee); emit BattleHistory( historyId, uint8(stats[7]), uint64(now), uint256(battleSequence), uint256(block.number), uint256(stats[11]) ); emit BattleHistoryChallenger( historyId, uint256(_challengerCardId), uint8(challenger.element), uint16(challenger.level), uint32(stats[0]), uint32(stats[1]), uint32(stats[8]), uint32(stats[3]), uint16(stats[4]), //pretty sure trimming down the uint won't affect the number as max is just 80000 uint256(stats[9]) ); emit BattleHistoryDefender( historyId, uint256(_defenderCardId), uint8(defender.element), uint16(defender.level), uint32(defender.attack), uint32(defender.defense), uint32(defender.hp), uint32(defender.speed), uint16(stats[5]), uint256(stats[10]) ); historyId = historyId.add(1); //add one for next history } function _addBattleSequence(uint8 attackType, uint8 rounds, uint256 battleSequence) private pure returns (uint256) { // Assumed rounds 0-based; attackType is 0xB (B:0,1,2,3), i.e. the last 2 bits is the value with other bits zeros uint256 mask = 0x3; mask = ~(mask << 2*rounds); uint256 newSeq = battleSequence & mask; newSeq = newSeq | (uint256(attackType) << 2*rounds); return newSeq; } function _simulateBattle(Card storage challenger, Card storage defender, uint[] memory stats) private returns (uint256 battleSequence) { bool continueBattle = true; uint8 currentAttacker = 0; //0 challenger, 1 defender uint256 tempAttackStrength; uint8 battleRound = 0; if (!_isChallengerAttackFirst(stats[3], defender.speed)){ currentAttacker = 1; } while (continueBattle) { if (currentAttacker==0) { //challenger attack if (_rollCriticalDice() <= stats[4]){ tempAttackStrength = stats[0] * 2; //critical hit battleSequence = _addBattleSequence(2, battleRound, battleSequence); //move sequence to left and add record } else { tempAttackStrength = stats[0]; //normal hit battleSequence = _addBattleSequence(0, battleRound, battleSequence); //move sequence to left and add record } if (tempAttackStrength <= defender.defense) { tempAttackStrength = 1; //at least deduct 1 hp } else { tempAttackStrength -= defender.defense; } if (stats[6] <= tempAttackStrength) { stats[6] = 0; //do not let it overflow } else { stats[6] -= tempAttackStrength; //defender hp } currentAttacker = 1; //defender turn up next } else if (currentAttacker==1) { //defender attack if (_rollCriticalDice() <= stats[5]){ tempAttackStrength = defender.attack * 2; //critical hit battleSequence = _addBattleSequence(3, battleRound, battleSequence); //move sequence to left and add record } else { tempAttackStrength = defender.attack; //normal hit battleSequence = _addBattleSequence(1, battleRound, battleSequence); //move sequence to left and add record } if (tempAttackStrength <= stats[1]) { tempAttackStrength = 1; //at least deduct 1 hp } else { tempAttackStrength -= stats[1]; } if (stats[2] <= tempAttackStrength) { stats[2] = 0; //do not let it overflow } else { stats[2] -= tempAttackStrength; //challenger hp } currentAttacker = 0; //challenger turn up next } battleRound ++; if ((battleRound>=maxBattleRounds) || (stats[6]<=0) || (stats[2]<=0)){ continueBattle = false; //end battle } } uint32 challengerGainExp = 0; uint32 defenderGainExp = 0; //calculate Exp if (challenger.level == defender.level) { //challenging a same level card challengerGainExp = activeWinExp[10]; } else if (challenger.level > defender.level) { //challenging a lower level card if ((challenger.level - defender.level) >= 11) { challengerGainExp = 1; //defender too weak, grant only 1 exp } else { //challengerGainExp = (((1 + ((defender.level - challenger.level)/10))**2) + (1/10)) * baseExp; challengerGainExp = activeWinExp[10 + defender.level - challenger.level]; //0 - 9 } } else if (challenger.level < defender.level) { //challenging a higher level card //challengerGainExp = ((1 + ((defender.level - challenger.level)/10)**(3/2))) * baseExp; uint256 levelDiff = defender.level - challenger.level; if (levelDiff > 20) { levelDiff = 20; //limit level difference to 20 as max exp gain } challengerGainExp = activeWinExp[10+levelDiff]; } if (stats[2] == stats[6]) { //challenger hp = defender hp stats[7] = 2; //draw //No EXP when draw } else if (stats[2] > stats[6]) { //challenger hp > defender hp stats[7] = 0; //challenger wins if (defender.rank < challenger.rank) { //swap ranks ranking[defender.rank] = stats[12]; //update ranking table position ranking[challenger.rank] = stats[13]; //update ranking table position uint256 tempRank = defender.rank; defender.rank = challenger.rank; //update rank on card challenger.rank = tempRank; //update rank on card } //award Exp //active win challenger.currentExp += challengerGainExp; if (challenger.currentExp > challenger.expToNextLevel) { challenger.currentExp = challenger.expToNextLevel; //cap it at max exp for level up } //passive lose //defenderGainExp = challengerGainExp*35/100*30/100 + (5/10); defenderGainExp = ((challengerGainExp*105/100) + 5)/10; // 30% of 35% + round up if (defenderGainExp <= 0) { defenderGainExp = 1; //at least 1 Exp } defender.currentExp += defenderGainExp; if (defender.currentExp > defender.expToNextLevel) { defender.currentExp = defender.expToNextLevel; //cap it at max exp for level up } } else if (stats[6] > stats[2]) { //defender hp > challenger hp stats[7] = 1; //defender wins //award Exp //active lose uint32 tempChallengerGain = challengerGainExp*35/100; //35% of winning if (tempChallengerGain <= 0) { tempChallengerGain = 1; //at least 1 Exp } challenger.currentExp += tempChallengerGain; //35% of winning if (challenger.currentExp > challenger.expToNextLevel) { challenger.currentExp = challenger.expToNextLevel; //cap it at max exp for level up } //passive win defenderGainExp = challengerGainExp*30/100; if (defenderGainExp <= 0) { defenderGainExp = 1; //at least 1 Exp } defender.currentExp += defenderGainExp; if (defender.currentExp > defender.expToNextLevel) { defender.currentExp = defender.expToNextLevel; //cap it at max exp for level up } } return battleSequence; } function _transferFees(uint256 _challengerCardId, uint[] stats, uint256 developerFee) private returns (uint256 totalGained) { totalDeveloperCut = totalDeveloperCut.add(developerFee); uint256 remainFee = msg.value.sub(developerFee); //minus developer fee totalGained = 0; if (stats[7] == 1) { //challenger loses // put all of challenger fee in rankTokens (minus developerfee of course) rankTokens[stats[10]] = rankTokens[stats[10]].add(remainFee); totalRankTokens = totalRankTokens.add(remainFee); } else { //draw or challenger wins address challengerAddress = hogsmashToken.ownerOf(_challengerCardId); //get address of card owner if (stats[7] == 0) { //challenger wins if (stats[9] > stats[10]) { //challenging a higher ranking defender //1. get tokens from defender rank if defender rank is higher if (rankTokens[stats[10]] > 0) { totalGained = totalGained.add(rankTokens[stats[10]]); totalRankTokens = totalRankTokens.sub(rankTokens[stats[10]]); rankTokens[stats[10]] = 0; } //2. get self rank tokens if moved to higher rank if (rankTokens[stats[9]] > 0) { totalGained = totalGained.add(rankTokens[stats[9]]); totalRankTokens = totalRankTokens.sub(rankTokens[stats[9]]); rankTokens[stats[9]] = 0; } } else { //challenging a lower ranking defender if (stats[9]<50) { //rank 1-50 gets to get self rank tokens and lower rank (within 150) tokens if win if ((stats[10] < 150) && (rankTokens[stats[10]] > 0)) { // can get defender rank tokens if defender rank within top 150 (0-149) totalGained = totalGained.add(rankTokens[stats[10]]); totalRankTokens = totalRankTokens.sub(rankTokens[stats[10]]); rankTokens[stats[10]] = 0; } if ((stats[10] < 150) && (rankTokens[stats[9]] > 0)) { //can get self rank tokens if defender rank within top 150 totalGained = totalGained.add(rankTokens[stats[9]]); totalRankTokens = totalRankTokens.sub(rankTokens[stats[9]]); rankTokens[stats[9]] = 0; } } } challengerAddress.transfer(totalGained.add(remainFee)); //give back challenge fee untouched + total gained } else { //draw challengerAddress.transfer(remainFee); //give back challenge fee untouched } } } function _rollCriticalDice() private returns (uint16 result){ return uint16((getRandom() % 10000) + 1); //get 1 to 10000 } function _isChallengerAttackFirst(uint _challengerSpeed, uint _defenderSpeed ) private returns (bool){ uint8 randResult = uint8((getRandom() % 100) + 1); //get 1 to 100 uint challengerChance = (((_challengerSpeed * 10 ** 3) / (_challengerSpeed + _defenderSpeed))+5) / 10;//round if (randResult <= challengerChance) { return true; } else { return false; } } /// @dev function to buy starter package, with card and tokens directly from contract function buyStarterPack() external payable whenNotPaused returns (uint256){ require(starterPackOnSale==true, "starter pack is not on sale"); require(msg.value==starterPackPrice, "fee must be equals to starter pack price"); require(address(marketplace) != address(0), "marketplace not set"); //need to set up marketplace before drafting new cards is allowed totalDeveloperCut = totalDeveloperCut.add(starterPackPrice); hogsmashToken.setApprovalForAllByContract(msg.sender, marketplace, true); //let marketplace have approval for escrow if the card goes on sale return _createCard(msg.sender, starterPackCardLevel); //level n cards } /** * @dev Create card function * @param _to The address that will own the minted card * @param _initLevel The level to start with, usually 1 * @return uint256 ID of the new card */ function _createCard(address _to, uint16 _initLevel) private returns (uint256) { require(_to != address(0), "cannot create card for unknown address"); //check if address is not 0 (the origin address) currentElement+= 1; if (currentElement==4) { currentElement = 8; } if (currentElement == 10) { currentElement = 1; } uint256 tempExpLevel = _initLevel; if (tempExpLevel > expToNextLevelArr.length) { tempExpLevel = expToNextLevelArr.length; //cap it at max level exp } uint32 tempCurrentExp = 0; if (_initLevel>1) { //let exp max out so that user can level up the card according to preference tempCurrentExp = expToNextLevelArr[tempExpLevel]; } uint256 tokenId = hogsmashToken.mint(_to); // use memory as this is a temporary variable, cheaper and will not be stored since cards store all of them Card memory _card = Card({ element: currentElement, // 1 - fire; 2 - water; 3 - wood; 8 - light; 9 - dark; level: _initLevel, // level attack: 1, // attack, defense: 1, // defense, hp: 3, // hp, speed: 1, // speed, criticalRate: 25, // criticalRate flexiGems: 1, // flexiGems, currentExp: tempCurrentExp, // currentExp, expToNextLevel: expToNextLevelArr[tempExpLevel], // expToNextLevel, cardHash: generateHash(), createdDatetime :uint64(now), rank: tokenId // rank }); cards[tokenId] = _card; ranking.push(tokenId); //push to ranking mapping emit CardCreated(msg.sender, tokenId); return tokenId; } function generateHash() private returns (uint256 hash){ hash = uint256((getRandom()%1000000000000)/10000000000); hash = hash.mul(10000000000); uint256 tempHash = ((getRandom()%(eventCardRangeMax-eventCardRangeMin+1))+eventCardRangeMin)*100; hash = hash.add(tempHash); tempHash = getRandom()%100; if (tempHash < goldPercentage) { hash = hash.add(90); } else if (tempHash < (goldPercentage+silverPercentage)) { hash = hash.add(70); } else { hash = hash.add(50); } } /// @dev function to update avatar hash function updateAvatar(uint256 _cardId, uint256 avatarHash) external payable whenNotPaused onlyOwnerOf(_cardId) { require(msg.value==avatarFee, "fee must be equals to avatar price"); Card storage card = cards[_cardId]; uint256 tempHash = card.cardHash%1000000000000; //retain hash fixed section card.cardHash = tempHash.add(avatarHash.mul(1000000000000)); emit HashUpdated(_cardId, card.cardHash); } /// @dev Compute developer's fee /// @param _challengeFee - transaction fee function _calculateFee(uint256 _challengeFee) internal view returns (uint256) { return developerCut.mul(_challengeFee/10000); } /***********************************************************************************/ /* ADMIN FUNCTIONS /***********************************************************************************/ /** * @dev External function for drafting new card for Owner, for promotional purposes * @param _cardLevel initial level of card created, must be less or equals to 20 * @return uint of cardId */ function generateInitialCard(uint16 _cardLevel) external whenNotPaused onlyOwner returns (uint256) { require(address(marketplace) != address(0), "marketplace not set"); //need to set up marketplace before drafting new cards is allowed require(_cardLevel<=20, "maximum level cannot exceed 20"); //set maximum level at 20 that Owner can generate hogsmashToken.setApprovalForAllByContract(msg.sender, marketplace, true); //let marketplace have approval for escrow if the card goes on sale return _createCard(msg.sender, _cardLevel); //level 1 cards } /// @dev Function for contract owner to put tokens into ranks for events function distributeTokensToRank(uint[] ranks, uint256 tokensPerRank) external payable onlyOwner { require(msg.value == (tokensPerRank*ranks.length), "tokens must be enough to distribute among ranks"); uint i; for (i=0; i<ranks.length; i++) { rankTokens[ranks[i]] = rankTokens[ranks[i]].add(tokensPerRank); totalRankTokens = totalRankTokens.add(tokensPerRank); } } // @dev Allows contract owner to withdraw the all developer cut from the contract function withdrawBalance() external onlyOwner { address thisAddress = this; uint256 balance = thisAddress.balance; uint256 withdrawalSum = totalDeveloperCut; if (balance >= withdrawalSum) { totalDeveloperCut = 0; owner.transfer(withdrawalSum); } } } /***********************************************************************************/ /* INTERFACES /***********************************************************************************/ interface Marketplace { function isMarketplace() external returns (bool); } interface HogSmashToken { function ownerOf(uint256 _tokenId) external view returns (address); function balanceOf(address _owner) external view returns (uint256); function tokensOf(address _owner) external view returns (uint256[]); function mint(address _to) external returns (uint256 _tokenId); function setTokenURI(uint256 _tokenId, string _uri) external; function setApprovalForAllByContract(address _sender, address _to, bool _approved) external; }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[],"name":"gemCriticalRateConversion","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"upgradeGems","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"challengeFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_upgradeGems","type":"uint8"},{"name":"_upgradeGemsSpecial","type":"uint8"},{"name":"_gemAttackConversion","type":"uint16"},{"name":"_gemDefenseConversion","type":"uint16"},{"name":"_gemHpConversion","type":"uint16"},{"name":"_gemSpeedConversion","type":"uint16"},{"name":"_gemCriticalRateConversion","type":"uint16"},{"name":"_goldPercentage","type":"uint8"},{"name":"_silverPercentage","type":"uint8"},{"name":"_eventCardRangeMin","type":"uint32"},{"name":"_eventCardRangeMax","type":"uint32"},{"name":"_newMaxBattleRounds","type":"uint8"}],"name":"setSettingValues","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"},{"name":"_attackLevelUp","type":"uint16"},{"name":"_defenseLevelUp","type":"uint16"},{"name":"_hpLevelUp","type":"uint16"},{"name":"_speedLevelUp","type":"uint16"},{"name":"_criticalRateLevelUp","type":"uint16"},{"name":"_flexiGemsLevelUp","type":"uint16"}],"name":"levelUp","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"getTotalDeveloperCut","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"starterPackCardLevel","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newChallengeFee","type":"uint256"}],"name":"setChallengeFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"maxBattleRounds","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"upgradeFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"ranks","type":"uint256[]"},{"name":"tokensPerRank","type":"uint256"}],"name":"distributeTokensToRank","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_newCardDrawPrice","type":"uint256"}],"name":"setCardDrawPrice","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"eventCardRangeMax","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newStarterPackPrice","type":"uint256"},{"name":"_newStarterPackCardLevel","type":"uint16"}],"name":"setStarterPack","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"starterPackPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"gemAttackConversion","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_challengerCardId","type":"uint256"},{"name":"_statUp","type":"uint32[5]"},{"name":"_defenderCardId","type":"uint256"},{"name":"_defenderRank","type":"uint256"},{"name":"_defenderLevel","type":"uint16"}],"name":"challenge","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"gemSpeedConversion","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdrawBalance","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"rankTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newStarterPackOnSale","type":"bool"}],"name":"setStarterPackOnSale","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"hogsmashToken","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"upgradeGemsSpecial","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"referrerFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_cardId","type":"uint256"},{"name":"avatarHash","type":"uint256"}],"name":"updateAvatar","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_newBattleStart","type":"bool"}],"name":"setBattleStart","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"silverPercentage","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getTotalRankTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"cards","outputs":[{"name":"element","type":"uint8"},{"name":"level","type":"uint16"},{"name":"attack","type":"uint32"},{"name":"defense","type":"uint32"},{"name":"hp","type":"uint32"},{"name":"speed","type":"uint32"},{"name":"criticalRate","type":"uint16"},{"name":"flexiGems","type":"uint32"},{"name":"cardHash","type":"uint256"},{"name":"currentExp","type":"uint32"},{"name":"expToNextLevel","type":"uint32"},{"name":"createdDatetime","type":"uint64"},{"name":"rank","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_rank","type":"uint256"}],"name":"getCardIdByRank","outputs":[{"name":"cardId","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint256"}],"name":"getCard","outputs":[{"name":"cardId","type":"uint256"},{"name":"owner","type":"address"},{"name":"element","type":"uint8"},{"name":"level","type":"uint16"},{"name":"stats","type":"uint32[]"},{"name":"currentExp","type":"uint32"},{"name":"expToNextLevel","type":"uint32"},{"name":"cardHash","type":"uint256"},{"name":"createdDatetime","type":"uint64"},{"name":"rank","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"draftNewCard","outputs":[{"name":"","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"cardDrawPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"gemHpConversion","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"referrer","type":"address"}],"name":"draftNewCardWithReferrer","outputs":[{"name":"cardId","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_cardLevel","type":"uint16"}],"name":"generateInitialCard","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"marketplace","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"setMarketplaceAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newAvatarFee","type":"uint256"}],"name":"setAvatarFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newUpgradeFee","type":"uint256"}],"name":"setUpgradeFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"gemDefenseConversion","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"historyId","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"goldPercentage","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"currentElement","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"eventCardRangeMin","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"developerCut","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"buyStarterPack","outputs":[{"name":"","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newDeveloperCut","type":"uint256"}],"name":"setDeveloperCut","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newReferrerFee","type":"uint256"}],"name":"setReferrerFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"avatarFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getSettingValues","outputs":[{"name":"_upgradeGems","type":"uint8"},{"name":"_upgradeGemsSpecial","type":"uint8"},{"name":"_gemAttackConversion","type":"uint16"},{"name":"_gemDefenseConversion","type":"uint16"},{"name":"_gemHpConversion","type":"uint16"},{"name":"_gemSpeedConversion","type":"uint16"},{"name":"_gemCriticalRateConversion","type":"uint16"},{"name":"_maxBattleRounds","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_tokenAddress","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"historyId","type":"uint256"},{"indexed":false,"name":"winner","type":"uint8"},{"indexed":false,"name":"battleTime","type":"uint64"},{"indexed":false,"name":"sequence","type":"uint256"},{"indexed":false,"name":"blockNumber","type":"uint256"},{"indexed":false,"name":"tokensGained","type":"uint256"}],"name":"BattleHistory","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"historyId","type":"uint256"},{"indexed":false,"name":"cardId","type":"uint256"},{"indexed":false,"name":"element","type":"uint8"},{"indexed":false,"name":"level","type":"uint16"},{"indexed":false,"name":"attack","type":"uint32"},{"indexed":false,"name":"defense","type":"uint32"},{"indexed":false,"name":"hp","type":"uint32"},{"indexed":false,"name":"speed","type":"uint32"},{"indexed":false,"name":"criticalRate","type":"uint32"},{"indexed":false,"name":"rank","type":"uint256"}],"name":"BattleHistoryChallenger","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"historyId","type":"uint256"},{"indexed":false,"name":"cardId","type":"uint256"},{"indexed":false,"name":"element","type":"uint8"},{"indexed":false,"name":"level","type":"uint16"},{"indexed":false,"name":"attack","type":"uint32"},{"indexed":false,"name":"defense","type":"uint32"},{"indexed":false,"name":"hp","type":"uint32"},{"indexed":false,"name":"speed","type":"uint32"},{"indexed":false,"name":"criticalRate","type":"uint16"},{"indexed":false,"name":"rank","type":"uint256"}],"name":"BattleHistoryDefender","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"challengerId","type":"uint256"},{"indexed":false,"name":"defenderId","type":"uint256"},{"indexed":false,"name":"defenderRank","type":"uint256"},{"indexed":false,"name":"rejectCode","type":"uint8"},{"indexed":false,"name":"blockNumber","type":"uint256"}],"name":"RejectChallenge","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"cardId","type":"uint256"},{"indexed":false,"name":"cardHash","type":"uint256"}],"name":"HashUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"cardId","type":"uint256"}],"name":"LevelUp","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"cardId","type":"uint256"}],"name":"CardCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]
Contract Creation Code
610d0060405260006080908152606760a081905260c05260cf60e08190526101008190526101205261019e6101408190526101608190526101808190526101a0526102d46101c08190526101e08190526102005261033c610220819052610240526103a36102608190526102805261040b6102a08190526102c0526104726102e0819052610300526104da61032081905261034052610541610360819052610380526105a96103a08190526103c0526106106103e081905261040052610678610420819052610440526106df610460819052610480526107476104a08190526104c0526107ae6104e0819052610500526108166105208190526105405261087d6105608190526105808190526105a0526108e56105c08190526105e05261094c610600819052610620526109b461064081905261066052610a1b6106808190526106a052610a836106c08190526106e052610aea61070081905261072052610b5261074081905261076052610bb96107808190526107a052610c216107c08190526107e052610c8861080081905261082052610cf061084081905261086052610d576108808190526108a052610dbf6108c08190526108e052610e2661090081905261092081905261094052610e8e61096081905261098052610ef56109a08190526109c052610f5d6109e0819052610a0052610fc4610a20819052610a405261102c610a60819052610a8052611093610aa0819052610ac0526110fb610ae0819052610b0052611162610b20819052610b40526111ca610b60819052610b8052611231610ba0819052610bc052611299610be0819052610c0052611300610c20819052610c4052611368610c60819052610c80526113cf610ca0819052610cc052611437610ce052620002989060019060646200048f565b50604080516103e081018252600a8152600b6020820152600e9181019190915260136060820152601a6080820152602360a0820152602e60c0820152603b60e0820152604a610100820152605b61012082015260646101408201526067610160820152606c61018082015260746101a0820152607d6101c082015260876101e08201526092610200820152609e61022082015260ab61024082015260b961026082015260c861028082015260d76102a082015260e76102c082015260f86102e082015261010961030082015261011b61032082015261012e6103408201526101416103608201526101556103808201526101696103a082015261017e6103c0820152620003aa90600290601f6200048f565b506006805460ff19908116909155600060075543601655601780549091169055348015620003d757600080fd5b5060405160208062005668833981016040525160008054600160a060020a03199081163317825560088054600160a060020a039094169390911692909217909155666a94d74f4300006014556015805461ffff1916600517905560138054662386f26fc10000600a819055600b5566b1a2bc2ec50000600c55610177600e556107d0600d5566354a6ba7a1800060105560ff1961ff0019909116610100178116600117909155601780549091169055600f556200056a565b82805482825590600052602060002090600701600890048101928215620005315791602002820160005b83821115620004fd57835183826101000a81548163ffffffff021916908361ffff1602179055509260200192600401602081600301049283019260010302620004b9565b80156200052f5782816101000a81549063ffffffff0219169055600401602081600301049283019260010302620004fd565b505b506200053f92915062000543565b5090565b6200056791905b808211156200053f57805463ffffffff191681556001016200054a565b90565b6150ee806200057a6000396000f3006080604052600436106102845763ffffffff60e060020a60003504166301d5c48881146102895780630f0308fb146102b55780631bd8f9ca146102e05780631c70362c1461030757806329aec173146103725780632d06fd13146103a25780632ed73df6146103b757806335bf82f6146103cc5780633d82cf5a146103e45780633f4ba83a146103f957806340fa61f71461040e5780634341aebc1461042357806344d1a9ae1461043a5780634cd7699a14610452578063570200c0146104805780635c714e901461049f5780635c7b0288146104b45780635c975abb146104c95780635cc236ce146104f25780635f96d9fa1461050d5780635fd8c7101461052257806360e71f2f14610537578063682bc77e1461054f5780636a30eb24146105695780636e6b80041461059a5780636e88a7bd146105af5780637a70abda146105c4578063809ae91e146105d25780638456cb59146105ec5780638911cd9a146106015780638b6715cd146106165780638da5cb5b1461062b5780638dc10768146106405780639070222e146106e05780639188d312146106f8578063923ce65f146107ef57806393af339f146107f75780639cd0126a1461080c5780639f91d14514610821578063a14cf39414610835578063abc8c7af14610851578063b47cc55614610866578063b61cb05814610887578063bae18ac31461089f578063c0ba6adf146108b7578063cd2d8a2d146108cc578063d08e2354146108e1578063d127bb9d146108f6578063d77ff9ea1461090b578063e72fd4e114610920578063f114572714610935578063f2fde38b1461093d578063f6cf3a7d1461095e578063f81a95db14610976578063f945ba2d1461098e578063fefd336c146109a3575b600080fd5b34801561029557600080fd5b5061029e610a09565b6040805161ffff9092168252519081900360200190f35b3480156102c157600080fd5b506102ca610a21565b6040805160ff9092168252519081900360200190f35b3480156102ec57600080fd5b506102f5610a2a565b60408051918252519081900360200190f35b34801561031357600080fd5b5061037060ff60043581169060243581169061ffff60443581169160643582169160843581169160a43582169160c435169060e4358116906101043581169063ffffffff6101243581169161014435909116906101643516610a30565b005b61037060043561ffff60243581169060443581169060643581169060843581169060a43581169060c43516610d2a565b3480156103ae57600080fd5b506102f56113c3565b3480156103c357600080fd5b5061029e6113e2565b3480156103d857600080fd5b506103706004356113ec565b3480156103f057600080fd5b506102ca611408565b34801561040557600080fd5b5061037061142b565b34801561041a57600080fd5b506102f5611488565b61037060246004803582810192910135903561148e565b34801561044657600080fd5b506103706004356115b8565b34801561045e57600080fd5b506104676115d4565b6040805163ffffffff9092168252519081900360200190f35b34801561048c57600080fd5b5061037060043561ffff602435166115f6565b3480156104ab57600080fd5b506102f56116ad565b3480156104c057600080fd5b5061029e6116b3565b3480156104d557600080fd5b506104de6116c3565b604080519115158252519081900360200190f35b610370600435602460c43560e43561ffff61010435166116cc565b34801561051957600080fd5b5061029e612410565b34801561052e57600080fd5b50610370612426565b34801561054357600080fd5b506102f5600435612497565b34801561055b57600080fd5b5061037060043515156124a9565b34801561057557600080fd5b5061057e6124da565b60408051600160a060020a039092168252519081900360200190f35b3480156105a657600080fd5b506102ca6124e9565b3480156105bb57600080fd5b506102f56124f7565b6103706004356024356124fd565b3480156105de57600080fd5b5061037060043515156126fe565b3480156105f857600080fd5b50610370612728565b34801561060d57600080fd5b506102ca612787565b34801561062257600080fd5b506102f56127a1565b34801561063757600080fd5b5061057e6127a7565b34801561064c57600080fd5b506106586004356127b6565b6040805160ff909e168e5261ffff9c8d1660208f015263ffffffff9b8c168e820152998b1660608e0152978a1660808d015295891660a08c01529390981660c08a015290861660e08901526101008801529484166101208701529390921661014085015267ffffffffffffffff90921661016084015261018083015251908190036101a00190f35b3480156106ec57600080fd5b506102f5600435612870565b34801561070457600080fd5b50610710600435612893565b604051808b81526020018a600160a060020a0316600160a060020a031681526020018960ff1660ff1681526020018861ffff1661ffff168152602001806020018763ffffffff1663ffffffff1681526020018663ffffffff1663ffffffff1681526020018581526020018467ffffffffffffffff1667ffffffffffffffff168152602001838152602001828103825288818151815260200191508051906020019060200280838360005b838110156107d25781810151838201526020016107ba565b505050509050019b50505050505050505050505060405180910390f35b6102f5612b01565b34801561080357600080fd5b506102f5612c5f565b34801561081857600080fd5b5061029e612c65565b6102f5600160a060020a0360043516612c79565b34801561084157600080fd5b506102f561ffff60043516612fb6565b34801561085d57600080fd5b5061057e613116565b34801561087257600080fd5b50610370600160a060020a0360043516613125565b34801561089357600080fd5b50610370600435613230565b3480156108ab57600080fd5b5061037060043561324c565b3480156108c357600080fd5b5061029e613268565b3480156108d857600080fd5b506102f561327a565b3480156108ed57600080fd5b506102ca613280565b34801561090257600080fd5b506102ca613299565b34801561091757600080fd5b506104676132a2565b34801561092c57600080fd5b506102f56132c0565b6102f56132c6565b34801561094957600080fd5b50610370600160a060020a03600435166134b0565b34801561096a57600080fd5b50610370600435613544565b34801561098257600080fd5b50610370600435613560565b34801561099a57600080fd5b506102f561357c565b3480156109af57600080fd5b506109b8613582565b6040805160ff998a168152978916602089015261ffff968716888201529486166060880152928516608087015290841660a086015290921660c0840152921660e08201529051908190036101000190f35b6011546a0100000000000000000000900461ffff1681565b60115460ff1681565b600a5481565b600054600160a060020a03163314610a4757600080fd5b63ffffffff8084169083161015610ace576040805160e560020a62461bcd02815260206004820152602c60248201527f72616e6765206d6178206d757374206265206c6172676572206f72206571756160448201527f6c732072616e6765206d696e0000000000000000000000000000000000000000606482015290519081900360840190fd5b6305f5e10063ffffffff831610610b2f576040805160e560020a62461bcd02815260206004820181905260248201527f72616e6765206d61782063616e6e6f7420657863656564203939393939393939604482015290519081900360640190fd5b60808160ff1611158015610b46575060008160ff16115b1515610bc2576040805160e560020a62461bcd02815260206004820152602760248201527f626174746c6520726f756e6473206d757374206265206265747765656e20302060448201527f616e642031323800000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b8b601160006101000a81548160ff021916908360ff1602179055508a601160016101000a81548160ff021916908360ff16021790555089601160026101000a81548161ffff021916908361ffff16021790555088601160046101000a81548161ffff021916908361ffff16021790555087601160066101000a81548161ffff021916908361ffff16021790555086601160086101000a81548161ffff021916908361ffff160217905550856011600a6101000a81548161ffff021916908361ffff160217905550846011600c6101000a81548160ff021916908360ff160217905550836011600d6101000a81548160ff021916908360ff160217905550826011600e6101000a81548163ffffffff021916908363ffffffff16021790555081601160126101000a81548163ffffffff021916908363ffffffff16021790555080601160166101000a81548160ff021916908360ff160217905550505050505050505050505050565b60175460009081908190819060ff1615610d4357600080fd5b6008546040805160e160020a6331a9108f028152600481018e905290518d923392600160a060020a0390911691636352211e916024808201926020929091908290030181600087803b158015610d9857600080fd5b505af1158015610dac573d6000803e3d6000fd5b505050506040513d6020811015610dc257600080fd5b5051600160a060020a031614610e22576040805160e560020a62461bcd02815260206004820152601660248201527f6d757374206265206f776e6572206f6620746f6b656e00000000000000000000604482015290519081900360640190fd5b60008b61ffff1610158015610e3c575060008a61ffff1610155b8015610e4d575060008961ffff1610155b8015610e5e575060008861ffff1610155b8015610e6f575060008761ffff1610155b8015610e80575060008661ffff1610155b1515610efc576040805160e560020a62461bcd02815260206004820152602760248201527f6c6576656c2075702061747472696275746573206d757374206265206d6f726560448201527f207468616e203000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600b543414610f7b576040805160e560020a62461bcd02815260206004820152602360248201527f666565206d75737420626520657175616c7320746f207570677261646520707260448201527f6963650000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60008c8152600360205260409020600281015490955063ffffffff8082166401000000009092041614610ff8576040805160e560020a62461bcd02815260206004820152601f60248201527f657870206973206e6f74206d61782079657420666f72206c6576656c20757000604482015290519081900360640190fd5b845461ffff61010090910481161061105a576040805160e560020a62461bcd02815260206004820152601e60248201527f63617264206c6576656c206d6178696d756d2068617320726561636865640000604482015290519081900360640190fd5b6011548554611b586a010000000000000000000090920461ffff9081168a02609860020a909204811691909101161115611104576040805160e560020a62461bcd02815260206004820152602360248201527f637269746963616c2072617465206d6178206f6620373020686173207265616360448201527f6865640000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b8454888801870161ffff9081168d8d018c01821601955060009450600161010090920416118015611143575084546301000000900463ffffffff166001145b801561116157508454670100000000000000900463ffffffff166001145b8015611183575084546b010000000000000000000000900463ffffffff166003145b80156111a9575084546f01000000000000000000000000000000900463ffffffff166001145b80156111c157508454609860020a900461ffff166019145b80156111db5750845460a860020a900463ffffffff166001145b15611273578454601154600561ffff61010093849004811660018101821692909204965092820460ff9081168702918790039216919091020116915083821461126e576040805160e560020a62461bcd02815260206004820152601860248201527f757067726164652067656d73206e6f7420757365642075700000000000000000604482015290519081900360640190fd5b61135a565b845460059061ffff6101009091048116600101160661ffff16600014156112fe57601154610100900460ff1684146112f5576040805160e560020a62461bcd02815260206004820152601860248201527f757067726164652067656d73206e6f7420757365642075700000000000000000604482015290519081900360640190fd5b6001925061135a565b60115460ff16841461135a576040805160e560020a62461bcd02815260206004820152601860248201527f757067726164652067656d73206e6f7420757365642075700000000000000000604482015290519081900360640190fd5b600b54600f5461136f9163ffffffff6135f516565b600f556113828c8c8c8c8c8c8c8a613602565b604080518d815290517f6a1b6f91db361bdf7356d3942ed64f2ee2fea430979dbba7ea23f44e8b2110079181900360200190a1505050505050505050505050565b60008054600160a060020a031633146113db57600080fd5b50600f5490565b60155461ffff1681565b600054600160a060020a0316331461140357600080fd5b600a55565b601154760100000000000000000000000000000000000000000000900460ff1681565b600054600160a060020a0316331461144257600080fd5b60175460ff16151561145357600080fd5b6017805460ff191690556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3390600090a1565b600b5481565b60008054600160a060020a031633146114a657600080fd5b3482840214611525576040805160e560020a62461bcd02815260206004820152602f60248201527f746f6b656e73206d75737420626520656e6f75676820746f206469737472696260448201527f75746520616d6f6e672072616e6b730000000000000000000000000000000000606482015290519081900360840190fd5b5060005b828110156115b257611569826005600087878681811061154557fe5b905060200201358152602001908152602001600020546135f590919063ffffffff16565b6005600086868581811061157957fe5b905060200201358152602001908152602001600020819055506115a7826012546135f590919063ffffffff16565b601255600101611529565b50505050565b600054600160a060020a031633146115cf57600080fd5b601055565b6011547201000000000000000000000000000000000000900463ffffffff1681565b600054600160a060020a0316331461160d57600080fd5b601461ffff82161115611690576040805160e560020a62461bcd02815260206004820152602360248201527f73746172746572207061636b206c6576656c2063616e6e6f742065786365656460448201527f2032300000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6014919091556015805461ffff191661ffff909216919091179055565b60145481565b60115462010000900461ffff1681565b60175460ff1681565b601754600090819081908190606090829060ff16156116ea57600080fd5b6008546040805160e160020a6331a9108f028152600481018e905290518d923392600160a060020a0390911691636352211e916024808201926020929091908290030181600087803b15801561173f57600080fd5b505af1158015611753573d6000803e3d6000fd5b505050506040513d602081101561176957600080fd5b5051600160a060020a0316146117c9576040805160e560020a62461bcd02815260206004820152601660248201527f6d757374206265206f776e6572206f6620746f6b656e00000000000000000000604482015290519081900360640190fd5b60135460ff161515611825576040805160e560020a62461bcd02815260206004820152601660248201527f626174746c6520686173206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b6008546040805160e160020a6331a9108f028152600481018d90529051600160a060020a0390921691636352211e916024808201926020929091908290030181600087803b15801561187657600080fd5b505af115801561188a573d6000803e3d6000fd5b505050506040513d60208110156118a057600080fd5b5051600160a060020a0316331415611902576040805160e560020a62461bcd02815260206004820152601a60248201527f63616e6e6f74206368616c6c656e6765206f776e206361726473000000000000604482015290519081900360640190fd5b60008c8152600360205260409020805490975060a860020a900463ffffffff168b6004602002013563ffffffff168c600360058110151561193f57fe5b602002013563ffffffff168d600260058110151561195957fe5b602002013563ffffffff168e600160058110151561197357fe5b602002013563ffffffff168f600060058110151561198d57fe5b602002013563ffffffff160101010163ffffffff161415156119f9576040805160e560020a62461bcd02815260206004820152601660248201527f666c6578692067656d73206e6f74207573656420757000000000000000000000604482015290519081900360640190fd5b60008a8152600360208190526040909120908101549096508914611a9657604080518d8152602081018c90528082018b90526001606082015243608082015290517faf2d0f76f81104661d314f5e65f3eb5d70d9bd6112c30547b2720753baf1a8319181900360a00190a160405133903480156108fc02916000818181858888f19350505050158015611a90573d6000803e3d6000fd5b50612402565b855461ffff8981166101009092041614611b2357604080518d8152602081018c90528082018b90526002606082015243608082015290517faf2d0f76f81104661d314f5e65f3eb5d70d9bd6112c30547b2720753baf1a8319181900360a00190a160405133903480156108fc02916000818181858888f19350505050158015611a90573d6000803e3d6000fd5b600a549450609686600301541015611b4957611b4685600263ffffffff613ac816565b94505b348514611bc6576040805160e560020a62461bcd02815260206004820152602560248201527f666565206d75737420626520657175616c7320746f206368616c6c656e67652060448201527f7072696365000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600093506000341115611bdf57611bdc34613af1565b93505b60408051600e8082526101e0820190925290602082016101c08038833950506011549194505062010000900461ffff168b6000602002013563ffffffff16028760000160039054906101000a900463ffffffff160163ffffffff16836000815181101515611c4957fe5b6020908102909101015260115461ffff640100000000909104168b6001602002013563ffffffff16028760000160079054906101000a900463ffffffff160163ffffffff16836001815181101515611c9d57fe5b6020908102909101015260115461ffff6601000000000000909104168b6002602002013563ffffffff160287600001600b9054906101000a900463ffffffff160163ffffffff16836002815181101515611cf357fe5b6020908102909101015260115461ffff68010000000000000000909104168b6003602002013563ffffffff160287600001600f9054906101000a900463ffffffff160163ffffffff16836003815181101515611d4b57fe5b6020908102909101015260115461ffff6a0100000000000000000000909104168b6004602002013563ffffffff16028760000160139054906101000a900461ffff1661ffff160163ffffffff16836004815181101515611da757fe5b602090810291909101015285548351609860020a90910461ffff169084906005908110611dd057fe5b6020908102919091010152855483516b01000000000000000000000090910463ffffffff169084906006908110611e0357fe5b6020908102909101015260115461ffff6601000000000000909104168b6002602002013563ffffffff160287600001600b9054906101000a900463ffffffff160163ffffffff16836008815181101515611e5957fe5b602090810290910101526003870154835184906009908110611e7757fe5b60209081029091010152600386015483518490600a908110611e9557fe5b6020908102909101015282516000908490600b908110611eb157fe5b6020908102909101015282518c908490600c908110611ecc57fe5b6020908102909101015282518a908490600d908110611ee757fe5b602090810290910101528251611b589084906004908110611f0457fe5b906020019060200201511115611f3157611b58836004815181101515611f2657fe5b602090810290910101525b611b58836005815181101515611f4357fe5b906020019060200201511115611f7057611b58836005815181101515611f6557fe5b602090810290910101525b8554875460001960ff91821601811691161480611fa05750865460ff166001148015611fa05750855460ff166003145b80611fbe5750865460ff166008148015611fbe5750855460ff166009145b1561202557610bb8836004815181101515611fd557fe5b602090810290910101805190910190528251611f409084906004908110611ff857fe5b90602001906020020151111561202557611f4083600481518110151561201a57fe5b602090810290910101525b8654865460001960ff918216018116911614806120555750855460ff1660011480156120555750865460ff166003145b806120735750855460ff1660081480156120735750865460ff166009145b156120da57610bb883600581518110151561208a57fe5b602090810290910101805190910190528251611f4090849060059081106120ad57fe5b9060200190602002015111156120da57611f408360058151811015156120cf57fe5b602090810290910101525b6120e5878785613b0b565b91506120f28c8486614317565b83600b81518110151561210157fe5b602090810290910101526007805484517f1f3610bd2f9b39fa4fb2aed817ac07ddade00f9054b95f8c2c4d89a8e7ff70f7928691811061213d57fe5b9060200190602002015142854388600b81518110151561215957fe5b60209081029091018101516040805197885260ff9096169187019190915267ffffffffffffffff909316858501526060850191909152608084015260a0830152519081900360c00190a1600754875484517f7caf0b6ddcfcca510ad0e5b907cf2aec2baf462762e21fbc5275602854fdb77a92918f9160ff821691610100900461ffff1690889060009081106121eb57fe5b9060200190602002015188600181518110151561220457fe5b9060200190602002015189600881518110151561221d57fe5b906020019060200201518a600381518110151561223657fe5b906020019060200201518b600481518110151561224f57fe5b906020019060200201518c600981518110151561226857fe5b6020908102909101810151604080519b8c52918b019990995260ff9097168988015261ffff95861660608a015263ffffffff94851660808a015292841660a089015290831660c088015290911660e08601521661010084015261012083019190915251908190036101400190a1600754865484517f431176de03c5a30b34c79db5b4f5d69ec4101b6ee399cf47a4cfc063af47dd7892918d9160ff82169161ffff6101008204169163ffffffff6301000000830481169267010000000000000081048216926b01000000000000000000000082048316926f01000000000000000000000000000000909204909116908c90600590811061236457fe5b906020019060200201518c600a81518110151561237d57fe5b6020908102909101810151604080519b8c52918b019990995260ff9097168988015261ffff95861660608a015263ffffffff94851660808a015292841660a089015290831660c088015290911660e08601521661010084015261012083019190915251908190036101400190a16007546123fe90600163ffffffff6135f516565b6007555b505050505050505050505050565b60115468010000000000000000900461ffff1681565b6000805481908190600160a060020a0316331461244257600080fd5b5050600f54309150813190808210612492576000600f8190558054604051600160a060020a039091169183156108fc02918491818181858888f193505050501580156115b2573d6000803e3d6000fd5b505050565b60056020526000908152604090205481565b600054600160a060020a031633146124c057600080fd5b601380549115156101000261ff0019909216919091179055565b600854600160a060020a031681565b601154610100900460ff1681565b600d5481565b601754600090819060ff161561251257600080fd5b6008546040805160e160020a6331a9108f02815260048101879052905186923392600160a060020a0390911691636352211e916024808201926020929091908290030181600087803b15801561256757600080fd5b505af115801561257b573d6000803e3d6000fd5b505050506040513d602081101561259157600080fd5b5051600160a060020a0316146125f1576040805160e560020a62461bcd02815260206004820152601660248201527f6d757374206265206f776e6572206f6620746f6b656e00000000000000000000604482015290519081900360640190fd5b600c543414612670576040805160e560020a62461bcd02815260206004820152602260248201527f666565206d75737420626520657175616c7320746f206176617461722070726960448201527f6365000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6000858152600360205260409020600181015490935064e8d4a51000900691506126b56126a88564e8d4a5100063ffffffff613ac816565b839063ffffffff6135f516565b6001840181905560408051878152602081019290925280517ff393c23ec42fd629a14bf283f25a6976256f2be74ca5ea8a762dc54a2be6e9e69281900390910190a15050505050565b600054600160a060020a0316331461271557600080fd5b6013805460ff1916911515919091179055565b600054600160a060020a0316331461273f57600080fd5b60175460ff161561274f57600080fd5b6017805460ff191660011790556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b6011546d0100000000000000000000000000900460ff1681565b60125490565b600054600160a060020a031681565b6003602081905260009182526040909120805460018201546002830154929093015460ff821693610100830461ffff908116946301000000850463ffffffff9081169567010000000000000081048216956b01000000000000000000000082048316956f010000000000000000000000000000008304841695609860020a8404169460a860020a9093048416939092818116926401000000008204909216916801000000000000000090910467ffffffffffffffff16908d565b600060048281548110151561288157fe5b90600052602060002001549050919050565b600080600080606060008060008060008060608c9b50600860009054906101000a9004600160a060020a0316600160a060020a0316636352211e8e6040518263ffffffff1660e060020a02815260040180828152602001915050602060405180830381600087803b15801561290757600080fd5b505af115801561291b573d6000803e3d6000fd5b505050506040513d602081101561293157600080fd5b505160008e8152600360209081526040918290208251600680825260e08201909452939e509450820160c08038833950508354825160ff82169d50610100820461ffff169c509293506301000000900463ffffffff1691839150600090811061299657fe5b63ffffffff928316602091820290920101528254825167010000000000000090910490911690829060019081106129c957fe5b63ffffffff92831660209182029092010152825482516b0100000000000000000000009091049091169082906002908110612a0057fe5b63ffffffff92831660209182029092010152825482516f010000000000000000000000000000009091049091169082906003908110612a3b57fe5b63ffffffff929092166020928302919091019091015281548151609860020a90910461ffff169082906004908110612a6f57fe5b63ffffffff928316602091820290920101528254825160a860020a9091049091169082906005908110612a9e57fe5b63ffffffff9283166020918202929092010152600283015460018401546003909401549d9f9c9e509a9c999b919a8082169a640100000000820490921699509297506801000000000000000090920467ffffffffffffffff169550909350915050565b60175460009060ff1615612b1457600080fd5b6010543414612b6d576040805160e560020a62461bcd02815260206004820152601f60248201527f666565206d75737420626520657175616c20746f206472617720707269636500604482015290519081900360640190fd5b600954600160a060020a03161515612bbd576040805160e560020a62461bcd02815260206004820152601360248201526000805160206150a3833981519152604482015290519081900360640190fd5b6008546009546040805160e060020a63b28945a5028152336004820152600160a060020a039283166024820152600160448201529051919092169163b28945a591606480830192600092919082900301818387803b158015612c1e57600080fd5b505af1158015612c32573d6000803e3d6000fd5b5050601054600f54612c4c9350915063ffffffff6135f516565b600f55612c5a33600161487e565b905090565b60105481565b6011546601000000000000900461ffff1681565b601754600090819060ff1615612c8e57600080fd5b6010543414612ce7576040805160e560020a62461bcd02815260206004820152601f60248201527f666565206d75737420626520657175616c20746f206472617720707269636500604482015290519081900360640190fd5b600954600160a060020a03161515612d37576040805160e560020a62461bcd02815260206004820152601360248201526000805160206150a3833981519152604482015290519081900360640190fd5b6008546009546040805160e060020a63b28945a5028152336004820152600160a060020a039283166024820152600160448201529051919092169163b28945a591606480830192600092919082900301818387803b158015612d9857600080fd5b505af1158015612dac573d6000803e3d6000fd5b50505050612dbb33600161487e565b9150600160a060020a03831615801590612dd65750600d5415155b8015612deb5750600160a060020a0383163314155b8015612e8b5750600854604080517f70a08231000000000000000000000000000000000000000000000000000000008152600160a060020a038681166004830152915160009392909216916370a082319160248082019260209290919082900301818787803b158015612e5d57600080fd5b505af1158015612e71573d6000803e3d6000fd5b505050506040513d6020811015612e8757600080fd5b5051115b15612f9757612710612ea8600d5434613ac890919063ffffffff16565b811515612eb157fe5b04905034811115612f32576040805160e560020a62461bcd02815260206004820152602560248201527f72656665727265206375742063616e6e6f74206265206c61726765722074686160448201527f6e20666565000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b604051600160a060020a0384169082156108fc029083906000818181858888f19350505050158015612f68573d6000803e3d6000fd5b50601054612f8f90612f80908363ffffffff614d6e16565b600f549063ffffffff6135f516565b600f55612fb0565b601054600f54612fac9163ffffffff6135f516565b600f555b50919050565b60175460009060ff1615612fc957600080fd5b600054600160a060020a03163314612fe057600080fd5b600954600160a060020a03161515613030576040805160e560020a62461bcd02815260206004820152601360248201526000805160206150a3833981519152604482015290519081900360640190fd5b601461ffff8316111561308d576040805160e560020a62461bcd02815260206004820152601e60248201527f6d6178696d756d206c6576656c2063616e6e6f74206578636565642032300000604482015290519081900360640190fd5b6008546009546040805160e060020a63b28945a5028152336004820152600160a060020a039283166024820152600160448201529051919092169163b28945a591606480830192600092919082900301818387803b1580156130ee57600080fd5b505af1158015613102573d6000803e3d6000fd5b50505050613110338361487e565b92915050565b600954600160a060020a031681565b60008054600160a060020a0316331461313d57600080fd5b81905080600160a060020a031663f4b86c486040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561317e57600080fd5b505af1158015613192573d6000803e3d6000fd5b505050506040513d60208110156131a857600080fd5b50511515613200576040805160e560020a62461bcd02815260206004820152601760248201527f6e6565647320746f206265206d61726b6574706c616365000000000000000000604482015290519081900360640190fd5b6009805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039290921691909117905550565b600054600160a060020a0316331461324757600080fd5b600c55565b600054600160a060020a0316331461326357600080fd5b600b55565b601154640100000000900461ffff1681565b60075481565b6011546c01000000000000000000000000900460ff1681565b60065460ff1681565b6011546e010000000000000000000000000000900463ffffffff1681565b600e5481565b60175460009060ff16156132d957600080fd5b60135460ff61010090910416151560011461333e576040805160e560020a62461bcd02815260206004820152601b60248201527f73746172746572207061636b206973206e6f74206f6e2073616c650000000000604482015290519081900360640190fd5b60145434146133bd576040805160e560020a62461bcd02815260206004820152602860248201527f666565206d75737420626520657175616c7320746f207374617274657220706160448201527f636b207072696365000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600954600160a060020a0316151561340d576040805160e560020a62461bcd02815260206004820152601360248201526000805160206150a3833981519152604482015290519081900360640190fd5b601454600f546134229163ffffffff6135f516565b600f556008546009546040805160e060020a63b28945a5028152336004820152600160a060020a039283166024820152600160448201529051919092169163b28945a591606480830192600092919082900301818387803b15801561348657600080fd5b505af115801561349a573d6000803e3d6000fd5b5050601554612c5a925033915061ffff1661487e565b600054600160a060020a031633146134c757600080fd5b600160a060020a03811615156134dc57600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600054600160a060020a0316331461355b57600080fd5b600e55565b600054600160a060020a0316331461357757600080fd5b600d55565b600c5481565b60115460ff80821692610100830482169261ffff6201000082048116936401000000008304821693660100000000000084048316936801000000000000000081048416936a0100000000000000000000820416927601000000000000000000000000000000000000000000009091041690565b8181018281101561311057fe5b6000888152600360205260408082208151600580825260c0820190935290926060929091829182919081602001602082028038833901905050935060008661ffff1611156137d157600185015460469060649006106137d15760018501546064906402540be400900406925060148310156136a2578584600081518110151561368757fe5b602090810290910101805161ffff9201919091169052613714565b60288310156136bb578584600181518110151561368757fe5b603c8310156136d4578584600281518110151561368757fe5b60508310156136ed578584600381518110151561368757fe5b858460048151811015156136fd57fe5b602090810290910101805161ffff92019190911690525b6001850154605a9060649006106137d157600a83069150600282101561375f578584600081518110151561374457fe5b602090810290910101805161ffff92019190911690526137d1565b6004821015613778578584600181518110151561374457fe5b6006821015613791578584600281518110151561374457fe5b60088210156137aa578584600381518110151561374457fe5b858460048151811015156137ba57fe5b602090810290910101805161ffff92019190911690525b601160029054906101000a900461ffff168460008151811015156137f157fe5b906020019060200201518d010261ffff168560000160038282829054906101000a900463ffffffff160192506101000a81548163ffffffff021916908363ffffffff160217905550601160049054906101000a900461ffff1684600181518110151561385957fe5b906020019060200201518c010261ffff168560000160078282829054906101000a900463ffffffff160192506101000a81548163ffffffff021916908363ffffffff160217905550601160069054906101000a900461ffff168460028151811015156138c157fe5b906020019060200201518b010261ffff1685600001600b8282829054906101000a900463ffffffff160192506101000a81548163ffffffff021916908363ffffffff160217905550601160089054906101000a900461ffff1684600381518110151561392957fe5b6020908102919091010151865472ffffffff000000000000000000000000000000198116918c019290920261ffff9081166f010000000000000000000000000000009384900463ffffffff90811691909101169092021780875560115474ffff000000000000000000000000000000000000001982166a010000000000000000000090910483168b02609860020a92839004841601909216021785558351849060049081106139d457fe5b60209081029091010151855461010063ffffffff60a860020a808404821661ffff958d018616019091160278ffffffff0000000000000000000000000000000000000000001990921691909117818104831660019081018416830262ffff00199092169190911780895560028901805463ffffffff1916905590549190049091169150811115613a6357506001545b6001805482908110613a7157fe5b90600052602060002090600891828204019190066004029054906101000a900463ffffffff168560020160046101000a81548163ffffffff021916908363ffffffff16021790555050505050505050505050505050565b6000821515613ad957506000613110565b50818102818382811515613ae957fe5b041461311057fe5b600061311061271083600e5491900463ffffffff613ac816565b600080600080600080600080600080600198506000975060009550613b638b6003815181101515613b3857fe5b602090810290910101518d5463ffffffff6f0100000000000000000000000000000090910416614d80565b1515613b6e57600197505b8815613e575760ff88161515613ca7578a6004815181101515613b8d57fe5b90602001906020020151613b9f614de1565b61ffff1611613bd9578a6000815181101515613bb757fe5b906020019060200201516002029650613bd26002878c614e00565b9950613c03565b8a6000815181101515613be857fe5b906020019060200201519650613c006000878c614e00565b99505b8b54670100000000000000900463ffffffff168711613c255760019650613c3d565b8b54670100000000000000900463ffffffff16909603955b868b6006815181101515613c4d57fe5b6020908102909101015111613c7c5760008b6006815181101515613c6d57fe5b60209081029091010152613c9e565b868b6006815181101515613c8c57fe5b60209081029091010180519190910390525b60019750613dd3565b8760ff1660011415613dd3578a6005815181101515613cc257fe5b90602001906020020151613cd4614de1565b61ffff1611613d07578b54600263ffffffff6301000000909204821602169650613d006003878c614e00565b9950613d27565b8b546301000000900463ffffffff169650613d246001878c614e00565b99505b8a6001815181101515613d3657fe5b602090810290910101518711613d4f5760019650613d6d565b8a6001815181101515613d5e57fe5b90602001906020020151870396505b868b6002815181101515613d7d57fe5b6020908102909101015111613dac5760008b6002815181101515613d9d57fe5b60209081029091010152613dce565b868b6002815181101515613dbc57fe5b60209081029091010180519190910390525b600097505b60115460019096019560ff7601000000000000000000000000000000000000000000009091048116908716101580613e24575060008b6006815181101515613e1757fe5b9060200190602002015111155b80613e48575060008b6002815181101515613e3b57fe5b9060200190602002015111155b15613e5257600098505b613b6e565b8b548d54600096508695506101009182900461ffff90811692909104161415613eb65760028054600a908110613e8957fe5b90600052602060002090600891828204019190066004029054906101000a900463ffffffff169450613fad565b8b548d5461ffff61010092839004811692909104161115613f2d578b548d54600b61ffff610100938490048116939092048216929092031610613efc5760019450613f28565b8c548c5460028054909261ffff61010091829004811691909304831603600a01909116908110613e8957fe5b613fad565b8b548d5461ffff61010092839004811692909104161015613fad578c548c5461ffff610100928390048116929091048116919091031692506014831115613f7357601492505b60028054600a8501908110613f8457fe5b90600052602060002090600891828204019190066004029054906101000a900463ffffffff1694505b8a6006815181101515613fbc57fe5b906020019060200201518b6002815181101515613fd557fe5b9060200190602002015114156140055760028b6007815181101515613ff657fe5b60209081029091010152614307565b8a600681518110151561401457fe5b906020019060200201518b600281518110151561402d57fe5b9060200190602002015111156141cd5760008b600781518110151561404e57fe5b602090810290910101526003808e0154908d015410156140ed578a600c81518110151561407757fe5b9060200190602002015160048d6003015481548110151561409457fe5b6000918252602090912001558a518b90600d9081106140af57fe5b9060200190602002015160048e600301548154811015156140cc57fe5b6000918252602090912001556003808d018054918f01805490915581905591505b60028d01805463ffffffff19811663ffffffff918216880182161791829055640100000000820481169116111561413f5760028d018054640100000000810463ffffffff1663ffffffff199091161790555b600a606463ffffffff60698802160460050163ffffffff1681151561416057fe5b049350600063ffffffff85161161417657600193505b60028c01805463ffffffff19811663ffffffff91821687018216179182905564010000000082048116911611156141c85760028c018054640100000000810463ffffffff1663ffffffff199091161790555b614307565b8a60028151811015156141dc57fe5b906020019060200201518b60068151811015156141f557fe5b9060200190602002015111156143075760018b600781518110151561421657fe5b60209081029091010152606463ffffffff6023870216049050600063ffffffff821611614241575060015b60028d01805463ffffffff19811663ffffffff91821684018216179182905564010000000082048116911611156142935760028d018054640100000000810463ffffffff1663ffffffff199091161790555b606463ffffffff601e870216049350600063ffffffff8516116142b557600193505b60028c01805463ffffffff19811663ffffffff91821687018216179182905564010000000082048116911611156143075760028c018054640100000000810463ffffffff1663ffffffff199091161790555b5050505050505050509392505050565b600080600061433184600f546135f590919063ffffffff16565b600f55614344348563ffffffff614d6e16565b91506000925084600781518110151561435957fe5b90602001906020020151600114156143f1576143a9826005600088600a81518110151561438257fe5b906020019060200201518152602001908152602001600020546135f590919063ffffffff16565b6005600087600a8151811015156143bc57fe5b60209081029091018101518252810191909152604001600020556012546143e9908363ffffffff6135f516565b601255614875565b6008546040805160e160020a6331a9108f028152600481018990529051600160a060020a0390921691636352211e916024808201926020929091908290030181600087803b15801561444257600080fd5b505af1158015614456573d6000803e3d6000fd5b505050506040513d602081101561446c57600080fd5b505185519091508590600790811061448057fe5b906020019060200201516000141561483d5784600a8151811015156144a157fe5b906020019060200201518560098151811015156144ba57fe5b9060200190602002015111156146555760006005600087600a8151811015156144df57fe5b9060200190602002015181526020019081526020016000205411156145b65761453c6005600087600a81518110151561451457fe5b90602001906020020151815260200190815260200160002054846135f590919063ffffffff16565b925061457e6005600087600a81518110151561455457fe5b90602001906020020151815260200190815260200160002054601254614d6e90919063ffffffff16565b60128190555060006005600087600a81518110151561459957fe5b906020019060200201518152602001908152602001600020819055505b6000600560008760098151811015156145cb57fe5b906020019060200201518152602001908152602001600020541115614650576146006005600087600981518110151561451457fe5b92506146186005600087600981518110151561455457fe5b60128190555060006005600087600981518110151561463357fe5b906020019060200201518152602001908152602001600020819055505b6147f2565b603285600981518110151561466657fe5b9060200190602002015110156147f257609685600a81518110151561468757fe5b906020019060200201511080156146c9575060006005600087600a8151811015156146ae57fe5b90602001906020020151815260200190815260200160002054115b15614734576146e46005600087600a81518110151561451457fe5b92506146fc6005600087600a81518110151561455457fe5b60128190555060006005600087600a81518110151561471757fe5b906020019060200201518152602001908152602001600020819055505b609685600a81518110151561474557fe5b90602001906020020151108015614787575060006005600087600981518110151561476c57fe5b90602001906020020151815260200190815260200160002054115b156147f2576147a26005600087600981518110151561451457fe5b92506147ba6005600087600981518110151561455457fe5b6012819055506000600560008760098151811015156147d557fe5b906020019060200201518152602001908152602001600020819055505b600160a060020a0381166108fc61480f858563ffffffff6135f516565b6040518115909202916000818181858888f19350505050158015614837573d6000803e3d6000fd5b50614875565b604051600160a060020a0382169083156108fc029084906000818181858888f19350505050158015614873573d6000803e3d6000fd5b505b50509392505050565b60008060008061488c615036565b600160a060020a0387161515614912576040805160e560020a62461bcd02815260206004820152602660248201527f63616e6e6f7420637265617465206361726420666f7220756e6b6e6f776e206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6006805460ff198116600160ff92831601821617918290551660041415614941576006805460ff191660081790555b60065460ff16600a141561495d576006805460ff191660011790555b60015461ffff871694508411156149745760015493505b6000925060018661ffff1611156149bc57600180548590811061499357fe5b90600052602060002090600891828204019190066004029054906101000a900463ffffffff1692505b600854604080517f6a627842000000000000000000000000000000000000000000000000000000008152600160a060020a038a8116600483015291519190921691636a6278429160248083019260209291908290030181600087803b158015614a2457600080fd5b505af1158015614a38573d6000803e3d6000fd5b505050506040513d6020811015614a4e57600080fd5b5051604080516101a08101825260065460ff16815261ffff891660208201526001918101829052606081018290526003608082015260a08101829052601960c082015260e08101919091529092506101008101614aa9614e20565b81526020018463ffffffff168152602001600186815481101515614ac957fe5b90600052602060002090600891828204019190066004029054906101000a900463ffffffff1663ffffffff1681526020014267ffffffffffffffff168152602001838152509050806003600084815260200190815260200160002060008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548161ffff021916908361ffff16021790555060408201518160000160036101000a81548163ffffffff021916908363ffffffff16021790555060608201518160000160076101000a81548163ffffffff021916908363ffffffff160217905550608082015181600001600b6101000a81548163ffffffff021916908363ffffffff16021790555060a082015181600001600f6101000a81548163ffffffff021916908363ffffffff16021790555060c08201518160000160136101000a81548161ffff021916908361ffff16021790555060e08201518160000160156101000a81548163ffffffff021916908363ffffffff16021790555061010082015181600101556101208201518160020160006101000a81548163ffffffff021916908363ffffffff1602179055506101408201518160020160046101000a81548163ffffffff021916908363ffffffff1602179055506101608201518160020160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550610180820151816003015590505060048290806001815401808255809150509060018203906000526020600020016000909192909190915055507ff9c4ddffd4aef856c95622e875f2337d049085a3d12c8095c51eca343a9a1fe333836040518083600160a060020a0316600160a060020a031681526020018281526020019250505060405180910390a15095945050505050565b600082821115614d7a57fe5b50900390565b60008060006064614d8f614f7d565b811515614d9857fe5b066001019150600a848601866103e802811515614db157fe5b04600501811515614dbe57fe5b04905060ff82168110614dd45760019250614dd9565b600092505b505092915050565b6000612710614dee614f7d565b811515614df757fe5b06600101905090565b6003600292830260ff90811690930a908102199190911692909116021790565b6000806402540be40064e8d4a51000614e37614f7d565b811515614e4057fe5b06811515614e4a57fe5b049150614e62826402540be40063ffffffff613ac816565b60115490925063ffffffff6e01000000000000000000000000000082048116916001720100000000000000000000000000000000000090910482168390030116614eaa614f7d565b811515614eb357fe5b06016064029050614ecd81836135f590919063ffffffff16565b91506064614ed9614f7d565b811515614ee257fe5b60115491900691506c01000000000000000000000000900460ff16811015614f1c57614f1582605a63ffffffff6135f516565b9150614f79565b6011546c01000000000000000000000000810460ff9081166d010000000000000000000000000090920481169190910116811015614f6557614f1582604663ffffffff6135f516565b614f7682603263ffffffff6135f516565b91505b5090565b60165460408051602080820193909352436000198101408284015260021981014060608301526004198101406080830152600619014060a0808301919091528251808303909101815260c09091019182905280516000939192918291908401908083835b602083106150005780518252601f199092019160209182019101614fe1565b5181516020939093036101000a600019018019909116921691909117905260405192018290039091206016819055949350505050565b604080516101a081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081018290526101208101829052610140810182905261016081018290526101808101919091529056006d61726b6574706c616365206e6f742073657400000000000000000000000000a165627a7a72305820bcbe2d0f8c761e0b8f5e6c28256e268c350d361db7e971d7fef2140b04cfee7e00290000000000000000000000003a633c367c4276311c06d13c92a156f40a272c4c
Deployed Bytecode
0x6080604052600436106102845763ffffffff60e060020a60003504166301d5c48881146102895780630f0308fb146102b55780631bd8f9ca146102e05780631c70362c1461030757806329aec173146103725780632d06fd13146103a25780632ed73df6146103b757806335bf82f6146103cc5780633d82cf5a146103e45780633f4ba83a146103f957806340fa61f71461040e5780634341aebc1461042357806344d1a9ae1461043a5780634cd7699a14610452578063570200c0146104805780635c714e901461049f5780635c7b0288146104b45780635c975abb146104c95780635cc236ce146104f25780635f96d9fa1461050d5780635fd8c7101461052257806360e71f2f14610537578063682bc77e1461054f5780636a30eb24146105695780636e6b80041461059a5780636e88a7bd146105af5780637a70abda146105c4578063809ae91e146105d25780638456cb59146105ec5780638911cd9a146106015780638b6715cd146106165780638da5cb5b1461062b5780638dc10768146106405780639070222e146106e05780639188d312146106f8578063923ce65f146107ef57806393af339f146107f75780639cd0126a1461080c5780639f91d14514610821578063a14cf39414610835578063abc8c7af14610851578063b47cc55614610866578063b61cb05814610887578063bae18ac31461089f578063c0ba6adf146108b7578063cd2d8a2d146108cc578063d08e2354146108e1578063d127bb9d146108f6578063d77ff9ea1461090b578063e72fd4e114610920578063f114572714610935578063f2fde38b1461093d578063f6cf3a7d1461095e578063f81a95db14610976578063f945ba2d1461098e578063fefd336c146109a3575b600080fd5b34801561029557600080fd5b5061029e610a09565b6040805161ffff9092168252519081900360200190f35b3480156102c157600080fd5b506102ca610a21565b6040805160ff9092168252519081900360200190f35b3480156102ec57600080fd5b506102f5610a2a565b60408051918252519081900360200190f35b34801561031357600080fd5b5061037060ff60043581169060243581169061ffff60443581169160643582169160843581169160a43582169160c435169060e4358116906101043581169063ffffffff6101243581169161014435909116906101643516610a30565b005b61037060043561ffff60243581169060443581169060643581169060843581169060a43581169060c43516610d2a565b3480156103ae57600080fd5b506102f56113c3565b3480156103c357600080fd5b5061029e6113e2565b3480156103d857600080fd5b506103706004356113ec565b3480156103f057600080fd5b506102ca611408565b34801561040557600080fd5b5061037061142b565b34801561041a57600080fd5b506102f5611488565b61037060246004803582810192910135903561148e565b34801561044657600080fd5b506103706004356115b8565b34801561045e57600080fd5b506104676115d4565b6040805163ffffffff9092168252519081900360200190f35b34801561048c57600080fd5b5061037060043561ffff602435166115f6565b3480156104ab57600080fd5b506102f56116ad565b3480156104c057600080fd5b5061029e6116b3565b3480156104d557600080fd5b506104de6116c3565b604080519115158252519081900360200190f35b610370600435602460c43560e43561ffff61010435166116cc565b34801561051957600080fd5b5061029e612410565b34801561052e57600080fd5b50610370612426565b34801561054357600080fd5b506102f5600435612497565b34801561055b57600080fd5b5061037060043515156124a9565b34801561057557600080fd5b5061057e6124da565b60408051600160a060020a039092168252519081900360200190f35b3480156105a657600080fd5b506102ca6124e9565b3480156105bb57600080fd5b506102f56124f7565b6103706004356024356124fd565b3480156105de57600080fd5b5061037060043515156126fe565b3480156105f857600080fd5b50610370612728565b34801561060d57600080fd5b506102ca612787565b34801561062257600080fd5b506102f56127a1565b34801561063757600080fd5b5061057e6127a7565b34801561064c57600080fd5b506106586004356127b6565b6040805160ff909e168e5261ffff9c8d1660208f015263ffffffff9b8c168e820152998b1660608e0152978a1660808d015295891660a08c01529390981660c08a015290861660e08901526101008801529484166101208701529390921661014085015267ffffffffffffffff90921661016084015261018083015251908190036101a00190f35b3480156106ec57600080fd5b506102f5600435612870565b34801561070457600080fd5b50610710600435612893565b604051808b81526020018a600160a060020a0316600160a060020a031681526020018960ff1660ff1681526020018861ffff1661ffff168152602001806020018763ffffffff1663ffffffff1681526020018663ffffffff1663ffffffff1681526020018581526020018467ffffffffffffffff1667ffffffffffffffff168152602001838152602001828103825288818151815260200191508051906020019060200280838360005b838110156107d25781810151838201526020016107ba565b505050509050019b50505050505050505050505060405180910390f35b6102f5612b01565b34801561080357600080fd5b506102f5612c5f565b34801561081857600080fd5b5061029e612c65565b6102f5600160a060020a0360043516612c79565b34801561084157600080fd5b506102f561ffff60043516612fb6565b34801561085d57600080fd5b5061057e613116565b34801561087257600080fd5b50610370600160a060020a0360043516613125565b34801561089357600080fd5b50610370600435613230565b3480156108ab57600080fd5b5061037060043561324c565b3480156108c357600080fd5b5061029e613268565b3480156108d857600080fd5b506102f561327a565b3480156108ed57600080fd5b506102ca613280565b34801561090257600080fd5b506102ca613299565b34801561091757600080fd5b506104676132a2565b34801561092c57600080fd5b506102f56132c0565b6102f56132c6565b34801561094957600080fd5b50610370600160a060020a03600435166134b0565b34801561096a57600080fd5b50610370600435613544565b34801561098257600080fd5b50610370600435613560565b34801561099a57600080fd5b506102f561357c565b3480156109af57600080fd5b506109b8613582565b6040805160ff998a168152978916602089015261ffff968716888201529486166060880152928516608087015290841660a086015290921660c0840152921660e08201529051908190036101000190f35b6011546a0100000000000000000000900461ffff1681565b60115460ff1681565b600a5481565b600054600160a060020a03163314610a4757600080fd5b63ffffffff8084169083161015610ace576040805160e560020a62461bcd02815260206004820152602c60248201527f72616e6765206d6178206d757374206265206c6172676572206f72206571756160448201527f6c732072616e6765206d696e0000000000000000000000000000000000000000606482015290519081900360840190fd5b6305f5e10063ffffffff831610610b2f576040805160e560020a62461bcd02815260206004820181905260248201527f72616e6765206d61782063616e6e6f7420657863656564203939393939393939604482015290519081900360640190fd5b60808160ff1611158015610b46575060008160ff16115b1515610bc2576040805160e560020a62461bcd02815260206004820152602760248201527f626174746c6520726f756e6473206d757374206265206265747765656e20302060448201527f616e642031323800000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b8b601160006101000a81548160ff021916908360ff1602179055508a601160016101000a81548160ff021916908360ff16021790555089601160026101000a81548161ffff021916908361ffff16021790555088601160046101000a81548161ffff021916908361ffff16021790555087601160066101000a81548161ffff021916908361ffff16021790555086601160086101000a81548161ffff021916908361ffff160217905550856011600a6101000a81548161ffff021916908361ffff160217905550846011600c6101000a81548160ff021916908360ff160217905550836011600d6101000a81548160ff021916908360ff160217905550826011600e6101000a81548163ffffffff021916908363ffffffff16021790555081601160126101000a81548163ffffffff021916908363ffffffff16021790555080601160166101000a81548160ff021916908360ff160217905550505050505050505050505050565b60175460009081908190819060ff1615610d4357600080fd5b6008546040805160e160020a6331a9108f028152600481018e905290518d923392600160a060020a0390911691636352211e916024808201926020929091908290030181600087803b158015610d9857600080fd5b505af1158015610dac573d6000803e3d6000fd5b505050506040513d6020811015610dc257600080fd5b5051600160a060020a031614610e22576040805160e560020a62461bcd02815260206004820152601660248201527f6d757374206265206f776e6572206f6620746f6b656e00000000000000000000604482015290519081900360640190fd5b60008b61ffff1610158015610e3c575060008a61ffff1610155b8015610e4d575060008961ffff1610155b8015610e5e575060008861ffff1610155b8015610e6f575060008761ffff1610155b8015610e80575060008661ffff1610155b1515610efc576040805160e560020a62461bcd02815260206004820152602760248201527f6c6576656c2075702061747472696275746573206d757374206265206d6f726560448201527f207468616e203000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600b543414610f7b576040805160e560020a62461bcd02815260206004820152602360248201527f666565206d75737420626520657175616c7320746f207570677261646520707260448201527f6963650000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60008c8152600360205260409020600281015490955063ffffffff8082166401000000009092041614610ff8576040805160e560020a62461bcd02815260206004820152601f60248201527f657870206973206e6f74206d61782079657420666f72206c6576656c20757000604482015290519081900360640190fd5b845461ffff61010090910481161061105a576040805160e560020a62461bcd02815260206004820152601e60248201527f63617264206c6576656c206d6178696d756d2068617320726561636865640000604482015290519081900360640190fd5b6011548554611b586a010000000000000000000090920461ffff9081168a02609860020a909204811691909101161115611104576040805160e560020a62461bcd02815260206004820152602360248201527f637269746963616c2072617465206d6178206f6620373020686173207265616360448201527f6865640000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b8454888801870161ffff9081168d8d018c01821601955060009450600161010090920416118015611143575084546301000000900463ffffffff166001145b801561116157508454670100000000000000900463ffffffff166001145b8015611183575084546b010000000000000000000000900463ffffffff166003145b80156111a9575084546f01000000000000000000000000000000900463ffffffff166001145b80156111c157508454609860020a900461ffff166019145b80156111db5750845460a860020a900463ffffffff166001145b15611273578454601154600561ffff61010093849004811660018101821692909204965092820460ff9081168702918790039216919091020116915083821461126e576040805160e560020a62461bcd02815260206004820152601860248201527f757067726164652067656d73206e6f7420757365642075700000000000000000604482015290519081900360640190fd5b61135a565b845460059061ffff6101009091048116600101160661ffff16600014156112fe57601154610100900460ff1684146112f5576040805160e560020a62461bcd02815260206004820152601860248201527f757067726164652067656d73206e6f7420757365642075700000000000000000604482015290519081900360640190fd5b6001925061135a565b60115460ff16841461135a576040805160e560020a62461bcd02815260206004820152601860248201527f757067726164652067656d73206e6f7420757365642075700000000000000000604482015290519081900360640190fd5b600b54600f5461136f9163ffffffff6135f516565b600f556113828c8c8c8c8c8c8c8a613602565b604080518d815290517f6a1b6f91db361bdf7356d3942ed64f2ee2fea430979dbba7ea23f44e8b2110079181900360200190a1505050505050505050505050565b60008054600160a060020a031633146113db57600080fd5b50600f5490565b60155461ffff1681565b600054600160a060020a0316331461140357600080fd5b600a55565b601154760100000000000000000000000000000000000000000000900460ff1681565b600054600160a060020a0316331461144257600080fd5b60175460ff16151561145357600080fd5b6017805460ff191690556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3390600090a1565b600b5481565b60008054600160a060020a031633146114a657600080fd5b3482840214611525576040805160e560020a62461bcd02815260206004820152602f60248201527f746f6b656e73206d75737420626520656e6f75676820746f206469737472696260448201527f75746520616d6f6e672072616e6b730000000000000000000000000000000000606482015290519081900360840190fd5b5060005b828110156115b257611569826005600087878681811061154557fe5b905060200201358152602001908152602001600020546135f590919063ffffffff16565b6005600086868581811061157957fe5b905060200201358152602001908152602001600020819055506115a7826012546135f590919063ffffffff16565b601255600101611529565b50505050565b600054600160a060020a031633146115cf57600080fd5b601055565b6011547201000000000000000000000000000000000000900463ffffffff1681565b600054600160a060020a0316331461160d57600080fd5b601461ffff82161115611690576040805160e560020a62461bcd02815260206004820152602360248201527f73746172746572207061636b206c6576656c2063616e6e6f742065786365656460448201527f2032300000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6014919091556015805461ffff191661ffff909216919091179055565b60145481565b60115462010000900461ffff1681565b60175460ff1681565b601754600090819081908190606090829060ff16156116ea57600080fd5b6008546040805160e160020a6331a9108f028152600481018e905290518d923392600160a060020a0390911691636352211e916024808201926020929091908290030181600087803b15801561173f57600080fd5b505af1158015611753573d6000803e3d6000fd5b505050506040513d602081101561176957600080fd5b5051600160a060020a0316146117c9576040805160e560020a62461bcd02815260206004820152601660248201527f6d757374206265206f776e6572206f6620746f6b656e00000000000000000000604482015290519081900360640190fd5b60135460ff161515611825576040805160e560020a62461bcd02815260206004820152601660248201527f626174746c6520686173206e6f74207374617274656400000000000000000000604482015290519081900360640190fd5b6008546040805160e160020a6331a9108f028152600481018d90529051600160a060020a0390921691636352211e916024808201926020929091908290030181600087803b15801561187657600080fd5b505af115801561188a573d6000803e3d6000fd5b505050506040513d60208110156118a057600080fd5b5051600160a060020a0316331415611902576040805160e560020a62461bcd02815260206004820152601a60248201527f63616e6e6f74206368616c6c656e6765206f776e206361726473000000000000604482015290519081900360640190fd5b60008c8152600360205260409020805490975060a860020a900463ffffffff168b6004602002013563ffffffff168c600360058110151561193f57fe5b602002013563ffffffff168d600260058110151561195957fe5b602002013563ffffffff168e600160058110151561197357fe5b602002013563ffffffff168f600060058110151561198d57fe5b602002013563ffffffff160101010163ffffffff161415156119f9576040805160e560020a62461bcd02815260206004820152601660248201527f666c6578692067656d73206e6f74207573656420757000000000000000000000604482015290519081900360640190fd5b60008a8152600360208190526040909120908101549096508914611a9657604080518d8152602081018c90528082018b90526001606082015243608082015290517faf2d0f76f81104661d314f5e65f3eb5d70d9bd6112c30547b2720753baf1a8319181900360a00190a160405133903480156108fc02916000818181858888f19350505050158015611a90573d6000803e3d6000fd5b50612402565b855461ffff8981166101009092041614611b2357604080518d8152602081018c90528082018b90526002606082015243608082015290517faf2d0f76f81104661d314f5e65f3eb5d70d9bd6112c30547b2720753baf1a8319181900360a00190a160405133903480156108fc02916000818181858888f19350505050158015611a90573d6000803e3d6000fd5b600a549450609686600301541015611b4957611b4685600263ffffffff613ac816565b94505b348514611bc6576040805160e560020a62461bcd02815260206004820152602560248201527f666565206d75737420626520657175616c7320746f206368616c6c656e67652060448201527f7072696365000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600093506000341115611bdf57611bdc34613af1565b93505b60408051600e8082526101e0820190925290602082016101c08038833950506011549194505062010000900461ffff168b6000602002013563ffffffff16028760000160039054906101000a900463ffffffff160163ffffffff16836000815181101515611c4957fe5b6020908102909101015260115461ffff640100000000909104168b6001602002013563ffffffff16028760000160079054906101000a900463ffffffff160163ffffffff16836001815181101515611c9d57fe5b6020908102909101015260115461ffff6601000000000000909104168b6002602002013563ffffffff160287600001600b9054906101000a900463ffffffff160163ffffffff16836002815181101515611cf357fe5b6020908102909101015260115461ffff68010000000000000000909104168b6003602002013563ffffffff160287600001600f9054906101000a900463ffffffff160163ffffffff16836003815181101515611d4b57fe5b6020908102909101015260115461ffff6a0100000000000000000000909104168b6004602002013563ffffffff16028760000160139054906101000a900461ffff1661ffff160163ffffffff16836004815181101515611da757fe5b602090810291909101015285548351609860020a90910461ffff169084906005908110611dd057fe5b6020908102919091010152855483516b01000000000000000000000090910463ffffffff169084906006908110611e0357fe5b6020908102909101015260115461ffff6601000000000000909104168b6002602002013563ffffffff160287600001600b9054906101000a900463ffffffff160163ffffffff16836008815181101515611e5957fe5b602090810290910101526003870154835184906009908110611e7757fe5b60209081029091010152600386015483518490600a908110611e9557fe5b6020908102909101015282516000908490600b908110611eb157fe5b6020908102909101015282518c908490600c908110611ecc57fe5b6020908102909101015282518a908490600d908110611ee757fe5b602090810290910101528251611b589084906004908110611f0457fe5b906020019060200201511115611f3157611b58836004815181101515611f2657fe5b602090810290910101525b611b58836005815181101515611f4357fe5b906020019060200201511115611f7057611b58836005815181101515611f6557fe5b602090810290910101525b8554875460001960ff91821601811691161480611fa05750865460ff166001148015611fa05750855460ff166003145b80611fbe5750865460ff166008148015611fbe5750855460ff166009145b1561202557610bb8836004815181101515611fd557fe5b602090810290910101805190910190528251611f409084906004908110611ff857fe5b90602001906020020151111561202557611f4083600481518110151561201a57fe5b602090810290910101525b8654865460001960ff918216018116911614806120555750855460ff1660011480156120555750865460ff166003145b806120735750855460ff1660081480156120735750865460ff166009145b156120da57610bb883600581518110151561208a57fe5b602090810290910101805190910190528251611f4090849060059081106120ad57fe5b9060200190602002015111156120da57611f408360058151811015156120cf57fe5b602090810290910101525b6120e5878785613b0b565b91506120f28c8486614317565b83600b81518110151561210157fe5b602090810290910101526007805484517f1f3610bd2f9b39fa4fb2aed817ac07ddade00f9054b95f8c2c4d89a8e7ff70f7928691811061213d57fe5b9060200190602002015142854388600b81518110151561215957fe5b60209081029091018101516040805197885260ff9096169187019190915267ffffffffffffffff909316858501526060850191909152608084015260a0830152519081900360c00190a1600754875484517f7caf0b6ddcfcca510ad0e5b907cf2aec2baf462762e21fbc5275602854fdb77a92918f9160ff821691610100900461ffff1690889060009081106121eb57fe5b9060200190602002015188600181518110151561220457fe5b9060200190602002015189600881518110151561221d57fe5b906020019060200201518a600381518110151561223657fe5b906020019060200201518b600481518110151561224f57fe5b906020019060200201518c600981518110151561226857fe5b6020908102909101810151604080519b8c52918b019990995260ff9097168988015261ffff95861660608a015263ffffffff94851660808a015292841660a089015290831660c088015290911660e08601521661010084015261012083019190915251908190036101400190a1600754865484517f431176de03c5a30b34c79db5b4f5d69ec4101b6ee399cf47a4cfc063af47dd7892918d9160ff82169161ffff6101008204169163ffffffff6301000000830481169267010000000000000081048216926b01000000000000000000000082048316926f01000000000000000000000000000000909204909116908c90600590811061236457fe5b906020019060200201518c600a81518110151561237d57fe5b6020908102909101810151604080519b8c52918b019990995260ff9097168988015261ffff95861660608a015263ffffffff94851660808a015292841660a089015290831660c088015290911660e08601521661010084015261012083019190915251908190036101400190a16007546123fe90600163ffffffff6135f516565b6007555b505050505050505050505050565b60115468010000000000000000900461ffff1681565b6000805481908190600160a060020a0316331461244257600080fd5b5050600f54309150813190808210612492576000600f8190558054604051600160a060020a039091169183156108fc02918491818181858888f193505050501580156115b2573d6000803e3d6000fd5b505050565b60056020526000908152604090205481565b600054600160a060020a031633146124c057600080fd5b601380549115156101000261ff0019909216919091179055565b600854600160a060020a031681565b601154610100900460ff1681565b600d5481565b601754600090819060ff161561251257600080fd5b6008546040805160e160020a6331a9108f02815260048101879052905186923392600160a060020a0390911691636352211e916024808201926020929091908290030181600087803b15801561256757600080fd5b505af115801561257b573d6000803e3d6000fd5b505050506040513d602081101561259157600080fd5b5051600160a060020a0316146125f1576040805160e560020a62461bcd02815260206004820152601660248201527f6d757374206265206f776e6572206f6620746f6b656e00000000000000000000604482015290519081900360640190fd5b600c543414612670576040805160e560020a62461bcd02815260206004820152602260248201527f666565206d75737420626520657175616c7320746f206176617461722070726960448201527f6365000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6000858152600360205260409020600181015490935064e8d4a51000900691506126b56126a88564e8d4a5100063ffffffff613ac816565b839063ffffffff6135f516565b6001840181905560408051878152602081019290925280517ff393c23ec42fd629a14bf283f25a6976256f2be74ca5ea8a762dc54a2be6e9e69281900390910190a15050505050565b600054600160a060020a0316331461271557600080fd5b6013805460ff1916911515919091179055565b600054600160a060020a0316331461273f57600080fd5b60175460ff161561274f57600080fd5b6017805460ff191660011790556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b6011546d0100000000000000000000000000900460ff1681565b60125490565b600054600160a060020a031681565b6003602081905260009182526040909120805460018201546002830154929093015460ff821693610100830461ffff908116946301000000850463ffffffff9081169567010000000000000081048216956b01000000000000000000000082048316956f010000000000000000000000000000008304841695609860020a8404169460a860020a9093048416939092818116926401000000008204909216916801000000000000000090910467ffffffffffffffff16908d565b600060048281548110151561288157fe5b90600052602060002001549050919050565b600080600080606060008060008060008060608c9b50600860009054906101000a9004600160a060020a0316600160a060020a0316636352211e8e6040518263ffffffff1660e060020a02815260040180828152602001915050602060405180830381600087803b15801561290757600080fd5b505af115801561291b573d6000803e3d6000fd5b505050506040513d602081101561293157600080fd5b505160008e8152600360209081526040918290208251600680825260e08201909452939e509450820160c08038833950508354825160ff82169d50610100820461ffff169c509293506301000000900463ffffffff1691839150600090811061299657fe5b63ffffffff928316602091820290920101528254825167010000000000000090910490911690829060019081106129c957fe5b63ffffffff92831660209182029092010152825482516b0100000000000000000000009091049091169082906002908110612a0057fe5b63ffffffff92831660209182029092010152825482516f010000000000000000000000000000009091049091169082906003908110612a3b57fe5b63ffffffff929092166020928302919091019091015281548151609860020a90910461ffff169082906004908110612a6f57fe5b63ffffffff928316602091820290920101528254825160a860020a9091049091169082906005908110612a9e57fe5b63ffffffff9283166020918202929092010152600283015460018401546003909401549d9f9c9e509a9c999b919a8082169a640100000000820490921699509297506801000000000000000090920467ffffffffffffffff169550909350915050565b60175460009060ff1615612b1457600080fd5b6010543414612b6d576040805160e560020a62461bcd02815260206004820152601f60248201527f666565206d75737420626520657175616c20746f206472617720707269636500604482015290519081900360640190fd5b600954600160a060020a03161515612bbd576040805160e560020a62461bcd02815260206004820152601360248201526000805160206150a3833981519152604482015290519081900360640190fd5b6008546009546040805160e060020a63b28945a5028152336004820152600160a060020a039283166024820152600160448201529051919092169163b28945a591606480830192600092919082900301818387803b158015612c1e57600080fd5b505af1158015612c32573d6000803e3d6000fd5b5050601054600f54612c4c9350915063ffffffff6135f516565b600f55612c5a33600161487e565b905090565b60105481565b6011546601000000000000900461ffff1681565b601754600090819060ff1615612c8e57600080fd5b6010543414612ce7576040805160e560020a62461bcd02815260206004820152601f60248201527f666565206d75737420626520657175616c20746f206472617720707269636500604482015290519081900360640190fd5b600954600160a060020a03161515612d37576040805160e560020a62461bcd02815260206004820152601360248201526000805160206150a3833981519152604482015290519081900360640190fd5b6008546009546040805160e060020a63b28945a5028152336004820152600160a060020a039283166024820152600160448201529051919092169163b28945a591606480830192600092919082900301818387803b158015612d9857600080fd5b505af1158015612dac573d6000803e3d6000fd5b50505050612dbb33600161487e565b9150600160a060020a03831615801590612dd65750600d5415155b8015612deb5750600160a060020a0383163314155b8015612e8b5750600854604080517f70a08231000000000000000000000000000000000000000000000000000000008152600160a060020a038681166004830152915160009392909216916370a082319160248082019260209290919082900301818787803b158015612e5d57600080fd5b505af1158015612e71573d6000803e3d6000fd5b505050506040513d6020811015612e8757600080fd5b5051115b15612f9757612710612ea8600d5434613ac890919063ffffffff16565b811515612eb157fe5b04905034811115612f32576040805160e560020a62461bcd02815260206004820152602560248201527f72656665727265206375742063616e6e6f74206265206c61726765722074686160448201527f6e20666565000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b604051600160a060020a0384169082156108fc029083906000818181858888f19350505050158015612f68573d6000803e3d6000fd5b50601054612f8f90612f80908363ffffffff614d6e16565b600f549063ffffffff6135f516565b600f55612fb0565b601054600f54612fac9163ffffffff6135f516565b600f555b50919050565b60175460009060ff1615612fc957600080fd5b600054600160a060020a03163314612fe057600080fd5b600954600160a060020a03161515613030576040805160e560020a62461bcd02815260206004820152601360248201526000805160206150a3833981519152604482015290519081900360640190fd5b601461ffff8316111561308d576040805160e560020a62461bcd02815260206004820152601e60248201527f6d6178696d756d206c6576656c2063616e6e6f74206578636565642032300000604482015290519081900360640190fd5b6008546009546040805160e060020a63b28945a5028152336004820152600160a060020a039283166024820152600160448201529051919092169163b28945a591606480830192600092919082900301818387803b1580156130ee57600080fd5b505af1158015613102573d6000803e3d6000fd5b50505050613110338361487e565b92915050565b600954600160a060020a031681565b60008054600160a060020a0316331461313d57600080fd5b81905080600160a060020a031663f4b86c486040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561317e57600080fd5b505af1158015613192573d6000803e3d6000fd5b505050506040513d60208110156131a857600080fd5b50511515613200576040805160e560020a62461bcd02815260206004820152601760248201527f6e6565647320746f206265206d61726b6574706c616365000000000000000000604482015290519081900360640190fd5b6009805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039290921691909117905550565b600054600160a060020a0316331461324757600080fd5b600c55565b600054600160a060020a0316331461326357600080fd5b600b55565b601154640100000000900461ffff1681565b60075481565b6011546c01000000000000000000000000900460ff1681565b60065460ff1681565b6011546e010000000000000000000000000000900463ffffffff1681565b600e5481565b60175460009060ff16156132d957600080fd5b60135460ff61010090910416151560011461333e576040805160e560020a62461bcd02815260206004820152601b60248201527f73746172746572207061636b206973206e6f74206f6e2073616c650000000000604482015290519081900360640190fd5b60145434146133bd576040805160e560020a62461bcd02815260206004820152602860248201527f666565206d75737420626520657175616c7320746f207374617274657220706160448201527f636b207072696365000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600954600160a060020a0316151561340d576040805160e560020a62461bcd02815260206004820152601360248201526000805160206150a3833981519152604482015290519081900360640190fd5b601454600f546134229163ffffffff6135f516565b600f556008546009546040805160e060020a63b28945a5028152336004820152600160a060020a039283166024820152600160448201529051919092169163b28945a591606480830192600092919082900301818387803b15801561348657600080fd5b505af115801561349a573d6000803e3d6000fd5b5050601554612c5a925033915061ffff1661487e565b600054600160a060020a031633146134c757600080fd5b600160a060020a03811615156134dc57600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600054600160a060020a0316331461355b57600080fd5b600e55565b600054600160a060020a0316331461357757600080fd5b600d55565b600c5481565b60115460ff80821692610100830482169261ffff6201000082048116936401000000008304821693660100000000000084048316936801000000000000000081048416936a0100000000000000000000820416927601000000000000000000000000000000000000000000009091041690565b8181018281101561311057fe5b6000888152600360205260408082208151600580825260c0820190935290926060929091829182919081602001602082028038833901905050935060008661ffff1611156137d157600185015460469060649006106137d15760018501546064906402540be400900406925060148310156136a2578584600081518110151561368757fe5b602090810290910101805161ffff9201919091169052613714565b60288310156136bb578584600181518110151561368757fe5b603c8310156136d4578584600281518110151561368757fe5b60508310156136ed578584600381518110151561368757fe5b858460048151811015156136fd57fe5b602090810290910101805161ffff92019190911690525b6001850154605a9060649006106137d157600a83069150600282101561375f578584600081518110151561374457fe5b602090810290910101805161ffff92019190911690526137d1565b6004821015613778578584600181518110151561374457fe5b6006821015613791578584600281518110151561374457fe5b60088210156137aa578584600381518110151561374457fe5b858460048151811015156137ba57fe5b602090810290910101805161ffff92019190911690525b601160029054906101000a900461ffff168460008151811015156137f157fe5b906020019060200201518d010261ffff168560000160038282829054906101000a900463ffffffff160192506101000a81548163ffffffff021916908363ffffffff160217905550601160049054906101000a900461ffff1684600181518110151561385957fe5b906020019060200201518c010261ffff168560000160078282829054906101000a900463ffffffff160192506101000a81548163ffffffff021916908363ffffffff160217905550601160069054906101000a900461ffff168460028151811015156138c157fe5b906020019060200201518b010261ffff1685600001600b8282829054906101000a900463ffffffff160192506101000a81548163ffffffff021916908363ffffffff160217905550601160089054906101000a900461ffff1684600381518110151561392957fe5b6020908102919091010151865472ffffffff000000000000000000000000000000198116918c019290920261ffff9081166f010000000000000000000000000000009384900463ffffffff90811691909101169092021780875560115474ffff000000000000000000000000000000000000001982166a010000000000000000000090910483168b02609860020a92839004841601909216021785558351849060049081106139d457fe5b60209081029091010151855461010063ffffffff60a860020a808404821661ffff958d018616019091160278ffffffff0000000000000000000000000000000000000000001990921691909117818104831660019081018416830262ffff00199092169190911780895560028901805463ffffffff1916905590549190049091169150811115613a6357506001545b6001805482908110613a7157fe5b90600052602060002090600891828204019190066004029054906101000a900463ffffffff168560020160046101000a81548163ffffffff021916908363ffffffff16021790555050505050505050505050505050565b6000821515613ad957506000613110565b50818102818382811515613ae957fe5b041461311057fe5b600061311061271083600e5491900463ffffffff613ac816565b600080600080600080600080600080600198506000975060009550613b638b6003815181101515613b3857fe5b602090810290910101518d5463ffffffff6f0100000000000000000000000000000090910416614d80565b1515613b6e57600197505b8815613e575760ff88161515613ca7578a6004815181101515613b8d57fe5b90602001906020020151613b9f614de1565b61ffff1611613bd9578a6000815181101515613bb757fe5b906020019060200201516002029650613bd26002878c614e00565b9950613c03565b8a6000815181101515613be857fe5b906020019060200201519650613c006000878c614e00565b99505b8b54670100000000000000900463ffffffff168711613c255760019650613c3d565b8b54670100000000000000900463ffffffff16909603955b868b6006815181101515613c4d57fe5b6020908102909101015111613c7c5760008b6006815181101515613c6d57fe5b60209081029091010152613c9e565b868b6006815181101515613c8c57fe5b60209081029091010180519190910390525b60019750613dd3565b8760ff1660011415613dd3578a6005815181101515613cc257fe5b90602001906020020151613cd4614de1565b61ffff1611613d07578b54600263ffffffff6301000000909204821602169650613d006003878c614e00565b9950613d27565b8b546301000000900463ffffffff169650613d246001878c614e00565b99505b8a6001815181101515613d3657fe5b602090810290910101518711613d4f5760019650613d6d565b8a6001815181101515613d5e57fe5b90602001906020020151870396505b868b6002815181101515613d7d57fe5b6020908102909101015111613dac5760008b6002815181101515613d9d57fe5b60209081029091010152613dce565b868b6002815181101515613dbc57fe5b60209081029091010180519190910390525b600097505b60115460019096019560ff7601000000000000000000000000000000000000000000009091048116908716101580613e24575060008b6006815181101515613e1757fe5b9060200190602002015111155b80613e48575060008b6002815181101515613e3b57fe5b9060200190602002015111155b15613e5257600098505b613b6e565b8b548d54600096508695506101009182900461ffff90811692909104161415613eb65760028054600a908110613e8957fe5b90600052602060002090600891828204019190066004029054906101000a900463ffffffff169450613fad565b8b548d5461ffff61010092839004811692909104161115613f2d578b548d54600b61ffff610100938490048116939092048216929092031610613efc5760019450613f28565b8c548c5460028054909261ffff61010091829004811691909304831603600a01909116908110613e8957fe5b613fad565b8b548d5461ffff61010092839004811692909104161015613fad578c548c5461ffff610100928390048116929091048116919091031692506014831115613f7357601492505b60028054600a8501908110613f8457fe5b90600052602060002090600891828204019190066004029054906101000a900463ffffffff1694505b8a6006815181101515613fbc57fe5b906020019060200201518b6002815181101515613fd557fe5b9060200190602002015114156140055760028b6007815181101515613ff657fe5b60209081029091010152614307565b8a600681518110151561401457fe5b906020019060200201518b600281518110151561402d57fe5b9060200190602002015111156141cd5760008b600781518110151561404e57fe5b602090810290910101526003808e0154908d015410156140ed578a600c81518110151561407757fe5b9060200190602002015160048d6003015481548110151561409457fe5b6000918252602090912001558a518b90600d9081106140af57fe5b9060200190602002015160048e600301548154811015156140cc57fe5b6000918252602090912001556003808d018054918f01805490915581905591505b60028d01805463ffffffff19811663ffffffff918216880182161791829055640100000000820481169116111561413f5760028d018054640100000000810463ffffffff1663ffffffff199091161790555b600a606463ffffffff60698802160460050163ffffffff1681151561416057fe5b049350600063ffffffff85161161417657600193505b60028c01805463ffffffff19811663ffffffff91821687018216179182905564010000000082048116911611156141c85760028c018054640100000000810463ffffffff1663ffffffff199091161790555b614307565b8a60028151811015156141dc57fe5b906020019060200201518b60068151811015156141f557fe5b9060200190602002015111156143075760018b600781518110151561421657fe5b60209081029091010152606463ffffffff6023870216049050600063ffffffff821611614241575060015b60028d01805463ffffffff19811663ffffffff91821684018216179182905564010000000082048116911611156142935760028d018054640100000000810463ffffffff1663ffffffff199091161790555b606463ffffffff601e870216049350600063ffffffff8516116142b557600193505b60028c01805463ffffffff19811663ffffffff91821687018216179182905564010000000082048116911611156143075760028c018054640100000000810463ffffffff1663ffffffff199091161790555b5050505050505050509392505050565b600080600061433184600f546135f590919063ffffffff16565b600f55614344348563ffffffff614d6e16565b91506000925084600781518110151561435957fe5b90602001906020020151600114156143f1576143a9826005600088600a81518110151561438257fe5b906020019060200201518152602001908152602001600020546135f590919063ffffffff16565b6005600087600a8151811015156143bc57fe5b60209081029091018101518252810191909152604001600020556012546143e9908363ffffffff6135f516565b601255614875565b6008546040805160e160020a6331a9108f028152600481018990529051600160a060020a0390921691636352211e916024808201926020929091908290030181600087803b15801561444257600080fd5b505af1158015614456573d6000803e3d6000fd5b505050506040513d602081101561446c57600080fd5b505185519091508590600790811061448057fe5b906020019060200201516000141561483d5784600a8151811015156144a157fe5b906020019060200201518560098151811015156144ba57fe5b9060200190602002015111156146555760006005600087600a8151811015156144df57fe5b9060200190602002015181526020019081526020016000205411156145b65761453c6005600087600a81518110151561451457fe5b90602001906020020151815260200190815260200160002054846135f590919063ffffffff16565b925061457e6005600087600a81518110151561455457fe5b90602001906020020151815260200190815260200160002054601254614d6e90919063ffffffff16565b60128190555060006005600087600a81518110151561459957fe5b906020019060200201518152602001908152602001600020819055505b6000600560008760098151811015156145cb57fe5b906020019060200201518152602001908152602001600020541115614650576146006005600087600981518110151561451457fe5b92506146186005600087600981518110151561455457fe5b60128190555060006005600087600981518110151561463357fe5b906020019060200201518152602001908152602001600020819055505b6147f2565b603285600981518110151561466657fe5b9060200190602002015110156147f257609685600a81518110151561468757fe5b906020019060200201511080156146c9575060006005600087600a8151811015156146ae57fe5b90602001906020020151815260200190815260200160002054115b15614734576146e46005600087600a81518110151561451457fe5b92506146fc6005600087600a81518110151561455457fe5b60128190555060006005600087600a81518110151561471757fe5b906020019060200201518152602001908152602001600020819055505b609685600a81518110151561474557fe5b90602001906020020151108015614787575060006005600087600981518110151561476c57fe5b90602001906020020151815260200190815260200160002054115b156147f2576147a26005600087600981518110151561451457fe5b92506147ba6005600087600981518110151561455457fe5b6012819055506000600560008760098151811015156147d557fe5b906020019060200201518152602001908152602001600020819055505b600160a060020a0381166108fc61480f858563ffffffff6135f516565b6040518115909202916000818181858888f19350505050158015614837573d6000803e3d6000fd5b50614875565b604051600160a060020a0382169083156108fc029084906000818181858888f19350505050158015614873573d6000803e3d6000fd5b505b50509392505050565b60008060008061488c615036565b600160a060020a0387161515614912576040805160e560020a62461bcd02815260206004820152602660248201527f63616e6e6f7420637265617465206361726420666f7220756e6b6e6f776e206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6006805460ff198116600160ff92831601821617918290551660041415614941576006805460ff191660081790555b60065460ff16600a141561495d576006805460ff191660011790555b60015461ffff871694508411156149745760015493505b6000925060018661ffff1611156149bc57600180548590811061499357fe5b90600052602060002090600891828204019190066004029054906101000a900463ffffffff1692505b600854604080517f6a627842000000000000000000000000000000000000000000000000000000008152600160a060020a038a8116600483015291519190921691636a6278429160248083019260209291908290030181600087803b158015614a2457600080fd5b505af1158015614a38573d6000803e3d6000fd5b505050506040513d6020811015614a4e57600080fd5b5051604080516101a08101825260065460ff16815261ffff891660208201526001918101829052606081018290526003608082015260a08101829052601960c082015260e08101919091529092506101008101614aa9614e20565b81526020018463ffffffff168152602001600186815481101515614ac957fe5b90600052602060002090600891828204019190066004029054906101000a900463ffffffff1663ffffffff1681526020014267ffffffffffffffff168152602001838152509050806003600084815260200190815260200160002060008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548161ffff021916908361ffff16021790555060408201518160000160036101000a81548163ffffffff021916908363ffffffff16021790555060608201518160000160076101000a81548163ffffffff021916908363ffffffff160217905550608082015181600001600b6101000a81548163ffffffff021916908363ffffffff16021790555060a082015181600001600f6101000a81548163ffffffff021916908363ffffffff16021790555060c08201518160000160136101000a81548161ffff021916908361ffff16021790555060e08201518160000160156101000a81548163ffffffff021916908363ffffffff16021790555061010082015181600101556101208201518160020160006101000a81548163ffffffff021916908363ffffffff1602179055506101408201518160020160046101000a81548163ffffffff021916908363ffffffff1602179055506101608201518160020160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550610180820151816003015590505060048290806001815401808255809150509060018203906000526020600020016000909192909190915055507ff9c4ddffd4aef856c95622e875f2337d049085a3d12c8095c51eca343a9a1fe333836040518083600160a060020a0316600160a060020a031681526020018281526020019250505060405180910390a15095945050505050565b600082821115614d7a57fe5b50900390565b60008060006064614d8f614f7d565b811515614d9857fe5b066001019150600a848601866103e802811515614db157fe5b04600501811515614dbe57fe5b04905060ff82168110614dd45760019250614dd9565b600092505b505092915050565b6000612710614dee614f7d565b811515614df757fe5b06600101905090565b6003600292830260ff90811690930a908102199190911692909116021790565b6000806402540be40064e8d4a51000614e37614f7d565b811515614e4057fe5b06811515614e4a57fe5b049150614e62826402540be40063ffffffff613ac816565b60115490925063ffffffff6e01000000000000000000000000000082048116916001720100000000000000000000000000000000000090910482168390030116614eaa614f7d565b811515614eb357fe5b06016064029050614ecd81836135f590919063ffffffff16565b91506064614ed9614f7d565b811515614ee257fe5b60115491900691506c01000000000000000000000000900460ff16811015614f1c57614f1582605a63ffffffff6135f516565b9150614f79565b6011546c01000000000000000000000000810460ff9081166d010000000000000000000000000090920481169190910116811015614f6557614f1582604663ffffffff6135f516565b614f7682603263ffffffff6135f516565b91505b5090565b60165460408051602080820193909352436000198101408284015260021981014060608301526004198101406080830152600619014060a0808301919091528251808303909101815260c09091019182905280516000939192918291908401908083835b602083106150005780518252601f199092019160209182019101614fe1565b5181516020939093036101000a600019018019909116921691909117905260405192018290039091206016819055949350505050565b604080516101a081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081018290526101208101829052610140810182905261016081018290526101808101919091529056006d61726b6574706c616365206e6f742073657400000000000000000000000000a165627a7a72305820bcbe2d0f8c761e0b8f5e6c28256e268c350d361db7e971d7fef2140b04cfee7e0029
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000003a633c367c4276311c06d13c92a156f40a272c4c
-----Decoded View---------------
Arg [0] : _tokenAddress (address): 0x3a633c367C4276311c06D13c92a156F40a272c4c
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000003a633c367c4276311c06d13c92a156f40a272c4c
Swarm Source
bzzr://bcbe2d0f8c761e0b8f5e6c28256e268c350d361db7e971d7fef2140b04cfee7e
Loading...
Loading
Loading...
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.
[ 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.