ERC-20
Overview
Max Total Supply
3.607966 CHS
Holders
368
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
ChickenHunt
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-06-25 */ pragma solidity 0.4.24; library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); } function square(uint256 a) internal pure returns (uint256) { return mul(a, a); } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); } } contract ERC20Interface { event Transfer( address indexed from, address indexed to, uint256 value ); event Approval( address indexed owner, address indexed spender, uint256 value ); function totalSupply() public view returns (uint256); function balanceOf(address _owner) public view returns (uint256); function transfer(address _to, uint256 _value) public returns (bool); function transferFrom(address _from, address _to, uint256 _value) public returns (bool); function approve(address _spender, uint256 _value) public returns (bool); function allowance( address _owner, address _spender) public view returns (uint256); } /** * @title CHStock * @author M.H. Kang */ contract CHStock is ERC20Interface { using SafeMath for uint256; /* EVENT */ event RedeemShares( address indexed user, uint256 shares, uint256 dividends ); /* STORAGE */ string public name = "ChickenHuntStock"; string public symbol = "CHS"; uint8 public decimals = 18; uint256 public totalShares; uint256 public dividendsPerShare; uint256 public constant CORRECTION = 1 << 64; mapping (address => uint256) public ethereumBalance; mapping (address => uint256) internal shares; mapping (address => uint256) internal refund; mapping (address => uint256) internal deduction; mapping (address => mapping (address => uint256)) internal allowed; /* FUNCTION */ function redeemShares() public { uint256 _shares = shares[msg.sender]; uint256 _dividends = dividendsOf(msg.sender); delete shares[msg.sender]; delete refund[msg.sender]; delete deduction[msg.sender]; totalShares = totalShares.sub(_shares); ethereumBalance[msg.sender] = ethereumBalance[msg.sender].add(_dividends); emit RedeemShares(msg.sender, _shares, _dividends); } function transfer(address _to, uint256 _value) public returns (bool) { _transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_value <= allowed[_from][msg.sender]); allowed[_from][msg.sender] -= _value; _transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function dividendsOf(address _shareholder) public view returns (uint256) { return dividendsPerShare.mul(shares[_shareholder]).add(refund[_shareholder]).sub(deduction[_shareholder]) / CORRECTION; } function totalSupply() public view returns (uint256) { return totalShares; } function balanceOf(address _owner) public view returns (uint256) { return shares[_owner]; } function allowance(address _owner, address _spender) public view returns (uint256) { return allowed[_owner][_spender]; } /* INTERNAL FUNCTION */ function _giveShares(address _user, uint256 _ethereum) internal { if (_ethereum > 0) { totalShares = totalShares.add(_ethereum); deduction[_user] = deduction[_user].add(dividendsPerShare.mul(_ethereum)); shares[_user] = shares[_user].add(_ethereum); dividendsPerShare = dividendsPerShare.add(_ethereum.mul(CORRECTION) / totalShares); emit Transfer(address(0), _user, _ethereum); } } function _transfer(address _from, address _to, uint256 _value) internal { require(_to != address(0)); require(_value <= shares[_from]); uint256 _rawProfit = dividendsPerShare.mul(_value); uint256 _refund = refund[_from].add(_rawProfit); uint256 _min = _refund < deduction[_from] ? _refund : deduction[_from]; refund[_from] = _refund.sub(_min); deduction[_from] = deduction[_from].sub(_min); deduction[_to] = deduction[_to].add(_rawProfit); shares[_from] = shares[_from].sub(_value); shares[_to] = shares[_to].add(_value); emit Transfer(_from, _to, _value); } } /** * @title CHGameBase * @author M.H. Kang */ contract CHGameBase is CHStock { /* DATA STRUCT */ struct House { Hunter hunter; uint256 huntingPower; uint256 offensePower; uint256 defensePower; uint256 huntingMultiplier; uint256 offenseMultiplier; uint256 defenseMultiplier; uint256 depots; uint256[] pets; } struct Hunter { uint256 strength; uint256 dexterity; uint256 constitution; uint256 resistance; } struct Store { address owner; uint256 cut; uint256 cost; uint256 balance; } /* STORAGE */ Store public store; uint256 public devCut; uint256 public devFee; uint256 public altarCut; uint256 public altarFund; uint256 public dividendRate; uint256 public totalChicken; address public chickenTokenDelegator; mapping (address => uint256) public lastSaveTime; mapping (address => uint256) public savedChickenOf; mapping (address => House) internal houses; /* FUNCTION */ function saveChickenOf(address _user) public returns (uint256) { uint256 _unclaimedChicken = _unclaimedChickenOf(_user); totalChicken = totalChicken.add(_unclaimedChicken); uint256 _chicken = savedChickenOf[_user].add(_unclaimedChicken); savedChickenOf[_user] = _chicken; lastSaveTime[_user] = block.timestamp; return _chicken; } function transferChickenFrom(address _from, address _to, uint256 _value) public returns (bool) { require(msg.sender == chickenTokenDelegator); require(saveChickenOf(_from) >= _value); savedChickenOf[_from] = savedChickenOf[_from] - _value; savedChickenOf[_to] = savedChickenOf[_to].add(_value); return true; } function chickenOf(address _user) public view returns (uint256) { return savedChickenOf[_user].add(_unclaimedChickenOf(_user)); } /* INTERNAL FUNCTION */ function _payChicken(address _user, uint256 _chicken) internal { uint256 _unclaimedChicken = _unclaimedChickenOf(_user); uint256 _extraChicken; if (_chicken > _unclaimedChicken) { _extraChicken = _chicken - _unclaimedChicken; require(savedChickenOf[_user] >= _extraChicken); savedChickenOf[_user] -= _extraChicken; totalChicken -= _extraChicken; } else { _extraChicken = _unclaimedChicken - _chicken; totalChicken = totalChicken.add(_extraChicken); savedChickenOf[_user] += _extraChicken; } lastSaveTime[_user] = block.timestamp; } function _payEthereumAndDistribute(uint256 _cost) internal { require(_cost * 100 / 100 == _cost); _payEthereum(_cost); uint256 _toShareholders = _cost * dividendRate / 100; uint256 _toAltar = _cost * altarCut / 100; uint256 _toStore = _cost * store.cut / 100; devFee = devFee.add(_cost - _toShareholders - _toAltar - _toStore); _giveShares(msg.sender, _toShareholders); altarFund = altarFund.add(_toAltar); store.balance = store.balance.add(_toStore); } function _payEthereum(uint256 _cost) internal { uint256 _extra; if (_cost > msg.value) { _extra = _cost - msg.value; require(ethereumBalance[msg.sender] >= _extra); ethereumBalance[msg.sender] -= _extra; } else { _extra = msg.value - _cost; ethereumBalance[msg.sender] = ethereumBalance[msg.sender].add(_extra); } } function _unclaimedChickenOf(address _user) internal view returns (uint256) { uint256 _timestamp = lastSaveTime[_user]; if (_timestamp > 0 && _timestamp < block.timestamp) { return houses[_user].huntingPower.mul( houses[_user].huntingMultiplier ).mul(block.timestamp - _timestamp) / 100; } else { return 0; } } function _houseOf(address _user) internal view returns (House storage _house) { _house = houses[_user]; require(_house.depots > 0); } } /** * @title CHHunter * @author M.H. Kang */ contract CHHunter is CHGameBase { /* EVENT */ event UpgradeHunter( address indexed user, string attribute, uint256 to ); /* DATA STRUCT */ struct Config { uint256 chicken; uint256 ethereum; uint256 max; } /* STORAGE */ Config public typeA; Config public typeB; /* FUNCTION */ function upgradeStrength(uint256 _to) external payable { House storage _house = _houseOf(msg.sender); uint256 _from = _house.hunter.strength; require(typeA.max >= _to && _to > _from); _payForUpgrade(_from, _to, typeA); uint256 _increment = _house.hunter.dexterity.mul(2).add(8).mul(_to.square() - _from ** 2); _house.hunter.strength = _to; _house.huntingPower = _house.huntingPower.add(_increment); _house.offensePower = _house.offensePower.add(_increment); emit UpgradeHunter(msg.sender, "strength", _to); } function upgradeDexterity(uint256 _to) external payable { House storage _house = _houseOf(msg.sender); uint256 _from = _house.hunter.dexterity; require(typeB.max >= _to && _to > _from); _payForUpgrade(_from, _to, typeB); uint256 _increment = _house.hunter.strength.square().mul((_to - _from).mul(2)); _house.hunter.dexterity = _to; _house.huntingPower = _house.huntingPower.add(_increment); _house.offensePower = _house.offensePower.add(_increment); emit UpgradeHunter(msg.sender, "dexterity", _to); } function upgradeConstitution(uint256 _to) external payable { House storage _house = _houseOf(msg.sender); uint256 _from = _house.hunter.constitution; require(typeA.max >= _to && _to > _from); _payForUpgrade(_from, _to, typeA); uint256 _increment = _house.hunter.resistance.mul(2).add(8).mul(_to.square() - _from ** 2); _house.hunter.constitution = _to; _house.defensePower = _house.defensePower.add(_increment); emit UpgradeHunter(msg.sender, "constitution", _to); } function upgradeResistance(uint256 _to) external payable { House storage _house = _houseOf(msg.sender); uint256 _from = _house.hunter.resistance; require(typeB.max >= _to && _to > _from); _payForUpgrade(_from, _to, typeB); uint256 _increment = _house.hunter.constitution.square().mul((_to - _from).mul(2)); _house.hunter.resistance = _to; _house.defensePower = _house.defensePower.add(_increment); emit UpgradeHunter(msg.sender, "resistance", _to); } /* INTERNAL FUNCTION */ function _payForUpgrade(uint256 _from, uint256 _to, Config _type) internal { uint256 _chickenCost = _type.chicken.mul(_gapOfCubeSum(_from, _to)); _payChicken(msg.sender, _chickenCost); uint256 _ethereumCost = _type.ethereum.mul(_gapOfSquareSum(_from, _to)); _payEthereumAndDistribute(_ethereumCost); } function _gapOfSquareSum(uint256 _before, uint256 _after) internal pure returns (uint256) { // max value is capped to uint32 return (_after * (_after - 1) * (2 * _after - 1) - _before * (_before - 1) * (2 * _before - 1)) / 6; } function _gapOfCubeSum(uint256 _before, uint256 _after) internal pure returns (uint256) { // max value is capped to uint32 return ((_after * (_after - 1)) ** 2 - (_before * (_before - 1)) ** 2) >> 2; } } /** * @title CHHouse * @author M.H. Kang */ contract CHHouse is CHHunter { /* EVENT */ event UpgradePet( address indexed user, uint256 id, uint256 to ); event UpgradeDepot( address indexed user, uint256 to ); event BuyItem( address indexed from, address indexed to, uint256 indexed id, uint256 cost ); event BuyStore( address indexed from, address indexed to, uint256 cost ); /* DATA STRUCT */ struct Pet { uint256 huntingPower; uint256 offensePower; uint256 defensePower; uint256 chicken; uint256 ethereum; uint256 max; } struct Item { address owner; uint256 huntingMultiplier; uint256 offenseMultiplier; uint256 defenseMultiplier; uint256 cost; } struct Depot { uint256 ethereum; uint256 max; } /* STORAGE */ uint256 public constant INCREMENT_RATE = 12; // 120% for Item and Store Depot public depot; Pet[] public pets; Item[] public items; /* FUNCTION */ function buyDepots(uint256 _amount) external payable { House storage _house = _houseOf(msg.sender); _house.depots = _house.depots.add(_amount); require(_house.depots <= depot.max); _payEthereumAndDistribute(_amount.mul(depot.ethereum)); emit UpgradeDepot(msg.sender, _house.depots); } function buyPets(uint256 _id, uint256 _amount) external payable { require(_id < pets.length); Pet memory _pet = pets[_id]; uint256 _chickenCost = _amount * _pet.chicken; _payChicken(msg.sender, _chickenCost); uint256 _ethereumCost = _amount * _pet.ethereum; _payEthereumAndDistribute(_ethereumCost); House storage _house = _houseOf(msg.sender); if (_house.pets.length < _id + 1) { _house.pets.length = _id + 1; } _house.pets[_id] = _house.pets[_id].add(_amount); require(_house.pets[_id] <= _pet.max); _house.huntingPower = _house.huntingPower.add(_pet.huntingPower * _amount); _house.offensePower = _house.offensePower.add(_pet.offensePower * _amount); _house.defensePower = _house.defensePower.add(_pet.defensePower * _amount); emit UpgradePet(msg.sender, _id, _house.pets[_id]); } // This is independent of Stock and Altar. function buyItem(uint256 _id) external payable { Item storage _item = items[_id]; address _from = _item.owner; uint256 _price = _item.cost.mul(INCREMENT_RATE) / 10; _payEthereum(_price); saveChickenOf(_from); House storage _fromHouse = _houseOf(_from); _fromHouse.huntingMultiplier = _fromHouse.huntingMultiplier.sub(_item.huntingMultiplier); _fromHouse.offenseMultiplier = _fromHouse.offenseMultiplier.sub(_item.offenseMultiplier); _fromHouse.defenseMultiplier = _fromHouse.defenseMultiplier.sub(_item.defenseMultiplier); saveChickenOf(msg.sender); House storage _toHouse = _houseOf(msg.sender); _toHouse.huntingMultiplier = _toHouse.huntingMultiplier.add(_item.huntingMultiplier); _toHouse.offenseMultiplier = _toHouse.offenseMultiplier.add(_item.offenseMultiplier); _toHouse.defenseMultiplier = _toHouse.defenseMultiplier.add(_item.defenseMultiplier); uint256 _halfMargin = _price.sub(_item.cost) / 2; devFee = devFee.add(_halfMargin); ethereumBalance[_from] = ethereumBalance[_from].add(_price - _halfMargin); items[_id].cost = _price; items[_id].owner = msg.sender; emit BuyItem(_from, msg.sender, _id, _price); } // This is independent of Stock and Altar. function buyStore() external payable { address _from = store.owner; uint256 _price = store.cost.mul(INCREMENT_RATE) / 10; _payEthereum(_price); uint256 _halfMargin = (_price - store.cost) / 2; devFee = devFee.add(_halfMargin); ethereumBalance[_from] = ethereumBalance[_from].add(_price - _halfMargin).add(store.balance); store.cost = _price; store.owner = msg.sender; delete store.balance; emit BuyStore(_from, msg.sender, _price); } function withdrawStoreBalance() public { ethereumBalance[store.owner] = ethereumBalance[store.owner].add(store.balance); delete store.balance; } } /** * @title CHArena * @author M.H. Kang */ contract CHArena is CHHouse { /* EVENT */ event Attack( address indexed attacker, address indexed defender, uint256 booty ); /* STORAGE */ mapping(address => uint256) public attackCooldown; uint256 public cooldownTime; /* FUNCTION */ function attack(address _target) external { require(attackCooldown[msg.sender] < block.timestamp); House storage _attacker = houses[msg.sender]; House storage _defender = houses[_target]; if (_attacker.offensePower.mul(_attacker.offenseMultiplier) > _defender.defensePower.mul(_defender.defenseMultiplier)) { uint256 _chicken = saveChickenOf(_target); _chicken = _defender.depots > 0 ? _chicken / _defender.depots : _chicken; savedChickenOf[_target] = savedChickenOf[_target] - _chicken; savedChickenOf[msg.sender] = savedChickenOf[msg.sender].add(_chicken); attackCooldown[msg.sender] = block.timestamp + cooldownTime; emit Attack(msg.sender, _target, _chicken); } } } /** * @title CHAltar * @author M.H. Kang */ contract CHAltar is CHArena { /* EVENT */ event NewAltarRecord(uint256 id, uint256 ethereum); event ChickenToAltar(address indexed user, uint256 id, uint256 chicken); event EthereumFromAltar(address indexed user, uint256 id, uint256 ethereum); /* DATA STRUCT */ struct AltarRecord { uint256 ethereum; uint256 chicken; } struct TradeBook { uint256 altarRecordId; uint256 chicken; } /* STORAGE */ uint256 public genesis; mapping (uint256 => AltarRecord) public altarRecords; mapping (address => TradeBook) public tradeBooks; /* FUNCTION */ function chickenToAltar(uint256 _chicken) external { require(_chicken > 0); _payChicken(msg.sender, _chicken); uint256 _id = _getCurrentAltarRecordId(); AltarRecord storage _altarRecord = _getAltarRecord(_id); require(_altarRecord.ethereum * _chicken / _chicken == _altarRecord.ethereum); TradeBook storage _tradeBook = tradeBooks[msg.sender]; if (_tradeBook.altarRecordId < _id) { _resolveTradeBook(_tradeBook); _tradeBook.altarRecordId = _id; } _altarRecord.chicken = _altarRecord.chicken.add(_chicken); _tradeBook.chicken += _chicken; emit ChickenToAltar(msg.sender, _id, _chicken); } function ethereumFromAltar() external { uint256 _id = _getCurrentAltarRecordId(); TradeBook storage _tradeBook = tradeBooks[msg.sender]; require(_tradeBook.altarRecordId < _id); _resolveTradeBook(_tradeBook); } function tradeBookOf(address _user) public view returns ( uint256 _id, uint256 _ethereum, uint256 _totalChicken, uint256 _chicken, uint256 _income ) { TradeBook memory _tradeBook = tradeBooks[_user]; _id = _tradeBook.altarRecordId; _chicken = _tradeBook.chicken; AltarRecord memory _altarRecord = altarRecords[_id]; _totalChicken = _altarRecord.chicken; _ethereum = _altarRecord.ethereum; _income = _totalChicken > 0 ? _ethereum.mul(_chicken) / _totalChicken : 0; } /* INTERNAL FUNCTION */ function _resolveTradeBook(TradeBook storage _tradeBook) internal { if (_tradeBook.chicken > 0) { AltarRecord memory _oldAltarRecord = altarRecords[_tradeBook.altarRecordId]; uint256 _ethereum = _oldAltarRecord.ethereum.mul(_tradeBook.chicken) / _oldAltarRecord.chicken; delete _tradeBook.chicken; ethereumBalance[msg.sender] = ethereumBalance[msg.sender].add(_ethereum); emit EthereumFromAltar(msg.sender, _tradeBook.altarRecordId, _ethereum); } } function _getCurrentAltarRecordId() internal view returns (uint256) { return (block.timestamp - genesis) / 86400; } function _getAltarRecord(uint256 _id) internal returns (AltarRecord storage _altarRecord) { _altarRecord = altarRecords[_id]; if (_altarRecord.ethereum == 0) { uint256 _ethereum = altarFund / 10; _altarRecord.ethereum = _ethereum; altarFund -= _ethereum; emit NewAltarRecord(_id, _ethereum); } } } /** * @title CHCommittee * @author M.H. Kang */ contract CHCommittee is CHAltar { /* EVENT */ event NewPet( uint256 id, uint256 huntingPower, uint256 offensePower, uint256 defense, uint256 chicken, uint256 ethereum, uint256 max ); event ChangePet( uint256 id, uint256 chicken, uint256 ethereum, uint256 max ); event NewItem( uint256 id, uint256 huntingMultiplier, uint256 offenseMultiplier, uint256 defenseMultiplier, uint256 ethereum ); event SetDepot(uint256 ethereum, uint256 max); event SetConfiguration( uint256 chickenA, uint256 ethereumA, uint256 maxA, uint256 chickenB, uint256 ethereumB, uint256 maxB ); event SetDistribution( uint256 dividendRate, uint256 altarCut, uint256 storeCut, uint256 devCut ); event SetCooldownTime(uint256 cooldownTime); event SetNameAndSymbol(string name, string symbol); event SetDeveloper(address developer); event SetCommittee(address committee); /* STORAGE */ address public committee; address public developer; /* FUNCTION */ function callFor(address _to, uint256 _value, uint256 _gas, bytes _code) external payable onlyCommittee returns (bool) { return _to.call.value(_value).gas(_gas)(_code); } function addPet( uint256 _huntingPower, uint256 _offensePower, uint256 _defense, uint256 _chicken, uint256 _ethereum, uint256 _max ) public onlyCommittee { require(_max > 0); require(_max == uint256(uint32(_max))); uint256 _newLength = pets.push( Pet(_huntingPower, _offensePower, _defense, _chicken, _ethereum, _max) ); emit NewPet( _newLength - 1, _huntingPower, _offensePower, _defense, _chicken, _ethereum, _max ); } function changePet( uint256 _id, uint256 _chicken, uint256 _ethereum, uint256 _max ) public onlyCommittee { require(_id < pets.length); Pet storage _pet = pets[_id]; require(_max >= _pet.max && _max == uint256(uint32(_max))); _pet.chicken = _chicken; _pet.ethereum = _ethereum; _pet.max = _max; emit ChangePet(_id, _chicken, _ethereum, _max); } function addItem( uint256 _huntingMultiplier, uint256 _offenseMultiplier, uint256 _defenseMultiplier, uint256 _price ) public onlyCommittee { uint256 _cap = 1 << 16; require( _huntingMultiplier < _cap && _offenseMultiplier < _cap && _defenseMultiplier < _cap ); saveChickenOf(committee); House storage _house = _houseOf(committee); _house.huntingMultiplier = _house.huntingMultiplier.add(_huntingMultiplier); _house.offenseMultiplier = _house.offenseMultiplier.add(_offenseMultiplier); _house.defenseMultiplier = _house.defenseMultiplier.add(_defenseMultiplier); uint256 _newLength = items.push( Item( committee, _huntingMultiplier, _offenseMultiplier, _defenseMultiplier, _price ) ); emit NewItem( _newLength - 1, _huntingMultiplier, _offenseMultiplier, _defenseMultiplier, _price ); } function setDepot(uint256 _price, uint256 _max) public onlyCommittee { require(_max >= depot.max); depot.ethereum = _price; depot.max = _max; emit SetDepot(_price, _max); } function setConfiguration( uint256 _chickenA, uint256 _ethereumA, uint256 _maxA, uint256 _chickenB, uint256 _ethereumB, uint256 _maxB ) public onlyCommittee { require(_maxA >= typeA.max && (_maxA == uint256(uint32(_maxA)))); require(_maxB >= typeB.max && (_maxB == uint256(uint32(_maxB)))); typeA.chicken = _chickenA; typeA.ethereum = _ethereumA; typeA.max = _maxA; typeB.chicken = _chickenB; typeB.ethereum = _ethereumB; typeB.max = _maxB; emit SetConfiguration(_chickenA, _ethereumA, _maxA, _chickenB, _ethereumB, _maxB); } function setDistribution( uint256 _dividendRate, uint256 _altarCut, uint256 _storeCut, uint256 _devCut ) public onlyCommittee { require(_storeCut > 0); require( _dividendRate.add(_altarCut).add(_storeCut).add(_devCut) == 100 ); dividendRate = _dividendRate; altarCut = _altarCut; store.cut = _storeCut; devCut = _devCut; emit SetDistribution(_dividendRate, _altarCut, _storeCut, _devCut); } function setCooldownTime(uint256 _cooldownTime) public onlyCommittee { cooldownTime = _cooldownTime; emit SetCooldownTime(_cooldownTime); } function setNameAndSymbol(string _name, string _symbol) public onlyCommittee { name = _name; symbol = _symbol; emit SetNameAndSymbol(_name, _symbol); } function setDeveloper(address _developer) public onlyCommittee { require(_developer != address(0)); withdrawDevFee(); developer = _developer; emit SetDeveloper(_developer); } function setCommittee(address _committee) public onlyCommittee { require(_committee != address(0)); committee = _committee; emit SetCommittee(_committee); } function withdrawDevFee() public { ethereumBalance[developer] = ethereumBalance[developer].add(devFee); delete devFee; } /* MODIFIER */ modifier onlyCommittee { require(msg.sender == committee); _; } } /** * @title ChickenHunt * @author M.H. Kang */ contract ChickenHunt is CHCommittee { /* EVENT */ event Join(address user); /* CONSTRUCTOR */ constructor() public { committee = msg.sender; developer = msg.sender; } /* FUNCTION */ function init(address _chickenTokenDelegator) external onlyCommittee { require(chickenTokenDelegator == address(0)); chickenTokenDelegator = _chickenTokenDelegator; genesis = 1525791600; join(); store.owner = msg.sender; store.cost = 0.1 ether; setConfiguration(100, 0.00001 ether, 99, 100000, 0.001 ether, 9); setDistribution(20, 75, 1, 4); setCooldownTime(600); setDepot(0.05 ether, 9); addItem(5, 5, 0, 0.01 ether); addItem(0, 0, 5, 0.01 ether); addPet(1000, 0, 0, 100000, 0.01 ether, 9); addPet(0, 1000, 0, 100000, 0.01 ether, 9); addPet(0, 0, 1000, 202500, 0.01 ether, 9); } function withdraw() external { uint256 _ethereum = ethereumBalance[msg.sender]; delete ethereumBalance[msg.sender]; msg.sender.transfer(_ethereum); } function join() public { House storage _house = houses[msg.sender]; require(_house.depots == 0); _house.hunter = Hunter(1, 1, 1, 1); _house.depots = 1; _house.huntingPower = 10; _house.offensePower = 10; _house.defensePower = 110; _house.huntingMultiplier = 10; _house.offenseMultiplier = 10; _house.defenseMultiplier = 10; lastSaveTime[msg.sender] = block.timestamp; emit Join(msg.sender); } function hunterOf(address _user) public view returns ( uint256 _strength, uint256 _dexterity, uint256 _constitution, uint256 _resistance ) { Hunter memory _hunter = houses[_user].hunter; return ( _hunter.strength, _hunter.dexterity, _hunter.constitution, _hunter.resistance ); } function detailsOf(address _user) public view returns ( uint256[2] _hunting, uint256[2] _offense, uint256[2] _defense, uint256[4] _hunter, uint256[] _pets, uint256 _depots, uint256 _savedChicken, uint256 _lastSaveTime, uint256 _cooldown ) { House memory _house = houses[_user]; _hunting = [_house.huntingPower, _house.huntingMultiplier]; _offense = [_house.offensePower, _house.offenseMultiplier]; _defense = [_house.defensePower, _house.defenseMultiplier]; _hunter = [ _house.hunter.strength, _house.hunter.dexterity, _house.hunter.constitution, _house.hunter.resistance ]; _pets = _house.pets; _depots = _house.depots; _savedChicken = savedChickenOf[_user]; _lastSaveTime = lastSaveTime[_user]; _cooldown = attackCooldown[_user]; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[{"name":"_shareholder","type":"address"}],"name":"dividendsOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"depot","outputs":[{"name":"ethereum","type":"uint256"},{"name":"max","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"},{"name":"_amount","type":"uint256"}],"name":"buyPets","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_user","type":"address"}],"name":"detailsOf","outputs":[{"name":"_hunting","type":"uint256[2]"},{"name":"_offense","type":"uint256[2]"},{"name":"_defense","type":"uint256[2]"},{"name":"_hunter","type":"uint256[4]"},{"name":"_pets","type":"uint256[]"},{"name":"_depots","type":"uint256"},{"name":"_savedChicken","type":"uint256"},{"name":"_lastSaveTime","type":"uint256"},{"name":"_cooldown","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_dividendRate","type":"uint256"},{"name":"_altarCut","type":"uint256"},{"name":"_storeCut","type":"uint256"},{"name":"_devCut","type":"uint256"}],"name":"setDistribution","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_chickenTokenDelegator","type":"address"}],"name":"init","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"uint256"}],"name":"upgradeDexterity","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"altarCut","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdrawStoreBalance","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"typeB","outputs":[{"name":"chicken","type":"uint256"},{"name":"ethereum","type":"uint256"},{"name":"max","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalShares","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_chicken","type":"uint256"}],"name":"chickenToAltar","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"buyStore","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"uint256"}],"name":"upgradeConstitution","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_huntingMultiplier","type":"uint256"},{"name":"_offenseMultiplier","type":"uint256"},{"name":"_defenseMultiplier","type":"uint256"},{"name":"_price","type":"uint256"}],"name":"addItem","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"uint256"}],"name":"upgradeResistance","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"string"},{"name":"_symbol","type":"string"}],"name":"setNameAndSymbol","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"INCREMENT_RATE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"ethereumBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_user","type":"address"}],"name":"chickenOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"devFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_cooldownTime","type":"uint256"}],"name":"setCooldownTime","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_amount","type":"uint256"}],"name":"buyDepots","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"typeA","outputs":[{"name":"chicken","type":"uint256"},{"name":"ethereum","type":"uint256"},{"name":"max","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_price","type":"uint256"},{"name":"_max","type":"uint256"}],"name":"setDepot","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"savedChickenOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_huntingPower","type":"uint256"},{"name":"_offensePower","type":"uint256"},{"name":"_defense","type":"uint256"},{"name":"_chicken","type":"uint256"},{"name":"_ethereum","type":"uint256"},{"name":"_max","type":"uint256"}],"name":"addPet","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"store","outputs":[{"name":"owner","type":"address"},{"name":"cut","type":"uint256"},{"name":"cost","type":"uint256"},{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"ethereumFromAltar","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"devCut","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"genesis","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_user","type":"address"}],"name":"hunterOf","outputs":[{"name":"_strength","type":"uint256"},{"name":"_dexterity","type":"uint256"},{"name":"_constitution","type":"uint256"},{"name":"_resistance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"altarRecords","outputs":[{"name":"ethereum","type":"uint256"},{"name":"chicken","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"cooldownTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"redeemShares","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_chickenA","type":"uint256"},{"name":"_ethereumA","type":"uint256"},{"name":"_maxA","type":"uint256"},{"name":"_chickenB","type":"uint256"},{"name":"_ethereumB","type":"uint256"},{"name":"_maxB","type":"uint256"}],"name":"setConfiguration","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"join","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"tradeBooks","outputs":[{"name":"altarRecordId","type":"uint256"},{"name":"chicken","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_committee","type":"address"}],"name":"setCommittee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"items","outputs":[{"name":"owner","type":"address"},{"name":"huntingMultiplier","type":"uint256"},{"name":"offenseMultiplier","type":"uint256"},{"name":"defenseMultiplier","type":"uint256"},{"name":"cost","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalChicken","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_gas","type":"uint256"},{"name":"_code","type":"bytes"}],"name":"callFor","outputs":[{"name":"","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferChickenFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"developer","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdrawDevFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"CORRECTION","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"pets","outputs":[{"name":"huntingPower","type":"uint256"},{"name":"offensePower","type":"uint256"},{"name":"defensePower","type":"uint256"},{"name":"chicken","type":"uint256"},{"name":"ethereum","type":"uint256"},{"name":"max","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_target","type":"address"}],"name":"attack","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_user","type":"address"}],"name":"tradeBookOf","outputs":[{"name":"_id","type":"uint256"},{"name":"_ethereum","type":"uint256"},{"name":"_totalChicken","type":"uint256"},{"name":"_chicken","type":"uint256"},{"name":"_income","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"uint256"}],"name":"upgradeStrength","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"dividendRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"committee","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"chickenTokenDelegator","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_user","type":"address"}],"name":"saveChickenOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"dividendsPerShare","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"}],"name":"buyItem","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"altarFund","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"lastSaveTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"attackCooldown","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"},{"name":"_chicken","type":"uint256"},{"name":"_ethereum","type":"uint256"},{"name":"_max","type":"uint256"}],"name":"changePet","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_developer","type":"address"}],"name":"setDeveloper","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"user","type":"address"}],"name":"Join","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"id","type":"uint256"},{"indexed":false,"name":"huntingPower","type":"uint256"},{"indexed":false,"name":"offensePower","type":"uint256"},{"indexed":false,"name":"defense","type":"uint256"},{"indexed":false,"name":"chicken","type":"uint256"},{"indexed":false,"name":"ethereum","type":"uint256"},{"indexed":false,"name":"max","type":"uint256"}],"name":"NewPet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"id","type":"uint256"},{"indexed":false,"name":"chicken","type":"uint256"},{"indexed":false,"name":"ethereum","type":"uint256"},{"indexed":false,"name":"max","type":"uint256"}],"name":"ChangePet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"id","type":"uint256"},{"indexed":false,"name":"huntingMultiplier","type":"uint256"},{"indexed":false,"name":"offenseMultiplier","type":"uint256"},{"indexed":false,"name":"defenseMultiplier","type":"uint256"},{"indexed":false,"name":"ethereum","type":"uint256"}],"name":"NewItem","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"ethereum","type":"uint256"},{"indexed":false,"name":"max","type":"uint256"}],"name":"SetDepot","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"chickenA","type":"uint256"},{"indexed":false,"name":"ethereumA","type":"uint256"},{"indexed":false,"name":"maxA","type":"uint256"},{"indexed":false,"name":"chickenB","type":"uint256"},{"indexed":false,"name":"ethereumB","type":"uint256"},{"indexed":false,"name":"maxB","type":"uint256"}],"name":"SetConfiguration","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"dividendRate","type":"uint256"},{"indexed":false,"name":"altarCut","type":"uint256"},{"indexed":false,"name":"storeCut","type":"uint256"},{"indexed":false,"name":"devCut","type":"uint256"}],"name":"SetDistribution","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"cooldownTime","type":"uint256"}],"name":"SetCooldownTime","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"name","type":"string"},{"indexed":false,"name":"symbol","type":"string"}],"name":"SetNameAndSymbol","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"developer","type":"address"}],"name":"SetDeveloper","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"committee","type":"address"}],"name":"SetCommittee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"id","type":"uint256"},{"indexed":false,"name":"ethereum","type":"uint256"}],"name":"NewAltarRecord","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"user","type":"address"},{"indexed":false,"name":"id","type":"uint256"},{"indexed":false,"name":"chicken","type":"uint256"}],"name":"ChickenToAltar","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"user","type":"address"},{"indexed":false,"name":"id","type":"uint256"},{"indexed":false,"name":"ethereum","type":"uint256"}],"name":"EthereumFromAltar","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"attacker","type":"address"},{"indexed":true,"name":"defender","type":"address"},{"indexed":false,"name":"booty","type":"uint256"}],"name":"Attack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"user","type":"address"},{"indexed":false,"name":"id","type":"uint256"},{"indexed":false,"name":"to","type":"uint256"}],"name":"UpgradePet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"user","type":"address"},{"indexed":false,"name":"to","type":"uint256"}],"name":"UpgradeDepot","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":true,"name":"id","type":"uint256"},{"indexed":false,"name":"cost","type":"uint256"}],"name":"BuyItem","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"cost","type":"uint256"}],"name":"BuyStore","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"user","type":"address"},{"indexed":false,"name":"attribute","type":"string"},{"indexed":false,"name":"to","type":"uint256"}],"name":"UpgradeHunter","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"user","type":"address"},{"indexed":false,"name":"shares","type":"uint256"},{"indexed":false,"name":"dividends","type":"uint256"}],"name":"RedeemShares","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"}]
Contract Creation Code
60c0604052601060808190527f436869636b656e48756e7453746f636b0000000000000000000000000000000060a0908152620000409160009190620000cb565b506040805180820190915260038082527f434853000000000000000000000000000000000000000000000000000000000060209092019182526200008791600191620000cb565b506002805460ff19166012179055348015620000a257600080fd5b506027805433600160a060020a0319918216811790925560288054909116909117905562000170565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200010e57805160ff19168380011785556200013e565b828001600101855582156200013e579182015b828111156200013e57825182559160200191906001019062000121565b506200014c92915062000150565b5090565b6200016d91905b808211156200014c576000815560010162000157565b90565b613b8b80620001806000396000f3006080604052600436106103415763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166265318b8114610346578063016899de14610379578063045f955b146103a757806306fdde03146103b7578063095ea7b3146104415780630adae972146104795780630fc709e5146105ba57806318160ddd146105db57806319ab453c146105f05780631fa087551461061157806323b872dd1461061c57806327bb020a1461064657806328b8b1081461065b5780632b2e715914610670578063313ce567146106a35780633a98ef39146106ce5780633ccfd60b146106e357806341ad3f57146106f8578063463ac31b146107105780634c97c83614610718578063572b130f146107235780635996228e146107445780635a4462151461074f5780635baef4f3146107e65780635c5c1285146107fb57806363fd7eb01461081c5780636827e7641461083d5780636ff732011461085257806370a082311461086a578063765878471461088b5780637ebd02f8146108965780638e7a1697146108ab578063910ab259146108c6578063916a4b57146108e757806395d89b411461090e578063975057e71461092357806398d714ac146109685780639c2868371461097d578063a7f0b3de14610992578063a9059cbb146109a7578063a9782954146109cb578063aaa363c914610a12578063b319c6b714610a2a578063b460481d14610a3f578063b48fcdc014610a54578063b688a36314610a7b578063b92c404f14610a90578063bddae40e14610ab1578063bfb231d214610ad2578063c3ba65e714610b1f578063c60c3aca14610b34578063ca1a308614610b5c578063ca4b208b14610b86578063cb93f7ef14610bb7578063ce5e9ffb14610bcc578063cfb869bf14610be1578063d018db3e14610c2c578063d1a6102514610c4d578063d583644b14610c99578063d6a3f37414610ca4578063d864e74014610cb9578063dba8be6e14610cce578063dd62ed3e14610ce3578063de2f827e14610d0a578063e2d2e21914610d2b578063e7fb74c714610d40578063eb4eecec14610d4b578063efab37bf14610d60578063f0bb754014610d81578063f67501f714610da2578063ff70fa4914610dc3575b600080fd5b34801561035257600080fd5b50610367600160a060020a0360043516610de4565b60408051918252519081900360200190f35b34801561038557600080fd5b5061038e610e61565b6040805192835260208301919091528051918290030190f35b6103b5600435602435610e6a565b005b3480156103c357600080fd5b506103cc611074565b6040805160208082528351818301528351919283929083019185019080838360005b838110156104065781810151838201526020016103ee565b50505050905090810190601f1680156104335780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561044d57600080fd5b50610465600160a060020a0360043516602435611102565b604080519115158252519081900360200190f35b34801561048557600080fd5b5061049a600160a060020a0360043516611169565b604051808a600260200280838360005b838110156104c25781810151838201526020016104aa565b5050505090500189600260200280838360005b838110156104ed5781810151838201526020016104d5565b5050505090500188600260200280838360005b83811015610518578181015183820152602001610500565b5050505090500187600460200280838360005b8381101561054357818101518382015260200161052b565b5050505090500180602001868152602001858152602001848152602001838152602001828103825287818151815260200191508051906020019060200280838360005b8381101561059e578181015183820152602001610586565b505050509050019a505050505050505050505060405180910390f35b3480156105c657600080fd5b506103b56004356024356044356064356113c0565b3480156105e757600080fd5b50610367611467565b3480156105fc57600080fd5b506103b5600160a060020a036004351661146e565b6103b56004356115b4565b34801561062857600080fd5b50610465600160a060020a03600435811690602435166044356116de565b34801561065257600080fd5b5061036761174d565b34801561066757600080fd5b506103b5611753565b34801561067c57600080fd5b506106856117a3565b60408051938452602084019290925282820152519081900360600190f35b3480156106af57600080fd5b506106b86117af565b6040805160ff9092168252519081900360200190f35b3480156106da57600080fd5b506103676117b8565b3480156106ef57600080fd5b506103b56117be565b34801561070457600080fd5b506103b5600435611803565b6103b56118d9565b6103b56004356119e5565b34801561072f57600080fd5b506103b5600435602435604435606435611af9565b6103b5600435611d36565b34801561075b57600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526103b594369492936024939284019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a999881019791965091820194509250829150840183828082843750949750611e3d9650505050505050565b3480156107f257600080fd5b50610367611f80565b34801561080757600080fd5b50610367600160a060020a0360043516611f85565b34801561082857600080fd5b50610367600160a060020a0360043516611f97565b34801561084957600080fd5b50610367611fca565b34801561085e57600080fd5b506103b5600435611fd0565b34801561087657600080fd5b50610367600160a060020a0360043516612022565b6103b560043561203d565b3480156108a257600080fd5b506106856120d0565b3480156108b757600080fd5b506103b56004356024356120dc565b3480156108d257600080fd5b50610367600160a060020a036004351661214b565b3480156108f357600080fd5b506103b560043560243560443560643560843560a43561215d565b34801561091a57600080fd5b506103cc612328565b34801561092f57600080fd5b50610938612382565b60408051600160a060020a0390951685526020850193909352838301919091526060830152519081900360800190f35b34801561097457600080fd5b506103b561239d565b34801561098957600080fd5b506103676123d2565b34801561099e57600080fd5b506103676123d8565b3480156109b357600080fd5b50610465600160a060020a03600435166024356123de565b3480156109d757600080fd5b506109ec600160a060020a03600435166123f4565b604080519485526020850193909352838301919091526060830152519081900360800190f35b348015610a1e57600080fd5b5061038e60043561245d565b348015610a3657600080fd5b50610367612476565b348015610a4b57600080fd5b506103b561247c565b348015610a6057600080fd5b506103b560043560243560443560643560843560a43561254b565b348015610a8757600080fd5b506103b5612621565b348015610a9c57600080fd5b5061038e600160a060020a03600435166126f0565b348015610abd57600080fd5b506103b5600160a060020a0360043516612709565b348015610ade57600080fd5b50610aea600435612789565b60408051600160a060020a03909616865260208601949094528484019290925260608401526080830152519081900360a00190f35b348015610b2b57600080fd5b506103676127d2565b61046560048035600160a060020a0316906024803591604435916064359081019101356127d8565b348015610b6857600080fd5b50610465600160a060020a036004358116906024351660443561282f565b348015610b9257600080fd5b50610b9b6128b9565b60408051600160a060020a039092168252519081900360200190f35b348015610bc357600080fd5b506103b56128c8565b348015610bd857600080fd5b50610367612918565b348015610bed57600080fd5b50610bf9600435612925565b604080519687526020870195909552858501939093526060850191909152608084015260a0830152519081900360c00190f35b348015610c3857600080fd5b506103b5600160a060020a0360043516612969565b348015610c5957600080fd5b50610c6e600160a060020a0360043516612ab6565b6040805195865260208601949094528484019290925260608401526080830152519081900360a00190f35b6103b5600435612b66565b348015610cb057600080fd5b50610367612c8d565b348015610cc557600080fd5b50610b9b612c93565b348015610cda57600080fd5b50610b9b612ca2565b348015610cef57600080fd5b50610367600160a060020a0360043581169060243516612cb1565b348015610d1657600080fd5b50610367600160a060020a0360043516612cdc565b348015610d3757600080fd5b50610367612d5e565b6103b5600435612d64565b348015610d5757600080fd5b50610367612fd4565b348015610d6c57600080fd5b50610367600160a060020a0360043516612fda565b348015610d8d57600080fd5b50610367600160a060020a0360043516612fec565b348015610dae57600080fd5b506103b5600435602435604435606435612ffe565b348015610dcf57600080fd5b506103b5600160a060020a03600435166130cb565b600160a060020a03811660009081526008602090815260408083205460078352818420546006909352908320546004546801000000000000000093610e4f9392610e4392610e379163ffffffff61315316565b9063ffffffff61317c16565b9063ffffffff61318916565b811515610e5857fe5b0490505b919050565b601e54601f5482565b610e7261397f565b602054600090819081908610610e8757600080fd5b6020805487908110610e9557fe5b906000526020600020906006020160c0604051908101604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815250509350836060015185029250610f00338461319b565b836080015185029150610f1282613261565b610f1b336132fb565b600b810154909150600187011115610f405760018601610f3e600b8301826139b6565b505b610f6e8582600b0188815481101515610f5557fe5b906000526020600020015461317c90919063ffffffff16565b600b8201805488908110610f7e57fe5b60009182526020909120015560a0840151600b8201805488908110610f9f57fe5b906000526020600020015411151515610fb757600080fd5b83516004820154610fcf91870263ffffffff61317c16565b600482015560208401516005820154610fef91870263ffffffff61317c16565b60058201556040840151600682015461100f91870263ffffffff61317c16565b6006820155600b8101805433917f16ab5780b3810d9cdc9a1ed37ce0fa7ea98e877c6f8a257fb37b16833bcba471918991908290811061104b57fe5b6000918252602091829020015460408051938452918301528051918290030190a2505050505050565b6000805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156110fa5780601f106110cf576101008083540402835291602001916110fa565b820191906000526020600020905b8154815290600101906020018083116110dd57829003601f168201915b505050505081565b336000818152600960209081526040808320600160a060020a038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b6111716139da565b6111796139da565b6111816139da565b6111896139f5565b6060600080600080611199613a14565b600160a060020a038b1660009081526017602090815260409182902082516101a0810184528154610120820190815260018301546101408301526002830154610160830152600383015461018083015281526004820154818401526005820154818501526006820154606082015260078201546080820152600882015460a0820152600982015460c0820152600a82015460e0820152600b8201805485518186028101860190965280865291949293610100860193929083018282801561127f57602002820191906000526020600020905b81548152602001906001019080831161126b575b5050505050815250509050604080519081016040528082602001518152602001826080015181525099506040805190810160405280826040015181526020018260a0015181525098506040805190810160405280826060015181526020018260c001518152509750608060405190810160405280826000015160000151815260200182600001516020015181526020018260000151604001518152602001826000015160600151815250965080610100015195508060e001519450601660008c600160a060020a0316600160a060020a03168152602001908152602001600020549350601560008c600160a060020a0316600160a060020a03168152602001908152602001600020549250602260008c600160a060020a0316600160a060020a03168152602001908152602001600020549150509193959799909294969850565b602754600160a060020a031633146113d757600080fd5b600082116113e457600080fd5b6113fa81610e378481888863ffffffff61317c16565b60641461140657600080fd5b60128490556010839055600b829055600e81905560408051858152602081018590528082018490526060810183905290517f19b0c2b62f3fec0fb2a4ad13aa46c5627e326ae04dd8fba61a5b905cd53f7eb79181900360800190a150505050565b6003545b90565b602754600160a060020a0316331461148557600080fd5b601454600160a060020a03161561149b57600080fd5b60148054600160a060020a031916600160a060020a038316179055635af1bb706024556114c6612621565b600a8054600160a060020a0319163317905567016345785d8a0000600c5561150560646509184e72a0006063620186a066038d7ea4c68000600961254b565b6115156014604b600160046113c0565b611520610258611fd0565b61153266b1a2bc2ec5000060096120dc565b6115476005806000662386f26fc10000611af9565b61155c6000806005662386f26fc10000611af9565b6115786103e8600080620186a0662386f26fc10000600961215d565b61159560006103e86000620186a0662386f26fc10000600961215d565b6115b16000806103e862031704662386f26fc10000600961215d565b50565b60008060006115c2336132fb565b6001810154601d54919450925084118015906115dd57508184115b15156115e857600080fd5b60408051606081018252601b548152601c546020820152601d54918101919091526116169083908690613324565b61164361162c838603600263ffffffff61315316565b84546116379061337e565b9063ffffffff61315316565b600184018590556004840154909150611662908263ffffffff61317c16565b6004840155600583015461167c908263ffffffff61317c16565b600584015560408051602081018690528181526009818301527f6465787465726974790000000000000000000000000000000000000000000000606082015290513391600080516020613b40833981519152919081900360800190a250505050565b600160a060020a038316600090815260096020908152604080832033845290915281205482111561170e57600080fd5b600160a060020a038416600090815260096020908152604080832033845290915290208054839003905561174384848461338a565b5060019392505050565b60105481565b600d54600a54600160a060020a03166000908152600560205260409020546117809163ffffffff61317c16565b600a54600160a060020a0316600090815260056020526040812091909155600d55565b601b54601c54601d5483565b60025460ff1681565b60035481565b33600081815260056020526040808220805490839055905190929183156108fc02918491818181858888f193505050501580156117ff573d6000803e3d6000fd5b5050565b6000808080841161181357600080fd5b61181d338561319b565b611825613595565b9250611830836135a5565b80549092508480820281151561184257fe5b041461184d57600080fd5b5033600090815260266020526040902080548311156118735761186f81613614565b8281555b6001820154611888908563ffffffff61317c16565b60018084019190915581018054850190556040805184815260208101869052815133927f249d3c255987361d5d69f32914f89ba3b6617f290ed9e435126a39a7cff6d996928290030190a250505050565b600a8054600c8054600160a060020a03909216926000928392611902919063ffffffff61315316565b81151561190b57fe5b049150611917826136fd565b600c54600290830304905061193781600f5461317c90919063ffffffff16565b600f55600d54600160a060020a03841660009081526005602052604090205461196d9190610e379084860363ffffffff61317c16565b600160a060020a038416600081815260056020908152604080832094909455600c869055600a8054600160a060020a03191633908117909155600d929092558351868152935191937f0f24f9f79a489f214543721c774ce6b52901934b07e7da8c77642f1866f0e841929081900390910190a3505050565b60008060006119f3336132fb565b6002810154601a5491945092508411801590611a0e57508184115b1515611a1957600080fd5b6040805160608101825260185481526019546020820152601a5491810191909152611a479083908690613324565b611a786002830a611a578661337e565b036116376008610e376002886000016003015461315390919063ffffffff16565b600284018590556006840154909150611a97908263ffffffff61317c16565b60068401556040805160208101869052818152600c818301527f636f6e737469747574696f6e0000000000000000000000000000000000000000606082015290513391600080516020613b40833981519152919081900360800190a250505050565b60275460009081908190600160a060020a03163314611b1757600080fd5b6201000092508287108015611b2b57508286105b8015611b3657508285105b1515611b4157600080fd5b602754611b5690600160a060020a0316612cdc565b50602754611b6c90600160a060020a03166132fb565b6007810154909250611b84908863ffffffff61317c16565b60078301556008820154611b9e908763ffffffff61317c16565b60088301556009820154611bb8908663ffffffff61317c16565b6009830155506040805160a08082018352602754600160a060020a03908116835260208084018b81528486018b815260608087018c815260808089018d815260218054600181018083556000929092529a517f3a6357012c1a3ae0a17d304c9920310382d968ebcc4b1771f41c6b304205b57060058d029081018054600160a060020a03191692909b169190911790995595517f3a6357012c1a3ae0a17d304c9920310382d968ebcc4b1771f41c6b304205b57189015593517f3a6357012c1a3ae0a17d304c9920310382d968ebcc4b1771f41c6b304205b57288015590517f3a6357012c1a3ae0a17d304c9920310382d968ebcc4b1771f41c6b304205b57387015591517f3a6357012c1a3ae0a17d304c9920310382d968ebcc4b1771f41c6b304205b5749095019490945586519586529185018c90528486018b9052918401899052830187905292517f2f770e091da1eb4be223d793b34fcd1b5cbff2f4c74ad7f2d7d55c1eceda488d9281900390910190a150505050505050565b6000806000611d44336132fb565b6003810154601d5491945092508411801590611d5f57508184115b1515611d6a57600080fd5b60408051606081018252601b548152601c546020820152601d5491810191909152611d989083908690613324565b611dbc611dae838603600263ffffffff61315316565b60028501546116379061337e565b600384018590556006840154909150611ddb908263ffffffff61317c16565b60068401556040805160208101869052818152600a818301527f726573697374616e636500000000000000000000000000000000000000000000606082015290513391600080516020613b40833981519152919081900360800190a250505050565b602754600160a060020a03163314611e5457600080fd5b8151611e67906000906020850190613a67565b508051611e7b906001906020840190613a67565b507fd150542982eaa18f20ceb10f524c418899e6a331a81ee4a70daa921f976fab3b8282604051808060200180602001838103835285818151815260200191508051906020019080838360005b83811015611ee0578181015183820152602001611ec8565b50505050905090810190601f168015611f0d5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015611f40578181015183820152602001611f28565b50505050905090810190601f168015611f6d5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a15050565b600c81565b60056020526000908152604090205481565b6000611163611fa58361377d565b600160a060020a0384166000908152601660205260409020549063ffffffff61317c16565b600f5481565b602754600160a060020a03163314611fe757600080fd5b60238190556040805182815290517ff1f62fb53f063eeed657f6ed8c238c2e61ef9547b206dac91c836599fb8f7a339181900360200190a150565b600160a060020a031660009081526006602052604090205490565b6000612048336132fb565b600a810154909150612060908363ffffffff61317c16565b600a8201819055601f54101561207557600080fd5b601e546120929061208d90849063ffffffff61315316565b613261565b600a810154604080519182525133917f088f18ecb97af8211f9549cddf9227ee53f8fda22b969dab5621461c80fc7d50919081900360200190a25050565b601854601954601a5483565b602754600160a060020a031633146120f357600080fd5b601f5481101561210257600080fd5b601e829055601f819055604080518381526020810183905281517f25e5d03ea9004bbd99c954a40cefdb9a23e87966152ac725e8c44386f6e11798929181900390910190a15050565b60166020526000908152604090205481565b602754600090600160a060020a0316331461217757600080fd5b6000821161218457600080fd5b63ffffffff8216821461219657600080fd5b506040805160c08181018352888252602082810189815283850189815260608086018a815260808088018b815260a0808a018c8152885460018101808b5560008b90529b51600682027fc97bfaf2f8ee708c303a06d134f5ecd8389ae0432af62dc132a24118292866bb81019190915598517fc97bfaf2f8ee708c303a06d134f5ecd8389ae0432af62dc132a24118292866bc8a015596517fc97bfaf2f8ee708c303a06d134f5ecd8389ae0432af62dc132a24118292866bd89015593517fc97bfaf2f8ee708c303a06d134f5ecd8389ae0432af62dc132a24118292866be88015590517fc97bfaf2f8ee708c303a06d134f5ecd8389ae0432af62dc132a24118292866bf87015591517fc97bfaf2f8ee708c303a06d134f5ecd8389ae0432af62dc132a24118292866c09095019490945587519283529382018d90528187018c905281018a9052908101889052908101869052908101849052915190917f825cf2439eaf73dfac2c09fd8f2d837fad3d41ae9997922036b523f11e6c1226919081900360e00190a150505050505050565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156110fa5780601f106110cf576101008083540402835291602001916110fa565b600a54600b54600c54600d54600160a060020a039093169284565b6000806123a8613595565b3360009081526026602052604090208054919350915082116123c957600080fd5b6117ff81613614565b600e5481565b60245481565b60006123eb33848461338a565b50600192915050565b600080600080612402613ae5565b50505050600160a060020a039190911660009081526017602090815260409182902082516080810184528154808252600183015493820184905260028301549482018590526003909201546060909101819052909491935090565b6025602052600090815260409020805460019091015482565b60235481565b336000818152600660205260408120549161249690610de4565b3360009081526006602090815260408083208390556007825280832083905560089091528120556003549091506124d3908363ffffffff61318916565b600355336000908152600560205260409020546124f6908263ffffffff61317c16565b33600081815260056020908152604091829020939093558051858152928301849052805191927fef7fb21fed1701a6c82b78d78bad1ddab67e41025c2d5078a1be2a3a238b4e62929081900390910190a25050565b602754600160a060020a0316331461256257600080fd5b601a54841080159061257957508363ffffffff1684145b151561258457600080fd5b601d54811080159061259b57508063ffffffff1681145b15156125a657600080fd5b60188690556019859055601a849055601b839055601c829055601d8190556040805187815260208101879052808201869052606081018590526080810184905260a0810183905290517fdd7612d23bf1ba260c41948384c8a672815d6e6f03705f4ccb8db39d01bb49d09181900360c00190a1505050505050565b336000908152601760205260409020600a8101541561263f57600080fd5b604080516080810182526001808252602080830182905282840182905260609092018190528084558381018190556002840181905560038401819055600a808501919091556004840181905560058401819055606e60068501556007840181905560088401819055600984015533600081815260158352839020429055825190815291517f0764c80c4165f118547b301a0b4b91eac21bd2f2d9b61d0ac723ff0aab27bb799281900390910190a150565b6026602052600090815260409020805460019091015482565b602754600160a060020a0316331461272057600080fd5b600160a060020a038116151561273557600080fd5b60278054600160a060020a038316600160a060020a0319909116811790915560408051918252517f22a3400c609e52ea781540daed872a0ff7b79a428f634be082c24c2faf0684639181900360200190a150565b602180548290811061279757fe5b600091825260209091206005909102018054600182015460028301546003840154600490940154600160a060020a0390931694509092909185565b60135481565b602754600090600160a060020a031633146127f257600080fd5b85600160a060020a0316858590858560405180838380828437820191505092505050600060405180830381858888f19a9950505050505050505050565b601454600090600160a060020a0316331461284957600080fd5b8161285385612cdc565b101561285e57600080fd5b600160a060020a038085166000908152601660205260408082208054869003905591851681522054612896908363ffffffff61317c16565b600160a060020a0384166000908152601660205260409020555060019392505050565b602854600160a060020a031681565b600f54602854600160a060020a03166000908152600560205260409020546128f59163ffffffff61317c16565b602854600160a060020a0316600090815260056020526040812091909155600f55565b6801000000000000000081565b602080548290811061293357fe5b60009182526020909120600690910201805460018201546002830154600384015460048501546005909501549395509193909286565b3360009081526022602052604081205481908190421161298857600080fd5b33600090815260176020526040808220600160a060020a03871683529120600981015460068201549295509093506129c6919063ffffffff61315316565b600884015460058501546129df9163ffffffff61315316565b1115612ab0576129ee84612cdc565b9050600082600a015411612a025780612a13565b81600a015481811515612a1157fe5b045b600160a060020a03851660009081526016602052604080822080548490039055338252902054909150612a4c908263ffffffff61317c16565b3360008181526016602090815260408083209490945560235460228252918490204290920190915582518481529251600160a060020a038816937f07fc6d85ef6db5c911f925dd0be5e0b6139a4d732479327729330fcf4ab15e2d92908290030190a35b50505050565b6000806000806000612ac6613b0e565b612ace613b0e565b5050600160a060020a03861660009081526026602090815260408083208151808301835281548082526001928301548286018190528187526025865284872085518087019096528054808752940154958501869052909a50919850929650945090918511612b3d576000612b59565b84612b4e878663ffffffff61315316565b811515612b5757fe5b045b9250505091939590929450565b6000806000612b74336132fb565b8054601a5491945092508411801590612b8c57508184115b1515612b9757600080fd5b6040805160608101825260185481526019546020820152601a5491810191909152612bc59083908690613324565b612bf66002830a612bd58661337e565b036116376008610e376002886000016001015461315390919063ffffffff16565b8484556004840154909150612c11908263ffffffff61317c16565b60048401556005830154612c2b908263ffffffff61317c16565b600584015560408051602081018690528181526008818301527f737472656e677468000000000000000000000000000000000000000000000000606082015290513391600080516020613b40833981519152919081900360800190a250505050565b60125481565b602754600160a060020a031681565b601454600160a060020a031681565b600160a060020a03918216600090815260096020908152604080832093909416825291909152205490565b6000806000612cea8461377d565b601354909250612d00908363ffffffff61317c16565b601355600160a060020a038416600090815260166020526040902054612d2c908363ffffffff61317c16565b600160a060020a0394909416600090815260166020908152604080832087905560159091529020429055509192915050565b60045481565b600080600080600080602187815481101515612d7c57fe5b6000918252602090912060059091020180546004820154919750600160a060020a03169550600a90612db590600c63ffffffff61315316565b811515612dbe57fe5b049350612dca846136fd565b612dd385612cdc565b50612ddd856132fb565b9250612dfa8660010154846007015461318990919063ffffffff16565b600784015560028601546008840154612e189163ffffffff61318916565b600884015560038601546009840154612e369163ffffffff61318916565b6009840155612e4433612cdc565b50612e4e336132fb565b9150612e6b8660010154836007015461317c90919063ffffffff16565b600783015560028601546008830154612e899163ffffffff61317c16565b600883015560038601546009830154612ea79163ffffffff61317c16565b60098301556004860154600290612ec590869063ffffffff61318916565b811515612ece57fe5b049050612ee681600f5461317c90919063ffffffff16565b600f55600160a060020a038516600090815260056020526040902054612f149082860363ffffffff61317c16565b600160a060020a0386166000908152600560205260409020556021805485919089908110612f3e57fe5b90600052602060002090600502016004018190555033602188815481101515612f6357fe5b6000918252602091829020600591909102018054600160a060020a031916600160a060020a039384161790556040805187815290518a933393908a16927fc6d7a5e59f38ae48e0f1577ce4627ba9b270bfd4c2c0c7be609c429421bc3d68929081900390910190a450505050505050565b60115481565b60156020526000908152604090205481565b60226020526000908152604090205481565b602754600090600160a060020a0316331461301857600080fd5b602054851061302657600080fd5b602080548690811061303457fe5b906000526020600020906006020190508060050154821015801561305d57508163ffffffff1682145b151561306857600080fd5b60038101849055600481018390556005810182905560408051868152602081018690528082018590526060810184905290517f2c2e9072543dfe5f0b03fabc22ced8ddd4e6f976a64f2f4726c4ea72cf8d31c09181900360800190a15050505050565b602754600160a060020a031633146130e257600080fd5b600160a060020a03811615156130f757600080fd5b6130ff6128c8565b60288054600160a060020a038316600160a060020a0319909116811790915560408051918252517f8aaf3a0823afdd08e2480f3fac4af353fad0c1e1aeffae73284c2295e441fc939181900360200190a150565b600082151561316457506000611163565b5081810281838281151561317457fe5b041461116357fe5b8181018281101561116357fe5b60008282111561319557fe5b50900390565b6000806131a78461377d565b9150818311156132085750600160a060020a038316600090815260166020526040902054818303908111156131db57600080fd5b600160a060020a038416600090815260166020526040902080548290039055601380548290039055613242565b5060135482820390613220908263ffffffff61317c16565b601355600160a060020a03841660009081526016602052604090208054820190555b505050600160a060020a03166000908152601560205260409020429055565b60008080836064808202041461327657600080fd5b61327f846136fd565b601254601054606491860282900494508502600b54919004925060649085020490506132bc81838587030303600f5461317c90919063ffffffff16565b600f556132c93384613802565b6011546132dc908363ffffffff61317c16565b601155600d546132f2908263ffffffff61317c16565b600d5550505050565b600160a060020a0381166000908152601760205260408120600a810154909110610e5c57600080fd5b600080613342613334868661392d565b84519063ffffffff61315316565b915061334e338361319b565b61336c61335b868661394d565b60208501519063ffffffff61315316565b905061337781613261565b5050505050565b60006111638283613153565b60008080600160a060020a03851615156133a357600080fd5b600160a060020a0386166000908152600660205260409020548411156133c857600080fd5b6004546133db908563ffffffff61315316565b600160a060020a038716600090815260076020526040902054909350613407908463ffffffff61317c16565b600160a060020a038716600090815260086020526040902054909250821061344757600160a060020a038616600090815260086020526040902054613449565b815b905061345b828263ffffffff61318916565b600160a060020a038716600090815260076020908152604080832093909355600890522054613490908263ffffffff61318916565b600160a060020a0380881660009081526008602052604080822093909355908716815220546134c5908463ffffffff61317c16565b600160a060020a03808716600090815260086020908152604080832094909455918916815260069091522054613501908563ffffffff61318916565b600160a060020a038088166000908152600660205260408082209390935590871681522054613536908563ffffffff61317c16565b600160a060020a0380871660008181526006602090815260409182902094909455805188815290519193928a16927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050505050565b6024546201518042919091030490565b60008181526025602052604081208054909190151561360e575060118054600a90048083558154819003909155604080518481526020810183905281517f3d823e1b0137c31466d0d26831c5b359c4eab1d1237ead4a8ff564264d9a2c53929181900390910190a15b50919050565b61361c613b0e565b600080836001015411156136f857825460009081526025602090815260409182902082518084019093528054808452600191820154928401839052908601549294509091613670919063ffffffff61315316565b81151561367957fe5b6000600186018190553381526005602052604090205491900491506136a4908263ffffffff61317c16565b336000818152600560209081526040918290209390935585548151908152928301849052805191927f1999f960f6c1318254fc32602ac8ba7ebe18123b1bfe4d21cb9b5ac24761aae4929081900390910190a25b505050565b6000348211156137435750336000908152600560205260409020543482039081111561372857600080fd5b336000908152600560205260409020805482900390556117ff565b50336000908152600560205260409020543482900390613769908263ffffffff61317c16565b336000908152600560205260409020555050565b600160a060020a03811660009081526015602052604081205481811180156137a457504281105b156137f957600160a060020a038316600090815260176020526040902060078101546004909101546064916137e8914285900391611637919063ffffffff61315316565b8115156137f157fe5b04915061360e565b6000915061360e565b60008111156117ff5760035461381e908263ffffffff61317c16565b60035560045461385d90613838908363ffffffff61315316565b600160a060020a0384166000908152600860205260409020549063ffffffff61317c16565b600160a060020a038316600090815260086020908152604080832093909355600690522054613892908263ffffffff61317c16565b600160a060020a0383166000908152600660205260409020556003546138e5906138cb836801000000000000000063ffffffff61315316565b8115156138d457fe5b60045491900463ffffffff61317c16565b600455604080518281529051600160a060020a038416916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b60046002600019808501850282900a90840184029190910a030492915050565b60006006600184600202036001850385020260018460020203600185038502020381151561397757fe5b049392505050565b60c0604051908101604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b8154818355818111156136f8576000838152602090206136f8918101908301613b25565b60408051808201825290600290829080388339509192915050565b6080604051908101604052806004906020820280388339509192915050565b61018060405190810160405280613a29613ae5565b815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613aa857805160ff1916838001178555613ad5565b82800160010185558215613ad5579182015b82811115613ad5578251825591602001919060010190613aba565b50613ae1929150613b25565b5090565b608060405190810160405280600081526020016000815260200160008152602001600081525090565b604080518082019091526000808252602082015290565b61146b91905b80821115613ae15760008155600101613b2b56009a18b08f786ded2f49322290bcefb5a9ad611fae6a3c2cdf63c46a8a4573bf17a165627a7a72305820b6f087fe4031eb79d8bd609c9571aea4625e9f63c3da4813d397f2c390ef85cf0029
Deployed Bytecode
0x6080604052600436106103415763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166265318b8114610346578063016899de14610379578063045f955b146103a757806306fdde03146103b7578063095ea7b3146104415780630adae972146104795780630fc709e5146105ba57806318160ddd146105db57806319ab453c146105f05780631fa087551461061157806323b872dd1461061c57806327bb020a1461064657806328b8b1081461065b5780632b2e715914610670578063313ce567146106a35780633a98ef39146106ce5780633ccfd60b146106e357806341ad3f57146106f8578063463ac31b146107105780634c97c83614610718578063572b130f146107235780635996228e146107445780635a4462151461074f5780635baef4f3146107e65780635c5c1285146107fb57806363fd7eb01461081c5780636827e7641461083d5780636ff732011461085257806370a082311461086a578063765878471461088b5780637ebd02f8146108965780638e7a1697146108ab578063910ab259146108c6578063916a4b57146108e757806395d89b411461090e578063975057e71461092357806398d714ac146109685780639c2868371461097d578063a7f0b3de14610992578063a9059cbb146109a7578063a9782954146109cb578063aaa363c914610a12578063b319c6b714610a2a578063b460481d14610a3f578063b48fcdc014610a54578063b688a36314610a7b578063b92c404f14610a90578063bddae40e14610ab1578063bfb231d214610ad2578063c3ba65e714610b1f578063c60c3aca14610b34578063ca1a308614610b5c578063ca4b208b14610b86578063cb93f7ef14610bb7578063ce5e9ffb14610bcc578063cfb869bf14610be1578063d018db3e14610c2c578063d1a6102514610c4d578063d583644b14610c99578063d6a3f37414610ca4578063d864e74014610cb9578063dba8be6e14610cce578063dd62ed3e14610ce3578063de2f827e14610d0a578063e2d2e21914610d2b578063e7fb74c714610d40578063eb4eecec14610d4b578063efab37bf14610d60578063f0bb754014610d81578063f67501f714610da2578063ff70fa4914610dc3575b600080fd5b34801561035257600080fd5b50610367600160a060020a0360043516610de4565b60408051918252519081900360200190f35b34801561038557600080fd5b5061038e610e61565b6040805192835260208301919091528051918290030190f35b6103b5600435602435610e6a565b005b3480156103c357600080fd5b506103cc611074565b6040805160208082528351818301528351919283929083019185019080838360005b838110156104065781810151838201526020016103ee565b50505050905090810190601f1680156104335780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561044d57600080fd5b50610465600160a060020a0360043516602435611102565b604080519115158252519081900360200190f35b34801561048557600080fd5b5061049a600160a060020a0360043516611169565b604051808a600260200280838360005b838110156104c25781810151838201526020016104aa565b5050505090500189600260200280838360005b838110156104ed5781810151838201526020016104d5565b5050505090500188600260200280838360005b83811015610518578181015183820152602001610500565b5050505090500187600460200280838360005b8381101561054357818101518382015260200161052b565b5050505090500180602001868152602001858152602001848152602001838152602001828103825287818151815260200191508051906020019060200280838360005b8381101561059e578181015183820152602001610586565b505050509050019a505050505050505050505060405180910390f35b3480156105c657600080fd5b506103b56004356024356044356064356113c0565b3480156105e757600080fd5b50610367611467565b3480156105fc57600080fd5b506103b5600160a060020a036004351661146e565b6103b56004356115b4565b34801561062857600080fd5b50610465600160a060020a03600435811690602435166044356116de565b34801561065257600080fd5b5061036761174d565b34801561066757600080fd5b506103b5611753565b34801561067c57600080fd5b506106856117a3565b60408051938452602084019290925282820152519081900360600190f35b3480156106af57600080fd5b506106b86117af565b6040805160ff9092168252519081900360200190f35b3480156106da57600080fd5b506103676117b8565b3480156106ef57600080fd5b506103b56117be565b34801561070457600080fd5b506103b5600435611803565b6103b56118d9565b6103b56004356119e5565b34801561072f57600080fd5b506103b5600435602435604435606435611af9565b6103b5600435611d36565b34801561075b57600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526103b594369492936024939284019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a999881019791965091820194509250829150840183828082843750949750611e3d9650505050505050565b3480156107f257600080fd5b50610367611f80565b34801561080757600080fd5b50610367600160a060020a0360043516611f85565b34801561082857600080fd5b50610367600160a060020a0360043516611f97565b34801561084957600080fd5b50610367611fca565b34801561085e57600080fd5b506103b5600435611fd0565b34801561087657600080fd5b50610367600160a060020a0360043516612022565b6103b560043561203d565b3480156108a257600080fd5b506106856120d0565b3480156108b757600080fd5b506103b56004356024356120dc565b3480156108d257600080fd5b50610367600160a060020a036004351661214b565b3480156108f357600080fd5b506103b560043560243560443560643560843560a43561215d565b34801561091a57600080fd5b506103cc612328565b34801561092f57600080fd5b50610938612382565b60408051600160a060020a0390951685526020850193909352838301919091526060830152519081900360800190f35b34801561097457600080fd5b506103b561239d565b34801561098957600080fd5b506103676123d2565b34801561099e57600080fd5b506103676123d8565b3480156109b357600080fd5b50610465600160a060020a03600435166024356123de565b3480156109d757600080fd5b506109ec600160a060020a03600435166123f4565b604080519485526020850193909352838301919091526060830152519081900360800190f35b348015610a1e57600080fd5b5061038e60043561245d565b348015610a3657600080fd5b50610367612476565b348015610a4b57600080fd5b506103b561247c565b348015610a6057600080fd5b506103b560043560243560443560643560843560a43561254b565b348015610a8757600080fd5b506103b5612621565b348015610a9c57600080fd5b5061038e600160a060020a03600435166126f0565b348015610abd57600080fd5b506103b5600160a060020a0360043516612709565b348015610ade57600080fd5b50610aea600435612789565b60408051600160a060020a03909616865260208601949094528484019290925260608401526080830152519081900360a00190f35b348015610b2b57600080fd5b506103676127d2565b61046560048035600160a060020a0316906024803591604435916064359081019101356127d8565b348015610b6857600080fd5b50610465600160a060020a036004358116906024351660443561282f565b348015610b9257600080fd5b50610b9b6128b9565b60408051600160a060020a039092168252519081900360200190f35b348015610bc357600080fd5b506103b56128c8565b348015610bd857600080fd5b50610367612918565b348015610bed57600080fd5b50610bf9600435612925565b604080519687526020870195909552858501939093526060850191909152608084015260a0830152519081900360c00190f35b348015610c3857600080fd5b506103b5600160a060020a0360043516612969565b348015610c5957600080fd5b50610c6e600160a060020a0360043516612ab6565b6040805195865260208601949094528484019290925260608401526080830152519081900360a00190f35b6103b5600435612b66565b348015610cb057600080fd5b50610367612c8d565b348015610cc557600080fd5b50610b9b612c93565b348015610cda57600080fd5b50610b9b612ca2565b348015610cef57600080fd5b50610367600160a060020a0360043581169060243516612cb1565b348015610d1657600080fd5b50610367600160a060020a0360043516612cdc565b348015610d3757600080fd5b50610367612d5e565b6103b5600435612d64565b348015610d5757600080fd5b50610367612fd4565b348015610d6c57600080fd5b50610367600160a060020a0360043516612fda565b348015610d8d57600080fd5b50610367600160a060020a0360043516612fec565b348015610dae57600080fd5b506103b5600435602435604435606435612ffe565b348015610dcf57600080fd5b506103b5600160a060020a03600435166130cb565b600160a060020a03811660009081526008602090815260408083205460078352818420546006909352908320546004546801000000000000000093610e4f9392610e4392610e379163ffffffff61315316565b9063ffffffff61317c16565b9063ffffffff61318916565b811515610e5857fe5b0490505b919050565b601e54601f5482565b610e7261397f565b602054600090819081908610610e8757600080fd5b6020805487908110610e9557fe5b906000526020600020906006020160c0604051908101604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815250509350836060015185029250610f00338461319b565b836080015185029150610f1282613261565b610f1b336132fb565b600b810154909150600187011115610f405760018601610f3e600b8301826139b6565b505b610f6e8582600b0188815481101515610f5557fe5b906000526020600020015461317c90919063ffffffff16565b600b8201805488908110610f7e57fe5b60009182526020909120015560a0840151600b8201805488908110610f9f57fe5b906000526020600020015411151515610fb757600080fd5b83516004820154610fcf91870263ffffffff61317c16565b600482015560208401516005820154610fef91870263ffffffff61317c16565b60058201556040840151600682015461100f91870263ffffffff61317c16565b6006820155600b8101805433917f16ab5780b3810d9cdc9a1ed37ce0fa7ea98e877c6f8a257fb37b16833bcba471918991908290811061104b57fe5b6000918252602091829020015460408051938452918301528051918290030190a2505050505050565b6000805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156110fa5780601f106110cf576101008083540402835291602001916110fa565b820191906000526020600020905b8154815290600101906020018083116110dd57829003601f168201915b505050505081565b336000818152600960209081526040808320600160a060020a038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b6111716139da565b6111796139da565b6111816139da565b6111896139f5565b6060600080600080611199613a14565b600160a060020a038b1660009081526017602090815260409182902082516101a0810184528154610120820190815260018301546101408301526002830154610160830152600383015461018083015281526004820154818401526005820154818501526006820154606082015260078201546080820152600882015460a0820152600982015460c0820152600a82015460e0820152600b8201805485518186028101860190965280865291949293610100860193929083018282801561127f57602002820191906000526020600020905b81548152602001906001019080831161126b575b5050505050815250509050604080519081016040528082602001518152602001826080015181525099506040805190810160405280826040015181526020018260a0015181525098506040805190810160405280826060015181526020018260c001518152509750608060405190810160405280826000015160000151815260200182600001516020015181526020018260000151604001518152602001826000015160600151815250965080610100015195508060e001519450601660008c600160a060020a0316600160a060020a03168152602001908152602001600020549350601560008c600160a060020a0316600160a060020a03168152602001908152602001600020549250602260008c600160a060020a0316600160a060020a03168152602001908152602001600020549150509193959799909294969850565b602754600160a060020a031633146113d757600080fd5b600082116113e457600080fd5b6113fa81610e378481888863ffffffff61317c16565b60641461140657600080fd5b60128490556010839055600b829055600e81905560408051858152602081018590528082018490526060810183905290517f19b0c2b62f3fec0fb2a4ad13aa46c5627e326ae04dd8fba61a5b905cd53f7eb79181900360800190a150505050565b6003545b90565b602754600160a060020a0316331461148557600080fd5b601454600160a060020a03161561149b57600080fd5b60148054600160a060020a031916600160a060020a038316179055635af1bb706024556114c6612621565b600a8054600160a060020a0319163317905567016345785d8a0000600c5561150560646509184e72a0006063620186a066038d7ea4c68000600961254b565b6115156014604b600160046113c0565b611520610258611fd0565b61153266b1a2bc2ec5000060096120dc565b6115476005806000662386f26fc10000611af9565b61155c6000806005662386f26fc10000611af9565b6115786103e8600080620186a0662386f26fc10000600961215d565b61159560006103e86000620186a0662386f26fc10000600961215d565b6115b16000806103e862031704662386f26fc10000600961215d565b50565b60008060006115c2336132fb565b6001810154601d54919450925084118015906115dd57508184115b15156115e857600080fd5b60408051606081018252601b548152601c546020820152601d54918101919091526116169083908690613324565b61164361162c838603600263ffffffff61315316565b84546116379061337e565b9063ffffffff61315316565b600184018590556004840154909150611662908263ffffffff61317c16565b6004840155600583015461167c908263ffffffff61317c16565b600584015560408051602081018690528181526009818301527f6465787465726974790000000000000000000000000000000000000000000000606082015290513391600080516020613b40833981519152919081900360800190a250505050565b600160a060020a038316600090815260096020908152604080832033845290915281205482111561170e57600080fd5b600160a060020a038416600090815260096020908152604080832033845290915290208054839003905561174384848461338a565b5060019392505050565b60105481565b600d54600a54600160a060020a03166000908152600560205260409020546117809163ffffffff61317c16565b600a54600160a060020a0316600090815260056020526040812091909155600d55565b601b54601c54601d5483565b60025460ff1681565b60035481565b33600081815260056020526040808220805490839055905190929183156108fc02918491818181858888f193505050501580156117ff573d6000803e3d6000fd5b5050565b6000808080841161181357600080fd5b61181d338561319b565b611825613595565b9250611830836135a5565b80549092508480820281151561184257fe5b041461184d57600080fd5b5033600090815260266020526040902080548311156118735761186f81613614565b8281555b6001820154611888908563ffffffff61317c16565b60018084019190915581018054850190556040805184815260208101869052815133927f249d3c255987361d5d69f32914f89ba3b6617f290ed9e435126a39a7cff6d996928290030190a250505050565b600a8054600c8054600160a060020a03909216926000928392611902919063ffffffff61315316565b81151561190b57fe5b049150611917826136fd565b600c54600290830304905061193781600f5461317c90919063ffffffff16565b600f55600d54600160a060020a03841660009081526005602052604090205461196d9190610e379084860363ffffffff61317c16565b600160a060020a038416600081815260056020908152604080832094909455600c869055600a8054600160a060020a03191633908117909155600d929092558351868152935191937f0f24f9f79a489f214543721c774ce6b52901934b07e7da8c77642f1866f0e841929081900390910190a3505050565b60008060006119f3336132fb565b6002810154601a5491945092508411801590611a0e57508184115b1515611a1957600080fd5b6040805160608101825260185481526019546020820152601a5491810191909152611a479083908690613324565b611a786002830a611a578661337e565b036116376008610e376002886000016003015461315390919063ffffffff16565b600284018590556006840154909150611a97908263ffffffff61317c16565b60068401556040805160208101869052818152600c818301527f636f6e737469747574696f6e0000000000000000000000000000000000000000606082015290513391600080516020613b40833981519152919081900360800190a250505050565b60275460009081908190600160a060020a03163314611b1757600080fd5b6201000092508287108015611b2b57508286105b8015611b3657508285105b1515611b4157600080fd5b602754611b5690600160a060020a0316612cdc565b50602754611b6c90600160a060020a03166132fb565b6007810154909250611b84908863ffffffff61317c16565b60078301556008820154611b9e908763ffffffff61317c16565b60088301556009820154611bb8908663ffffffff61317c16565b6009830155506040805160a08082018352602754600160a060020a03908116835260208084018b81528486018b815260608087018c815260808089018d815260218054600181018083556000929092529a517f3a6357012c1a3ae0a17d304c9920310382d968ebcc4b1771f41c6b304205b57060058d029081018054600160a060020a03191692909b169190911790995595517f3a6357012c1a3ae0a17d304c9920310382d968ebcc4b1771f41c6b304205b57189015593517f3a6357012c1a3ae0a17d304c9920310382d968ebcc4b1771f41c6b304205b57288015590517f3a6357012c1a3ae0a17d304c9920310382d968ebcc4b1771f41c6b304205b57387015591517f3a6357012c1a3ae0a17d304c9920310382d968ebcc4b1771f41c6b304205b5749095019490945586519586529185018c90528486018b9052918401899052830187905292517f2f770e091da1eb4be223d793b34fcd1b5cbff2f4c74ad7f2d7d55c1eceda488d9281900390910190a150505050505050565b6000806000611d44336132fb565b6003810154601d5491945092508411801590611d5f57508184115b1515611d6a57600080fd5b60408051606081018252601b548152601c546020820152601d5491810191909152611d989083908690613324565b611dbc611dae838603600263ffffffff61315316565b60028501546116379061337e565b600384018590556006840154909150611ddb908263ffffffff61317c16565b60068401556040805160208101869052818152600a818301527f726573697374616e636500000000000000000000000000000000000000000000606082015290513391600080516020613b40833981519152919081900360800190a250505050565b602754600160a060020a03163314611e5457600080fd5b8151611e67906000906020850190613a67565b508051611e7b906001906020840190613a67565b507fd150542982eaa18f20ceb10f524c418899e6a331a81ee4a70daa921f976fab3b8282604051808060200180602001838103835285818151815260200191508051906020019080838360005b83811015611ee0578181015183820152602001611ec8565b50505050905090810190601f168015611f0d5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015611f40578181015183820152602001611f28565b50505050905090810190601f168015611f6d5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a15050565b600c81565b60056020526000908152604090205481565b6000611163611fa58361377d565b600160a060020a0384166000908152601660205260409020549063ffffffff61317c16565b600f5481565b602754600160a060020a03163314611fe757600080fd5b60238190556040805182815290517ff1f62fb53f063eeed657f6ed8c238c2e61ef9547b206dac91c836599fb8f7a339181900360200190a150565b600160a060020a031660009081526006602052604090205490565b6000612048336132fb565b600a810154909150612060908363ffffffff61317c16565b600a8201819055601f54101561207557600080fd5b601e546120929061208d90849063ffffffff61315316565b613261565b600a810154604080519182525133917f088f18ecb97af8211f9549cddf9227ee53f8fda22b969dab5621461c80fc7d50919081900360200190a25050565b601854601954601a5483565b602754600160a060020a031633146120f357600080fd5b601f5481101561210257600080fd5b601e829055601f819055604080518381526020810183905281517f25e5d03ea9004bbd99c954a40cefdb9a23e87966152ac725e8c44386f6e11798929181900390910190a15050565b60166020526000908152604090205481565b602754600090600160a060020a0316331461217757600080fd5b6000821161218457600080fd5b63ffffffff8216821461219657600080fd5b506040805160c08181018352888252602082810189815283850189815260608086018a815260808088018b815260a0808a018c8152885460018101808b5560008b90529b51600682027fc97bfaf2f8ee708c303a06d134f5ecd8389ae0432af62dc132a24118292866bb81019190915598517fc97bfaf2f8ee708c303a06d134f5ecd8389ae0432af62dc132a24118292866bc8a015596517fc97bfaf2f8ee708c303a06d134f5ecd8389ae0432af62dc132a24118292866bd89015593517fc97bfaf2f8ee708c303a06d134f5ecd8389ae0432af62dc132a24118292866be88015590517fc97bfaf2f8ee708c303a06d134f5ecd8389ae0432af62dc132a24118292866bf87015591517fc97bfaf2f8ee708c303a06d134f5ecd8389ae0432af62dc132a24118292866c09095019490945587519283529382018d90528187018c905281018a9052908101889052908101869052908101849052915190917f825cf2439eaf73dfac2c09fd8f2d837fad3d41ae9997922036b523f11e6c1226919081900360e00190a150505050505050565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156110fa5780601f106110cf576101008083540402835291602001916110fa565b600a54600b54600c54600d54600160a060020a039093169284565b6000806123a8613595565b3360009081526026602052604090208054919350915082116123c957600080fd5b6117ff81613614565b600e5481565b60245481565b60006123eb33848461338a565b50600192915050565b600080600080612402613ae5565b50505050600160a060020a039190911660009081526017602090815260409182902082516080810184528154808252600183015493820184905260028301549482018590526003909201546060909101819052909491935090565b6025602052600090815260409020805460019091015482565b60235481565b336000818152600660205260408120549161249690610de4565b3360009081526006602090815260408083208390556007825280832083905560089091528120556003549091506124d3908363ffffffff61318916565b600355336000908152600560205260409020546124f6908263ffffffff61317c16565b33600081815260056020908152604091829020939093558051858152928301849052805191927fef7fb21fed1701a6c82b78d78bad1ddab67e41025c2d5078a1be2a3a238b4e62929081900390910190a25050565b602754600160a060020a0316331461256257600080fd5b601a54841080159061257957508363ffffffff1684145b151561258457600080fd5b601d54811080159061259b57508063ffffffff1681145b15156125a657600080fd5b60188690556019859055601a849055601b839055601c829055601d8190556040805187815260208101879052808201869052606081018590526080810184905260a0810183905290517fdd7612d23bf1ba260c41948384c8a672815d6e6f03705f4ccb8db39d01bb49d09181900360c00190a1505050505050565b336000908152601760205260409020600a8101541561263f57600080fd5b604080516080810182526001808252602080830182905282840182905260609092018190528084558381018190556002840181905560038401819055600a808501919091556004840181905560058401819055606e60068501556007840181905560088401819055600984015533600081815260158352839020429055825190815291517f0764c80c4165f118547b301a0b4b91eac21bd2f2d9b61d0ac723ff0aab27bb799281900390910190a150565b6026602052600090815260409020805460019091015482565b602754600160a060020a0316331461272057600080fd5b600160a060020a038116151561273557600080fd5b60278054600160a060020a038316600160a060020a0319909116811790915560408051918252517f22a3400c609e52ea781540daed872a0ff7b79a428f634be082c24c2faf0684639181900360200190a150565b602180548290811061279757fe5b600091825260209091206005909102018054600182015460028301546003840154600490940154600160a060020a0390931694509092909185565b60135481565b602754600090600160a060020a031633146127f257600080fd5b85600160a060020a0316858590858560405180838380828437820191505092505050600060405180830381858888f19a9950505050505050505050565b601454600090600160a060020a0316331461284957600080fd5b8161285385612cdc565b101561285e57600080fd5b600160a060020a038085166000908152601660205260408082208054869003905591851681522054612896908363ffffffff61317c16565b600160a060020a0384166000908152601660205260409020555060019392505050565b602854600160a060020a031681565b600f54602854600160a060020a03166000908152600560205260409020546128f59163ffffffff61317c16565b602854600160a060020a0316600090815260056020526040812091909155600f55565b6801000000000000000081565b602080548290811061293357fe5b60009182526020909120600690910201805460018201546002830154600384015460048501546005909501549395509193909286565b3360009081526022602052604081205481908190421161298857600080fd5b33600090815260176020526040808220600160a060020a03871683529120600981015460068201549295509093506129c6919063ffffffff61315316565b600884015460058501546129df9163ffffffff61315316565b1115612ab0576129ee84612cdc565b9050600082600a015411612a025780612a13565b81600a015481811515612a1157fe5b045b600160a060020a03851660009081526016602052604080822080548490039055338252902054909150612a4c908263ffffffff61317c16565b3360008181526016602090815260408083209490945560235460228252918490204290920190915582518481529251600160a060020a038816937f07fc6d85ef6db5c911f925dd0be5e0b6139a4d732479327729330fcf4ab15e2d92908290030190a35b50505050565b6000806000806000612ac6613b0e565b612ace613b0e565b5050600160a060020a03861660009081526026602090815260408083208151808301835281548082526001928301548286018190528187526025865284872085518087019096528054808752940154958501869052909a50919850929650945090918511612b3d576000612b59565b84612b4e878663ffffffff61315316565b811515612b5757fe5b045b9250505091939590929450565b6000806000612b74336132fb565b8054601a5491945092508411801590612b8c57508184115b1515612b9757600080fd5b6040805160608101825260185481526019546020820152601a5491810191909152612bc59083908690613324565b612bf66002830a612bd58661337e565b036116376008610e376002886000016001015461315390919063ffffffff16565b8484556004840154909150612c11908263ffffffff61317c16565b60048401556005830154612c2b908263ffffffff61317c16565b600584015560408051602081018690528181526008818301527f737472656e677468000000000000000000000000000000000000000000000000606082015290513391600080516020613b40833981519152919081900360800190a250505050565b60125481565b602754600160a060020a031681565b601454600160a060020a031681565b600160a060020a03918216600090815260096020908152604080832093909416825291909152205490565b6000806000612cea8461377d565b601354909250612d00908363ffffffff61317c16565b601355600160a060020a038416600090815260166020526040902054612d2c908363ffffffff61317c16565b600160a060020a0394909416600090815260166020908152604080832087905560159091529020429055509192915050565b60045481565b600080600080600080602187815481101515612d7c57fe5b6000918252602090912060059091020180546004820154919750600160a060020a03169550600a90612db590600c63ffffffff61315316565b811515612dbe57fe5b049350612dca846136fd565b612dd385612cdc565b50612ddd856132fb565b9250612dfa8660010154846007015461318990919063ffffffff16565b600784015560028601546008840154612e189163ffffffff61318916565b600884015560038601546009840154612e369163ffffffff61318916565b6009840155612e4433612cdc565b50612e4e336132fb565b9150612e6b8660010154836007015461317c90919063ffffffff16565b600783015560028601546008830154612e899163ffffffff61317c16565b600883015560038601546009830154612ea79163ffffffff61317c16565b60098301556004860154600290612ec590869063ffffffff61318916565b811515612ece57fe5b049050612ee681600f5461317c90919063ffffffff16565b600f55600160a060020a038516600090815260056020526040902054612f149082860363ffffffff61317c16565b600160a060020a0386166000908152600560205260409020556021805485919089908110612f3e57fe5b90600052602060002090600502016004018190555033602188815481101515612f6357fe5b6000918252602091829020600591909102018054600160a060020a031916600160a060020a039384161790556040805187815290518a933393908a16927fc6d7a5e59f38ae48e0f1577ce4627ba9b270bfd4c2c0c7be609c429421bc3d68929081900390910190a450505050505050565b60115481565b60156020526000908152604090205481565b60226020526000908152604090205481565b602754600090600160a060020a0316331461301857600080fd5b602054851061302657600080fd5b602080548690811061303457fe5b906000526020600020906006020190508060050154821015801561305d57508163ffffffff1682145b151561306857600080fd5b60038101849055600481018390556005810182905560408051868152602081018690528082018590526060810184905290517f2c2e9072543dfe5f0b03fabc22ced8ddd4e6f976a64f2f4726c4ea72cf8d31c09181900360800190a15050505050565b602754600160a060020a031633146130e257600080fd5b600160a060020a03811615156130f757600080fd5b6130ff6128c8565b60288054600160a060020a038316600160a060020a0319909116811790915560408051918252517f8aaf3a0823afdd08e2480f3fac4af353fad0c1e1aeffae73284c2295e441fc939181900360200190a150565b600082151561316457506000611163565b5081810281838281151561317457fe5b041461116357fe5b8181018281101561116357fe5b60008282111561319557fe5b50900390565b6000806131a78461377d565b9150818311156132085750600160a060020a038316600090815260166020526040902054818303908111156131db57600080fd5b600160a060020a038416600090815260166020526040902080548290039055601380548290039055613242565b5060135482820390613220908263ffffffff61317c16565b601355600160a060020a03841660009081526016602052604090208054820190555b505050600160a060020a03166000908152601560205260409020429055565b60008080836064808202041461327657600080fd5b61327f846136fd565b601254601054606491860282900494508502600b54919004925060649085020490506132bc81838587030303600f5461317c90919063ffffffff16565b600f556132c93384613802565b6011546132dc908363ffffffff61317c16565b601155600d546132f2908263ffffffff61317c16565b600d5550505050565b600160a060020a0381166000908152601760205260408120600a810154909110610e5c57600080fd5b600080613342613334868661392d565b84519063ffffffff61315316565b915061334e338361319b565b61336c61335b868661394d565b60208501519063ffffffff61315316565b905061337781613261565b5050505050565b60006111638283613153565b60008080600160a060020a03851615156133a357600080fd5b600160a060020a0386166000908152600660205260409020548411156133c857600080fd5b6004546133db908563ffffffff61315316565b600160a060020a038716600090815260076020526040902054909350613407908463ffffffff61317c16565b600160a060020a038716600090815260086020526040902054909250821061344757600160a060020a038616600090815260086020526040902054613449565b815b905061345b828263ffffffff61318916565b600160a060020a038716600090815260076020908152604080832093909355600890522054613490908263ffffffff61318916565b600160a060020a0380881660009081526008602052604080822093909355908716815220546134c5908463ffffffff61317c16565b600160a060020a03808716600090815260086020908152604080832094909455918916815260069091522054613501908563ffffffff61318916565b600160a060020a038088166000908152600660205260408082209390935590871681522054613536908563ffffffff61317c16565b600160a060020a0380871660008181526006602090815260409182902094909455805188815290519193928a16927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050505050565b6024546201518042919091030490565b60008181526025602052604081208054909190151561360e575060118054600a90048083558154819003909155604080518481526020810183905281517f3d823e1b0137c31466d0d26831c5b359c4eab1d1237ead4a8ff564264d9a2c53929181900390910190a15b50919050565b61361c613b0e565b600080836001015411156136f857825460009081526025602090815260409182902082518084019093528054808452600191820154928401839052908601549294509091613670919063ffffffff61315316565b81151561367957fe5b6000600186018190553381526005602052604090205491900491506136a4908263ffffffff61317c16565b336000818152600560209081526040918290209390935585548151908152928301849052805191927f1999f960f6c1318254fc32602ac8ba7ebe18123b1bfe4d21cb9b5ac24761aae4929081900390910190a25b505050565b6000348211156137435750336000908152600560205260409020543482039081111561372857600080fd5b336000908152600560205260409020805482900390556117ff565b50336000908152600560205260409020543482900390613769908263ffffffff61317c16565b336000908152600560205260409020555050565b600160a060020a03811660009081526015602052604081205481811180156137a457504281105b156137f957600160a060020a038316600090815260176020526040902060078101546004909101546064916137e8914285900391611637919063ffffffff61315316565b8115156137f157fe5b04915061360e565b6000915061360e565b60008111156117ff5760035461381e908263ffffffff61317c16565b60035560045461385d90613838908363ffffffff61315316565b600160a060020a0384166000908152600860205260409020549063ffffffff61317c16565b600160a060020a038316600090815260086020908152604080832093909355600690522054613892908263ffffffff61317c16565b600160a060020a0383166000908152600660205260409020556003546138e5906138cb836801000000000000000063ffffffff61315316565b8115156138d457fe5b60045491900463ffffffff61317c16565b600455604080518281529051600160a060020a038416916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b60046002600019808501850282900a90840184029190910a030492915050565b60006006600184600202036001850385020260018460020203600185038502020381151561397757fe5b049392505050565b60c0604051908101604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b8154818355818111156136f8576000838152602090206136f8918101908301613b25565b60408051808201825290600290829080388339509192915050565b6080604051908101604052806004906020820280388339509192915050565b61018060405190810160405280613a29613ae5565b815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613aa857805160ff1916838001178555613ad5565b82800160010185558215613ad5579182015b82811115613ad5578251825591602001919060010190613aba565b50613ae1929150613b25565b5090565b608060405190810160405280600081526020016000815260200160008152602001600081525090565b604080518082019091526000808252602082015290565b61146b91905b80821115613ae15760008155600101613b2b56009a18b08f786ded2f49322290bcefb5a9ad611fae6a3c2cdf63c46a8a4573bf17a165627a7a72305820b6f087fe4031eb79d8bd609c9571aea4625e9f63c3da4813d397f2c390ef85cf0029
Swarm Source
bzzr://b6f087fe4031eb79d8bd609c9571aea4625e9f63c3da4813d397f2c390ef85cf
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.