More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 2,325 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Buy Stock Rocket | 14714241 | 815 days ago | IN | 0.01 ETH | 0.00821598 | ||||
Buy Stock Rocket | 14707811 | 816 days ago | IN | 0.01 ETH | 0.01158258 | ||||
Buy Stock Rocket | 14707536 | 816 days ago | IN | 0.01 ETH | 0.00951317 | ||||
Buy Stock Rocket | 14707527 | 816 days ago | IN | 0.01 ETH | 0.0056936 | ||||
Buy Stock Rocket | 14707527 | 816 days ago | IN | 0.01 ETH | 0.0056936 | ||||
Buy Stock Rocket | 14707520 | 816 days ago | IN | 0.01 ETH | 0.00663438 | ||||
Buy Stock Rocket | 14707509 | 816 days ago | IN | 0.01 ETH | 0.00711855 | ||||
Buy Stock Rocket | 14707496 | 816 days ago | IN | 0.01 ETH | 0.00737224 | ||||
Buy Stock Rocket | 14707490 | 816 days ago | IN | 0.01 ETH | 0.00606832 | ||||
Buy Stock Rocket | 14707481 | 816 days ago | IN | 0.01 ETH | 0.00745101 | ||||
Buy Stock Rocket | 14707478 | 816 days ago | IN | 0.01 ETH | 0.00627928 | ||||
Buy Stock Rocket | 14707476 | 816 days ago | IN | 0.01 ETH | 0.00573226 | ||||
Buy Stock Rocket | 14707474 | 816 days ago | IN | 0.01 ETH | 0.00494919 | ||||
Buy Stock Rocket | 14707470 | 816 days ago | IN | 0.01 ETH | 0.00526832 | ||||
Buy Stock Rocket | 14707464 | 816 days ago | IN | 0.01 ETH | 0.00748136 | ||||
Buy Stock Rocket | 14707462 | 816 days ago | IN | 0.01 ETH | 0.00705011 | ||||
Buy Stock Rocket | 14707452 | 816 days ago | IN | 0.01 ETH | 0.00670241 | ||||
Buy Stock Rocket | 14707449 | 816 days ago | IN | 0.01 ETH | 0.00602468 | ||||
Buy Stock Rocket | 14707449 | 816 days ago | IN | 0.01 ETH | 0.00602468 | ||||
Buy Stock Rocket | 14707449 | 816 days ago | IN | 0.01 ETH | 0.00550298 | ||||
Buy Stock Rocket | 14707448 | 816 days ago | IN | 0.01 ETH | 0.00642717 | ||||
Buy Stock Rocket | 14707443 | 816 days ago | IN | 0.01 ETH | 0.00712775 | ||||
Buy Stock Rocket | 14707442 | 816 days ago | IN | 0.01 ETH | 0.00679387 | ||||
Buy Stock Rocket | 14707436 | 816 days ago | IN | 0.01 ETH | 0.00723763 | ||||
Buy Stock Rocket | 14707431 | 816 days ago | IN | 0.01 ETH | 0.00750623 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
14714241 | 815 days ago | 0.01 ETH | ||||
14707811 | 816 days ago | 0.01 ETH | ||||
14707536 | 816 days ago | 0.01 ETH | ||||
14707527 | 816 days ago | 0.01 ETH | ||||
14707527 | 816 days ago | 0.01 ETH | ||||
14707520 | 816 days ago | 0.01 ETH | ||||
14707509 | 816 days ago | 0.01 ETH | ||||
14707496 | 816 days ago | 0.01 ETH | ||||
14707490 | 816 days ago | 0.01 ETH | ||||
14707481 | 816 days ago | 0.01 ETH | ||||
14707478 | 816 days ago | 0.01 ETH | ||||
14707476 | 816 days ago | 0.01 ETH | ||||
14707474 | 816 days ago | 0.01 ETH | ||||
14707470 | 816 days ago | 0.01 ETH | ||||
14707464 | 816 days ago | 0.01 ETH | ||||
14707462 | 816 days ago | 0.01 ETH | ||||
14707452 | 816 days ago | 0.01 ETH | ||||
14707449 | 816 days ago | 0.01 ETH | ||||
14707449 | 816 days ago | 0.01 ETH | ||||
14707449 | 816 days ago | 0.01 ETH | ||||
14707448 | 816 days ago | 0.01 ETH | ||||
14707443 | 816 days ago | 0.01 ETH | ||||
14707442 | 816 days ago | 0.01 ETH | ||||
14707436 | 816 days ago | 0.01 ETH | ||||
14707431 | 816 days ago | 0.01 ETH |
Loading...
Loading
Contract Name:
Game
Compiler Version
v0.4.19+commit.c4cbbb05
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2018-01-18 */ pragma solidity ^0.4.13; contract AbstractDatabase { function() public payable; function ChangeOwner(address new_owner) public; function ChangeOwner2(address new_owner) public; function Store(address user, uint256 category, uint256 slot, bytes32 data) public; function Load(address user, uint256 category, uint256 index) public view returns (bytes32); function TransferFunds(address target, uint256 transfer_amount) public; } contract AbstractGameHidden { function CalculateFinalDistance(bytes32 raw0, bytes32 raw1, bytes32 raw2, bytes32 raw3) pure public returns (int64, int64, uint64); } library CompetitionScoreTypes { using Serializer for Serializer.DataComponent; struct CompetitionScore { address m_Owner; // 0 uint64 m_Distance; // 20 uint32 m_RocketId; // 28 } function SerializeCompetitionScore(CompetitionScore score) internal pure returns (bytes32) { Serializer.DataComponent memory data; data.WriteAddress(0, score.m_Owner); data.WriteUint64(20, score.m_Distance); data.WriteUint32(28, score.m_RocketId); return data.m_Raw; } function DeserializeCompetitionScore(bytes32 raw) internal pure returns (CompetitionScore) { CompetitionScore memory score; Serializer.DataComponent memory data; data.m_Raw = raw; score.m_Owner = data.ReadAddress(0); score.m_Distance = data.ReadUint64(20); score.m_RocketId = data.ReadUint32(28); return score; } } contract Game { using GlobalTypes for GlobalTypes.Global; using MarketTypes for MarketTypes.MarketListing; using MissionParametersTypes for MissionParametersTypes.MissionParameters; using GameCommon for GameCommon.LaunchRocketStackFrame; address public m_Owner; AbstractDatabase public m_Database; AbstractGameHidden public m_GameHidden; bool public m_Paused; uint256 constant GlobalCategory = 0; uint256 constant RocketCategory = 1; uint256 constant OwnershipCategory = 2; uint256 constant InventoryCategory = 3; uint256 constant MarketCategory = 4; uint256 constant ProfitFundsCategory = 5; uint256 constant CompetitionFundsCategory = 6; uint256 constant MissionParametersCategory = 7; uint256 constant CompetitionScoresCategory = 8; uint256 constant WithdrawalFundsCategory = 9; uint256 constant ReferralCategory = 10; uint256 constant RocketStockCategory = 11; uint256 constant RocketStockInitializedCategory = 12; address constant NullAddress = 0; uint256 constant MaxCompetitionScores = 10; mapping(uint32 => RocketTypes.StockRocket) m_InitialRockets; modifier OnlyOwner() { require(msg.sender == m_Owner); _; } modifier NotWhilePaused() { require(m_Paused == false); _; } function Game() public { m_Owner = msg.sender; m_Paused = true; } event BuyStockRocketEvent(address indexed buyer, uint32 stock_id, uint32 rocket_id, address referrer); event PlaceRocketForSaleEvent(address indexed seller, uint32 rocket_id, uint80 price); event RemoveRocketForSaleEvent(address indexed seller, uint32 rocket_id); event BuyRocketForSaleEvent(address indexed buyer, address indexed seller, uint32 rocket_id); event LaunchRocketEvent(address indexed launcher, uint32 competition_id, int64 leo_displacement, int64 planet_displacement); event StartCompetitionEvent(uint32 competition_id); event FinishCompetitionEvent(uint32 competition_id); function ChangeOwner(address new_owner) public OnlyOwner() { m_Owner = new_owner; } function ChangeDatabase(address db) public OnlyOwner() { m_Database = AbstractDatabase(db); } function ChangeGameHidden(address hidden) public OnlyOwner() { m_GameHidden = AbstractGameHidden(hidden); } function Unpause() public OnlyOwner() { m_Paused = false; } function Pause() public OnlyOwner() { require(m_Paused == false); m_Paused = true; } function IsPaused() public view returns (bool) { return m_Paused; } // 1 write function WithdrawProfitFunds(uint256 withdraw_amount, address beneficiary) public NotWhilePaused() OnlyOwner() { uint256 profit_funds = uint256(m_Database.Load(NullAddress, ProfitFundsCategory, 0)); require(withdraw_amount > 0); require(withdraw_amount <= profit_funds); require(beneficiary != address(0)); require(beneficiary != address(this)); require(beneficiary != address(m_Database)); profit_funds -= withdraw_amount; m_Database.Store(NullAddress, ProfitFundsCategory, 0, bytes32(profit_funds)); m_Database.TransferFunds(beneficiary, withdraw_amount); } // 1 write function WithdrawWinnings(uint256 withdraw_amount) public NotWhilePaused() { require(withdraw_amount > 0); uint256 withdrawal_funds = uint256(m_Database.Load(msg.sender, WithdrawalFundsCategory, 0)); require(withdraw_amount <= withdrawal_funds); withdrawal_funds -= withdraw_amount; m_Database.Store(msg.sender, WithdrawalFundsCategory, 0, bytes32(withdrawal_funds)); m_Database.TransferFunds(msg.sender, withdraw_amount); } function GetRocket(uint32 rocket_id) view public returns (bool is_valid, uint32 top_speed, uint32 thrust, uint32 weight, uint32 fuel_capacity, uint16 stock_id, uint64 max_distance, bool is_for_sale, address owner) { RocketTypes.Rocket memory rocket = RocketTypes.DeserializeRocket(m_Database.Load(NullAddress, RocketCategory, rocket_id)); is_valid = rocket.m_Version >= 1; is_for_sale = rocket.m_IsForSale == 1; top_speed = rocket.m_TopSpeed; thrust = rocket.m_Thrust; weight = rocket.m_Weight; fuel_capacity = rocket.m_FuelCapacity; stock_id = rocket.m_StockId; max_distance = rocket.m_MaxDistance; owner = GetRocketOwner(rocket_id); } function GetWithdrawalFunds(address target) view public NotWhilePaused() returns (uint256 funds) { funds = uint256(m_Database.Load(target, WithdrawalFundsCategory, 0)); } function GetProfitFunds() view public OnlyOwner() returns (uint256 funds) { uint256 profit_funds = uint256(m_Database.Load(NullAddress, ProfitFundsCategory, 0)); return profit_funds; } function GetCompetitionFunds(uint32 competition_id) view public returns (uint256 funds) { return uint256(m_Database.Load(NullAddress, CompetitionFundsCategory, competition_id)); } function GetRocketOwner(uint32 rocket_id) view internal returns (address owner) { OwnershipTypes.Ownership memory ownership = OwnershipTypes.DeserializeOwnership(m_Database.Load(NullAddress, OwnershipCategory, rocket_id)); owner = ownership.m_Owner; } function GetAuction(uint32 rocket_id) view public returns (bool is_for_sale, address owner, uint80 price) { RocketTypes.Rocket memory rocket = RocketTypes.DeserializeRocket(m_Database.Load(NullAddress, RocketCategory, rocket_id)); is_for_sale = rocket.m_IsForSale == 1; OwnershipTypes.Ownership memory ownership = OwnershipTypes.DeserializeOwnership(m_Database.Load(NullAddress, OwnershipCategory, rocket_id)); owner = ownership.m_Owner; MarketTypes.MarketListing memory listing = MarketTypes.DeserializeMarketListing(m_Database.Load(NullAddress, MarketCategory, rocket_id)); price = listing.m_Price; } function GetInventoryCount(address target) view public returns (uint256) { require(target != address(0)); uint256 inventory_count = uint256(m_Database.Load(target, InventoryCategory, 0)); return inventory_count; } function GetInventory(address target, uint256 start_index) view public returns (uint32[8] rocket_ids) { require(target != address(0)); uint256 inventory_count = GetInventoryCount(target); uint256 end = start_index + 8; if (end > inventory_count) end = inventory_count; for (uint256 i = start_index; i < end; i++) { rocket_ids[i - start_index] = uint32(uint256(m_Database.Load(target, InventoryCategory, i + 1))); } } // 1 write function AddRocket(uint32 stock_id, uint64 cost, uint32 min_top_speed, uint32 max_top_speed, uint32 min_thrust, uint32 max_thrust, uint32 min_weight, uint32 max_weight, uint32 min_fuel_capacity, uint32 max_fuel_capacity, uint64 distance, uint32 max_stock) OnlyOwner() public { m_InitialRockets[stock_id] = RocketTypes.StockRocket({ m_IsValid: true, m_Cost: cost, m_MinTopSpeed: min_top_speed, m_MaxTopSpeed: max_top_speed, m_MinThrust: min_thrust, m_MaxThrust: max_thrust, m_MinWeight: min_weight, m_MaxWeight: max_weight, m_MinFuelCapacity: min_fuel_capacity, m_MaxFuelCapacity: max_fuel_capacity, m_Distance: distance }); min_top_speed = uint32(m_Database.Load(NullAddress, RocketStockInitializedCategory, stock_id)); if (min_top_speed == 0) { m_Database.Store(NullAddress, RocketStockCategory, stock_id, bytes32(max_stock)); m_Database.Store(NullAddress, RocketStockInitializedCategory, stock_id, bytes32(1)); } } function GetRocketStock(uint16 stock_id) public view returns (uint32) { return uint32(m_Database.Load(NullAddress, RocketStockCategory, stock_id)); } // 6 writes function BuyStockRocket(uint16 stock_id, address referrer) payable NotWhilePaused() public { //require(referrer != msg.sender); uint32 stock = GetRocketStock(stock_id); require(stock > 0); GiveRocketInternal(stock_id, msg.sender, true, referrer); stock--; m_Database.Store(NullAddress, RocketStockCategory, stock_id, bytes32(stock)); } function GiveReferralRocket(uint16 stock_id, address target) public NotWhilePaused() OnlyOwner() { uint256 already_received = uint256(m_Database.Load(target, ReferralCategory, 0)); require(already_received == 0); already_received = 1; m_Database.Store(target, ReferralCategory, 0, bytes32(already_received)); GiveRocketInternal(stock_id, target, false, address(0)); } function GiveRocketInternal(uint16 stock_id, address target, bool buying, address referrer) internal { RocketTypes.StockRocket storage stock_rocket = m_InitialRockets[stock_id]; require(stock_rocket.m_IsValid); if (buying) { require(msg.value == stock_rocket.m_Cost); } GlobalTypes.Global memory global = GlobalTypes.DeserializeGlobal(m_Database.Load(NullAddress, GlobalCategory, 0)); uint256 profit_funds = uint256(m_Database.Load(NullAddress, ProfitFundsCategory, 0)); global.m_LastRocketId++; uint32 next_rocket_id = global.m_LastRocketId; uint256 inventory_count = GetInventoryCount(target); inventory_count++; RocketTypes.Rocket memory rocket; rocket.m_Version = 1; rocket.m_StockId = stock_id; rocket.m_IsForSale = 0; bytes32 rand = sha256(block.timestamp, block.coinbase, global.m_LastRocketId); // Fix LerpExtra calls in FinishCompetition if anything is added here rocket.m_TopSpeed = uint32(Lerp(stock_rocket.m_MinTopSpeed, stock_rocket.m_MaxTopSpeed, rand[0])); rocket.m_Thrust = uint32(Lerp(stock_rocket.m_MinThrust, stock_rocket.m_MaxThrust, rand[1])); rocket.m_Weight = uint32(Lerp(stock_rocket.m_MinWeight, stock_rocket.m_MaxWeight, rand[2])); rocket.m_FuelCapacity = uint32(Lerp(stock_rocket.m_MinFuelCapacity, stock_rocket.m_MaxFuelCapacity, rand[3])); rocket.m_MaxDistance = uint64(stock_rocket.m_Distance); // OwnershipTypes.Ownership memory ownership; ownership.m_Owner = target; ownership.m_OwnerInventoryIndex = uint32(inventory_count) - 1; profit_funds += msg.value; m_Database.Store(target, InventoryCategory, inventory_count, bytes32(next_rocket_id)); m_Database.Store(target, InventoryCategory, 0, bytes32(inventory_count)); m_Database.Store(NullAddress, RocketCategory, next_rocket_id, RocketTypes.SerializeRocket(rocket)); m_Database.Store(NullAddress, OwnershipCategory, next_rocket_id, OwnershipTypes.SerializeOwnership(ownership)); m_Database.Store(NullAddress, GlobalCategory, 0, GlobalTypes.SerializeGlobal(global)); if (buying) { m_Database.Store(NullAddress, ProfitFundsCategory, 0, bytes32(profit_funds)); m_Database.transfer(msg.value); } BuyStockRocketEvent(target, stock_id, next_rocket_id, referrer); } // 2 writes function PlaceRocketForSale(uint32 rocket_id, uint80 price) NotWhilePaused() public { RocketTypes.Rocket memory rocket = RocketTypes.DeserializeRocket(m_Database.Load(NullAddress, RocketCategory, rocket_id)); require(rocket.m_Version > 0); OwnershipTypes.Ownership memory ownership = OwnershipTypes.DeserializeOwnership(m_Database.Load(NullAddress, OwnershipCategory, rocket_id)); require(ownership.m_Owner == msg.sender); require(rocket.m_IsForSale == 0); MarketTypes.MarketListing memory listing; listing.m_Price = price; rocket.m_IsForSale = 1; m_Database.Store(NullAddress, RocketCategory, rocket_id, RocketTypes.SerializeRocket(rocket)); m_Database.Store(NullAddress, MarketCategory, rocket_id, MarketTypes.SerializeMarketListing(listing)); PlaceRocketForSaleEvent(msg.sender, rocket_id, price); } // 1 write function RemoveRocketForSale(uint32 rocket_id) NotWhilePaused() public { RocketTypes.Rocket memory rocket = RocketTypes.DeserializeRocket(m_Database.Load(NullAddress, RocketCategory, rocket_id)); require(rocket.m_Version > 0); require(rocket.m_IsForSale == 1); OwnershipTypes.Ownership memory ownership = OwnershipTypes.DeserializeOwnership(m_Database.Load(NullAddress, OwnershipCategory, rocket_id)); require(ownership.m_Owner == msg.sender); rocket.m_IsForSale = 0; m_Database.Store(NullAddress, RocketCategory, rocket_id, RocketTypes.SerializeRocket(rocket)); RemoveRocketForSaleEvent(msg.sender, rocket_id); } // 9-11 writes function BuyRocketForSale(uint32 rocket_id) payable NotWhilePaused() public { RocketTypes.Rocket memory rocket = RocketTypes.DeserializeRocket(m_Database.Load(NullAddress, RocketCategory, rocket_id)); require(rocket.m_Version > 0); require(rocket.m_IsForSale == 1); OwnershipTypes.Ownership memory ownership = OwnershipTypes.DeserializeOwnership(m_Database.Load(NullAddress, OwnershipCategory, rocket_id)); require(ownership.m_Owner != msg.sender); MarketTypes.MarketListing memory listing = MarketTypes.DeserializeMarketListing(m_Database.Load(NullAddress, MarketCategory, rocket_id)); require(msg.value == listing.m_Price); uint256 seller_inventory_count = uint256(m_Database.Load(ownership.m_Owner, InventoryCategory, 0)); uint256 buyer_inventory_count = uint256(m_Database.Load(msg.sender, InventoryCategory, 0)); uint256 profit_funds_or_last_rocket_id; uint256 wei_for_profit_funds; uint256 buyer_price_or_wei_for_seller = uint256(listing.m_Price); address beneficiary = ownership.m_Owner; ownership.m_Owner = msg.sender; rocket.m_IsForSale = 0; listing.m_Price = 0; buyer_inventory_count++; profit_funds_or_last_rocket_id = uint256(m_Database.Load(beneficiary, InventoryCategory, seller_inventory_count)); m_Database.Store(beneficiary, InventoryCategory, seller_inventory_count, bytes32(0)); if (ownership.m_OwnerInventoryIndex + 1 != seller_inventory_count) { m_Database.Store(beneficiary, InventoryCategory, ownership.m_OwnerInventoryIndex + 1, bytes32(profit_funds_or_last_rocket_id)); OwnershipTypes.Ownership memory last_rocket_ownership = OwnershipTypes.DeserializeOwnership(m_Database.Load(NullAddress, OwnershipCategory, profit_funds_or_last_rocket_id)); last_rocket_ownership.m_OwnerInventoryIndex = uint32(ownership.m_OwnerInventoryIndex); m_Database.Store(NullAddress, OwnershipCategory, profit_funds_or_last_rocket_id, OwnershipTypes.SerializeOwnership(last_rocket_ownership)); } ownership.m_OwnerInventoryIndex = uint32(buyer_inventory_count); m_Database.Store(msg.sender, InventoryCategory, buyer_inventory_count, bytes32(rocket_id)); wei_for_profit_funds = buyer_price_or_wei_for_seller / 20; buyer_price_or_wei_for_seller = buyer_price_or_wei_for_seller - wei_for_profit_funds; profit_funds_or_last_rocket_id = uint256(m_Database.Load(NullAddress, ProfitFundsCategory, 0)); profit_funds_or_last_rocket_id += wei_for_profit_funds; seller_inventory_count--; m_Database.Store(msg.sender, InventoryCategory, 0, bytes32(buyer_inventory_count)); m_Database.Store(beneficiary, InventoryCategory, 0, bytes32(seller_inventory_count)); m_Database.Store(NullAddress, OwnershipCategory, rocket_id, OwnershipTypes.SerializeOwnership(ownership)); m_Database.Store(NullAddress, RocketCategory, rocket_id, RocketTypes.SerializeRocket(rocket)); m_Database.Store(NullAddress, MarketCategory, rocket_id, MarketTypes.SerializeMarketListing(listing)); m_Database.Store(NullAddress, ProfitFundsCategory, 0, bytes32(profit_funds_or_last_rocket_id)); buyer_price_or_wei_for_seller += uint256(m_Database.Load(beneficiary, WithdrawalFundsCategory, 0)); // Reuse variable m_Database.Store(beneficiary, WithdrawalFundsCategory, 0, bytes32(buyer_price_or_wei_for_seller)); m_Database.transfer(msg.value); BuyRocketForSaleEvent(msg.sender, beneficiary, rocket_id); } // 3 writes + 1-12 writes = 4-15 writes function LaunchRocket(uint32 competition_id, uint32 rocket_id, uint32 launch_thrust, uint32 fuel_to_use, uint32 fuel_allocation_for_launch, uint32 stabilizer_setting) payable NotWhilePaused() public { GameCommon.LaunchRocketStackFrame memory stack; stack.m_Rocket = RocketTypes.DeserializeRocket(m_Database.Load(NullAddress, RocketCategory, rocket_id)); stack.m_Mission = MissionParametersTypes.DeserializeMissionParameters(m_Database.Load(NullAddress, MissionParametersCategory, competition_id)); stack.m_Ownership = OwnershipTypes.DeserializeOwnership(m_Database.Load(NullAddress, OwnershipCategory, rocket_id)); require(stack.m_Mission.m_IsStarted == 1); require(stack.m_Rocket.m_Version > 0); require(stack.m_Rocket.m_IsForSale == 0); require(msg.value == uint256(stack.m_Mission.m_LaunchCost)); require(stack.m_Ownership.m_Owner == msg.sender); require(launch_thrust <= stack.m_Rocket.m_Thrust); stack.m_MissionWindSpeed = stack.m_Mission.m_WindSpeed; stack.m_MissionLaunchLocation = stack.m_Mission.m_LaunchLocation; stack.m_MissionWeatherType = stack.m_Mission.m_WeatherType; stack.m_MissionWeatherCoverage = stack.m_Mission.m_WeatherCoverage; stack.m_MissionTargetDistance = stack.m_Mission.m_TargetDistance; stack.m_DebugExtraDistance = stack.m_Mission.m_DebugExtraDistance; stack.m_RocketTopSpeed = stack.m_Rocket.m_TopSpeed; stack.m_RocketThrust = stack.m_Rocket.m_Thrust; stack.m_RocketMass = stack.m_Rocket.m_Weight; stack.m_RocketFuelCapacity = stack.m_Rocket.m_FuelCapacity; stack.m_RocketMaxDistance = int64(stack.m_Rocket.m_MaxDistance); stack.m_CompetitionId = competition_id; stack.m_RocketId = rocket_id; stack.m_LaunchThrust = launch_thrust * 100 / stack.m_Rocket.m_Thrust; stack.m_FuelToUse = fuel_to_use; stack.m_FuelAllocationForLaunch = fuel_allocation_for_launch; stack.m_StabilizerSetting = stabilizer_setting; stack.m_Launcher = msg.sender; LaunchRocketInternal(stack); } // 3 writes function LaunchRocketInternal(GameCommon.LaunchRocketStackFrame memory stack) internal { stack.SerializeLaunchRocketStackFrame(); (stack.m_DisplacementFromLowEarthOrbit, stack.m_DisplacementFromPlanet, stack.m_FinalDistance) = m_GameHidden.CalculateFinalDistance( stack.m_Raw0, stack.m_Raw1, stack.m_Raw2, stack.m_Raw3 ); AddScore(stack); stack.m_ProfitFunds = msg.value / 10; stack.m_CompetitionFunds = msg.value - stack.m_ProfitFunds; stack.m_ProfitFunds += uint256(m_Database.Load(NullAddress, ProfitFundsCategory, 0)); stack.m_CompetitionFunds += uint256(m_Database.Load(NullAddress, CompetitionFundsCategory, stack.m_CompetitionId)); m_Database.Store(NullAddress, ProfitFundsCategory, 0, bytes32(stack.m_ProfitFunds)); m_Database.Store(NullAddress, CompetitionFundsCategory, stack.m_CompetitionId, bytes32(stack.m_CompetitionFunds)); m_Database.Store(NullAddress, MissionParametersCategory, stack.m_CompetitionId, stack.m_Mission.SerializeMissionParameters()); m_Database.transfer(msg.value); LaunchRocketEvent(msg.sender, stack.m_CompetitionId, stack.m_DisplacementFromLowEarthOrbit, stack.m_DisplacementFromPlanet); } // 0-1 writes function AddScore(GameCommon.LaunchRocketStackFrame memory stack) internal { CompetitionScoreTypes.CompetitionScore memory new_score; new_score.m_Owner = stack.m_Launcher; new_score.m_Distance = stack.m_FinalDistance; new_score.m_RocketId = stack.m_RocketId; CompetitionScoreTypes.CompetitionScore memory score; for (uint32 i = 0; i < stack.m_Mission.m_ValidCompetitionScores; i++) { // Check if the new score is better than the score that this user already has (if they are in the top x) score = CompetitionScoreTypes.DeserializeCompetitionScore(m_Database.Load(stack.m_CompetitionId, CompetitionScoresCategory, i)); if (score.m_Owner == stack.m_Launcher) { if (stack.m_FinalDistance < score.m_Distance) { m_Database.Store(stack.m_CompetitionId, CompetitionScoresCategory, i, CompetitionScoreTypes.SerializeCompetitionScore(new_score)); } return; } } if (stack.m_Mission.m_ValidCompetitionScores < MaxCompetitionScores) { // Not enough scores, so this one is automatically one of the best m_Database.Store(stack.m_CompetitionId, CompetitionScoresCategory, stack.m_Mission.m_ValidCompetitionScores, CompetitionScoreTypes.SerializeCompetitionScore(new_score)); stack.m_Mission.m_ValidCompetitionScores++; return; } uint64 highest_distance = 0; uint32 highest_index = 0xFFFFFFFF; for (i = 0; i < stack.m_Mission.m_ValidCompetitionScores; i++) { score = CompetitionScoreTypes.DeserializeCompetitionScore(m_Database.Load(stack.m_CompetitionId, CompetitionScoresCategory, i)); if (score.m_Distance > highest_distance) { highest_distance = score.m_Distance; highest_index = i; } } if (highest_index != 0xFFFFFFFF) { score = CompetitionScoreTypes.DeserializeCompetitionScore(m_Database.Load(stack.m_CompetitionId, CompetitionScoresCategory, highest_index)); // Check if the new score is better than the highest score if (stack.m_FinalDistance < score.m_Distance) { m_Database.Store(stack.m_CompetitionId, CompetitionScoresCategory, highest_index, CompetitionScoreTypes.SerializeCompetitionScore(new_score)); return; } } } function GetCompetitionInfo(uint32 competition_id) view NotWhilePaused() public returns (bool in_progress, uint8 wind_speed, uint8 launch_location, uint8 weather_type, uint8 weather_coverage, uint80 launch_cost, uint32 target_distance) { MissionParametersTypes.MissionParameters memory parameters = MissionParametersTypes.DeserializeMissionParameters(m_Database.Load(NullAddress, MissionParametersCategory, competition_id)); in_progress = parameters.m_IsStarted == 1; wind_speed = parameters.m_WindSpeed; launch_location = parameters.m_LaunchLocation; weather_type = parameters.m_WeatherType; weather_coverage = parameters.m_WeatherCoverage; launch_cost = parameters.m_LaunchCost; target_distance = parameters.m_TargetDistance; } function SetDebugExtra(uint32 competition_id, uint8 extra) public OnlyOwner() { MissionParametersTypes.MissionParameters memory parameters = MissionParametersTypes.DeserializeMissionParameters(m_Database.Load(NullAddress, MissionParametersCategory, competition_id)); parameters.m_DebugExtraDistance = extra; m_Database.Store(NullAddress, MissionParametersCategory, competition_id, parameters.SerializeMissionParameters()); } // 2 writes function StartCompetition(uint8 wind_speed, uint8 launch_location, uint8 weather_type, uint8 weather_coverage, uint80 launch_cost, uint32 target_distance) public NotWhilePaused() OnlyOwner() { GlobalTypes.Global memory global = GlobalTypes.DeserializeGlobal(m_Database.Load(NullAddress, GlobalCategory, 0)); MissionParametersTypes.MissionParameters memory parameters; parameters.m_WindSpeed = wind_speed; parameters.m_LaunchLocation = launch_location; parameters.m_WeatherType = weather_type; parameters.m_WeatherCoverage = weather_coverage; parameters.m_LaunchCost = launch_cost; parameters.m_TargetDistance = target_distance; parameters.m_IsStarted = 1; global.m_CompetitionNumber++; uint32 competition_id = global.m_CompetitionNumber; m_Database.Store(NullAddress, MissionParametersCategory, competition_id, parameters.SerializeMissionParameters()); m_Database.Store(NullAddress, GlobalCategory, 0, GlobalTypes.SerializeGlobal(global)); StartCompetitionEvent(competition_id); } function GetCompetitionResults(uint32 competition_id, bool first_half) public view returns (address[], uint64[]) { CompetitionScoreTypes.CompetitionScore memory score; uint256 offset = (first_half == true ? 0 : 5); address[] memory winners = new address[](5); uint64[] memory distances = new uint64[](5); for (uint32 i = 0; i < 5; i++) { score = CompetitionScoreTypes.DeserializeCompetitionScore(m_Database.Load(competition_id, CompetitionScoresCategory, offset + i)); winners[i] = score.m_Owner; distances[i] = score.m_Distance; } return (winners, distances); } function SortCompetitionScores(uint32 competition_id) public NotWhilePaused() OnlyOwner() { CompetitionScoreTypes.CompetitionScore[] memory scores; MissionParametersTypes.MissionParameters memory parameters; (scores, parameters) = MakeAndSortCompetitionScores(competition_id); for (uint256 i = 0; i < parameters.m_ValidCompetitionScores; i++) { m_Database.Store(competition_id, CompetitionScoresCategory, i, CompetitionScoreTypes.SerializeCompetitionScore(scores[i])); } } function MakeAndSortCompetitionScores(uint32 competition_id) internal view returns (CompetitionScoreTypes.CompetitionScore[] memory scores, MissionParametersTypes.MissionParameters memory parameters) { parameters = MissionParametersTypes.DeserializeMissionParameters(m_Database.Load(NullAddress, MissionParametersCategory, competition_id)); scores = new CompetitionScoreTypes.CompetitionScore[](MaxCompetitionScores + 1); for (uint256 i = 0; i < parameters.m_ValidCompetitionScores; i++) { scores[i] = CompetitionScoreTypes.DeserializeCompetitionScore(m_Database.Load(competition_id, CompetitionScoresCategory, i)); } BubbleSort(scores, parameters.m_ValidCompetitionScores); } // 22 writes (full competition) function FinishCompetition(uint32 competition_id) public NotWhilePaused() OnlyOwner() { CompetitionScoreTypes.CompetitionScore[] memory scores; MissionParametersTypes.MissionParameters memory parameters; (scores, parameters) = MakeAndSortCompetitionScores(competition_id); require(parameters.m_IsStarted == 1); parameters.m_IsStarted = 0; uint256 original_competition_funds = uint256(m_Database.Load(NullAddress, CompetitionFundsCategory, competition_id)); uint256 competition_funds_remaining = original_competition_funds; for (uint256 i = 0; i < parameters.m_ValidCompetitionScores; i++) { RocketTypes.Rocket memory rocket = RocketTypes.DeserializeRocket(m_Database.Load(NullAddress, RocketCategory, scores[i].m_RocketId)); RocketTypes.StockRocket storage stock_rocket = m_InitialRockets[rocket.m_StockId]; // Fix Lerps in BuyStockRocket if anything is added here // This will increase even if they change owners, which is fine rocket.m_TopSpeed = uint32(LerpExtra(stock_rocket.m_MinTopSpeed, stock_rocket.m_MaxTopSpeed, rocket.m_TopSpeed, bytes1(10 - i))); rocket.m_Thrust = uint32(LerpExtra(stock_rocket.m_MinThrust, stock_rocket.m_MaxThrust, rocket.m_Thrust, bytes1(10 - i))); rocket.m_Weight = uint32(LerpLess(stock_rocket.m_MinWeight, stock_rocket.m_MaxWeight, rocket.m_Weight, bytes1(10 - i))); rocket.m_FuelCapacity = uint32(LerpExtra(stock_rocket.m_MinFuelCapacity, stock_rocket.m_MaxFuelCapacity, rocket.m_FuelCapacity, bytes1(10 - i))); // m_Database.Store(NullAddress, RocketCategory, scores[i].m_RocketId, RocketTypes.SerializeRocket(rocket)); uint256 existing_funds = uint256(m_Database.Load(scores[i].m_Owner, WithdrawalFundsCategory, 0)); uint256 funds_won = original_competition_funds / (2 ** (i + 1)); if (funds_won > competition_funds_remaining) funds_won = competition_funds_remaining; existing_funds += funds_won; competition_funds_remaining -= funds_won; m_Database.Store(scores[i].m_Owner, WithdrawalFundsCategory, 0, bytes32(existing_funds)); } if (competition_funds_remaining > 0) { scores[MaxCompetitionScores] = CompetitionScoreTypes.DeserializeCompetitionScore(m_Database.Load(competition_id, CompetitionScoresCategory, 0)); existing_funds = uint256(m_Database.Load(scores[MaxCompetitionScores].m_Owner, WithdrawalFundsCategory, 0)); existing_funds += competition_funds_remaining; m_Database.Store(scores[MaxCompetitionScores].m_Owner, WithdrawalFundsCategory, 0, bytes32(existing_funds)); } m_Database.Store(NullAddress, MissionParametersCategory, competition_id, parameters.SerializeMissionParameters()); FinishCompetitionEvent(competition_id); } function Lerp(uint256 min, uint256 max, bytes1 percent) internal pure returns(uint256) { uint256 real_percent = (uint256(percent) % 100); return uint256(min + (real_percent * (max - min)) / 100); } function LerpExtra(uint256 min, uint256 max, uint256 current, bytes1 total_extra_percent) internal pure returns (uint256) { current += Lerp(min, max, total_extra_percent) - min; if (current < min || current > max) current = max; return current; } function LerpLess(uint256 min, uint256 max, uint256 current, bytes1 total_less_percent) internal pure returns (uint256) { current -= Lerp(min, max, total_less_percent) - min; if (current < min || current > max) current = min; return current; } function BubbleSort(CompetitionScoreTypes.CompetitionScore[] memory scores, uint32 length) internal pure { uint32 n = length; while (true) { bool swapped = false; for (uint32 i = 1; i < n; i++) { if (scores[i - 1].m_Distance > scores[i].m_Distance) { scores[MaxCompetitionScores] = scores[i - 1]; scores[i - 1] = scores[i]; scores[i] = scores[MaxCompetitionScores]; swapped = true; } } n--; if (!swapped) break; } } } library GameCommon { using Serializer for Serializer.DataComponent; struct LaunchRocketStackFrame { int64 m_RocketTopSpeed; // 0 int64 m_RocketThrust; // 8 int64 m_RocketMass; // 16 int64 m_RocketFuelCapacity; // 24 int64 m_RocketMaxDistance; // 0 int64 m_MissionWindSpeed; // 8 int64 m_MissionLaunchLocation; // 16 int64 m_MissionWeatherType; // 24 int64 m_MissionWeatherCoverage; // 0 int64 m_MissionTargetDistance; // 8 int64 m_FuelToUse; // 16 int64 m_FuelAllocationForLaunch; // 24 int64 m_StabilizerSetting; // 0 int64 m_DebugExtraDistance; // 8 int64 m_LaunchThrust; // 16 RocketTypes.Rocket m_Rocket; OwnershipTypes.Ownership m_Ownership; MissionParametersTypes.MissionParameters m_Mission; bytes32 m_Raw0; bytes32 m_Raw1; bytes32 m_Raw2; bytes32 m_Raw3; uint32 m_CompetitionId; uint32 m_RocketId; int64 m_LowEarthOrbitPosition; int64 m_DisplacementFromLowEarthOrbit; int64 m_DisplacementFromPlanet; address m_Launcher; uint256 m_ProfitFunds; uint256 m_CompetitionFunds; uint64 m_FinalDistance; } function SerializeLaunchRocketStackFrame(LaunchRocketStackFrame memory stack) internal pure { SerializeRaw0(stack); SerializeRaw1(stack); SerializeRaw2(stack); SerializeRaw3(stack); } function DeserializeLaunchRocketStackFrame(LaunchRocketStackFrame memory stack) internal pure { DeserializeRaw0(stack); DeserializeRaw1(stack); DeserializeRaw2(stack); DeserializeRaw3(stack); } function SerializeRaw0(LaunchRocketStackFrame memory stack) internal pure { Serializer.DataComponent memory data; data.WriteUint64(0, uint64(stack.m_RocketTopSpeed)); data.WriteUint64(8, uint64(stack.m_RocketThrust)); data.WriteUint64(16, uint64(stack.m_RocketMass)); data.WriteUint64(24, uint64(stack.m_RocketFuelCapacity)); stack.m_Raw0 = data.m_Raw; } function DeserializeRaw0(LaunchRocketStackFrame memory stack) internal pure { Serializer.DataComponent memory data; data.m_Raw = stack.m_Raw0; stack.m_RocketTopSpeed = int64(data.ReadUint64(0)); stack.m_RocketThrust = int64(data.ReadUint64(8)); stack.m_RocketMass = int64(data.ReadUint64(16)); stack.m_RocketFuelCapacity = int64(data.ReadUint64(24)); } function SerializeRaw1(LaunchRocketStackFrame memory stack) internal pure { Serializer.DataComponent memory data; data.WriteUint64(0, uint64(stack.m_RocketMaxDistance)); data.WriteUint64(8, uint64(stack.m_MissionWindSpeed)); data.WriteUint64(16, uint64(stack.m_MissionLaunchLocation)); data.WriteUint64(24, uint64(stack.m_MissionWeatherType)); stack.m_Raw1 = data.m_Raw; } function DeserializeRaw1(LaunchRocketStackFrame memory stack) internal pure { Serializer.DataComponent memory data; data.m_Raw = stack.m_Raw1; stack.m_RocketMaxDistance = int64(data.ReadUint64(0)); stack.m_MissionWindSpeed = int64(data.ReadUint64(8)); stack.m_MissionLaunchLocation = int64(data.ReadUint64(16)); stack.m_MissionWeatherType = int64(data.ReadUint64(24)); } function SerializeRaw2(LaunchRocketStackFrame memory stack) internal pure { Serializer.DataComponent memory data; data.WriteUint64(0, uint64(stack.m_MissionWeatherCoverage)); data.WriteUint64(8, uint64(stack.m_MissionTargetDistance)); data.WriteUint64(16, uint64(stack.m_FuelToUse)); data.WriteUint64(24, uint64(stack.m_FuelAllocationForLaunch)); stack.m_Raw2 = data.m_Raw; } function DeserializeRaw2(LaunchRocketStackFrame memory stack) internal pure { Serializer.DataComponent memory data; data.m_Raw = stack.m_Raw2; stack.m_MissionWeatherCoverage = int64(data.ReadUint64(0)); stack.m_MissionTargetDistance = int64(data.ReadUint64(8)); stack.m_FuelToUse = int64(data.ReadUint64(16)); stack.m_FuelAllocationForLaunch = int64(data.ReadUint64(24)); } function SerializeRaw3(LaunchRocketStackFrame memory stack) internal pure { Serializer.DataComponent memory data; data.WriteUint64(0, uint64(stack.m_StabilizerSetting)); data.WriteUint64(8, uint64(stack.m_DebugExtraDistance)); data.WriteUint64(16, uint64(stack.m_LaunchThrust)); stack.m_Raw3 = data.m_Raw; } function DeserializeRaw3(LaunchRocketStackFrame memory stack) internal pure { Serializer.DataComponent memory data; data.m_Raw = stack.m_Raw3; stack.m_StabilizerSetting = int64(data.ReadUint64(0)); stack.m_DebugExtraDistance = int64(data.ReadUint64(8)); stack.m_LaunchThrust = int64(data.ReadUint64(16)); } } library GlobalTypes { using Serializer for Serializer.DataComponent; struct Global { uint32 m_LastRocketId; // 0 uint32 m_CompetitionNumber; // 4 uint8 m_Unused8; // 8 uint8 m_Unused9; // 9 uint8 m_Unused10; // 10 uint8 m_Unused11; // 11 } function SerializeGlobal(Global global) internal pure returns (bytes32) { Serializer.DataComponent memory data; data.WriteUint32(0, global.m_LastRocketId); data.WriteUint32(4, global.m_CompetitionNumber); data.WriteUint8(8, global.m_Unused8); data.WriteUint8(9, global.m_Unused9); data.WriteUint8(10, global.m_Unused10); data.WriteUint8(11, global.m_Unused11); return data.m_Raw; } function DeserializeGlobal(bytes32 raw) internal pure returns (Global) { Global memory global; Serializer.DataComponent memory data; data.m_Raw = raw; global.m_LastRocketId = data.ReadUint32(0); global.m_CompetitionNumber = data.ReadUint32(4); global.m_Unused8 = data.ReadUint8(8); global.m_Unused9 = data.ReadUint8(9); global.m_Unused10 = data.ReadUint8(10); global.m_Unused11 = data.ReadUint8(11); return global; } } library MarketTypes { using Serializer for Serializer.DataComponent; struct MarketListing { uint80 m_Price; // 0 } function SerializeMarketListing(MarketListing listing) internal pure returns (bytes32) { Serializer.DataComponent memory data; data.WriteUint80(0, listing.m_Price); return data.m_Raw; } function DeserializeMarketListing(bytes32 raw) internal pure returns (MarketListing) { MarketListing memory listing; Serializer.DataComponent memory data; data.m_Raw = raw; listing.m_Price = data.ReadUint80(0); return listing; } } library MissionParametersTypes { using Serializer for Serializer.DataComponent; struct MissionParameters { uint8 m_WindSpeed; // 0 uint8 m_LaunchLocation; // 1 uint8 m_WeatherType; // 2 uint8 m_WeatherCoverage; // 3 uint80 m_LaunchCost; // 4 uint8 m_IsStarted; // 14 uint32 m_TargetDistance; // 15 uint32 m_ValidCompetitionScores; // 19 uint8 m_DebugExtraDistance; // 23 } function SerializeMissionParameters(MissionParameters mission) internal pure returns (bytes32) { Serializer.DataComponent memory data; data.WriteUint8(0, mission.m_WindSpeed); data.WriteUint8(1, mission.m_LaunchLocation); data.WriteUint8(2, mission.m_WeatherType); data.WriteUint8(3, mission.m_WeatherCoverage); data.WriteUint80(4, mission.m_LaunchCost); data.WriteUint8(14, mission.m_IsStarted); data.WriteUint32(15, mission.m_TargetDistance); data.WriteUint32(19, mission.m_ValidCompetitionScores); data.WriteUint8(23, mission.m_DebugExtraDistance); return data.m_Raw; } function DeserializeMissionParameters(bytes32 raw) internal pure returns (MissionParameters) { MissionParameters memory mission; Serializer.DataComponent memory data; data.m_Raw = raw; mission.m_WindSpeed = data.ReadUint8(0); mission.m_LaunchLocation = data.ReadUint8(1); mission.m_WeatherType = data.ReadUint8(2); mission.m_WeatherCoverage = data.ReadUint8(3); mission.m_LaunchCost = data.ReadUint80(4); mission.m_IsStarted = data.ReadUint8(14); mission.m_TargetDistance = data.ReadUint32(15); mission.m_ValidCompetitionScores = data.ReadUint32(19); mission.m_DebugExtraDistance = data.ReadUint8(23); return mission; } } library OwnershipTypes { using Serializer for Serializer.DataComponent; struct Ownership { address m_Owner; // 0 uint32 m_OwnerInventoryIndex; // 20 } function SerializeOwnership(Ownership ownership) internal pure returns (bytes32) { Serializer.DataComponent memory data; data.WriteAddress(0, ownership.m_Owner); data.WriteUint32(20, ownership.m_OwnerInventoryIndex); return data.m_Raw; } function DeserializeOwnership(bytes32 raw) internal pure returns (Ownership) { Ownership memory ownership; Serializer.DataComponent memory data; data.m_Raw = raw; ownership.m_Owner = data.ReadAddress(0); ownership.m_OwnerInventoryIndex = data.ReadUint32(20); return ownership; } } library RocketTypes { using Serializer for Serializer.DataComponent; struct Rocket { uint8 m_Version; // 0 uint8 m_Unused1; // 1 uint8 m_IsForSale; // 2 uint8 m_Unused3; // 3 uint32 m_TopSpeed; // 4 uint32 m_Thrust; // 8 uint32 m_Weight; // 12 uint32 m_FuelCapacity; // 16 uint16 m_StockId; // 20 uint16 m_Unused22; // 22 uint64 m_MaxDistance; // 24 } struct StockRocket { bool m_IsValid; // 0 uint64 m_Cost; // 1 uint32 m_MinTopSpeed; // 5 uint32 m_MaxTopSpeed; // 9 uint32 m_MinThrust; // 13 uint32 m_MaxThrust; // 17 uint32 m_MinWeight; // 21 uint32 m_MaxWeight; // 25 uint32 m_MinFuelCapacity; // 29 uint32 m_MaxFuelCapacity; // 33 uint64 m_Distance; // 37 } function SerializeRocket(Rocket rocket) internal pure returns (bytes32) { Serializer.DataComponent memory data; data.WriteUint8(0, rocket.m_Version); //data.WriteUint8(1, rocket.m_Unused1); data.WriteUint8(2, rocket.m_IsForSale); //data.WriteUint8(3, rocket.m_Unused3); data.WriteUint32(4, rocket.m_TopSpeed); data.WriteUint32(8, rocket.m_Thrust); data.WriteUint32(12, rocket.m_Weight); data.WriteUint32(16, rocket.m_FuelCapacity); data.WriteUint16(20, rocket.m_StockId); //data.WriteUint16(22, rocket.m_Unused22); data.WriteUint64(24, rocket.m_MaxDistance); return data.m_Raw; } function DeserializeRocket(bytes32 raw) internal pure returns (Rocket) { Rocket memory rocket; Serializer.DataComponent memory data; data.m_Raw = raw; rocket.m_Version = data.ReadUint8(0); //rocket.m_Unused1 = data.ReadUint8(1); rocket.m_IsForSale = data.ReadUint8(2); //rocket.m_Unused3 = data.ReadUint8(3); rocket.m_TopSpeed = data.ReadUint32(4); rocket.m_Thrust = data.ReadUint32(8); rocket.m_Weight = data.ReadUint32(12); rocket.m_FuelCapacity = data.ReadUint32(16); rocket.m_StockId = data.ReadUint16(20); //rocket.m_Unused22 = data.ReadUint16(22); rocket.m_MaxDistance = data.ReadUint64(24); return rocket; } } library Serializer { struct DataComponent { bytes32 m_Raw; } function ReadUint8(DataComponent memory self, uint32 offset) internal pure returns (uint8) { return uint8((self.m_Raw >> (offset * 8)) & 0xFF); } function WriteUint8(DataComponent memory self, uint32 offset, uint8 value) internal pure { self.m_Raw |= (bytes32(value) << (offset * 8)); } function ReadUint16(DataComponent memory self, uint32 offset) internal pure returns (uint16) { return uint16((self.m_Raw >> (offset * 8)) & 0xFFFF); } function WriteUint16(DataComponent memory self, uint32 offset, uint16 value) internal pure { self.m_Raw |= (bytes32(value) << (offset * 8)); } function ReadUint32(DataComponent memory self, uint32 offset) internal pure returns (uint32) { return uint32((self.m_Raw >> (offset * 8)) & 0xFFFFFFFF); } function WriteUint32(DataComponent memory self, uint32 offset, uint32 value) internal pure { self.m_Raw |= (bytes32(value) << (offset * 8)); } function ReadUint64(DataComponent memory self, uint32 offset) internal pure returns (uint64) { return uint64((self.m_Raw >> (offset * 8)) & 0xFFFFFFFFFFFFFFFF); } function WriteUint64(DataComponent memory self, uint32 offset, uint64 value) internal pure { self.m_Raw |= (bytes32(value) << (offset * 8)); } function ReadUint80(DataComponent memory self, uint32 offset) internal pure returns (uint80) { return uint80((self.m_Raw >> (offset * 8)) & 0xFFFFFFFFFFFFFFFFFFFF); } function WriteUint80(DataComponent memory self, uint32 offset, uint80 value) internal pure { self.m_Raw |= (bytes32(value) << (offset * 8)); } function ReadAddress(DataComponent memory self, uint32 offset) internal pure returns (address) { return address((self.m_Raw >> (offset * 8)) & ( (0xFFFFFFFF << 0) | (0xFFFFFFFF << 32) | (0xFFFFFFFF << 64) | (0xFFFFFFFF << 96) | (0xFFFFFFFF << 128) )); } function WriteAddress(DataComponent memory self, uint32 offset, address value) internal pure { self.m_Raw |= (bytes32(value) << (offset * 8)); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":false,"inputs":[{"name":"withdraw_amount","type":"uint256"},{"name":"beneficiary","type":"address"}],"name":"WithdrawProfitFunds","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"IsPaused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"competition_id","type":"uint32"},{"name":"rocket_id","type":"uint32"},{"name":"launch_thrust","type":"uint32"},{"name":"fuel_to_use","type":"uint32"},{"name":"fuel_allocation_for_launch","type":"uint32"},{"name":"stabilizer_setting","type":"uint32"}],"name":"LaunchRocket","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"stock_id","type":"uint16"},{"name":"target","type":"address"}],"name":"GiveReferralRocket","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"hidden","type":"address"}],"name":"ChangeGameHidden","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"target","type":"address"}],"name":"GetWithdrawalFunds","outputs":[{"name":"funds","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"Pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"competition_id","type":"uint32"}],"name":"FinishCompetition","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"withdraw_amount","type":"uint256"}],"name":"WithdrawWinnings","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"Unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"competition_id","type":"uint32"},{"name":"extra","type":"uint8"}],"name":"SetDebugExtra","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"wind_speed","type":"uint8"},{"name":"launch_location","type":"uint8"},{"name":"weather_type","type":"uint8"},{"name":"weather_coverage","type":"uint8"},{"name":"launch_cost","type":"uint80"},{"name":"target_distance","type":"uint32"}],"name":"StartCompetition","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"m_Database","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"rocket_id","type":"uint32"},{"name":"price","type":"uint80"}],"name":"PlaceRocketForSale","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"competition_id","type":"uint32"}],"name":"GetCompetitionInfo","outputs":[{"name":"in_progress","type":"bool"},{"name":"wind_speed","type":"uint8"},{"name":"launch_location","type":"uint8"},{"name":"weather_type","type":"uint8"},{"name":"weather_coverage","type":"uint8"},{"name":"launch_cost","type":"uint80"},{"name":"target_distance","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"rocket_id","type":"uint32"}],"name":"BuyRocketForSale","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"m_Paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"stock_id","type":"uint32"},{"name":"cost","type":"uint64"},{"name":"min_top_speed","type":"uint32"},{"name":"max_top_speed","type":"uint32"},{"name":"min_thrust","type":"uint32"},{"name":"max_thrust","type":"uint32"},{"name":"min_weight","type":"uint32"},{"name":"max_weight","type":"uint32"},{"name":"min_fuel_capacity","type":"uint32"},{"name":"max_fuel_capacity","type":"uint32"},{"name":"distance","type":"uint64"},{"name":"max_stock","type":"uint32"}],"name":"AddRocket","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"competition_id","type":"uint32"}],"name":"GetCompetitionFunds","outputs":[{"name":"funds","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"m_GameHidden","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"rocket_id","type":"uint32"}],"name":"GetAuction","outputs":[{"name":"is_for_sale","type":"bool"},{"name":"owner","type":"address"},{"name":"price","type":"uint80"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"target","type":"address"},{"name":"start_index","type":"uint256"}],"name":"GetInventory","outputs":[{"name":"rocket_ids","type":"uint32[8]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"stock_id","type":"uint16"},{"name":"referrer","type":"address"}],"name":"BuyStockRocket","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"stock_id","type":"uint16"}],"name":"GetRocketStock","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"m_Owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"rocket_id","type":"uint32"}],"name":"GetRocket","outputs":[{"name":"is_valid","type":"bool"},{"name":"top_speed","type":"uint32"},{"name":"thrust","type":"uint32"},{"name":"weight","type":"uint32"},{"name":"fuel_capacity","type":"uint32"},{"name":"stock_id","type":"uint16"},{"name":"max_distance","type":"uint64"},{"name":"is_for_sale","type":"bool"},{"name":"owner","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"target","type":"address"}],"name":"GetInventoryCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"competition_id","type":"uint32"},{"name":"first_half","type":"bool"}],"name":"GetCompetitionResults","outputs":[{"name":"","type":"address[]"},{"name":"","type":"uint64[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"rocket_id","type":"uint32"}],"name":"RemoveRocketForSale","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"db","type":"address"}],"name":"ChangeDatabase","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"GetProfitFunds","outputs":[{"name":"funds","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"new_owner","type":"address"}],"name":"ChangeOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"competition_id","type":"uint32"}],"name":"SortCompetitionScores","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"buyer","type":"address"},{"indexed":false,"name":"stock_id","type":"uint32"},{"indexed":false,"name":"rocket_id","type":"uint32"},{"indexed":false,"name":"referrer","type":"address"}],"name":"BuyStockRocketEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"seller","type":"address"},{"indexed":false,"name":"rocket_id","type":"uint32"},{"indexed":false,"name":"price","type":"uint80"}],"name":"PlaceRocketForSaleEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"seller","type":"address"},{"indexed":false,"name":"rocket_id","type":"uint32"}],"name":"RemoveRocketForSaleEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"buyer","type":"address"},{"indexed":true,"name":"seller","type":"address"},{"indexed":false,"name":"rocket_id","type":"uint32"}],"name":"BuyRocketForSaleEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"launcher","type":"address"},{"indexed":false,"name":"competition_id","type":"uint32"},{"indexed":false,"name":"leo_displacement","type":"int64"},{"indexed":false,"name":"planet_displacement","type":"int64"}],"name":"LaunchRocketEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"competition_id","type":"uint32"}],"name":"StartCompetitionEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"competition_id","type":"uint32"}],"name":"FinishCompetitionEvent","type":"event"}]
Contract Creation Code
6060604052341561000f57600080fd5b60008054600160a060020a033316600160a060020a03199091161790556002805460a060020a60ff02191674010000000000000000000000000000000000000000179055615e5e80620000636000396000f3006060604052600436106101875763ffffffff60e060020a6000350416630dccfde4811461018c5780631309a563146101b05780631f15e163146101d7578063258f6b8f146102065780632b8a789b1461022c5780633285f4061461024b5780636985a0221461027c578063734f28381461028f57806374f760e4146102ab5780637805862f146102c15780638c5f6d5a146102d45780638cd41fae146102f657806391bb4816146103395780639875958c1461036857806399c75517146103935780639d44210214610407578063a756588814610418578063ae68c80a1461042b578063bd7095db14610497578063bdaeb0a0146104b3578063c022abbe146104c6578063c55f3b4c1461051c578063c6cc68b914610577578063c959ec5714610592578063ca75d770146105c5578063daf017a9146105d8578063dbcf194a14610665578063e190903514610684578063e20348341461073e578063ebc046491461075a578063ec35576e14610779578063f28532921461078c578063ffef2b00146107ab575b600080fd5b341561019757600080fd5b6101ae600435600160a060020a03602435166107c7565b005b34156101bb57600080fd5b6101c36109dc565b604051901515815260200160405180910390f35b6101ae63ffffffff60043581169060243581169060443581169060643581169060843581169060a435166109ec565b341561021157600080fd5b6101ae61ffff60043516600160a060020a0360243516610e40565b341561023757600080fd5b6101ae600160a060020a0360043516610f94565b341561025657600080fd5b61026a600160a060020a0360043516610fde565b60405190815260200160405180910390f35b341561028757600080fd5b6101ae611081565b341561029a57600080fd5b6101ae63ffffffff600435166110d9565b34156102b657600080fd5b6101ae600435611899565b34156102cc57600080fd5b6101ae611a41565b34156102df57600080fd5b6101ae63ffffffff6004351660ff60243516611a7c565b341561030157600080fd5b6101ae60ff6004358116906024358116906044358116906064351669ffffffffffffffffffff6084351663ffffffff60a43516611b94565b341561034457600080fd5b61034c611e19565b604051600160a060020a03909116815260200160405180910390f35b341561037357600080fd5b6101ae63ffffffff6004351669ffffffffffffffffffff60243516611e28565b341561039e57600080fd5b6103af63ffffffff60043516612110565b604051961515875260ff958616602088015293851660408088019190915292851660608701529316608085015269ffffffffffffffffffff90921660a084015263ffffffff1660c083015260e0909101905180910390f35b6101ae63ffffffff600435166121f1565b341561042357600080fd5b6101c3612de5565b341561043657600080fd5b6101ae63ffffffff60043581169067ffffffffffffffff60243581169160443581169160643582169160843581169160a43582169160c43581169160e435821691610104358116916101243582169161014435909116906101643516612df5565b34156104a257600080fd5b61026a63ffffffff6004351661327b565b34156104be57600080fd5b61034c6132eb565b34156104d157600080fd5b6104e263ffffffff600435166132fa565b6040519215158352600160a060020a03909116602083015269ffffffffffffffffffff166040808301919091526060909101905180910390f35b341561052757600080fd5b61053e600160a060020a0360043516602435613498565b604051808261010080838360005b8381101561056457808201518382015260200161054c565b5050505090500191505060405180910390f35b6101ae61ffff60043516600160a060020a036024351661359a565b341561059d57600080fd5b6105ac61ffff60043516613657565b60405163ffffffff909116815260200160405180910390f35b34156105d057600080fd5b61034c6136c6565b34156105e357600080fd5b6105f463ffffffff600435166136d5565b604051981515895263ffffffff97881660208a01529587166040808a0191909152948716606089015292909516608087015261ffff1660a086015267ffffffffffffffff90931660c085015291151560e0840152600160a060020a0316610100830152610120909101905180910390f35b341561067057600080fd5b61026a600160a060020a03600435166137c0565b341561068f57600080fd5b6106a563ffffffff600435166024351515613862565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156106e95780820151838201526020016106d1565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015610728578082015183820152602001610710565b5050505090500194505050505060405180910390f35b341561074957600080fd5b6101ae63ffffffff600435166139dd565b341561076557600080fd5b6101ae600160a060020a0360043516613c11565b341561078457600080fd5b61026a613c5b565b341561079757600080fd5b6101ae600160a060020a0360043516613ce2565b34156107b657600080fd5b6101ae63ffffffff60043516613d2c565b60025460009060a060020a900460ff16156107e157600080fd5b60005433600160a060020a039081169116146107fc57600080fd5b600154600160a060020a0316630bd6c7696000600581806040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b151561086557600080fd5b6102c65a03f1151561087657600080fd5b50505060405180519150506000831161088e57600080fd5b8083111561089b57600080fd5b600160a060020a03821615156108b057600080fd5b30600160a060020a031682600160a060020a0316141515156108d157600080fd5b600154600160a060020a03838116911614156108ec57600080fd5b6001549083900390600160a060020a0316630647b10660006005818560405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b151561095857600080fd5b6102c65a03f1151561096957600080fd5b5050600154600160a060020a0316905063c95f8b91838560405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b15156109c357600080fd5b6102c65a03f115156109d457600080fd5b505050505050565b60025460a060020a900460ff1690565b6109f4615bdc565b60025460a060020a900460ff1615610a0b57600080fd5b60018054610aa191600160a060020a0390911690630bd6c769906000908a826040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b1515610a8157600080fd5b6102c65a03f11515610a9257600080fd5b50505060405180519050613e35565b6101e0820152600154610b3990600160a060020a0316630bd6c769600060078b826040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b1515610b1957600080fd5b6102c65a03f11515610b2a57600080fd5b50505060405180519050613f32565b610220820152600154610bd190600160a060020a0316630bd6c769600060028a826040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b1515610bb157600080fd5b6102c65a03f11515610bc257600080fd5b50505060405180519050614042565b61020082015261022081015160a0015160ff166001141515610bf257600080fd5b6000816101e001515160ff1611610c0857600080fd5b806101e001516040015160ff1615610c1f57600080fd5b8061022001516080015169ffffffffffffffffffff1634141515610c4257600080fd5b33600160a060020a031681610200015151600160a060020a031614610c6657600080fd5b806101e0015160a0015163ffffffff168563ffffffff1611151515610c8a57600080fd5b8061022001515160ff16600790810b900b60a08201526102208101516020015160ff16600790810b900b60c08201526102208101516040015160ff16600790810b900b60e08201526102208101516060015160ff16600790810b900b61010082015261022081015160c0015163ffffffff16600790810b900b610120820152610220810151610100015160ff16600790810b900b6101a08201526101e08101516080015163ffffffff16600790810b900b81526101e081015160a0015163ffffffff16600790810b900b60208201526101e081015160c0015163ffffffff16600790810b900b60408201526101e081015160e0015163ffffffff16600790810b900b60608201526101e08101516101400151600790810b900b608082015263ffffffff8088166102c083015286166102e08201526101e081015160a0015163ffffffff168560640263ffffffff16811515610de157fe5b0463ffffffff908116600790810b810b6101c0840152858216810b810b610140840152848216810b810b610160840152908316810b900b61018082015233600160a060020a0316610360820152610e378161409c565b50505050505050565b60025460009060a060020a900460ff1615610e5a57600080fd5b60005433600160a060020a03908116911614610e7557600080fd5b600154600160a060020a0316630bd6c76983600a6000806040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b1515610ede57600080fd5b6102c65a03f11515610eef57600080fd5b50505060405180519150508015610f0557600080fd5b5060018054600160a060020a0316630647b10683600a60008560405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b1515610f6e57600080fd5b6102c65a03f11515610f7f57600080fd5b505050610f8f83836000806144ff565b505050565b60005433600160a060020a03908116911614610faf57600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60025460009060a060020a900460ff1615610ff857600080fd5b600154600160a060020a0316630bd6c7698360096000806040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b151561106157600080fd5b6102c65a03f1151561107257600080fd5b50505060405180519392505050565b60005433600160a060020a0390811691161461109c57600080fd5b60025460a060020a900460ff16156110b357600080fd5b6002805474ff0000000000000000000000000000000000000000191660a060020a179055565b6110e1615ce3565b6110e9615cf5565b60008060006110f6615d41565b6002546000908190819060a060020a900460ff161561111457600080fd5b60005433600160a060020a0390811691161461112f57600080fd5b6111388a614c0b565b909950975060a088015160ff16600114151561115357600080fd5b600060a08901819052600154600160a060020a031690630bd6c7699060068d826040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b15156111ca57600080fd5b6102c65a03f115156111db57600080fd5b5050506040518051975087965060009550505b8760e0015163ffffffff168510156115ef576001805461129091600160a060020a0390911690630bd6c769906000908d8a8151811061122957fe5b906020019060200201516040015160006040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b1515610a8157600080fd5b93506003600085610100015161ffff168152602081019190915260400160002080549093506112fa9063ffffffff690100000000000000000082048116916d0100000000000000000000000000900416608087015163ffffffff1688600a0360f860020a02614d89565b63ffffffff9081166080860152835461135991710100000000000000000000000000000000008204811691750100000000000000000000000000000000000000000090041660a087015163ffffffff1688600a0360f860020a02614d89565b63ffffffff90811660a0860152835460018501546113979260c860020a9092048216911660c087015163ffffffff1688600a0360f860020a02614dbb565b63ffffffff90811660c086015260018401546113df9164010000000082048116916801000000000000000090041660e087015163ffffffff1688600a0360f860020a02614d89565b63ffffffff1660e085015260018054600160a060020a031690630647b106906000908c898151811061140d57fe5b906020019060200201516040015161142489614de9565b60405163ffffffff86811660e060020a028252600160a060020a039590951660048201526024810193909352921660448201526064810191909152608401600060405180830381600087803b151561147b57600080fd5b6102c65a03f1151561148c57600080fd5b5050600154600160a060020a03169050630bd6c7698a87815181106114ad57fe5b906020019060200201515160096000806040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b151561150f57600080fd5b6102c65a03f1151561152057600080fd5b50505060405180519250506001850160020a8781151561153c57fe5b0490508581111561154a5750845b600154958190039591810191600160a060020a0316630647b1068a878151811061157057fe5b9060200190602002015151600960008660405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b15156115d057600080fd5b6102c65a03f115156115e157600080fd5b5050600190950194506111ee565b60008611156117c95760015461167f90600160a060020a0316630bd6c7698c60086000806040516020015260405163ffffffff85811660e060020a02825293909316600484015260248301919091526044820152606401602060405180830381600087803b151561165f57600080fd5b6102c65a03f1151561167057600080fd5b50505060405180519050614ebb565b89600a8151811061168c57fe5b60209081029091010152600154600160a060020a0316630bd6c7698a600a815181106116b457fe5b906020019060200201515160096000806040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b151561171657600080fd5b6102c65a03f1151561172757600080fd5b50505060405180516001549088019350600160a060020a03169050630647b1068a600a8151811061175457fe5b9060200190602002015151600960008660405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b15156117b457600080fd5b6102c65a03f115156117c557600080fd5b5050505b600154600160a060020a0316630647b106600060078d6117e88d614f35565b60405163ffffffff86811660e060020a028252600160a060020a039590951660048201526024810193909352921660448201526064810191909152608401600060405180830381600087803b151561183f57600080fd5b6102c65a03f1151561185057600080fd5b5050507f621ded8b7024f7261900c87ffcf043a3611e1157cf40f9a3a7949a8c54ce316e8a60405163ffffffff909116815260200160405180910390a150505050505050505050565b60025460009060a060020a900460ff16156118b357600080fd5b600082116118c057600080fd5b600154600160a060020a0316630bd6c7693360096000806040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b151561192957600080fd5b6102c65a03f1151561193a57600080fd5b50505060405180519150508082111561195257600080fd5b6001549082900390600160a060020a0316630647b10633600960008560405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b15156119be57600080fd5b6102c65a03f115156119cf57600080fd5b5050600154600160a060020a0316905063c95f8b91338460405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515611a2957600080fd5b6102c65a03f11515611a3a57600080fd5b5050505050565b60005433600160a060020a03908116911614611a5c57600080fd5b6002805474ff000000000000000000000000000000000000000019169055565b611a84615cf5565b60005433600160a060020a03908116911614611a9f57600080fd5b600154611b1190600160a060020a0316630bd6c7696000600787826040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b1515610b1957600080fd5b60ff8316610100820152600154909150600160a060020a0316630647b1066000600786611b3d86614f35565b60405163ffffffff86811660e060020a028252600160a060020a039590951660048201526024810193909352921660448201526064810191909152608401600060405180830381600087803b15156109c357600080fd5b611b9c615d9d565b611ba4615cf5565b60025460009060a060020a900460ff1615611bbe57600080fd5b60005433600160a060020a03908116911614611bd957600080fd5b600154611c6590600160a060020a0316630bd6c76960008080806040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b1515611c4557600080fd5b6102c65a03f11515611c5657600080fd5b50505060405180519050615015565b60ff808b1684528981166020808601919091528982166040860152908816606085015269ffffffffffffffffffff8716608085015263ffffffff861660c0850152600160a08501529093508301805160010163ffffffff1690526020830151600154909150600160a060020a0316630647b1066000600784611ce687614f35565b60405163ffffffff86811660e060020a028252600160a060020a039590951660048201526024810193909352921660448201526064810191909152608401600060405180830381600087803b1515611d3d57600080fd5b6102c65a03f11515611d4e57600080fd5b5050600154600160a060020a03169050630647b10660008080611d70886150d0565b60405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b1515611dc057600080fd5b6102c65a03f11515611dd157600080fd5b5050507fa4039098a3bc54729b2ea56d9b9c10da33618d8b141b7ef6b5c9c6b3bd2fdef88160405163ffffffff909116815260200160405180910390a1505050505050505050565b600154600160a060020a031681565b611e30615d41565b611e38615dd2565b611e40615ce3565b60025460a060020a900460ff1615611e5757600080fd5b60018054611ecd91600160a060020a0390911690630bd6c7699060009089826040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b1515610a8157600080fd5b92506000835160ff1611611ee057600080fd5b600154611f5290600160a060020a0316630bd6c7696000600289826040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b1515610bb157600080fd5b9150600160a060020a0333168251600160a060020a031614611f7357600080fd5b826040015160ff1615611f8557600080fd5b69ffffffffffffffffffff841681526001604084018190528054600160a060020a031690630647b1069060009088611fbc88614de9565b60405163ffffffff86811660e060020a028252600160a060020a039590951660048201526024810193909352921660448201526064810191909152608401600060405180830381600087803b151561201357600080fd5b6102c65a03f1151561202457600080fd5b5050600154600160a060020a03169050630647b106600060048861204786615167565b60405163ffffffff86811660e060020a028252600160a060020a039590951660048201526024810193909352921660448201526064810191909152608401600060405180830381600087803b151561209e57600080fd5b6102c65a03f115156120af57600080fd5b50505033600160a060020a03167fb4b714502735fdcccb277397b149541771cf47f0fe9ac9ff8cedbede62867549868660405163ffffffff909216825269ffffffffffffffffffff1660208201526040908101905180910390a25050505050565b6000806000806000806000612123615cf5565b60025460a060020a900460ff161561213a57600080fd5b6001546121ac90600160a060020a0316630bd6c769600060078d826040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b1515610b1957600080fd5b90508060a0015160ff16600114975080600001519650806020015195508060400151945080606001519350806080015192508060c00151915050919395979092949650565b6121f9615d41565b612201615dd2565b612209615ce3565b60008060008060008061221a615dd2565b60025460a060020a900460ff161561223157600080fd5b600180546122a791600160a060020a0390911690630bd6c769906000908f826040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b1515610a8157600080fd5b995060008a5160ff16116122ba57600080fd5b896040015160ff1660011415156122d057600080fd5b60015461234290600160a060020a0316630bd6c769600060028f826040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b1515610bb157600080fd5b9850600160a060020a0333168951600160a060020a0316141561236457600080fd5b6001546123f690600160a060020a0316630bd6c769600060048f826040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b15156123d657600080fd5b6102c65a03f115156123e757600080fd5b50505060405180519050615186565b9750875169ffffffffffffffffffff163414151561241357600080fd5b600154600160a060020a0316630bd6c7698a5160036000806040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b151561247d57600080fd5b6102c65a03f1151561248e57600080fd5b5050506040518051600154909850600160a060020a03169050630bd6c7693360036000806040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b151561250457600080fd5b6102c65a03f1151561251557600080fd5b505050604051805196508890505169ffffffffffffffffffff1692508851600160a060020a033381168b5260006040808e01829052818c52600180549a01999395509290911691630bd6c7699185916003918c91516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b15156125b957600080fd5b6102c65a03f115156125ca57600080fd5b5050506040518051600154909650600160a060020a03169050630647b1068360038a600060405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b151561263e57600080fd5b6102c65a03f1151561264f57600080fd5b50505086896020015160010163ffffffff161415156127f357600154600160a060020a0316630647b10683600360208d01516001018960405163ffffffff86811660e060020a028252600160a060020a039590951660048201526024810193909352921660448201526064810191909152608401600060405180830381600087803b15156126dc57600080fd5b6102c65a03f115156126ed57600080fd5b505060015461275d9150600160a060020a0316630bd6c7696000600289826040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b1515610bb157600080fd5b9050886020015163ffffffff166020820152600154600160a060020a0316630647b106600060028861278e866151c7565b60405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b15156127de57600080fd5b6102c65a03f115156127ef57600080fd5b5050505b85896020019063ffffffff16908163ffffffff1681525050600160009054906101000a9004600160a060020a0316600160a060020a0316630647b106336003898f63ffffffff1660010260405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b151561288d57600080fd5b6102c65a03f1151561289e57600080fd5b50506001546014850495509385900393600160a060020a03169050630bd6c7696000600581806040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b151561291657600080fd5b6102c65a03f1151561292757600080fd5b5050506040518051600154600019909901989086019650600160a060020a03169050630647b10633600360008a60405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b15156129a457600080fd5b6102c65a03f115156129b557600080fd5b5050600154600160a060020a03169050630647b10683600360008b60405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b1515612a2057600080fd5b6102c65a03f11515612a3157600080fd5b5050600154600160a060020a03169050630647b106600060028e612a548e6151c7565b60405163ffffffff86811660e060020a028252600160a060020a039590951660048201526024810193909352921660448201526064810191909152608401600060405180830381600087803b1515612aab57600080fd5b6102c65a03f11515612abc57600080fd5b505060018054600160a060020a03169150630647b106906000908e612ae08f614de9565b60405163ffffffff86811660e060020a028252600160a060020a039590951660048201526024810193909352921660448201526064810191909152608401600060405180830381600087803b1515612b3757600080fd5b6102c65a03f11515612b4857600080fd5b5050600154600160a060020a03169050630647b106600060048e612b6b8d615167565b60405163ffffffff86811660e060020a028252600160a060020a039590951660048201526024810193909352921660448201526064810191909152608401600060405180830381600087803b1515612bc257600080fd5b6102c65a03f11515612bd357600080fd5b5050600154600160a060020a03169050630647b10660006005818960405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b1515612c3e57600080fd5b6102c65a03f11515612c4f57600080fd5b5050600154600160a060020a03169050630bd6c7698360096000806040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b1515612cbc57600080fd5b6102c65a03f11515612ccd57600080fd5b5050506040518051600154940193600160a060020a03169050630647b10683600960008760405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b1515612d4157600080fd5b6102c65a03f11515612d5257600080fd5b5050600154600160a060020a031690503480156108fc0290604051600060405180830381858888f193505050501515612d8a57600080fd5b81600160a060020a031633600160a060020a03167f6f9d73dbd7c6ce8ede881a6e9c8e862e8b77a2128e5a62b1eef167c7e0d2f84c8d60405163ffffffff909116815260200160405180910390a35050505050505050505050565b60025460a060020a900460ff1681565b60005433600160a060020a03908116911614612e1057600080fd5b61016060405190810160409081526001825267ffffffffffffffff808e1660208085019190915263ffffffff808f16848601528d811660608601528c811660808601528b811660a08601528a811660c086015289811660e0860152888116610100860152878116610120860152918616610140850152908f1660009081526003909152208151815460ff19169015151781556020820151815467ffffffffffffffff919091166101000268ffffffffffffffff00199091161781556040820151815463ffffffff919091166901000000000000000000026cffffffff000000000000000000199091161781556060820151815463ffffffff919091166d01000000000000000000000000000270ffffffff00000000000000000000000000199091161781556080820151815463ffffffff91909116710100000000000000000000000000000000000274ffffffff00000000000000000000000000000000001990911617815560a0820151815463ffffffff9190911675010000000000000000000000000000000000000000000278ffffffff0000000000000000000000000000000000000000001990911617815560c0820151815463ffffffff9190911660c860020a027fffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffffff90911617815560e082015160018201805463ffffffff191663ffffffff929092169190911790556101008201518160010160046101000a81548163ffffffff021916908363ffffffff1602179055506101208201518160010160086101000a81548163ffffffff021916908363ffffffff1602179055506101408201516001918201805467ffffffffffffffff929092166c010000000000000000000000000273ffffffffffffffff0000000000000000000000001990921691909117905554600160a060020a03169050630bd6c7696000600c8f826040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b151561312357600080fd5b6102c65a03f1151561313457600080fd5b50505060405180519a505063ffffffff8a16151561326d57600154600160a060020a0316630647b1066000600b8f63ffffffff861660405163ffffffff86811660e060020a028252600160a060020a039590951660048201526024810193909352921660448201526064810191909152608401600060405180830381600087803b15156131c057600080fd5b6102c65a03f115156131d157600080fd5b505050600160009054906101000a9004600160a060020a0316600160a060020a0316630647b1066000600c8f6001800260405163ffffffff86811660e060020a028252600160a060020a039590951660048201526024810193909352921660448201526064810191909152608401600060405180830381600087803b151561325857600080fd5b6102c65a03f1151561326957600080fd5b5050505b505050505050505050505050565b600154600090600160a060020a0316630bd6c76982600685826040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b151561106157600080fd5b600254600160a060020a031681565b6000806000613307615d41565b61330f615dd2565b613317615ce3565b6001805461338d91600160a060020a0390911690630bd6c769906000908b826040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b1515610a8157600080fd5b925082604001516001805460ff9290921614965061341090600160a060020a0316630bd6c769600060028b826040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b1515610bb157600080fd5b9150815160015490955061348990600160a060020a0316630bd6c769600060048b826040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b15156123d657600080fd5b90508051959794965050505050565b6134a0615de9565b60008080600160a060020a03861615156134b957600080fd5b6134c2866137c0565b9250846008019150828211156134d6578291505b50835b818110156135915760018054600160a060020a031690630bd6c769908890600390850160006040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b151561355057600080fd5b6102c65a03f1151561356157600080fd5b50505060405180519050848683036008811061357957fe5b63ffffffff90921660209290920201526001016134d9565b50505092915050565b60025460009060a060020a900460ff16156135b457600080fd5b6135bd83613657565b9050600063ffffffff8216116135d257600080fd5b6135df83336001856144ff565b60015460001990910190600160a060020a0316630647b1066000600b8663ffffffff861660405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925261ffff1660448301526064820152608401600060405180830381600087803b15156109c357600080fd5b600154600090600160a060020a0316630bd6c76982600b85826040516020015260405160e060020a63ffffffff8616028152600160a060020a039093166004840152602483019190915261ffff166044820152606401602060405180830381600087803b151561106157600080fd5b600054600160a060020a031681565b60008060008060008060008060006136eb615d41565b6001805461376191600160a060020a0390911690630bd6c769906000908f826040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b1515610a8157600080fd5b90506001815160ff1610159950806040015160ff166001149250806080015198508060a0015197508060c0015196508060e001519550806101000151945080610140015193506137b08b6151fe565b9150509193959799909294969850565b600080600160a060020a03831615156137d857600080fd5b600154600160a060020a0316630bd6c7698460036000806040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b151561384157600080fd5b6102c65a03f1151561385257600080fd5b5050506040518051949350505050565b61386a615ce3565b613872615ce3565b61387a615e12565b6000613884615ce3565b61388c615ce3565b600060018815151461389f5760056138a2565b60005b60ff16935060056040518059106138b65750595b9080825280602002602001820160405250925060056040518059106138d85750595b90808252806020026020018201604052509150600090505b60058163ffffffff1610156139cf5760015461396e90600160a060020a0316630bd6c7698b600863ffffffff8616890160006040516020015260405163ffffffff85811660e060020a02825293909316600484015260248301919091526044820152606401602060405180830381600087803b151561165f57600080fd5b94508451838263ffffffff168151811061398457fe5b600160a060020a039092166020928302909101820152850151828263ffffffff16815181106139af57fe5b67ffffffffffffffff9092166020928302909101909101526001016138f0565b509097909650945050505050565b6139e5615d41565b6139ed615dd2565b60025460a060020a900460ff1615613a0457600080fd5b60018054613a7a91600160a060020a0390911690630bd6c7699060009087826040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b1515610a8157600080fd5b91506000825160ff1611613a8d57600080fd5b816040015160ff166001141515613aa357600080fd5b600154613b1590600160a060020a0316630bd6c7696000600287826040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b1515610bb157600080fd5b9050600160a060020a0333168151600160a060020a031614613b3657600080fd5b60006040830181905260018054600160a060020a031691630647b1069186613b5d87614de9565b60405163ffffffff86811660e060020a028252600160a060020a039590951660048201526024810193909352921660448201526064810191909152608401600060405180830381600087803b1515613bb457600080fd5b6102c65a03f11515613bc557600080fd5b50505033600160a060020a03167f1fb384cbe837fb1441757fd8f31fa39bd2364252604125b500e1897ae8e555348460405163ffffffff909116815260200160405180910390a2505050565b60005433600160a060020a03908116911614613c2c57600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60008054819033600160a060020a03908116911614613c7957600080fd5b600154600160a060020a0316630bd6c7696000600581806040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b151561106157600080fd5b60005433600160a060020a03908116911614613cfd57600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b613d34615ce3565b613d3c615cf5565b60025460009060a060020a900460ff1615613d5657600080fd5b60005433600160a060020a03908116911614613d7157600080fd5b613d7a84614c0b565b9093509150600090505b8160e0015163ffffffff16811015613e2f57600154600160a060020a0316630647b10685600884613dc9888281518110613dba57fe5b90602001906020020151615285565b60405163ffffffff86811660e060020a028252949094166004850152602484019290925260448301526064820152608401600060405180830381600087803b1515613e1357600080fd5b6102c65a03f11515613e2457600080fd5b505050600101613d84565b50505050565b613e3d615d41565b613e45615d41565b613e4d615ce3565b838152613e6181600063ffffffff6152d416565b60ff168252613e7781600263ffffffff6152d416565b60ff166040830152613e9081600463ffffffff6152f416565b63ffffffff9081166080840152613eac9082906008906152f416565b63ffffffff90811660a0840152613ec8908290600c906152f416565b63ffffffff90811660c0840152613ee49082906010906152f416565b63ffffffff90811660e0840152613f0090829060149061531716565b61ffff16610100830152613f1b81601863ffffffff61533816565b67ffffffffffffffff166101408301525092915050565b613f3a615cf5565b613f42615cf5565b613f4a615ce3565b838152613f5e81600063ffffffff6152d416565b60ff168252613f7481600163ffffffff6152d416565b60ff166020830152613f8d81600263ffffffff6152d416565b60ff166040830152613fa681600363ffffffff6152d416565b60ff166060830152613fbf81600463ffffffff61535f16565b69ffffffffffffffffffff166080830152613fe181600e63ffffffff6152d416565b60ff1660a0830152613ffa81600f63ffffffff6152f416565b63ffffffff90811660c08401526140169082906013906152f416565b63ffffffff90811660e08401526140329082906017906152d416565b60ff166101008301525092915050565b61404a615dd2565b614052615dd2565b61405a615ce3565b83815261406e81600063ffffffff61538816565b600160a060020a0316825261408a81601463ffffffff6152f416565b63ffffffff1660208301525092915050565b6140a5816153ae565b600254600160a060020a0316637e638974610240830151836102600151846102800151856102a0015160006040516060015260405160e060020a63ffffffff87160281526004810194909452602484019290925260448301526064820152608401606060405180830381600087803b151561411f57600080fd5b6102c65a03f1151561413057600080fd5b505050604051805190602001805190602001805167ffffffffffffffff166103c085015250600790810b810b61034084015290810b900b610320820152614176816153d5565b600a340461038082019081525134036103a0820152600154600160a060020a0316630bd6c7696000600581806040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b15156141f457600080fd5b6102c65a03f1151561420557600080fd5b50505060405180519050610380820181815101905250600154600160a060020a0316630bd6c769600060066102c085015160006040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b151561428f57600080fd5b6102c65a03f115156142a057600080fd5b505050604051805190506103a0820181815101905250600154600160a060020a0316630647b106600060058161038086015160405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b151561432257600080fd5b6102c65a03f1151561433357600080fd5b5050600154600160a060020a03169050630647b106600060066102c0850151856103a0015160405163ffffffff86811660e060020a028252600160a060020a039590951660048201526024810193909352921660448201526064810191909152608401600060405180830381600087803b15156143af57600080fd5b6102c65a03f115156143c057600080fd5b5050600154600160a060020a03169050630647b106600060076102c08501516143ed866102200151614f35565b60405163ffffffff86811660e060020a028252600160a060020a039590951660048201526024810193909352921660448201526064810191909152608401600060405180830381600087803b151561444457600080fd5b6102c65a03f1151561445557600080fd5b5050600154600160a060020a031690503480156108fc0290604051600060405180830381858888f19350505050151561448d57600080fd5b33600160a060020a03167fbc6a49a3bfd3c950d55a640741c984eb090baca50cd8433c70b74bd2617950ab826102c0015183610320015184610340015160405163ffffffff9093168352600791820b820b6020840152810b900b6040808301919091526060909101905180910390a250565b6000614509615d9d565b6000806000614516615d41565b6000614520615dd2565b61ffff8c166000908152600360205260409020805490985060ff16151561454657600080fd5b8915614568578754610100900467ffffffffffffffff16341461456857600080fd5b6001546145d490600160a060020a0316630bd6c76960008080806040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b1515611c4557600080fd5b600154909750600160a060020a0316630bd6c7696000600581806040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b151561464057600080fd5b6102c65a03f1151561465157600080fd5b50505060405180519650879050805160010163ffffffff169052865194506146788b6137c0565b600180855261ffff8e16610100860152600060408601520193506002424189516000604051602001526040518084815260200183600160a060020a0316600160a060020a03166c010000000000000000000000000281526014018263ffffffff1663ffffffff1660e060020a028152600401935050505060206040518083038160008661646e5a03f1151561470c57600080fd5b505060405180518954909350614754915063ffffffff690100000000000000000082048116916d01000000000000000000000000009004168460005b1a60f860020a026157e5565b63ffffffff908116608085015288546147a1917101000000000000000000000000000000000082048116917501000000000000000000000000000000000000000000900416846001614748565b63ffffffff90811660a0850152885460018a01546147cd9260c860020a90920482169116846002614748565b63ffffffff90811660c0850152600189015461480391640100000000820481169168010000000000000000900416846003614748565b63ffffffff90811660e08501526001898101546c01000000000000000000000000900467ffffffffffffffff16610140860152600160a060020a038d8116845260001987018316602085015290543498909801971690630647b106908d9060039088908a1660405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b15156148b857600080fd5b6102c65a03f115156148c957600080fd5b5050600154600160a060020a03169050630647b1068c600360008860405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b151561493457600080fd5b6102c65a03f1151561494557600080fd5b505060018054600160a060020a03169150630647b106906000908861496988614de9565b60405163ffffffff86811660e060020a028252600160a060020a039590951660048201526024810193909352921660448201526064810191909152608401600060405180830381600087803b15156149c057600080fd5b6102c65a03f115156149d157600080fd5b5050600154600160a060020a03169050630647b10660006002886149f4866151c7565b60405163ffffffff86811660e060020a028252600160a060020a039590951660048201526024810193909352921660448201526064810191909152608401600060405180830381600087803b1515614a4b57600080fd5b6102c65a03f11515614a5c57600080fd5b5050600154600160a060020a03169050630647b10660008080614a7e8c6150d0565b60405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b1515614ace57600080fd5b6102c65a03f11515614adf57600080fd5b5050508915614b9857600154600160a060020a0316630647b10660006005818a60405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b1515614b4f57600080fd5b6102c65a03f11515614b6057600080fd5b5050600154600160a060020a031690503480156108fc0290604051600060405180830381858888f193505050501515614b9857600080fd5b8a600160a060020a03167fea0aee148209a01ccf8bff07fa316fc18ab073d469a1c9870818b3e5913ff0e38d878c60405161ffff909316835263ffffffff919091166020830152600160a060020a03166040808301919091526060909101905180910390a2505050505050505050505050565b614c13615ce3565b614c1b615cf5565b600154600090614c8f90600160a060020a0316630bd6c76983600788826040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b1515610b1957600080fd5b9150600b604051805910614ca05750595b908082528060200260200182016040528015614cd657816020015b614cc3615e12565b815260200190600190039081614cbb5790505b509250600090505b8160e0015163ffffffff16811015614d7557600154614d5790600160a060020a0316630bd6c7698660088560006040516020015260405163ffffffff85811660e060020a02825293909316600484015260248301919091526044820152606401602060405180830381600087803b151561165f57600080fd5b838281518110614d6357fe5b60209081029091010152600101614cde565b614d83838360e001516157fc565b50915091565b600084614d978686856157e5565b038301925084831080614da957508383115b15614db2578392505b50909392505050565b600084614dc98686856157e5565b038303925084831080614ddb57508383115b15614db25750929392505050565b6000614df3615ce3565b614e086000845183919063ffffffff61594316565b614e206002846040015183919063ffffffff61594316565b614e386004846080015183919063ffffffff61596216565b614e5060088460a0015183919063ffffffff61596216565b614e68600c8460c0015183919063ffffffff61596216565b614e8060108460e0015183919063ffffffff61596216565b614e99601484610100015183919063ffffffff61598116565b614eb2601884610140015183919063ffffffff6159a116565b80519392505050565b614ec3615e12565b614ecb615e12565b614ed3615ce3565b838152614ee781600063ffffffff61538816565b600160a060020a03168252614f0381601463ffffffff61533816565b67ffffffffffffffff166020830152614f2381601c63ffffffff6152f416565b63ffffffff1660408301525092915050565b6000614f3f615ce3565b614f546000845183919063ffffffff61594316565b614f6c6001846020015183919063ffffffff61594316565b614f846002846040015183919063ffffffff61594316565b614f9c6003846060015183919063ffffffff61594316565b614fb46004846080015183919063ffffffff6159c716565b614fcc600e8460a0015183919063ffffffff61594316565b614fe4600f8460c0015183919063ffffffff61596216565b614ffc60138460e0015183919063ffffffff61596216565b614eb2601784610100015183919063ffffffff61594316565b61501d615d9d565b615025615d9d565b61502d615ce3565b83815261504181600063ffffffff6152f416565b63ffffffff908116835261505a9082906004906152f416565b63ffffffff90811660208401526150769082906008906152d416565b60ff16604083015261508f81600963ffffffff6152d416565b60ff1660608301526150a881600a63ffffffff6152d416565b60ff1660808301526150c181600b63ffffffff6152d416565b60ff1660a08301525092915050565b60006150da615ce3565b6150ef6000845183919063ffffffff61596216565b6151076004846020015183919063ffffffff61596216565b61511f6008846040015183919063ffffffff61594316565b6151376009846060015183919063ffffffff61594316565b61514f600a846080015183919063ffffffff61594316565b614eb2600b8460a0015183919063ffffffff61594316565b6000615171615ce3565b614eb26000845183919063ffffffff6159c716565b61518e615ce3565b615196615ce3565b61519e615ce3565b8381526151b281600063ffffffff61535f16565b69ffffffffffffffffffff1682525092915050565b60006151d1615ce3565b6151e66000845183919063ffffffff6159ef16565b614eb26014846020015183919063ffffffff61596216565b6000615208615dd2565b60015461527a90600160a060020a0316630bd6c7696000600287826040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b1515610bb157600080fd5b905080519392505050565b600061528f615ce3565b6152a46000845183919063ffffffff6159ef16565b6152bc6014846020015183919063ffffffff6159a116565b614eb2601c846040015183919063ffffffff61596216565b600063ffffffff6008830216835160029190910a900460ff169392505050565b600063ffffffff6008830216835160029190910a900463ffffffff169392505050565b600063ffffffff6008830216835160029190910a900461ffff169392505050565b600063ffffffff6008830216835160029190910a900467ffffffffffffffff169392505050565b600063ffffffff6008830216835160029190910a900469ffffffffffffffffffff169392505050565b600063ffffffff6008830216835160029190910a9004600160a060020a03169392505050565b6153b781615a14565b6153c081615a88565b6153c981615aff565b6153d281615b7a565b50565b6153dd615e12565b6153e5615e12565b6000806000856103600151600160a060020a031685526103c086015167ffffffffffffffff1660208601526102e086015163ffffffff166040860152600092505b85610220015160e0015163ffffffff168363ffffffff16101561558e576001546154b190600160a060020a0316630bd6c7696102c089015160088760006040516020015260405163ffffffff85811660e060020a028252938416600482015260248101929092529091166044820152606401602060405180830381600087803b151561165f57600080fd5b9350856103600151600160a060020a03168451600160a060020a0316141561558357836020015167ffffffffffffffff16866103c0015167ffffffffffffffff16101561557e57600154600160a060020a0316630647b1066102c088015160088661551b8a615285565b60405163ffffffff86811660e060020a02825294851660048201526024810193909352921660448201526064810191909152608401600060405180830381600087803b151561556957600080fd5b6102c65a03f1151561557a57600080fd5b5050505b6109d4565b600190920191615426565b600a86610220015160e0015163ffffffff16101561564f57600154600160a060020a0316630647b1066102c0880151600889610220015160e001516155d28a615285565b60405163ffffffff86811660e060020a02825294851660048201526024810193909352921660448201526064810191909152608401600060405180830381600087803b151561562057600080fd5b6102c65a03f1151561563157600080fd5b50505085610220015160e001805160010163ffffffff1690526109d4565b506000915081905063ffffffff5b85610220015160e0015163ffffffff168363ffffffff161015615720576001546156e890600160a060020a0316630bd6c7696102c089015160088760006040516020015260405163ffffffff85811660e060020a028252938416600482015260248101929092529091166044820152606401602060405180830381600087803b151561165f57600080fd5b93508167ffffffffffffffff16846020015167ffffffffffffffff16111561571557836020015191508290505b60019092019161565d565b63ffffffff808216146109d45760015461579b90600160a060020a0316630bd6c7696102c089015160088560006040516020015260405163ffffffff85811660e060020a028252938416600482015260248101929092529091166044820152606401602060405180830381600087803b151561165f57600080fd5b9350836020015167ffffffffffffffff16866103c0015167ffffffffffffffff1610156109d457600154600160a060020a0316630647b1066102c088015160088461551b8a615285565b60649183900360f860020a90910482900602040190565b806000805b506000905060015b8263ffffffff168163ffffffff16101561592b57848163ffffffff168151811061582f57fe5b906020019060200201516020015167ffffffffffffffff16856001830363ffffffff168151811061585c57fe5b906020019060200201516020015167ffffffffffffffff16111561592357846001820363ffffffff168151811061588f57fe5b9060200190602002015185600a815181106158a657fe5b602090810290910101528463ffffffff8216815181106158c257fe5b90602001906020020151856001830363ffffffff16815181106158e157fe5b6020908102909101015284600a815181106158f857fe5b90602001906020020151858263ffffffff168151811061591457fe5b60209081029091010152600191505b600101615809565b6000199092019181151561593e57611a3a565b615801565b63ffffffff600883021660020a60ff8216028381815117905250505050565b63ffffffff60088302811660020a908216028381815117905250505050565b63ffffffff600883021660020a61ffff8216028381815117905250505050565b63ffffffff600883021660020a67ffffffffffffffff8216028381815117905250505050565b63ffffffff600883021660020a69ffffffffffffffffffff8216028381815117905250505050565b63ffffffff600883021660020a600160a060020a038216028381815117905250505050565b615a1c615ce3565b615a316000835183919063ffffffff6159a116565b615a496008836020015183919063ffffffff6159a116565b615a616010836040015183919063ffffffff6159a116565b615a796018836060015183919063ffffffff6159a116565b80516102409092019190915250565b615a90615ce3565b615aa86000836080015183919063ffffffff6159a116565b615ac060088360a0015183919063ffffffff6159a116565b615ad860108360c0015183919063ffffffff6159a116565b615af060188360e0015183919063ffffffff6159a116565b80516102609092019190915250565b615b07615ce3565b615b20600083610100015183919063ffffffff6159a116565b615b39600883610120015183919063ffffffff6159a116565b615b52601083610140015183919063ffffffff6159a116565b615b6b601883610160015183919063ffffffff6159a116565b80516102809092019190915250565b615b82615ce3565b615b9b600083610180015183919063ffffffff6159a116565b615bb46008836101a0015183919063ffffffff6159a116565b615bcd6010836101c0015183919063ffffffff6159a116565b80516102a09092019190915250565b6106406040519081016040908152600080835260208301819052908201819052606082018190526080820181905260a0820181905260c0820181905260e08201819052610100820181905261012082018190526101408201819052610160820181905261018082018190526101a082018190526101c08201526101e08101615c62615d41565b8152602001615c6f615dd2565b8152602001615c7c615cf5565b815260006020820181905260408201819052606082018190526080820181905260a0820181905260c0820181905260e08201819052610100820181905261012082018190526101408201819052610160820181905261018082018190526101a09091015290565b60206040519081016040526000815290565b6101206040519081016040908152600080835260208301819052908201819052606082018190526080820181905260a0820181905260c0820181905260e0820181905261010082015290565b6101606040519081016040908152600080835260208301819052908201819052606082018190526080820181905260a0820181905260c0820181905260e082018190526101008201819052610120820181905261014082015290565b60c06040519081016040908152600080835260208301819052908201819052606082018190526080820181905260a082015290565b604080519081016040526000808252602082015290565b6101006040519081016040526008815b600081526000199091019060200181615df95790505090565b6060604051908101604090815260008083526020830181905290820152905600a165627a7a72305820ea854ea4a55143f54b23e92811990e289365f5cf1940197a6d67b24e17a1232a0029
Deployed Bytecode
0x6060604052600436106101875763ffffffff60e060020a6000350416630dccfde4811461018c5780631309a563146101b05780631f15e163146101d7578063258f6b8f146102065780632b8a789b1461022c5780633285f4061461024b5780636985a0221461027c578063734f28381461028f57806374f760e4146102ab5780637805862f146102c15780638c5f6d5a146102d45780638cd41fae146102f657806391bb4816146103395780639875958c1461036857806399c75517146103935780639d44210214610407578063a756588814610418578063ae68c80a1461042b578063bd7095db14610497578063bdaeb0a0146104b3578063c022abbe146104c6578063c55f3b4c1461051c578063c6cc68b914610577578063c959ec5714610592578063ca75d770146105c5578063daf017a9146105d8578063dbcf194a14610665578063e190903514610684578063e20348341461073e578063ebc046491461075a578063ec35576e14610779578063f28532921461078c578063ffef2b00146107ab575b600080fd5b341561019757600080fd5b6101ae600435600160a060020a03602435166107c7565b005b34156101bb57600080fd5b6101c36109dc565b604051901515815260200160405180910390f35b6101ae63ffffffff60043581169060243581169060443581169060643581169060843581169060a435166109ec565b341561021157600080fd5b6101ae61ffff60043516600160a060020a0360243516610e40565b341561023757600080fd5b6101ae600160a060020a0360043516610f94565b341561025657600080fd5b61026a600160a060020a0360043516610fde565b60405190815260200160405180910390f35b341561028757600080fd5b6101ae611081565b341561029a57600080fd5b6101ae63ffffffff600435166110d9565b34156102b657600080fd5b6101ae600435611899565b34156102cc57600080fd5b6101ae611a41565b34156102df57600080fd5b6101ae63ffffffff6004351660ff60243516611a7c565b341561030157600080fd5b6101ae60ff6004358116906024358116906044358116906064351669ffffffffffffffffffff6084351663ffffffff60a43516611b94565b341561034457600080fd5b61034c611e19565b604051600160a060020a03909116815260200160405180910390f35b341561037357600080fd5b6101ae63ffffffff6004351669ffffffffffffffffffff60243516611e28565b341561039e57600080fd5b6103af63ffffffff60043516612110565b604051961515875260ff958616602088015293851660408088019190915292851660608701529316608085015269ffffffffffffffffffff90921660a084015263ffffffff1660c083015260e0909101905180910390f35b6101ae63ffffffff600435166121f1565b341561042357600080fd5b6101c3612de5565b341561043657600080fd5b6101ae63ffffffff60043581169067ffffffffffffffff60243581169160443581169160643582169160843581169160a43582169160c43581169160e435821691610104358116916101243582169161014435909116906101643516612df5565b34156104a257600080fd5b61026a63ffffffff6004351661327b565b34156104be57600080fd5b61034c6132eb565b34156104d157600080fd5b6104e263ffffffff600435166132fa565b6040519215158352600160a060020a03909116602083015269ffffffffffffffffffff166040808301919091526060909101905180910390f35b341561052757600080fd5b61053e600160a060020a0360043516602435613498565b604051808261010080838360005b8381101561056457808201518382015260200161054c565b5050505090500191505060405180910390f35b6101ae61ffff60043516600160a060020a036024351661359a565b341561059d57600080fd5b6105ac61ffff60043516613657565b60405163ffffffff909116815260200160405180910390f35b34156105d057600080fd5b61034c6136c6565b34156105e357600080fd5b6105f463ffffffff600435166136d5565b604051981515895263ffffffff97881660208a01529587166040808a0191909152948716606089015292909516608087015261ffff1660a086015267ffffffffffffffff90931660c085015291151560e0840152600160a060020a0316610100830152610120909101905180910390f35b341561067057600080fd5b61026a600160a060020a03600435166137c0565b341561068f57600080fd5b6106a563ffffffff600435166024351515613862565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156106e95780820151838201526020016106d1565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015610728578082015183820152602001610710565b5050505090500194505050505060405180910390f35b341561074957600080fd5b6101ae63ffffffff600435166139dd565b341561076557600080fd5b6101ae600160a060020a0360043516613c11565b341561078457600080fd5b61026a613c5b565b341561079757600080fd5b6101ae600160a060020a0360043516613ce2565b34156107b657600080fd5b6101ae63ffffffff60043516613d2c565b60025460009060a060020a900460ff16156107e157600080fd5b60005433600160a060020a039081169116146107fc57600080fd5b600154600160a060020a0316630bd6c7696000600581806040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b151561086557600080fd5b6102c65a03f1151561087657600080fd5b50505060405180519150506000831161088e57600080fd5b8083111561089b57600080fd5b600160a060020a03821615156108b057600080fd5b30600160a060020a031682600160a060020a0316141515156108d157600080fd5b600154600160a060020a03838116911614156108ec57600080fd5b6001549083900390600160a060020a0316630647b10660006005818560405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b151561095857600080fd5b6102c65a03f1151561096957600080fd5b5050600154600160a060020a0316905063c95f8b91838560405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b15156109c357600080fd5b6102c65a03f115156109d457600080fd5b505050505050565b60025460a060020a900460ff1690565b6109f4615bdc565b60025460a060020a900460ff1615610a0b57600080fd5b60018054610aa191600160a060020a0390911690630bd6c769906000908a826040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b1515610a8157600080fd5b6102c65a03f11515610a9257600080fd5b50505060405180519050613e35565b6101e0820152600154610b3990600160a060020a0316630bd6c769600060078b826040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b1515610b1957600080fd5b6102c65a03f11515610b2a57600080fd5b50505060405180519050613f32565b610220820152600154610bd190600160a060020a0316630bd6c769600060028a826040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b1515610bb157600080fd5b6102c65a03f11515610bc257600080fd5b50505060405180519050614042565b61020082015261022081015160a0015160ff166001141515610bf257600080fd5b6000816101e001515160ff1611610c0857600080fd5b806101e001516040015160ff1615610c1f57600080fd5b8061022001516080015169ffffffffffffffffffff1634141515610c4257600080fd5b33600160a060020a031681610200015151600160a060020a031614610c6657600080fd5b806101e0015160a0015163ffffffff168563ffffffff1611151515610c8a57600080fd5b8061022001515160ff16600790810b900b60a08201526102208101516020015160ff16600790810b900b60c08201526102208101516040015160ff16600790810b900b60e08201526102208101516060015160ff16600790810b900b61010082015261022081015160c0015163ffffffff16600790810b900b610120820152610220810151610100015160ff16600790810b900b6101a08201526101e08101516080015163ffffffff16600790810b900b81526101e081015160a0015163ffffffff16600790810b900b60208201526101e081015160c0015163ffffffff16600790810b900b60408201526101e081015160e0015163ffffffff16600790810b900b60608201526101e08101516101400151600790810b900b608082015263ffffffff8088166102c083015286166102e08201526101e081015160a0015163ffffffff168560640263ffffffff16811515610de157fe5b0463ffffffff908116600790810b810b6101c0840152858216810b810b610140840152848216810b810b610160840152908316810b900b61018082015233600160a060020a0316610360820152610e378161409c565b50505050505050565b60025460009060a060020a900460ff1615610e5a57600080fd5b60005433600160a060020a03908116911614610e7557600080fd5b600154600160a060020a0316630bd6c76983600a6000806040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b1515610ede57600080fd5b6102c65a03f11515610eef57600080fd5b50505060405180519150508015610f0557600080fd5b5060018054600160a060020a0316630647b10683600a60008560405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b1515610f6e57600080fd5b6102c65a03f11515610f7f57600080fd5b505050610f8f83836000806144ff565b505050565b60005433600160a060020a03908116911614610faf57600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60025460009060a060020a900460ff1615610ff857600080fd5b600154600160a060020a0316630bd6c7698360096000806040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b151561106157600080fd5b6102c65a03f1151561107257600080fd5b50505060405180519392505050565b60005433600160a060020a0390811691161461109c57600080fd5b60025460a060020a900460ff16156110b357600080fd5b6002805474ff0000000000000000000000000000000000000000191660a060020a179055565b6110e1615ce3565b6110e9615cf5565b60008060006110f6615d41565b6002546000908190819060a060020a900460ff161561111457600080fd5b60005433600160a060020a0390811691161461112f57600080fd5b6111388a614c0b565b909950975060a088015160ff16600114151561115357600080fd5b600060a08901819052600154600160a060020a031690630bd6c7699060068d826040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b15156111ca57600080fd5b6102c65a03f115156111db57600080fd5b5050506040518051975087965060009550505b8760e0015163ffffffff168510156115ef576001805461129091600160a060020a0390911690630bd6c769906000908d8a8151811061122957fe5b906020019060200201516040015160006040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b1515610a8157600080fd5b93506003600085610100015161ffff168152602081019190915260400160002080549093506112fa9063ffffffff690100000000000000000082048116916d0100000000000000000000000000900416608087015163ffffffff1688600a0360f860020a02614d89565b63ffffffff9081166080860152835461135991710100000000000000000000000000000000008204811691750100000000000000000000000000000000000000000090041660a087015163ffffffff1688600a0360f860020a02614d89565b63ffffffff90811660a0860152835460018501546113979260c860020a9092048216911660c087015163ffffffff1688600a0360f860020a02614dbb565b63ffffffff90811660c086015260018401546113df9164010000000082048116916801000000000000000090041660e087015163ffffffff1688600a0360f860020a02614d89565b63ffffffff1660e085015260018054600160a060020a031690630647b106906000908c898151811061140d57fe5b906020019060200201516040015161142489614de9565b60405163ffffffff86811660e060020a028252600160a060020a039590951660048201526024810193909352921660448201526064810191909152608401600060405180830381600087803b151561147b57600080fd5b6102c65a03f1151561148c57600080fd5b5050600154600160a060020a03169050630bd6c7698a87815181106114ad57fe5b906020019060200201515160096000806040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b151561150f57600080fd5b6102c65a03f1151561152057600080fd5b50505060405180519250506001850160020a8781151561153c57fe5b0490508581111561154a5750845b600154958190039591810191600160a060020a0316630647b1068a878151811061157057fe5b9060200190602002015151600960008660405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b15156115d057600080fd5b6102c65a03f115156115e157600080fd5b5050600190950194506111ee565b60008611156117c95760015461167f90600160a060020a0316630bd6c7698c60086000806040516020015260405163ffffffff85811660e060020a02825293909316600484015260248301919091526044820152606401602060405180830381600087803b151561165f57600080fd5b6102c65a03f1151561167057600080fd5b50505060405180519050614ebb565b89600a8151811061168c57fe5b60209081029091010152600154600160a060020a0316630bd6c7698a600a815181106116b457fe5b906020019060200201515160096000806040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b151561171657600080fd5b6102c65a03f1151561172757600080fd5b50505060405180516001549088019350600160a060020a03169050630647b1068a600a8151811061175457fe5b9060200190602002015151600960008660405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b15156117b457600080fd5b6102c65a03f115156117c557600080fd5b5050505b600154600160a060020a0316630647b106600060078d6117e88d614f35565b60405163ffffffff86811660e060020a028252600160a060020a039590951660048201526024810193909352921660448201526064810191909152608401600060405180830381600087803b151561183f57600080fd5b6102c65a03f1151561185057600080fd5b5050507f621ded8b7024f7261900c87ffcf043a3611e1157cf40f9a3a7949a8c54ce316e8a60405163ffffffff909116815260200160405180910390a150505050505050505050565b60025460009060a060020a900460ff16156118b357600080fd5b600082116118c057600080fd5b600154600160a060020a0316630bd6c7693360096000806040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b151561192957600080fd5b6102c65a03f1151561193a57600080fd5b50505060405180519150508082111561195257600080fd5b6001549082900390600160a060020a0316630647b10633600960008560405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b15156119be57600080fd5b6102c65a03f115156119cf57600080fd5b5050600154600160a060020a0316905063c95f8b91338460405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515611a2957600080fd5b6102c65a03f11515611a3a57600080fd5b5050505050565b60005433600160a060020a03908116911614611a5c57600080fd5b6002805474ff000000000000000000000000000000000000000019169055565b611a84615cf5565b60005433600160a060020a03908116911614611a9f57600080fd5b600154611b1190600160a060020a0316630bd6c7696000600787826040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b1515610b1957600080fd5b60ff8316610100820152600154909150600160a060020a0316630647b1066000600786611b3d86614f35565b60405163ffffffff86811660e060020a028252600160a060020a039590951660048201526024810193909352921660448201526064810191909152608401600060405180830381600087803b15156109c357600080fd5b611b9c615d9d565b611ba4615cf5565b60025460009060a060020a900460ff1615611bbe57600080fd5b60005433600160a060020a03908116911614611bd957600080fd5b600154611c6590600160a060020a0316630bd6c76960008080806040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b1515611c4557600080fd5b6102c65a03f11515611c5657600080fd5b50505060405180519050615015565b60ff808b1684528981166020808601919091528982166040860152908816606085015269ffffffffffffffffffff8716608085015263ffffffff861660c0850152600160a08501529093508301805160010163ffffffff1690526020830151600154909150600160a060020a0316630647b1066000600784611ce687614f35565b60405163ffffffff86811660e060020a028252600160a060020a039590951660048201526024810193909352921660448201526064810191909152608401600060405180830381600087803b1515611d3d57600080fd5b6102c65a03f11515611d4e57600080fd5b5050600154600160a060020a03169050630647b10660008080611d70886150d0565b60405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b1515611dc057600080fd5b6102c65a03f11515611dd157600080fd5b5050507fa4039098a3bc54729b2ea56d9b9c10da33618d8b141b7ef6b5c9c6b3bd2fdef88160405163ffffffff909116815260200160405180910390a1505050505050505050565b600154600160a060020a031681565b611e30615d41565b611e38615dd2565b611e40615ce3565b60025460a060020a900460ff1615611e5757600080fd5b60018054611ecd91600160a060020a0390911690630bd6c7699060009089826040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b1515610a8157600080fd5b92506000835160ff1611611ee057600080fd5b600154611f5290600160a060020a0316630bd6c7696000600289826040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b1515610bb157600080fd5b9150600160a060020a0333168251600160a060020a031614611f7357600080fd5b826040015160ff1615611f8557600080fd5b69ffffffffffffffffffff841681526001604084018190528054600160a060020a031690630647b1069060009088611fbc88614de9565b60405163ffffffff86811660e060020a028252600160a060020a039590951660048201526024810193909352921660448201526064810191909152608401600060405180830381600087803b151561201357600080fd5b6102c65a03f1151561202457600080fd5b5050600154600160a060020a03169050630647b106600060048861204786615167565b60405163ffffffff86811660e060020a028252600160a060020a039590951660048201526024810193909352921660448201526064810191909152608401600060405180830381600087803b151561209e57600080fd5b6102c65a03f115156120af57600080fd5b50505033600160a060020a03167fb4b714502735fdcccb277397b149541771cf47f0fe9ac9ff8cedbede62867549868660405163ffffffff909216825269ffffffffffffffffffff1660208201526040908101905180910390a25050505050565b6000806000806000806000612123615cf5565b60025460a060020a900460ff161561213a57600080fd5b6001546121ac90600160a060020a0316630bd6c769600060078d826040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b1515610b1957600080fd5b90508060a0015160ff16600114975080600001519650806020015195508060400151945080606001519350806080015192508060c00151915050919395979092949650565b6121f9615d41565b612201615dd2565b612209615ce3565b60008060008060008061221a615dd2565b60025460a060020a900460ff161561223157600080fd5b600180546122a791600160a060020a0390911690630bd6c769906000908f826040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b1515610a8157600080fd5b995060008a5160ff16116122ba57600080fd5b896040015160ff1660011415156122d057600080fd5b60015461234290600160a060020a0316630bd6c769600060028f826040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b1515610bb157600080fd5b9850600160a060020a0333168951600160a060020a0316141561236457600080fd5b6001546123f690600160a060020a0316630bd6c769600060048f826040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b15156123d657600080fd5b6102c65a03f115156123e757600080fd5b50505060405180519050615186565b9750875169ffffffffffffffffffff163414151561241357600080fd5b600154600160a060020a0316630bd6c7698a5160036000806040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b151561247d57600080fd5b6102c65a03f1151561248e57600080fd5b5050506040518051600154909850600160a060020a03169050630bd6c7693360036000806040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b151561250457600080fd5b6102c65a03f1151561251557600080fd5b505050604051805196508890505169ffffffffffffffffffff1692508851600160a060020a033381168b5260006040808e01829052818c52600180549a01999395509290911691630bd6c7699185916003918c91516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b15156125b957600080fd5b6102c65a03f115156125ca57600080fd5b5050506040518051600154909650600160a060020a03169050630647b1068360038a600060405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b151561263e57600080fd5b6102c65a03f1151561264f57600080fd5b50505086896020015160010163ffffffff161415156127f357600154600160a060020a0316630647b10683600360208d01516001018960405163ffffffff86811660e060020a028252600160a060020a039590951660048201526024810193909352921660448201526064810191909152608401600060405180830381600087803b15156126dc57600080fd5b6102c65a03f115156126ed57600080fd5b505060015461275d9150600160a060020a0316630bd6c7696000600289826040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b1515610bb157600080fd5b9050886020015163ffffffff166020820152600154600160a060020a0316630647b106600060028861278e866151c7565b60405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b15156127de57600080fd5b6102c65a03f115156127ef57600080fd5b5050505b85896020019063ffffffff16908163ffffffff1681525050600160009054906101000a9004600160a060020a0316600160a060020a0316630647b106336003898f63ffffffff1660010260405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b151561288d57600080fd5b6102c65a03f1151561289e57600080fd5b50506001546014850495509385900393600160a060020a03169050630bd6c7696000600581806040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b151561291657600080fd5b6102c65a03f1151561292757600080fd5b5050506040518051600154600019909901989086019650600160a060020a03169050630647b10633600360008a60405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b15156129a457600080fd5b6102c65a03f115156129b557600080fd5b5050600154600160a060020a03169050630647b10683600360008b60405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b1515612a2057600080fd5b6102c65a03f11515612a3157600080fd5b5050600154600160a060020a03169050630647b106600060028e612a548e6151c7565b60405163ffffffff86811660e060020a028252600160a060020a039590951660048201526024810193909352921660448201526064810191909152608401600060405180830381600087803b1515612aab57600080fd5b6102c65a03f11515612abc57600080fd5b505060018054600160a060020a03169150630647b106906000908e612ae08f614de9565b60405163ffffffff86811660e060020a028252600160a060020a039590951660048201526024810193909352921660448201526064810191909152608401600060405180830381600087803b1515612b3757600080fd5b6102c65a03f11515612b4857600080fd5b5050600154600160a060020a03169050630647b106600060048e612b6b8d615167565b60405163ffffffff86811660e060020a028252600160a060020a039590951660048201526024810193909352921660448201526064810191909152608401600060405180830381600087803b1515612bc257600080fd5b6102c65a03f11515612bd357600080fd5b5050600154600160a060020a03169050630647b10660006005818960405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b1515612c3e57600080fd5b6102c65a03f11515612c4f57600080fd5b5050600154600160a060020a03169050630bd6c7698360096000806040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b1515612cbc57600080fd5b6102c65a03f11515612ccd57600080fd5b5050506040518051600154940193600160a060020a03169050630647b10683600960008760405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b1515612d4157600080fd5b6102c65a03f11515612d5257600080fd5b5050600154600160a060020a031690503480156108fc0290604051600060405180830381858888f193505050501515612d8a57600080fd5b81600160a060020a031633600160a060020a03167f6f9d73dbd7c6ce8ede881a6e9c8e862e8b77a2128e5a62b1eef167c7e0d2f84c8d60405163ffffffff909116815260200160405180910390a35050505050505050505050565b60025460a060020a900460ff1681565b60005433600160a060020a03908116911614612e1057600080fd5b61016060405190810160409081526001825267ffffffffffffffff808e1660208085019190915263ffffffff808f16848601528d811660608601528c811660808601528b811660a08601528a811660c086015289811660e0860152888116610100860152878116610120860152918616610140850152908f1660009081526003909152208151815460ff19169015151781556020820151815467ffffffffffffffff919091166101000268ffffffffffffffff00199091161781556040820151815463ffffffff919091166901000000000000000000026cffffffff000000000000000000199091161781556060820151815463ffffffff919091166d01000000000000000000000000000270ffffffff00000000000000000000000000199091161781556080820151815463ffffffff91909116710100000000000000000000000000000000000274ffffffff00000000000000000000000000000000001990911617815560a0820151815463ffffffff9190911675010000000000000000000000000000000000000000000278ffffffff0000000000000000000000000000000000000000001990911617815560c0820151815463ffffffff9190911660c860020a027fffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffffff90911617815560e082015160018201805463ffffffff191663ffffffff929092169190911790556101008201518160010160046101000a81548163ffffffff021916908363ffffffff1602179055506101208201518160010160086101000a81548163ffffffff021916908363ffffffff1602179055506101408201516001918201805467ffffffffffffffff929092166c010000000000000000000000000273ffffffffffffffff0000000000000000000000001990921691909117905554600160a060020a03169050630bd6c7696000600c8f826040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b151561312357600080fd5b6102c65a03f1151561313457600080fd5b50505060405180519a505063ffffffff8a16151561326d57600154600160a060020a0316630647b1066000600b8f63ffffffff861660405163ffffffff86811660e060020a028252600160a060020a039590951660048201526024810193909352921660448201526064810191909152608401600060405180830381600087803b15156131c057600080fd5b6102c65a03f115156131d157600080fd5b505050600160009054906101000a9004600160a060020a0316600160a060020a0316630647b1066000600c8f6001800260405163ffffffff86811660e060020a028252600160a060020a039590951660048201526024810193909352921660448201526064810191909152608401600060405180830381600087803b151561325857600080fd5b6102c65a03f1151561326957600080fd5b5050505b505050505050505050505050565b600154600090600160a060020a0316630bd6c76982600685826040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b151561106157600080fd5b600254600160a060020a031681565b6000806000613307615d41565b61330f615dd2565b613317615ce3565b6001805461338d91600160a060020a0390911690630bd6c769906000908b826040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b1515610a8157600080fd5b925082604001516001805460ff9290921614965061341090600160a060020a0316630bd6c769600060028b826040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b1515610bb157600080fd5b9150815160015490955061348990600160a060020a0316630bd6c769600060048b826040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b15156123d657600080fd5b90508051959794965050505050565b6134a0615de9565b60008080600160a060020a03861615156134b957600080fd5b6134c2866137c0565b9250846008019150828211156134d6578291505b50835b818110156135915760018054600160a060020a031690630bd6c769908890600390850160006040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b151561355057600080fd5b6102c65a03f1151561356157600080fd5b50505060405180519050848683036008811061357957fe5b63ffffffff90921660209290920201526001016134d9565b50505092915050565b60025460009060a060020a900460ff16156135b457600080fd5b6135bd83613657565b9050600063ffffffff8216116135d257600080fd5b6135df83336001856144ff565b60015460001990910190600160a060020a0316630647b1066000600b8663ffffffff861660405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925261ffff1660448301526064820152608401600060405180830381600087803b15156109c357600080fd5b600154600090600160a060020a0316630bd6c76982600b85826040516020015260405160e060020a63ffffffff8616028152600160a060020a039093166004840152602483019190915261ffff166044820152606401602060405180830381600087803b151561106157600080fd5b600054600160a060020a031681565b60008060008060008060008060006136eb615d41565b6001805461376191600160a060020a0390911690630bd6c769906000908f826040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b1515610a8157600080fd5b90506001815160ff1610159950806040015160ff166001149250806080015198508060a0015197508060c0015196508060e001519550806101000151945080610140015193506137b08b6151fe565b9150509193959799909294969850565b600080600160a060020a03831615156137d857600080fd5b600154600160a060020a0316630bd6c7698460036000806040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b151561384157600080fd5b6102c65a03f1151561385257600080fd5b5050506040518051949350505050565b61386a615ce3565b613872615ce3565b61387a615e12565b6000613884615ce3565b61388c615ce3565b600060018815151461389f5760056138a2565b60005b60ff16935060056040518059106138b65750595b9080825280602002602001820160405250925060056040518059106138d85750595b90808252806020026020018201604052509150600090505b60058163ffffffff1610156139cf5760015461396e90600160a060020a0316630bd6c7698b600863ffffffff8616890160006040516020015260405163ffffffff85811660e060020a02825293909316600484015260248301919091526044820152606401602060405180830381600087803b151561165f57600080fd5b94508451838263ffffffff168151811061398457fe5b600160a060020a039092166020928302909101820152850151828263ffffffff16815181106139af57fe5b67ffffffffffffffff9092166020928302909101909101526001016138f0565b509097909650945050505050565b6139e5615d41565b6139ed615dd2565b60025460a060020a900460ff1615613a0457600080fd5b60018054613a7a91600160a060020a0390911690630bd6c7699060009087826040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b1515610a8157600080fd5b91506000825160ff1611613a8d57600080fd5b816040015160ff166001141515613aa357600080fd5b600154613b1590600160a060020a0316630bd6c7696000600287826040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b1515610bb157600080fd5b9050600160a060020a0333168151600160a060020a031614613b3657600080fd5b60006040830181905260018054600160a060020a031691630647b1069186613b5d87614de9565b60405163ffffffff86811660e060020a028252600160a060020a039590951660048201526024810193909352921660448201526064810191909152608401600060405180830381600087803b1515613bb457600080fd5b6102c65a03f11515613bc557600080fd5b50505033600160a060020a03167f1fb384cbe837fb1441757fd8f31fa39bd2364252604125b500e1897ae8e555348460405163ffffffff909116815260200160405180910390a2505050565b60005433600160a060020a03908116911614613c2c57600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60008054819033600160a060020a03908116911614613c7957600080fd5b600154600160a060020a0316630bd6c7696000600581806040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b151561106157600080fd5b60005433600160a060020a03908116911614613cfd57600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b613d34615ce3565b613d3c615cf5565b60025460009060a060020a900460ff1615613d5657600080fd5b60005433600160a060020a03908116911614613d7157600080fd5b613d7a84614c0b565b9093509150600090505b8160e0015163ffffffff16811015613e2f57600154600160a060020a0316630647b10685600884613dc9888281518110613dba57fe5b90602001906020020151615285565b60405163ffffffff86811660e060020a028252949094166004850152602484019290925260448301526064820152608401600060405180830381600087803b1515613e1357600080fd5b6102c65a03f11515613e2457600080fd5b505050600101613d84565b50505050565b613e3d615d41565b613e45615d41565b613e4d615ce3565b838152613e6181600063ffffffff6152d416565b60ff168252613e7781600263ffffffff6152d416565b60ff166040830152613e9081600463ffffffff6152f416565b63ffffffff9081166080840152613eac9082906008906152f416565b63ffffffff90811660a0840152613ec8908290600c906152f416565b63ffffffff90811660c0840152613ee49082906010906152f416565b63ffffffff90811660e0840152613f0090829060149061531716565b61ffff16610100830152613f1b81601863ffffffff61533816565b67ffffffffffffffff166101408301525092915050565b613f3a615cf5565b613f42615cf5565b613f4a615ce3565b838152613f5e81600063ffffffff6152d416565b60ff168252613f7481600163ffffffff6152d416565b60ff166020830152613f8d81600263ffffffff6152d416565b60ff166040830152613fa681600363ffffffff6152d416565b60ff166060830152613fbf81600463ffffffff61535f16565b69ffffffffffffffffffff166080830152613fe181600e63ffffffff6152d416565b60ff1660a0830152613ffa81600f63ffffffff6152f416565b63ffffffff90811660c08401526140169082906013906152f416565b63ffffffff90811660e08401526140329082906017906152d416565b60ff166101008301525092915050565b61404a615dd2565b614052615dd2565b61405a615ce3565b83815261406e81600063ffffffff61538816565b600160a060020a0316825261408a81601463ffffffff6152f416565b63ffffffff1660208301525092915050565b6140a5816153ae565b600254600160a060020a0316637e638974610240830151836102600151846102800151856102a0015160006040516060015260405160e060020a63ffffffff87160281526004810194909452602484019290925260448301526064820152608401606060405180830381600087803b151561411f57600080fd5b6102c65a03f1151561413057600080fd5b505050604051805190602001805190602001805167ffffffffffffffff166103c085015250600790810b810b61034084015290810b900b610320820152614176816153d5565b600a340461038082019081525134036103a0820152600154600160a060020a0316630bd6c7696000600581806040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b15156141f457600080fd5b6102c65a03f1151561420557600080fd5b50505060405180519050610380820181815101905250600154600160a060020a0316630bd6c769600060066102c085015160006040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b151561428f57600080fd5b6102c65a03f115156142a057600080fd5b505050604051805190506103a0820181815101905250600154600160a060020a0316630647b106600060058161038086015160405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b151561432257600080fd5b6102c65a03f1151561433357600080fd5b5050600154600160a060020a03169050630647b106600060066102c0850151856103a0015160405163ffffffff86811660e060020a028252600160a060020a039590951660048201526024810193909352921660448201526064810191909152608401600060405180830381600087803b15156143af57600080fd5b6102c65a03f115156143c057600080fd5b5050600154600160a060020a03169050630647b106600060076102c08501516143ed866102200151614f35565b60405163ffffffff86811660e060020a028252600160a060020a039590951660048201526024810193909352921660448201526064810191909152608401600060405180830381600087803b151561444457600080fd5b6102c65a03f1151561445557600080fd5b5050600154600160a060020a031690503480156108fc0290604051600060405180830381858888f19350505050151561448d57600080fd5b33600160a060020a03167fbc6a49a3bfd3c950d55a640741c984eb090baca50cd8433c70b74bd2617950ab826102c0015183610320015184610340015160405163ffffffff9093168352600791820b820b6020840152810b900b6040808301919091526060909101905180910390a250565b6000614509615d9d565b6000806000614516615d41565b6000614520615dd2565b61ffff8c166000908152600360205260409020805490985060ff16151561454657600080fd5b8915614568578754610100900467ffffffffffffffff16341461456857600080fd5b6001546145d490600160a060020a0316630bd6c76960008080806040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b1515611c4557600080fd5b600154909750600160a060020a0316630bd6c7696000600581806040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b151561464057600080fd5b6102c65a03f1151561465157600080fd5b50505060405180519650879050805160010163ffffffff169052865194506146788b6137c0565b600180855261ffff8e16610100860152600060408601520193506002424189516000604051602001526040518084815260200183600160a060020a0316600160a060020a03166c010000000000000000000000000281526014018263ffffffff1663ffffffff1660e060020a028152600401935050505060206040518083038160008661646e5a03f1151561470c57600080fd5b505060405180518954909350614754915063ffffffff690100000000000000000082048116916d01000000000000000000000000009004168460005b1a60f860020a026157e5565b63ffffffff908116608085015288546147a1917101000000000000000000000000000000000082048116917501000000000000000000000000000000000000000000900416846001614748565b63ffffffff90811660a0850152885460018a01546147cd9260c860020a90920482169116846002614748565b63ffffffff90811660c0850152600189015461480391640100000000820481169168010000000000000000900416846003614748565b63ffffffff90811660e08501526001898101546c01000000000000000000000000900467ffffffffffffffff16610140860152600160a060020a038d8116845260001987018316602085015290543498909801971690630647b106908d9060039088908a1660405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b15156148b857600080fd5b6102c65a03f115156148c957600080fd5b5050600154600160a060020a03169050630647b1068c600360008860405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b151561493457600080fd5b6102c65a03f1151561494557600080fd5b505060018054600160a060020a03169150630647b106906000908861496988614de9565b60405163ffffffff86811660e060020a028252600160a060020a039590951660048201526024810193909352921660448201526064810191909152608401600060405180830381600087803b15156149c057600080fd5b6102c65a03f115156149d157600080fd5b5050600154600160a060020a03169050630647b10660006002886149f4866151c7565b60405163ffffffff86811660e060020a028252600160a060020a039590951660048201526024810193909352921660448201526064810191909152608401600060405180830381600087803b1515614a4b57600080fd5b6102c65a03f11515614a5c57600080fd5b5050600154600160a060020a03169050630647b10660008080614a7e8c6150d0565b60405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b1515614ace57600080fd5b6102c65a03f11515614adf57600080fd5b5050508915614b9857600154600160a060020a0316630647b10660006005818a60405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b1515614b4f57600080fd5b6102c65a03f11515614b6057600080fd5b5050600154600160a060020a031690503480156108fc0290604051600060405180830381858888f193505050501515614b9857600080fd5b8a600160a060020a03167fea0aee148209a01ccf8bff07fa316fc18ab073d469a1c9870818b3e5913ff0e38d878c60405161ffff909316835263ffffffff919091166020830152600160a060020a03166040808301919091526060909101905180910390a2505050505050505050505050565b614c13615ce3565b614c1b615cf5565b600154600090614c8f90600160a060020a0316630bd6c76983600788826040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b1515610b1957600080fd5b9150600b604051805910614ca05750595b908082528060200260200182016040528015614cd657816020015b614cc3615e12565b815260200190600190039081614cbb5790505b509250600090505b8160e0015163ffffffff16811015614d7557600154614d5790600160a060020a0316630bd6c7698660088560006040516020015260405163ffffffff85811660e060020a02825293909316600484015260248301919091526044820152606401602060405180830381600087803b151561165f57600080fd5b838281518110614d6357fe5b60209081029091010152600101614cde565b614d83838360e001516157fc565b50915091565b600084614d978686856157e5565b038301925084831080614da957508383115b15614db2578392505b50909392505050565b600084614dc98686856157e5565b038303925084831080614ddb57508383115b15614db25750929392505050565b6000614df3615ce3565b614e086000845183919063ffffffff61594316565b614e206002846040015183919063ffffffff61594316565b614e386004846080015183919063ffffffff61596216565b614e5060088460a0015183919063ffffffff61596216565b614e68600c8460c0015183919063ffffffff61596216565b614e8060108460e0015183919063ffffffff61596216565b614e99601484610100015183919063ffffffff61598116565b614eb2601884610140015183919063ffffffff6159a116565b80519392505050565b614ec3615e12565b614ecb615e12565b614ed3615ce3565b838152614ee781600063ffffffff61538816565b600160a060020a03168252614f0381601463ffffffff61533816565b67ffffffffffffffff166020830152614f2381601c63ffffffff6152f416565b63ffffffff1660408301525092915050565b6000614f3f615ce3565b614f546000845183919063ffffffff61594316565b614f6c6001846020015183919063ffffffff61594316565b614f846002846040015183919063ffffffff61594316565b614f9c6003846060015183919063ffffffff61594316565b614fb46004846080015183919063ffffffff6159c716565b614fcc600e8460a0015183919063ffffffff61594316565b614fe4600f8460c0015183919063ffffffff61596216565b614ffc60138460e0015183919063ffffffff61596216565b614eb2601784610100015183919063ffffffff61594316565b61501d615d9d565b615025615d9d565b61502d615ce3565b83815261504181600063ffffffff6152f416565b63ffffffff908116835261505a9082906004906152f416565b63ffffffff90811660208401526150769082906008906152d416565b60ff16604083015261508f81600963ffffffff6152d416565b60ff1660608301526150a881600a63ffffffff6152d416565b60ff1660808301526150c181600b63ffffffff6152d416565b60ff1660a08301525092915050565b60006150da615ce3565b6150ef6000845183919063ffffffff61596216565b6151076004846020015183919063ffffffff61596216565b61511f6008846040015183919063ffffffff61594316565b6151376009846060015183919063ffffffff61594316565b61514f600a846080015183919063ffffffff61594316565b614eb2600b8460a0015183919063ffffffff61594316565b6000615171615ce3565b614eb26000845183919063ffffffff6159c716565b61518e615ce3565b615196615ce3565b61519e615ce3565b8381526151b281600063ffffffff61535f16565b69ffffffffffffffffffff1682525092915050565b60006151d1615ce3565b6151e66000845183919063ffffffff6159ef16565b614eb26014846020015183919063ffffffff61596216565b6000615208615dd2565b60015461527a90600160a060020a0316630bd6c7696000600287826040516020015260405163ffffffff85811660e060020a028252600160a060020a0394909416600482015260248101929092529091166044820152606401602060405180830381600087803b1515610bb157600080fd5b905080519392505050565b600061528f615ce3565b6152a46000845183919063ffffffff6159ef16565b6152bc6014846020015183919063ffffffff6159a116565b614eb2601c846040015183919063ffffffff61596216565b600063ffffffff6008830216835160029190910a900460ff169392505050565b600063ffffffff6008830216835160029190910a900463ffffffff169392505050565b600063ffffffff6008830216835160029190910a900461ffff169392505050565b600063ffffffff6008830216835160029190910a900467ffffffffffffffff169392505050565b600063ffffffff6008830216835160029190910a900469ffffffffffffffffffff169392505050565b600063ffffffff6008830216835160029190910a9004600160a060020a03169392505050565b6153b781615a14565b6153c081615a88565b6153c981615aff565b6153d281615b7a565b50565b6153dd615e12565b6153e5615e12565b6000806000856103600151600160a060020a031685526103c086015167ffffffffffffffff1660208601526102e086015163ffffffff166040860152600092505b85610220015160e0015163ffffffff168363ffffffff16101561558e576001546154b190600160a060020a0316630bd6c7696102c089015160088760006040516020015260405163ffffffff85811660e060020a028252938416600482015260248101929092529091166044820152606401602060405180830381600087803b151561165f57600080fd5b9350856103600151600160a060020a03168451600160a060020a0316141561558357836020015167ffffffffffffffff16866103c0015167ffffffffffffffff16101561557e57600154600160a060020a0316630647b1066102c088015160088661551b8a615285565b60405163ffffffff86811660e060020a02825294851660048201526024810193909352921660448201526064810191909152608401600060405180830381600087803b151561556957600080fd5b6102c65a03f1151561557a57600080fd5b5050505b6109d4565b600190920191615426565b600a86610220015160e0015163ffffffff16101561564f57600154600160a060020a0316630647b1066102c0880151600889610220015160e001516155d28a615285565b60405163ffffffff86811660e060020a02825294851660048201526024810193909352921660448201526064810191909152608401600060405180830381600087803b151561562057600080fd5b6102c65a03f1151561563157600080fd5b50505085610220015160e001805160010163ffffffff1690526109d4565b506000915081905063ffffffff5b85610220015160e0015163ffffffff168363ffffffff161015615720576001546156e890600160a060020a0316630bd6c7696102c089015160088760006040516020015260405163ffffffff85811660e060020a028252938416600482015260248101929092529091166044820152606401602060405180830381600087803b151561165f57600080fd5b93508167ffffffffffffffff16846020015167ffffffffffffffff16111561571557836020015191508290505b60019092019161565d565b63ffffffff808216146109d45760015461579b90600160a060020a0316630bd6c7696102c089015160088560006040516020015260405163ffffffff85811660e060020a028252938416600482015260248101929092529091166044820152606401602060405180830381600087803b151561165f57600080fd5b9350836020015167ffffffffffffffff16866103c0015167ffffffffffffffff1610156109d457600154600160a060020a0316630647b1066102c088015160088461551b8a615285565b60649183900360f860020a90910482900602040190565b806000805b506000905060015b8263ffffffff168163ffffffff16101561592b57848163ffffffff168151811061582f57fe5b906020019060200201516020015167ffffffffffffffff16856001830363ffffffff168151811061585c57fe5b906020019060200201516020015167ffffffffffffffff16111561592357846001820363ffffffff168151811061588f57fe5b9060200190602002015185600a815181106158a657fe5b602090810290910101528463ffffffff8216815181106158c257fe5b90602001906020020151856001830363ffffffff16815181106158e157fe5b6020908102909101015284600a815181106158f857fe5b90602001906020020151858263ffffffff168151811061591457fe5b60209081029091010152600191505b600101615809565b6000199092019181151561593e57611a3a565b615801565b63ffffffff600883021660020a60ff8216028381815117905250505050565b63ffffffff60088302811660020a908216028381815117905250505050565b63ffffffff600883021660020a61ffff8216028381815117905250505050565b63ffffffff600883021660020a67ffffffffffffffff8216028381815117905250505050565b63ffffffff600883021660020a69ffffffffffffffffffff8216028381815117905250505050565b63ffffffff600883021660020a600160a060020a038216028381815117905250505050565b615a1c615ce3565b615a316000835183919063ffffffff6159a116565b615a496008836020015183919063ffffffff6159a116565b615a616010836040015183919063ffffffff6159a116565b615a796018836060015183919063ffffffff6159a116565b80516102409092019190915250565b615a90615ce3565b615aa86000836080015183919063ffffffff6159a116565b615ac060088360a0015183919063ffffffff6159a116565b615ad860108360c0015183919063ffffffff6159a116565b615af060188360e0015183919063ffffffff6159a116565b80516102609092019190915250565b615b07615ce3565b615b20600083610100015183919063ffffffff6159a116565b615b39600883610120015183919063ffffffff6159a116565b615b52601083610140015183919063ffffffff6159a116565b615b6b601883610160015183919063ffffffff6159a116565b80516102809092019190915250565b615b82615ce3565b615b9b600083610180015183919063ffffffff6159a116565b615bb46008836101a0015183919063ffffffff6159a116565b615bcd6010836101c0015183919063ffffffff6159a116565b80516102a09092019190915250565b6106406040519081016040908152600080835260208301819052908201819052606082018190526080820181905260a0820181905260c0820181905260e08201819052610100820181905261012082018190526101408201819052610160820181905261018082018190526101a082018190526101c08201526101e08101615c62615d41565b8152602001615c6f615dd2565b8152602001615c7c615cf5565b815260006020820181905260408201819052606082018190526080820181905260a0820181905260c0820181905260e08201819052610100820181905261012082018190526101408201819052610160820181905261018082018190526101a09091015290565b60206040519081016040526000815290565b6101206040519081016040908152600080835260208301819052908201819052606082018190526080820181905260a0820181905260c0820181905260e0820181905261010082015290565b6101606040519081016040908152600080835260208301819052908201819052606082018190526080820181905260a0820181905260c0820181905260e082018190526101008201819052610120820181905261014082015290565b60c06040519081016040908152600080835260208301819052908201819052606082018190526080820181905260a082015290565b604080519081016040526000808252602082015290565b6101006040519081016040526008815b600081526000199091019060200181615df95790505090565b6060604051908101604090815260008083526020830181905290820152905600a165627a7a72305820ea854ea4a55143f54b23e92811990e289365f5cf1940197a6d67b24e17a1232a0029
Swarm Source
bzzr://ea854ea4a55143f54b23e92811990e289365f5cf1940197a6d67b24e17a1232a
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.