Overview
ETH Balance
0.0018 ETH
Eth Value
$4.59 (@ $2,549.75/ETH)More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 250 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Claim Many Alpha... | 17908987 | 364 days ago | IN | 0.0018 ETH | 0.00220596 | ||||
Claim Many Genes... | 17356548 | 441 days ago | IN | 0.0018 ETH | 0.00413209 | ||||
Claim Many Alpha... | 17243506 | 457 days ago | IN | 0.0018 ETH | 0.00607486 | ||||
Claim Many Alpha... | 17177002 | 467 days ago | IN | 0.0018 ETH | 0.00789187 | ||||
Claim Many Alpha... | 17115704 | 475 days ago | IN | 0.0018 ETH | 0.00492689 | ||||
Claim Many Genes... | 16888466 | 507 days ago | IN | 0.0023 ETH | 0.00203761 | ||||
Claim Many Genes... | 16856522 | 512 days ago | IN | 0.0023 ETH | 0.00248286 | ||||
Claim Many Alpha... | 16674815 | 538 days ago | IN | 0.0018 ETH | 0.00618008 | ||||
Claim Many Genes... | 16651586 | 541 days ago | IN | 0.0018 ETH | 0.00553154 | ||||
Claim Many Genes... | 16651584 | 541 days ago | IN | 0.0033 ETH | 0.01027555 | ||||
Claim Many Genes... | 16631612 | 544 days ago | IN | 0.0033 ETH | 0.0072668 | ||||
Close Season Eea... | 16528932 | 558 days ago | IN | 0 ETH | 0.00139664 | ||||
Add Many To Stak... | 16502673 | 562 days ago | IN | 0.0018 ETH | 0.00386008 | ||||
Claim Many Alpha... | 16494037 | 563 days ago | IN | 0.0018 ETH | 0.00638975 | ||||
Claim Many Genes... | 16493829 | 563 days ago | IN | 0.0073 ETH | 0.00803613 | ||||
Claim Many Alpha... | 16328200 | 586 days ago | IN | 0.0018 ETH | 0.00358476 | ||||
Claim Many Genes... | 16274858 | 593 days ago | IN | 0.0043 ETH | 0.00252277 | ||||
Claim Many Alpha... | 16227494 | 600 days ago | IN | 0.0018 ETH | 0.00208237 | ||||
Add Many To Stak... | 16112835 | 616 days ago | IN | 0.0018 ETH | 0.00341063 | ||||
Claim Many Genes... | 16093952 | 619 days ago | IN | 0.0018 ETH | 0.00158101 | ||||
Close Season Eea... | 16077671 | 621 days ago | IN | 0 ETH | 0.0003938 | ||||
Add Many To Stak... | 16071975 | 622 days ago | IN | 0.0018 ETH | 0.0032276 | ||||
Claim Many Alpha... | 16070648 | 622 days ago | IN | 0.0018 ETH | 0.0018991 | ||||
Claim Many Alpha... | 16070642 | 622 days ago | IN | 0.0018 ETH | 0.00180653 | ||||
Add Many To Stak... | 16053568 | 624 days ago | IN | 0.0018 ETH | 0.00238226 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
17908987 | 364 days ago | 0.0018 ETH | ||||
17356548 | 441 days ago | 0.0018 ETH | ||||
17243506 | 457 days ago | 0.0018 ETH | ||||
17177002 | 467 days ago | 0.0018 ETH | ||||
17115704 | 475 days ago | 0.0018 ETH | ||||
16888466 | 507 days ago | 0.0018 ETH | ||||
16888466 | 507 days ago | 0.0005 ETH | ||||
16856522 | 512 days ago | 0.0018 ETH | ||||
16856522 | 512 days ago | 0.0005 ETH | ||||
16674815 | 538 days ago | 0.0018 ETH | ||||
16651586 | 541 days ago | 0.0018 ETH | ||||
16651584 | 541 days ago | 0.0018 ETH | ||||
16651584 | 541 days ago | 0.0015 ETH | ||||
16631612 | 544 days ago | 0.0018 ETH | ||||
16631612 | 544 days ago | 0.0015 ETH | ||||
16502673 | 562 days ago | 0.0018 ETH | ||||
16494037 | 563 days ago | 0.0018 ETH | ||||
16493829 | 563 days ago | 0.0018 ETH | ||||
16493829 | 563 days ago | 0.0055 ETH | ||||
16328200 | 586 days ago | 0.0018 ETH | ||||
16274858 | 593 days ago | 0.0018 ETH | ||||
16274858 | 593 days ago | 0.0025 ETH | ||||
16227494 | 600 days ago | 0.0018 ETH | ||||
16112835 | 616 days ago | 0.0018 ETH | ||||
16093952 | 619 days ago | 0.0018 ETH |
Loading...
Loading
Contract Name:
MoonForceHQ
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT LICENSE pragma solidity ^0.8.0; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/security/ReentrancyGuard.sol"; import "../interfaces/INFT.sol"; import "../interfaces/ITOPIA.sol"; import "../interfaces/IHUB.sol"; import "../interfaces/IRandomizer.sol"; contract MoonForceHQ is Ownable, ReentrancyGuard { // struct to store a stake's token, owner, and earning values struct Stake { uint16 tokenId; uint80 value; address owner; uint80 stakedAt; } // struct to store a stake's token, owner, and earning values struct StakeAlpha { uint16 tokenId; uint80 value; address owner; uint80 stakedAt; } struct Migration { uint16 generalTokenId; address generalOwner; uint80 value; uint80 migrationTime; } mapping(uint16 => uint8) public weaponType; mapping(uint16 => uint8) public genesisType; uint256 private numCadetsStaked; // number of Alien staked uint256 private numAlienStaked; // number of General staked uint256 private numGeneralStaked; // number of Alpha staked uint256 private numAlphasStaked; uint256 public PERIOD = 1 days; event TokenStaked(address indexed owner, uint256 indexed tokenId, uint8 tokenType, uint256 timeStamp); event CadetClaimed(uint256 indexed tokenId, bool indexed unstaked, uint256 earned); event CadetUnStaked(address indexed owner, uint256 indexed tokenId, uint256 blockNum, uint256 timeStamp); event AlienClaimed(uint256 indexed tokenId, bool indexed unstaked, uint256 earned); event AlienUnStaked(address indexed owner, uint256 indexed tokenId, uint256 blockNum, uint256 timeStamp); event GeneralClaimed(uint256 indexed tokenId, bool indexed unstaked, uint256 earned); event GeneralUnStaked(address indexed owner, uint256 indexed tokenId, uint256 blockNum, uint256 timeStamp); event WeaponChanged(address indexed owner, uint256 tokenId, uint8 upgrade); event AlphaStaked(address indexed owner, uint256 indexed tokenId, uint256 value); event AlphaClaimed(uint256 indexed tokenId, bool indexed unstaked, uint256 earned); event AlphaUnstaked(address indexed owner, uint256 indexed tokenId, uint256 blockNum, uint256 timeStamp); event GeneralMigrated(address indexed owner, uint16 id, bool returning); event GenesisStolen (uint16 indexed tokenId, address victim, address thief, uint8 nftType, uint256 timeStamp); // reference to the NFT contract INFT public lfGenesis; INFT public lfAlpha; IHUB public HUB; // reference to Randomizer IRandomizer public randomizer; address payable vrf; address payable dev; mapping(uint16 => Migration) public WastelandGenerals; // for vets sent to wastelands mapping(uint16 => bool) public IsInWastelands; // if vet token ID is in the wastelands // maps Cadet tokenId to stake mapping(uint256 => Stake) private cadet; // maps Alpha tokenId to stakeAlpha mapping(uint256 => StakeAlpha) private alpha; // maps Alien tokenId to stake mapping(uint256 => Stake) private alien; // maps General tokenId to stake mapping(uint256 => Stake) private general; mapping(address => uint256) ownerBalanceStaked; mapping(uint16 => bool) public IsInPlatoon; mapping(address => bool) public HasPlatoon; // any rewards distributed when no Aliens are staked uint256 private unaccountedAlienRewards; // amount of $TOPIA due for each alien staked uint256 private TOPIAPerAlien; // any rewards distributed when no Generals are staked uint256 private unaccountedGeneralRewards; // amount of $TOPIA due for each General staked uint256 private TOPIAPerGeneral; // for staked tier 3 nfts uint256 public WASTELAND_BONUS = 100 * 10**18; // Cadets earn 20 $TOPIA per day uint256 public DAILY_CADET_RATE = 5 * 10**18; // Cadets earn 35 $TOPIA per day uint256 public DAILY_ALPHA_RATE = 10 * 10**18; // rolling price uint256 public UPGRADE_COST = 40 * 10**18; // Generals take a 3% tax on all $TOPIA claimed uint256 public GENERAL_TAX_RATE_1 = 300; // Generals take a 10% tax on all $TOPIA from upgrades uint256 public GENERAL_TAX_RATE_2 = 1000; // tx cost for getting random numbers uint256 public SEED_COST = .0005 ether; // tx cost uint256 public DEV_FEE = .0018 ether; // amount of $TOPIA earned so far uint256 public totalTOPIAEarned; // the last time $TOPIA can be earned uint80 public claimEndTime = 1669662000; uint8 public minimumForPlatoon; mapping(address => uint16) public GroupLength; /** */ constructor(uint8 _minimumForPlatoon) { dev = payable(msg.sender); minimumForPlatoon = _minimumForPlatoon; } /** CRITICAL TO SETUP */ modifier requireContractsSet() { require(address(lfGenesis) != address(0) && address(randomizer) != address(0) && address(HUB) != address(0), "Contracts not set"); _; } function setContracts(address _lfGenesis, address _lfAlpha, address _HUB, address payable _rand) external onlyOwner { lfGenesis = INFT(_lfGenesis); lfAlpha = INFT(_lfAlpha); randomizer = IRandomizer(_rand); HUB = IHUB(_HUB); vrf = _rand; } function _isContract(address _addr) internal view returns (bool) { uint256 size; assembly { size := extcodesize(_addr) } return size > 0; } modifier notContract() { require(!_isContract(msg.sender), "no contract"); require(msg.sender == tx.origin, "no proxy"); _; } // mass update the nftType mapping function setBatchNFTType(uint16[] calldata tokenIds, uint8[] calldata _types) external onlyOwner { require(tokenIds.length == _types.length , "wrong array length"); for (uint16 i = 0; i < tokenIds.length;) { require(_types[i] != 0 , "Invalid nft type"); genesisType[tokenIds[i]] = _types[i]; unchecked{ i++; } } } function setMinimumForPlatoon(uint8 _min) external onlyOwner { minimumForPlatoon = _min; } function setWastelandsBonus(uint256 _bonus) external onlyOwner { WASTELAND_BONUS = _bonus; } /** STAKING */ /** * adds Aliens and Cadet * @param account the address of the staker * @param tokenIds the IDs of the Aliens and Cadet to stake */ function addManyToStakingPool(address account, uint16[] calldata tokenIds) external payable nonReentrant notContract() { require(msg.value == DEV_FEE, "need more eth"); uint8[] memory tokenTypes = new uint8[](tokenIds.length); for (uint i = 0; i < tokenIds.length;) { require(lfGenesis.ownerOf(tokenIds[i]) == msg.sender, "not owner"); if (genesisType[tokenIds[i]] == 1) { tokenTypes[i] = 4; _addCadetToStakingPool(account, tokenIds[i]); } else if (genesisType[tokenIds[i]] == 2) { tokenTypes[i] = 5; _addAlienToStakingPool(account, tokenIds[i]); } else if (genesisType[tokenIds[i]] == 3) { tokenTypes[i] = 6; _addGeneralToStakingPool(account, tokenIds[i]); } else if (genesisType[tokenIds[i]] == 0) { revert("Invalid Token Id"); } unchecked{ i++; } } HUB.receieveManyGenesis(msg.sender, tokenIds, tokenTypes, 2); dev.transfer(DEV_FEE); } /** * adds a single Alien to the Armory * @param account the address of the staker * @param tokenId the ID of the Alien/General to add to the Staking Pool */ function _addAlienToStakingPool(address account, uint16 tokenId) internal { alien[tokenId] = Stake({ owner : account, tokenId : tokenId, value : uint80(TOPIAPerAlien), stakedAt : uint80(block.timestamp) }); numAlienStaked += 1; emit TokenStaked(account, tokenId, 2, block.timestamp); } /** * adds a single General to the Armory * @param account the address of the staker * @param tokenId the ID of the Alien/General to add to the Staking Pool */ function _addGeneralToStakingPool(address account, uint16 tokenId) internal { general[tokenId] = Stake({ owner : account, tokenId : tokenId, value : uint80(TOPIAPerGeneral), stakedAt : uint80(block.timestamp) }); numGeneralStaked += 1; emit TokenStaked(account, tokenId, 3, block.timestamp); } /** * adds a single Cadet to the armory * @param account the address of the staker * @param tokenId the ID of the Cadet to add to the Staking Pool */ function _addCadetToStakingPool(address account, uint16 tokenId) internal { cadet[tokenId] = Stake({ owner : account, tokenId : tokenId, value : uint80(block.timestamp), stakedAt : uint80(block.timestamp) }); numCadetsStaked += 1; emit TokenStaked(account, tokenId, 1, block.timestamp); } /** CLAIMING / UNSTAKING */ /** * realize $TOPIA earnings and optionally unstake tokens from the Armory / Yield * to unstake a Cadet it will require it has 2 days worth of $TOPIA unclaimed * @param tokenIds the IDs of the tokens to claim earnings from * @param unstake whether or not to unstake ALL of the tokens listed in tokenIds */ function claimManyGenesis(uint16[] calldata tokenIds, uint8 _type, bool unstake) external payable nonReentrant notContract() { require(tx.origin == msg.sender, "Only EOA"); uint256 numWords; if(_type == 1) { numWords = tokenIds.length; require(msg.value == DEV_FEE + (SEED_COST * numWords), "need more eth"); } else { require(msg.value == DEV_FEE, "need more eth"); } uint256[] memory seed; if(_type == 1) { uint256 remainingWords = randomizer.getRemainingWords(); require(remainingWords >= numWords, "try again soon."); seed = randomizer.getRandomWords(numWords); } uint256 owed = 0; for (uint i = 0; i < tokenIds.length;) { require(!IsInPlatoon[tokenIds[i]]); if (genesisType[tokenIds[i]] == 1) { require(_type == 1, 'wrong type for call'); owed += _claimCadetFromPool(tokenIds[i], unstake, seed[i]); } else if (genesisType[tokenIds[i]] == 2) { require(_type == 2, 'wrong type for call'); owed += _claimAlienFromPool(tokenIds[i], unstake); } else if (genesisType[tokenIds[i]] == 3) { require(_type == 3, 'wrong type for call'); owed += _claimGeneralFromPool(tokenIds[i], unstake); } else if (genesisType[tokenIds[i]] == 0) { revert("Invalid Token Id"); } unchecked{ i++; } } uint256 vrfAmount = msg.value - DEV_FEE; if(vrfAmount > 0) { vrf.transfer(vrfAmount); } dev.transfer(DEV_FEE); if (owed == 0) { return; } totalTOPIAEarned += owed; HUB.pay(msg.sender, owed); } function getTXCost(uint16[] calldata tokenIds, uint8 _type) external view returns (uint256 txCost) { if(_type == 1) { txCost = DEV_FEE + (SEED_COST * tokenIds.length); } else { txCost = DEV_FEE; } } /** * realize $TOPIA earnings for a single Cadet and optionally unstake it * if not unstaking, lose x% chance * y% percent of accumulated $TOPIA to the staked Aliens based on it's upgrade * if unstaking, there is a % chanc of losing Cadet NFT * @param tokenId the ID of the Cadet to claim earnings from * @param unstake whether or not to unstake the Cadet * @return owed - the amount of $TOPIA earned */ function _claimCadetFromPool(uint16 tokenId, bool unstake, uint256 seed) internal returns (uint256 owed) { require(cadet[tokenId].owner == msg.sender, "not owner"); if(block.timestamp <= claimEndTime) { owed = (block.timestamp - cadet[tokenId].value) * DAILY_CADET_RATE / PERIOD; } else if (cadet[tokenId].value < claimEndTime) { owed = (claimEndTime - cadet[tokenId].value) * DAILY_CADET_RATE / PERIOD; } else { owed = 0; } uint256 generalTax = owed * GENERAL_TAX_RATE_1 / 10000; _payGeneralTax(generalTax); owed = owed - generalTax; uint256 seedChance = seed >> 16; uint8 cadetUpgrade = weaponType[tokenId]; bool stolen = false; address thief; if (unstake) { // Chance to lose cadet: // Unarmed: 30% // Sword: 20% // Pistol: 10% // Sniper: 5% if (cadetUpgrade == 0) { if ((seed & 0xFFFF) % 100 < 50) { thief = HUB.stealGenesis(tokenId, seed, 2, 4, msg.sender); stolen = true; } else { // lose accumulated tokens 50% chance and 60 percent of all token if ((seedChance & 0xFFFF) % 100 < 50) { _payAlienTax(owed * 60 / 100); owed = owed * 40 / 100; } } } else if (cadetUpgrade == 1) { if ((seed & 0xFFFF) % 100 < 40) { thief = HUB.stealGenesis(tokenId, seed, 2, 4, msg.sender); stolen = true; } else { // lose accumulated tokens 80% chance and 25 percent of all token if ((seedChance & 0xFFFF) % 100 < 80) { _payAlienTax(owed * 25 / 100); owed = owed * 75 / 100; } } } else if (cadetUpgrade == 2) { if ((seed & 0xFFFF) % 100 < 25) { thief = HUB.stealGenesis(tokenId, seed, 2, 4, msg.sender); stolen = true; } else { // lose accumulated tokens 25% chance and 40 percent of all token if ((seedChance & 0xFFFF) % 100 < 25) { _payAlienTax(owed * 40 / 100); owed = owed * 60 / 100; } } } else if (cadetUpgrade == 3) { if ((seed & 0xFFFF) % 100 < 15) { thief = HUB.stealGenesis(tokenId, seed, 2, 4, msg.sender); stolen = true; } else { // lose accumulated tokens 20% chance and 25 percent of all token if ((seedChance & 0xFFFF) % 100 < 20) { _payAlienTax(owed * 25 / 100); owed = owed * 75 / 100; } } } delete cadet[tokenId]; numCadetsStaked -= 1; if (stolen) { weaponType[tokenId] = 0; emit GenesisStolen (tokenId, msg.sender, thief, 1, block.timestamp); } else { // Always transfer last to guard against reentrance HUB.returnGenesisToOwner(msg.sender, tokenId, 4, 2); } emit CadetUnStaked(msg.sender, tokenId, block.number, block.timestamp); } else {// Claiming if (cadetUpgrade == 0) { // lose accumulated tokens 50% chance and 60 percent of all token if ((seedChance & 0xFFFF) % 100 < 50) { _payAlienTax(owed * 60 / 100); owed = owed * 40 / 100; } } else if (cadetUpgrade == 1) { // lose accumulated tokens 80% chance and 25 percent of all token if ((seedChance & 0xFFFF) % 100 < 80) { _payAlienTax(owed * 25 / 100); owed = owed * 75 / 100; } } else if (cadetUpgrade == 2) { // lose accumulated tokens 25% chance and 40 percent of all token if ((seedChance & 0xFFFF) % 100 < 25) { _payAlienTax(owed * 40 / 100); owed = owed * 60 / 100; } } else if (cadetUpgrade == 3) { // lose accumulated tokens 20% chance and 25 percent of all token if ((seedChance & 0xFFFF) % 100 < 20) { _payAlienTax(owed * 25 / 100); owed = owed * 75 / 100; } } cadet[tokenId].value = uint80(block.timestamp); // reset stake } emit CadetClaimed(tokenId, unstake, owed); } /** * realize $TOPIA earnings for a single Alien and optionally unstake it * Aliens earn $TOPIA * @param tokenId the ID of the Alien to claim earnings from * @param unstake whether or not to unstake the Alien */ function _claimAlienFromPool(uint16 tokenId, bool unstake) internal returns (uint256 owed) { require(alien[tokenId].owner == msg.sender, "not owner"); owed = TOPIAPerAlien - alien[tokenId].value; if (unstake) { delete alien[tokenId]; numAlienStaked -= 1; // Always remove last to guard against reentrance HUB.returnGenesisToOwner(msg.sender, tokenId, 5, 2); emit AlienUnStaked(msg.sender, tokenId, block.number, block.timestamp); } else { alien[tokenId].value = uint80(TOPIAPerAlien); // reset stake } emit AlienClaimed(tokenId, unstake, owed); } /** * realize $TOPIA earnings for a General Alien and optionally unstake it * Aliens earn $TOPIA * @param tokenId the ID of the Alien to claim earnings from * @param unstake whether or not to unstake the General Alien */ function _claimGeneralFromPool(uint16 tokenId, bool unstake) internal returns (uint256 owed) { require(general[tokenId].owner == msg.sender, "not owner"); owed = TOPIAPerGeneral - general[tokenId].value; if (unstake) { delete general[tokenId]; numGeneralStaked -= 1; // Always remove last to guard against reentrance HUB.returnGenesisToOwner(msg.sender, tokenId, 6, 2); // Send back General emit GeneralUnStaked(msg.sender, tokenId, block.number, block.timestamp); } else { general[tokenId].value = uint80(TOPIAPerGeneral); // reset stake } emit GeneralClaimed(tokenId, unstake, owed); } /* * implement cadet upgrade */ function upgradeWeapon(uint16 tokenId) external payable nonReentrant notContract() returns(uint8) { require(genesisType[tokenId] == 1, "not cadet"); require(msg.value == DEV_FEE + SEED_COST, "need more eth"); HUB.burnFrom(msg.sender, UPGRADE_COST); _payGeneralTax(UPGRADE_COST * GENERAL_TAX_RATE_2 / 10000); uint256 remainingWords = randomizer.getRemainingWords(); require(remainingWords >= 1, "try again soon."); uint256[] memory seed = randomizer.getRandomWords(1); uint8 upgrade; /* * Odds to Upgrade: * Unarmed: Default * Sword: 70% * Pistol: 20% * Sniper: 10% */ if ((seed[0] & 0xFFFF) % 100 < 10) { upgrade = 3; } else if((seed[0] & 0xFFFF) % 100 < 30) { upgrade = 2; } else { upgrade = 1; } weaponType[tokenId] = upgrade; uint256 vrfAmount = msg.value - DEV_FEE; if(vrfAmount > 0) { vrf.transfer(vrfAmount); } dev.transfer(DEV_FEE); emit WeaponChanged(msg.sender, tokenId, upgrade); return upgrade; } /** ACCOUNTING */ /** * add $TOPIA to claimable pot for the Yield * @param amount $TOPIA to add to the pot */ function _payAlienTax(uint256 amount) internal { if (numAlienStaked == 0) {// if there's no staked aliens unaccountedAlienRewards += amount; // keep track of $TOPIA due to aliens return; } // makes sure to include any unaccounted $GP TOPIAPerAlien += (amount + unaccountedAlienRewards) / numAlienStaked; unaccountedAlienRewards = 0; } /** * add $TOPIA to claimable pot for the General Yield * @param amount $TOPIA to add to the pot */ function _payGeneralTax(uint256 amount) internal { if (numGeneralStaked == 0) {// if there's no staked generals unaccountedGeneralRewards += amount; // keep track of $TOPIA due to generals return; } // makes sure to include any unaccounted $GP TOPIAPerGeneral += (amount + unaccountedGeneralRewards) / numGeneralStaked; unaccountedGeneralRewards = 0; } /** ALPHA FUNCTIONS */ /** * adds Aliens and Cadet * @param account the address of the staker * @param tokenIds the IDs of the Aliens and Cadet to stake */ function addManyAlphaToStakingPool(address account, uint16[] calldata tokenIds) external payable nonReentrant notContract() { require(msg.value == DEV_FEE, "need more eth"); for (uint i = 0; i < tokenIds.length;) { require(lfAlpha.ownerOf(tokenIds[i]) == msg.sender, "not owner"); HUB.receiveAlpha(msg.sender, tokenIds[i], 2); alpha[tokenIds[i]] = StakeAlpha({ owner : account, tokenId : uint16(tokenIds[i]), value : uint80(block.timestamp), stakedAt : uint80(block.timestamp) }); numAlphasStaked += 1; emit AlphaStaked(account, tokenIds[i], block.timestamp); unchecked{ i++; } } dev.transfer(DEV_FEE); } /** * realize $TOPIA earnings and optionally unstake Alpha tokens * @param tokenIds the IDs of the tokens to claim earnings from * @param unstake whether or not to unstake ALL of the tokens listed in tokenIds */ function claimManyAlphas(uint16[] calldata tokenIds, bool unstake) external payable nonReentrant notContract() { require(msg.value == DEV_FEE, "need more eth"); uint256 owed = 0; for (uint i = 0; i < tokenIds.length;) { require(alpha[tokenIds[i]].owner == msg.sender, "not owner"); if(block.timestamp <= claimEndTime) { owed += (block.timestamp - alpha[tokenIds[i]].value) * DAILY_ALPHA_RATE / PERIOD; } else if (alpha[tokenIds[i]].value < claimEndTime) { owed += (claimEndTime - alpha[tokenIds[i]].value) * DAILY_ALPHA_RATE / PERIOD; } else { owed += 0; } if (unstake) { delete alpha[tokenIds[i]]; numAlphasStaked -= 1; HUB.returnAlphaToOwner(msg.sender, tokenIds[i], 2); } else { alpha[tokenIds[i]].value = uint80(block.timestamp); } emit AlphaClaimed(tokenIds[i], unstake, owed); unchecked{ i++; } } if (owed == 0) { return; } HUB.pay(msg.sender, owed); totalTOPIAEarned += owed; dev.transfer(DEV_FEE); } function isOwner(uint16 tokenId, address owner) external view returns (bool validOwner) { if (genesisType[tokenId] == 1) { return cadet[tokenId].owner == owner; } else if (genesisType[tokenId] == 2) { return alien[tokenId].owner == owner; } else if (genesisType[tokenId] == 3) { return general[tokenId].owner == owner; } } /** READ ONLY */ function getUnclaimedAlpha(uint16 tokenId) external view returns (uint256) { if(alpha[tokenId].value > 0) { if(block.timestamp <= claimEndTime) { return (block.timestamp - alpha[tokenId].value) * DAILY_ALPHA_RATE / PERIOD; } else if (alpha[tokenId].value < claimEndTime) { return (claimEndTime - alpha[tokenId].value) * DAILY_ALPHA_RATE / PERIOD; } else { return 0; } } else { return 0; } } function getUnclaimedGenesis(uint16 tokenId) external view returns (uint256 owed) { owed = 0; if (genesisType[tokenId] == 1 && cadet[tokenId].value > 0) { if(block.timestamp <= claimEndTime) { return (block.timestamp - cadet[tokenId].value) * DAILY_CADET_RATE / PERIOD; } else if (cadet[tokenId].value < claimEndTime) { return (claimEndTime - cadet[tokenId].value) * DAILY_CADET_RATE / PERIOD; } else { return 0; } } else if (genesisType[tokenId] == 2 && alien[tokenId].owner != address(0)) { return TOPIAPerAlien - alien[tokenId].value; } else if (genesisType[tokenId] == 3) { if(IsInWastelands[tokenId]) { return WastelandGenerals[tokenId].value; } else if (general[tokenId].owner != address(0)) { return TOPIAPerGeneral - general[tokenId].value; } } return owed; } function updateDailyCadetRate(uint256 _rate) external onlyOwner { DAILY_CADET_RATE = _rate; } function updateDailyAlphaRate(uint256 _rate) external onlyOwner { DAILY_ALPHA_RATE = _rate; } function updateGeneralTaxRate1(uint16 _rate) external onlyOwner { GENERAL_TAX_RATE_1 = _rate; } function updateGeneralTaxRate2(uint16 _rate) external onlyOwner { GENERAL_TAX_RATE_2 = _rate; } function updateCadetUpgradeCost(uint256 _cost) external onlyOwner { UPGRADE_COST = _cost; } function updateSeedCost(uint256 _cost) external onlyOwner { SEED_COST = _cost; } function updateDevCost(uint256 _cost) external onlyOwner { DEV_FEE = _cost; } function updateDev(address payable _dev) external onlyOwner { dev = _dev; } function closeSeasonEearnings(uint80 _timestamp) external onlyOwner { claimEndTime = _timestamp; } function createPlatoon(uint16[] calldata _tokenIds) external payable nonReentrant notContract() { require(!HasPlatoon[msg.sender] , "You already have a platoon"); require(msg.value == DEV_FEE, "need more eth"); uint16 length = uint16(_tokenIds.length); require(length >= minimumForPlatoon , "Not enough cadets"); for (uint16 i = 0; i < length;) { require(lfGenesis.ownerOf(_tokenIds[i]) == msg.sender , "not owner"); require(genesisType[_tokenIds[i]] == 1 , "only cadets"); require(!IsInPlatoon[_tokenIds[i]], "NFT can only be in 1 platoon"); require(weaponType[_tokenIds[i]] == 2 || weaponType[_tokenIds[i]] == 3 , "cadet must have sniper or pistol"); cadet[_tokenIds[i]] = Stake({ owner : msg.sender, tokenId : _tokenIds[i], value : uint80(block.timestamp), stakedAt : uint80(block.timestamp) }); emit TokenStaked(msg.sender, _tokenIds[i], 1, block.timestamp); IsInPlatoon[_tokenIds[i]] = true; unchecked{ i++; } } GroupLength[msg.sender] = length; numCadetsStaked += length; HUB.createGroup(_tokenIds, msg.sender, 2); HasPlatoon[msg.sender] = true; dev.transfer(DEV_FEE); } function addToPlatoon(uint16 _id) external payable nonReentrant notContract() { require(HasPlatoon[msg.sender], "Must have Platoon!"); require(msg.value == DEV_FEE, "need more eth"); require(lfGenesis.ownerOf(_id) == msg.sender, "not owner"); require(genesisType[_id] == 1 , "not cadet"); require(!IsInPlatoon[_id], "NFT can only be in 1 platoon"); require(weaponType[_id] == 2 || weaponType[_id] == 3 , "cadet must have sniper or pistol"); cadet[_id] = Stake({ owner : msg.sender, tokenId : _id, value : uint80(block.timestamp), stakedAt : uint80(block.timestamp) }); emit TokenStaked(msg.sender, _id, 1, block.timestamp); IsInPlatoon[_id] = true; numCadetsStaked++; GroupLength[msg.sender]++; HUB.addToGroup(_id, msg.sender, 2); dev.transfer(DEV_FEE); } function claimPlatoon(uint16[] calldata tokenIds, bool unstake) external payable notContract() { require(HasPlatoon[msg.sender] , "Must own Platoon"); uint256 numWords = tokenIds.length; require(msg.value == DEV_FEE + (SEED_COST * numWords), "need more eth"); uint256[] memory seed; uint8 theftModifier; // for NFT stealing uint8 claimModifier; // for TOPIA stealing if (numWords <= 10) { claimModifier = 5 * uint8(numWords); } else {claimModifier = 50;} if(unstake) { if (numWords <= 10) { theftModifier = uint8(numWords); } else {theftModifier = 10;} require(GroupLength[msg.sender] == numWords); } uint256 remainingWords = randomizer.getRemainingWords(); require(remainingWords >= numWords, "try again soon."); seed = randomizer.getRandomWords(numWords); uint256 owed = 0; for (uint i = 0; i < tokenIds.length;) { require(genesisType[tokenIds[i]] == 1 , "Must be cadets"); require(IsInPlatoon[tokenIds[i]] , "NFT must be in Platoon"); require(cadet[tokenIds[i]].owner == msg.sender, "!= owner"); uint256 thisOwed; if(block.timestamp <= claimEndTime) { thisOwed = (block.timestamp - cadet[tokenIds[i]].value) * DAILY_CADET_RATE / PERIOD; } else if (cadet[tokenIds[i]].value < claimEndTime) { thisOwed = (claimEndTime - cadet[tokenIds[i]].value) * DAILY_CADET_RATE / PERIOD; } else { thisOwed = 0; } uint256 seedChance = seed[i] >> 16; if (unstake) { if ((seed[i] & 0xFFFF) % 100 < (10 - theftModifier) && HUB.alphaCount(2) > 0) { address thief = HUB.stealGenesis(tokenIds[i], seed[i], 2, 4, msg.sender); emit GenesisStolen(tokenIds[i], msg.sender, thief, 1, block.timestamp); } else { // lose accumulated tokens 50% chance and 60 percent of all token if ((seedChance & 0xFFFF) % 100 < (50 - claimModifier)) { _payAlienTax(thisOwed * 25 / 100); thisOwed = thisOwed * 75 / 100; } HUB.returnGenesisToOwner(msg.sender, tokenIds[i], 4, 2); } delete cadet[tokenIds[i]]; IsInPlatoon[tokenIds[i]] = false; emit CadetUnStaked(msg.sender, tokenIds[i], block.number, block.timestamp); } else {// Claiming // lose accumulated tokens 50% chance and 25 percent of all token if ((seedChance & 0xFFFF) % 100 < (50 - claimModifier)) { _payAlienTax(thisOwed * 25 / 100); thisOwed = thisOwed * 75 / 100; } cadet[tokenIds[i]].value = uint80(block.timestamp); // reset stake } emit CadetClaimed(tokenIds[i], unstake, owed); owed += thisOwed; unchecked{ i++; } } if (unstake) { HasPlatoon[msg.sender] = false; numCadetsStaked -= numWords; HUB.unstakeGroup(msg.sender, 2); GroupLength[msg.sender] = 0; } uint256 vrfAmount = msg.value - DEV_FEE; if (vrfAmount > 0) { vrf.transfer(vrfAmount); } dev.transfer(DEV_FEE); if (owed == 0) { return; } totalTOPIAEarned += owed; HUB.pay(msg.sender, owed); } function sendGeneralToWastelands(uint16[] calldata _ids) external payable notContract() { uint256 numWords = _ids.length; require(msg.value == DEV_FEE + (SEED_COST * numWords), "need more eth"); require(randomizer.getRemainingWords() >= numWords, "try again soon."); uint256[] memory seed = randomizer.getRandomWords(numWords); for (uint16 i = 0; i < numWords;) { require(lfGenesis.ownerOf(_ids[i]) == msg.sender, "not owner"); require(genesisType[_ids[i]] == 3, "not a General"); require(!IsInWastelands[_ids[i]] , "already in wastes"); if (HUB.alienCount() > 0 && (seed[i]) % 100 < 25) { // stolen address thief = HUB.stealMigratingGenesis(_ids[i], seed[i], 2, msg.sender, false); emit GenesisStolen (_ids[i], msg.sender, thief, 3, block.timestamp); } else { HUB.migrate(_ids[i], msg.sender, 2, false); WastelandGenerals[_ids[i]].generalTokenId = _ids[i]; WastelandGenerals[_ids[i]].generalOwner = msg.sender; WastelandGenerals[_ids[i]].value = uint80(WASTELAND_BONUS); WastelandGenerals[_ids[i]].migrationTime = uint80(block.timestamp); IsInWastelands[_ids[i]] = true; emit GeneralMigrated(msg.sender, _ids[i], false); } unchecked { i++; } } uint256 vrfAmount = msg.value - DEV_FEE; if (vrfAmount > 0) { vrf.transfer(vrfAmount); } dev.transfer(DEV_FEE); } function claimManyWastelands(uint16[] calldata _ids, bool unstake) external payable notContract() { uint256 numWords = _ids.length; uint256[] memory seed; if(unstake) { require(msg.value == DEV_FEE + (SEED_COST * numWords), "need more eth"); require(randomizer.getRemainingWords() >= numWords, "try again soon."); seed = randomizer.getRandomWords(numWords); } else { require(msg.value == DEV_FEE, "need more eth"); } uint256 owed = 0; for (uint16 i = 0; i < numWords;) { require(IsInWastelands[_ids[i]] , "not in wastes"); require(msg.sender == WastelandGenerals[_ids[i]].generalOwner , "not owner"); owed += WastelandGenerals[_ids[i]].value; if (unstake) { if (HUB.alienCount() > 0 && (seed[i]) % 100 < 25) { // stolen address thief = HUB.stealMigratingGenesis(_ids[i], seed[i], 2, msg.sender, true); emit GenesisStolen(_ids[i], msg.sender, thief, 3, block.timestamp); } else { HUB.migrate(_ids[i], msg.sender, 2, true); emit GeneralMigrated(msg.sender, _ids[i], true); } IsInWastelands[_ids[i]] = false; delete WastelandGenerals[_ids[i]]; } else { WastelandGenerals[_ids[i]].value = uint80(0); // reset value } emit GeneralClaimed(_ids[i], unstake, owed); unchecked { i++; } } uint256 vrfAmount = msg.value - DEV_FEE; if (vrfAmount > 0) { vrf.transfer(vrfAmount); } dev.transfer(DEV_FEE); if (owed == 0) { return; } totalTOPIAEarned += owed; HUB.pay(msg.sender, owed); } }
// SPDX-License-Identifier: MIT LICENSE pragma solidity ^0.8.0; interface IRandomizer { function requestRandomWords() external returns (uint256); function requestManyRandomWords(uint256 numWords) external returns (uint256); function getRandomWords(uint256 number) external returns (uint256[] memory); function getRemainingWords() external view returns (uint256); }
// SPDX-License-Identifier: MIT LICENSE pragma solidity ^0.8.0; interface IHUB { function balanceOf(address owner) external view returns (uint256); function pay(address _to, uint256 _amount) external; function burnFrom(address _to, uint256 _amount) external; // *** STEAL function stealGenesis(uint16 _id, uint256 seed, uint8 _gameId, uint8 identifier, address _victim) external returns (address thief); function stealMigratingGenesis(uint16 _id, uint256 seed, uint8 _gameId, address _victim, bool returningFromWastelands) external returns (address thief); function migrate(uint16 _id, address _originalOwner, uint8 _gameId, bool returningFromWastelands) external; // *** RETURN AND RECEIVE function returnGenesisToOwner(address _returnee, uint16 _id, uint8 identifier, uint8 _gameIdentifier) external; function receieveManyGenesis(address _originalOwner, uint16[] memory _ids, uint8[] memory identifiers, uint8 _gameIdentifier) external; function returnAlphaToOwner(address _returnee, uint16 _id, uint8 _gameIdentifier) external; function receiveAlpha(address _originalOwner, uint16 _id, uint8 _gameIdentifier) external; function returnRatToOwner(address _returnee, uint16 _id) external; function receiveRat(address _originalOwner, uint16 _id) external; // *** BULLRUN function getRunnerOwner(uint16 _id) external view returns (address); function getMatadorOwner(uint16 _id) external view returns (address); function getBullOwner(uint16 _id) external view returns (address); function bullCount() external view returns (uint16); function matadorCount() external view returns (uint16); function runnerCount() external view returns (uint16); // *** MOONFORCE function getCadetOwner(uint16 _id) external view returns (address); function getAlienOwner(uint16 _id) external view returns (address); function getGeneralOwner(uint16 _id) external view returns (address); function cadetCount() external view returns (uint16); function alienCount() external view returns (uint16); function generalCount() external view returns (uint16); // *** DOGE WORLD function getCatOwner(uint16 _id) external view returns (address); function getDogOwner(uint16 _id) external view returns (address); function getVetOwner(uint16 _id) external view returns (address); function catCount() external view returns (uint16); function dogCount() external view returns (uint16); function vetCount() external view returns (uint16); // *** PYE MARKET function getBakerOwner(uint16 _id) external view returns (address); function getFoodieOwner(uint16 _id) external view returns (address); function getShopOwnerOwner(uint16 _id) external view returns (address); function bakerCount() external view returns (uint16); function foodieCount() external view returns (uint16); function shopOwnerCount() external view returns (uint16); // *** ALPHAS AND RATS function alphaCount(uint8 _gameIdentifier) external view returns (uint16); function ratCount() external view returns (uint16); // *** NFT GROUP FUNCTION function createGroup(uint16[] calldata _ids, address _creator, uint8 _gameIdentifier) external; function addToGroup(uint16 _id, address _creator, uint8 _gameIdentifier) external; function unstakeGroup(address _creator, uint8 _gameIdentifier) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.4; interface ITopia { function burn(uint256 _amount) external; function mint(address _to, uint256 _amount) external; function burnFrom(address _from, uint256 _amount) external; function decimals() external pure returns (uint8); function balanceOf(address owner) external view returns (uint); function updateOriginAccess() external; function transferFrom(address sender, address recipient, uint256 amount) external returns(bool); }
// SPDX-License-Identifier: MIT LICENSE pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol"; interface INFT is IERC721Enumerable { }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; import "../IERC721.sol"; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
{ "optimizer": { "enabled": true, "runs": 999 }, "viaIR": true, "evmVersion": "istanbul", "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint8","name":"_minimumForPlatoon","type":"uint8"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"bool","name":"unstaked","type":"bool"},{"indexed":false,"internalType":"uint256","name":"earned","type":"uint256"}],"name":"AlienClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"blockNum","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timeStamp","type":"uint256"}],"name":"AlienUnStaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"bool","name":"unstaked","type":"bool"},{"indexed":false,"internalType":"uint256","name":"earned","type":"uint256"}],"name":"AlphaClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"AlphaStaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"blockNum","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timeStamp","type":"uint256"}],"name":"AlphaUnstaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"bool","name":"unstaked","type":"bool"},{"indexed":false,"internalType":"uint256","name":"earned","type":"uint256"}],"name":"CadetClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"blockNum","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timeStamp","type":"uint256"}],"name":"CadetUnStaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"bool","name":"unstaked","type":"bool"},{"indexed":false,"internalType":"uint256","name":"earned","type":"uint256"}],"name":"GeneralClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint16","name":"id","type":"uint16"},{"indexed":false,"internalType":"bool","name":"returning","type":"bool"}],"name":"GeneralMigrated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"blockNum","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timeStamp","type":"uint256"}],"name":"GeneralUnStaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint16","name":"tokenId","type":"uint16"},{"indexed":false,"internalType":"address","name":"victim","type":"address"},{"indexed":false,"internalType":"address","name":"thief","type":"address"},{"indexed":false,"internalType":"uint8","name":"nftType","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"timeStamp","type":"uint256"}],"name":"GenesisStolen","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint8","name":"tokenType","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"timeStamp","type":"uint256"}],"name":"TokenStaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint8","name":"upgrade","type":"uint8"}],"name":"WeaponChanged","type":"event"},{"inputs":[],"name":"DAILY_ALPHA_RATE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DAILY_CADET_RATE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEV_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GENERAL_TAX_RATE_1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GENERAL_TAX_RATE_2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"GroupLength","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"HUB","outputs":[{"internalType":"contract IHUB","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"HasPlatoon","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"IsInPlatoon","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"IsInWastelands","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERIOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SEED_COST","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UPGRADE_COST","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WASTELAND_BONUS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"WastelandGenerals","outputs":[{"internalType":"uint16","name":"generalTokenId","type":"uint16"},{"internalType":"address","name":"generalOwner","type":"address"},{"internalType":"uint80","name":"value","type":"uint80"},{"internalType":"uint80","name":"migrationTime","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint16[]","name":"tokenIds","type":"uint16[]"}],"name":"addManyAlphaToStakingPool","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint16[]","name":"tokenIds","type":"uint16[]"}],"name":"addManyToStakingPool","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_id","type":"uint16"}],"name":"addToPlatoon","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"claimEndTime","outputs":[{"internalType":"uint80","name":"","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16[]","name":"tokenIds","type":"uint16[]"},{"internalType":"bool","name":"unstake","type":"bool"}],"name":"claimManyAlphas","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint16[]","name":"tokenIds","type":"uint16[]"},{"internalType":"uint8","name":"_type","type":"uint8"},{"internalType":"bool","name":"unstake","type":"bool"}],"name":"claimManyGenesis","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint16[]","name":"_ids","type":"uint16[]"},{"internalType":"bool","name":"unstake","type":"bool"}],"name":"claimManyWastelands","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint16[]","name":"tokenIds","type":"uint16[]"},{"internalType":"bool","name":"unstake","type":"bool"}],"name":"claimPlatoon","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint80","name":"_timestamp","type":"uint80"}],"name":"closeSeasonEearnings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16[]","name":"_tokenIds","type":"uint16[]"}],"name":"createPlatoon","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"genesisType","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16[]","name":"tokenIds","type":"uint16[]"},{"internalType":"uint8","name":"_type","type":"uint8"}],"name":"getTXCost","outputs":[{"internalType":"uint256","name":"txCost","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"tokenId","type":"uint16"}],"name":"getUnclaimedAlpha","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"tokenId","type":"uint16"}],"name":"getUnclaimedGenesis","outputs":[{"internalType":"uint256","name":"owed","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"tokenId","type":"uint16"},{"internalType":"address","name":"owner","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"validOwner","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lfAlpha","outputs":[{"internalType":"contract INFT","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lfGenesis","outputs":[{"internalType":"contract INFT","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumForPlatoon","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"randomizer","outputs":[{"internalType":"contract IRandomizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16[]","name":"_ids","type":"uint16[]"}],"name":"sendGeneralToWastelands","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint16[]","name":"tokenIds","type":"uint16[]"},{"internalType":"uint8[]","name":"_types","type":"uint8[]"}],"name":"setBatchNFTType","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_lfGenesis","type":"address"},{"internalType":"address","name":"_lfAlpha","type":"address"},{"internalType":"address","name":"_HUB","type":"address"},{"internalType":"address payable","name":"_rand","type":"address"}],"name":"setContracts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_min","type":"uint8"}],"name":"setMinimumForPlatoon","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_bonus","type":"uint256"}],"name":"setWastelandsBonus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalTOPIAEarned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"updateCadetUpgradeCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rate","type":"uint256"}],"name":"updateDailyAlphaRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rate","type":"uint256"}],"name":"updateDailyCadetRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_dev","type":"address"}],"name":"updateDev","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"updateDevCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_rate","type":"uint16"}],"name":"updateGeneralTaxRate1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_rate","type":"uint16"}],"name":"updateGeneralTaxRate2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"updateSeedCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"tokenId","type":"uint16"}],"name":"upgradeWeapon","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"weaponType","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
6080346200013457601f620056ca38819003918201601f19168301916001600160401b03831184841017620001395780849260209460405283398101031262000134575160ff8116810362000134576363850530600054916aff0000000000000000000060018060a01b031991338386161760005560405194339060018060a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3600180556201518060085568056bc75e2d63100000601c55674563918244f40000601d55678ac7230489e80000601e5568022b1c8c1227a00000601f5561012c6020556103e86021556601c6bf526340006022556606651728988000602355602554923390600e541617600e5560501b169060018060581b031916171760255561557a9081620001508239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe608080604052600436101561001357600080fd5b600090813560e01c9081630fd8965c146128555750806313667ed8146121fc578063140233cf146121de57806318b5f465146121c05780632397736a14611f035780632565963d14611e8e578063264c02bd14611e565780632bba8a1a14611e2d5780632bf9cdbb14611df15780632d062c3f14611dd35780633001323d14611daf5780633d34378814611d9157806340bbbf3f14611d6e57806340d1d25514611d47578063436a88c114611d295780634f04719614611ce75780635ec77d1114611cbb57806363ab097514611c8557806367efe74914611c5e578063715018a614611bf75780637bc09e3e14611bd45780637d037910146115395780637d5f95471461151b57806380235167146114de57806383eae271146114c1578063862b4237146114705780638aca0cad1461144d5780638da5cb5b146114275780638f6200bd146113fb5780639073c1b3146113d7578063934c19381461138b57806393a29995146113685780639e9569c51461134a578063a2bddd1714611323578063a4c52b86146112fc578063a6d2de98146112d8578063ad4203e4146112ac578063adbf466814610f4e578063b4d1d79514610f30578063b8ee3d0014610eb6578063bc10183f14610e7e578063bd48652e14610e60578063be07528b14610e29578063bf989b6e14610d8c578063cfe56cfc14610d69578063dbce286414610d25578063e343b62e14610828578063e4e85a9e14610536578063e5d7c2bc14610500578063ec9465fe146104dd578063efa09d6814610378578063f10fb584146103515763f2fde38b1461026857600080fd5b3461034e57602036600319011261034e576102816128ca565b6102896129b7565b6001600160a01b038091169081156102e4576000548273ffffffffffffffffffffffffffffffffffffffff19821617600055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a380f35b608460405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152fd5b80fd5b503461034e578060031936011261034e5760206001600160a01b03600c5416604051908152f35b503461034e57604036600319011261034e5767ffffffffffffffff6004358181116104d9576103ab9036906004016128f6565b9060249283359081116104d5576103c69036906004016128f6565b93906103d06129b7565b84840361049157855b61ffff908181168681101561048d5760ff806103fe6103f9848c89612a0f565b612a35565b16156104495790600192918461042b61042661041e6103f9868f8c612a0f565b948c8c612a0f565b612a43565b168b52600360205260408b20911660ff1982541617905501166103d9565b60648660106040519162461bcd60e51b8352602060048401528201527f496e76616c6964206e66742074797065000000000000000000000000000000006044820152fd5b8880f35b60648260126040519162461bcd60e51b8352602060048401528201527f77726f6e67206172726179206c656e67746800000000000000000000000000006044820152fd5b8480fd5b8280fd5b503461034e57602036600319011261034e576104f76129b7565b600435601f5580f35b503461034e57602036600319011261034e5760ff604060209261ffff6105246128b9565b16815260038452205416604051908152f35b5061054036612927565b6002906001936105538386541415612a52565b828555610561333b15612a9d565b61056c323314612ae8565b6105796023543414612b33565b426001600160501b031691865b8181106105cc578787818080806001600160a01b03600e5416602354908282156105c3575bf1156105b657805580f35b50604051903d90823e3d90fd5b506108fc6105ab565b876001600160a01b0380600a54166105e861042685878c612a0f565b9060405193849384926331a9108f60e11b845261ffff8095166004850152602096879160249586915afa9485156107f0578c956106309184916107fb575b5082163314612c1d565b610643610426888a84600b541698612a0f565b94803b156104d9578460648d978580946040519a8b9586947f758854a2000000000000000000000000000000000000000000000000000000008652336004870152168a85015260448401525af19485156107f0578c88928b898c948f9a6107c6575b508585858b956106ed958e61042696896106cd61075f9f9c6106d69f60409f61042692612a0f565b8d519e8f612b7e565b168d528c0152169c8d898b015260608a0152612a0f565b168152601288522081516020830151604084015161ffff90921660109190911b6bffffffffffffffffffff00001617606091821b6bffffffffffffffffffffffff1916178255909101516001909101805469ffffffffffffffffffff19166001600160501b0392909216919091179055565b60078054918c83018093116107b457505589939291907f9a3548e7da710b05c129b310e734c5830e4c53cc9255c7d47219adf7f1098ea1906107a561042686898e612a0f565b1692604051428152a301610586565b8d634e487b7160e01b81526011600452fd5b935050509396508692506107da9150612bb0565b6107ec579285878c8b968b89386106a5565b8380fd5b6040513d84823e3d90fd5b61081b9150883d8a11610821575b6108138183612bc4565b810190612bfe565b38610626565b503d610809565b50602036600319011261034e5760043567ffffffffffffffff8111610d21576108559036906004016128f6565b909161086660026001541415612a52565b6002600155610876333b15612a9d565b610881323314612ae8565b338152601760205260ff604082205416610cdd576108a26023543414612b33565b60ff60255460501c1661ffff831610610c9957805b61ffff831661ffff82161015610b8a576001600160a01b0360095416602061ffff60246108ea610426838716898b612a0f565b60405194859384926331a9108f60e11b84521660048301525afa908115610b7f5790610928918491610b60575b506001600160a01b03163314612c1d565b61ffff61093b6104268284168688612a0f565b168252600380602052600160ff60408520541603610b1c57816109b960019261ffff61096e610426828098168a8c612a0f565b168652601660205261098760ff60408820541615614563565b846109986104268286168a8c612a0f565b1686526002602052600260ff60408820541614908115610af2575b506145ae565b610a806109cc610426858416888a612a0f565b84604051916109da83612b7e565b168152426001600160501b031660208201819052336040830152606082015284610a0a6104268583168a8c612a0f565b16865260116020526040862081516020830151604084015161ffff90921660109190911b6bffffffffffffffffffff00001617606091821b6bffffffffffffffffffffffff1916178255909101516001909101805469ffffffffffffffffffff19166001600160501b0392909216919091179055565b82610a91610426828416888a612a0f565b166040518381524260208201527fadd17b9d82cb146eaff151f4f864faa55b09599b4eff7714935025b99054fe1c60403392a382610ad5610426828416888a612a0f565b168452601660205260408420805460ff19168317905501166108b7565b905084610b056104268286168a8c612a0f565b168652600260205260ff60408720541614386109b3565b606460405162461bcd60e51b815260206004820152600b60248201527f6f6e6c79206361646574730000000000000000000000000000000000000000006044820152fd5b610b79915060203d602011610821576108138183612bc4565b38610917565b6040513d85823e3d90fd5b5080918333835260266020526040832061ffff831661ffff19825416179055610bb961ffff8316600454612cce565b6004556001600160a01b039182600b541691823b156104d557610c16928592836040518096819582947fa6cab4cd000000000000000000000000000000000000000000000000000000008452606060048501526064840191612c89565b3360248301526002604483015203925af1908115610b7f578391610c82575b50808092338252601760205260408220600160ff19825416179055600e541660235490828215610c79575bf115610c6d576001805580f35b604051903d90823e3d90fd5b506108fc610c60565b610c8b90612bb0565b610c96578184610c35565b50fd5b606460405162461bcd60e51b815260206004820152601160248201527f4e6f7420656e6f756768206361646574730000000000000000000000000000006044820152fd5b606460405162461bcd60e51b815260206004820152601a60248201527f596f7520616c72656164792068617665206120706c61746f6f6e0000000000006044820152fd5b5080fd5b50610d62610d323661297b565b91610d4260026001541415612a52565b6002600155610d52333b15612a9d565b610d5d323314612ae8565b613f48565b6001805580f35b503461034e57602036600319011261034e57610d836129b7565b600435601c5580f35b503461034e57608036600319011261034e57610da66128ca565b610dae6128e0565b906044356001600160a01b03808216809203610e245760643593818516809503610e2457610dda6129b7565b8173ffffffffffffffffffffffffffffffffffffffff1994168460095416176009551682600a541617600a558282600c541617600c5581600b541617600b55600d541617600d5580f35b600080fd5b503461034e57604036600319011261034e576020610e56610e486128b9565b610e506128e0565b90614297565b6040519015158152f35b503461034e578060031936011261034e576020602454604051908152f35b503461034e57602036600319011261034e5760ff604060209261ffff610ea26128b9565b168152601684522054166040519015158152f35b503461034e57604036600319011261034e5760043567ffffffffffffffff8111610d215760ff610eec60019236906004016128f6565b939050610ef761296b565b90501614600014610f2557610f1d602091610f1760235491602254612cf1565b90612cce565b604051908152f35b506020602354610f1d565b503461034e578060031936011261034e576020600854604051908152f35b506020908160031936011261034e57610f656128b9565b91600190610f77600283541415612a52565b60028255610f86333b15612a9d565b610f91323314612ae8565b3383526017815260ff6040842054161561126857610fb26023543414612b33565b6001600160a01b03908160095416906040516331a9108f60e11b8152818160248161ffff809b16968760048301525afa90811561125d5790610fff918791611240575b5084163314612c1d565b818552600381526110188460ff60408820541614613e74565b8185526016815261103060ff60408720541615614563565b81855260028152600260ff60408720541614801561122f575b611052906145ae565b6110f46001600160501b0342166040519061106c82612b7e565b84825280848301523360408301526060820152838752601183526040872081516020830151604084015161ffff90921660109190911b6bffffffffffffffffffff00001617606091821b6bffffffffffffffffffffffff1916178255909101516001909101805469ffffffffffffffffffff19166001600160501b0392909216919091179055565b8160405185815242838201527fadd17b9d82cb146eaff151f4f864faa55b09599b4eff7714935025b99054fe1c60403392a38185526016815260408520805460ff191685179055600454600019811461121b57840160045533855260269052604084208054868116968781146112075785879897969701169061ffff191617905581600b541690813b156107ec5783916064839260405194859384927ff754ffa60000000000000000000000000000000000000000000000000000000084526004840152336024840152600260448401525af1908115610b7f5783916111f3575b50808092600e5416602354908282156105c357f1156105b657805580f35b6111fc90612bb0565b610d215781386111d5565b602487634e487b7160e01b81526011600452fd5b602486634e487b7160e01b81526011600452fd5b50604085205460ff16600314611049565b6112579150833d8511610821576108138183612bc4565b38610ff5565b6040513d88823e3d90fd5b6064906040519062461bcd60e51b82526004820152601260248201527f4d757374206861766520506c61746f6f6e2100000000000000000000000000006044820152fd5b503461034e57602036600319011261034e5761ffff6112c96128b9565b6112d16129b7565b1660205580f35b503461034e57602036600319011261034e576020610f1d6112f76128b9565b6143d2565b503461034e578060031936011261034e5760206001600160a01b03600b5416604051908152f35b503461034e578060031936011261034e5760206001600160a01b03600a5416604051908152f35b503461034e578060031936011261034e576020601d54604051908152f35b503461034e57602036600319011261034e576113826129b7565b60043560235580f35b503461034e57602036600319011261034e576001600160a01b036113ad6128ca565b6113b56129b7565b1673ffffffffffffffffffffffffffffffffffffffff19600e541617600e5580f35b503461034e57602036600319011261034e576020610f1d6113f66128b9565b61433a565b506114246114083661297b565b91611414333b15612a9d565b61141f323314612ae8565b615003565b80f35b503461034e578060031936011261034e576001600160a01b036020915416604051908152f35b503461034e57602036600319011261034e576114676129b7565b60043560225580f35b503461034e57602036600319011261034e5760043560ff81168103610e24576114976129b7565b6aff000000000000000000006025549160501b16906aff0000000000000000000019161760255580f35b503461034e578060031936011261034e5760208054604051908152f35b503461034e57602036600319011261034e5760ff60406020926001600160a01b036115076128ca565b168152601784522054166040519015158152f35b503461034e578060031936011261034e576020602254604051908152f35b50602036600319011261034e578060043567ffffffffffffffff8111610c96576115679036906004016128f6565b9190611574333b15612a9d565b61157f323314612ae8565b61159b611594602354610f1786602254612cf1565b3414612b33565b6001600160a01b03600c5416604051634ea943e760e01b8152602081600481855afa8015611b8f5785918591611b9a575b508492916115db911015612d04565b602460405180958193634b3c08f360e01b83528860048401525af1918215611b8f578492611b6b575b50835b8361ffff82161015611af3576001600160a01b0360095416602061ffff60246116366104268387168a89612a0f565b60405194859384926331a9108f60e11b84521660048301525afa801561125d57611671918791610b6057506001600160a01b03163314612c1d565b61ffff6116846104268284168786612a0f565b16855260038060205260ff908160408820541603611aaf5761ffff6116af6104268285168887612a0f565b1686526010602052604086205416611a6b57846001600160a01b03600b541660405163a5e8364760e01b8152602081600481855afa8015610b7f5761ffff918491611a3c575b5016151580611a21575b156118035750506001600160a01b03600b5416602061ffff60a46117296104268387168a89612a0f565b896117368488168a612c75565b5195604051968795869462adc84b60e41b8652166004850152602484015260026044840152336064840152600060848401525af191821561125d5761ffff9260019288916117e4575b507f629fb5e38dcbe97d872f614b9eb7a708b1c606addfc3432e63be92c229d93c66846117b26104268286168b8a612a0f565b604080513381526001600160a01b039590951660208601526003908501524260608501521691608090a25b0116611607565b6117fd915060203d602011610821576108138183612bc4565b3861177f565b61181561042661ffff85168887612a0f565b813b156104d95761ffff60848492836040519586948593633e02e62360e21b855216600484015233602484015260026044840152600060648401525af180156107f057611a0d575b505060018161187561042661ffff8095168887612a0f565b836118866104268285168a89612a0f565b168852600f90816020528460408a2091168519825416179055836118b06104268285168a89612a0f565b168852806020526040882080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff75ffffffffffffffffffffffffffffffffffffffff00003360101b169116179055601c54846119136104268286168b8a612a0f565b16895281602052604089209075ffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffff0000000000000000000000000000000000000000000083549260b01b169116179055836119746104268285168a89612a0f565b168852602052604087208201805469ffffffffffffffffffff1916426001600160501b031617905581836119ae6104268483168a89612a0f565b1688526010602052604088209060ff198254161790556119d46104268483168887612a0f565b83604051911681528760208201527f4a036c7c3e9ebba870545bb7f2691eba797e891806fb5d72b25e709b425c0a7e60403392a26117dd565b611a1690612bb0565b6104d557843861185d565b5060196064611a3461ffff861688612c75565b5106106116ff565b611a5e915060203d602011611a64575b611a568183612bc4565b81019061460a565b386116f5565b503d611a4c565b606460405162461bcd60e51b815260206004820152601160248201527f616c726561647920696e207761737465730000000000000000000000000000006044820152fd5b606460405162461bcd60e51b815260206004820152600d60248201527f6e6f7420612047656e6572616c000000000000000000000000000000000000006044820152fd5b8480611b0160235434612e14565b8015908115611b3a575b50508080806001600160a01b03600e541660235490828215611b31575bf115610c6d5780f35b506108fc611b28565b8280929181926001600160a01b03600d5416908390611b62575bf115610c6d57808280611b0b565b506108fc611b54565b611b889192503d8086833e611b808183612bc4565b810190612d4f565b9038611604565b6040513d86823e3d90fd5b92945050506020813d602011611bcc575b81611bb860209383612bc4565b81010312610e2457518492908490846115cc565b3d9150611bab565b503461034e57602036600319011261034e57611bee6129b7565b600435601e5580f35b503461034e578060031936011261034e57611c106129b7565b60006001600160a01b03815473ffffffffffffffffffffffffffffffffffffffff1981168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b503461034e578060031936011261034e5760206001600160a01b0360095416604051908152f35b503461034e57602036600319011261034e5760ff604060209261ffff611ca96128b9565b16815260028452205416604051908152f35b503461034e57602036600319011261034e5761ffff611cd86128b9565b611ce06129b7565b1660215580f35b503461034e57602036600319011261034e576004356001600160501b038116809103610d2157611d156129b7565b6001600160501b0319602554161760255580f35b503461034e578060031936011261034e576020602354604051908152f35b503461034e578060031936011261034e5760206001600160501b0360255416604051908152f35b503461034e57602036600319011261034e57611d886129b7565b600435601d5580f35b503461034e578060031936011261034e576020601c54604051908152f35b503461034e578060031936011261034e57602060ff60255460501c16604051908152f35b503461034e578060031936011261034e576020601f54604051908152f35b503461034e57602036600319011261034e5761ffff60406020926001600160a01b03611e1b6128ca565b16815260268452205416604051908152f35b50611424611e3a3661297b565b91611e46333b15612a9d565b611e51323314612ae8565b614624565b503461034e57602036600319011261034e5760ff604060209261ffff611e7a6128b9565b168152601084522054166040519015158152f35b50606036600319011261034e5760043567ffffffffffffffff8111610d2157611ebb9036906004016128f6565b611ec361296b565b604435918215158303610e2457610d6293611ee360026001541415612a52565b6002600155611ef3333b15612a9d565b611efe323314612ae8565b612e21565b506020908160031936011261034e57611f1a6128b9565b90600190611f2c600283541415612a52565b60028255611f3b333b15612a9d565b611f46323314612ae8565b61ffff8093169081815260038552611f668360ff60408420541614613e74565b611f7861159460235460225490612cce565b6001600160a01b039384600b5416601f54813b156107ec576040517f79cc679000000000000000000000000000000000000000000000000000000000815233600482015260248101919091529083908290604490829084905af18015610b7f579083916121ac575b5050611ffd612710611ff7601f5460215490612cf1565b04613f06565b84600c5416604051634ea943e760e01b81528781600481855afa908115611b8f57849187918391612179575b50829391612038911015612d04565b602460405180948193634b3c08f360e01b83528a60048401525af1908115610b7f57839161215f575b50600a60648361207084612c68565b51160610156121395750506003935b8282526002865260ff604083209516948560ff19825416179055816120a660235434612e14565b80158015612110575b505080808093600e541660235490828215612107575bf115610c6d575060405190815282848201527f0565300890d3685df55dc05c4134c4a4d26d00e159a0042ed277892a48f2eddc60403392a28055604051908152f35b506108fc6120c5565b828092819286600d5416908390612130575bf1156105b6578138806120af565b506108fc612122565b601e91612147606492612c68565b51160610156121585760029361207f565b829361207f565b61217391503d8085833e611b808183612bc4565b38612061565b925050508781813d83116121a5575b6121928183612bc4565b81010312610e2457518390869082612029565b503d612188565b6121b590612bb0565b610d21578138611fe0565b503461034e578060031936011261034e576020602154604051908152f35b503461034e578060031936011261034e576020601e54604051908152f35b5061220636612927565b9061221960026001959495541415612a52565b6002600155612229333b15612a9d565b612234323314612ae8565b6122416023543414612b33565b61224a82612be6565b936122586040519586612bc4565b828552601f1961226784612be6565b01366020870137835b8381106123665750506001600160a01b039384600b541691823b156104d55792909184926122d76040519586947fbd82fc78000000000000000000000000000000000000000000000000000000008652336004870152608060248701526084860191612c89565b60031984820301604485015260208083519283815201920190855b81811061234757505050838380926002606483015203925af180156107f057612338575b508080808094600e541660235490828215610c7957f115610c6d576001805580f35b61234190612bb0565b38612316565b825160ff168452889650879550602093840193909201916001016122f2565b6001600160a01b0360095416602061ffff6024612387610426868a8a612a0f565b60405194859384926331a9108f60e11b84521660048301525afa90811561125d57906123c4918791610b6057506001600160a01b03163314612c1d565b61ffff6123d5610426838787612a0f565b16855260038060205260ff6001816040892054161460001461252557505060046123ff8288612c75565b5261240e610426828686612a0f565b6001600160501b03421661ffff6040519261242884612b7e565b16918281528160208201526001600160a01b0385169182604083015260608201528288526124c46011918260205260408a2081516020830151604084015161ffff90921660109190911b6bffffffffffffffffffff00001617606091821b6bffffffffffffffffffffffff1916178255909101516001909101805469ffffffffffffffffffff19166001600160501b0392909216919091179055565b600454906001820180921161251357509060019392916004557fadd17b9d82cb146eaff151f4f864faa55b09599b4eff7714935025b99054fe1c60408051868152426020820152a35b01612270565b634e487b7160e01b8952600452602488fd5b61ffff612536610426858989612a0f565b168752816020526002816040892054161460001461268657505060058061255d8389612c75565b5261256c610426838787612a0f565b906001600160501b039061262782601954169361ffff6040519161258f83612b7e565b169485825260208201526001600160a01b0387169384604083015242166060820152848a52601360205260408a2081516020830151604084015161ffff90921660109190911b6bffffffffffffffffffff00001617606091821b6bffffffffffffffffffffffff1916178255909101516001909101805469ffffffffffffffffffff19166001600160501b0392909216919091179055565b805490600182018092116126725790600194939291557fadd17b9d82cb146eaff151f4f864faa55b09599b4eff7714935025b99054fe1c6040805160028152426020820152a361250d565b602489634e487b7160e01b81526011600452fd5b61ffff612697610426858989612a0f565b168752816020528181604089205416146000146127e557506006806126bc848a612c75565b526126cb610426848888612a0f565b916001600160501b039161278683601b54169461ffff604051916126ee83612b7e565b169586825260208201526001600160a01b0388169485604083015242166060820152858b52601460205260408b2081516020830151604084015161ffff90921660109190911b6bffffffffffffffffffff00001617606091821b6bffffffffffffffffffffffff1916178255909101516001909101805469ffffffffffffffffffff19166001600160501b0392909216919091179055565b805490600182018092116127d1576001959493927fadd17b9d82cb146eaff151f4f864faa55b09599b4eff7714935025b99054fe1c92604092558151908152426020820152a361250d565b60248a634e487b7160e01b81526011600452fd5b9061ffff6127f7610426858989612a0f565b168752602052604086205416156128105760019061250d565b60405162461bcd60e51b815260206004820152601060248201527f496e76616c696420546f6b656e204964000000000000000000000000000000006044820152606490fd5b905034610d21576020366003190112610d2157608091604061ffff918261287a6128b9565b168152600f602052206001600160501b03600182549201541691811683526001600160a01b038160101c16602084015260b01c60408301526060820152f35b6004359061ffff82168203610e2457565b600435906001600160a01b0382168203610e2457565b602435906001600160a01b0382168203610e2457565b9181601f84011215610e245782359167ffffffffffffffff8311610e24576020808501948460051b010111610e2457565b906040600319830112610e24576004356001600160a01b0381168103610e2457916024359067ffffffffffffffff8211610e2457612967916004016128f6565b9091565b6024359060ff82168203610e2457565b6040600319820112610e24576004359067ffffffffffffffff8211610e24576129a6916004016128f6565b90916024358015158103610e245790565b6001600160a01b036000541633036129cb57565b606460405162461bcd60e51b815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b9190811015612a1f5760051b0190565b634e487b7160e01b600052603260045260246000fd5b3560ff81168103610e245790565b3561ffff81168103610e245790565b15612a5957565b606460405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152fd5b15612aa457565b606460405162461bcd60e51b815260206004820152600b60248201527f6e6f20636f6e74726163740000000000000000000000000000000000000000006044820152fd5b15612aef57565b606460405162461bcd60e51b815260206004820152600860248201527f6e6f2070726f78790000000000000000000000000000000000000000000000006044820152fd5b15612b3a57565b606460405162461bcd60e51b815260206004820152600d60248201527f6e656564206d6f726520657468000000000000000000000000000000000000006044820152fd5b6080810190811067ffffffffffffffff821117612b9a57604052565b634e487b7160e01b600052604160045260246000fd5b67ffffffffffffffff8111612b9a57604052565b90601f8019910116810190811067ffffffffffffffff821117612b9a57604052565b67ffffffffffffffff8111612b9a5760051b60200190565b90816020910312610e2457516001600160a01b0381168103610e245790565b15612c2457565b606460405162461bcd60e51b815260206004820152600960248201527f6e6f74206f776e657200000000000000000000000000000000000000000000006044820152fd5b805115612a1f5760200190565b8051821015612a1f5760209160051b010190565b9190808252602080920192916000805b838210612ca857505050505090565b9091929394853561ffff81168091036104d9578152830194830193929160010190612c99565b91908201809211612cdb57565b634e487b7160e01b600052601160045260246000fd5b81810292918115918404141715612cdb57565b15612d0b57565b606460405162461bcd60e51b815260206004820152600f60248201527f74727920616761696e20736f6f6e2e00000000000000000000000000000000006044820152fd5b6020908181840312610e245780519067ffffffffffffffff8211610e2457019180601f84011215610e24578251612d8581612be6565b93612d936040519586612bc4565b818552838086019260051b820101928311610e24578301905b828210612dba575050505090565b81518152908301908301612dac565b15612dd057565b606460405162461bcd60e51b815260206004820152601360248201527f77726f6e67207479706520666f722063616c6c000000000000000000000000006044820152fd5b91908203918211612cdb57565b929192333203613df75760ff906000858316600103613de457508290612e52611594602354610f1787602254612cf1565b606091600184881614613d1f575b50949392919060009586955b848710612f635750505050505050612e8660235434612e14565b80158015612f32575b50506001600160a01b03600080808084600e541660235490828215612f29575bf115612f19578115612f2557612ec782602454612cce565b602455600b5416803b15610e2457604051636203b43b60e11b815233600482015260248101929092526000908290818381604481015b03925af18015612f1957612f0e5750565b612f1790612bb0565b565b6040513d6000823e3d90fd5b5050565b506108fc612eaf565b600080809381936001600160a01b03600d5416908390612f5a575bf115612f19573880612e8f565b506108fc612f4d565b9091929394959661ffff9081612f7d6104268b8a88612a0f565b1660005260166020528560406000205416610e245781612fa16104268b8a88612a0f565b1660005260039081602052600187604060002054161460001461393f57612fcc600188861614612dc9565b612fda6104268b8a88612a0f565b92612fe58b88612c75565b518a60008387168152601160205261300533604083205460601c14612c1d565b6025546001600160501b0391908216824282106138e95750505083871660005260116020526130786130596130506130478460406000205460101c1642612e14565b601d5490612cf1565b60085490613e54565b61271061306860205483612cf1565b049061307382613f06565b612e14565b958360101c9085891660005260026020528c6040600020541660009485948160001461360f5750508061334f5750506032908160648787160610600014613302575050600b54604051633701e0bb60e11b815261ffff891660048083019190915260248201959095526002604482015260648101949094523360848501526020925083915060a49082906000906001600160a01b03165af1908115612f19576000916132e3575b50906001915b8186166000526011602052600060016040822082815501556004549283600019810111612cdb578c936000190160045560001461324857818616600081815260026020908152604091829020805460ff1916905581513381526001600160a01b0394909416848201526001918401829052426060850152909761323a979695909490937fb70488c54eed1eb26b67b90ac6034c62ccdda9484046484c84f119bbc0725ff893907f629fb5e38dcbe97d872f614b9eb7a708b1c606addfc3432e63be92c229d93c6690608090a25b6040514381524283820152818616907fd4afcb2b571461d4cf9fa6cfd5464f87ec1d6009b1cf6431ef4e341658748a8660403392a35b604051938785521515941692a3612cce565b975b01959493929190612e6c565b50929190506001600160a01b03600b541693843b15610e2457600080956084604051809881936348f3b0e560e11b8352336004840152898716602484015260046044840152600260648401525af1938415612f19577fb70488c54eed1eb26b67b90ac6034c62ccdda9484046484c84f119bbc0725ff860208d9260019861323a986132d4575b506131f2565b6132dd90612bb0565b386132ce565b6132fc915060203d602011610821576108138183612bc4565b3861311f565b85945094606491929395160610156131255793603c80820282159183820414821715612cdb5760646133349104613ebf565b602890828281020482141715612cdb57606491020493613125565b60018103613447575050602860648587160610156133f9575050600b54604051633701e0bb60e11b815261ffff881660048083019190915260248201949094526002604482015260648101939093523360848401526020915082906001600160a01b03168160008160a481015b03925af1908115612f19576000916133da575b50906001915b613125565b6133f3915060203d602011610821576108138183612bc4565b386133cf565b8460509293959450606491160610156133d55793601980820282159183820414821715612cdb57606461342c9104613ebf565b604b90828281020482141715612cdb57606491020493613125565b6002810361350a57505060199081606487871606106000146134bd575050600b54604051633701e0bb60e11b815261ffff89166004808301919091526024820195909552600260448201526064810194909452336084850152602092508391506001600160a01b03168160008160a481016133bc565b85945094606491929395160610156133d55793602880820282159183820414821715612cdb5760646134ef9104613ebf565b603c90828281020482141715612cdb57606491020493613125565b95949293951461351c575b5050613125565b600f60648584969795941606106000146135c1575050600b54604051633701e0bb60e11b815261ffff8816600480830191909152602482019490945260026044820152606481019390935233608484015260209150829060a49082906000906001600160a01b03165af1908115612f19576000916135a2575b50906001915b3880613515565b6135bb915060203d602011610821576108138183612bc4565b38613595565b84601492939594506064911606101561359b5793601980820282159183820414821715612cdb5760646135f49104613ebf565b604b90828281020482141715612cdb5760649102049361359b565b955096955085935080999798991560001461370d57505060329060649283911606106136a9575b50917fb70488c54eed1eb26b67b90ac6034c62ccdda9484046484c84f119bbc0725ff8602060019795936136a461323a98965b8287166000526011845242166040600020906bffffffffffffffffffff000082549160101b16906bffffffffffffffffffff00001916179055565b613228565b9492509290603c80870287159188820414821715612cdb57866136cc9104613ebf565b6028808802978804141715612cdb579390940493909290918a91907fb70488c54eed1eb26b67b90ac6034c62ccdda9484046484c84f119bbc0725ff8613636565b600181036137c2575050605090606492839116061061375e575b50917fb70488c54eed1eb26b67b90ac6034c62ccdda9484046484c84f119bbc0725ff8602060019795936136a461323a9896613669565b9492509290601980870287159188820414821715612cdb57866137819104613ebf565b604b808802978804141715612cdb579390940493909290918a91907fb70488c54eed1eb26b67b90ac6034c62ccdda9484046484c84f119bbc0725ff8613727565b6002810361387657505060199060649283911606106138125750917fb70488c54eed1eb26b67b90ac6034c62ccdda9484046484c84f119bbc0725ff8602060019795936136a461323a9896613669565b9492509290602880870287159188820414821715612cdb57866138359104613ebf565b603c808802978804141715612cdb579390940493909290918a91907fb70488c54eed1eb26b67b90ac6034c62ccdda9484046484c84f119bbc0725ff8613727565b919250146138b55750917fb70488c54eed1eb26b67b90ac6034c62ccdda9484046484c84f119bbc0725ff8602060019795936136a461323a9896613669565b60148391606492839116061015613727579492509290601980870287159188820414821715612cdb57866137819104613ebf565b89871683526011602052604083205461307893601091821c83168411156139365750613931926130509261392692604060002054901c1690613e3b565b84601d549116612cf1565b613059565b92505050613059565b9091806139506104268c8b89612a0f565b166000528260205260029283886040600020541614600014613b1e575061397a8388861614612dc9565b6139886104268b8a88612a0f565b169081600052601390816020526139a83360406000205460601c14612c1d565b6019549183600052806020526001600160501b036139d08160406000205460101c1685612e14565b938c15613ad45750508360005260205260006001604082208281550155600580546000198101908111612cdb5781556001600160a01b03600b541694853b15610e245760846000928360405198899485936348f3b0e560e11b85523360048601528a6024860152604485015260648401525af1928315612f1957600194613abf94613ac5575b50806040514381524260208201527ffa3f5ce1fdd0ac038fa821cb6e3d9a07745f31fd685851910b73551743f81a1260403392a35b604051908382527f261f0854432bace3f0023f1dd8d91177b3bc455fb50acd7491782cd858b24c7260208d151593a3612cce565b9761323c565b613ace90612bb0565b38613a56565b6001965090613b19918693613abf97600052602052166040600020906bffffffffffffffffffff000082549160101b16906bffffffffffffffffffff00001916179055565b613a8b565b81613b2d6104268d8c8a612a0f565b166000528060205280886040600020541614600014613cf157613b539088861614612dc9565b613b616104268b8a88612a0f565b16908160005260149081602052613b813360406000205460601c14612c1d565b601b549183600052806020526001600160501b03613ba98160406000205460101c1685612e14565b938c15613ca75750508360005260205260006001604082208281550155600680546000198101908111612cdb5781556001600160a01b03600b541694853b15610e245760846000928360405198899485936348f3b0e560e11b85523360048601528a6024860152604485015260648401525af1928315612f1957600194613abf94613c98575b50806040514381524260208201527feb3045004b49a997bcf8d2e62e9c535e2c03ea0d5b13193cf8e5d90a2c4c528160403392a35b604051908382527fe1caf88d0a9503d00b1bff2c6e1e892eedb0bb788cbedc754a87cc4f0d06f3a860208d151593a3612cce565b613ca190612bb0565b38613c2f565b6001965090613cec918693613abf97600052602052166040600020906bffffffffffffffffffff000082549160101b16906bffffffffffffffffffff00001916179055565b613c64565b91999250613d03610426848a88612a0f565b166000526020528460406000205416156128105760019061323c565b9091506001600160a01b03600c541690604051634ea943e760e01b8152602081600481865afa908115612f1957600091613db2575b5091602482613d696000959486951015612d04565b6040519485938492634b3c08f360e01b845260048401525af1908115612f1957600091613d99575b509038612e60565b613dac913d8091833e611b808183612bc4565b38613d91565b906020823d8211613ddc575b81613dcb60209383612bc4565b8101031261034e5750516024613d54565b3d9150613dbe565b90613df26023543414612b33565b612e52565b606460405162461bcd60e51b815260206004820152600860248201527f4f6e6c7920454f410000000000000000000000000000000000000000000000006044820152fd5b6001600160501b039182169082160391908211612cdb57565b8115613e5e570490565b634e487b7160e01b600052601260045260246000fd5b15613e7b57565b606460405162461bcd60e51b815260206004820152600960248201527f6e6f7420636164657400000000000000000000000000000000000000000000006044820152fd5b600554908115613ef457613eea91613edd613ee29260185490612cce565b613e54565b601954612cce565b6019556000601855565b613f019150601854612cce565b601855565b600654908115613f3657613f2c91613edd613f2492601a5490612cce565b601b54612cce565b601b556000601a55565b613f439150601a54612cce565b601a55565b91613f566023543414612b33565b600092835b83811061400357505050508015614000576001600160a01b039081600b541690813b15610e2457604051636203b43b60e11b815233600482015260248101829052916000908390604490829084905af1918215612f1957600093849384938493613fcd92613ff1575b50602454612cce565b602455600e541660235490828215613fe8575bf115612f1957565b506108fc613fe0565b613ffa90612bb0565b38613fc4565b50565b61ffff80614015610426848887612a0f565b16600052601260209181835260409161403633846000205460601c14612c1d565b6025546001600160501b0399908a1642811061421557506140899083614060610426898d8c612a0f565b16600052828652610f176130506140808d886000205460101c1642612e14565b601e5490612cf1565b985b8887891561419f57849250876140a49261042692612a0f565b16600052835260006001838220828155015560078054906000198201918211612cdb57556001600160a01b03600b54166140e2610426868a89612a0f565b813b15610e245782606460009283875195869485937f4e5a18f9000000000000000000000000000000000000000000000000000000008552336004860152166024840152600260448401525af1801561419457917fe9083238ed5c128b67831b957929cef6c82beb49da6f7f4d156f6391a5a6513191600196959493614185575b505b614173610426868b8a612a0f565b1691519289845287151593a301613f5b565b61418e90612bb0565b38614163565b83513d6000823e3d90fd5b917fe9083238ed5c128b67831b957929cef6c82beb49da6f7f4d156f6391a5a6513193856141da6104268b6142109660019d9c9b9a98612a0f565b166000528652421684600020906bffffffffffffffffffff000082549160101b16906bffffffffffffffffffff00001916179055565b614165565b83614224610426898d8c612a0f565b166000528286528a856000205485898d8c8686601096871c161060001461428a5793614279936142646104266142849a9995610f17999561305099612a0f565b16600052888c528a60002054901c1690613e3b565b8d601e549116612cf1565b9861408b565b505050505050509861408b565b919060009261ffff60009116908181526003602052604091600160ff8484205416146000146142de576001600160a01b039394955081526011602052205460601c91161490565b8282205460ff1660020361430a576001600160a01b039394955081526013602052205460601c91161490565b50600360ff83832054161461431e57505050565b6001600160a01b03929394506014602052205460601c91161490565b61ffff1660008181526012602052604081205490916001600160501b039160101c8216156143cd5760255482164281106143935750613050916040846140809361439096526012602052205460101c1642612e14565b90565b80915082604085205460101c16106000146143cd57906143c36130509282604061439096205460101c1690613e3b565b601e549116612cf1565b505090565b600061ffff6000921690818352602060038152604091600160ff84872054161480614547575b1561447857506025546001600160501b0393908416428110614434575091846011613050959361304795614390985252205460101c1642612e14565b929160119186525281838286205460101c1610600014614472578291613050936144689261439096205460101c1690613e3b565b601d549116612cf1565b50505090565b6003829593949552600260ff85852054161480614534575b156144ba5750916001600160501b03916013614390959460195495835252205460101c1690612e14565b9360038252600360ff8585205416146144d5575b5050505090565b909192936010835260ff85852054166000146144fa57508252600f9052205460b01c90565b939160149150528082205460601c614517575050388080806144ce565b601b54912054614390925060101c6001600160501b031690612e14565b50601382528383205460601c1515614490565b50601182526001600160501b038386205460101c1615156143f8565b1561456a57565b606460405162461bcd60e51b815260206004820152601c60248201527f4e46542063616e206f6e6c7920626520696e203120706c61746f6f6e000000006044820152fd5b156145b557565b606460405162461bcd60e51b815260206004820152602060248201527f6361646574206d757374206861766520736e69706572206f7220706973746f6c6044820152fd5b60ff166032039060ff8211612cdb57565b90816020910312610e24575161ffff81168103610e245790565b33600052601760205260ff6040600020541615614fbf57614650611594602354610f1785602254612cf1565b600090600a831115918483600014614fb6575060ff84166005029260ff8416938403612cdb578593955b614f84575b506001600160a01b03600c541694604051634ea943e760e01b81526020816004818a5afa908115612f1957600091614f51575b506000966146c38789931015612d04565b602460405180998193634b3c08f360e01b83528a60048401525af1958615612f1957600096614f34575b509491906000956000935b8685106148815750505050506147d2575b5061471660235434612e14565b801580156147a1575b505060008080806001600160a01b03600e541660235490828215614798575bf115612f195780156140005761475681602454612cce565b6024556001600160a01b03600b5416803b15610e2457604051636203b43b60e11b81523360048201526024810192909252600090829081838160448101612efd565b506108fc61473e565b600080809381936001600160a01b03600d54169083906147c9575bf115612f1957388061471f565b506108fc6147bc565b6147f490336000526017602052604060002060ff198154169055600454612e14565b6004556001600160a01b03600b5416803b15610e2457600080916044604051809481937fc6f654a0000000000000000000000000000000000000000000000000000000008352336004840152600260248401525af18015612f1957614872575b50336000526026602052604060002061ffff19815416905538614709565b61487b90612bb0565b38614854565b909192939661ffff6148976104268a8a89612a0f565b166000526003602052600160ff6040600020541603614ef05761ffff6148c16104268a8a89612a0f565b16600052601660205260ff6040600020541615614eac5761ffff6148e96104268a8a89612a0f565b1660005260116020523360406000205460601c03614e68576025546001600160501b0316428110614dcf575061ffff6149266104268a8a89612a0f565b1660005260116020526149506130506130476001600160501b0360406000205460101c1642612e14565b61495a8984612c75565b5160101c908715614d2457606461ffff6149748c87612c75565b5116069160ff808816600a0311612cdb57898b91899460ff808b16600a03161180614c9d575b15614bc1575060a48260006149ce6149c761042660209761ffff976001600160a01b03600b54169b612a0f565b928a612c75565b51966040519788958694633701e0bb60e11b8652166004850152602484015260026044840152600460648401523360848401525af1928315612f19576001938b8b8a614b5f96600094614b6a575b50614a526104267f629fb5e38dcbe97d872f614b9eb7a708b1c606addfc3432e63be92c229d93c6694614a819461ffff94612a0f565b604080513381526001600160a01b03909616602087015260019086015242606086015216929081906080820190565b0390a25b61ffff614a966104268d8d8c612a0f565b16600052601160205260008460408220828155015561ffff614abc6104268d8d8c612a0f565b166000526016602052604060002060ff198154169055614ae06104268c8c8b612a0f565b61ffff6040519143835242602084015216907fd4afcb2b571461d4cf9fa6cfd5464f87ec1d6009b1cf6431ef4e341658748a8660403392a35b61ffff614b2a6104268d8d8c612a0f565b16604051908282527fb70488c54eed1eb26b67b90ac6034c62ccdda9484046484c84f119bbc0725ff860208c151593a3612cce565b9701939291906146f8565b61ffff9194506104267f629fb5e38dcbe97d872f614b9eb7a708b1c606addfc3432e63be92c229d93c6694614a8194614bb4614a529460203d602011610821576108138183612bc4565b9794509450945050614a1c565b929493505050606461ffff60ff614bd7886145f9565b1692160610614c62575b6001600160a01b03600b541691614bfc6104268b8b8a612a0f565b833b15610e245761ffff60846000928360405197889485936348f3b0e560e11b855233600486015216602484015260046044840152600260648401525af1918215612f1957600193614b5f93614c53575b50614a85565b614c5c90612bb0565b38614c4d565b90601980820282159183820414821715612cdb576064614c829104613ebf565b604b90828281020482141715612cdb57606491020490614be1565b5093505050602460206001600160a01b03600b5416604051928380927f410e2b29000000000000000000000000000000000000000000000000000000008252600260048301525afa8015612f1957889361ffff8c928e94600091614d05575b5016151561499a565b614d1e915060203d602011611a6457611a568183612bc4565b38614cfc565b9190606461ffff60ff614d36886145f9565b1692160610614d92575b600191614b5f9161ffff614d586104268d8d8c612a0f565b16600090815260116020526040902080546bffffffffffffffffffff000019164260101b6bffffffffffffffffffff000016179055614b19565b60199081830283159284820414831715612cdb576064614db29104613ebf565b604b91838381020483141715612cdb576064919092020490614d40565b61ffff614de06104268b8b8a612a0f565b16600052601160205288886040600020549288816001600160501b03601096871c1610600014614e5c57614e579461ffff614e2d61042661305097614e45976001600160501b0396612a0f565b166000526011602052604060002054901c1690613e3b565b6001600160501b03601d549116612cf1565b614950565b50505050506000614950565b606460405162461bcd60e51b815260206004820152600860248201527f213d206f776e65720000000000000000000000000000000000000000000000006044820152fd5b606460405162461bcd60e51b815260206004820152601660248201527f4e4654206d75737420626520696e20506c61746f6f6e000000000000000000006044820152fd5b606460405162461bcd60e51b815260206004820152600e60248201527f4d757374206265206361646574730000000000000000000000000000000000006044820152fd5b614f4a9196503d806000833e611b808183612bc4565b94386146ed565b90506020813d602011614f7c575b81614f6c60209383612bc4565b81010312610e24575160006146b2565b3d9150614f5f565b159050614faf5760ff83165b3360005260266020528361ffff6040600020541603610e24573861467f565b600a614f90565b9260329561467a565b606460405162461bcd60e51b815260206004820152601060248201527f4d757374206f776e20506c61746f6f6e000000000000000000000000000000006044820152fd5b90929091606081156155315750615025611594602354610f1787602254612cf1565b6001600160a01b03600c5416604051634ea943e760e01b8152602081600481855afa8015612f195786916000916154fb575b50916150696000939284931015612d04565b602460405180948193634b3c08f360e01b83528a60048401525af1908115612f19576000916154e2575b50905b6000805b8661ffff831610156154cf5761ffff6150b96104268285168a8a612a0f565b16600052601060205260ff604060002054161561548b576151379061ffff6150e76104268286168b8b612a0f565b16600052600f60205261510c6001600160a01b0360406000205460101c163314612c1d565b61ffff61511f6104268286168b8b612a0f565b16600052600f60205260406000205460b01c90612cce565b809183600014615444576001600160a01b03600b5416906040519163a5e8364760e01b8352602083600481845afa928315612f19578a9361ffff91600091615425575b501615158061540a575b1561534c5750602061ffff60a46151ae6104268c6001600160a01b03600b54169785881691612a0f565b60006151bc8487168c612c75565b5196604051978895869462adc84b60e41b8652166004850152602484015260026044840152336064840152600160848401525af1928315612f195761ffff93898b6001956000936152fd575b5061523c6104267f629fb5e38dcbe97d872f614b9eb7a708b1c606addfc3432e63be92c229d93c6693899384891691612a0f565b604080513381526001600160a01b039590951660208601526003908501524260608501521691608090a25b836152786104268285168d8d612a0f565b166000526010602052604060002060ff1981541690558361529f6104268285168d8d612a0f565b16600052600f6020526000836040822082815501555b836152c66104268285168d8d612a0f565b166040519182527fe1caf88d0a9503d00b1bff2c6e1e892eedb0bb788cbedc754a87cc4f0d06f3a8602088151593a301169061509a565b879193506104267f629fb5e38dcbe97d872f614b9eb7a708b1c606addfc3432e63be92c229d93c669361534161523c9360203d602011610821576108138183612bc4565b959350935050615208565b915061536061042661ffff83168b8b612a0f565b92823b15610e245761ffff60405194633e02e62360e21b865216600485015233602485015260026044850152600084608481836001978860648401525af1928315612f195761ffff946001946153fb575b506153c26104268685168d8d612a0f565b90856040519216825260208201527f4a036c7c3e9ebba870545bb7f2691eba797e891806fb5d72b25e709b425c0a7e60403392a2615267565b61540490612bb0565b386153b1565b506019606461541d61ffff85168a612c75565b510610615184565b61543e915060203d602011611a6457611a568183612bc4565b3861517a565b8061ffff928361545c61042682600196168d8d612a0f565b16600052600f602052604060002075ffffffffffffffffffffffffffffffffffffffffffff81541690556152b5565b606460405162461bcd60e51b815260206004820152600d60248201527f6e6f7420696e20776173746573000000000000000000000000000000000000006044820152fd5b94505050509150612e8660235434612e14565b6154f5913d8091833e611b808183612bc4565b38615093565b91506020823d8211615529575b8161551560209383612bc4565b8101031261034e5750518590615069615057565b3d9150615508565b9061553f6023543414612b33565b61509656fea264697066735822122019fad45ca8550369e5d573ec8c5b33bf7f9db3d4538ace294115d2bdece6a87264736f6c634300081100330000000000000000000000000000000000000000000000000000000000000002
Deployed Bytecode
0x608080604052600436101561001357600080fd5b600090813560e01c9081630fd8965c146128555750806313667ed8146121fc578063140233cf146121de57806318b5f465146121c05780632397736a14611f035780632565963d14611e8e578063264c02bd14611e565780632bba8a1a14611e2d5780632bf9cdbb14611df15780632d062c3f14611dd35780633001323d14611daf5780633d34378814611d9157806340bbbf3f14611d6e57806340d1d25514611d47578063436a88c114611d295780634f04719614611ce75780635ec77d1114611cbb57806363ab097514611c8557806367efe74914611c5e578063715018a614611bf75780637bc09e3e14611bd45780637d037910146115395780637d5f95471461151b57806380235167146114de57806383eae271146114c1578063862b4237146114705780638aca0cad1461144d5780638da5cb5b146114275780638f6200bd146113fb5780639073c1b3146113d7578063934c19381461138b57806393a29995146113685780639e9569c51461134a578063a2bddd1714611323578063a4c52b86146112fc578063a6d2de98146112d8578063ad4203e4146112ac578063adbf466814610f4e578063b4d1d79514610f30578063b8ee3d0014610eb6578063bc10183f14610e7e578063bd48652e14610e60578063be07528b14610e29578063bf989b6e14610d8c578063cfe56cfc14610d69578063dbce286414610d25578063e343b62e14610828578063e4e85a9e14610536578063e5d7c2bc14610500578063ec9465fe146104dd578063efa09d6814610378578063f10fb584146103515763f2fde38b1461026857600080fd5b3461034e57602036600319011261034e576102816128ca565b6102896129b7565b6001600160a01b038091169081156102e4576000548273ffffffffffffffffffffffffffffffffffffffff19821617600055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a380f35b608460405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152fd5b80fd5b503461034e578060031936011261034e5760206001600160a01b03600c5416604051908152f35b503461034e57604036600319011261034e5767ffffffffffffffff6004358181116104d9576103ab9036906004016128f6565b9060249283359081116104d5576103c69036906004016128f6565b93906103d06129b7565b84840361049157855b61ffff908181168681101561048d5760ff806103fe6103f9848c89612a0f565b612a35565b16156104495790600192918461042b61042661041e6103f9868f8c612a0f565b948c8c612a0f565b612a43565b168b52600360205260408b20911660ff1982541617905501166103d9565b60648660106040519162461bcd60e51b8352602060048401528201527f496e76616c6964206e66742074797065000000000000000000000000000000006044820152fd5b8880f35b60648260126040519162461bcd60e51b8352602060048401528201527f77726f6e67206172726179206c656e67746800000000000000000000000000006044820152fd5b8480fd5b8280fd5b503461034e57602036600319011261034e576104f76129b7565b600435601f5580f35b503461034e57602036600319011261034e5760ff604060209261ffff6105246128b9565b16815260038452205416604051908152f35b5061054036612927565b6002906001936105538386541415612a52565b828555610561333b15612a9d565b61056c323314612ae8565b6105796023543414612b33565b426001600160501b031691865b8181106105cc578787818080806001600160a01b03600e5416602354908282156105c3575bf1156105b657805580f35b50604051903d90823e3d90fd5b506108fc6105ab565b876001600160a01b0380600a54166105e861042685878c612a0f565b9060405193849384926331a9108f60e11b845261ffff8095166004850152602096879160249586915afa9485156107f0578c956106309184916107fb575b5082163314612c1d565b610643610426888a84600b541698612a0f565b94803b156104d9578460648d978580946040519a8b9586947f758854a2000000000000000000000000000000000000000000000000000000008652336004870152168a85015260448401525af19485156107f0578c88928b898c948f9a6107c6575b508585858b956106ed958e61042696896106cd61075f9f9c6106d69f60409f61042692612a0f565b8d519e8f612b7e565b168d528c0152169c8d898b015260608a0152612a0f565b168152601288522081516020830151604084015161ffff90921660109190911b6bffffffffffffffffffff00001617606091821b6bffffffffffffffffffffffff1916178255909101516001909101805469ffffffffffffffffffff19166001600160501b0392909216919091179055565b60078054918c83018093116107b457505589939291907f9a3548e7da710b05c129b310e734c5830e4c53cc9255c7d47219adf7f1098ea1906107a561042686898e612a0f565b1692604051428152a301610586565b8d634e487b7160e01b81526011600452fd5b935050509396508692506107da9150612bb0565b6107ec579285878c8b968b89386106a5565b8380fd5b6040513d84823e3d90fd5b61081b9150883d8a11610821575b6108138183612bc4565b810190612bfe565b38610626565b503d610809565b50602036600319011261034e5760043567ffffffffffffffff8111610d21576108559036906004016128f6565b909161086660026001541415612a52565b6002600155610876333b15612a9d565b610881323314612ae8565b338152601760205260ff604082205416610cdd576108a26023543414612b33565b60ff60255460501c1661ffff831610610c9957805b61ffff831661ffff82161015610b8a576001600160a01b0360095416602061ffff60246108ea610426838716898b612a0f565b60405194859384926331a9108f60e11b84521660048301525afa908115610b7f5790610928918491610b60575b506001600160a01b03163314612c1d565b61ffff61093b6104268284168688612a0f565b168252600380602052600160ff60408520541603610b1c57816109b960019261ffff61096e610426828098168a8c612a0f565b168652601660205261098760ff60408820541615614563565b846109986104268286168a8c612a0f565b1686526002602052600260ff60408820541614908115610af2575b506145ae565b610a806109cc610426858416888a612a0f565b84604051916109da83612b7e565b168152426001600160501b031660208201819052336040830152606082015284610a0a6104268583168a8c612a0f565b16865260116020526040862081516020830151604084015161ffff90921660109190911b6bffffffffffffffffffff00001617606091821b6bffffffffffffffffffffffff1916178255909101516001909101805469ffffffffffffffffffff19166001600160501b0392909216919091179055565b82610a91610426828416888a612a0f565b166040518381524260208201527fadd17b9d82cb146eaff151f4f864faa55b09599b4eff7714935025b99054fe1c60403392a382610ad5610426828416888a612a0f565b168452601660205260408420805460ff19168317905501166108b7565b905084610b056104268286168a8c612a0f565b168652600260205260ff60408720541614386109b3565b606460405162461bcd60e51b815260206004820152600b60248201527f6f6e6c79206361646574730000000000000000000000000000000000000000006044820152fd5b610b79915060203d602011610821576108138183612bc4565b38610917565b6040513d85823e3d90fd5b5080918333835260266020526040832061ffff831661ffff19825416179055610bb961ffff8316600454612cce565b6004556001600160a01b039182600b541691823b156104d557610c16928592836040518096819582947fa6cab4cd000000000000000000000000000000000000000000000000000000008452606060048501526064840191612c89565b3360248301526002604483015203925af1908115610b7f578391610c82575b50808092338252601760205260408220600160ff19825416179055600e541660235490828215610c79575bf115610c6d576001805580f35b604051903d90823e3d90fd5b506108fc610c60565b610c8b90612bb0565b610c96578184610c35565b50fd5b606460405162461bcd60e51b815260206004820152601160248201527f4e6f7420656e6f756768206361646574730000000000000000000000000000006044820152fd5b606460405162461bcd60e51b815260206004820152601a60248201527f596f7520616c72656164792068617665206120706c61746f6f6e0000000000006044820152fd5b5080fd5b50610d62610d323661297b565b91610d4260026001541415612a52565b6002600155610d52333b15612a9d565b610d5d323314612ae8565b613f48565b6001805580f35b503461034e57602036600319011261034e57610d836129b7565b600435601c5580f35b503461034e57608036600319011261034e57610da66128ca565b610dae6128e0565b906044356001600160a01b03808216809203610e245760643593818516809503610e2457610dda6129b7565b8173ffffffffffffffffffffffffffffffffffffffff1994168460095416176009551682600a541617600a558282600c541617600c5581600b541617600b55600d541617600d5580f35b600080fd5b503461034e57604036600319011261034e576020610e56610e486128b9565b610e506128e0565b90614297565b6040519015158152f35b503461034e578060031936011261034e576020602454604051908152f35b503461034e57602036600319011261034e5760ff604060209261ffff610ea26128b9565b168152601684522054166040519015158152f35b503461034e57604036600319011261034e5760043567ffffffffffffffff8111610d215760ff610eec60019236906004016128f6565b939050610ef761296b565b90501614600014610f2557610f1d602091610f1760235491602254612cf1565b90612cce565b604051908152f35b506020602354610f1d565b503461034e578060031936011261034e576020600854604051908152f35b506020908160031936011261034e57610f656128b9565b91600190610f77600283541415612a52565b60028255610f86333b15612a9d565b610f91323314612ae8565b3383526017815260ff6040842054161561126857610fb26023543414612b33565b6001600160a01b03908160095416906040516331a9108f60e11b8152818160248161ffff809b16968760048301525afa90811561125d5790610fff918791611240575b5084163314612c1d565b818552600381526110188460ff60408820541614613e74565b8185526016815261103060ff60408720541615614563565b81855260028152600260ff60408720541614801561122f575b611052906145ae565b6110f46001600160501b0342166040519061106c82612b7e565b84825280848301523360408301526060820152838752601183526040872081516020830151604084015161ffff90921660109190911b6bffffffffffffffffffff00001617606091821b6bffffffffffffffffffffffff1916178255909101516001909101805469ffffffffffffffffffff19166001600160501b0392909216919091179055565b8160405185815242838201527fadd17b9d82cb146eaff151f4f864faa55b09599b4eff7714935025b99054fe1c60403392a38185526016815260408520805460ff191685179055600454600019811461121b57840160045533855260269052604084208054868116968781146112075785879897969701169061ffff191617905581600b541690813b156107ec5783916064839260405194859384927ff754ffa60000000000000000000000000000000000000000000000000000000084526004840152336024840152600260448401525af1908115610b7f5783916111f3575b50808092600e5416602354908282156105c357f1156105b657805580f35b6111fc90612bb0565b610d215781386111d5565b602487634e487b7160e01b81526011600452fd5b602486634e487b7160e01b81526011600452fd5b50604085205460ff16600314611049565b6112579150833d8511610821576108138183612bc4565b38610ff5565b6040513d88823e3d90fd5b6064906040519062461bcd60e51b82526004820152601260248201527f4d757374206861766520506c61746f6f6e2100000000000000000000000000006044820152fd5b503461034e57602036600319011261034e5761ffff6112c96128b9565b6112d16129b7565b1660205580f35b503461034e57602036600319011261034e576020610f1d6112f76128b9565b6143d2565b503461034e578060031936011261034e5760206001600160a01b03600b5416604051908152f35b503461034e578060031936011261034e5760206001600160a01b03600a5416604051908152f35b503461034e578060031936011261034e576020601d54604051908152f35b503461034e57602036600319011261034e576113826129b7565b60043560235580f35b503461034e57602036600319011261034e576001600160a01b036113ad6128ca565b6113b56129b7565b1673ffffffffffffffffffffffffffffffffffffffff19600e541617600e5580f35b503461034e57602036600319011261034e576020610f1d6113f66128b9565b61433a565b506114246114083661297b565b91611414333b15612a9d565b61141f323314612ae8565b615003565b80f35b503461034e578060031936011261034e576001600160a01b036020915416604051908152f35b503461034e57602036600319011261034e576114676129b7565b60043560225580f35b503461034e57602036600319011261034e5760043560ff81168103610e24576114976129b7565b6aff000000000000000000006025549160501b16906aff0000000000000000000019161760255580f35b503461034e578060031936011261034e5760208054604051908152f35b503461034e57602036600319011261034e5760ff60406020926001600160a01b036115076128ca565b168152601784522054166040519015158152f35b503461034e578060031936011261034e576020602254604051908152f35b50602036600319011261034e578060043567ffffffffffffffff8111610c96576115679036906004016128f6565b9190611574333b15612a9d565b61157f323314612ae8565b61159b611594602354610f1786602254612cf1565b3414612b33565b6001600160a01b03600c5416604051634ea943e760e01b8152602081600481855afa8015611b8f5785918591611b9a575b508492916115db911015612d04565b602460405180958193634b3c08f360e01b83528860048401525af1918215611b8f578492611b6b575b50835b8361ffff82161015611af3576001600160a01b0360095416602061ffff60246116366104268387168a89612a0f565b60405194859384926331a9108f60e11b84521660048301525afa801561125d57611671918791610b6057506001600160a01b03163314612c1d565b61ffff6116846104268284168786612a0f565b16855260038060205260ff908160408820541603611aaf5761ffff6116af6104268285168887612a0f565b1686526010602052604086205416611a6b57846001600160a01b03600b541660405163a5e8364760e01b8152602081600481855afa8015610b7f5761ffff918491611a3c575b5016151580611a21575b156118035750506001600160a01b03600b5416602061ffff60a46117296104268387168a89612a0f565b896117368488168a612c75565b5195604051968795869462adc84b60e41b8652166004850152602484015260026044840152336064840152600060848401525af191821561125d5761ffff9260019288916117e4575b507f629fb5e38dcbe97d872f614b9eb7a708b1c606addfc3432e63be92c229d93c66846117b26104268286168b8a612a0f565b604080513381526001600160a01b039590951660208601526003908501524260608501521691608090a25b0116611607565b6117fd915060203d602011610821576108138183612bc4565b3861177f565b61181561042661ffff85168887612a0f565b813b156104d95761ffff60848492836040519586948593633e02e62360e21b855216600484015233602484015260026044840152600060648401525af180156107f057611a0d575b505060018161187561042661ffff8095168887612a0f565b836118866104268285168a89612a0f565b168852600f90816020528460408a2091168519825416179055836118b06104268285168a89612a0f565b168852806020526040882080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff75ffffffffffffffffffffffffffffffffffffffff00003360101b169116179055601c54846119136104268286168b8a612a0f565b16895281602052604089209075ffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffff0000000000000000000000000000000000000000000083549260b01b169116179055836119746104268285168a89612a0f565b168852602052604087208201805469ffffffffffffffffffff1916426001600160501b031617905581836119ae6104268483168a89612a0f565b1688526010602052604088209060ff198254161790556119d46104268483168887612a0f565b83604051911681528760208201527f4a036c7c3e9ebba870545bb7f2691eba797e891806fb5d72b25e709b425c0a7e60403392a26117dd565b611a1690612bb0565b6104d557843861185d565b5060196064611a3461ffff861688612c75565b5106106116ff565b611a5e915060203d602011611a64575b611a568183612bc4565b81019061460a565b386116f5565b503d611a4c565b606460405162461bcd60e51b815260206004820152601160248201527f616c726561647920696e207761737465730000000000000000000000000000006044820152fd5b606460405162461bcd60e51b815260206004820152600d60248201527f6e6f7420612047656e6572616c000000000000000000000000000000000000006044820152fd5b8480611b0160235434612e14565b8015908115611b3a575b50508080806001600160a01b03600e541660235490828215611b31575bf115610c6d5780f35b506108fc611b28565b8280929181926001600160a01b03600d5416908390611b62575bf115610c6d57808280611b0b565b506108fc611b54565b611b889192503d8086833e611b808183612bc4565b810190612d4f565b9038611604565b6040513d86823e3d90fd5b92945050506020813d602011611bcc575b81611bb860209383612bc4565b81010312610e2457518492908490846115cc565b3d9150611bab565b503461034e57602036600319011261034e57611bee6129b7565b600435601e5580f35b503461034e578060031936011261034e57611c106129b7565b60006001600160a01b03815473ffffffffffffffffffffffffffffffffffffffff1981168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b503461034e578060031936011261034e5760206001600160a01b0360095416604051908152f35b503461034e57602036600319011261034e5760ff604060209261ffff611ca96128b9565b16815260028452205416604051908152f35b503461034e57602036600319011261034e5761ffff611cd86128b9565b611ce06129b7565b1660215580f35b503461034e57602036600319011261034e576004356001600160501b038116809103610d2157611d156129b7565b6001600160501b0319602554161760255580f35b503461034e578060031936011261034e576020602354604051908152f35b503461034e578060031936011261034e5760206001600160501b0360255416604051908152f35b503461034e57602036600319011261034e57611d886129b7565b600435601d5580f35b503461034e578060031936011261034e576020601c54604051908152f35b503461034e578060031936011261034e57602060ff60255460501c16604051908152f35b503461034e578060031936011261034e576020601f54604051908152f35b503461034e57602036600319011261034e5761ffff60406020926001600160a01b03611e1b6128ca565b16815260268452205416604051908152f35b50611424611e3a3661297b565b91611e46333b15612a9d565b611e51323314612ae8565b614624565b503461034e57602036600319011261034e5760ff604060209261ffff611e7a6128b9565b168152601084522054166040519015158152f35b50606036600319011261034e5760043567ffffffffffffffff8111610d2157611ebb9036906004016128f6565b611ec361296b565b604435918215158303610e2457610d6293611ee360026001541415612a52565b6002600155611ef3333b15612a9d565b611efe323314612ae8565b612e21565b506020908160031936011261034e57611f1a6128b9565b90600190611f2c600283541415612a52565b60028255611f3b333b15612a9d565b611f46323314612ae8565b61ffff8093169081815260038552611f668360ff60408420541614613e74565b611f7861159460235460225490612cce565b6001600160a01b039384600b5416601f54813b156107ec576040517f79cc679000000000000000000000000000000000000000000000000000000000815233600482015260248101919091529083908290604490829084905af18015610b7f579083916121ac575b5050611ffd612710611ff7601f5460215490612cf1565b04613f06565b84600c5416604051634ea943e760e01b81528781600481855afa908115611b8f57849187918391612179575b50829391612038911015612d04565b602460405180948193634b3c08f360e01b83528a60048401525af1908115610b7f57839161215f575b50600a60648361207084612c68565b51160610156121395750506003935b8282526002865260ff604083209516948560ff19825416179055816120a660235434612e14565b80158015612110575b505080808093600e541660235490828215612107575bf115610c6d575060405190815282848201527f0565300890d3685df55dc05c4134c4a4d26d00e159a0042ed277892a48f2eddc60403392a28055604051908152f35b506108fc6120c5565b828092819286600d5416908390612130575bf1156105b6578138806120af565b506108fc612122565b601e91612147606492612c68565b51160610156121585760029361207f565b829361207f565b61217391503d8085833e611b808183612bc4565b38612061565b925050508781813d83116121a5575b6121928183612bc4565b81010312610e2457518390869082612029565b503d612188565b6121b590612bb0565b610d21578138611fe0565b503461034e578060031936011261034e576020602154604051908152f35b503461034e578060031936011261034e576020601e54604051908152f35b5061220636612927565b9061221960026001959495541415612a52565b6002600155612229333b15612a9d565b612234323314612ae8565b6122416023543414612b33565b61224a82612be6565b936122586040519586612bc4565b828552601f1961226784612be6565b01366020870137835b8381106123665750506001600160a01b039384600b541691823b156104d55792909184926122d76040519586947fbd82fc78000000000000000000000000000000000000000000000000000000008652336004870152608060248701526084860191612c89565b60031984820301604485015260208083519283815201920190855b81811061234757505050838380926002606483015203925af180156107f057612338575b508080808094600e541660235490828215610c7957f115610c6d576001805580f35b61234190612bb0565b38612316565b825160ff168452889650879550602093840193909201916001016122f2565b6001600160a01b0360095416602061ffff6024612387610426868a8a612a0f565b60405194859384926331a9108f60e11b84521660048301525afa90811561125d57906123c4918791610b6057506001600160a01b03163314612c1d565b61ffff6123d5610426838787612a0f565b16855260038060205260ff6001816040892054161460001461252557505060046123ff8288612c75565b5261240e610426828686612a0f565b6001600160501b03421661ffff6040519261242884612b7e565b16918281528160208201526001600160a01b0385169182604083015260608201528288526124c46011918260205260408a2081516020830151604084015161ffff90921660109190911b6bffffffffffffffffffff00001617606091821b6bffffffffffffffffffffffff1916178255909101516001909101805469ffffffffffffffffffff19166001600160501b0392909216919091179055565b600454906001820180921161251357509060019392916004557fadd17b9d82cb146eaff151f4f864faa55b09599b4eff7714935025b99054fe1c60408051868152426020820152a35b01612270565b634e487b7160e01b8952600452602488fd5b61ffff612536610426858989612a0f565b168752816020526002816040892054161460001461268657505060058061255d8389612c75565b5261256c610426838787612a0f565b906001600160501b039061262782601954169361ffff6040519161258f83612b7e565b169485825260208201526001600160a01b0387169384604083015242166060820152848a52601360205260408a2081516020830151604084015161ffff90921660109190911b6bffffffffffffffffffff00001617606091821b6bffffffffffffffffffffffff1916178255909101516001909101805469ffffffffffffffffffff19166001600160501b0392909216919091179055565b805490600182018092116126725790600194939291557fadd17b9d82cb146eaff151f4f864faa55b09599b4eff7714935025b99054fe1c6040805160028152426020820152a361250d565b602489634e487b7160e01b81526011600452fd5b61ffff612697610426858989612a0f565b168752816020528181604089205416146000146127e557506006806126bc848a612c75565b526126cb610426848888612a0f565b916001600160501b039161278683601b54169461ffff604051916126ee83612b7e565b169586825260208201526001600160a01b0388169485604083015242166060820152858b52601460205260408b2081516020830151604084015161ffff90921660109190911b6bffffffffffffffffffff00001617606091821b6bffffffffffffffffffffffff1916178255909101516001909101805469ffffffffffffffffffff19166001600160501b0392909216919091179055565b805490600182018092116127d1576001959493927fadd17b9d82cb146eaff151f4f864faa55b09599b4eff7714935025b99054fe1c92604092558151908152426020820152a361250d565b60248a634e487b7160e01b81526011600452fd5b9061ffff6127f7610426858989612a0f565b168752602052604086205416156128105760019061250d565b60405162461bcd60e51b815260206004820152601060248201527f496e76616c696420546f6b656e204964000000000000000000000000000000006044820152606490fd5b905034610d21576020366003190112610d2157608091604061ffff918261287a6128b9565b168152600f602052206001600160501b03600182549201541691811683526001600160a01b038160101c16602084015260b01c60408301526060820152f35b6004359061ffff82168203610e2457565b600435906001600160a01b0382168203610e2457565b602435906001600160a01b0382168203610e2457565b9181601f84011215610e245782359167ffffffffffffffff8311610e24576020808501948460051b010111610e2457565b906040600319830112610e24576004356001600160a01b0381168103610e2457916024359067ffffffffffffffff8211610e2457612967916004016128f6565b9091565b6024359060ff82168203610e2457565b6040600319820112610e24576004359067ffffffffffffffff8211610e24576129a6916004016128f6565b90916024358015158103610e245790565b6001600160a01b036000541633036129cb57565b606460405162461bcd60e51b815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b9190811015612a1f5760051b0190565b634e487b7160e01b600052603260045260246000fd5b3560ff81168103610e245790565b3561ffff81168103610e245790565b15612a5957565b606460405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152fd5b15612aa457565b606460405162461bcd60e51b815260206004820152600b60248201527f6e6f20636f6e74726163740000000000000000000000000000000000000000006044820152fd5b15612aef57565b606460405162461bcd60e51b815260206004820152600860248201527f6e6f2070726f78790000000000000000000000000000000000000000000000006044820152fd5b15612b3a57565b606460405162461bcd60e51b815260206004820152600d60248201527f6e656564206d6f726520657468000000000000000000000000000000000000006044820152fd5b6080810190811067ffffffffffffffff821117612b9a57604052565b634e487b7160e01b600052604160045260246000fd5b67ffffffffffffffff8111612b9a57604052565b90601f8019910116810190811067ffffffffffffffff821117612b9a57604052565b67ffffffffffffffff8111612b9a5760051b60200190565b90816020910312610e2457516001600160a01b0381168103610e245790565b15612c2457565b606460405162461bcd60e51b815260206004820152600960248201527f6e6f74206f776e657200000000000000000000000000000000000000000000006044820152fd5b805115612a1f5760200190565b8051821015612a1f5760209160051b010190565b9190808252602080920192916000805b838210612ca857505050505090565b9091929394853561ffff81168091036104d9578152830194830193929160010190612c99565b91908201809211612cdb57565b634e487b7160e01b600052601160045260246000fd5b81810292918115918404141715612cdb57565b15612d0b57565b606460405162461bcd60e51b815260206004820152600f60248201527f74727920616761696e20736f6f6e2e00000000000000000000000000000000006044820152fd5b6020908181840312610e245780519067ffffffffffffffff8211610e2457019180601f84011215610e24578251612d8581612be6565b93612d936040519586612bc4565b818552838086019260051b820101928311610e24578301905b828210612dba575050505090565b81518152908301908301612dac565b15612dd057565b606460405162461bcd60e51b815260206004820152601360248201527f77726f6e67207479706520666f722063616c6c000000000000000000000000006044820152fd5b91908203918211612cdb57565b929192333203613df75760ff906000858316600103613de457508290612e52611594602354610f1787602254612cf1565b606091600184881614613d1f575b50949392919060009586955b848710612f635750505050505050612e8660235434612e14565b80158015612f32575b50506001600160a01b03600080808084600e541660235490828215612f29575bf115612f19578115612f2557612ec782602454612cce565b602455600b5416803b15610e2457604051636203b43b60e11b815233600482015260248101929092526000908290818381604481015b03925af18015612f1957612f0e5750565b612f1790612bb0565b565b6040513d6000823e3d90fd5b5050565b506108fc612eaf565b600080809381936001600160a01b03600d5416908390612f5a575bf115612f19573880612e8f565b506108fc612f4d565b9091929394959661ffff9081612f7d6104268b8a88612a0f565b1660005260166020528560406000205416610e245781612fa16104268b8a88612a0f565b1660005260039081602052600187604060002054161460001461393f57612fcc600188861614612dc9565b612fda6104268b8a88612a0f565b92612fe58b88612c75565b518a60008387168152601160205261300533604083205460601c14612c1d565b6025546001600160501b0391908216824282106138e95750505083871660005260116020526130786130596130506130478460406000205460101c1642612e14565b601d5490612cf1565b60085490613e54565b61271061306860205483612cf1565b049061307382613f06565b612e14565b958360101c9085891660005260026020528c6040600020541660009485948160001461360f5750508061334f5750506032908160648787160610600014613302575050600b54604051633701e0bb60e11b815261ffff891660048083019190915260248201959095526002604482015260648101949094523360848501526020925083915060a49082906000906001600160a01b03165af1908115612f19576000916132e3575b50906001915b8186166000526011602052600060016040822082815501556004549283600019810111612cdb578c936000190160045560001461324857818616600081815260026020908152604091829020805460ff1916905581513381526001600160a01b0394909416848201526001918401829052426060850152909761323a979695909490937fb70488c54eed1eb26b67b90ac6034c62ccdda9484046484c84f119bbc0725ff893907f629fb5e38dcbe97d872f614b9eb7a708b1c606addfc3432e63be92c229d93c6690608090a25b6040514381524283820152818616907fd4afcb2b571461d4cf9fa6cfd5464f87ec1d6009b1cf6431ef4e341658748a8660403392a35b604051938785521515941692a3612cce565b975b01959493929190612e6c565b50929190506001600160a01b03600b541693843b15610e2457600080956084604051809881936348f3b0e560e11b8352336004840152898716602484015260046044840152600260648401525af1938415612f19577fb70488c54eed1eb26b67b90ac6034c62ccdda9484046484c84f119bbc0725ff860208d9260019861323a986132d4575b506131f2565b6132dd90612bb0565b386132ce565b6132fc915060203d602011610821576108138183612bc4565b3861311f565b85945094606491929395160610156131255793603c80820282159183820414821715612cdb5760646133349104613ebf565b602890828281020482141715612cdb57606491020493613125565b60018103613447575050602860648587160610156133f9575050600b54604051633701e0bb60e11b815261ffff881660048083019190915260248201949094526002604482015260648101939093523360848401526020915082906001600160a01b03168160008160a481015b03925af1908115612f19576000916133da575b50906001915b613125565b6133f3915060203d602011610821576108138183612bc4565b386133cf565b8460509293959450606491160610156133d55793601980820282159183820414821715612cdb57606461342c9104613ebf565b604b90828281020482141715612cdb57606491020493613125565b6002810361350a57505060199081606487871606106000146134bd575050600b54604051633701e0bb60e11b815261ffff89166004808301919091526024820195909552600260448201526064810194909452336084850152602092508391506001600160a01b03168160008160a481016133bc565b85945094606491929395160610156133d55793602880820282159183820414821715612cdb5760646134ef9104613ebf565b603c90828281020482141715612cdb57606491020493613125565b95949293951461351c575b5050613125565b600f60648584969795941606106000146135c1575050600b54604051633701e0bb60e11b815261ffff8816600480830191909152602482019490945260026044820152606481019390935233608484015260209150829060a49082906000906001600160a01b03165af1908115612f19576000916135a2575b50906001915b3880613515565b6135bb915060203d602011610821576108138183612bc4565b38613595565b84601492939594506064911606101561359b5793601980820282159183820414821715612cdb5760646135f49104613ebf565b604b90828281020482141715612cdb5760649102049361359b565b955096955085935080999798991560001461370d57505060329060649283911606106136a9575b50917fb70488c54eed1eb26b67b90ac6034c62ccdda9484046484c84f119bbc0725ff8602060019795936136a461323a98965b8287166000526011845242166040600020906bffffffffffffffffffff000082549160101b16906bffffffffffffffffffff00001916179055565b613228565b9492509290603c80870287159188820414821715612cdb57866136cc9104613ebf565b6028808802978804141715612cdb579390940493909290918a91907fb70488c54eed1eb26b67b90ac6034c62ccdda9484046484c84f119bbc0725ff8613636565b600181036137c2575050605090606492839116061061375e575b50917fb70488c54eed1eb26b67b90ac6034c62ccdda9484046484c84f119bbc0725ff8602060019795936136a461323a9896613669565b9492509290601980870287159188820414821715612cdb57866137819104613ebf565b604b808802978804141715612cdb579390940493909290918a91907fb70488c54eed1eb26b67b90ac6034c62ccdda9484046484c84f119bbc0725ff8613727565b6002810361387657505060199060649283911606106138125750917fb70488c54eed1eb26b67b90ac6034c62ccdda9484046484c84f119bbc0725ff8602060019795936136a461323a9896613669565b9492509290602880870287159188820414821715612cdb57866138359104613ebf565b603c808802978804141715612cdb579390940493909290918a91907fb70488c54eed1eb26b67b90ac6034c62ccdda9484046484c84f119bbc0725ff8613727565b919250146138b55750917fb70488c54eed1eb26b67b90ac6034c62ccdda9484046484c84f119bbc0725ff8602060019795936136a461323a9896613669565b60148391606492839116061015613727579492509290601980870287159188820414821715612cdb57866137819104613ebf565b89871683526011602052604083205461307893601091821c83168411156139365750613931926130509261392692604060002054901c1690613e3b565b84601d549116612cf1565b613059565b92505050613059565b9091806139506104268c8b89612a0f565b166000528260205260029283886040600020541614600014613b1e575061397a8388861614612dc9565b6139886104268b8a88612a0f565b169081600052601390816020526139a83360406000205460601c14612c1d565b6019549183600052806020526001600160501b036139d08160406000205460101c1685612e14565b938c15613ad45750508360005260205260006001604082208281550155600580546000198101908111612cdb5781556001600160a01b03600b541694853b15610e245760846000928360405198899485936348f3b0e560e11b85523360048601528a6024860152604485015260648401525af1928315612f1957600194613abf94613ac5575b50806040514381524260208201527ffa3f5ce1fdd0ac038fa821cb6e3d9a07745f31fd685851910b73551743f81a1260403392a35b604051908382527f261f0854432bace3f0023f1dd8d91177b3bc455fb50acd7491782cd858b24c7260208d151593a3612cce565b9761323c565b613ace90612bb0565b38613a56565b6001965090613b19918693613abf97600052602052166040600020906bffffffffffffffffffff000082549160101b16906bffffffffffffffffffff00001916179055565b613a8b565b81613b2d6104268d8c8a612a0f565b166000528060205280886040600020541614600014613cf157613b539088861614612dc9565b613b616104268b8a88612a0f565b16908160005260149081602052613b813360406000205460601c14612c1d565b601b549183600052806020526001600160501b03613ba98160406000205460101c1685612e14565b938c15613ca75750508360005260205260006001604082208281550155600680546000198101908111612cdb5781556001600160a01b03600b541694853b15610e245760846000928360405198899485936348f3b0e560e11b85523360048601528a6024860152604485015260648401525af1928315612f1957600194613abf94613c98575b50806040514381524260208201527feb3045004b49a997bcf8d2e62e9c535e2c03ea0d5b13193cf8e5d90a2c4c528160403392a35b604051908382527fe1caf88d0a9503d00b1bff2c6e1e892eedb0bb788cbedc754a87cc4f0d06f3a860208d151593a3612cce565b613ca190612bb0565b38613c2f565b6001965090613cec918693613abf97600052602052166040600020906bffffffffffffffffffff000082549160101b16906bffffffffffffffffffff00001916179055565b613c64565b91999250613d03610426848a88612a0f565b166000526020528460406000205416156128105760019061323c565b9091506001600160a01b03600c541690604051634ea943e760e01b8152602081600481865afa908115612f1957600091613db2575b5091602482613d696000959486951015612d04565b6040519485938492634b3c08f360e01b845260048401525af1908115612f1957600091613d99575b509038612e60565b613dac913d8091833e611b808183612bc4565b38613d91565b906020823d8211613ddc575b81613dcb60209383612bc4565b8101031261034e5750516024613d54565b3d9150613dbe565b90613df26023543414612b33565b612e52565b606460405162461bcd60e51b815260206004820152600860248201527f4f6e6c7920454f410000000000000000000000000000000000000000000000006044820152fd5b6001600160501b039182169082160391908211612cdb57565b8115613e5e570490565b634e487b7160e01b600052601260045260246000fd5b15613e7b57565b606460405162461bcd60e51b815260206004820152600960248201527f6e6f7420636164657400000000000000000000000000000000000000000000006044820152fd5b600554908115613ef457613eea91613edd613ee29260185490612cce565b613e54565b601954612cce565b6019556000601855565b613f019150601854612cce565b601855565b600654908115613f3657613f2c91613edd613f2492601a5490612cce565b601b54612cce565b601b556000601a55565b613f439150601a54612cce565b601a55565b91613f566023543414612b33565b600092835b83811061400357505050508015614000576001600160a01b039081600b541690813b15610e2457604051636203b43b60e11b815233600482015260248101829052916000908390604490829084905af1918215612f1957600093849384938493613fcd92613ff1575b50602454612cce565b602455600e541660235490828215613fe8575bf115612f1957565b506108fc613fe0565b613ffa90612bb0565b38613fc4565b50565b61ffff80614015610426848887612a0f565b16600052601260209181835260409161403633846000205460601c14612c1d565b6025546001600160501b0399908a1642811061421557506140899083614060610426898d8c612a0f565b16600052828652610f176130506140808d886000205460101c1642612e14565b601e5490612cf1565b985b8887891561419f57849250876140a49261042692612a0f565b16600052835260006001838220828155015560078054906000198201918211612cdb57556001600160a01b03600b54166140e2610426868a89612a0f565b813b15610e245782606460009283875195869485937f4e5a18f9000000000000000000000000000000000000000000000000000000008552336004860152166024840152600260448401525af1801561419457917fe9083238ed5c128b67831b957929cef6c82beb49da6f7f4d156f6391a5a6513191600196959493614185575b505b614173610426868b8a612a0f565b1691519289845287151593a301613f5b565b61418e90612bb0565b38614163565b83513d6000823e3d90fd5b917fe9083238ed5c128b67831b957929cef6c82beb49da6f7f4d156f6391a5a6513193856141da6104268b6142109660019d9c9b9a98612a0f565b166000528652421684600020906bffffffffffffffffffff000082549160101b16906bffffffffffffffffffff00001916179055565b614165565b83614224610426898d8c612a0f565b166000528286528a856000205485898d8c8686601096871c161060001461428a5793614279936142646104266142849a9995610f17999561305099612a0f565b16600052888c528a60002054901c1690613e3b565b8d601e549116612cf1565b9861408b565b505050505050509861408b565b919060009261ffff60009116908181526003602052604091600160ff8484205416146000146142de576001600160a01b039394955081526011602052205460601c91161490565b8282205460ff1660020361430a576001600160a01b039394955081526013602052205460601c91161490565b50600360ff83832054161461431e57505050565b6001600160a01b03929394506014602052205460601c91161490565b61ffff1660008181526012602052604081205490916001600160501b039160101c8216156143cd5760255482164281106143935750613050916040846140809361439096526012602052205460101c1642612e14565b90565b80915082604085205460101c16106000146143cd57906143c36130509282604061439096205460101c1690613e3b565b601e549116612cf1565b505090565b600061ffff6000921690818352602060038152604091600160ff84872054161480614547575b1561447857506025546001600160501b0393908416428110614434575091846011613050959361304795614390985252205460101c1642612e14565b929160119186525281838286205460101c1610600014614472578291613050936144689261439096205460101c1690613e3b565b601d549116612cf1565b50505090565b6003829593949552600260ff85852054161480614534575b156144ba5750916001600160501b03916013614390959460195495835252205460101c1690612e14565b9360038252600360ff8585205416146144d5575b5050505090565b909192936010835260ff85852054166000146144fa57508252600f9052205460b01c90565b939160149150528082205460601c614517575050388080806144ce565b601b54912054614390925060101c6001600160501b031690612e14565b50601382528383205460601c1515614490565b50601182526001600160501b038386205460101c1615156143f8565b1561456a57565b606460405162461bcd60e51b815260206004820152601c60248201527f4e46542063616e206f6e6c7920626520696e203120706c61746f6f6e000000006044820152fd5b156145b557565b606460405162461bcd60e51b815260206004820152602060248201527f6361646574206d757374206861766520736e69706572206f7220706973746f6c6044820152fd5b60ff166032039060ff8211612cdb57565b90816020910312610e24575161ffff81168103610e245790565b33600052601760205260ff6040600020541615614fbf57614650611594602354610f1785602254612cf1565b600090600a831115918483600014614fb6575060ff84166005029260ff8416938403612cdb578593955b614f84575b506001600160a01b03600c541694604051634ea943e760e01b81526020816004818a5afa908115612f1957600091614f51575b506000966146c38789931015612d04565b602460405180998193634b3c08f360e01b83528a60048401525af1958615612f1957600096614f34575b509491906000956000935b8685106148815750505050506147d2575b5061471660235434612e14565b801580156147a1575b505060008080806001600160a01b03600e541660235490828215614798575bf115612f195780156140005761475681602454612cce565b6024556001600160a01b03600b5416803b15610e2457604051636203b43b60e11b81523360048201526024810192909252600090829081838160448101612efd565b506108fc61473e565b600080809381936001600160a01b03600d54169083906147c9575bf115612f1957388061471f565b506108fc6147bc565b6147f490336000526017602052604060002060ff198154169055600454612e14565b6004556001600160a01b03600b5416803b15610e2457600080916044604051809481937fc6f654a0000000000000000000000000000000000000000000000000000000008352336004840152600260248401525af18015612f1957614872575b50336000526026602052604060002061ffff19815416905538614709565b61487b90612bb0565b38614854565b909192939661ffff6148976104268a8a89612a0f565b166000526003602052600160ff6040600020541603614ef05761ffff6148c16104268a8a89612a0f565b16600052601660205260ff6040600020541615614eac5761ffff6148e96104268a8a89612a0f565b1660005260116020523360406000205460601c03614e68576025546001600160501b0316428110614dcf575061ffff6149266104268a8a89612a0f565b1660005260116020526149506130506130476001600160501b0360406000205460101c1642612e14565b61495a8984612c75565b5160101c908715614d2457606461ffff6149748c87612c75565b5116069160ff808816600a0311612cdb57898b91899460ff808b16600a03161180614c9d575b15614bc1575060a48260006149ce6149c761042660209761ffff976001600160a01b03600b54169b612a0f565b928a612c75565b51966040519788958694633701e0bb60e11b8652166004850152602484015260026044840152600460648401523360848401525af1928315612f19576001938b8b8a614b5f96600094614b6a575b50614a526104267f629fb5e38dcbe97d872f614b9eb7a708b1c606addfc3432e63be92c229d93c6694614a819461ffff94612a0f565b604080513381526001600160a01b03909616602087015260019086015242606086015216929081906080820190565b0390a25b61ffff614a966104268d8d8c612a0f565b16600052601160205260008460408220828155015561ffff614abc6104268d8d8c612a0f565b166000526016602052604060002060ff198154169055614ae06104268c8c8b612a0f565b61ffff6040519143835242602084015216907fd4afcb2b571461d4cf9fa6cfd5464f87ec1d6009b1cf6431ef4e341658748a8660403392a35b61ffff614b2a6104268d8d8c612a0f565b16604051908282527fb70488c54eed1eb26b67b90ac6034c62ccdda9484046484c84f119bbc0725ff860208c151593a3612cce565b9701939291906146f8565b61ffff9194506104267f629fb5e38dcbe97d872f614b9eb7a708b1c606addfc3432e63be92c229d93c6694614a8194614bb4614a529460203d602011610821576108138183612bc4565b9794509450945050614a1c565b929493505050606461ffff60ff614bd7886145f9565b1692160610614c62575b6001600160a01b03600b541691614bfc6104268b8b8a612a0f565b833b15610e245761ffff60846000928360405197889485936348f3b0e560e11b855233600486015216602484015260046044840152600260648401525af1918215612f1957600193614b5f93614c53575b50614a85565b614c5c90612bb0565b38614c4d565b90601980820282159183820414821715612cdb576064614c829104613ebf565b604b90828281020482141715612cdb57606491020490614be1565b5093505050602460206001600160a01b03600b5416604051928380927f410e2b29000000000000000000000000000000000000000000000000000000008252600260048301525afa8015612f1957889361ffff8c928e94600091614d05575b5016151561499a565b614d1e915060203d602011611a6457611a568183612bc4565b38614cfc565b9190606461ffff60ff614d36886145f9565b1692160610614d92575b600191614b5f9161ffff614d586104268d8d8c612a0f565b16600090815260116020526040902080546bffffffffffffffffffff000019164260101b6bffffffffffffffffffff000016179055614b19565b60199081830283159284820414831715612cdb576064614db29104613ebf565b604b91838381020483141715612cdb576064919092020490614d40565b61ffff614de06104268b8b8a612a0f565b16600052601160205288886040600020549288816001600160501b03601096871c1610600014614e5c57614e579461ffff614e2d61042661305097614e45976001600160501b0396612a0f565b166000526011602052604060002054901c1690613e3b565b6001600160501b03601d549116612cf1565b614950565b50505050506000614950565b606460405162461bcd60e51b815260206004820152600860248201527f213d206f776e65720000000000000000000000000000000000000000000000006044820152fd5b606460405162461bcd60e51b815260206004820152601660248201527f4e4654206d75737420626520696e20506c61746f6f6e000000000000000000006044820152fd5b606460405162461bcd60e51b815260206004820152600e60248201527f4d757374206265206361646574730000000000000000000000000000000000006044820152fd5b614f4a9196503d806000833e611b808183612bc4565b94386146ed565b90506020813d602011614f7c575b81614f6c60209383612bc4565b81010312610e24575160006146b2565b3d9150614f5f565b159050614faf5760ff83165b3360005260266020528361ffff6040600020541603610e24573861467f565b600a614f90565b9260329561467a565b606460405162461bcd60e51b815260206004820152601060248201527f4d757374206f776e20506c61746f6f6e000000000000000000000000000000006044820152fd5b90929091606081156155315750615025611594602354610f1787602254612cf1565b6001600160a01b03600c5416604051634ea943e760e01b8152602081600481855afa8015612f195786916000916154fb575b50916150696000939284931015612d04565b602460405180948193634b3c08f360e01b83528a60048401525af1908115612f19576000916154e2575b50905b6000805b8661ffff831610156154cf5761ffff6150b96104268285168a8a612a0f565b16600052601060205260ff604060002054161561548b576151379061ffff6150e76104268286168b8b612a0f565b16600052600f60205261510c6001600160a01b0360406000205460101c163314612c1d565b61ffff61511f6104268286168b8b612a0f565b16600052600f60205260406000205460b01c90612cce565b809183600014615444576001600160a01b03600b5416906040519163a5e8364760e01b8352602083600481845afa928315612f19578a9361ffff91600091615425575b501615158061540a575b1561534c5750602061ffff60a46151ae6104268c6001600160a01b03600b54169785881691612a0f565b60006151bc8487168c612c75565b5196604051978895869462adc84b60e41b8652166004850152602484015260026044840152336064840152600160848401525af1928315612f195761ffff93898b6001956000936152fd575b5061523c6104267f629fb5e38dcbe97d872f614b9eb7a708b1c606addfc3432e63be92c229d93c6693899384891691612a0f565b604080513381526001600160a01b039590951660208601526003908501524260608501521691608090a25b836152786104268285168d8d612a0f565b166000526010602052604060002060ff1981541690558361529f6104268285168d8d612a0f565b16600052600f6020526000836040822082815501555b836152c66104268285168d8d612a0f565b166040519182527fe1caf88d0a9503d00b1bff2c6e1e892eedb0bb788cbedc754a87cc4f0d06f3a8602088151593a301169061509a565b879193506104267f629fb5e38dcbe97d872f614b9eb7a708b1c606addfc3432e63be92c229d93c669361534161523c9360203d602011610821576108138183612bc4565b959350935050615208565b915061536061042661ffff83168b8b612a0f565b92823b15610e245761ffff60405194633e02e62360e21b865216600485015233602485015260026044850152600084608481836001978860648401525af1928315612f195761ffff946001946153fb575b506153c26104268685168d8d612a0f565b90856040519216825260208201527f4a036c7c3e9ebba870545bb7f2691eba797e891806fb5d72b25e709b425c0a7e60403392a2615267565b61540490612bb0565b386153b1565b506019606461541d61ffff85168a612c75565b510610615184565b61543e915060203d602011611a6457611a568183612bc4565b3861517a565b8061ffff928361545c61042682600196168d8d612a0f565b16600052600f602052604060002075ffffffffffffffffffffffffffffffffffffffffffff81541690556152b5565b606460405162461bcd60e51b815260206004820152600d60248201527f6e6f7420696e20776173746573000000000000000000000000000000000000006044820152fd5b94505050509150612e8660235434612e14565b6154f5913d8091833e611b808183612bc4565b38615093565b91506020823d8211615529575b8161551560209383612bc4565b8101031261034e5750518590615069615057565b3d9150615508565b9061553f6023543414612b33565b61509656fea264697066735822122019fad45ca8550369e5d573ec8c5b33bf7f9db3d4538ace294115d2bdece6a87264736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000002
-----Decoded View---------------
Arg [0] : _minimumForPlatoon (uint8): 2
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000002
Deployed Bytecode Sourcemap
324:35482:6:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4202:39;324:35482;4202:39;;;324:35482;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;324:35482:6;;;;;;:::i;:::-;1063:62:0;;:::i;:::-;-1:-1:-1;;;;;324:35482:6;;;2169:22:0;;;324:35482:6;;;;;-1:-1:-1;;324:35482:6;;;;;;2573:40:0;324:35482:6;2573:40:0;;324:35482:6;;;;;;-1:-1:-1;;;324:35482:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2683:29:6;324:35482;;;;;;;;;;;;;;;-1:-1:-1;;324:35482:6;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;1063:62:0;;;;:::i;:::-;5920:32:6;;;324:35482;;5991:12;;324:35482;;;;;6005:19;;;;;;324:35482;6049:9;;;;;;;:::i;:::-;;:::i;:::-;324:35482;6049:14;324:35482;;6126:9;324:35482;6126:9;;;6111:11;;6126:9;;;;;;:::i;:::-;6111:11;;;;:::i;:::-;;:::i;:::-;324:35482;;;;;;;;;;;;;;;;;;;;;5991:12;;324:35482;;;;;;;-1:-1:-1;;;324:35482:6;;;;;;;;;;;;;;;;6005:19;;324:35482;;;;;;;;;-1:-1:-1;;;324:35482:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;324:35482:6;;;;1063:62:0;;:::i;:::-;324:35482:6;;26057:20;324:35482;;;;;;;;;;-1:-1:-1;;324:35482:6;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1744:1:1;2325:7;;324:35482:6;2317:63:1;324:35482:6;;;2325:19:1;;2317:63;:::i;:::-;324:35482:6;;;5640:48;5661:10;5511:59;5586:8;5640:48;:::i;:::-;5698:44;5720:9;5661:10;5706:23;5698:44;:::i;:::-;21461:46;21482:7;324:35482;21469:9;:20;21461:46;:::i;:::-;21840:15;-1:-1:-1;;;;;324:35482:6;;21522:10;21534:19;;;;;;324:35482;;;;;;-1:-1:-1;;;;;22072:3:6;324:35482;;21482:7;324:35482;22072:21;;;;;;21517:546;22072:21;;;;324:35482;;;;22072:21;324:35482;;;;;;;;;;;22072:21;;;;;21522:10;324:35482;-1:-1:-1;;;;;324:35482:6;21578:7;324:35482;;21594:11;;;;;;:::i;:::-;324:35482;;;21578:28;;;;;-1:-1:-1;;;21578:28:6;;324:35482;;;;;21578:28;;324:35482;21578:28;324:35482;;;;21578:28;;;;;;;;;;;;21570:64;21578:28;;;;;21522:10;-1:-1:-1;324:35482:6;;5661:10;21578:42;21570:64;:::i;:::-;21677:11;;324:35482;;;21648:3;324:35482;;21677:11;;:::i;:::-;21648:44;;;;;;324:35482;;;;;;;;;21648:44;;;;;324:35482;21648:44;;5661:10;324:35482;21648:44;;324:35482;;;;;;;;;;21648:44;;;;;;;;;;;;;;;;;;21522:10;21799:11;;;;;;21713;21799;;21713;21799;;;324:35482;21799:11;;324:35482;21799:11;324:35482;21799:11;;;;:::i;:::-;324:35482;;;;;:::i;:::-;;;;21728:191;;324:35482;;21728:191;;;;;324:35482;;21728:191;;324:35482;21713:11;:::i;:::-;324:35482;;;21707:5;324:35482;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;324:35482:6;;;;;;;;-1:-1:-1;324:35482:6;;;;;-1:-1:-1;;324:35482:6;-1:-1:-1;;;;;324:35482:6;;;;;;;;;;;;21933:20;324:35482;;;;;;;;;;;-1:-1:-1;324:35482:6;;;;;;21972:50;;21993:11;;324:35482;;;21993:11;:::i;:::-;324:35482;;;;21840:15;324:35482;;21972:50;324:35482;21522:10;;324:35482;;-1:-1:-1;;;324:35482:6;;;;;;21648:44;;;;;;;;;;;;;;;:::i;:::-;324:35482;;21648:44;;;;;;;;;;;324:35482;;;;21648:44;324:35482;;;;;;;;;21578:28;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;324:35482;-1:-1:-1;324:35482:6;;-1:-1:-1;;324:35482:6;;;;;;;;;;;;;;;;;;:::i;:::-;;;2317:63:1;1744:1;2325:7;324:35482:6;2325:19:1;;2317:63;:::i;:::-;1744:1;2325:7;324:35482:6;5640:48;5661:10;5511:59;5586:8;5640:48;:::i;:::-;5698:44;5720:9;5661:10;5706:23;5698:44;:::i;:::-;5661:10;324:35482;;26606:10;324:35482;;;;;;;;;;26670:46;26691:7;324:35482;26678:9;:20;26670:46;:::i;:::-;324:35482;26794:17;324:35482;;;;;;;26784:27;324:35482;;26849:12;;324:35482;;;;;;26863:10;;;;-1:-1:-1;;;;;26898:9:6;324:35482;;;;;26916:12;;324:35482;;;26916:12;;;:::i;:::-;324:35482;;26898:31;;;;;-1:-1:-1;;;26898:31:6;;324:35482;;26898:31;;324:35482;26898:31;;;;;;;;26890:68;26898:31;;;;;26849:12;-1:-1:-1;;;;;;324:35482:6;5661:10;26898:45;26890:68;:::i;:::-;324:35482;26992:12;;324:35482;;;26992:12;;;:::i;:::-;324:35482;;;;;;;2325:7:1;324:35482:6;;;;;;26980:30;324:35482;;;27122:108;2325:7:1;324:35482:6;;27062:12;;324:35482;;;;27062:12;;;:::i;:::-;324:35482;;;27050:11;324:35482;;27041:67;324:35482;;;;;;27049:26;27041:67;:::i;:::-;324:35482;27141:12;;324:35482;;;27141:12;;;:::i;:::-;324:35482;;;1744:1:1;324:35482:6;;1744:1:1;324:35482:6;;;;;;27130:29;:62;;;;;26849:12;27122:108;;:::i;:::-;324:35482;27328:12;;324:35482;;;27328:12;;;:::i;:::-;324:35482;;;;;;;:::i;:::-;;;;27369:15;-1:-1:-1;;;;;324:35482:6;;27266:182;;324:35482;;;5661:10;324:35482;27266:182;;324:35482;27266:182;;;324:35482;;27250:12;;324:35482;;;27250:12;;;:::i;:::-;324:35482;;;27244:5;324:35482;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;324:35482:6;;;;;;;;-1:-1:-1;324:35482:6;;;;;-1:-1:-1;;324:35482:6;-1:-1:-1;;;;;324:35482:6;;;;;;;;;;;;;27497:12;;324:35482;;;27497:12;;;:::i;:::-;324:35482;;;;;;27369:15;324:35482;;;;27473:57;324:35482;5661:10;27473:57;;324:35482;27556:12;;324:35482;;;27556:12;;;:::i;:::-;324:35482;;;27050:11;324:35482;;;;;;;-1:-1:-1;;324:35482:6;;;;;;;26849:12;;27130:62;324:35482;;;27174:12;;324:35482;;;27174:12;;;:::i;:::-;324:35482;;;1744:1:1;324:35482:6;;;;;;;;27163:29;27130:62;;;324:35482;;;;-1:-1:-1;;;324:35482:6;;;;;;;;;;;;;;;;;;26898:31;;;;324:35482;26898:31;324:35482;26898:31;;;;;;;:::i;:::-;;;;;324:35482;;;;;;;;;26863:10;;;;;5661;324:35482;;27626:11;324:35482;;;;;;;;;;;;;;;;27668:25;324:35482;;;;;27668:25;:::i;:::-;324:35482;;-1:-1:-1;;;;;324:35482:6;;27703:3;324:35482;;27703:41;;;;;;324:35482;;;;;;;27703:41;;;;;;324:35482;27703:41;;27266:182;324:35482;27703:41;;324:35482;;;;;;:::i;:::-;5661:10;324:35482;;;;1744:1:1;324:35482:6;;;;27703:41;;;;;;;;;;;;;26844:773;5661:10;;;;;324:35482;;26606:10;324:35482;;;;;2325:7:1;324:35482:6;;;;;;;;27793:3;324:35482;;26691:7;324:35482;27793:21;;;;;;26844:773;27793:21;;;;2325:7:1;324:35482:6;;;;27793:21;324:35482;;;;;;;;;;27793:21;;;;;27703:41;;;;:::i;:::-;324:35482;;27703:41;;;;324:35482;;;;;;;-1:-1:-1;;;324:35482:6;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;324:35482:6;;;;;;;;;;;;;;;;;;;;;;;;5752:1;324:35482;;;:::i;:::-;;2317:63:1;1744:1;2325:7;324:35482:6;2325:19:1;;2317:63;:::i;:::-;1744:1;2325:7;324:35482:6;5640:48;5661:10;5511:59;5586:8;5640:48;:::i;:::-;5698:44;5720:9;5661:10;5706:23;5698:44;:::i;:::-;5752:1;:::i;:::-;2325:7:1;324:35482:6;;;;;;;;;;;-1:-1:-1;;324:35482:6;;;;1063:62:0;;:::i;:::-;324:35482:6;;6369:24;324:35482;;;;;;;;;;-1:-1:-1;;324:35482:6;;;;;;:::i;:::-;;;:::i;:::-;;;;-1:-1:-1;;;;;324:35482:6;;;;;;;;;;;;;;;;;;;1063:62:0;;:::i;:::-;324:35482:6;-1:-1:-1;;324:35482:6;;;5251:28;324:35482;;;5251:28;324:35482;;;5289:24;324:35482;;;5289:24;324:35482;;;5323:31;324:35482;;;5323:31;324:35482;;5364:16;324:35482;;;5364:16;324:35482;5390:11;324:35482;;;5390:11;324:35482;;;;;;;;;;;;;;-1:-1:-1;;324:35482:6;;;;;;;;:::i;:::-;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;4537:31;324:35482;;;;;;;;;;;;;;-1:-1:-1;;324:35482:6;;;;;;;;;;;:::i;:::-;;;;3341:42;324:35482;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;324:35482:6;;;;;;;;;;;;;11571:1;324:35482;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;11562:10;11559:135;11571:1;;;11597:39;324:35482;;11608:27;11597:7;324:35482;;11608:9;324:35482;11608:27;:::i;:::-;11597:39;;:::i;:::-;324:35482;;;;;;11559:135;324:35482;;11676:7;324:35482;11559:135;;324:35482;;;;;;;;;;;;;;1240:30;324:35482;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2325:7:1;;324:35482:6;2317:63:1;1744:1;324:35482:6;;2325:19:1;;2317:63;:::i;:::-;1744:1;324:35482:6;;5640:48;5661:10;5511:59;5586:8;5640:48;:::i;:::-;5698:44;5720:9;5661:10;5706:23;5698:44;:::i;:::-;5661:10;324:35482;;27923:10;324:35482;;;;;;;;;;;27978:46;27999:7;324:35482;27986:9;:20;27978:46;:::i;:::-;-1:-1:-1;;;;;324:35482:6;;28042:9;324:35482;;;;;-1:-1:-1;;;28042:22:6;;324:35482;;;;;;;;28042:22;;324:35482;28042:22;;324:35482;28042:22;;;;;;;;28034:58;28042:22;;;;;324:35482;-1:-1:-1;324:35482:6;;5661:10;28042:36;28034:58;:::i;:::-;324:35482;;;;;;28102:44;324:35482;;;;;;;28110:21;28102:44;:::i;:::-;324:35482;;;28165:11;324:35482;;28156:58;324:35482;;;;;;28164:17;28156:58;:::i;:::-;324:35482;;;1744:1:1;324:35482:6;;1744:1:1;324:35482:6;;;;;;28232:20;:44;;;;324:35482;28224:90;;;:::i;:::-;324:35482;-1:-1:-1;;;;;28431:15:6;324:35482;;;;;;;:::i;:::-;;;;28337:173;;;;324:35482;5661:10;324:35482;28337:173;;324:35482;28337:173;;;324:35482;;;;28324:5;324:35482;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;324:35482:6;;;;;;;;-1:-1:-1;324:35482:6;;;;;-1:-1:-1;;324:35482:6;-1:-1:-1;;;;;324:35482:6;;;;;;;;;;;;;;;;;;28431:15;324:35482;;;;28531:48;324:35482;5661:10;28531:48;;324:35482;;;28165:11;324:35482;;;;;;;-1:-1:-1;;324:35482:6;;;;;;;-1:-1:-1;;324:35482:6;;;;;;;;5661:10;324:35482;;28649:11;324:35482;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28684:3;324:35482;;28684:34;;;;;;324:35482;;;;;;;28684:34;;;;;324:35482;28684:34;;324:35482;28684:34;;324:35482;5661:10;324:35482;;;;1744:1:1;324:35482:6;;;;28684:34;;;;;;;;;;;324:35482;;;;;28728:3;324:35482;;27999:7;324:35482;28728:21;;;;;;;;;;324:35482;;;;28684:34;;;;:::i;:::-;324:35482;;28684:34;;;;324:35482;;;-1:-1:-1;;;324:35482:6;;28324:5;324:35482;;;;;;-1:-1:-1;;;324:35482:6;;28324:5;324:35482;;;28232:44;-1:-1:-1;324:35482:6;;;;;;;28256:20;28232:44;;28042:22;;;;;;;;;;;;;;:::i;:::-;;;;;324:35482;;;;;;;;;;;;;;;-1:-1:-1;;;324:35482:6;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;324:35482:6;;;;;;;:::i;:::-;1063:62:0;;:::i;:::-;324:35482:6;;;;;;;;;;;;-1:-1:-1;;324:35482:6;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;;;;2630:15:6;324:35482;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2604:19:6;324:35482;;;;;;;;;;;;;;;;;;;;;;3941:44;324:35482;;;;;;;;;;;;;;-1:-1:-1;;324:35482:6;;;;1063:62:0;;:::i;:::-;324:35482:6;;26255:15;324:35482;;;;;;;;;;-1:-1:-1;;324:35482:6;;;;-1:-1:-1;;;;;324:35482:6;;:::i;:::-;1063:62:0;;:::i;:::-;324:35482:6;-1:-1:-1;;26352:10:6;324:35482;;;26352:10;324:35482;;;;;;;;;;-1:-1:-1;;324:35482:6;;;;;;;;:::i;:::-;;:::i;:::-;;5752:1;324:35482;;;:::i;:::-;5661:10;5640:48;5661:10;5511:59;5586:8;5640:48;:::i;:::-;5698:44;5720:9;5661:10;5706:23;5698:44;:::i;:::-;5752:1;:::i;:::-;324:35482;;;;;;;;;;;;;;;-1:-1:-1;;;;;324:35482:6;;;;;;;;;;;;;;;;;-1:-1:-1;;324:35482:6;;;;1063:62:0;;:::i;:::-;324:35482:6;;26158:17;324:35482;;;;;;;;;;-1:-1:-1;;324:35482:6;;;;;;;;;;;;;1063:62:0;;:::i;:::-;324:35482:6;6259:24;324:35482;;;;;;;;;;6259:24;324:35482;;;;;;;;;;;;;;;;4202:39;324:35482;;;;;;;;;;;;;;;-1:-1:-1;;324:35482:6;;;;;;;;-1:-1:-1;;;;;324:35482:6;;:::i;:::-;;;;3390:42;324:35482;;;;;;;;;;;;;;;;;;;;;;;;;;;4396:38;324:35482;;;;;;;;-1:-1:-1;324:35482:6;;-1:-1:-1;;324:35482:6;;;;;;;;;;;;;;;;;;;:::i;:::-;5661:10;;5640:48;5661:10;5511:59;5586:8;5640:48;:::i;:::-;5698:44;5720:9;5661:10;5706:23;5698:44;:::i;:::-;32538:71;32559:32;:7;324:35482;32570:20;324:35482;32570:9;324:35482;32570:20;:::i;32559:32::-;32546:9;:45;32538:71;:::i;:::-;-1:-1:-1;;;;;32627:10:6;324:35482;;;;-1:-1:-1;;;32627:30:6;;324:35482;32627:30;324:35482;32627:30;;;;;;;;;;;;;;324:35482;32627:42;;;;32619:70;32627:42;;;32619:70;:::i;:::-;324:35482;;;32723:35;;;;-1:-1:-1;;;32723:35:6;;;324:35482;32723:35;;324:35482;32723:35;;;;;;;;;;;324:35482;32774:12;;;324:35482;;;;32788:12;;;;-1:-1:-1;;;;;32825:9:6;324:35482;;;;;32843:7;;324:35482;;;32843:7;;;:::i;:::-;324:35482;;32825:26;;;;;-1:-1:-1;;;32825:26:6;;324:35482;;32825:26;;324:35482;32825:26;;;;;;32817:62;32825:26;;;;;-1:-1:-1;;;;;;324:35482:6;5661:10;32825:40;32817:62;:::i;:::-;324:35482;32913:7;;324:35482;;;32913:7;;;:::i;:::-;324:35482;;;;;;;;;;;;;;;32901:25;324:35482;;;32982:7;;324:35482;;;32982:7;;;:::i;:::-;324:35482;;;32967:14;324:35482;;;;;;;;;;-1:-1:-1;;;;;33032:3:6;324:35482;;;;-1:-1:-1;;;33032:16:6;;324:35482;33032:16;324:35482;33032:16;;;;;;;;324:35482;33032:16;;;;;32774:12;324:35482;;33032:20;;:44;;;32774:12;33028:753;;;324:35482;;-1:-1:-1;;;;;33032:3:6;324:35482;;;;;33148:7;;324:35482;;;33148:7;;;:::i;:::-;324:35482;33157:7;324:35482;;;33157:7;;:::i;:::-;324:35482;;;;33122:65;;;;;-1:-1:-1;;;33122:65:6;;324:35482;;33122:65;;324:35482;;;;;33166:1;324:35482;;;;5661:10;324:35482;;;;;;;;;33122:65;;;;;;;324:35482;33122:65;324:35482;33122:65;;;;;33028:753;324:35482;33210:62;324:35482;33225:7;;324:35482;;;33225:7;;;:::i;:::-;324:35482;;;5661:10;324:35482;;-1:-1:-1;;;;;324:35482:6;;;;;;;;32901:11;324:35482;;;;33256:15;324:35482;;;;;;;;33210:62;33028:753;324:35482;;32774:12;;33122:65;;;;324:35482;33122:65;324:35482;33122:65;;;;;;;:::i;:::-;;;;33028:753;33323:7;;324:35482;;;33323:7;;;:::i;:::-;33311:42;;;;;324:35482;;;;;;;33311:42;;;;;-1:-1:-1;;;33311:42:6;;324:35482;;33311:42;;324:35482;5661:10;324:35482;;;;33344:1;324:35482;;;;;;;;;33311:42;;;;;;;;33028:753;324:35482;;;;33415:7;;324:35482;;;;33415:7;;;:::i;:::-;324:35482;33389:7;;324:35482;;;33389:7;;;:::i;:::-;324:35482;;;33371:17;324:35482;;;;;;;;;;;;;;;;;;;33458:7;;324:35482;;;33458:7;;;:::i;:::-;324:35482;;;;;;;;;;;;;5661:10;32967:14;324:35482;;;;;;;33552:15;324:35482;;33528:7;;324:35482;;;33528:7;;;:::i;:::-;324:35482;;;;;;;;;;;;;;;;;;;;;;;;33604:7;;324:35482;;;33604:7;;;:::i;:::-;324:35482;;;;;;;;33586:40;;324:35482;;-1:-1:-1;;324:35482:6;33636:15;-1:-1:-1;;;;;324:35482:6;;;;;;33685:7;;324:35482;;;33685:7;;;:::i;:::-;324:35482;;;32967:14;324:35482;;;;;;;;;;;;;;33751:7;;324:35482;;;33751:7;;;:::i;:::-;324:35482;;;;;;;;;;;;33723:43;324:35482;5661:10;33723:43;;33028:753;;33311:42;;;;:::i;:::-;324:35482;;33311:42;;;;33032:44;324:35482;33074:2;33068:3;33057:7;324:35482;;;33057:7;;:::i;:::-;324:35482;;33056:20;33032:44;;:16;;;;324:35482;33032:16;324:35482;33032:16;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;324:35482;;;;-1:-1:-1;;;324:35482:6;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;324:35482:6;;;;;;;;;;;;;;;;;;32788:12;;324:35482;33851:19;32559:7;324:35482;32546:9;33851:19;:::i;:::-;33884:13;;;;;33880:47;;32769:1053;324:35482;;;;;-1:-1:-1;;;;;33936:3:6;324:35482;;32559:7;324:35482;33936:21;;;;;;32769:1053;33936:21;;;;324:35482;;33936:21;;;;;33880:47;324:35482;;;;;;-1:-1:-1;;;;;33901:3:6;324:35482;;33901:23;;;;;33880:47;33901:23;;;;33880:47;;;;;33901:23;;;;;32723:35;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;324:35482;;;;;;;;;32627:30;;;;;;324:35482;32627:30;;324:35482;32627:30;;;;;;324:35482;32627:30;;;:::i;:::-;;;324:35482;;;;;;;;;;;32627:30;;;;;-1:-1:-1;32627:30:6;;324:35482;;;;;;;-1:-1:-1;;324:35482:6;;;;1063:62:0;;:::i;:::-;324:35482:6;;25714:24;324:35482;;;;;;;;;;;;;;;;1063:62:0;;:::i;:::-;324:35482:6;-1:-1:-1;;;;;324:35482:6;;-1:-1:-1;;324:35482:6;;;;;2573:40:0;;;;324:35482:6;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2576:21:6;324:35482;;;;;;;;;;;;;;;-1:-1:-1;;324:35482:6;;;;;;;;;;;:::i;:::-;;;;900:42;324:35482;;;;;;;;;;;;;;;;;;-1:-1:-1;;324:35482:6;;;;;;;:::i;:::-;1063:62:0;;:::i;:::-;324:35482:6;25942:26;324:35482;;;;;;;;;;-1:-1:-1;;324:35482:6;;;;;;-1:-1:-1;;;;;324:35482:6;;;;;;;1063:62:0;;:::i;:::-;-1:-1:-1;;;;;324:35482:6;26453:25;324:35482;;;26453:25;324:35482;;;;;;;;;;;;;;;;;4456:36;324:35482;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4616:39:6;324:35482;;;;;;;;;;;;;;;-1:-1:-1;;324:35482:6;;;;1063:62:0;;:::i;:::-;324:35482:6;;25603:24;324:35482;;;;;;;;;;;;;;;;;3852:45;324:35482;;;;;;;;;;;;;;;;;;;;;;4662:30;324:35482;;;;;;;;;;;;;;;;;;;;;;;;4102:41;324:35482;;;;;;;;;;;;;;-1:-1:-1;;324:35482:6;;;;;;;;-1:-1:-1;;;;;324:35482:6;;:::i;:::-;;;;4699:45;324:35482;;;;;;;;;;;;;5752:1;324:35482;;;:::i;:::-;5661:10;5640:48;5661:10;5511:59;5586:8;5640:48;:::i;:::-;5698:44;5720:9;5661:10;5706:23;5698:44;:::i;:::-;5752:1;:::i;324:35482::-;;;;;;;-1:-1:-1;;324:35482:6;;;;;;;;;;;:::i;:::-;;;;2859:45;324:35482;;;;;;;;;;;;;;-1:-1:-1;324:35482:6;;-1:-1:-1;;324:35482:6;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;5752:1;324:35482;2317:63:1;1744:1;2325:7;324:35482:6;2325:19:1;;2317:63;:::i;:::-;1744:1;2325:7;324:35482:6;5640:48;5661:10;5511:59;5586:8;5640:48;:::i;:::-;5698:44;5720:9;5661:10;5706:23;5698:44;:::i;:::-;5752:1;:::i;324:35482::-;;;;;;;;;;;;;;:::i;:::-;2325:7:1;;324:35482:6;2317:63:1;1744:1;324:35482:6;;2325:19:1;;2317:63;:::i;:::-;1744:1;324:35482:6;;5640:48;5661:10;5511:59;5586:8;5640:48;:::i;:::-;5698:44;5720:9;5661:10;5706:23;5698:44;:::i;:::-;324:35482;;;;;;;;;;;19106:47;324:35482;;;;;;;19114:25;19106:47;:::i;:::-;19159:58;19180:19;:7;324:35482;19190:9;324:35482;19180:19;;:::i;19159:58::-;-1:-1:-1;;;;;324:35482:6;;19224:3;324:35482;;19249:12;324:35482;19224:38;;;;;324:35482;;;19224:38;;5661:10;324:35482;19224:38;;324:35482;;;;;;;;;;;;;;;;;;;19224:38;;;;;;;;;;;324:35482;;;19283:41;19319:5;19283:33;19249:12;324:35482;19298:18;324:35482;19283:33;;:::i;:::-;324:35482;19283:41;:::i;:::-;324:35482;19356:10;324:35482;;;;-1:-1:-1;;;19356:30:6;;;;324:35482;19356:30;;;;;;;;;;;;;;;;;324:35482;19400:19;;;;19392:47;19400:19;;;19392:47;:::i;:::-;324:35482;;;19469:28;;;;-1:-1:-1;;;19469:28:6;;;324:35482;19469:28;;324:35482;19469:28;;;;;;;;;;;324:35482;19503:13;19667:2;19661:3;19641:7;;;;:::i;:::-;324:35482;19641:16;324:35482;19640:29;19667:2;;;19679:11;;324:35482;19636:159;;324:35482;;;1744:1:1;324:35482:6;;;;;;;;;;;;;;;;;;;19856:19;19180:7;324:35482;19167:9;19856:19;:::i;:::-;19884:13;;;;19881:46;;19636:159;324:35482;;;;;;19932:3;324:35482;;19180:7;324:35482;19932:21;;;;;;19636:159;19932:21;;;;324:35482;;;;;;;;;;;19965:43;324:35482;5661:10;19965:43;;324:35482;;;;;;;;19932:21;;;;;19881:46;324:35482;;;;;;19901:3;324:35482;;19901:23;;;;;19881:46;19901:23;;;;19881:46;;;;;19901:23;;;;;19636:159;19733:2;19707:7;;19661:3;19707:7;;:::i;:::-;324:35482;19707:16;324:35482;19706:29;19733:2;;;1744:1:1;19703:92:6;19636:159;;19703:92;19777:11;19703:92;19636:159;;19469:28;;;;;;;;;;;;;:::i;:::-;;;;19356:30;;;;;;;;;;;;;;;;;;:::i;:::-;;;324:35482;;;;;;;;;;19356:30;;;;;;;19224:38;;;;:::i;:::-;324:35482;;19224:38;;;;324:35482;;;;;;;;;;;;;;4307:40;324:35482;;;;;;;;;;;;;;;;;;;;;4029:45;324:35482;;;;;;;;;;;;:::i;:::-;;2317:63:1;1744:1;2325:7;324:35482:6;;;;2325:19:1;;2317:63;:::i;:::-;1744:1;2325:7;324:35482:6;5640:48;5661:10;5511:59;5586:8;5640:48;:::i;:::-;5698:44;5720:9;5661:10;5706:23;5698:44;:::i;:::-;6709:46;6730:7;324:35482;6717:9;:20;6709:46;:::i;:::-;324:35482;;;:::i;:::-;;;;;;;;:::i;:::-;;;;-1:-1:-1;;324:35482:6;;;:::i;:::-;;;;;;;6836:10;6848:19;;;;;;324:35482;;-1:-1:-1;;;;;324:35482:6;;7569:3;324:35482;;7569:60;;;;;;324:35482;;;;;;;;7569:60;;;324:35482;7569:60;;5661:10;324:35482;7569:60;;324:35482;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1744:1:1;324:35482:6;;;;7569:60;;;;;;;;;;324:35482;;;;;;;7639:3;324:35482;;6730:7;324:35482;7639:21;;;;;;;;;;2325:7:1;324:35482:6;;;;7569:60;;;;:::i;:::-;;;;324:35482;;;;;;;;;-1:-1:-1;324:35482:6;;-1:-1:-1;324:35482:6;;;;;;;;;2325:7:1;324:35482:6;;;6836:10;-1:-1:-1;;;;;6892:9:6;324:35482;;;;;6910:11;;;;;;:::i;:::-;324:35482;;6892:30;;;;;-1:-1:-1;;;6892:30:6;;324:35482;;6892:30;;324:35482;6892:30;;;;;;;;6884:66;6892:30;;;;;-1:-1:-1;;;;;;324:35482:6;5661:10;6892:44;6884:66;:::i;:::-;324:35482;6981:11;;;;;;:::i;:::-;324:35482;;;6969:11;324:35482;;;;2325:7:1;324:35482:6;;;;;;6969:29;6965:555;2325:7:1;;;7018:17:6;;324:35482;7018:17;;;;:::i;:::-;324:35482;7085:11;;;;;;:::i;:::-;-1:-1:-1;;;;;9113:15:6;324:35482;;;;;;;;:::i;:::-;;;;;;9030:154;324:35482;9030:154;;324:35482;-1:-1:-1;;;;;324:35482:6;;9030:154;;324:35482;9030:154;;324:35482;9030:154;;;324:35482;;;;;9013:5;324:35482;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;324:35482:6;;;;;;;;-1:-1:-1;324:35482:6;;;;;-1:-1:-1;;324:35482:6;-1:-1:-1;;;;;324:35482:6;;;;;;;;;;;;;;;2325:7:1;324:35482:6;;;;;;;;;2325:7:1;324:35482:6;;;;;9229:49;324:35482;;;;;;9113:15;324:35482;;;;9229:49;6965:555;324:35482;6836:10;;324:35482;-1:-1:-1;;;324:35482:6;;;;;;;6965:555;324:35482;7134:11;;;;;;:::i;:::-;324:35482;;;;;;1744:1:1;324:35482:6;;;;;;7122:29;7118:402;1744:1:1;;;7187::6;;;7171:17;;;;;:::i;:::-;324:35482;7238:11;;;;;;:::i;:::-;324:35482;-1:-1:-1;;;;;324:35482:6;;;8035:13;324:35482;;;;;;;;;;:::i;:::-;;;;;;;7952:152;;324:35482;-1:-1:-1;;;;;324:35482:6;;7952:152;;324:35482;7952:152;;324:35482;8077:15;324:35482;7952:152;;;324:35482;;;;7935:5;324:35482;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;324:35482:6;;;;;;;;-1:-1:-1;324:35482:6;;;;;-1:-1:-1;;324:35482:6;-1:-1:-1;;;;;324:35482:6;;;;;;;;;;;;;;;2325:7:1;324:35482:6;;;;;;;;2325:7:1;324:35482:6;;;;;8148:49;324:35482;;;1744:1:1;324:35482:6;;8077:15;324:35482;;;;8148:49;6965:555;;324:35482;;;-1:-1:-1;;;324:35482:6;;;;;;7118:402;324:35482;7287:11;;;;;;:::i;:::-;324:35482;;;;;;;;;;;;;7275:29;7271:249;6969:11;;;7340:1;;7324:17;;;;;:::i;:::-;324:35482;7393:11;;;;;;:::i;:::-;324:35482;-1:-1:-1;;;;;324:35482:6;;;8579:15;324:35482;;;;;;;;;;:::i;:::-;;;;;;;8496:154;;324:35482;-1:-1:-1;;;;;324:35482:6;;8496:154;;324:35482;8496:154;;324:35482;8623:15;324:35482;8496:154;;;324:35482;;;;8477:7;324:35482;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;324:35482:6;;;;;;;;-1:-1:-1;324:35482:6;;;;;-1:-1:-1;;324:35482:6;-1:-1:-1;;;;;324:35482:6;;;;;;;;;;;;;;;2325:7:1;324:35482:6;;;;;;;2325:7:1;324:35482:6;;;;8696:49;324:35482;;;;;;;;;8623:15;324:35482;;;;8696:49;6965:555;;324:35482;;;-1:-1:-1;;;324:35482:6;;;;;;7271:249;7442:11;324:35482;7442:11;;;;;;:::i;:::-;324:35482;;;;;;;;;;7430:29;7426:94;;2325:7:1;7271:249:6;6965:555;;7426:94;324:35482;;-1:-1:-1;;;7479:26:6;;324:35482;;7479:26;;324:35482;;;;;;;;;;;;;7479:26;324:35482;;;;;;;;-1:-1:-1;;324:35482:6;;;;;;;;;;;;:::i;:::-;;;;2769:53;324:35482;;;-1:-1:-1;;;;;2769:53:6;324:35482;;2769:53;;324:35482;;;;;;;-1:-1:-1;;;;;324:35482:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;324:35482:6;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;324:35482:6;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;324:35482:6;;;;;;;-1:-1:-1;;;;;324:35482:6;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;-1:-1:-1;;324:35482:6;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::o;1359:130:0:-;-1:-1:-1;;;;;1273:6:0;324:35482:6;;719:10:4;1422:23:0;324:35482:6;;1359:130:0:o;324:35482:6:-;;;;-1:-1:-1;;;324:35482:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;-1:-1:-1;;;324:35482:6;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;1744:1:1:-;;;;:::o;:::-;;324:35482:6;;-1:-1:-1;;;1744:1:1;;;;;;;;;;;324:35482:6;1744:1:1;324:35482:6;;;1744:1:1;;324:35482:6;;;;:::o;:::-;;;;-1:-1:-1;;;324:35482:6;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;-1:-1:-1;;;324:35482:6;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;-1:-1:-1;;;324:35482:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;-1:-1:-1;;;324:35482:6;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;-1:-1:-1;;;;;324:35482:6;;;;;;;:::o;:::-;;;;:::o;:::-;;;;-1:-1:-1;;;324:35482:6;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;-1:-1:-1;324:35482:6;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;-1:-1:-1;;;324:35482:6;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;:::o;:::-;;;;-1:-1:-1;;;324:35482:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::o;:::-;;;;-1:-1:-1;;;324:35482:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;9656:1788::-;;;;9812:10;9799:9;:23;324:35482;;;;-1:-1:-1;324:35482:6;;;9883:1;9874:10;9883:1;;9900:26;;324:35482;9940:71;9961:32;:7;324:35482;9972:20;324:35482;9972:9;324:35482;9972:20;:::i;9940:71::-;324:35482;;9883:1;324:35482;;;9874:10;10148:219;;9871:228;10376:16;;;;;;-1:-1:-1;10407:10:6;;10402:795;10419:19;;;;;;324:35482;;;;;;;11226:19;11238:7;324:35482;11226:9;:19;:::i;:::-;11258:13;;;;11255:46;;10402:795;324:35482;;-1:-1:-1;;;;;;324:35482:6;;;;11310:3;324:35482;;11238:7;324:35482;11310:21;;;;;;10402:795;11310:21;;;;11346:9;;11342:26;;11378:24;324:35482;11378:24;324:35482;11378:24;:::i;:::-;;324:35482;11412:3;324:35482;;11412:25;;;;;324:35482;;-1:-1:-1;;;11412:25:6;;9812:10;11412:25;;;324:35482;;;;;;;;-1:-1:-1;;324:35482:6;;;-1:-1:-1;324:35482:6;;;;11412:25;;;;;;;;;;;9656:1788;:::o;11412:25::-;;;;:::i;:::-;9656:1788::o;11412:25::-;324:35482;;;-1:-1:-1;324:35482:6;;;;;11342:26;11359:7;;:::o;11310:21::-;;;;;11255:46;-1:-1:-1;324:35482:6;;;;;-1:-1:-1;;;;;11275:3:6;324:35482;;11275:23;;;;;11255:46;11275:23;;;;11255:46;;;;11275:23;;;;;10407:10;324:35482;;;;;;;;10476:11;;;;;;;;:::i;:::-;324:35482;-1:-1:-1;324:35482:6;10464:11;324:35482;;;;-1:-1:-1;324:35482:6;;;;;10519:11;;;;;;;:::i;:::-;324:35482;-1:-1:-1;324:35482:6;10507:11;324:35482;;;;9883:1;324:35482;;-1:-1:-1;324:35482:6;;;10507:29;10503:654;9883:1;;;10556:42;9883:1;324:35482;;;9874:10;10556:42;:::i;:::-;10644:11;;;;;;:::i;:::-;10666:7;;;;;:::i;:::-;324:35482;10624:50;-1:-1:-1;324:35482:6;;;;;12274:5;324:35482;;12266:56;9812:10;324:35482;;;;;;12274:34;12266:56;:::i;:::-;12354:12;324:35482;-1:-1:-1;;;;;324:35482:6;;;;;12335:15;:31;-1:-1:-1;12335:31:6;;324:35482;;;;;;-1:-1:-1;324:35482:6;12274:5;324:35482;;12767:17;12389:68;:59;12390:38;324:35482;;-1:-1:-1;324:35482:6;;;;;12335:15;12390:38;:::i;:::-;12432:16;324:35482;12389:59;;:::i;:::-;12451:6;324:35482;12389:68;;:::i;:::-;12709:5;12681:25;324:35482;;12681:25;;:::i;:::-;324:35482;12739:10;;;;:::i;:::-;12767:17;:::i;:::-;324:35482;;12824:2;324:35482;;;;;-1:-1:-1;324:35482:6;12857:10;324:35482;;;;-1:-1:-1;324:35482:6;;;-1:-1:-1;12886:19:6;;12938:4043;;;;;;-1:-1:-1;;13113:17:6;;;13178:2;;;13155:13;;13172:3;13155:13;;;324:35482;13154:26;13150:461;13178:2;;;-1:-1:-1;;13212:3:6;324:35482;;;-1:-1:-1;;;13212:49:6;;324:35482;;;13247:1;13212:49;;;324:35482;;;;;;;;;;;12857:10;324:35482;;;;;;;;;;;9812:10;324:35482;;;;;;-1:-1:-1;324:35482:6;;-1:-1:-1;324:35482:6;;;;-1:-1:-1;;;;;;;324:35482:6;13212:49;;;;;;;-1:-1:-1;13212:49:6;;;13150:461;13204:57;13283:13;9883:1;13150:461;;324:35482;;;-1:-1:-1;324:35482:6;12274:5;324:35482;;-1:-1:-1;9883:1:6;324:35482;;;;;;;;15240:20;324:35482;;;;;;;;;;;;;;;15240:20;324:35482;15274:311;;;;324:35482;;;-1:-1:-1;324:35482:6;;;12857:10;324:35482;;;;;;;;;;;-1:-1:-1;;324:35482:6;;;;;9812:10;324:35482;;-1:-1:-1;;;;;324:35482:6;;;;;;;;-1:-1:-1;324:35482:6;;;;;;12335:15;324:35482;;;;-1:-1:-1;;10616:58:6;;;324:35482;;;;;16995:36;;324:35482;15350:62;;324:35482;;15350:62;15274:311;324:35482;;15638:12;324:35482;;12335:15;324:35482;;;;;;;9812:10;15603:65;324:35482;9812:10;15603:65;;12938:4043;324:35482;;;;;;;;;;16995:36;;10616:58;:::i;:::-;10503:654;;324:35482;;10407:10;;;;;;;15274:311;324:35482;;;;;-1:-1:-1;;;;;15519:3:6;324:35482;;15519:51;;;;;;-1:-1:-1;324:35482:6;;;;;15519:51;;;;-1:-1:-1;;;15519:51:6;;9812:10;15240:20;15519:51;;324:35482;;;;;;;;15240:20;324:35482;;;;12857:10;324:35482;;;;15519:51;;;;;;;16995:36;324:35482;15519:51;;9883:1;15519:51;10616:58;15519:51;;;15274:311;;;;15519:51;;;;:::i;:::-;;;;13212:49;;;;324:35482;13212:49;324:35482;13212:49;;;;;;;:::i;:::-;;;;13150:461;13434:19;;;;13172:3;13434:19;;;;;324:35482;13433:32;13429:164;13150:461;13429:164;13513:2;;324:35482;;;;;;;;;;;;;;;13172:3;13506:15;324:35482;;13506:15;:::i;:::-;13562:2;324:35482;;;;;;;;;;;;13172:3;324:35482;;;13429:164;13150:461;;13109:2082;9883:1;13635:17;;9883:1;;-1:-1:-1;;13700:2:6;13694:3;13677:13;;;324:35482;13676:26;13700:2;;;-1:-1:-1;;13734:3:6;324:35482;;;-1:-1:-1;;;13734:49:6;;324:35482;;;13769:1;13734:49;;;324:35482;;;;;;;;;;;12857:10;324:35482;;;;;;;;;;;9812:10;324:35482;;;;;;-1:-1:-1;324:35482:6;;-1:-1:-1;;;;;324:35482:6;;-1:-1:-1;324:35482:6;;;;13734:49;;;;;;;;;;-1:-1:-1;13734:49:6;;;13672:461;13726:57;13805:13;9883:1;13672:461;;13109:2082;;13734:49;;;;324:35482;13734:49;324:35482;13734:49;;;;;;;:::i;:::-;;;;13672:461;13956:19;13985:2;13956:19;;;;;13694:3;13956:19;;324:35482;13955:32;13951:164;13672:461;13951:164;14035:2;;324:35482;;;;;;;;;;;;;;;13694:3;14028:15;324:35482;;14028:15;:::i;:::-;14084:2;324:35482;;;;;;;;;;;;13694:3;324:35482;;;13951:164;13109:2082;;13631:1560;12857:10;14157:17;;12857:10;;14222:2;;;14199:13;;14216:3;14199:13;;;324:35482;14198:26;14194:461;14222:2;;;-1:-1:-1;;14256:3:6;324:35482;;;-1:-1:-1;;;14256:49:6;;324:35482;;;14291:1;14256:49;;;324:35482;;;;;;;;;;;12857:10;324:35482;;;;;;;;;;;9812:10;324:35482;;;;;;-1:-1:-1;324:35482:6;;-1:-1:-1;;;;;;324:35482:6;;-1:-1:-1;324:35482:6;;;;14256:49;324:35482;14194:461;14478:19;;;;14216:3;14478:19;;;;;324:35482;14477:32;14473:164;14194:461;14473:164;14557:2;;324:35482;;;;;;;;;;;;;;;14216:3;14550:15;324:35482;;14550:15;:::i;:::-;14606:2;324:35482;;;;;;;;;;;;14216:3;324:35482;;;14473:164;13109:2082;;14153:1038;14679:17;;;;;;14675:516;;14153:1038;;;13109:2082;;14675:516;14744:2;14738:3;14721:13;;;;;;;324:35482;14720:26;14716:461;14744:2;;;-1:-1:-1;;14778:3:6;324:35482;;;-1:-1:-1;;;14778:49:6;;324:35482;;;14813:1;14778:49;;;324:35482;;;;;;;;;;;12857:10;324:35482;;;;;;;;;;;9812:10;324:35482;;;;;;-1:-1:-1;324:35482:6;;;;;;-1:-1:-1;;;;;;;324:35482:6;14778:49;;;;;;;-1:-1:-1;14778:49:6;;;14716:461;14770:57;14849:13;9883:1;14716:461;;14675:516;;;;14778:49;;;;324:35482;14778:49;324:35482;14778:49;;;;;;;:::i;:::-;;;;14716:461;15000:19;15029:2;15000:19;;;;;14738:3;15000:19;;324:35482;14999:32;14995:164;14716:461;14995:164;15079:2;;324:35482;;;;;;;;;;;;;;;14738:3;15072:15;324:35482;;15072:15;:::i;:::-;15128:2;324:35482;;;;;;;;;;;;14738:3;324:35482;;;14995:164;14716:461;;12938:4043;15714:17;;;;;;;;;;;;;;15710:1174;15714:17;;;15861:3;;15867:2;15861:3;;15838:19;;;;324:35482;15837:32;15833:152;;15710:1174;;;16995:36;324:35482;9883:1;15710:1174;;;16897:46;10616:58;15710:1174;;;324:35482;;;-1:-1:-1;324:35482:6;12274:5;324:35482;;12335:15;324:35482;;-1:-1:-1;324:35482:6;;;;;;;;;;;;;;;;;16897:46;12938:4043;;15833:152;15913:2;;;;;;324:35482;;;;;;;;;;;;;;;;15906:15;324:35482;;15906:15;:::i;:::-;15958:2;324:35482;;;;;;;;;;;;;;;;15833:152;;;;324:35482;;;16995:36;15833:152;;15710:1174;9883:1;16009:17;;9883:1;;16156:3;;16162:2;16156:3;;16133:19;;;;324:35482;16132:32;16128:152;;16005:879;;;16995:36;324:35482;9883:1;16005:879;;;16897:46;10616:58;16005:879;;15710:1174;;16128:152;16208:2;;;;;;324:35482;;;;;;;;;;;;;;;;16201:15;324:35482;;16201:15;:::i;:::-;16253:2;324:35482;;;;;;;;;;;;;;;;16128:152;;;;324:35482;;;16995:36;16128:152;;16005:879;12857:10;16304:17;;12857:10;;16451:3;;16457:2;16451:3;;16428:19;;;;324:35482;16427:32;16423:152;;16300:584;;16995:36;324:35482;9883:1;16300:584;;;16897:46;10616:58;16300:584;;15710:1174;;16423:152;16503:2;;;;;;324:35482;;;;;;;;;;;;;;;;16496:15;324:35482;;16496:15;:::i;:::-;16548:2;324:35482;;;;;;;;;;;;;;;;16423:152;;;;324:35482;;;16995:36;16423:152;;16300:584;16599:17;;-1:-1:-1;16599:17:6;16595:289;;16300:584;;16995:36;324:35482;9883:1;16300:584;;;16897:46;10616:58;16300:584;;15710:1174;;16595:289;16752:2;16746:3;;;16723:19;;;;324:35482;16722:32;16718:152;16595:289;16718:152;16798:2;;;;;;324:35482;;;;;;;;;;;;;;;;16791:15;324:35482;;16791:15;:::i;12332:319::-;324:35482;;;;;12274:5;324:35482;;;;;;12767:17;;324:35482;;;;;;12478:35;-1:-1:-1;12478:35:6;;;324:35482;12536:65;324:35482;12536:56;324:35482;12537:35;324:35482;;-1:-1:-1;324:35482:6;;;;;12537:35;;:::i;:::-;324:35482;12576:16;324:35482;;;12536:56;:::i;:65::-;12332:319;;12474:177;12632:8;;;;12332:319;;10503:654;10711:11;;;;;;;;;:::i;:::-;324:35482;-1:-1:-1;324:35482:6;;;;10727:1;324:35482;;;;-1:-1:-1;324:35482:6;;;10699:29;10695:462;10727:1;;;324:35482;10748:42;324:35482;;;;10756:10;10748:42;:::i;:::-;10836:11;;;;;;:::i;:::-;324:35482;;;-1:-1:-1;324:35482:6;17390:5;324:35482;;;;17382:56;9812:10;324:35482;-1:-1:-1;324:35482:6;;;;17390:34;17382:56;:::i;:::-;17455:13;324:35482;;;-1:-1:-1;324:35482:6;;;;-1:-1:-1;;;;;17455:36:6;324:35482;;-1:-1:-1;324:35482:6;;;;;17455:36;;:::i;:::-;17501:406;;;;;324:35482;;;-1:-1:-1;324:35482:6;;;-1:-1:-1;9883:1:6;324:35482;;;;;;;;17563:19;324:35482;;;;;;;;;;;;;-1:-1:-1;;;;;17658:3:6;324:35482;;17658:51;;;;;;324:35482;-1:-1:-1;324:35482:6;;;;17658:51;;;;;-1:-1:-1;;;17658:51:6;;9812:10;17658:51;;;324:35482;;;;;;;;;;;;;;17658:51;;;;;;;9883:1;17658:51;10808:49;17658:51;;;17501:406;324:35482;;;;17763:12;324:35482;;17777:15;324:35482;;;;17728:65;324:35482;9812:10;17728:65;;17501:406;324:35482;;;;;;17921:36;324:35482;;;;17921:36;;10808:49;:::i;:::-;10695:462;10503:654;;17658:51;;;;:::i;:::-;;;;17501:406;9883:1;324:35482;;;17824:44;324:35482;;;10808:49;324:35482;-1:-1:-1;324:35482:6;;;;;-1:-1:-1;324:35482:6;;;;;;;;;;;;;;;;;17824:44;17501:406;;10695:462;10894:11;;;;;;;:::i;:::-;324:35482;-1:-1:-1;324:35482:6;;;;;;;-1:-1:-1;324:35482:6;;;10882:29;10878:279;10507:11;;;10931:42;324:35482;;;;10939:10;10931:42;:::i;:::-;11021:11;;;;;;:::i;:::-;324:35482;;;-1:-1:-1;324:35482:6;18327:7;324:35482;;;;18319:58;9812:10;324:35482;-1:-1:-1;324:35482:6;;;;18327:36;18319:58;:::i;:::-;18394:15;324:35482;;;-1:-1:-1;324:35482:6;;;;-1:-1:-1;;;;;18394:40:6;324:35482;;-1:-1:-1;324:35482:6;;;;;18394:40;;:::i;:::-;18444:449;;;;;324:35482;;;-1:-1:-1;324:35482:6;;;-1:-1:-1;9883:1:6;324:35482;;;;;;;;18508:21;324:35482;;;;;;;;;;;;;-1:-1:-1;;;;;18605:3:6;324:35482;;18605:51;;;;;;324:35482;-1:-1:-1;324:35482:6;;;;18605:51;;;;;-1:-1:-1;;;18605:51:6;;9812:10;18605:51;;;324:35482;;;;;;;;;;;;;;18605:51;;;;;;;9883:1;18605:51;10991;18605;;;18444:449;324:35482;;;;18745:12;324:35482;;18759:15;324:35482;;;;18708:67;324:35482;9812:10;18708:67;;18444:449;324:35482;;;;;;18907:38;324:35482;;;;18907:38;;10991:51;:::i;18605:::-;;;;:::i;:::-;;;;18444:449;9883:1;324:35482;;;18806:48;324:35482;;;10991:51;324:35482;-1:-1:-1;324:35482:6;;;;;-1:-1:-1;324:35482:6;;;;;;;;;;;;;;;;;18806:48;18444:449;;10878:279;11079:11;;;;;;;;;;:::i;:::-;324:35482;-1:-1:-1;324:35482:6;;;;;-1:-1:-1;324:35482:6;;;11067:29;11063:94;;9883:1;10878:279;10503:654;;10148:219;324:35482;;;-1:-1:-1;;;;;10202:10:6;324:35482;;;;;-1:-1:-1;;;10202:30:6;;;;;;;;;;;;;;-1:-1:-1;10202:30:6;;;10148:219;10254:26;;324:35482;10254:26;10246:54;-1:-1:-1;10254:26:6;;;;;;10246:54;:::i;:::-;324:35482;;10321:35;;;;;-1:-1:-1;;;10321:35:6;;10202:30;10321:35;;324:35482;10321:35;;;;;;;-1:-1:-1;10321:35:6;;;10148:219;10314:42;10148:219;;;;10321:35;;;;;;;;;;;;:::i;:::-;;;;10202:30;;;;;;;;;;;;;;;;:::i;:::-;;;324:35482;;;;-1:-1:-1;324:35482:6;;10202:30;;;;;-1:-1:-1;10202:30:6;;9871:228;324:35482;10042:46;10063:7;324:35482;10050:9;:20;10042:46;:::i;:::-;9871:228;;324:35482;;;;-1:-1:-1;;;324:35482:6;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;324:35482:6;;;;;;;;;;;;;:::o;:::-;;;;;;;:::o;:::-;-1:-1:-1;;;324:35482:6;;;;;;;;;;;;:::o;:::-;;;;-1:-1:-1;;;324:35482:6;;;;;;;;;;;;;;;;;;20171:414;20232:14;324:35482;20232:19;;;20228:183;;20473:68;324:35482;20491:32;20490:51;324:35482;20500:23;324:35482;20491:32;;:::i;:::-;20490:51;:::i;:::-;20473:68;324:35482;20473:68;:::i;:::-;;324:35482;-1:-1:-1;20500:23:6;324:35482;20171:414::o;20228:183::-;20297:33;324:35482;;20297:33;324:35482;20297:33;:::i;:::-;;324:35482;20394:7::o;20708:432::-;20771:16;324:35482;20771:21;;;20767:191;;21020:74;324:35482;21040:34;21039:55;324:35482;21049:25;324:35482;21040:34;;:::i;21039:55::-;21020:74;324:35482;21020:74;:::i;:::-;;324:35482;-1:-1:-1;21049:25:6;324:35482;20708:432::o;20767:191::-;20840:35;324:35482;;20840:35;324:35482;20840:35;:::i;:::-;;324:35482;20941:7::o;22338:1230::-;;22459:46;22480:7;324:35482;22467:9;:20;22459:46;:::i;:::-;-1:-1:-1;22546:10:6;;22558:19;;;;;;23420:9;;;;;;23416:46;;-1:-1:-1;;;;;324:35482:6;;23471:3;324:35482;;23471:25;;;;;;324:35482;;-1:-1:-1;;;23471:25:6;;22631:10;23471:25;;;324:35482;;;;;;;;-1:-1:-1;;324:35482:6;;;;;;-1:-1:-1;;23471:25:6;;;;;;;-1:-1:-1;;;;;;;;23506:24:6;;23471:25;;22541:866;324:35482;23506:24;324:35482;23506:24;:::i;:::-;;324:35482;23540:3;324:35482;;22480:7;324:35482;23540:21;;;;;;22541:866;23540:21;;;;22338:1230::o;23540:21::-;;;;;23471:25;;;;:::i;:::-;;;;23416:46;23445:7;:::o;22546:10::-;324:35482;22609:11;;;;;;;:::i;:::-;324:35482;-1:-1:-1;324:35482:6;22603:5;324:35482;;;;;;22631:10;22595:60;22631:10;324:35482;-1:-1:-1;324:35482:6;;;;22603:38;22595:60;:::i;:::-;22692:12;324:35482;-1:-1:-1;;;;;324:35482:6;;;;22673:15;:31;-1:-1:-1;22673:31:6;;22757:11;22724:80;22757:11;;;;;;;;:::i;:::-;324:35482;-1:-1:-1;324:35482:6;;;;22732:72;:63;22733:42;324:35482;;-1:-1:-1;324:35482:6;;;;;22673:15;22733:42;:::i;:::-;22779:16;324:35482;22732:63;;:::i;22724:80::-;22670:358;;23042:266;;;;;;23086:11;;;;;;;;;:::i;:::-;324:35482;-1:-1:-1;324:35482:6;;;-1:-1:-1;324:35482:6;;;;;;;;;23116:20;324:35482;;;;;;;;;;;;;-1:-1:-1;;;;;23154:3:6;324:35482;;23189:11;;;;;;:::i;:::-;23154:50;;;;;324:35482;;-1:-1:-1;324:35482:6;;;;23154:50;;;;;324:35482;23154:50;;22631:10;23154:50;;;324:35482;;;;;;23202:1;324:35482;;;;23154:50;;;;;;;23326:40;23154:50;324:35482;23154:50;;;;;;23042:266;;;23339:11;;;;;;:::i;:::-;324:35482;;;;;;;;;;23326:40;;324:35482;22546:10;;23154:50;;;;:::i;:::-;;;;;324:35482;;;-1:-1:-1;324:35482:6;;;;;23042:266;23249:11;23326:40;23249:11;;;;;23243:50;23249:11;324:35482;23249:11;;;;;;:::i;:::-;324:35482;-1:-1:-1;324:35482:6;;;22673:15;324:35482;;-1:-1:-1;324:35482:6;;;;;;;;;;;;;;;;;23243:50;23042:266;;22670:358;22835:11;;;;;;;:::i;:::-;324:35482;-1:-1:-1;324:35482:6;;;;;;-1:-1:-1;324:35482:6;;;;;;;;;;;;;22829:39;22825:203;22829:39;;;22918:11;22897:39;22918:11;;;22888:77;22918:11;;;22896:69;22918:11;;22896:60;22918:11;;:::i;:::-;324:35482;-1:-1:-1;324:35482:6;;;;;-1:-1:-1;324:35482:6;;;;;22897:39;;:::i;:::-;324:35482;22940:16;324:35482;;;22896:60;:::i;22888:77::-;22825:203;22670:358;;22825:203;23004:9;;;;;;;22825:203;22670:358;;23574:394;;;324:35482;23645:15;324:35482;;;;;;;;23676:11;324:35482;;;;23700:1;324:35482;;;;;;23676:25;23672:290;23700:1;;;-1:-1:-1;;;;;324:35482:6;;;;;;23724:5;324:35482;;;;;;;;23724:29;23717:36;:::o;23672:290::-;324:35482;;;;;;23798:1;23774:25;23798:1;;-1:-1:-1;;;;;324:35482:6;;;;;;23822:5;324:35482;;;;;;;;23822:29;23815:36;:::o;23770:192::-;324:35482;23676:11;324:35482;;;;;;23872:25;23868:94;;23770:192;;;23574:394::o;23868:94::-;-1:-1:-1;;;;;324:35482:6;;;;23920:7;324:35482;;;;;;;;23920:31;23913:38;:::o;23996:526::-;324:35482;;-1:-1:-1;324:35482:6;;;24084:5;324:35482;;;;;;-1:-1:-1;;;;;;;324:35482:6;;;;;24084:24;324:35482;;24146:12;324:35482;;;24127:15;:31;-1:-1:-1;24127:31:6;;324:35482;24185:59;324:35482;;;24186:38;324:35482;24185:68;324:35482;;24084:5;324:35482;;;;;;;24127:15;24186:38;:::i;24185:68::-;24178:75;:::o;24124:343::-;324:35482;;;;;;;;;;;24278:35;24274:193;24278:35;;;324:35482;24341:35;24340:56;324:35482;;;24340:65;324:35482;;;;;;24341:35;;:::i;:::-;24380:16;324:35482;;;24340:56;:::i;24274:193::-;24444:8;;;:::o;24528:995::-;24627:1;324:35482;24627:1;324:35482;;;;;;;24642:11;324:35482;;;;24666:1;324:35482;;;;;;24642:25;:53;;;24528:995;24638:858;;;-1:-1:-1;24733:12:6;324:35482;-1:-1:-1;;;;;324:35482:6;;;;24714:15;:31;-1:-1:-1;24714:31:6;;324:35482;;;24791:5;24772:59;324:35482;;24773:38;324:35482;24772:68;324:35482;;;;;;;;24714:15;24773:38;:::i;24711:343::-;324:35482;;24865:5;324:35482;;;;;;;;;;;;;24865:35;24861:193;24865:35;;;324:35482;;24927:56;324:35482;24928:35;324:35482;24927:65;324:35482;;;;;;24928:35;;:::i;:::-;24967:16;324:35482;;;24927:56;:::i;24861:193::-;25031:8;;;;:::o;24638:858::-;24642:11;324:35482;;;;;;25098:1;324:35482;;;;;;25074:25;:63;;;24638:858;25070:426;;;324:35482;;-1:-1:-1;;;;;324:35482:6;25176:5;25160:36;324:35482;;25160:13;324:35482;;;;;;;;;;25160:36;;:::i;25070:426::-;324:35482;24642:11;324:35482;;24642:11;324:35482;;;;;;25217:25;25213:283;;25070:426;;;;;24528:995;:::o;25213:283::-;324:35482;;;;25261:14;324:35482;;;;;;;;25258:228;324:35482;;;-1:-1:-1;324:35482:6;;25311:17;324:35482;;;;;;;25304:39::o;25258:228::-;324:35482;;25368:7;324:35482;;;;;;;;;25364:122;;25258:228;;25213:283;;;;;;25364:122;25431:15;324:35482;;;;25431:40;;-1:-1:-1;25261:14:6;324:35482;-1:-1:-1;;;;;324:35482:6;;25431:40;:::i;25074:63::-;324:35482;25103:5;324:35482;;;;;;;;25103:34;;25074:63;;24642:53;324:35482;24671:5;324:35482;;-1:-1:-1;;;;;324:35482:6;;;;;;;24671:24;;24642:53;;324:35482;;;;:::o;:::-;;;;-1:-1:-1;;;324:35482:6;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;-1:-1:-1;;;324:35482:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;28762:3632::-;28886:10;-1:-1:-1;324:35482:6;28875:10;324:35482;;;;-1:-1:-1;324:35482:6;;;;;;28973:71;28994:32;:7;324:35482;29005:20;324:35482;29005:9;324:35482;29005:20;:::i;28973:71::-;-1:-1:-1;29134:19:6;29201:2;29189:14;;;29185:107;;;;;;;324:35482;;;;29235:1;324:35482;;;;;;;;;;29219:35;;29185:107;;29310:206;;29185:107;324:35482;-1:-1:-1;;;;;29551:10:6;324:35482;;;;;-1:-1:-1;;;29551:30:6;;324:35482;29551:30;;;;;;;;;;;-1:-1:-1;29551:30:6;;;29185:107;29599:26;-1:-1:-1;29599:26:6;29591:54;29599:26;;;;;29591:54;:::i;:::-;324:35482;;;29662:35;;;;-1:-1:-1;;;29662:35:6;;;29551:30;29662:35;;324:35482;29662:35;;;;;;;-1:-1:-1;29662:35:6;;;29185:107;29716:16;;;;-1:-1:-1;29747:10:6;-1:-1:-1;29742:2192:6;29759:19;;;;;;31943:195;;;;;;;29742:2192;324:35482;32176:19;28994:7;324:35482;28981:9;32176:19;:::i;:::-;32209:13;;;;32205:47;;29742:2192;324:35482;;-1:-1:-1;324:35482:6;;;-1:-1:-1;;;;;32261:3:6;324:35482;;28994:7;324:35482;32261:21;;;;;;29742:2192;32261:21;;;;32297:9;;32293:26;;32328:24;324:35482;;;32328:24;:::i;:::-;324:35482;;-1:-1:-1;;;;;32362:3:6;324:35482;;32362:25;;;;;324:35482;;-1:-1:-1;;;32362:25:6;;28886:10;29551:30;32362:25;;324:35482;;;;;;;;-1:-1:-1;;324:35482:6;;;-1:-1:-1;324:35482:6;;;;32362:25;324:35482;32261:21;;;;;32205:47;-1:-1:-1;324:35482:6;;;;;-1:-1:-1;;;;;32226:3:6;324:35482;;32226:23;;;;;32205:47;32226:23;;;;32205:47;;;;32226:23;;;;;31943:195;32014:27;28886:10;;-1:-1:-1;324:35482:6;28875:10;324:35482;;;-1:-1:-1;324:35482:6;;;;;;;;29551:30;324:35482;32014:27;:::i;:::-;29551:30;324:35482;-1:-1:-1;;;;;32055:3:6;324:35482;;32055:31;;;;;-1:-1:-1;324:35482:6;;;;;32055:31;;;;324:35482;32055:31;;28886:10;29551:30;32055:31;;324:35482;32084:1;324:35482;;;;32055:31;;;;;;;;31943:195;28886:10;;-1:-1:-1;324:35482:6;32100:11;324:35482;;;-1:-1:-1;324:35482:6;;;;;;;;31943:195;;;32055:31;;;;:::i;:::-;;;;29747:10;29815:11;;;;;324:35482;29815:11;;;;;;:::i;:::-;324:35482;-1:-1:-1;324:35482:6;29803:11;324:35482;;29831:1;324:35482;;-1:-1:-1;324:35482:6;;;29803:29;324:35482;;;29886:11;;;;;;:::i;:::-;324:35482;-1:-1:-1;324:35482:6;29874:11;324:35482;;;;-1:-1:-1;324:35482:6;;;;;;;29954:11;;;;;;:::i;:::-;324:35482;-1:-1:-1;324:35482:6;29948:5;324:35482;;28886:10;324:35482;-1:-1:-1;324:35482:6;;;;29948:38;324:35482;;30069:12;324:35482;-1:-1:-1;;;;;324:35482:6;30050:15;:31;-1:-1:-1;30050:31:6;;30137:11;324:35482;30137:11;;;;;;:::i;:::-;324:35482;-1:-1:-1;324:35482:6;29948:5;324:35482;;30112:72;:63;30113:42;-1:-1:-1;;;;;324:35482:6;-1:-1:-1;324:35482:6;;30460:2;324:35482;;30050:15;30113:42;:::i;30112:72::-;30449:7;;;;:::i;:::-;324:35482;30460:2;324:35482;;30476:1329;;;;30532:3;324:35482;30512:7;;;;:::i;:::-;324:35482;30512:16;324:35482;;;;;;29201:2;324:35482;;;;;;;;;;;;;29201:2;324:35482;;-1:-1:-1;30511:72:6;;;30476:1329;30507:686;;;324:35482;;;-1:-1:-1;30653:7:6;30640:11;;324:35482;;;;-1:-1:-1;;;;;30623:3:6;324:35482;;30640:11;;:::i;:::-;30653:7;;;:::i;:::-;324:35482;;;;30623:56;;;;;-1:-1:-1;;;30623:56:6;;324:35482;29551:30;30623:56;;324:35482;;;;;30662:1;324:35482;;;;29551:30;30532:3;324:35482;;;28886:10;324:35482;;;;30623:56;;;;;;;29831:1;30623:56;;;;31877:16;30623:56;-1:-1:-1;30623:56:6;;;30507:686;30720:11;;;30706:65;30720:11;30706:65;30720:11;324:35482;30720:11;;:::i;:::-;324:35482;;;28886:10;324:35482;;-1:-1:-1;;;;;324:35482:6;;;;;;;9883:1;324:35482;;;;30050:15;324:35482;;;;;;;;;;;;;;30706:65;;;;30507:686;324:35482;31223:11;;;;;;:::i;:::-;324:35482;-1:-1:-1;324:35482:6;29948:5;324:35482;;-1:-1:-1;324:35482:6;;;;;;;;;;31265:11;;;;;;:::i;:::-;324:35482;-1:-1:-1;324:35482:6;29874:11;324:35482;;;-1:-1:-1;324:35482:6;;;;;;;;31334:11;;;;;;:::i;:::-;324:35482;;;31347:12;;324:35482;;30050:15;324:35482;;;;;28886:10;31308:69;324:35482;28886:10;31308:69;;30476:1329;324:35482;31836:11;;;;;;:::i;:::-;324:35482;;;;;;;31823:40;324:35482;;;;31823:40;;31877:16;:::i;:::-;324:35482;;;29747:10;;;;;30623:56;324:35482;30623:56;;;30720:11;30706:65;30623:56;30706:65;30623:56;;30720:11;30623:56;324:35482;30623:56;324:35482;30623:56;;;;;;;:::i;:::-;;;;;;;;;;;30507:686;30939:18;;;;;;30532:3;324:35482;;30939:18;;;:::i;:::-;324:35482;30909:19;;324:35482;30908:50;30904:194;;30507:686;-1:-1:-1;;;;;31119:3:6;324:35482;;31156:11;;;;;;;:::i;:::-;31119:55;;;;;324:35482;;-1:-1:-1;324:35482:6;;;;31119:55;;;;;-1:-1:-1;;;31119:55:6;;28886:10;29551:30;31119:55;;324:35482;;;;;;29551:30;324:35482;;;;31172:1;30532:3;324:35482;;;31119:55;;;;;;;29831:1;31119:55;31877:16;31119:55;;;30507:686;;;;31119:55;;;;:::i;:::-;;;;30904:194;31010:2;;324:35482;;;;;;;;;;;;;;;30532:3;30999:19;324:35482;;30999:19;:::i;:::-;31067:2;324:35482;;;;;;;;;;;;30532:3;324:35482;;;30904:194;;;30511:72;324:35482;;;;;;;-1:-1:-1;;;;;30562:3:6;324:35482;;;;30562:17;;;;324:35482;30562:17;;30577:1;29551:30;30562:17;;324:35482;30562:17;;;;;;;;324:35482;30562:17;;;;-1:-1:-1;30562:17:6;;;30511:72;324:35482;;30562:21;;30511:72;;30562:17;;;;324:35482;30562:17;324:35482;30562:17;;;;;;;:::i;:::-;;;;30476:1329;31545:18;;31538:3;324:35482;;31545:18;;;:::i;:::-;324:35482;31515:19;;324:35482;31514:50;31510:182;;30476:1329;29831:1;31715:11;31877:16;31715:11;324:35482;31715:11;;;;;;:::i;:::-;324:35482;-1:-1:-1;324:35482:6;;;29948:5;324:35482;;;;;;;-1:-1:-1;;324:35482:6;30050:15;324:35482;;;;;;;30476:1329;;31510:182;31612:2;324:35482;;;;;;;;;;;;;;;;31538:3;31601:19;324:35482;;31601:19;:::i;:::-;31665:2;324:35482;;;;;;;;;;;;31538:3;324:35482;;;;;;31510:182;;30047:367;324:35482;30215:11;;;;;;:::i;:::-;324:35482;-1:-1:-1;324:35482:6;29948:5;324:35482;;;;;-1:-1:-1;324:35482:6;;30460:2;;;-1:-1:-1;;;;;30460:2:6;324:35482;;;;30209:39;30205:209;30209:39;;;30279:69;30301:11;324:35482;30301:11;;30279:60;30301:11;30280:39;30301:11;-1:-1:-1;;;;;30301:11:6;;:::i;:::-;324:35482;-1:-1:-1;324:35482:6;29948:5;324:35482;;;-1:-1:-1;324:35482:6;;;;;30280:39;;:::i;:::-;-1:-1:-1;;;;;30323:16:6;324:35482;;;30279:60;:::i;:69::-;30047:367;;30205:209;30387:12;;;;;-1:-1:-1;30047:367:6;;324:35482;;;;-1:-1:-1;;;324:35482:6;;;29551:30;324:35482;;;;;;;;;;;;;;;;;;-1:-1:-1;;;324:35482:6;;;29551:30;324:35482;;;29874:11;324:35482;;;;;;;;;;;;;;-1:-1:-1;;;324:35482:6;;;29551:30;324:35482;;;;;;;;;;;;;;29662:35;;;;;;;-1:-1:-1;29662:35:6;;;;;;:::i;:::-;;;;;29551:30;;;324:35482;29551:30;;324:35482;29551:30;;;;;;324:35482;29551:30;;;:::i;:::-;;;324:35482;;;;;-1:-1:-1;29551:30:6;;;;;-1:-1:-1;29551:30:6;;29310:206;29337:111;;-1:-1:-1;29337:111:6;;324:35482;;;29337:111;28886:10;-1:-1:-1;324:35482:6;29469:11;324:35482;;;;;-1:-1:-1;324:35482:6;;;29469:35;324:35482;;29310:206;;;29337:111;29201:2;29337:111;;29185:107;29272:18;29288:2;29185:107;;;324:35482;;;;-1:-1:-1;;;324:35482:6;;;;;;;;;;;;;;;;;;33970:1834;;;;;324:35482;34150:326;;;;324:35482;34177:71;34198:32;:7;324:35482;34209:20;324:35482;34209:9;324:35482;34209:20;:::i;34177:71::-;-1:-1:-1;;;;;34270:10:6;324:35482;;;;-1:-1:-1;;;34270:30:6;;;;;;;;;;;;;;;-1:-1:-1;34270:30:6;;;34150:326;34270:42;;34262:70;-1:-1:-1;34270:42:6;;;;;;34262:70;:::i;:::-;324:35482;;;34353:35;;;;-1:-1:-1;;;34353:35:6;;;34270:30;34353:35;;324:35482;34353:35;;;;;;;-1:-1:-1;34353:35:6;;;34150:326;34346:42;34150:326;;-1:-1:-1;34526:12:6;;324:35482;;;;34540:12;;;;324:35482;34592:7;;324:35482;;;34592:7;;;:::i;:::-;324:35482;-1:-1:-1;324:35482:6;34577:14;324:35482;;;;-1:-1:-1;324:35482:6;;;;;;34736:40;324:35482;;34673:7;;324:35482;;;34673:7;;;:::i;:::-;324:35482;-1:-1:-1;324:35482:6;34655:17;324:35482;;34633:76;-1:-1:-1;;;;;324:35482:6;-1:-1:-1;324:35482:6;;34577:14;324:35482;;34641:10;:53;34633:76;:::i;:::-;324:35482;34762:7;;324:35482;;;34762:7;;;:::i;:::-;324:35482;-1:-1:-1;324:35482:6;34655:17;324:35482;;;-1:-1:-1;324:35482:6;;;;34736:40;;:::i;:::-;;34791:669;;;;;;-1:-1:-1;;;;;34826:3:6;324:35482;;;;;34826:16;-1:-1:-1;;;34826:16:6;;324:35482;34826:16;;;;;;;;;;;;;324:35482;34826:16;-1:-1:-1;34826:16:6;;;34791:669;324:35482;;34826:20;;:44;;;34791:669;34822:426;;;324:35482;;;;34946:7;;324:35482;-1:-1:-1;;;;;34826:3:6;324:35482;;;;;;34946:7;;:::i;:::-;-1:-1:-1;34955:7:6;324:35482;;;34955:7;;:::i;:::-;324:35482;;;;34920:64;;;;;-1:-1:-1;;;34920:64:6;;324:35482;34826:16;34920:64;;324:35482;;;;;34964:1;324:35482;;;;34641:10;324:35482;;;;;;;;;34920:64;;;;;;;324:35482;34920:64;;;324:35482;34920:64;-1:-1:-1;34920:64:6;;;34822:426;324:35482;35025:7;;35011:61;324:35482;;;;;;35025:7;;:::i;:::-;324:35482;;;34641:10;324:35482;;-1:-1:-1;;;;;324:35482:6;;;;;;;;32901:11;324:35482;;;;35056:15;324:35482;;;;;;;;35011:61;34822:426;324:35482;35280:7;;324:35482;;;35280:7;;;:::i;:::-;324:35482;-1:-1:-1;324:35482:6;34577:14;324:35482;;;-1:-1:-1;324:35482:6;;;;;;;;;35339:7;;324:35482;;;35339:7;;;:::i;:::-;324:35482;-1:-1:-1;324:35482:6;34655:17;324:35482;;-1:-1:-1;324:35482:6;;;;;;;;;34791:669;324:35482;35493:7;;324:35482;;;35493:7;;;:::i;:::-;324:35482;;;;;;35478:38;324:35482;;;;35478:38;;324:35482;;34526:12;;;34920:64;;;;;35025:7;35011:61;34920:64;;35025:7;34920:64;324:35482;34920:64;324:35482;34920:64;;;;;;;:::i;:::-;;;;;;;;;34822:426;324:35482;;35131:7;;324:35482;;;35131:7;;;:::i;:::-;35119:41;;;;;;324:35482;;;35119:41;-1:-1:-1;;;35119:41:6;;324:35482;34826:16;35119:41;;324:35482;34641:10;324:35482;;;;35152:1;324:35482;;;;-1:-1:-1;324:35482:6;;;;;;;;;;;35119:41;;;;;;;324:35482;35119:41;324:35482;35119:41;;;34822:426;324:35482;35215:7;;324:35482;;;35215:7;;;:::i;:::-;324:35482;;;;;;;;;;;;35187:42;324:35482;34641:10;35187:42;;34822:426;;35119:41;;;;:::i;:::-;;;;34826:44;324:35482;34868:2;34862:3;34851:7;324:35482;;;34851:7;;:::i;:::-;324:35482;;34850:20;34826:44;;:16;;;;324:35482;34826:16;324:35482;34826:16;;;;;;;:::i;:::-;;;;34791:669;324:35482;;;;35404:7;;324:35482;;;;35404:7;;;:::i;:::-;324:35482;-1:-1:-1;324:35482:6;34655:17;324:35482;;;-1:-1:-1;324:35482:6;;;;;;;34791:669;;324:35482;;;;-1:-1:-1;;;324:35482:6;;;;;;;;;;;;;;;;;;34540:12;;;;;;;;35587:19;35599:7;324:35482;35587:9;:19;:::i;34353:35::-;;;;;;;;;;;;:::i;:::-;;;;34270:30;;;;;;;;;;;;;;;;;:::i;:::-;;;324:35482;;;;-1:-1:-1;324:35482:6;;;34262:70;34270:30;;;;;-1:-1:-1;34270:30:6;;34150:326;324:35482;34419:46;34440:7;324:35482;34427:9;:20;34419:46;:::i;:::-;34150:326;
Swarm Source
ipfs://19fad45ca8550369e5d573ec8c5b33bf7f9db3d4538ace294115d2bdece6a872
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $2,549.75 | 0.0018 | $4.59 |
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.