More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 7,678 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Sell Unit | 20551435 | 130 days ago | IN | 0 ETH | 0.00008826 | ||||
Sell Unit | 20551416 | 130 days ago | IN | 0 ETH | 0.00009416 | ||||
Sell Unit | 20551126 | 130 days ago | IN | 0 ETH | 0.00009278 | ||||
Sell Unit | 20551114 | 130 days ago | IN | 0 ETH | 0.00010781 | ||||
Sell Unit | 13860877 | 1098 days ago | IN | 0 ETH | 0.00440168 | ||||
Sell Unit | 11855801 | 1410 days ago | IN | 0 ETH | 0.00852474 | ||||
Sell Unit | 11855801 | 1410 days ago | IN | 0 ETH | 0.01676682 | ||||
Sell Unit | 11792185 | 1420 days ago | IN | 0 ETH | 0.00930708 | ||||
Sell Unit | 11787419 | 1420 days ago | IN | 0 ETH | 0.01457545 | ||||
Sell Unit | 11787117 | 1420 days ago | IN | 0 ETH | 0.00937397 | ||||
Sell Unit | 11785516 | 1421 days ago | IN | 0 ETH | 0.00960468 | ||||
Sell Unit | 11162815 | 1516 days ago | IN | 0 ETH | 0.00046272 | ||||
Sell Unit | 11162806 | 1516 days ago | IN | 0 ETH | 0.0004604 | ||||
Sell Unit | 11162695 | 1516 days ago | IN | 0 ETH | 0.00189236 | ||||
Sell Unit | 11162686 | 1516 days ago | IN | 0 ETH | 0.00190232 | ||||
Sell Unit | 11162675 | 1516 days ago | IN | 0 ETH | 0.00043958 | ||||
Sell Unit | 11162626 | 1516 days ago | IN | 0 ETH | 0.00323327 | ||||
Sell Unit | 11162615 | 1516 days ago | IN | 0 ETH | 0.00168856 | ||||
Sell Unit | 11162601 | 1516 days ago | IN | 0 ETH | 0.00172858 | ||||
Sell Unit | 10970156 | 1546 days ago | IN | 0 ETH | 0.00472205 | ||||
Sell Unit | 10292734 | 1650 days ago | IN | 0 ETH | 0.00363708 | ||||
Sell Unit | 10292730 | 1650 days ago | IN | 0 ETH | 0.00195081 | ||||
Sell Unit | 10080445 | 1683 days ago | IN | 0 ETH | 0.00109571 | ||||
Buy Unit | 9968327 | 1701 days ago | IN | 0 ETH | 0.00134539 | ||||
Sell Unit | 9905737 | 1711 days ago | IN | 0 ETH | 0.00016007 |
Advanced mode: Intended for advanced users or developers and will display all Internal Transactions including zero value transfers. Name tag integration is not available in advanced view.
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
||||
---|---|---|---|---|---|---|---|
20637852 | 117 days ago | 0 ETH | |||||
20637852 | 117 days ago | 0 ETH | |||||
20637852 | 117 days ago | 0 ETH | |||||
20637842 | 117 days ago | 0 ETH | |||||
20637842 | 117 days ago | 0 ETH | |||||
20637842 | 117 days ago | 0 ETH | |||||
20637842 | 117 days ago | 0 ETH | |||||
20637842 | 117 days ago | 0 ETH | |||||
20637835 | 117 days ago | 0 ETH | |||||
20637835 | 117 days ago | 0 ETH | |||||
20637835 | 117 days ago | 0 ETH | |||||
20637835 | 117 days ago | 0 ETH | |||||
20637835 | 117 days ago | 0 ETH | |||||
20637835 | 117 days ago | 0 ETH | |||||
20637823 | 117 days ago | 0 ETH | |||||
20637823 | 117 days ago | 0 ETH | |||||
20637823 | 117 days ago | 0 ETH | |||||
20637818 | 117 days ago | 0 ETH | |||||
20637818 | 117 days ago | 0 ETH | |||||
20637818 | 117 days ago | 0 ETH | |||||
20637812 | 117 days ago | 0 ETH | |||||
20637812 | 117 days ago | 0 ETH | |||||
20637812 | 117 days ago | 0 ETH | |||||
20637797 | 117 days ago | 0 ETH | |||||
20637797 | 117 days ago | 0 ETH |
Loading...
Loading
Contract Name:
Units
Compiler Version
v0.4.25+commit.59dbf8f1
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2019-05-05 */ pragma solidity ^0.4.25; /** * * World War Goo - Competitive Idle Game * * https://ethergoo.io * */ contract Units { GooToken constant goo = GooToken(0xdf0960778c6e6597f197ed9a25f12f5d971da86c); Army army = Army(0x0); Clans clans = Clans(0x0); Factories constant factories = Factories(0xc81068cd335889736fc485592e4d73a82403d44b); mapping(address => mapping(uint256 => UnitsOwned)) public unitsOwned; mapping(address => mapping(uint256 => UnitExperience)) public unitExp; mapping(address => mapping(uint256 => uint256)) private unitMaxCap; mapping(address => mapping(uint256 => UnitUpgrades)) private unitUpgrades; mapping(address => mapping(uint256 => UpgradesOwned)) public upgradesOwned; // For each unitId, which upgrades owned (3 columns of uint64) mapping(uint256 => Unit) public unitList; mapping(uint256 => Upgrade) public upgradeList; mapping(address => bool) operator; address owner; constructor() public { owner = msg.sender; } struct UnitsOwned { uint80 units; uint8 factoryBuiltFlag; // Incase user sells units, we still want to keep factory } struct UnitExperience { uint224 experience; uint32 level; } struct UnitUpgrades { uint32 prodIncrease; uint32 prodMultiplier; uint32 attackIncrease; uint32 attackMultiplier; uint32 defenseIncrease; uint32 defenseMultiplier; uint32 lootingIncrease; uint32 lootingMultiplier; } struct UpgradesOwned { uint64 column0; uint64 column1; uint64 column2; } // Unit & Upgrade data: struct Unit { uint256 unitId; uint224 gooCost; uint256 baseProduction; uint80 attack; uint80 defense; uint80 looting; } struct Upgrade { uint256 upgradeId; uint224 gooCost; uint256 unitId; uint256 column; // Columns of upgrades (1st & 2nd are unit specific, then 3rd is capacity) uint256 prerequisiteUpgrade; uint256 unitMaxCapacityGain; uint32 prodIncrease; uint32 prodMultiplier; uint32 attackIncrease; uint32 attackMultiplier; uint32 defenseIncrease; uint32 defenseMultiplier; uint32 lootingIncrease; uint32 lootingMultiplier; } function setArmy(address armyContract) external { require(msg.sender == owner); army = Army(armyContract); } function setClans(address clansContract) external { require(msg.sender == owner); clans = Clans(clansContract); } function setOperator(address gameContract, bool isOperator) external { require(msg.sender == owner); operator[gameContract] = isOperator; } function mintUnitExternal(uint256 unit, uint80 amount, address player, uint8 chosenPosition) external { require(operator[msg.sender]); mintUnit(unit, amount, player, chosenPosition); } function mintUnit(uint256 unit, uint80 amount, address player, uint8 chosenPosition) internal { UnitsOwned storage existingUnits = unitsOwned[player][unit]; if (existingUnits.factoryBuiltFlag == 0) { // Edge case to create factory for player (on empty tile) where it is their first unit uint256[] memory existingFactories = factories.getFactories(player); uint256 length = existingFactories.length; // Provided position is not valid so find valid factory position if (chosenPosition >= factories.MAX_SIZE() || (chosenPosition < length && existingFactories[chosenPosition] > 0)) { chosenPosition = 0; while (chosenPosition < length && existingFactories[chosenPosition] > 0) { chosenPosition++; } } factories.addFactory(player, chosenPosition, unit); unitsOwned[player][unit] = UnitsOwned(amount, 1); // 1 = Flag to say factory exists } else { existingUnits.units += amount; } (uint80 attackStats, uint80 defenseStats, uint80 lootingStats) = getUnitsCurrentBattleStats(player, unit); if (attackStats > 0 || defenseStats > 0 || lootingStats > 0) { army.increasePlayersArmyPowerTrio(player, attackStats * amount, defenseStats * amount, lootingStats * amount); } else { uint256 prodIncrease = getUnitsCurrentProduction(player, unit) * amount; goo.increasePlayersGooProduction(player, prodIncrease / 100); } } function deleteUnitExternal(uint80 amount, uint256 unit, address player) external { require(operator[msg.sender]); deleteUnit(amount, unit, player); } function deleteUnit(uint80 amount, uint256 unit, address player) internal { (uint80 attackStats, uint80 defenseStats, uint80 lootingStats) = getUnitsCurrentBattleStats(player, unit); if (attackStats > 0 || defenseStats > 0 || lootingStats > 0) { army.decreasePlayersArmyPowerTrio(player, attackStats * amount, defenseStats * amount, lootingStats * amount); } else { uint256 prodDecrease = getUnitsCurrentProduction(player, unit) * amount; goo.decreasePlayersGooProduction(player, prodDecrease / 100); } unitsOwned[player][unit].units -= amount; } function getUnitsCurrentBattleStats(address player, uint256 unitId) internal view returns (uint80 attack, uint80 defense, uint80 looting) { Unit memory unit = unitList[unitId]; UnitUpgrades memory existingUpgrades = unitUpgrades[player][unitId]; attack = (unit.attack + existingUpgrades.attackIncrease) * (100 + existingUpgrades.attackMultiplier); defense = (unit.defense + existingUpgrades.defenseIncrease) * (100 + existingUpgrades.defenseMultiplier); looting = (unit.looting + existingUpgrades.lootingIncrease) * (100 + existingUpgrades.lootingMultiplier); } function getUnitsCurrentProduction(address player, uint256 unitId) public view returns (uint256) { UnitUpgrades memory existingUpgrades = unitUpgrades[player][unitId]; return (unitList[unitId].baseProduction + existingUpgrades.prodIncrease) * (100 + existingUpgrades.prodMultiplier); } function buyUnit(uint256 unitId, uint80 amount, uint8 position) external { uint224 gooCost = SafeMath224.mul(unitList[unitId].gooCost, amount); require(gooCost > 0); // Valid unit uint80 newTotal = unitsOwned[msg.sender][unitId].units + amount; if (newTotal > 99) { require(newTotal < 99 + unitMaxCap[msg.sender][unitId]); } // Clan discount uint224 unitDiscount = clans.getPlayersClanUpgrade(msg.sender, 1); // class 1 = unit discount uint224 reducedGooCost = gooCost - ((gooCost * unitDiscount) / 100); uint224 seventyFivePercentRefund = (gooCost * 3) / 4; // Update players goo goo.updatePlayersGooFromPurchase(msg.sender, reducedGooCost); goo.mintGoo(seventyFivePercentRefund, this); // 75% refund is stored (in this contract) for when player sells unit army.depositSpentGoo(reducedGooCost - seventyFivePercentRefund); // Upto 25% Goo spent goes to divs (Remaining is discount + 75% player gets back when selling unit) mintUnit(unitId, amount, msg.sender, position); } function sellUnit(uint256 unitId, uint80 amount) external { require(unitsOwned[msg.sender][unitId].units >= amount && amount > 0); uint224 gooCost = unitList[unitId].gooCost; require(gooCost > 0); goo.updatePlayersGoo(msg.sender); deleteUnit(amount, unitId, msg.sender); goo.transfer(msg.sender, (gooCost * amount * 3) / 4); // Refund 75% } function grantArmyExp(address player, uint256 unitId, uint224 amount) external returns(bool) { require(operator[msg.sender]); UnitExperience memory existingExp = unitExp[player][unitId]; uint224 expRequirement = (existingExp.level + 1) * 80; // Lvl 1: 80; Lvl 2: 160, Lvl 3: 240 (480 in total) etc. if (existingExp.experience + amount >= expRequirement) { existingExp.experience = (existingExp.experience + amount) - expRequirement; existingExp.level++; unitExp[player][unitId] = existingExp; // Grant buff to unit (5% additive multiplier) UnitUpgrades memory existingUpgrades = unitUpgrades[player][unitId]; existingUpgrades.attackMultiplier += 5; existingUpgrades.defenseMultiplier += 5; existingUpgrades.lootingMultiplier += 5; unitUpgrades[player][unitId] = existingUpgrades; // Increase player's army power uint80 multiplierGain = unitsOwned[player][unitId].units * 5; Unit memory unit = unitList[unitId]; uint80 attackGain = multiplierGain * (unit.attack + existingUpgrades.attackIncrease); uint80 defenseGain = multiplierGain * (unit.defense + existingUpgrades.defenseIncrease); uint80 lootingGain = multiplierGain * (unit.looting + existingUpgrades.lootingIncrease); army.increasePlayersArmyPowerTrio(player, attackGain, defenseGain, lootingGain); return true; } else { unitExp[player][unitId].experience += amount; return false; } } function increaseUnitCapacity(address player, uint256 upgradeGain, uint256 unitId) external { require(operator[msg.sender]); unitMaxCap[player][unitId] += upgradeGain; } function decreaseUnitCapacity(address player, uint256 upgradeGain, uint256 unitId) external { require(operator[msg.sender]); unitMaxCap[player][unitId] -= upgradeGain; } function increaseUpgradesExternal(address player, uint256 unitId, uint32 prodIncrease, uint32 prodMultiplier, uint32 attackIncrease, uint32 attackMultiplier, uint32 defenseIncrease, uint32 defenseMultiplier, uint32 lootingIncrease, uint32 lootingMultiplier) external { require(operator[msg.sender]); Upgrade memory upgrade = Upgrade(0,0,0,0,0,0, prodIncrease, prodMultiplier, attackIncrease, attackMultiplier, defenseIncrease, defenseMultiplier, lootingIncrease, lootingMultiplier); increaseUpgrades(player, upgrade, unitId); } function increaseUpgrades(address player, Upgrade upgrade, uint256 unitId) internal { uint80 units = unitsOwned[player][unitId].units; UnitUpgrades memory existingUpgrades = unitUpgrades[player][unitId]; Unit memory unit = unitList[unitId]; if (unit.baseProduction > 0) { // Increase goo production uint256 prodGain = units * upgrade.prodMultiplier * (unit.baseProduction + existingUpgrades.prodIncrease); // Multiplier gains prodGain += units * upgrade.prodIncrease * (100 + existingUpgrades.prodMultiplier); // Base prod gains goo.updatePlayersGoo(player); goo.increasePlayersGooProduction(player, prodGain / 100); } else { // Increase army power uint80 attackGain = units * upgrade.attackMultiplier * (unit.attack + existingUpgrades.attackIncrease); // Multiplier gains uint80 defenseGain = units * upgrade.defenseMultiplier * (unit.defense + existingUpgrades.defenseIncrease); // Multiplier gains uint80 lootingGain = units * upgrade.lootingMultiplier * (unit.looting + existingUpgrades.lootingIncrease); // Multiplier gains attackGain += units * upgrade.attackIncrease * (100 + existingUpgrades.attackMultiplier); // + Base gains defenseGain += units * upgrade.defenseIncrease * (100 + existingUpgrades.defenseMultiplier); // + Base gains lootingGain += units * upgrade.lootingIncrease * (100 + existingUpgrades.lootingMultiplier); // + Base gains army.increasePlayersArmyPowerTrio(player, attackGain, defenseGain, lootingGain); } existingUpgrades.prodIncrease += upgrade.prodIncrease; existingUpgrades.prodMultiplier += upgrade.prodMultiplier; existingUpgrades.attackIncrease += upgrade.attackIncrease; existingUpgrades.attackMultiplier += upgrade.attackMultiplier; existingUpgrades.defenseIncrease += upgrade.defenseIncrease; existingUpgrades.defenseMultiplier += upgrade.defenseMultiplier; existingUpgrades.lootingIncrease += upgrade.lootingIncrease; existingUpgrades.lootingMultiplier += upgrade.lootingMultiplier; unitUpgrades[player][unitId] = existingUpgrades; } function decreaseUpgradesExternal(address player, uint256 unitId, uint32 prodIncrease, uint32 prodMultiplier, uint32 attackIncrease, uint32 attackMultiplier, uint32 defenseIncrease, uint32 defenseMultiplier, uint32 lootingIncrease, uint32 lootingMultiplier) external { require(operator[msg.sender]); Upgrade memory upgrade = Upgrade(0,0,0,0,0,0, prodIncrease, prodMultiplier, attackIncrease, attackMultiplier, defenseIncrease, defenseMultiplier, lootingIncrease, lootingMultiplier); decreaseUpgrades(player, upgrade, unitId); } function decreaseUpgrades(address player, Upgrade upgrade, uint256 unitId) internal { uint80 units = unitsOwned[player][unitId].units; UnitUpgrades memory existingUpgrades = unitUpgrades[player][unitId]; Unit memory unit = unitList[unitId]; if (unit.baseProduction > 0) { // Decrease goo production uint256 prodLoss = units * upgrade.prodMultiplier * (unit.baseProduction + existingUpgrades.prodIncrease); // Multiplier losses prodLoss += units * upgrade.prodIncrease * (100 + existingUpgrades.prodMultiplier); // Base prod losses goo.updatePlayersGoo(player); goo.decreasePlayersGooProduction(player, prodLoss / 100); } else { // Decrease army power uint80 attackLoss = units * upgrade.attackMultiplier * (unit.attack + existingUpgrades.attackIncrease); // Multiplier losses uint80 defenseLoss = units * upgrade.defenseMultiplier * (unit.defense + existingUpgrades.defenseIncrease); // Multiplier losses uint80 lootingLoss = units * upgrade.lootingMultiplier * (unit.looting + existingUpgrades.lootingIncrease); // Multiplier losses attackLoss += units * upgrade.attackIncrease * (100 + existingUpgrades.attackMultiplier); // + Base losses defenseLoss += units * upgrade.defenseIncrease * (100 + existingUpgrades.defenseMultiplier); // + Base losses lootingLoss += units * upgrade.lootingIncrease * (100 + existingUpgrades.lootingMultiplier); // + Base losses army.decreasePlayersArmyPowerTrio(player, attackLoss, defenseLoss, lootingLoss); } existingUpgrades.prodIncrease -= upgrade.prodIncrease; existingUpgrades.prodMultiplier -= upgrade.prodMultiplier; existingUpgrades.attackIncrease -= upgrade.attackIncrease; existingUpgrades.attackMultiplier -= upgrade.attackMultiplier; existingUpgrades.defenseIncrease -= upgrade.defenseIncrease; existingUpgrades.defenseMultiplier -= upgrade.defenseMultiplier; existingUpgrades.lootingIncrease -= upgrade.lootingIncrease; existingUpgrades.lootingMultiplier -= upgrade.lootingMultiplier; unitUpgrades[player][unitId] = existingUpgrades; } function swapUpgradesExternal(address player, uint256 unitId, uint32[8] upgradeGains, uint32[8] upgradeLosses) external { require(operator[msg.sender]); UnitUpgrades memory existingUpgrades = unitUpgrades[player][unitId]; Unit memory unit = unitList[unitId]; if (unit.baseProduction > 0) { // Change goo production gooProductionChange(player, unitId, existingUpgrades, unit.baseProduction, upgradeGains, upgradeLosses); } else { // Change army power armyPowerChange(player, existingUpgrades, unit, upgradeGains, upgradeLosses); } } function armyPowerChange(address player, UnitUpgrades existingUpgrades, Unit unit, uint32[8] upgradeGains, uint32[8] upgradeLosses) internal { int256 existingAttack = int256((unit.attack + existingUpgrades.attackIncrease) * (100 + existingUpgrades.attackMultiplier)); int256 existingDefense = int256((unit.defense + existingUpgrades.defenseIncrease) * (100 + existingUpgrades.defenseMultiplier)); int256 existingLooting = int256((unit.looting + existingUpgrades.lootingIncrease) * (100 + existingUpgrades.lootingMultiplier)); existingUpgrades.attackIncrease = uint32(int(existingUpgrades.attackIncrease) + (int32(upgradeGains[2]) - int32(upgradeLosses[2]))); existingUpgrades.attackMultiplier = uint32(int(existingUpgrades.attackMultiplier) + (int32(upgradeGains[3]) - int32(upgradeLosses[3]))); existingUpgrades.defenseIncrease = uint32(int(existingUpgrades.defenseIncrease) + (int32(upgradeGains[4]) - int32(upgradeLosses[4]))); existingUpgrades.defenseMultiplier = uint32(int(existingUpgrades.defenseMultiplier) + (int32(upgradeGains[5]) - int32(upgradeLosses[5]))); existingUpgrades.lootingIncrease = uint32(int(existingUpgrades.lootingIncrease) + (int32(upgradeGains[6]) - int32(upgradeLosses[6]))); existingUpgrades.lootingMultiplier = uint32(int(existingUpgrades.lootingMultiplier) + (int32(upgradeGains[7]) - int32(upgradeLosses[7]))); int256 attackChange = ((int256(unit.attack) + existingUpgrades.attackIncrease) * (100 + existingUpgrades.attackMultiplier)) - existingAttack; int256 defenseChange = ((int256(unit.defense) + existingUpgrades.defenseIncrease) * (100 + existingUpgrades.defenseMultiplier)) - existingDefense; int256 lootingChange = ((int256(unit.looting) + existingUpgrades.lootingIncrease) * (100 + existingUpgrades.lootingMultiplier)) - existingLooting; uint256 unitId = unit.unitId; int256 units = int256(unitsOwned[player][unitId].units); army.changePlayersArmyPowerTrio(player, units * attackChange, units * defenseChange, units * lootingChange); unitUpgrades[player][unitId] = existingUpgrades; } function gooProductionChange(address player, uint256 unitId, UnitUpgrades existingUpgrades, uint256 baseProduction, uint32[8] upgradeGains, uint32[8] upgradeLosses) internal { goo.updatePlayersGoo(player); int256 existingProd = int256((baseProduction + existingUpgrades.prodIncrease) * (100 + existingUpgrades.prodMultiplier)); existingUpgrades.prodIncrease = uint32(int(existingUpgrades.prodIncrease) + (int32(upgradeGains[0]) - int32(upgradeLosses[0]))); existingUpgrades.prodMultiplier = uint32(int(existingUpgrades.prodMultiplier) + (int32(upgradeGains[1]) - int32(upgradeLosses[1]))); int256 prodChange = ((int256(baseProduction) + existingUpgrades.prodIncrease) * (100 + existingUpgrades.prodMultiplier)) - existingProd; if (prodChange > 0) { goo.increasePlayersGooProduction(player, (unitsOwned[player][unitId].units * uint256(prodChange)) / 100); } else { goo.decreasePlayersGooProduction(player, (unitsOwned[player][unitId].units * uint256(-prodChange)) / 100); } unitUpgrades[player][unitId] = existingUpgrades; } function addUnit(uint256 id, uint224 baseGooCost, uint256 baseGooProduction, uint80 baseAttack, uint80 baseDefense, uint80 baseLooting) external { require(operator[msg.sender]); unitList[id] = Unit(id, baseGooCost, baseGooProduction, baseAttack, baseDefense, baseLooting); } function addUpgrade(uint256 id, uint224 gooCost, uint256 unit, uint256 column, uint256 prereq, uint256 unitMaxCapacityGain, uint32[8] upgradeGains) external { require(operator[msg.sender]); upgradeList[id] = Upgrade(id, gooCost, unit, column, prereq, unitMaxCapacityGain, upgradeGains[0], upgradeGains[1], upgradeGains[2], upgradeGains[3], upgradeGains[4], upgradeGains[5], upgradeGains[6], upgradeGains[7]); } function buyUpgrade(uint64 upgradeId) external { Upgrade memory upgrade = upgradeList[upgradeId]; uint256 unitId = upgrade.unitId; UpgradesOwned memory ownedUpgrades = upgradesOwned[msg.sender][unitId]; uint64 latestUpgradeOwnedForColumn; if (upgrade.column == 0) { latestUpgradeOwnedForColumn = ownedUpgrades.column0; ownedUpgrades.column0 = upgradeId; // Update upgradesOwned } else if (upgrade.column == 1) { latestUpgradeOwnedForColumn = ownedUpgrades.column1; ownedUpgrades.column1 = upgradeId; // Update upgradesOwned } else if (upgrade.column == 2) { latestUpgradeOwnedForColumn = ownedUpgrades.column2; ownedUpgrades.column2 = upgradeId; // Update upgradesOwned } upgradesOwned[msg.sender][unitId] = ownedUpgrades; require(unitId > 0); // Valid upgrade require(latestUpgradeOwnedForColumn < upgradeId); // Haven't already purchased require(latestUpgradeOwnedForColumn >= upgrade.prerequisiteUpgrade); // Own prequisite // Clan discount uint224 upgradeDiscount = clans.getPlayersClanUpgrade(msg.sender, 0); // class 0 = upgrade discount uint224 reducedUpgradeCost = upgrade.gooCost - ((upgrade.gooCost * upgradeDiscount) / 100); // Update players goo goo.updatePlayersGooFromPurchase(msg.sender, reducedUpgradeCost); army.depositSpentGoo(reducedUpgradeCost); // Transfer to goo bankroll // Update stats for upgrade if (upgrade.column == 2) { unitMaxCap[msg.sender][unitId] += upgrade.unitMaxCapacityGain; } else if (upgrade.column == 1) { increaseUpgrades(msg.sender, upgrade, unitId); } else if (upgrade.column == 0) { increaseUpgrades(msg.sender, upgrade, unitId); } } } contract GooToken { function transfer(address to, uint256 tokens) external returns (bool); function increasePlayersGooProduction(address player, uint256 increase) external; function decreasePlayersGooProduction(address player, uint256 decrease) external; function updatePlayersGooFromPurchase(address player, uint224 purchaseCost) external; function updatePlayersGoo(address player) external; function mintGoo(uint224 amount, address player) external; } contract Army { function depositSpentGoo(uint224 gooSpent) external; function increasePlayersArmyPowerTrio(address player, uint80 attackGain, uint80 defenseGain, uint80 lootingGain) public; function decreasePlayersArmyPowerTrio(address player, uint80 attackLoss, uint80 defenseLoss, uint80 lootingLoss) public; function changePlayersArmyPowerTrio(address player, int attackChange, int defenseChange, int lootingChange) public; } contract Clans { mapping(uint256 => uint256) public clanTotalArmyPower; function totalSupply() external view returns (uint256); function depositGoo(uint256 amount, uint256 clanId) external; function getPlayerFees(address player) external view returns (uint224 clansFee, uint224 leadersFee, address leader, uint224 referalsFee, address referer); function getPlayersClanUpgrade(address player, uint256 upgradeClass) external view returns (uint224 upgradeGain); function mintGoo(address player, uint256 amount) external; function increaseClanPower(address player, uint256 amount) external; function decreaseClanPower(address player, uint256 amount) external; } contract Factories { uint256 public constant MAX_SIZE = 40; function getFactories(address player) external returns (uint256[]); function addFactory(address player, uint8 position, uint256 unitId) external; } library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint224 a, uint224 b) internal pure returns (uint224) { if (a == 0) { return 0; } uint224 c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Substracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } library SafeMath224 { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint224 a, uint224 b) internal pure returns (uint224) { if (a == 0) { return 0; } uint224 c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint224 a, uint224 b) internal pure returns (uint224) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint224 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Substracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint224 a, uint224 b) internal pure returns (uint224) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint224 a, uint224 b) internal pure returns (uint224) { uint224 c = a + b; assert(c >= a); return c; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"upgradesOwned","outputs":[{"name":"column0","type":"uint64"},{"name":"column1","type":"uint64"},{"name":"column2","type":"uint64"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"unitList","outputs":[{"name":"unitId","type":"uint256"},{"name":"gooCost","type":"uint224"},{"name":"baseProduction","type":"uint256"},{"name":"attack","type":"uint80"},{"name":"defense","type":"uint80"},{"name":"looting","type":"uint80"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"unitExp","outputs":[{"name":"experience","type":"uint224"},{"name":"level","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint80"},{"name":"unit","type":"uint256"},{"name":"player","type":"address"}],"name":"deleteUnitExternal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"upgradeList","outputs":[{"name":"upgradeId","type":"uint256"},{"name":"gooCost","type":"uint224"},{"name":"unitId","type":"uint256"},{"name":"column","type":"uint256"},{"name":"prerequisiteUpgrade","type":"uint256"},{"name":"unitMaxCapacityGain","type":"uint256"},{"name":"prodIncrease","type":"uint32"},{"name":"prodMultiplier","type":"uint32"},{"name":"attackIncrease","type":"uint32"},{"name":"attackMultiplier","type":"uint32"},{"name":"defenseIncrease","type":"uint32"},{"name":"defenseMultiplier","type":"uint32"},{"name":"lootingIncrease","type":"uint32"},{"name":"lootingMultiplier","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"armyContract","type":"address"}],"name":"setArmy","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"unit","type":"uint256"},{"name":"amount","type":"uint80"},{"name":"player","type":"address"},{"name":"chosenPosition","type":"uint8"}],"name":"mintUnitExternal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"player","type":"address"},{"name":"unitId","type":"uint256"},{"name":"upgradeGains","type":"uint32[8]"},{"name":"upgradeLosses","type":"uint32[8]"}],"name":"swapUpgradesExternal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"unitId","type":"uint256"},{"name":"amount","type":"uint80"},{"name":"position","type":"uint8"}],"name":"buyUnit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"upgradeId","type":"uint64"}],"name":"buyUpgrade","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"player","type":"address"},{"name":"upgradeGain","type":"uint256"},{"name":"unitId","type":"uint256"}],"name":"increaseUnitCapacity","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"gameContract","type":"address"},{"name":"isOperator","type":"bool"}],"name":"setOperator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"player","type":"address"},{"name":"unitId","type":"uint256"},{"name":"amount","type":"uint224"}],"name":"grantArmyExp","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"player","type":"address"},{"name":"unitId","type":"uint256"},{"name":"prodIncrease","type":"uint32"},{"name":"prodMultiplier","type":"uint32"},{"name":"attackIncrease","type":"uint32"},{"name":"attackMultiplier","type":"uint32"},{"name":"defenseIncrease","type":"uint32"},{"name":"defenseMultiplier","type":"uint32"},{"name":"lootingIncrease","type":"uint32"},{"name":"lootingMultiplier","type":"uint32"}],"name":"decreaseUpgradesExternal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"player","type":"address"},{"name":"unitId","type":"uint256"},{"name":"prodIncrease","type":"uint32"},{"name":"prodMultiplier","type":"uint32"},{"name":"attackIncrease","type":"uint32"},{"name":"attackMultiplier","type":"uint32"},{"name":"defenseIncrease","type":"uint32"},{"name":"defenseMultiplier","type":"uint32"},{"name":"lootingIncrease","type":"uint32"},{"name":"lootingMultiplier","type":"uint32"}],"name":"increaseUpgradesExternal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"unitsOwned","outputs":[{"name":"units","type":"uint80"},{"name":"factoryBuiltFlag","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"player","type":"address"},{"name":"upgradeGain","type":"uint256"},{"name":"unitId","type":"uint256"}],"name":"decreaseUnitCapacity","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"id","type":"uint256"},{"name":"baseGooCost","type":"uint224"},{"name":"baseGooProduction","type":"uint256"},{"name":"baseAttack","type":"uint80"},{"name":"baseDefense","type":"uint80"},{"name":"baseLooting","type":"uint80"}],"name":"addUnit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"player","type":"address"},{"name":"unitId","type":"uint256"}],"name":"getUnitsCurrentProduction","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"id","type":"uint256"},{"name":"gooCost","type":"uint224"},{"name":"unit","type":"uint256"},{"name":"column","type":"uint256"},{"name":"prereq","type":"uint256"},{"name":"unitMaxCapacityGain","type":"uint256"},{"name":"upgradeGains","type":"uint32[8]"}],"name":"addUpgrade","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"unitId","type":"uint256"},{"name":"amount","type":"uint80"}],"name":"sellUnit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"clansContract","type":"address"}],"name":"setClans","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"}]
Contract Creation Code
608060405260008054600160a060020a031990811690915560018054909116905534801561002c57600080fd5b50600a8054600160a060020a031916331790556144758061004e6000396000f30060806040526004361061010e5763ffffffff60e060020a600035041663069d04f781146101135780630a8e987c146101635780630cdddceb146101c157806311d5aa931461020d578063126ef2801461023f57806312e68ddf146102e057806343f4e4dc14610301578063454764ac146103375780634705c18114610360578063511de2801461038a5780635352df60146103ac578063558a7297146103d357806360bada1c146103f9578063a442ed601461043d578063a9ed5b4314610496578063c1431eda146104ef578063c26c006d14610538578063c95186751461055f578063d1bf3d3f1461059e578063e00cf084146105d4578063e6fe72bb14610606578063f40b26bd1461062a575b600080fd5b34801561011f57600080fd5b50610137600160a060020a036004351660243561064b565b6040805167ffffffffffffffff9485168152928416602084015292168183015290519081900360600190f35b34801561016f57600080fd5b5061017b60043561068d565b60408051968752600160e060020a039095166020870152858501939093526001605060020a039182166060860152811660808501521660a0830152519081900360c00190f35b3480156101cd57600080fd5b506101e5600160a060020a03600435166024356106e4565b60408051600160e060020a03909316835263ffffffff90911660208301528051918290030190f35b34801561021957600080fd5b5061023d6001605060020a0360043516602435600160a060020a0360443516610719565b005b34801561024b57600080fd5b50610257600435610747565b604080519e8f52600160e060020a03909d1660208f01528d8d019b909b5260608d019990995260808c019790975260a08b019590955263ffffffff93841660c08b015291831660e08a015282166101008901528116610120880152908116610140870152908116610160860152908116610180850152166101a083015251908190036101c00190f35b3480156102ec57600080fd5b5061023d600160a060020a03600435166107ea565b34801561030d57600080fd5b5061023d6004356001605060020a0360243516600160a060020a036044351660ff60643516610830565b34801561034357600080fd5b5061023d600160a060020a03600435166024356044610144610860565b34801561036c57600080fd5b5061023d6004356001605060020a036024351660ff60443516610a73565b34801561039657600080fd5b5061023d67ffffffffffffffff60043516610d9f565b3480156103b857600080fd5b5061023d600160a060020a036004351660243560443561125f565b3480156103df57600080fd5b5061023d600160a060020a036004351660243515156112ac565b34801561040557600080fd5b50610429600160a060020a0360043516602435600160e060020a03604435166112ee565b604080519115158252519081900360200190f35b34801561044957600080fd5b5061023d600160a060020a036004351660243563ffffffff60443581169060643581169060843581169060a43581169060c43581169060e435811690610104358116906101243516611a76565b3480156104a257600080fd5b5061023d600160a060020a036004351660243563ffffffff60443581169060643581169060843581169060a43581169060c43581169060e435811690610104358116906101243516611b54565b3480156104fb57600080fd5b50610513600160a060020a0360043516602435611c25565b604080516001605060020a03909316835260ff90911660208301528051918290030190f35b34801561054457600080fd5b5061023d600160a060020a0360043516602435604435611c5e565b34801561056b57600080fd5b5061023d600435600160e060020a03602435166044356001605060020a0360643581169060843581169060a43516611cac565b3480156105aa57600080fd5b506105c2600160a060020a0360043516602435611ddf565b60408051918252519081900360200190f35b3480156105e057600080fd5b5061023d600435600160e060020a036024351660443560643560843560a43560c4611ebc565b34801561061257600080fd5b5061023d6004356001605060020a036024351661214a565b34801561063657600080fd5b5061023d600160a060020a0360043516612300565b600660209081526000928352604080842090915290825290205467ffffffffffffffff80821691680100000000000000008104821691608060020a9091041683565b60076020526000908152604090208054600182015460028301546003909301549192600160e060020a03909116916001605060020a03808216916a0100000000000000000000810482169160a060020a9091041686565b6003602090815260009283526040808420909152908252902054600160e060020a0381169060e060020a900463ffffffff1682565b3360009081526009602052604090205460ff16151561073757600080fd5b610742838383612346565b505050565b60086020526000908152604090208054600182015460028301546003840154600485015460058601546006909601549495600160e060020a03909416949293919290919063ffffffff8082169164010000000081048216916801000000000000000082048116916c010000000000000000000000008104821691608060020a820481169160a060020a810482169160c060020a820481169160e060020a9004168e565b600a54600160a060020a0316331461080157600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b3360009081526009602052604090205460ff16151561084e57600080fd5b61085a84848484612524565b50505050565b610868614305565b610870614349565b3360009081526009602052604090205460ff16151561088e57600080fd5b5050600160a060020a03841660009081526005602090815260408083208684528252808320815161010081018352905463ffffffff808216835264010000000082048116838601526801000000000000000082048116838501526c0100000000000000000000000082048116606080850191909152608060020a8304821660808086019190915260a060020a808504841660a08088019190915260c060020a8604851660c08089019190915260e060020a90960490941660e08701528b89526007885286892087519586018852805486526001810154600160e060020a03169886019890985260028801549685018790526003909701546001605060020a03808216938601939093526a010000000000000000000081048316918501919091529590950490941693810193909352921015610a1c57610a17868684846040015188600880602002604051908101604052809291908260086020028082843750506040805161010081810190925293508c925060089150839083908082843750612aae9350505050565b610a6b565b610a6b86838387600880602002604051908101604052809291908260086020028082843750506040805161010081810190925293508b925060089150839083908082843750612e7f9350505050565b505050505050565b6000838152600760205260408120600101548190819081908190610aa990600160e060020a03166001605060020a038916613333565b94506000600160e060020a03861611610ac157600080fd5b3360009081526002602090815260408083208b84529091529020546001605060020a039081168801945060639085161115610b28573360009081526004602090815260408083208b84529091529020546063016001605060020a03851610610b2857600080fd5b60018054604080517fa8be8329000000000000000000000000000000000000000000000000000000008152336004820152602481019390935251600160a060020a039091169163a8be83299160448083019260209291908290030181600087803b158015610b9557600080fd5b505af1158015610ba9573d6000803e3d6000fd5b505050506040513d6020811015610bbf57600080fd5b505192506064600160e060020a038685021604850391506004600160e060020a036003870216604080517fbb002ba8000000000000000000000000000000000000000000000000000000008152336004820152600160e060020a0386166024820152905192909104925060008051602061442a8339815191529163bb002ba89160448082019260009290919082900301818387803b158015610c6057600080fd5b505af1158015610c74573d6000803e3d6000fd5b5050604080517f4f03f17c000000000000000000000000000000000000000000000000000000008152600160e060020a0385166004820152306024820152905160008051602061442a8339815191529350634f03f17c9250604480830192600092919082900301818387803b158015610cec57600080fd5b505af1158015610d00573d6000803e3d6000fd5b505060008054604080517f1149ef5a000000000000000000000000000000000000000000000000000000008152600160e060020a038789031660048201529051600160a060020a039092169450631149ef5a9350602480820193929182900301818387803b158015610d7157600080fd5b505af1158015610d85573d6000803e3d6000fd5b50505050610d9588883389612524565b5050505050505050565b610da761437e565b6000610db16143f2565b50505067ffffffffffffffff808216600090815260086020908152604080832081516101c081018352815481526001820154600160e060020a03168185015260028201548184018190526003830154606080840191825260048501546080850152600585015460a085015260069485015463ffffffff80821660c08701526401000000008204811660e08701526801000000000000000080830482166101008801526c0100000000000000000000000083048216610120880152608060020a808404831661014089015260a060020a8404831661016089015260c060020a8404831661018089015260e060020a9093049091166101a0870152338a52958852868920848a5288528689208751928301885254808b1683529586048a169782019790975295909304909616928401929092525190939290819081901515610f0757835167ffffffffffffffff881685529250610f53565b856060015160011415610f2f5760208401805167ffffffffffffffff89169091529250610f53565b856060015160021415610f535760408401805167ffffffffffffffff891690915292505b336000908152600660209081526040808320888452825280832087518154938901519289015167ffffffffffffffff908116608060020a0277ffffffffffffffff000000000000000000000000000000001994821668010000000000000000026fffffffffffffffff0000000000000000199290931667ffffffffffffffff19909616959095171617919091169190911790558511610ff157600080fd5b67ffffffffffffffff8088169084161061100a57600080fd5b608086015167ffffffffffffffff8416101561102557600080fd5b600154604080517fa8be83290000000000000000000000000000000000000000000000000000000081523360048201526000602482018190529151600160a060020a039093169263a8be832992604480840193602093929083900390910190829087803b15801561109557600080fd5b505af11580156110a9573d6000803e3d6000fd5b505050506040513d60208110156110bf57600080fd5b50516020870151604080517fbb002ba80000000000000000000000000000000000000000000000000000000081523360048201526064600160e060020a038486028116919091049093039283166024820152905192945090925060008051602061442a8339815191529163bb002ba89160448082019260009290919082900301818387803b15801561115057600080fd5b505af1158015611164573d6000803e3d6000fd5b505060008054604080517f1149ef5a000000000000000000000000000000000000000000000000000000008152600160e060020a03871660048201529051600160a060020a039092169450631149ef5a9350602480820193929182900301818387803b1580156111d357600080fd5b505af11580156111e7573d6000803e3d6000fd5b505050508560600151600214156112235760a0860151336000908152600460209081526040808320898452909152902080549091019055611256565b8560600151600114156112405761123b338787613395565b611256565b6060860151151561125657611256338787613395565b50505050505050565b3360009081526009602052604090205460ff16151561127d57600080fd5b600160a060020a0390921660009081526004602090815260408083209483529390529190912080549091019055565b600a54600160a060020a031633146112c357600080fd5b600160a060020a03919091166000908152600960205260409020805460ff1916911515919091179055565b60006112f8614412565b6000611302614305565b600061130c614349565b336000908152600960205260408120548190819060ff16151561132e57600080fd5b600160a060020a038c1660009081526003602090815260408083208e8452825291829020825180840190935254600160e060020a0380821680855260e060020a90920463ffffffff908116938501849052939b5060019092016050029092169850908b01168711611a0d57868a896000015101038860000190600160e060020a03169081600160e060020a03168152505087602001805180919060010163ffffffff1663ffffffff168152505087600360008e600160a060020a0316600160a060020a0316815260200190815260200160002060008d815260200190815260200160002060008201518160000160006101000a815481600160e060020a030219169083600160e060020a03160217905550602082015181600001601c6101000a81548163ffffffff021916908363ffffffff160217905550905050600560008d600160a060020a0316600160a060020a0316815260200190815260200160002060008c815260200190815260200160002061010060405190810160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160089054906101000a900463ffffffff1663ffffffff1663ffffffff16815260200160008201600c9054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160109054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160149054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160189054906101000a900463ffffffff1663ffffffff1663ffffffff16815260200160008201601c9054906101000a900463ffffffff1663ffffffff1663ffffffff168152505095506005866060018181510191509063ffffffff16908163ffffffff168152505060058660a0018181510191509063ffffffff16908163ffffffff168152505060058660e0018181510191509063ffffffff16908163ffffffff168152505085600560008e600160a060020a0316600160a060020a0316815260200190815260200160002060008d815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160086101000a81548163ffffffff021916908363ffffffff160217905550606082015181600001600c6101000a81548163ffffffff021916908363ffffffff16021790555060808201518160000160106101000a81548163ffffffff021916908363ffffffff16021790555060a08201518160000160146101000a81548163ffffffff021916908363ffffffff16021790555060c08201518160000160186101000a81548163ffffffff021916908363ffffffff16021790555060e082015181600001601c6101000a81548163ffffffff021916908363ffffffff160217905550905050600260008d600160a060020a0316600160a060020a0316815260200190815260200160002060008c815260200190815260200160002060000160009054906101000a90046001605060020a03166005029450600760008c815260200190815260200160002060c06040519081016040529081600082015481526020016001820160009054906101000a9004600160e060020a0316600160e060020a0316600160e060020a03168152602001600282015481526020016003820160009054906101000a90046001605060020a03166001605060020a03166001605060020a0316815260200160038201600a9054906101000a90046001605060020a03166001605060020a03166001605060020a031681526020016003820160149054906101000a90046001605060020a03166001605060020a03166001605060020a0316815250509350856040015163ffffffff1684606001510185029250856080015163ffffffff16846080015101850291508560c0015163ffffffff168460a0015101850290506000809054906101000a9004600160a060020a0316600160a060020a03166336bce9988d8585856040518563ffffffff1660e060020a0281526004018085600160a060020a0316600160a060020a03168152602001846001605060020a03166001605060020a03168152602001836001605060020a03166001605060020a03168152602001826001605060020a03166001605060020a03168152602001945050505050600060405180830381600087803b1580156119ec57600080fd5b505af1158015611a00573d6000803e3d6000fd5b5050505060019850611a67565b600160a060020a038c1660009081526003602090815260408083208e845290915281208054600160e060020a038082168e01167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1990911617905598505b50505050505050509392505050565b611a7e61437e565b3360009081526009602052604090205460ff161515611a9c57600080fd5b6101c060405190810160405280600081526020016000600160e060020a03168152602001600081526020016000815260200160008152602001600081526020018a63ffffffff1681526020018963ffffffff1681526020018863ffffffff1681526020018763ffffffff1681526020018663ffffffff1681526020018563ffffffff1681526020018463ffffffff1681526020018363ffffffff168152509050611b478b828c613a98565b5050505050505050505050565b611b5c61437e565b3360009081526009602052604090205460ff161515611b7a57600080fd5b6101c060405190810160405280600081526020016000600160e060020a03168152602001600081526020016000815260200160008152602001600081526020018a63ffffffff1681526020018963ffffffff1681526020018863ffffffff1681526020018763ffffffff1681526020018663ffffffff1681526020018563ffffffff1681526020018463ffffffff1681526020018363ffffffff168152509050611b478b828c613395565b60026020908152600092835260408084209091529082529020546001605060020a038116906a0100000000000000000000900460ff1682565b3360009081526009602052604090205460ff161515611c7c57600080fd5b600160a060020a039092166000908152600460209081526040808320948352939052919091208054919091039055565b3360009081526009602052604090205460ff161515611cca57600080fd5b6040805160c081018252878152600160e060020a0396871660208083019182528284019788526001605060020a03968716606084019081529587166080840190815294871660a0840190815260009a8b526007909152929098209051815596516001880180547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191691909716179095559251600286015551600390940180549251935169ffffffffffffffffffff199093169482169490941773ffffffffffffffffffff0000000000000000000019166a010000000000000000000093821693909302929092177fffff00000000000000000000ffffffffffffffffffffffffffffffffffffffff1660a060020a9190921602179055565b6000611de9614305565b5050600160a060020a03821660009081526005602090815260408083208484528252808320815161010081018352905463ffffffff808216808452640100000000830482168487018190526801000000000000000084048316858701526c01000000000000000000000000840483166060860152608060020a84048316608086015260a060020a8404831660a086015260c060020a8404831660c086015260e060020a909304821660e08501528787526007909552929094206002015490920160649093011691909102905b5092915050565b3360009081526009602052604090205460ff161515611eda57600080fd5b604080516101c081018252888152600160e060020a0388166020808301919091528183018890526060808301889052608080840188905260a080850188905263ffffffff8735811660c08088019190915294880135811660e0870152958701358616610100860152918601358516610120850152850135841661014084015284013583166101608301528301359091166101808201526101a0810182600763ffffffff6020918202929092013582169092526000998a52600882526040998a90208351815591830151600183018054600160e060020a039283167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19909116179055998301516002830155606083015160038301556080830151600483015560a0830151600583015560c08301516006909201805460e08501516101008601516101208701516101408801516101608901516101808a01516101a0909a0151881660e060020a0299881660c060020a027fffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff91891660a060020a0277ffffffff000000000000000000000000000000000000000019938a16608060020a0273ffffffff0000000000000000000000000000000019958b166c01000000000000000000000000026fffffffff00000000000000000000000019978c1668010000000000000000026bffffffff000000000000000019998d166401000000000267ffffffff00000000199e909d1663ffffffff19909b169a909a179c909c169a909a179690961696909617939093169790971716949094179490941693909317919091169190911790981617909655505050505050565b3360009081526002602090815260408083208584529091528120546001605060020a0380841691161080159061218957506000826001605060020a0316115b151561219457600080fd5b50600082815260076020526040812060010154600160e060020a03169081116121bc57600080fd5b604080517fb5967e16000000000000000000000000000000000000000000000000000000008152336004820152905160008051602061442a8339815191529163b5967e1691602480830192600092919082900301818387803b15801561222157600080fd5b505af1158015612235573d6000803e3d6000fd5b50505050612244828433612346565b60008051602061442a83398151915263a9059cbb336004600160e060020a0360036001605060020a03881687020216046040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182600160e060020a0316815260200192505050602060405180830381600087803b1580156122cf57600080fd5b505af11580156122e3573d6000803e3d6000fd5b505050506040513d60208110156122f957600080fd5b5050505050565b600a54600160a060020a0316331461231757600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600080600080612356858761419b565b9350935093506000846001605060020a0316118061237d57506000836001605060020a0316115b8061239157506000826001605060020a0316115b1561243c5760008054604080517ffa5ccd0b000000000000000000000000000000000000000000000000000000008152600160a060020a0389811660048301526001605060020a03898d0281166024840152888d0281166044840152878d021660648301529151919092169263fa5ccd0b926084808201939182900301818387803b15801561241f57600080fd5b505af1158015612433573d6000803e3d6000fd5b505050506124d7565b866001605060020a03166124508688611ddf565b02905060008051602061442a83398151915263add1dcfa86606484046040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050600060405180830381600087803b1580156124be57600080fd5b505af11580156124d2573d6000803e3d6000fd5b505050505b50505050600160a060020a0316600090815260026020908152604080832093835292905220805469ffffffffffffffffffff1981166001605060020a039182169390930316919091179055565b600160a060020a038216600090815260026020908152604080832087845290915281208054909160609181908190819081906a0100000000000000000000900460ff1615156128ba57604080517febff831f000000000000000000000000000000000000000000000000000000008152600160a060020a038b166004820152905173c81068cd335889736fc485592e4d73a82403d44b9163ebff831f91602480830192600092919082900301818387803b1580156125e157600080fd5b505af11580156125f5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561261e57600080fd5b81019080805164010000000081111561263657600080fd5b8201602081018481111561264957600080fd5b815185602082028301116401000000008211171561266657600080fd5b505092919050505095508551945073c81068cd335889736fc485592e4d73a82403d44b600160a060020a0316638d67799e6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156126c657600080fd5b505af11580156126da573d6000803e3d6000fd5b505050506040513d60208110156126f057600080fd5b505160ff891610158061272a5750848860ff1610801561272a57506000868960ff1681518110151561271e57fe5b90602001906020020151115b1561277057600097505b848860ff1610801561276057506000868960ff1681518110151561275457fe5b90602001906020020151115b1561277057600190970196612734565b604080517faf209cf8000000000000000000000000000000000000000000000000000000008152600160a060020a038b16600482015260ff8a166024820152604481018d9052905173c81068cd335889736fc485592e4d73a82403d44b9163af209cf891606480830192600092919082900301818387803b1580156127f457600080fd5b505af1158015612808573d6000803e3d6000fd5b5050505060408051908101604052808b6001605060020a03168152602001600160ff16815250600260008b600160a060020a0316600160a060020a0316815260200190815260200160002060008d815260200190815260200160002060008201518160000160006101000a8154816001605060020a0302191690836001605060020a03160217905550602082015181600001600a6101000a81548160ff021916908360ff1602179055509050506128dd565b86546001605060020a038082168c011669ffffffffffffffffffff199091161787555b6128e7898c61419b565b9350935093506000846001605060020a0316118061290e57506000836001605060020a0316115b8061292257506000826001605060020a0316115b15612a07576000809054906101000a9004600160a060020a0316600160a060020a03166336bce9988a8c87028d87028e87026040518563ffffffff1660e060020a0281526004018085600160a060020a0316600160a060020a03168152602001846001605060020a03166001605060020a03168152602001836001605060020a03166001605060020a03168152602001826001605060020a03166001605060020a03168152602001945050505050600060405180830381600087803b1580156129ea57600080fd5b505af11580156129fe573d6000803e3d6000fd5b50505050611b47565b896001605060020a0316612a1b8a8d611ddf565b02905060008051602061442a83398151915263a732f9ac8a606484046040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050600060405180830381600087803b158015612a8957600080fd5b505af1158015612a9d573d6000803e3d6000fd5b505050505050505050505050505050565b604080517fb5967e16000000000000000000000000000000000000000000000000000000008152600160a060020a03881660048201529051600091829160008051602061442a8339815191529163b5967e16916024808301928692919082900301818387803b158015612b2057600080fd5b505af1158015612b34573d6000803e3d6000fd5b505050506020868101805188518651885163ffffffff928316919003600390810b82018316808d5289870151968b015196909603900b828416018216938490528901606492830182160295509101169086010282900390506000811315612c4d57600160a060020a03881660008181526002602090815260408083208b84529091528082205481517fa732f9ac000000000000000000000000000000000000000000000000000000008152600481019490945260646001605060020a0390911685020460248401525160008051602061442a8339815191529263a732f9ac92604480830193919282900301818387803b158015612c3057600080fd5b505af1158015612c44573d6000803e3d6000fd5b50505050612d03565b600160a060020a03881660008181526002602090815260408083208b84529091528082205481517fadd1dcfa000000000000000000000000000000000000000000000000000000008152600481019490945260646001605060020a03909116858403020460248401525160008051602061442a8339815191529263add1dcfa92604480830193919282900301818387803b158015612cea57600080fd5b505af1158015612cfe573d6000803e3d6000fd5b505050505b85600560008a600160a060020a0316600160a060020a03168152602001908152602001600020600089815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160086101000a81548163ffffffff021916908363ffffffff160217905550606082015181600001600c6101000a81548163ffffffff021916908363ffffffff16021790555060808201518160000160106101000a81548163ffffffff021916908363ffffffff16021790555060a08201518160000160146101000a81548163ffffffff021916908363ffffffff16021790555060c08201518160000160186101000a81548163ffffffff021916908363ffffffff16021790555060e082015181600001601c6101000a81548163ffffffff021916908363ffffffff1602179055509050505050505050505050565b6000806000806000806000808b6060015160640163ffffffff168c6040015163ffffffff168c6060015101026001605060020a031697508b60a0015160640163ffffffff168c6080015163ffffffff168c6080015101026001605060020a031696508b60e0015160640163ffffffff168c60c0015163ffffffff168c60a0015101026001605060020a03169550886002600881101515612f1b57fe5b60200201518a6002602002015160408e01805192909103600390810b63ffffffff938416019092169052899060200201518a6003602002015160608e0180519290910360030b63ffffffff92831601909116905288600460200201518a6004602002015160808e0180519290910360030b63ffffffff92831601909116905288600560200201518a6005602002015160a08e0180519290910360030b63ffffffff92831601909116905288600660200201518a6006602002015160c08e0180519290910360030b63ffffffff92831601909116905288600760200201518a600760200201510360030b8c60e0015163ffffffff16018c60e0019063ffffffff16908163ffffffff1681525050878c6060015160640163ffffffff168d6040015163ffffffff168d606001516001605060020a03160102039450868c60a0015160640163ffffffff168d6080015163ffffffff168d608001516001605060020a03160102039350858c60e0015160640163ffffffff168d60c0015163ffffffff168d60a001516001605060020a031601020392508a600001519150600260008e600160a060020a0316600160a060020a03168152602001908152602001600020600083815260200190815260200160002060000160009054906101000a90046001605060020a03166001605060020a031690506000809054906101000a9004600160a060020a0316600160a060020a03166308688ce08e8784028785028786026040518563ffffffff1660e060020a0281526004018085600160a060020a0316600160a060020a03168152602001848152602001838152602001828152602001945050505050600060405180830381600087803b15801561319a57600080fd5b505af11580156131ae573d6000803e3d6000fd5b505050508b600560008f600160a060020a0316600160a060020a03168152602001908152602001600020600084815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160086101000a81548163ffffffff021916908363ffffffff160217905550606082015181600001600c6101000a81548163ffffffff021916908363ffffffff16021790555060808201518160000160106101000a81548163ffffffff021916908363ffffffff16021790555060a08201518160000160146101000a81548163ffffffff021916908363ffffffff16021790555060c08201518160000160186101000a81548163ffffffff021916908363ffffffff16021790555060e082015181600001601c6101000a81548163ffffffff021916908363ffffffff16021790555090505050505050505050505050505050565b600080600160e060020a038416151561334f5760009150611eb5565b828402905082600160e060020a031684600160e060020a031682600160e060020a031681151561337b57fe5b04600160e060020a031614151561338e57fe5b9392505050565b600061339f614305565b6133a7614349565b505050600160a060020a0383166000818152600260208181526040808420868552825280842054948452600582528084208685528252808420815161010081018352905463ffffffff808216835264010000000082048116838601526801000000000000000082048116838501526c0100000000000000000000000082048116606080850191909152608060020a8304821660808086019190915260a060020a808504841660a08088019190915260c060020a8604851660c08089019190915260e060020a90960490941660e08701528b8a5260078852868a2087519586018852805486526001810154600160e060020a031698860198909852978701549584018690526003909601546001605060020a03818116928501929092526a010000000000000000000081048216968401969096529590940485169381019390935292909416939192909181908190819081101561366557856000015163ffffffff168560400151018960e0015163ffffffff1688026001605060020a0316029350856020015160640163ffffffff168960c0015163ffffffff168802026001605060020a03168401935060008051602061442a833981519152600160a060020a031663b5967e168b6040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050600060405180830381600087803b1580156135b957600080fd5b505af11580156135cd573d6000803e3d6000fd5b5050604080517fa732f9ac000000000000000000000000000000000000000000000000000000008152600160a060020a038e166004820152606488046024820152905160008051602061442a833981519152935063a732f9ac9250604480830192600092919082900301818387803b15801561364857600080fd5b505af115801561365c573d6000803e3d6000fd5b50505050613804565b856040015163ffffffff1685606001510189610120015163ffffffff168802029250856080015163ffffffff1685608001510189610160015163ffffffff1688020291508560c0015163ffffffff168560a0015101896101a0015163ffffffff168802029050856060015160640163ffffffff1689610100015163ffffffff16880202830192508560a0015160640163ffffffff1689610140015163ffffffff16880202820191508560e0015160640163ffffffff1689610180015163ffffffff16880202810190506000809054906101000a9004600160a060020a0316600160a060020a03166336bce9988b8585856040518563ffffffff1660e060020a0281526004018085600160a060020a0316600160a060020a03168152602001846001605060020a03166001605060020a03168152602001836001605060020a03166001605060020a03168152602001826001605060020a03166001605060020a03168152602001945050505050600060405180830381600087803b1580156137eb57600080fd5b505af11580156137ff573d6000803e3d6000fd5b505050505b8860c00151866000018181510191509063ffffffff16908163ffffffff16815250508860e00151866020018181510191509063ffffffff16908163ffffffff1681525050886101000151866040018181510191509063ffffffff16908163ffffffff1681525050886101200151866060018181510191509063ffffffff16908163ffffffff1681525050886101400151866080018181510191509063ffffffff16908163ffffffff16815250508861016001518660a0018181510191509063ffffffff16908163ffffffff16815250508861018001518660c0018181510191509063ffffffff16908163ffffffff1681525050886101a001518660e0018181510191509063ffffffff16908163ffffffff168152505085600560008c600160a060020a0316600160a060020a0316815260200190815260200160002060008a815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160086101000a81548163ffffffff021916908363ffffffff160217905550606082015181600001600c6101000a81548163ffffffff021916908363ffffffff16021790555060808201518160000160106101000a81548163ffffffff021916908363ffffffff16021790555060a08201518160000160146101000a81548163ffffffff021916908363ffffffff16021790555060c08201518160000160186101000a81548163ffffffff021916908363ffffffff16021790555060e082015181600001601c6101000a81548163ffffffff021916908363ffffffff16021790555090505050505050505050505050565b6000613aa2614305565b613aaa614349565b505050600160a060020a0383166000818152600260208181526040808420868552825280842054948452600582528084208685528252808420815161010081018352905463ffffffff808216835264010000000082048116838601526801000000000000000082048116838501526c0100000000000000000000000082048116606080850191909152608060020a8304821660808086019190915260a060020a808504841660a08088019190915260c060020a8604851660c08089019190915260e060020a90960490941660e08701528b8a5260078852868a2087519586018852805486526001810154600160e060020a031698860198909852978701549584018690526003909601546001605060020a03818116928501929092526a0100000000000000000000810482169684019690965295909404851693810193909352929094169391929091819081908190811015613d6857856000015163ffffffff168560400151018960e0015163ffffffff1688026001605060020a0316029350856020015160640163ffffffff168960c0015163ffffffff168802026001605060020a03168401935060008051602061442a833981519152600160a060020a031663b5967e168b6040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050600060405180830381600087803b158015613cbc57600080fd5b505af1158015613cd0573d6000803e3d6000fd5b5050604080517fadd1dcfa000000000000000000000000000000000000000000000000000000008152600160a060020a038e166004820152606488046024820152905160008051602061442a833981519152935063add1dcfa9250604480830192600092919082900301818387803b158015613d4b57600080fd5b505af1158015613d5f573d6000803e3d6000fd5b50505050613f07565b856040015163ffffffff1685606001510189610120015163ffffffff168802029250856080015163ffffffff1685608001510189610160015163ffffffff1688020291508560c0015163ffffffff168560a0015101896101a0015163ffffffff168802029050856060015160640163ffffffff1689610100015163ffffffff16880202830192508560a0015160640163ffffffff1689610140015163ffffffff16880202820191508560e0015160640163ffffffff1689610180015163ffffffff16880202810190506000809054906101000a9004600160a060020a0316600160a060020a031663fa5ccd0b8b8585856040518563ffffffff1660e060020a0281526004018085600160a060020a0316600160a060020a03168152602001846001605060020a03166001605060020a03168152602001836001605060020a03166001605060020a03168152602001826001605060020a03166001605060020a03168152602001945050505050600060405180830381600087803b158015613eee57600080fd5b505af1158015613f02573d6000803e3d6000fd5b505050505b8860c00151866000018181510391509063ffffffff16908163ffffffff16815250508860e00151866020018181510391509063ffffffff16908163ffffffff1681525050886101000151866040018181510391509063ffffffff16908163ffffffff1681525050886101200151866060018181510391509063ffffffff16908163ffffffff1681525050886101400151866080018181510391509063ffffffff16908163ffffffff16815250508861016001518660a0018181510391509063ffffffff16908163ffffffff16815250508861018001518660c0018181510391509063ffffffff16908163ffffffff1681525050886101a001518660e0018181510391509063ffffffff16908163ffffffff168152505085600560008c600160a060020a0316600160a060020a0316815260200190815260200160002060008a815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160086101000a81548163ffffffff021916908363ffffffff160217905550606082015181600001600c6101000a81548163ffffffff021916908363ffffffff16021790555060808201518160000160106101000a81548163ffffffff021916908363ffffffff16021790555060a08201518160000160146101000a81548163ffffffff021916908363ffffffff16021790555060c08201518160000160186101000a81548163ffffffff021916908363ffffffff16021790555060e082015181600001601c6101000a81548163ffffffff021916908363ffffffff16021790555090505050505050505050505050565b60008060006141a8614349565b6141b0614305565b5050506000838152600760209081526040808320815160c08181018452825482526001830154600160e060020a0316828601526002830154828501526003909201546001605060020a0380821660608085019182526a010000000000000000000084048316608080870191825260a060020a9586900490941660a0968701908152600160a060020a03909e168a5260058952878a209c8a529b885297869020865161010081018852905463ffffffff8082168352640100000000820481169983019990995268010000000000000000810489169782018890526c01000000000000000000000000810489169982018a9052608060020a81048916938201849052938404881694810185905260c060020a8404881695810186905260e060020a909304871660e09093018390525199519a519990940160649687018616029a999093019085018416029796019201160292915050565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081019190915290565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b604080516101c081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081019190915290565b604080516060810182526000808252602082018190529181019190915290565b6040805180820190915260008082526020820152905600000000000000000000000000df0960778c6e6597f197ed9a25f12f5d971da86ca165627a7a723058203bd0a86cbd4ae0e47ee49e040608015de08b9b9713307e3094cf6c2945d071590029
Deployed Bytecode
0x60806040526004361061010e5763ffffffff60e060020a600035041663069d04f781146101135780630a8e987c146101635780630cdddceb146101c157806311d5aa931461020d578063126ef2801461023f57806312e68ddf146102e057806343f4e4dc14610301578063454764ac146103375780634705c18114610360578063511de2801461038a5780635352df60146103ac578063558a7297146103d357806360bada1c146103f9578063a442ed601461043d578063a9ed5b4314610496578063c1431eda146104ef578063c26c006d14610538578063c95186751461055f578063d1bf3d3f1461059e578063e00cf084146105d4578063e6fe72bb14610606578063f40b26bd1461062a575b600080fd5b34801561011f57600080fd5b50610137600160a060020a036004351660243561064b565b6040805167ffffffffffffffff9485168152928416602084015292168183015290519081900360600190f35b34801561016f57600080fd5b5061017b60043561068d565b60408051968752600160e060020a039095166020870152858501939093526001605060020a039182166060860152811660808501521660a0830152519081900360c00190f35b3480156101cd57600080fd5b506101e5600160a060020a03600435166024356106e4565b60408051600160e060020a03909316835263ffffffff90911660208301528051918290030190f35b34801561021957600080fd5b5061023d6001605060020a0360043516602435600160a060020a0360443516610719565b005b34801561024b57600080fd5b50610257600435610747565b604080519e8f52600160e060020a03909d1660208f01528d8d019b909b5260608d019990995260808c019790975260a08b019590955263ffffffff93841660c08b015291831660e08a015282166101008901528116610120880152908116610140870152908116610160860152908116610180850152166101a083015251908190036101c00190f35b3480156102ec57600080fd5b5061023d600160a060020a03600435166107ea565b34801561030d57600080fd5b5061023d6004356001605060020a0360243516600160a060020a036044351660ff60643516610830565b34801561034357600080fd5b5061023d600160a060020a03600435166024356044610144610860565b34801561036c57600080fd5b5061023d6004356001605060020a036024351660ff60443516610a73565b34801561039657600080fd5b5061023d67ffffffffffffffff60043516610d9f565b3480156103b857600080fd5b5061023d600160a060020a036004351660243560443561125f565b3480156103df57600080fd5b5061023d600160a060020a036004351660243515156112ac565b34801561040557600080fd5b50610429600160a060020a0360043516602435600160e060020a03604435166112ee565b604080519115158252519081900360200190f35b34801561044957600080fd5b5061023d600160a060020a036004351660243563ffffffff60443581169060643581169060843581169060a43581169060c43581169060e435811690610104358116906101243516611a76565b3480156104a257600080fd5b5061023d600160a060020a036004351660243563ffffffff60443581169060643581169060843581169060a43581169060c43581169060e435811690610104358116906101243516611b54565b3480156104fb57600080fd5b50610513600160a060020a0360043516602435611c25565b604080516001605060020a03909316835260ff90911660208301528051918290030190f35b34801561054457600080fd5b5061023d600160a060020a0360043516602435604435611c5e565b34801561056b57600080fd5b5061023d600435600160e060020a03602435166044356001605060020a0360643581169060843581169060a43516611cac565b3480156105aa57600080fd5b506105c2600160a060020a0360043516602435611ddf565b60408051918252519081900360200190f35b3480156105e057600080fd5b5061023d600435600160e060020a036024351660443560643560843560a43560c4611ebc565b34801561061257600080fd5b5061023d6004356001605060020a036024351661214a565b34801561063657600080fd5b5061023d600160a060020a0360043516612300565b600660209081526000928352604080842090915290825290205467ffffffffffffffff80821691680100000000000000008104821691608060020a9091041683565b60076020526000908152604090208054600182015460028301546003909301549192600160e060020a03909116916001605060020a03808216916a0100000000000000000000810482169160a060020a9091041686565b6003602090815260009283526040808420909152908252902054600160e060020a0381169060e060020a900463ffffffff1682565b3360009081526009602052604090205460ff16151561073757600080fd5b610742838383612346565b505050565b60086020526000908152604090208054600182015460028301546003840154600485015460058601546006909601549495600160e060020a03909416949293919290919063ffffffff8082169164010000000081048216916801000000000000000082048116916c010000000000000000000000008104821691608060020a820481169160a060020a810482169160c060020a820481169160e060020a9004168e565b600a54600160a060020a0316331461080157600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b3360009081526009602052604090205460ff16151561084e57600080fd5b61085a84848484612524565b50505050565b610868614305565b610870614349565b3360009081526009602052604090205460ff16151561088e57600080fd5b5050600160a060020a03841660009081526005602090815260408083208684528252808320815161010081018352905463ffffffff808216835264010000000082048116838601526801000000000000000082048116838501526c0100000000000000000000000082048116606080850191909152608060020a8304821660808086019190915260a060020a808504841660a08088019190915260c060020a8604851660c08089019190915260e060020a90960490941660e08701528b89526007885286892087519586018852805486526001810154600160e060020a03169886019890985260028801549685018790526003909701546001605060020a03808216938601939093526a010000000000000000000081048316918501919091529590950490941693810193909352921015610a1c57610a17868684846040015188600880602002604051908101604052809291908260086020028082843750506040805161010081810190925293508c925060089150839083908082843750612aae9350505050565b610a6b565b610a6b86838387600880602002604051908101604052809291908260086020028082843750506040805161010081810190925293508b925060089150839083908082843750612e7f9350505050565b505050505050565b6000838152600760205260408120600101548190819081908190610aa990600160e060020a03166001605060020a038916613333565b94506000600160e060020a03861611610ac157600080fd5b3360009081526002602090815260408083208b84529091529020546001605060020a039081168801945060639085161115610b28573360009081526004602090815260408083208b84529091529020546063016001605060020a03851610610b2857600080fd5b60018054604080517fa8be8329000000000000000000000000000000000000000000000000000000008152336004820152602481019390935251600160a060020a039091169163a8be83299160448083019260209291908290030181600087803b158015610b9557600080fd5b505af1158015610ba9573d6000803e3d6000fd5b505050506040513d6020811015610bbf57600080fd5b505192506064600160e060020a038685021604850391506004600160e060020a036003870216604080517fbb002ba8000000000000000000000000000000000000000000000000000000008152336004820152600160e060020a0386166024820152905192909104925060008051602061442a8339815191529163bb002ba89160448082019260009290919082900301818387803b158015610c6057600080fd5b505af1158015610c74573d6000803e3d6000fd5b5050604080517f4f03f17c000000000000000000000000000000000000000000000000000000008152600160e060020a0385166004820152306024820152905160008051602061442a8339815191529350634f03f17c9250604480830192600092919082900301818387803b158015610cec57600080fd5b505af1158015610d00573d6000803e3d6000fd5b505060008054604080517f1149ef5a000000000000000000000000000000000000000000000000000000008152600160e060020a038789031660048201529051600160a060020a039092169450631149ef5a9350602480820193929182900301818387803b158015610d7157600080fd5b505af1158015610d85573d6000803e3d6000fd5b50505050610d9588883389612524565b5050505050505050565b610da761437e565b6000610db16143f2565b50505067ffffffffffffffff808216600090815260086020908152604080832081516101c081018352815481526001820154600160e060020a03168185015260028201548184018190526003830154606080840191825260048501546080850152600585015460a085015260069485015463ffffffff80821660c08701526401000000008204811660e08701526801000000000000000080830482166101008801526c0100000000000000000000000083048216610120880152608060020a808404831661014089015260a060020a8404831661016089015260c060020a8404831661018089015260e060020a9093049091166101a0870152338a52958852868920848a5288528689208751928301885254808b1683529586048a169782019790975295909304909616928401929092525190939290819081901515610f0757835167ffffffffffffffff881685529250610f53565b856060015160011415610f2f5760208401805167ffffffffffffffff89169091529250610f53565b856060015160021415610f535760408401805167ffffffffffffffff891690915292505b336000908152600660209081526040808320888452825280832087518154938901519289015167ffffffffffffffff908116608060020a0277ffffffffffffffff000000000000000000000000000000001994821668010000000000000000026fffffffffffffffff0000000000000000199290931667ffffffffffffffff19909616959095171617919091169190911790558511610ff157600080fd5b67ffffffffffffffff8088169084161061100a57600080fd5b608086015167ffffffffffffffff8416101561102557600080fd5b600154604080517fa8be83290000000000000000000000000000000000000000000000000000000081523360048201526000602482018190529151600160a060020a039093169263a8be832992604480840193602093929083900390910190829087803b15801561109557600080fd5b505af11580156110a9573d6000803e3d6000fd5b505050506040513d60208110156110bf57600080fd5b50516020870151604080517fbb002ba80000000000000000000000000000000000000000000000000000000081523360048201526064600160e060020a038486028116919091049093039283166024820152905192945090925060008051602061442a8339815191529163bb002ba89160448082019260009290919082900301818387803b15801561115057600080fd5b505af1158015611164573d6000803e3d6000fd5b505060008054604080517f1149ef5a000000000000000000000000000000000000000000000000000000008152600160e060020a03871660048201529051600160a060020a039092169450631149ef5a9350602480820193929182900301818387803b1580156111d357600080fd5b505af11580156111e7573d6000803e3d6000fd5b505050508560600151600214156112235760a0860151336000908152600460209081526040808320898452909152902080549091019055611256565b8560600151600114156112405761123b338787613395565b611256565b6060860151151561125657611256338787613395565b50505050505050565b3360009081526009602052604090205460ff16151561127d57600080fd5b600160a060020a0390921660009081526004602090815260408083209483529390529190912080549091019055565b600a54600160a060020a031633146112c357600080fd5b600160a060020a03919091166000908152600960205260409020805460ff1916911515919091179055565b60006112f8614412565b6000611302614305565b600061130c614349565b336000908152600960205260408120548190819060ff16151561132e57600080fd5b600160a060020a038c1660009081526003602090815260408083208e8452825291829020825180840190935254600160e060020a0380821680855260e060020a90920463ffffffff908116938501849052939b5060019092016050029092169850908b01168711611a0d57868a896000015101038860000190600160e060020a03169081600160e060020a03168152505087602001805180919060010163ffffffff1663ffffffff168152505087600360008e600160a060020a0316600160a060020a0316815260200190815260200160002060008d815260200190815260200160002060008201518160000160006101000a815481600160e060020a030219169083600160e060020a03160217905550602082015181600001601c6101000a81548163ffffffff021916908363ffffffff160217905550905050600560008d600160a060020a0316600160a060020a0316815260200190815260200160002060008c815260200190815260200160002061010060405190810160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160089054906101000a900463ffffffff1663ffffffff1663ffffffff16815260200160008201600c9054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160109054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160149054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160189054906101000a900463ffffffff1663ffffffff1663ffffffff16815260200160008201601c9054906101000a900463ffffffff1663ffffffff1663ffffffff168152505095506005866060018181510191509063ffffffff16908163ffffffff168152505060058660a0018181510191509063ffffffff16908163ffffffff168152505060058660e0018181510191509063ffffffff16908163ffffffff168152505085600560008e600160a060020a0316600160a060020a0316815260200190815260200160002060008d815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160086101000a81548163ffffffff021916908363ffffffff160217905550606082015181600001600c6101000a81548163ffffffff021916908363ffffffff16021790555060808201518160000160106101000a81548163ffffffff021916908363ffffffff16021790555060a08201518160000160146101000a81548163ffffffff021916908363ffffffff16021790555060c08201518160000160186101000a81548163ffffffff021916908363ffffffff16021790555060e082015181600001601c6101000a81548163ffffffff021916908363ffffffff160217905550905050600260008d600160a060020a0316600160a060020a0316815260200190815260200160002060008c815260200190815260200160002060000160009054906101000a90046001605060020a03166005029450600760008c815260200190815260200160002060c06040519081016040529081600082015481526020016001820160009054906101000a9004600160e060020a0316600160e060020a0316600160e060020a03168152602001600282015481526020016003820160009054906101000a90046001605060020a03166001605060020a03166001605060020a0316815260200160038201600a9054906101000a90046001605060020a03166001605060020a03166001605060020a031681526020016003820160149054906101000a90046001605060020a03166001605060020a03166001605060020a0316815250509350856040015163ffffffff1684606001510185029250856080015163ffffffff16846080015101850291508560c0015163ffffffff168460a0015101850290506000809054906101000a9004600160a060020a0316600160a060020a03166336bce9988d8585856040518563ffffffff1660e060020a0281526004018085600160a060020a0316600160a060020a03168152602001846001605060020a03166001605060020a03168152602001836001605060020a03166001605060020a03168152602001826001605060020a03166001605060020a03168152602001945050505050600060405180830381600087803b1580156119ec57600080fd5b505af1158015611a00573d6000803e3d6000fd5b5050505060019850611a67565b600160a060020a038c1660009081526003602090815260408083208e845290915281208054600160e060020a038082168e01167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1990911617905598505b50505050505050509392505050565b611a7e61437e565b3360009081526009602052604090205460ff161515611a9c57600080fd5b6101c060405190810160405280600081526020016000600160e060020a03168152602001600081526020016000815260200160008152602001600081526020018a63ffffffff1681526020018963ffffffff1681526020018863ffffffff1681526020018763ffffffff1681526020018663ffffffff1681526020018563ffffffff1681526020018463ffffffff1681526020018363ffffffff168152509050611b478b828c613a98565b5050505050505050505050565b611b5c61437e565b3360009081526009602052604090205460ff161515611b7a57600080fd5b6101c060405190810160405280600081526020016000600160e060020a03168152602001600081526020016000815260200160008152602001600081526020018a63ffffffff1681526020018963ffffffff1681526020018863ffffffff1681526020018763ffffffff1681526020018663ffffffff1681526020018563ffffffff1681526020018463ffffffff1681526020018363ffffffff168152509050611b478b828c613395565b60026020908152600092835260408084209091529082529020546001605060020a038116906a0100000000000000000000900460ff1682565b3360009081526009602052604090205460ff161515611c7c57600080fd5b600160a060020a039092166000908152600460209081526040808320948352939052919091208054919091039055565b3360009081526009602052604090205460ff161515611cca57600080fd5b6040805160c081018252878152600160e060020a0396871660208083019182528284019788526001605060020a03968716606084019081529587166080840190815294871660a0840190815260009a8b526007909152929098209051815596516001880180547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191691909716179095559251600286015551600390940180549251935169ffffffffffffffffffff199093169482169490941773ffffffffffffffffffff0000000000000000000019166a010000000000000000000093821693909302929092177fffff00000000000000000000ffffffffffffffffffffffffffffffffffffffff1660a060020a9190921602179055565b6000611de9614305565b5050600160a060020a03821660009081526005602090815260408083208484528252808320815161010081018352905463ffffffff808216808452640100000000830482168487018190526801000000000000000084048316858701526c01000000000000000000000000840483166060860152608060020a84048316608086015260a060020a8404831660a086015260c060020a8404831660c086015260e060020a909304821660e08501528787526007909552929094206002015490920160649093011691909102905b5092915050565b3360009081526009602052604090205460ff161515611eda57600080fd5b604080516101c081018252888152600160e060020a0388166020808301919091528183018890526060808301889052608080840188905260a080850188905263ffffffff8735811660c08088019190915294880135811660e0870152958701358616610100860152918601358516610120850152850135841661014084015284013583166101608301528301359091166101808201526101a0810182600763ffffffff6020918202929092013582169092526000998a52600882526040998a90208351815591830151600183018054600160e060020a039283167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19909116179055998301516002830155606083015160038301556080830151600483015560a0830151600583015560c08301516006909201805460e08501516101008601516101208701516101408801516101608901516101808a01516101a0909a0151881660e060020a0299881660c060020a027fffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff91891660a060020a0277ffffffff000000000000000000000000000000000000000019938a16608060020a0273ffffffff0000000000000000000000000000000019958b166c01000000000000000000000000026fffffffff00000000000000000000000019978c1668010000000000000000026bffffffff000000000000000019998d166401000000000267ffffffff00000000199e909d1663ffffffff19909b169a909a179c909c169a909a179690961696909617939093169790971716949094179490941693909317919091169190911790981617909655505050505050565b3360009081526002602090815260408083208584529091528120546001605060020a0380841691161080159061218957506000826001605060020a0316115b151561219457600080fd5b50600082815260076020526040812060010154600160e060020a03169081116121bc57600080fd5b604080517fb5967e16000000000000000000000000000000000000000000000000000000008152336004820152905160008051602061442a8339815191529163b5967e1691602480830192600092919082900301818387803b15801561222157600080fd5b505af1158015612235573d6000803e3d6000fd5b50505050612244828433612346565b60008051602061442a83398151915263a9059cbb336004600160e060020a0360036001605060020a03881687020216046040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182600160e060020a0316815260200192505050602060405180830381600087803b1580156122cf57600080fd5b505af11580156122e3573d6000803e3d6000fd5b505050506040513d60208110156122f957600080fd5b5050505050565b600a54600160a060020a0316331461231757600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600080600080612356858761419b565b9350935093506000846001605060020a0316118061237d57506000836001605060020a0316115b8061239157506000826001605060020a0316115b1561243c5760008054604080517ffa5ccd0b000000000000000000000000000000000000000000000000000000008152600160a060020a0389811660048301526001605060020a03898d0281166024840152888d0281166044840152878d021660648301529151919092169263fa5ccd0b926084808201939182900301818387803b15801561241f57600080fd5b505af1158015612433573d6000803e3d6000fd5b505050506124d7565b866001605060020a03166124508688611ddf565b02905060008051602061442a83398151915263add1dcfa86606484046040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050600060405180830381600087803b1580156124be57600080fd5b505af11580156124d2573d6000803e3d6000fd5b505050505b50505050600160a060020a0316600090815260026020908152604080832093835292905220805469ffffffffffffffffffff1981166001605060020a039182169390930316919091179055565b600160a060020a038216600090815260026020908152604080832087845290915281208054909160609181908190819081906a0100000000000000000000900460ff1615156128ba57604080517febff831f000000000000000000000000000000000000000000000000000000008152600160a060020a038b166004820152905173c81068cd335889736fc485592e4d73a82403d44b9163ebff831f91602480830192600092919082900301818387803b1580156125e157600080fd5b505af11580156125f5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561261e57600080fd5b81019080805164010000000081111561263657600080fd5b8201602081018481111561264957600080fd5b815185602082028301116401000000008211171561266657600080fd5b505092919050505095508551945073c81068cd335889736fc485592e4d73a82403d44b600160a060020a0316638d67799e6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156126c657600080fd5b505af11580156126da573d6000803e3d6000fd5b505050506040513d60208110156126f057600080fd5b505160ff891610158061272a5750848860ff1610801561272a57506000868960ff1681518110151561271e57fe5b90602001906020020151115b1561277057600097505b848860ff1610801561276057506000868960ff1681518110151561275457fe5b90602001906020020151115b1561277057600190970196612734565b604080517faf209cf8000000000000000000000000000000000000000000000000000000008152600160a060020a038b16600482015260ff8a166024820152604481018d9052905173c81068cd335889736fc485592e4d73a82403d44b9163af209cf891606480830192600092919082900301818387803b1580156127f457600080fd5b505af1158015612808573d6000803e3d6000fd5b5050505060408051908101604052808b6001605060020a03168152602001600160ff16815250600260008b600160a060020a0316600160a060020a0316815260200190815260200160002060008d815260200190815260200160002060008201518160000160006101000a8154816001605060020a0302191690836001605060020a03160217905550602082015181600001600a6101000a81548160ff021916908360ff1602179055509050506128dd565b86546001605060020a038082168c011669ffffffffffffffffffff199091161787555b6128e7898c61419b565b9350935093506000846001605060020a0316118061290e57506000836001605060020a0316115b8061292257506000826001605060020a0316115b15612a07576000809054906101000a9004600160a060020a0316600160a060020a03166336bce9988a8c87028d87028e87026040518563ffffffff1660e060020a0281526004018085600160a060020a0316600160a060020a03168152602001846001605060020a03166001605060020a03168152602001836001605060020a03166001605060020a03168152602001826001605060020a03166001605060020a03168152602001945050505050600060405180830381600087803b1580156129ea57600080fd5b505af11580156129fe573d6000803e3d6000fd5b50505050611b47565b896001605060020a0316612a1b8a8d611ddf565b02905060008051602061442a83398151915263a732f9ac8a606484046040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050600060405180830381600087803b158015612a8957600080fd5b505af1158015612a9d573d6000803e3d6000fd5b505050505050505050505050505050565b604080517fb5967e16000000000000000000000000000000000000000000000000000000008152600160a060020a03881660048201529051600091829160008051602061442a8339815191529163b5967e16916024808301928692919082900301818387803b158015612b2057600080fd5b505af1158015612b34573d6000803e3d6000fd5b505050506020868101805188518651885163ffffffff928316919003600390810b82018316808d5289870151968b015196909603900b828416018216938490528901606492830182160295509101169086010282900390506000811315612c4d57600160a060020a03881660008181526002602090815260408083208b84529091528082205481517fa732f9ac000000000000000000000000000000000000000000000000000000008152600481019490945260646001605060020a0390911685020460248401525160008051602061442a8339815191529263a732f9ac92604480830193919282900301818387803b158015612c3057600080fd5b505af1158015612c44573d6000803e3d6000fd5b50505050612d03565b600160a060020a03881660008181526002602090815260408083208b84529091528082205481517fadd1dcfa000000000000000000000000000000000000000000000000000000008152600481019490945260646001605060020a03909116858403020460248401525160008051602061442a8339815191529263add1dcfa92604480830193919282900301818387803b158015612cea57600080fd5b505af1158015612cfe573d6000803e3d6000fd5b505050505b85600560008a600160a060020a0316600160a060020a03168152602001908152602001600020600089815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160086101000a81548163ffffffff021916908363ffffffff160217905550606082015181600001600c6101000a81548163ffffffff021916908363ffffffff16021790555060808201518160000160106101000a81548163ffffffff021916908363ffffffff16021790555060a08201518160000160146101000a81548163ffffffff021916908363ffffffff16021790555060c08201518160000160186101000a81548163ffffffff021916908363ffffffff16021790555060e082015181600001601c6101000a81548163ffffffff021916908363ffffffff1602179055509050505050505050505050565b6000806000806000806000808b6060015160640163ffffffff168c6040015163ffffffff168c6060015101026001605060020a031697508b60a0015160640163ffffffff168c6080015163ffffffff168c6080015101026001605060020a031696508b60e0015160640163ffffffff168c60c0015163ffffffff168c60a0015101026001605060020a03169550886002600881101515612f1b57fe5b60200201518a6002602002015160408e01805192909103600390810b63ffffffff938416019092169052899060200201518a6003602002015160608e0180519290910360030b63ffffffff92831601909116905288600460200201518a6004602002015160808e0180519290910360030b63ffffffff92831601909116905288600560200201518a6005602002015160a08e0180519290910360030b63ffffffff92831601909116905288600660200201518a6006602002015160c08e0180519290910360030b63ffffffff92831601909116905288600760200201518a600760200201510360030b8c60e0015163ffffffff16018c60e0019063ffffffff16908163ffffffff1681525050878c6060015160640163ffffffff168d6040015163ffffffff168d606001516001605060020a03160102039450868c60a0015160640163ffffffff168d6080015163ffffffff168d608001516001605060020a03160102039350858c60e0015160640163ffffffff168d60c0015163ffffffff168d60a001516001605060020a031601020392508a600001519150600260008e600160a060020a0316600160a060020a03168152602001908152602001600020600083815260200190815260200160002060000160009054906101000a90046001605060020a03166001605060020a031690506000809054906101000a9004600160a060020a0316600160a060020a03166308688ce08e8784028785028786026040518563ffffffff1660e060020a0281526004018085600160a060020a0316600160a060020a03168152602001848152602001838152602001828152602001945050505050600060405180830381600087803b15801561319a57600080fd5b505af11580156131ae573d6000803e3d6000fd5b505050508b600560008f600160a060020a0316600160a060020a03168152602001908152602001600020600084815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160086101000a81548163ffffffff021916908363ffffffff160217905550606082015181600001600c6101000a81548163ffffffff021916908363ffffffff16021790555060808201518160000160106101000a81548163ffffffff021916908363ffffffff16021790555060a08201518160000160146101000a81548163ffffffff021916908363ffffffff16021790555060c08201518160000160186101000a81548163ffffffff021916908363ffffffff16021790555060e082015181600001601c6101000a81548163ffffffff021916908363ffffffff16021790555090505050505050505050505050505050565b600080600160e060020a038416151561334f5760009150611eb5565b828402905082600160e060020a031684600160e060020a031682600160e060020a031681151561337b57fe5b04600160e060020a031614151561338e57fe5b9392505050565b600061339f614305565b6133a7614349565b505050600160a060020a0383166000818152600260208181526040808420868552825280842054948452600582528084208685528252808420815161010081018352905463ffffffff808216835264010000000082048116838601526801000000000000000082048116838501526c0100000000000000000000000082048116606080850191909152608060020a8304821660808086019190915260a060020a808504841660a08088019190915260c060020a8604851660c08089019190915260e060020a90960490941660e08701528b8a5260078852868a2087519586018852805486526001810154600160e060020a031698860198909852978701549584018690526003909601546001605060020a03818116928501929092526a010000000000000000000081048216968401969096529590940485169381019390935292909416939192909181908190819081101561366557856000015163ffffffff168560400151018960e0015163ffffffff1688026001605060020a0316029350856020015160640163ffffffff168960c0015163ffffffff168802026001605060020a03168401935060008051602061442a833981519152600160a060020a031663b5967e168b6040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050600060405180830381600087803b1580156135b957600080fd5b505af11580156135cd573d6000803e3d6000fd5b5050604080517fa732f9ac000000000000000000000000000000000000000000000000000000008152600160a060020a038e166004820152606488046024820152905160008051602061442a833981519152935063a732f9ac9250604480830192600092919082900301818387803b15801561364857600080fd5b505af115801561365c573d6000803e3d6000fd5b50505050613804565b856040015163ffffffff1685606001510189610120015163ffffffff168802029250856080015163ffffffff1685608001510189610160015163ffffffff1688020291508560c0015163ffffffff168560a0015101896101a0015163ffffffff168802029050856060015160640163ffffffff1689610100015163ffffffff16880202830192508560a0015160640163ffffffff1689610140015163ffffffff16880202820191508560e0015160640163ffffffff1689610180015163ffffffff16880202810190506000809054906101000a9004600160a060020a0316600160a060020a03166336bce9988b8585856040518563ffffffff1660e060020a0281526004018085600160a060020a0316600160a060020a03168152602001846001605060020a03166001605060020a03168152602001836001605060020a03166001605060020a03168152602001826001605060020a03166001605060020a03168152602001945050505050600060405180830381600087803b1580156137eb57600080fd5b505af11580156137ff573d6000803e3d6000fd5b505050505b8860c00151866000018181510191509063ffffffff16908163ffffffff16815250508860e00151866020018181510191509063ffffffff16908163ffffffff1681525050886101000151866040018181510191509063ffffffff16908163ffffffff1681525050886101200151866060018181510191509063ffffffff16908163ffffffff1681525050886101400151866080018181510191509063ffffffff16908163ffffffff16815250508861016001518660a0018181510191509063ffffffff16908163ffffffff16815250508861018001518660c0018181510191509063ffffffff16908163ffffffff1681525050886101a001518660e0018181510191509063ffffffff16908163ffffffff168152505085600560008c600160a060020a0316600160a060020a0316815260200190815260200160002060008a815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160086101000a81548163ffffffff021916908363ffffffff160217905550606082015181600001600c6101000a81548163ffffffff021916908363ffffffff16021790555060808201518160000160106101000a81548163ffffffff021916908363ffffffff16021790555060a08201518160000160146101000a81548163ffffffff021916908363ffffffff16021790555060c08201518160000160186101000a81548163ffffffff021916908363ffffffff16021790555060e082015181600001601c6101000a81548163ffffffff021916908363ffffffff16021790555090505050505050505050505050565b6000613aa2614305565b613aaa614349565b505050600160a060020a0383166000818152600260208181526040808420868552825280842054948452600582528084208685528252808420815161010081018352905463ffffffff808216835264010000000082048116838601526801000000000000000082048116838501526c0100000000000000000000000082048116606080850191909152608060020a8304821660808086019190915260a060020a808504841660a08088019190915260c060020a8604851660c08089019190915260e060020a90960490941660e08701528b8a5260078852868a2087519586018852805486526001810154600160e060020a031698860198909852978701549584018690526003909601546001605060020a03818116928501929092526a0100000000000000000000810482169684019690965295909404851693810193909352929094169391929091819081908190811015613d6857856000015163ffffffff168560400151018960e0015163ffffffff1688026001605060020a0316029350856020015160640163ffffffff168960c0015163ffffffff168802026001605060020a03168401935060008051602061442a833981519152600160a060020a031663b5967e168b6040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050600060405180830381600087803b158015613cbc57600080fd5b505af1158015613cd0573d6000803e3d6000fd5b5050604080517fadd1dcfa000000000000000000000000000000000000000000000000000000008152600160a060020a038e166004820152606488046024820152905160008051602061442a833981519152935063add1dcfa9250604480830192600092919082900301818387803b158015613d4b57600080fd5b505af1158015613d5f573d6000803e3d6000fd5b50505050613f07565b856040015163ffffffff1685606001510189610120015163ffffffff168802029250856080015163ffffffff1685608001510189610160015163ffffffff1688020291508560c0015163ffffffff168560a0015101896101a0015163ffffffff168802029050856060015160640163ffffffff1689610100015163ffffffff16880202830192508560a0015160640163ffffffff1689610140015163ffffffff16880202820191508560e0015160640163ffffffff1689610180015163ffffffff16880202810190506000809054906101000a9004600160a060020a0316600160a060020a031663fa5ccd0b8b8585856040518563ffffffff1660e060020a0281526004018085600160a060020a0316600160a060020a03168152602001846001605060020a03166001605060020a03168152602001836001605060020a03166001605060020a03168152602001826001605060020a03166001605060020a03168152602001945050505050600060405180830381600087803b158015613eee57600080fd5b505af1158015613f02573d6000803e3d6000fd5b505050505b8860c00151866000018181510391509063ffffffff16908163ffffffff16815250508860e00151866020018181510391509063ffffffff16908163ffffffff1681525050886101000151866040018181510391509063ffffffff16908163ffffffff1681525050886101200151866060018181510391509063ffffffff16908163ffffffff1681525050886101400151866080018181510391509063ffffffff16908163ffffffff16815250508861016001518660a0018181510391509063ffffffff16908163ffffffff16815250508861018001518660c0018181510391509063ffffffff16908163ffffffff1681525050886101a001518660e0018181510391509063ffffffff16908163ffffffff168152505085600560008c600160a060020a0316600160a060020a0316815260200190815260200160002060008a815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160086101000a81548163ffffffff021916908363ffffffff160217905550606082015181600001600c6101000a81548163ffffffff021916908363ffffffff16021790555060808201518160000160106101000a81548163ffffffff021916908363ffffffff16021790555060a08201518160000160146101000a81548163ffffffff021916908363ffffffff16021790555060c08201518160000160186101000a81548163ffffffff021916908363ffffffff16021790555060e082015181600001601c6101000a81548163ffffffff021916908363ffffffff16021790555090505050505050505050505050565b60008060006141a8614349565b6141b0614305565b5050506000838152600760209081526040808320815160c08181018452825482526001830154600160e060020a0316828601526002830154828501526003909201546001605060020a0380821660608085019182526a010000000000000000000084048316608080870191825260a060020a9586900490941660a0968701908152600160a060020a03909e168a5260058952878a209c8a529b885297869020865161010081018852905463ffffffff8082168352640100000000820481169983019990995268010000000000000000810489169782018890526c01000000000000000000000000810489169982018a9052608060020a81048916938201849052938404881694810185905260c060020a8404881695810186905260e060020a909304871660e09093018390525199519a519990940160649687018616029a999093019085018416029796019201160292915050565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081019190915290565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b604080516101c081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081019190915290565b604080516060810182526000808252602082018190529181019190915290565b6040805180820190915260008082526020820152905600000000000000000000000000df0960778c6e6597f197ed9a25f12f5d971da86ca165627a7a723058203bd0a86cbd4ae0e47ee49e040608015de08b9b9713307e3094cf6c2945d071590029
Swarm Source
bzzr://3bd0a86cbd4ae0e47ee49e040608015de08b9b9713307e3094cf6c2945d07159
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ 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.