Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 725 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 19851642 | 121 days ago | IN | 0 ETH | 0.00011334 | ||||
Approve | 18946174 | 248 days ago | IN | 0 ETH | 0.00051334 | ||||
Approve | 18281490 | 341 days ago | IN | 0 ETH | 0.0002543 | ||||
Approve | 18281467 | 341 days ago | IN | 0 ETH | 0.00023583 | ||||
Approve | 18274434 | 342 days ago | IN | 0 ETH | 0.00023068 | ||||
Transfer | 15522367 | 729 days ago | IN | 0 ETH | 0.00151578 | ||||
Transfer | 12802007 | 1157 days ago | IN | 0 ETH | 0.00143428 | ||||
Mint | 12733376 | 1168 days ago | IN | 0 ETH | 0.0016247 | ||||
Transfer | 12628844 | 1184 days ago | IN | 0 ETH | 0.00092833 | ||||
Approve | 11391291 | 1375 days ago | IN | 0 ETH | 0.00062804 | ||||
Approve | 11346022 | 1382 days ago | IN | 0 ETH | 0.00080513 | ||||
Approve | 11345862 | 1382 days ago | IN | 0 ETH | 0.00048027 | ||||
Approve | 11295868 | 1390 days ago | IN | 0 ETH | 0.00514245 | ||||
Transfer | 11295799 | 1390 days ago | IN | 0 ETH | 0.00652516 | ||||
Approve | 11227483 | 1400 days ago | IN | 0 ETH | 0.00073141 | ||||
Approve | 11227206 | 1400 days ago | IN | 0 ETH | 0.00161956 | ||||
Approve | 11225194 | 1400 days ago | IN | 0 ETH | 0.00083072 | ||||
Mint | 10974496 | 1439 days ago | IN | 0 ETH | 0.00806048 | ||||
Approve | 10965562 | 1440 days ago | IN | 0 ETH | 0.00399968 | ||||
Approve | 10940206 | 1444 days ago | IN | 0 ETH | 0.0039021 | ||||
Approve | 10924432 | 1447 days ago | IN | 0 ETH | 0.00348024 | ||||
Approve | 10924190 | 1447 days ago | IN | 0 ETH | 0.00654494 | ||||
Mint | 10800592 | 1466 days ago | IN | 0 ETH | 0.04925472 | ||||
Approve | 10147753 | 1567 days ago | IN | 0 ETH | 0.00240322 | ||||
Transfer | 9846382 | 1613 days ago | IN | 0 ETH | 0.000103 |
Advanced mode: Intended for advanced users or developers and will display all Internal Transactions including zero value transfers. Name tag integration is not available in advanced view.
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | ||||
---|---|---|---|---|---|---|---|
11644212 | 1336 days ago | 0 ETH | |||||
11644212 | 1336 days ago | 0 ETH | |||||
11644212 | 1336 days ago | 0 ETH | |||||
11644171 | 1336 days ago | 0 ETH | |||||
11644171 | 1336 days ago | 0 ETH | |||||
11644102 | 1336 days ago | 0 ETH | |||||
11644102 | 1336 days ago | 0 ETH | |||||
11401529 | 1373 days ago | 0 ETH | |||||
11401529 | 1373 days ago | 0 ETH | |||||
11401529 | 1373 days ago | 0 ETH | |||||
11401529 | 1373 days ago | 0 ETH | |||||
11401529 | 1373 days ago | 0 ETH | |||||
11391335 | 1375 days ago | 0 ETH | |||||
11391335 | 1375 days ago | 0 ETH | |||||
11391178 | 1375 days ago | 0 ETH | |||||
11391178 | 1375 days ago | 0 ETH | |||||
11346117 | 1382 days ago | 0 ETH | |||||
11346117 | 1382 days ago | 0 ETH | |||||
11345894 | 1382 days ago | 0 ETH | |||||
11345894 | 1382 days ago | 0 ETH | |||||
11319230 | 1386 days ago | 0 ETH | |||||
11319230 | 1386 days ago | 0 ETH | |||||
11319063 | 1386 days ago | 0 ETH | |||||
11319063 | 1386 days ago | 0 ETH | |||||
11319063 | 1386 days ago | 0 ETH |
Loading...
Loading
Contract Name:
Zero_x_butt_v2
Compiler Version
v0.5.11+commit.c082d0b4
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2019-09-07 */ pragma solidity 0.5 .11; // 'ButtCoin' contract, version 2.0 // Website: http://www.0xbutt.com/ // // Symbol : 0xBUTT // Name : ButtCoin v2.0 // Total supply: 33,554,431.99999981 // Decimals : 8 // // ---------------------------------------------------------------------------- // ============================================================================ // Safe maths // ============================================================================ library SafeMath { function add(uint256 a, uint256 b) internal pure returns(uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns(uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns(uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns(uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns(uint256) { return div(a, b, "SafeMath: division by zero"); } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns(uint256) { require(b > 0, errorMessage); uint256 c = a / b; return c; } function mod(uint256 a, uint256 b) internal pure returns(uint256) { return mod(a, b, "SafeMath: modulo by zero"); } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns(uint256) { require(b != 0, errorMessage); return a % b; } } // ============================================================================ // ERC Token Standard Interface // ============================================================================ contract ERC20Interface { function addToBlacklist(address addToBlacklist) public; function addToRootAccounts(address addToRoot) public; function addToWhitelist(address addToWhitelist) public; function allowance(address tokenOwner, address spender) public view returns(uint remaining); function approve(address spender, uint tokens) public returns(bool success); function approveAndCall(address spender, uint tokens, bytes memory data) public returns(bool success); function balanceOf(address tokenOwner) public view returns(uint balance); function checkMintSolution(uint256 nonce, bytes32 challenge_digest, bytes32 challenge_number, uint testTarget) public view returns(bool success); function confirmBlacklist(address confirmBlacklist) public returns(bool); function confirmWhitelist(address tokenAddress) public returns(bool); function currentSupply() public view returns(uint); function decreaseAllowance(address spender, uint256 subtractedValue) public returns(bool); function getChallengeNumber() public view returns(bytes32); function getMiningDifficulty() public view returns(uint); function getMiningReward() public view returns(uint); function getMiningTarget() public view returns(uint); function getMintDigest(uint256 nonce, bytes32 challenge_digest, bytes32 challenge_number) public view returns(bytes32); function getBlockAmount (address minerAddress) public returns(uint); function getBlockAmount (uint blockNumber) public returns(uint); function getBlockMiner(uint blockNumber) public returns(address); function increaseAllowance(address spender, uint256 addedValue) public returns(bool); function mint(uint256 nonce, bytes32 challenge_digest) public returns(bool success); function multiTransfer(address[] memory receivers, uint256[] memory amounts) public; function removeFromBlacklist(address removeFromBlacklist) public; function removeFromRootAccounts(address removeFromRoot) public; function removeFromWhitelist(address removeFromWhitelist) public; function rootTransfer(address from, address to, uint tokens) public returns(bool success); function setDifficulty(uint difficulty) public returns(bool success); function switchApproveAndCallLock() public; function switchApproveLock() public; function switchMintLock() public; function switchRootTransferLock() public; function switchTransferFromLock() public; function switchTransferLock() public; function totalSupply() public view returns(uint); function transfer(address to, uint tokens) public returns(bool success); function transferFrom(address from, address to, uint tokens) public returns(bool success); event Approval(address indexed tokenOwner, address indexed spender, uint tokens); event Transfer(address indexed from, address indexed to, uint tokens); } // ============================================================================ // Contract function to receive approval and execute function in one call // ============================================================================ contract ApproveAndCallFallBack { function receiveApproval(address from, uint256 tokens, address token, bytes memory data) public; } // ============================================================================ // Owned contract // ============================================================================ contract Owned { address public owner; address public newOwner; event OwnershipTransferred(address indexed _from, address indexed _to); constructor() public { owner = msg.sender; } modifier onlyOwner { require(msg.sender == owner); _; } function transferOwnership(address _newOwner) public onlyOwner { newOwner = _newOwner; } function acceptOwnership() public { require(msg.sender == newOwner); emit OwnershipTransferred(owner, newOwner); owner = newOwner; newOwner = address(0); } } // ============================================================================ // All booleans are false as a default. False means unlocked. // Secures main functions of the gretest importance. // ============================================================================ contract Locks is Owned { //false means unlocked, answering the question, "is it locked ?" //no need to track the gas usage for functions in this contract. bool internal constructorLock = false; //makes sure that constructor of the main is executed only once. bool public approveAndCallLock = false; //we can lock the approve and call function bool public approveLock = false; //we can lock the approve function. bool public mintLock = false; //we can lock the mint function, for emergency only. bool public rootTransferLock = false; //we can lock the rootTransfer fucntion in case there is an emergency situation. bool public transferFromLock = false; //we can lock the transferFrom function in case there is an emergency situation. bool public transferLock = false; //we can lock the transfer function in case there is an emergency situation. mapping(address => bool) internal blacklist; //in case there are accounts that need to be blocked, good for preventing attacks (can be useful against ransomware). mapping(address => bool) internal rootAccounts; //for whitelisting the accounts such as exchanges, etc. mapping(address => bool) internal whitelist; //for whitelisting the accounts such as exchanges, etc. mapping(uint => address) internal blockMiner; //for keeping a track of who mined which block. mapping(uint => uint) internal blockAmount; //for keeping a track of how much was mined per block mapping(address => uint) internal minedAmount; //for keeping a track how much each miner earned // ---------------------------------------------------------------------------- // Switch for an approveAndCall function // ---------------------------------------------------------------------------- function switchApproveAndCallLock() public { assert(address(msg.sender) == address(owner) || rootAccounts[msg.sender]); //Only the contract owner OR root accounts can initiate it approveAndCallLock = !approveAndCallLock; } // ---------------------------------------------------------------------------- // Switch for an approve function // ---------------------------------------------------------------------------- function switchApproveLock() public { assert(address(msg.sender) == address(owner) || rootAccounts[msg.sender]); //Only the contract owner OR root accounts can initiate it approveLock = !approveLock; } // ---------------------------------------------------------------------------- // Switch for a mint function // ---------------------------------------------------------------------------- function switchMintLock() public { assert(address(msg.sender) == address(owner) || rootAccounts[msg.sender]); //Only the contract owner OR root accounts can initiate it mintLock = !mintLock; } // ---------------------------------------------------------------------------- // Switch for a rootTransfer function // ---------------------------------------------------------------------------- function switchRootTransferLock() public { assert(address(msg.sender) == address(owner) || rootAccounts[msg.sender]); //Only the contract owner OR root accounts can initiate it rootTransferLock = !rootTransferLock; } // ---------------------------------------------------------------------------- // Switch for a transferFrom function // ---------------------------------------------------------------------------- function switchTransferFromLock() public { assert(address(msg.sender) == address(owner) || rootAccounts[msg.sender]); //Only the contract owner OR root accounts can initiate it transferFromLock = !transferFromLock; } // ---------------------------------------------------------------------------- // Switch for a transfer function // ---------------------------------------------------------------------------- function switchTransferLock() public { assert(address(msg.sender) == address(owner) || rootAccounts[msg.sender]); //Only the contract owner OR root accounts can initiate it transferLock = !transferLock; } // ---------------------------------------------------------------------------- // Adds account to root // ---------------------------------------------------------------------------- function addToRootAccounts(address addToRoot) public { require(!rootAccounts[addToRoot]); //we need to have something to add assert(address(msg.sender) == address(owner) || rootAccounts[msg.sender]); //Only the contract owner OR root accounts can initiate it rootAccounts[addToRoot] = true; blacklist[addToRoot] = false; } // ---------------------------------------------------------------------------- // Removes account from the root // ---------------------------------------------------------------------------- function removeFromRootAccounts(address removeFromRoot) public { require(rootAccounts[removeFromRoot]); //we need to have something to remove assert(address(msg.sender) == address(owner) || rootAccounts[msg.sender]); //Only the contract owner OR root accounts can initiate it rootAccounts[removeFromRoot] = false; } // ---------------------------------------------------------------------------- // Adds account from the whitelist // ---------------------------------------------------------------------------- function addToWhitelist(address addToWhitelist) public { require(!whitelist[addToWhitelist]); //we need to have something to add assert(address(msg.sender) == address(owner) || rootAccounts[msg.sender]); //Only the contract owner OR root accounts can initiate it whitelist[addToWhitelist] = true; blacklist[addToWhitelist] = false; } // ---------------------------------------------------------------------------- // Removes account from the whitelist // ---------------------------------------------------------------------------- function removeFromWhitelist(address removeFromWhitelist) public { require(whitelist[removeFromWhitelist]); //we need to have something to remove assert(address(msg.sender) == address(owner) || rootAccounts[msg.sender]); //Only the contract owner OR root accounts can initiate it whitelist[removeFromWhitelist] = false; } // ---------------------------------------------------------------------------- // Adds account to the blacklist // ---------------------------------------------------------------------------- function addToBlacklist(address addToBlacklist) public { require(!blacklist[addToBlacklist]); //we need to have something to add assert(address(msg.sender) == address(owner) || rootAccounts[msg.sender]); //Only the contract owner OR root accounts can initiate it blacklist[addToBlacklist] = true; rootAccounts[addToBlacklist] = false; whitelist[addToBlacklist] = false; } // ---------------------------------------------------------------------------- // Removes account from the blacklist // ---------------------------------------------------------------------------- function removeFromBlacklist(address removeFromBlacklist) public { require(blacklist[removeFromBlacklist]); //we need to have something to remove assert(address(msg.sender) == address(owner) || rootAccounts[msg.sender]); //Only the contract owner OR root accounts can initiate it blacklist[removeFromBlacklist] = false; } // ---------------------------------------------------------------------------- // Tells whether the address is blacklisted. True if yes, False if no. // ---------------------------------------------------------------------------- function confirmBlacklist(address confirmBlacklist) public returns(bool) { require(blacklist[confirmBlacklist]); return blacklist[confirmBlacklist]; } // ---------------------------------------------------------------------------- // Tells whether the address is whitelisted. True if yes, False if no. // ---------------------------------------------------------------------------- function confirmWhitelist(address confirmWhitelist) public returns(bool) { require(whitelist[confirmWhitelist]); return whitelist[confirmWhitelist]; } // ---------------------------------------------------------------------------- // Tells whether the address is a root. True if yes, False if no. // ---------------------------------------------------------------------------- function confirmRoot(address tokenAddress) public returns(bool) { require(rootAccounts[tokenAddress]); assert(address(msg.sender) == address(owner) || rootAccounts[msg.sender]); return rootAccounts[tokenAddress]; } // ---------------------------------------------------------------------------- // Tells who mined the block provided the blocknumber. // ---------------------------------------------------------------------------- function getBlockMiner(uint blockNumber) public returns(address) { return blockMiner[blockNumber]; } // ---------------------------------------------------------------------------- // Tells how much was mined per block provided the blocknumber. // ---------------------------------------------------------------------------- function getBlockAmount (uint blockNumber) public returns(uint) { return blockAmount[blockNumber]; } // ---------------------------------------------------------------------------- // Tells how much was mined by an address. // ---------------------------------------------------------------------------- function getBlockAmount (address minerAddress) public returns(uint) { return minedAmount[minerAddress]; } } // ============================================================================ // Decalres dynamic data used in a main // ============================================================================ contract Stats { //uint public _currentSupply; uint public blockCount; //number of 'blocks' mined uint public lastMiningOccured; uint public lastRewardAmount; uint public lastRewardEthBlockNumber; uint public latestDifficultyPeriodStarted; uint public miningTarget; uint public rewardEra; uint public tokensBurned; uint public tokensGenerated; uint public tokensMined; uint public totalGasSpent; bytes32 public challengeNumber; //generate a new one when a new reward is minted address public lastRewardTo; address public lastTransferTo; } // ============================================================================ // Decalres the constant variables used in a main // ============================================================================ contract Constants { string public name; string public symbol; uint8 public decimals; uint public _BLOCKS_PER_ERA = 20999999; uint public _MAXIMUM_TARGET = (2 ** 234); //smaller the number means a greater difficulty uint public _totalSupply; } // ============================================================================ // Decalres the maps used in a main // ============================================================================ contract Maps { mapping(address => mapping(address => uint)) allowed; mapping(address => uint) balances; mapping(bytes32 => bytes32) solutionForChallenge; } // ============================================================================ // MAIN // ============================================================================ contract Zero_x_butt_v2 is ERC20Interface, Locks, Stats, Constants, Maps { using SafeMath for uint; event Mint(address indexed from, uint reward_amount, uint epochCount, bytes32 newChallengeNumber); // ------------------------------------------------------------------------ // Constructor // ------------------------------------------------------------------------ constructor() public onlyOwner { if (constructorLock) revert(); constructorLock = true; decimals = 8; name = "ButtCoin v2.0"; symbol = "0xBUTT"; _totalSupply = 3355443199999981; //33,554,431.99999981 blockCount = 0; challengeNumber = 0; lastMiningOccured = now; lastRewardAmount = 0; lastRewardTo = msg.sender; lastTransferTo = msg.sender; latestDifficultyPeriodStarted = block.number; miningTarget = (2 ** 234); rewardEra = 1; tokensBurned = 1; tokensGenerated = _totalSupply; //33,554,431.99999981 tokensMined = 0; totalGasSpent = 0; emit Transfer(address(0), owner, tokensGenerated); balances[owner] = tokensGenerated; _startNewMiningEpoch(); totalGasSpent = totalGasSpent.add(tx.gasprice); } //---------------------PUBLIC FUNCTIONS------------------------------------ // ------------------------------------------------------------------------ // Rewards the miners // ------------------------------------------------------------------------ function mint(uint256 nonce, bytes32 challenge_digest) public returns(bool success) { if(mintLock || blacklist[msg.sender]) revert(); //The function must be unlocked uint reward_amount = getMiningReward(); if (reward_amount == 0) revert(); if (tokensBurned >= (2 ** 226)) revert(); //the PoW must contain work that includes a recent ethereum block hash (challenge number) and the msg.sender's address to prevent MITM attacks bytes32 digest = keccak256(abi.encodePacked(challengeNumber, msg.sender, nonce)); //the challenge digest must match the expected if (digest != challenge_digest) revert(); //the digest must be smaller than the target if (uint256(digest) > miningTarget) revert(); //only allow one reward for each challenge bytes32 solution = solutionForChallenge[challengeNumber]; solutionForChallenge[challengeNumber] = digest; if (solution != 0x0) revert(); //prevent the same answer from awarding twice lastRewardTo = msg.sender; lastRewardAmount = reward_amount; lastRewardEthBlockNumber = block.number; _startNewMiningEpoch(); emit Mint(msg.sender, reward_amount, blockCount, challengeNumber); balances[msg.sender] = balances[msg.sender].add(reward_amount); tokensMined = tokensMined.add(reward_amount); _totalSupply = _totalSupply.add(reward_amount); blockMiner[blockCount] = msg.sender; blockAmount[blockCount] = reward_amount; minedAmount[msg.sender] = minedAmount[msg.sender].add(reward_amount); lastMiningOccured = now; totalGasSpent = totalGasSpent.add(tx.gasprice); return true; } // ------------------------------------------------------------------------ // If we ever need to design a different mining algorithm... // ------------------------------------------------------------------------ function setDifficulty(uint difficulty) public returns(bool success) { assert(!blacklist[msg.sender]); assert(address(msg.sender) == address(owner) || rootAccounts[msg.sender]); //Must be an owner or a root account miningTarget = difficulty; totalGasSpent = totalGasSpent.add(tx.gasprice); return true; } // ------------------------------------------------------------------------ // Allows the multiple transfers // ------------------------------------------------------------------------ function multiTransfer(address[] memory receivers, uint256[] memory amounts) public { for (uint256 i = 0; i < receivers.length; i++) { transfer(receivers[i], amounts[i]); } } // ------------------------------------------------------------------------ // Transfer the balance from token owner's account to `to` account // ------------------------------------------------------------------------ function transfer(address to, uint tokens) public returns(bool success) { assert(!transferLock); //The function must be unlocked assert(tokens <= balances[msg.sender]); //Amount of tokens exceeded the maximum assert(address(msg.sender) != address(0)); //you cannot mint by sending, it has to be done by mining. if (blacklist[msg.sender]) { //we do not process a transfer for the blacklisted accounts, instead we burn all of their tokens. emit Transfer(msg.sender, address(0), balances[msg.sender]); balances[address(0)] = balances[address(0)].add(balances[msg.sender]); tokensBurned = tokensBurned.add(balances[msg.sender]); _totalSupply = _totalSupply.sub(balances[msg.sender]); balances[msg.sender] = 0; } else { uint toBurn = tokens.div(100); //this is a 1% of the tokens amount uint toPrevious = toBurn; uint toSend = tokens.sub(toBurn.add(toPrevious)); emit Transfer(msg.sender, to, toSend); balances[msg.sender] = balances[msg.sender].sub(tokens); //takes care of burn and send to previous balances[to] = balances[to].add(toSend); if (address(msg.sender) != address(lastTransferTo)) { //there is no need to send the 1% to yourself emit Transfer(msg.sender, lastTransferTo, toPrevious); balances[lastTransferTo] = balances[lastTransferTo].add(toPrevious); } emit Transfer(msg.sender, address(0), toBurn); balances[address(0)] = balances[address(0)].add(toBurn); tokensBurned = tokensBurned.add(toBurn); _totalSupply = _totalSupply.sub(toBurn); lastTransferTo = msg.sender; } totalGasSpent = totalGasSpent.add(tx.gasprice); return true; } // ------------------------------------------------------------------------ // Transfer without burning // ------------------------------------------------------------------------ function rootTransfer(address from, address to, uint tokens) public returns(bool success) { assert(!rootTransferLock && (address(msg.sender) == address(owner) || rootAccounts[msg.sender])); balances[from] = balances[from].sub(tokens); balances[to] = balances[to].add(tokens); emit Transfer(from, to, tokens); if (address(from) == address(0)) { tokensGenerated = tokensGenerated.add(tokens); } if (address(to) == address(0)) { tokensBurned = tokensBurned.add(tokens); } totalGasSpent = totalGasSpent.add(tx.gasprice); return true; } // ------------------------------------------------------------------------ // Token owner can approve for `spender` to transferFrom(...) `tokens` // ------------------------------------------------------------------------ function approve(address spender, uint tokens) public returns(bool success) { assert(!approveLock && !blacklist[msg.sender]); //Must be unlocked and not blacklisted assert(spender != address(0)); //Cannot approve for address(0) allowed[msg.sender][spender] = tokens; emit Approval(msg.sender, spender, tokens); totalGasSpent = totalGasSpent.add(tx.gasprice); return true; } // ------------------------------------------------------------------------ //Increases the allowance // ------------------------------------------------------------------------ function increaseAllowance(address spender, uint256 addedValue) public returns(bool) { assert(!approveLock && !blacklist[msg.sender]); //Must be unlocked and not blacklisted assert(spender != address(0)); //Cannot approve for address(0) allowed[msg.sender][spender] = (allowed[msg.sender][spender].add(addedValue)); emit Approval(msg.sender, spender, allowed[msg.sender][spender]); totalGasSpent = totalGasSpent.add(tx.gasprice); return true; } // ------------------------------------------------------------------------ // Decreases the allowance // ------------------------------------------------------------------------ function decreaseAllowance(address spender, uint256 subtractedValue) public returns(bool) { assert(!approveLock && !blacklist[msg.sender]); //Must be unlocked and not blacklisted assert(spender != address(0)); //Cannot approve for address(0) allowed[msg.sender][spender] = (allowed[msg.sender][spender].sub(subtractedValue)); emit Approval(msg.sender, spender, allowed[msg.sender][spender]); totalGasSpent = totalGasSpent.add(tx.gasprice); return true; } // ------------------------------------------------------------------------ // Transfer `tokens` from the `from` account to the `to` account // ------------------------------------------------------------------------ function transferFrom(address from, address to, uint tokens) public returns(bool success) { assert(!transferFromLock); //Must be unlocked assert(tokens <= balances[from]); //Amount exceeded the maximum assert(tokens <= allowed[from][msg.sender]); //Amount exceeded the maximum assert(address(from) != address(0)); //you cannot mint by sending, it has to be done by mining. if (blacklist[from]) { //we do not process a transfer for the blacklisted accounts, instead we burn all of their tokens. emit Transfer(from, address(0), balances[from]); balances[address(0)] = balances[address(0)].add(balances[from]); tokensBurned = tokensBurned.add(balances[from]); _totalSupply = _totalSupply.sub(balances[from]); balances[from] = 0; } else { uint toBurn = tokens.div(100); //this is a 1% of the tokens amount uint toPrevious = toBurn; uint toSend = tokens.sub(toBurn.add(toPrevious)); emit Transfer(from, to, toSend); allowed[from][msg.sender] = allowed[from][msg.sender].sub(tokens); balances[from] = balances[from].sub(tokens); balances[to] = balances[to].add(toSend); if (address(from) != address(lastTransferTo)) { //there is no need to send the 1% to yourself emit Transfer(from, lastTransferTo, toPrevious); balances[lastTransferTo] = balances[lastTransferTo].add(toPrevious); } emit Transfer(from, address(0), toBurn); balances[address(0)] = balances[address(0)].add(toBurn); tokensBurned = tokensBurned.add(toBurn); _totalSupply = _totalSupply.sub(toBurn); lastTransferTo = from; } totalGasSpent = totalGasSpent.add(tx.gasprice); return true; } // ------------------------------------------------------------------------ // Token owner can approve for `spender` to transferFrom(...) `tokens` // from the token owner's account. The `spender` contract function // `receiveApproval(...)` is then executed // ------------------------------------------------------------------------ function approveAndCall(address spender, uint tokens, bytes memory data) public returns(bool success) { assert(!approveAndCallLock && !blacklist[msg.sender]); //Must be unlocked, cannot be a blacklisted allowed[msg.sender][spender] = tokens; emit Approval(msg.sender, spender, tokens); ApproveAndCallFallBack(spender).receiveApproval(msg.sender, tokens, address(this), data); totalGasSpent = totalGasSpent.add(tx.gasprice); return true; } //---------------------INTERNAL FUNCTIONS--------------------------------- // ---------------------------------------------------------------------------- // Readjusts the difficulty levels // ---------------------------------------------------------------------------- function reAdjustDifficulty() internal returns (bool){ //every time the mining occurs, we remove the number from a miningTarget //lets say we have 337 eras, which means 7076999663 blocks in total //This means that we are subtracting 3900944849764118909177207268874798844229425801045364020480003 each time we mine a block //If every block took 1 second, it would take 200 years to mine all tokens ! miningTarget = miningTarget.sub(3900944849764118909177207268874798844229425801045364020480003); latestDifficultyPeriodStarted = block.number; return true; } // ---------------------------------------------------------------------------- // A new block epoch to be mined // ---------------------------------------------------------------------------- function _startNewMiningEpoch() internal { blockCount = blockCount.add(1); if ((blockCount.mod(_BLOCKS_PER_ERA) == 0)) { rewardEra = rewardEra + 1; } reAdjustDifficulty(); //make the latest ethereum block hash a part of the next challenge for PoW to prevent pre-mining future blocks //do this last since this is a protection mechanism in the mint() function challengeNumber = blockhash(block.number - 1); } //---------------------VIEW FUNCTIONS------------------------------------- // ------------------------------------------------------------------------ // Returns the amount of tokens approved by the owner that can be // transferred to the spender's account // ------------------------------------------------------------------------ function allowance(address tokenOwner, address spender) public view returns(uint remaining) { return allowed[tokenOwner][spender]; } // ------------------------------------------------------------------------ // Total supply // ------------------------------------------------------------------------ function totalSupply() public view returns(uint) { return _totalSupply; } // ------------------------------------------------------------------------ // Current supply // ------------------------------------------------------------------------ function currentSupply() public view returns(uint) { return _totalSupply; } // ------------------------------------------------------------------------ // Get the token balance for account `tokenOwner` // ------------------------------------------------------------------------ function balanceOf(address tokenOwner) public view returns(uint balance) { return balances[tokenOwner]; } // ------------------------------------------------------------------------ // This is a recent ethereum block hash, used to prevent pre-mining future blocks // ------------------------------------------------------------------------ function getChallengeNumber() public view returns(bytes32) { return challengeNumber; } // ------------------------------------------------------------------------ // The number of zeroes the digest of the PoW solution requires. Auto adjusts // ------------------------------------------------------------------------ function getMiningDifficulty() public view returns(uint) { return _MAXIMUM_TARGET.div(miningTarget); } // ------------------------------------------------------------------------ // Returns the mining target // ------------------------------------------------------------------------ function getMiningTarget() public view returns(uint) { return miningTarget; } // ------------------------------------------------------------------------ // Gets the mining reward // ------------------------------------------------------------------------ function getMiningReward() public view returns(uint) { if (tokensBurned >= (2 ** 226)) return 0; //we have burned too many tokens, we can't keep a track of it anymore! if(tokensBurned<=tokensMined) return 0; //this cannot happen uint reward_amount = (tokensBurned.sub(tokensMined)).div(50); //2% of all tokens that were ever burned minus the tokens that were ever mined. return reward_amount; } //---------------------EXTERNAL FUNCTIONS---------------------------------- // ------------------------------------------------------------------------ // Don't accept ETH // ------------------------------------------------------------------------ function () external payable { revert(); } //---------------------OTHER----------------------------------------------- // ------------------------------------------------------------------------ // Owner can transfer out any accidentally sent ERC20 tokens // ------------------------------------------------------------------------ function transferAnyERC20Token(address tokenAddress, uint tokens) public onlyOwner returns(bool success) { return ERC20Interface(tokenAddress).transfer(owner, tokens); } // ------------------------------------------------------------------------ //help debug mining software // ------------------------------------------------------------------------ function getMintDigest(uint256 nonce, bytes32 challenge_digest, bytes32 challenge_number) public view returns(bytes32 digesttest) { bytes32 digest = keccak256(abi.encodePacked(challenge_number, msg.sender, nonce)); return digest; } // ------------------------------------------------------------------------ //help debug mining software // ------------------------------------------------------------------------ function checkMintSolution(uint256 nonce, bytes32 challenge_digest, bytes32 challenge_number, uint testTarget) public view returns(bool success) { bytes32 digest = keccak256(abi.encodePacked(challenge_number, msg.sender, nonce)); if (uint256(digest) > testTarget) revert(); return (digest == challenge_digest); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"blockCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"lastRewardEthBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getMiningDifficulty","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes32","name":"challenge_digest","type":"bytes32"}],"name":"mint","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"approveAndCallLock","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address[]","name":"receivers","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"multiTransfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"switchApproveLock","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"_BLOCKS_PER_ERA","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"rootTransfer","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"rewardEra","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getMiningTarget","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"getBlockAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"_totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"addToBlacklist","type":"address"}],"name":"addToBlacklist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"mintLock","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getMiningReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"switchTransferLock","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getChallengeNumber","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"removeFromBlacklist","type":"address"}],"name":"removeFromBlacklist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"approveLock","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"difficulty","type":"uint256"}],"name":"setDifficulty","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"removeFromRoot","type":"address"}],"name":"removeFromRootAccounts","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"confirmWhitelist","type":"address"}],"name":"confirmWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"confirmBlacklist","type":"address"}],"name":"confirmBlacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"lastRewardTo","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"tokenOwner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"transferLock","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"currentSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"acceptOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"minerAddress","type":"address"}],"name":"getBlockAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes32","name":"challenge_digest","type":"bytes32"},{"internalType":"bytes32","name":"challenge_number","type":"bytes32"},{"internalType":"uint256","name":"testTarget","type":"uint256"}],"name":"checkMintSolution","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lastTransferTo","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"switchMintLock","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"_MAXIMUM_TARGET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"miningTarget","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"removeFromWhitelist","type":"address"}],"name":"removeFromWhitelist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"challengeNumber","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"addToRoot","type":"address"}],"name":"addToRootAccounts","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes32","name":"challenge_digest","type":"bytes32"},{"internalType":"bytes32","name":"challenge_number","type":"bytes32"}],"name":"getMintDigest","outputs":[{"internalType":"bytes32","name":"digesttest","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokensGenerated","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lastMiningOccured","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"confirmRoot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"rootTransferLock","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"switchRootTransferLock","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalGasSpent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"switchApproveAndCallLock","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"lastRewardAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"switchTransferFromLock","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"approveAndCall","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"latestDifficultyPeriodStarted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"newOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"transferAnyERC20Token","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"tokenOwner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"remaining","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"getBlockMiner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"addToWhitelist","type":"address"}],"name":"addToWhitelist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"transferFromLock","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokensBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"tokensMined","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward_amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"epochCount","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"newChallengeNumber","type":"bytes32"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenOwner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"Transfer","type":"event"}]
Contract Creation Code
60806040526000600160146101000a81548160ff0219169083151502179055506000600160156101000a81548160ff0219169083151502179055506000600160166101000a81548160ff0219169083151502179055506000600160176101000a81548160ff0219169083151502179055506000600160186101000a81548160ff0219169083151502179055506000600160196101000a81548160ff02191690831515021790555060006001601a6101000a81548160ff0219169083151502179055506301406f3f6019557d040000000000000000000000000000000000000000000000000000000000601a55348015620000f857600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146200019357600080fd5b600160149054906101000a900460ff1615620001ae57600080fd5b60018060146101000a81548160ff0219169083151502179055506008601860006101000a81548160ff021916908360ff1602179055506040518060400160405280600d81526020017f42757474436f696e2076322e3000000000000000000000000000000000000000815250601690805190602001906200023192919062000826565b506040518060400160405280600681526020017f3078425554540000000000000000000000000000000000000000000000000000815250601790805190602001906200027f92919062000826565b50660bebc1ffffffed601b8190555060006008819055506000801b601381905550426009819055506000600a8190555033601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555043600c819055507d040000000000000000000000000000000000000000000000000000000000600d819055506001600e819055506001600f81905550601b54601081905550600060118190555060006012819055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6010546040518082815260200191505060405180910390a3601054601d60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062000486620004ae60201b60201c565b620004a23a6012546200052360201b620058ba1790919060201c565b601281905550620008d5565b620004cb60016008546200052360201b620058ba1790919060201c565b6008819055506000620004f1601954600854620005ac60201b62005afa1790919060201c565b141562000505576001600e5401600e819055505b62000515620005fe60201b60201c565b506001430340601381905550565b600080828401905083811015620005a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000620005f683836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f00000000000000008152506200064a60201b60201c565b905092915050565b60006200063679026d74d4927727023acef662489b14a98a0bf02f52b5398e0803600d546200071060201b620059ea1790919060201c565b600d8190555043600c819055506001905090565b6000808314158290620006fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015620006bf578082015181840152602081019050620006a2565b50505050905090810190601f168015620006ed5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508284816200070657fe5b0690509392505050565b60006200075a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506200076260201b60201c565b905092915050565b600083831115829062000813576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015620007d7578082015181840152602081019050620007ba565b50505050905090810190601f168015620008055780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200086957805160ff19168380011785556200089a565b828001600101855582156200089a579182015b82811115620008995782518255916020019190600101906200087c565b5b509050620008a99190620008ad565b5090565b620008d291905b80821115620008ce576000816000905550600101620008b4565b5090565b90565b615d3f80620008e56000396000f3fe6080604052600436106103fa5760003560e01c806379ba509711610213578063a9059cbb11610123578063d4ee1d90116100ab578063e43252d71161007a578063e43252d71461179e578063e439f537146117ef578063e7873b581461181e578063f2fde38b14611849578063fc6065f01461189a576103fa565b8063d4ee1d90146115d4578063dc39d06d1461162b578063dd62ed3e1461169e578063dfb643a514611723576103fa565b8063b66a2074116100f2578063b66a207414611446578063bafedcaa1461145d578063c9b3ffd914611488578063cae9ca511461149f578063cb9ae707146115a9576103fa565b8063a9059cbb14611362578063ad6973af146113d5578063b05e416d14611404578063b474682a1461141b576103fa565b80638ae0368b116101a657806397566aa01161017557806397566aa0146111cd57806398ff1ba114611230578063996e81a71461125b578063a3fbeb1914611286578063a457c2d7146112ef576103fa565b80638ae0368b1461106a5780638da5cb5b146110955780638f88ef52146110ec57806395d89b411461113d576103fa565b806386950154116101e25780638695015414610fac57806387a2a9d614610fc35780638a769d3514610fee5780638ab1d68114611019576103fa565b806379ba509714610e685780637fa6ca3914610e7f57806381269a5614610ee457806384c09a3c14610f55576103fa565b8063395093511161030e5780635b166165116102a15780636f505882116102705780636f50588214610ce95780636fd396d614610d5257806370a0823114610da957806373124ced14610e0e578063771282f614610e3d576103fa565b80635b16616514610bad578063602512e114610bdc57806368c2e01c14610c2f578063694d3c9214610c80576103fa565b8063490203a7116102dd578063490203a714610aef5780634aa2efd214610b1a5780634ef3762814610b31578063537df3b614610b5c576103fa565b806339509351146109d15780633eaaf86b14610a4457806344337ea114610a6f578063488e7f2d14610ac0576103fa565b80631e89d54511610391578063277aa7c711610360578063277aa7c7146108685780632d38bf7a146108fb578063313ce5671461092657806332e9970814610957578063350c936514610982576103fa565b80631e89d5451461063a5780631f0890c214610793578063229289d0146107aa57806323b872dd146107d5576103fa565b806317da485f116103cd57806317da485f146105585780631801fbe51461058357806318160ddd146105e05780631a5cbe651461060b576103fa565b806306fdde03146103ff57806307225b4d1461048f578063095ea7b3146104ba578063163aa00d1461052d575b600080fd5b34801561040b57600080fd5b506104146118c5565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610454578082015181840152602081019050610439565b50505050905090810190601f1680156104815780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561049b57600080fd5b506104a4611963565b6040518082815260200191505060405180910390f35b3480156104c657600080fd5b50610513600480360360408110156104dd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611969565b604051808215151515815260200191505060405180910390f35b34801561053957600080fd5b50610542611b1a565b6040518082815260200191505060405180910390f35b34801561056457600080fd5b5061056d611b20565b6040518082815260200191505060405180910390f35b34801561058f57600080fd5b506105c6600480360360408110156105a657600080fd5b810190808035906020019092919080359060200190929190505050611b3e565b604051808215151515815260200191505060405180910390f35b3480156105ec57600080fd5b506105f5611f76565b6040518082815260200191505060405180910390f35b34801561061757600080fd5b50610620611f80565b604051808215151515815260200191505060405180910390f35b34801561064657600080fd5b506107916004803603604081101561065d57600080fd5b810190808035906020019064010000000081111561067a57600080fd5b82018360208201111561068c57600080fd5b803590602001918460208302840111640100000000831117156106ae57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561070e57600080fd5b82018360208201111561072057600080fd5b8035906020019184602083028401116401000000008311171561074257600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050611f93565b005b34801561079f57600080fd5b506107a8611fe5565b005b3480156107b657600080fd5b506107bf6120bb565b6040518082815260200191505060405180910390f35b3480156107e157600080fd5b5061084e600480360360608110156107f857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506120c1565b604051808215151515815260200191505060405180910390f35b34801561087457600080fd5b506108e16004803603606081101561088b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612adf565b604051808215151515815260200191505060405180910390f35b34801561090757600080fd5b50610910612dfb565b6040518082815260200191505060405180910390f35b34801561093257600080fd5b5061093b612e01565b604051808260ff1660ff16815260200191505060405180910390f35b34801561096357600080fd5b5061096c612e14565b6040518082815260200191505060405180910390f35b34801561098e57600080fd5b506109bb600480360360208110156109a557600080fd5b8101908080359060200190929190505050612e1e565b6040518082815260200191505060405180910390f35b3480156109dd57600080fd5b50610a2a600480360360408110156109f457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612e3b565b604051808215151515815260200191505060405180910390f35b348015610a5057600080fd5b50610a596130f6565b6040518082815260200191505060405180910390f35b348015610a7b57600080fd5b50610abe60048036036020811015610a9257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506130fc565b005b348015610acc57600080fd5b50610ad5613308565b604051808215151515815260200191505060405180910390f35b348015610afb57600080fd5b50610b0461331b565b6040518082815260200191505060405180910390f35b348015610b2657600080fd5b50610b2f613396565b005b348015610b3d57600080fd5b50610b4661346c565b6040518082815260200191505060405180910390f35b348015610b6857600080fd5b50610bab60048036036020811015610b7f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613476565b005b348015610bb957600080fd5b50610bc26135d1565b604051808215151515815260200191505060405180910390f35b348015610be857600080fd5b50610c1560048036036020811015610bff57600080fd5b81019080803590602001909291905050506135e4565b604051808215151515815260200191505060405180910390f35b348015610c3b57600080fd5b50610c7e60048036036020811015610c5257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061370f565b005b348015610c8c57600080fd5b50610ccf60048036036020811015610ca357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061386a565b604051808215151515815260200191505060405180910390f35b348015610cf557600080fd5b50610d3860048036036020811015610d0c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613916565b604051808215151515815260200191505060405180910390f35b348015610d5e57600080fd5b50610d676139c2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610db557600080fd5b50610df860048036036020811015610dcc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506139e8565b6040518082815260200191505060405180910390f35b348015610e1a57600080fd5b50610e23613a31565b604051808215151515815260200191505060405180910390f35b348015610e4957600080fd5b50610e52613a44565b6040518082815260200191505060405180910390f35b348015610e7457600080fd5b50610e7d613a4e565b005b348015610e8b57600080fd5b50610ece60048036036020811015610ea257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613beb565b6040518082815260200191505060405180910390f35b348015610ef057600080fd5b50610f3b60048036036080811015610f0757600080fd5b8101908080359060200190929190803590602001909291908035906020019092919080359060200190929190505050613c34565b604051808215151515815260200191505060405180910390f35b348015610f6157600080fd5b50610f6a613cbd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610fb857600080fd5b50610fc1613ce3565b005b348015610fcf57600080fd5b50610fd8613db9565b6040518082815260200191505060405180910390f35b348015610ffa57600080fd5b50611003613dbf565b6040518082815260200191505060405180910390f35b34801561102557600080fd5b506110686004803603602081101561103c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613dc5565b005b34801561107657600080fd5b5061107f613f20565b6040518082815260200191505060405180910390f35b3480156110a157600080fd5b506110aa613f26565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156110f857600080fd5b5061113b6004803603602081101561110f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613f4b565b005b34801561114957600080fd5b506111526140ff565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015611192578082015181840152602081019050611177565b50505050905090810190601f1680156111bf5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156111d957600080fd5b5061121a600480360360608110156111f057600080fd5b8101908080359060200190929190803590602001909291908035906020019092919050505061419d565b6040518082815260200191505060405180910390f35b34801561123c57600080fd5b50611245614213565b6040518082815260200191505060405180910390f35b34801561126757600080fd5b50611270614219565b6040518082815260200191505060405180910390f35b34801561129257600080fd5b506112d5600480360360208110156112a957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061421f565b604051808215151515815260200191505060405180910390f35b3480156112fb57600080fd5b506113486004803603604081101561131257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050614375565b604051808215151515815260200191505060405180910390f35b34801561136e57600080fd5b506113bb6004803603604081101561138557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050614630565b604051808215151515815260200191505060405180910390f35b3480156113e157600080fd5b506113ea614eb8565b604051808215151515815260200191505060405180910390f35b34801561141057600080fd5b50611419614ecb565b005b34801561142757600080fd5b50611430614fa1565b6040518082815260200191505060405180910390f35b34801561145257600080fd5b5061145b614fa7565b005b34801561146957600080fd5b5061147261507d565b6040518082815260200191505060405180910390f35b34801561149457600080fd5b5061149d615083565b005b3480156114ab57600080fd5b5061158f600480360360608110156114c257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561150957600080fd5b82018360208201111561151b57600080fd5b8035906020019184600183028401116401000000008311171561153d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050615159565b604051808215151515815260200191505060405180910390f35b3480156115b557600080fd5b506115be615414565b6040518082815260200191505060405180910390f35b3480156115e057600080fd5b506115e961541a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561163757600080fd5b506116846004803603604081101561164e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050615440565b604051808215151515815260200191505060405180910390f35b3480156116aa57600080fd5b5061170d600480360360408110156116c157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050615586565b6040518082815260200191505060405180910390f35b34801561172f57600080fd5b5061175c6004803603602081101561174657600080fd5b810190808035906020019092919050505061560d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156117aa57600080fd5b506117ed600480360360208110156117c157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061564a565b005b3480156117fb57600080fd5b506118046157fe565b604051808215151515815260200191505060405180910390f35b34801561182a57600080fd5b50611833615811565b6040518082815260200191505060405180910390f35b34801561185557600080fd5b506118986004803603602081101561186c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050615817565b005b3480156118a657600080fd5b506118af6158b4565b6040518082815260200191505060405180910390f35b60168054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561195b5780601f106119305761010080835404028352916020019161195b565b820191906000526020600020905b81548152906001019060200180831161193e57829003601f168201915b505050505081565b60085481565b6000600160169054906101000a900460ff161580156119d25750600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6119d857fe5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611a0f57fe5b81601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a3611b0a3a6012546158ba90919063ffffffff16565b6012819055506001905092915050565b600b5481565b6000611b39600d54601a5461594290919063ffffffff16565b905090565b6000600160179054906101000a900460ff1680611ba45750600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611bae57600080fd5b6000611bb861331b565b90506000811415611bc857600080fd5b7c0400000000000000000000000000000000000000000000000000000000600f5410611bf357600080fd5b60006013543386604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018281526020019350505050604051602081830303815290604052805190602001209050838114611c6b57600080fd5b600d548160001c1115611c7d57600080fd5b6000601e6000601354815260200190815260200160002054905081601e60006013548152602001908152602001600020819055506000801b8114611cc057600080fd5b33601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600a8190555043600b81905550611d1761598c565b3373ffffffffffffffffffffffffffffffffffffffff167fcf6fbb9dcea7d07263ab4f5c3a92f53af33dffc421d9d121e1c74b307e68189d8460085460135460405180848152602001838152602001828152602001935050505060405180910390a2611dcb83601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546158ba90919063ffffffff16565b601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611e23836011546158ba90919063ffffffff16565b601181905550611e3e83601b546158ba90919063ffffffff16565b601b819055503360056000600854815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508260066000600854815260200190815260200160002081905550611f0483600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546158ba90919063ffffffff16565b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555042600981905550611f633a6012546158ba90919063ffffffff16565b6012819055506001935050505092915050565b6000601b54905090565b600160159054906101000a900460ff1681565b60008090505b8251811015611fe057611fd2838281518110611fb157fe5b6020026020010151838381518110611fc557fe5b6020026020010151614630565b508080600101915050611f99565b505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806120895750600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61208f57fe5b600160169054906101000a900460ff1615600160166101000a81548160ff021916908315150217905550565b60195481565b6000600160199054906101000a900460ff16156120da57fe5b601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482111561212357fe5b601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211156121a957fe5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156121e057fe5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156124a957600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3612368601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601d60008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546158ba90919063ffffffff16565b601d60008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506123ff601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600f546158ba90919063ffffffff16565b600f81905550612459601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601b546159ea90919063ffffffff16565b601b819055506000601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612ab9565b60006124bf60648461594290919063ffffffff16565b9050600081905060006124ed6124de83856158ba90919063ffffffff16565b866159ea90919063ffffffff16565b90508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a36125e385601c60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546159ea90919063ffffffff16565b601c60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506126b585601d60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546159ea90919063ffffffff16565b601d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061274a81601d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546158ba90919063ffffffff16565b601d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161461294357601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36128dd82601d6000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546158ba90919063ffffffff16565b601d6000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a36129fb83601d60008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546158ba90919063ffffffff16565b601d60008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612a5383600f546158ba90919063ffffffff16565b600f81905550612a6e83601b546159ea90919063ffffffff16565b601b8190555086601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505b612ace3a6012546158ba90919063ffffffff16565b601281905550600190509392505050565b6000600160189054906101000a900460ff16158015612b9e57506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480612b9d5750600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b5b612ba457fe5b612bf682601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546159ea90919063ffffffff16565b601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612c8b82601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546158ba90919063ffffffff16565b601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612d8457612d7d826010546158ba90919063ffffffff16565b6010819055505b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612dd557612dce82600f546158ba90919063ffffffff16565b600f819055505b612dea3a6012546158ba90919063ffffffff16565b601281905550600190509392505050565b600e5481565b601860009054906101000a900460ff1681565b6000600d54905090565b600060066000838152602001908152602001600020549050919050565b6000600160169054906101000a900460ff16158015612ea45750600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612eaa57fe5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ee157fe5b612f7082601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546158ba90919063ffffffff16565b601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36130e63a6012546158ba90919063ffffffff16565b6012819055506001905092915050565b601b5481565b600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561315357600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806131f75750600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6131fd57fe5b6001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600160179054906101000a900460ff1681565b60007c0400000000000000000000000000000000000000000000000000000000600f541061334c5760009050613393565b601154600f54116133605760009050613393565b600061338c603261337e601154600f546159ea90919063ffffffff16565b61594290919063ffffffff16565b9050809150505b90565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061343a5750600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61344057fe5b6001601a9054906101000a900460ff16156001601a6101000a81548160ff021916908315150217905550565b6000601354905090565b600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166134cc57600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806135705750600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61357657fe5b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600160169054906101000a900460ff1681565b6000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561363a57fe5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806136de5750600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6136e457fe5b81600d819055506137003a6012546158ba90919063ffffffff16565b60128190555060019050919050565b600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661376557600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806138095750600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61380f57fe5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166138c257600080fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661396e57600080fd5b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6001601a9054906101000a900460ff1681565b6000601b54905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613aa857600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600080833387604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018281526020019350505050604051602081830303815290604052805190602001209050828160001c1115613caf57600080fd5b848114915050949350505050565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480613d875750600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613d8d57fe5b600160179054906101000a900460ff1615600160176101000a81548160ff021916908315150217905550565b601a5481565b600d5481565b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613e1b57600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480613ebf5750600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613ec557fe5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60135481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613fa257600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806140465750600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61404c57fe5b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60178054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156141955780601f1061416a57610100808354040283529160200191614195565b820191906000526020600020905b81548152906001019060200180831161417857829003601f168201915b505050505081565b600080823386604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018281526020019350505050604051602081830303815290604052805190602001209050809150509392505050565b60105481565b60095481565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661427757600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061431b5750600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61432157fe5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600160169054906101000a900460ff161580156143de5750600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6143e457fe5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561441b57fe5b6144aa82601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546159ea90919063ffffffff16565b601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36146203a6012546158ba90919063ffffffff16565b6012819055506001905092915050565b60006001601a9054906101000a900460ff161561464957fe5b601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482111561469257fe5b600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156146c957fe5b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561499257600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3614851601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601d60008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546158ba90919063ffffffff16565b601d60008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506148e8601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600f546158ba90919063ffffffff16565b600f81905550614942601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601b546159ea90919063ffffffff16565b601b819055506000601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614e93565b60006149a860648461594290919063ffffffff16565b9050600081905060006149d66149c783856158ba90919063ffffffff16565b866159ea90919063ffffffff16565b90508573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3614a8f85601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546159ea90919063ffffffff16565b601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614b2481601d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546158ba90919063ffffffff16565b601d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614614d1d57601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3614cb782601d6000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546158ba90919063ffffffff16565b601d6000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3614dd583601d60008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546158ba90919063ffffffff16565b601d60008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614e2d83600f546158ba90919063ffffffff16565b600f81905550614e4883601b546159ea90919063ffffffff16565b601b8190555033601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505b614ea83a6012546158ba90919063ffffffff16565b6012819055506001905092915050565b600160189054906101000a900460ff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480614f6f5750600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b614f7557fe5b600160189054906101000a900460ff1615600160186101000a81548160ff021916908315150217905550565b60125481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061504b5750600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61505157fe5b600160159054906101000a900460ff1615600160156101000a81548160ff021916908315150217905550565b600a5481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806151275750600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61512d57fe5b600160199054906101000a900460ff1615600160196101000a81548160ff021916908315150217905550565b6000600160159054906101000a900460ff161580156151c25750600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6151c857fe5b82601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040518082815260200191505060405180910390a38373ffffffffffffffffffffffffffffffffffffffff16638f4ffcb1338530866040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561538757808201518184015260208101905061536c565b50505050905090810190601f1680156153b45780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156153d657600080fd5b505af11580156153ea573d6000803e3d6000fd5b505050506154033a6012546158ba90919063ffffffff16565b601281905550600190509392505050565b600c5481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461549b57600080fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561554357600080fd5b505af1158015615557573d6000803e3d6000fd5b505050506040513d602081101561556d57600080fd5b8101908080519060200190929190505050905092915050565b6000601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60006005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156156a157600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806157455750600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61574b57fe5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600160199054906101000a900460ff1681565b600f5481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461587057600080fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60115481565b600080828401905083811015615938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600061598483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250615a34565b905092915050565b6159a260016008546158ba90919063ffffffff16565b60088190555060006159c1601954600854615afa90919063ffffffff16565b14156159d4576001600e5401600e819055505b6159dc615b44565b506001430340601381905550565b6000615a2c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250615b89565b905092915050565b60008083118290615ae0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015615aa5578082015181840152602081019050615a8a565b50505050905090810190601f168015615ad25780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581615aec57fe5b049050809150509392505050565b6000615b3c83836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000815250615c49565b905092915050565b6000615b7579026d74d4927727023acef662489b14a98a0bf02f52b5398e0803600d546159ea90919063ffffffff16565b600d8190555043600c819055506001905090565b6000838311158290615c36576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015615bfb578082015181840152602081019050615be0565b50505050905090810190601f168015615c285780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000808314158290615cf6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015615cbb578082015181840152602081019050615ca0565b50505050905090810190601f168015615ce85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50828481615d0057fe5b069050939250505056fea265627a7a7231582036570dbec0381e484ff05eaac2b4d140b643970ea91f1adf8fe85a0b83046e7d64736f6c634300050b0032
Deployed Bytecode
0x6080604052600436106103fa5760003560e01c806379ba509711610213578063a9059cbb11610123578063d4ee1d90116100ab578063e43252d71161007a578063e43252d71461179e578063e439f537146117ef578063e7873b581461181e578063f2fde38b14611849578063fc6065f01461189a576103fa565b8063d4ee1d90146115d4578063dc39d06d1461162b578063dd62ed3e1461169e578063dfb643a514611723576103fa565b8063b66a2074116100f2578063b66a207414611446578063bafedcaa1461145d578063c9b3ffd914611488578063cae9ca511461149f578063cb9ae707146115a9576103fa565b8063a9059cbb14611362578063ad6973af146113d5578063b05e416d14611404578063b474682a1461141b576103fa565b80638ae0368b116101a657806397566aa01161017557806397566aa0146111cd57806398ff1ba114611230578063996e81a71461125b578063a3fbeb1914611286578063a457c2d7146112ef576103fa565b80638ae0368b1461106a5780638da5cb5b146110955780638f88ef52146110ec57806395d89b411461113d576103fa565b806386950154116101e25780638695015414610fac57806387a2a9d614610fc35780638a769d3514610fee5780638ab1d68114611019576103fa565b806379ba509714610e685780637fa6ca3914610e7f57806381269a5614610ee457806384c09a3c14610f55576103fa565b8063395093511161030e5780635b166165116102a15780636f505882116102705780636f50588214610ce95780636fd396d614610d5257806370a0823114610da957806373124ced14610e0e578063771282f614610e3d576103fa565b80635b16616514610bad578063602512e114610bdc57806368c2e01c14610c2f578063694d3c9214610c80576103fa565b8063490203a7116102dd578063490203a714610aef5780634aa2efd214610b1a5780634ef3762814610b31578063537df3b614610b5c576103fa565b806339509351146109d15780633eaaf86b14610a4457806344337ea114610a6f578063488e7f2d14610ac0576103fa565b80631e89d54511610391578063277aa7c711610360578063277aa7c7146108685780632d38bf7a146108fb578063313ce5671461092657806332e9970814610957578063350c936514610982576103fa565b80631e89d5451461063a5780631f0890c214610793578063229289d0146107aa57806323b872dd146107d5576103fa565b806317da485f116103cd57806317da485f146105585780631801fbe51461058357806318160ddd146105e05780631a5cbe651461060b576103fa565b806306fdde03146103ff57806307225b4d1461048f578063095ea7b3146104ba578063163aa00d1461052d575b600080fd5b34801561040b57600080fd5b506104146118c5565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610454578082015181840152602081019050610439565b50505050905090810190601f1680156104815780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561049b57600080fd5b506104a4611963565b6040518082815260200191505060405180910390f35b3480156104c657600080fd5b50610513600480360360408110156104dd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611969565b604051808215151515815260200191505060405180910390f35b34801561053957600080fd5b50610542611b1a565b6040518082815260200191505060405180910390f35b34801561056457600080fd5b5061056d611b20565b6040518082815260200191505060405180910390f35b34801561058f57600080fd5b506105c6600480360360408110156105a657600080fd5b810190808035906020019092919080359060200190929190505050611b3e565b604051808215151515815260200191505060405180910390f35b3480156105ec57600080fd5b506105f5611f76565b6040518082815260200191505060405180910390f35b34801561061757600080fd5b50610620611f80565b604051808215151515815260200191505060405180910390f35b34801561064657600080fd5b506107916004803603604081101561065d57600080fd5b810190808035906020019064010000000081111561067a57600080fd5b82018360208201111561068c57600080fd5b803590602001918460208302840111640100000000831117156106ae57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561070e57600080fd5b82018360208201111561072057600080fd5b8035906020019184602083028401116401000000008311171561074257600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050611f93565b005b34801561079f57600080fd5b506107a8611fe5565b005b3480156107b657600080fd5b506107bf6120bb565b6040518082815260200191505060405180910390f35b3480156107e157600080fd5b5061084e600480360360608110156107f857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506120c1565b604051808215151515815260200191505060405180910390f35b34801561087457600080fd5b506108e16004803603606081101561088b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612adf565b604051808215151515815260200191505060405180910390f35b34801561090757600080fd5b50610910612dfb565b6040518082815260200191505060405180910390f35b34801561093257600080fd5b5061093b612e01565b604051808260ff1660ff16815260200191505060405180910390f35b34801561096357600080fd5b5061096c612e14565b6040518082815260200191505060405180910390f35b34801561098e57600080fd5b506109bb600480360360208110156109a557600080fd5b8101908080359060200190929190505050612e1e565b6040518082815260200191505060405180910390f35b3480156109dd57600080fd5b50610a2a600480360360408110156109f457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612e3b565b604051808215151515815260200191505060405180910390f35b348015610a5057600080fd5b50610a596130f6565b6040518082815260200191505060405180910390f35b348015610a7b57600080fd5b50610abe60048036036020811015610a9257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506130fc565b005b348015610acc57600080fd5b50610ad5613308565b604051808215151515815260200191505060405180910390f35b348015610afb57600080fd5b50610b0461331b565b6040518082815260200191505060405180910390f35b348015610b2657600080fd5b50610b2f613396565b005b348015610b3d57600080fd5b50610b4661346c565b6040518082815260200191505060405180910390f35b348015610b6857600080fd5b50610bab60048036036020811015610b7f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613476565b005b348015610bb957600080fd5b50610bc26135d1565b604051808215151515815260200191505060405180910390f35b348015610be857600080fd5b50610c1560048036036020811015610bff57600080fd5b81019080803590602001909291905050506135e4565b604051808215151515815260200191505060405180910390f35b348015610c3b57600080fd5b50610c7e60048036036020811015610c5257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061370f565b005b348015610c8c57600080fd5b50610ccf60048036036020811015610ca357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061386a565b604051808215151515815260200191505060405180910390f35b348015610cf557600080fd5b50610d3860048036036020811015610d0c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613916565b604051808215151515815260200191505060405180910390f35b348015610d5e57600080fd5b50610d676139c2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610db557600080fd5b50610df860048036036020811015610dcc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506139e8565b6040518082815260200191505060405180910390f35b348015610e1a57600080fd5b50610e23613a31565b604051808215151515815260200191505060405180910390f35b348015610e4957600080fd5b50610e52613a44565b6040518082815260200191505060405180910390f35b348015610e7457600080fd5b50610e7d613a4e565b005b348015610e8b57600080fd5b50610ece60048036036020811015610ea257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613beb565b6040518082815260200191505060405180910390f35b348015610ef057600080fd5b50610f3b60048036036080811015610f0757600080fd5b8101908080359060200190929190803590602001909291908035906020019092919080359060200190929190505050613c34565b604051808215151515815260200191505060405180910390f35b348015610f6157600080fd5b50610f6a613cbd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610fb857600080fd5b50610fc1613ce3565b005b348015610fcf57600080fd5b50610fd8613db9565b6040518082815260200191505060405180910390f35b348015610ffa57600080fd5b50611003613dbf565b6040518082815260200191505060405180910390f35b34801561102557600080fd5b506110686004803603602081101561103c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613dc5565b005b34801561107657600080fd5b5061107f613f20565b6040518082815260200191505060405180910390f35b3480156110a157600080fd5b506110aa613f26565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156110f857600080fd5b5061113b6004803603602081101561110f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613f4b565b005b34801561114957600080fd5b506111526140ff565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015611192578082015181840152602081019050611177565b50505050905090810190601f1680156111bf5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156111d957600080fd5b5061121a600480360360608110156111f057600080fd5b8101908080359060200190929190803590602001909291908035906020019092919050505061419d565b6040518082815260200191505060405180910390f35b34801561123c57600080fd5b50611245614213565b6040518082815260200191505060405180910390f35b34801561126757600080fd5b50611270614219565b6040518082815260200191505060405180910390f35b34801561129257600080fd5b506112d5600480360360208110156112a957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061421f565b604051808215151515815260200191505060405180910390f35b3480156112fb57600080fd5b506113486004803603604081101561131257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050614375565b604051808215151515815260200191505060405180910390f35b34801561136e57600080fd5b506113bb6004803603604081101561138557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050614630565b604051808215151515815260200191505060405180910390f35b3480156113e157600080fd5b506113ea614eb8565b604051808215151515815260200191505060405180910390f35b34801561141057600080fd5b50611419614ecb565b005b34801561142757600080fd5b50611430614fa1565b6040518082815260200191505060405180910390f35b34801561145257600080fd5b5061145b614fa7565b005b34801561146957600080fd5b5061147261507d565b6040518082815260200191505060405180910390f35b34801561149457600080fd5b5061149d615083565b005b3480156114ab57600080fd5b5061158f600480360360608110156114c257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561150957600080fd5b82018360208201111561151b57600080fd5b8035906020019184600183028401116401000000008311171561153d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050615159565b604051808215151515815260200191505060405180910390f35b3480156115b557600080fd5b506115be615414565b6040518082815260200191505060405180910390f35b3480156115e057600080fd5b506115e961541a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561163757600080fd5b506116846004803603604081101561164e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050615440565b604051808215151515815260200191505060405180910390f35b3480156116aa57600080fd5b5061170d600480360360408110156116c157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050615586565b6040518082815260200191505060405180910390f35b34801561172f57600080fd5b5061175c6004803603602081101561174657600080fd5b810190808035906020019092919050505061560d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156117aa57600080fd5b506117ed600480360360208110156117c157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061564a565b005b3480156117fb57600080fd5b506118046157fe565b604051808215151515815260200191505060405180910390f35b34801561182a57600080fd5b50611833615811565b6040518082815260200191505060405180910390f35b34801561185557600080fd5b506118986004803603602081101561186c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050615817565b005b3480156118a657600080fd5b506118af6158b4565b6040518082815260200191505060405180910390f35b60168054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561195b5780601f106119305761010080835404028352916020019161195b565b820191906000526020600020905b81548152906001019060200180831161193e57829003601f168201915b505050505081565b60085481565b6000600160169054906101000a900460ff161580156119d25750600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6119d857fe5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611a0f57fe5b81601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a3611b0a3a6012546158ba90919063ffffffff16565b6012819055506001905092915050565b600b5481565b6000611b39600d54601a5461594290919063ffffffff16565b905090565b6000600160179054906101000a900460ff1680611ba45750600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611bae57600080fd5b6000611bb861331b565b90506000811415611bc857600080fd5b7c0400000000000000000000000000000000000000000000000000000000600f5410611bf357600080fd5b60006013543386604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018281526020019350505050604051602081830303815290604052805190602001209050838114611c6b57600080fd5b600d548160001c1115611c7d57600080fd5b6000601e6000601354815260200190815260200160002054905081601e60006013548152602001908152602001600020819055506000801b8114611cc057600080fd5b33601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600a8190555043600b81905550611d1761598c565b3373ffffffffffffffffffffffffffffffffffffffff167fcf6fbb9dcea7d07263ab4f5c3a92f53af33dffc421d9d121e1c74b307e68189d8460085460135460405180848152602001838152602001828152602001935050505060405180910390a2611dcb83601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546158ba90919063ffffffff16565b601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611e23836011546158ba90919063ffffffff16565b601181905550611e3e83601b546158ba90919063ffffffff16565b601b819055503360056000600854815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508260066000600854815260200190815260200160002081905550611f0483600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546158ba90919063ffffffff16565b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555042600981905550611f633a6012546158ba90919063ffffffff16565b6012819055506001935050505092915050565b6000601b54905090565b600160159054906101000a900460ff1681565b60008090505b8251811015611fe057611fd2838281518110611fb157fe5b6020026020010151838381518110611fc557fe5b6020026020010151614630565b508080600101915050611f99565b505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806120895750600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61208f57fe5b600160169054906101000a900460ff1615600160166101000a81548160ff021916908315150217905550565b60195481565b6000600160199054906101000a900460ff16156120da57fe5b601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482111561212357fe5b601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211156121a957fe5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156121e057fe5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156124a957600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3612368601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601d60008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546158ba90919063ffffffff16565b601d60008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506123ff601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600f546158ba90919063ffffffff16565b600f81905550612459601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601b546159ea90919063ffffffff16565b601b819055506000601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612ab9565b60006124bf60648461594290919063ffffffff16565b9050600081905060006124ed6124de83856158ba90919063ffffffff16565b866159ea90919063ffffffff16565b90508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a36125e385601c60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546159ea90919063ffffffff16565b601c60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506126b585601d60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546159ea90919063ffffffff16565b601d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061274a81601d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546158ba90919063ffffffff16565b601d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161461294357601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36128dd82601d6000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546158ba90919063ffffffff16565b601d6000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a36129fb83601d60008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546158ba90919063ffffffff16565b601d60008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612a5383600f546158ba90919063ffffffff16565b600f81905550612a6e83601b546159ea90919063ffffffff16565b601b8190555086601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505b612ace3a6012546158ba90919063ffffffff16565b601281905550600190509392505050565b6000600160189054906101000a900460ff16158015612b9e57506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480612b9d5750600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b5b612ba457fe5b612bf682601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546159ea90919063ffffffff16565b601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612c8b82601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546158ba90919063ffffffff16565b601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612d8457612d7d826010546158ba90919063ffffffff16565b6010819055505b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612dd557612dce82600f546158ba90919063ffffffff16565b600f819055505b612dea3a6012546158ba90919063ffffffff16565b601281905550600190509392505050565b600e5481565b601860009054906101000a900460ff1681565b6000600d54905090565b600060066000838152602001908152602001600020549050919050565b6000600160169054906101000a900460ff16158015612ea45750600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612eaa57fe5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ee157fe5b612f7082601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546158ba90919063ffffffff16565b601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36130e63a6012546158ba90919063ffffffff16565b6012819055506001905092915050565b601b5481565b600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561315357600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806131f75750600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6131fd57fe5b6001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600160179054906101000a900460ff1681565b60007c0400000000000000000000000000000000000000000000000000000000600f541061334c5760009050613393565b601154600f54116133605760009050613393565b600061338c603261337e601154600f546159ea90919063ffffffff16565b61594290919063ffffffff16565b9050809150505b90565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061343a5750600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61344057fe5b6001601a9054906101000a900460ff16156001601a6101000a81548160ff021916908315150217905550565b6000601354905090565b600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166134cc57600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806135705750600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61357657fe5b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600160169054906101000a900460ff1681565b6000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561363a57fe5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806136de5750600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6136e457fe5b81600d819055506137003a6012546158ba90919063ffffffff16565b60128190555060019050919050565b600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661376557600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806138095750600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61380f57fe5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166138c257600080fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661396e57600080fd5b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6001601a9054906101000a900460ff1681565b6000601b54905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613aa857600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600080833387604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018281526020019350505050604051602081830303815290604052805190602001209050828160001c1115613caf57600080fd5b848114915050949350505050565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480613d875750600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613d8d57fe5b600160179054906101000a900460ff1615600160176101000a81548160ff021916908315150217905550565b601a5481565b600d5481565b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613e1b57600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480613ebf5750600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613ec557fe5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60135481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613fa257600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806140465750600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61404c57fe5b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60178054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156141955780601f1061416a57610100808354040283529160200191614195565b820191906000526020600020905b81548152906001019060200180831161417857829003601f168201915b505050505081565b600080823386604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018281526020019350505050604051602081830303815290604052805190602001209050809150509392505050565b60105481565b60095481565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661427757600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061431b5750600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61432157fe5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600160169054906101000a900460ff161580156143de5750600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6143e457fe5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561441b57fe5b6144aa82601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546159ea90919063ffffffff16565b601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36146203a6012546158ba90919063ffffffff16565b6012819055506001905092915050565b60006001601a9054906101000a900460ff161561464957fe5b601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482111561469257fe5b600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156146c957fe5b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561499257600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3614851601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601d60008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546158ba90919063ffffffff16565b601d60008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506148e8601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600f546158ba90919063ffffffff16565b600f81905550614942601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601b546159ea90919063ffffffff16565b601b819055506000601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614e93565b60006149a860648461594290919063ffffffff16565b9050600081905060006149d66149c783856158ba90919063ffffffff16565b866159ea90919063ffffffff16565b90508573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3614a8f85601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546159ea90919063ffffffff16565b601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614b2481601d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546158ba90919063ffffffff16565b601d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614614d1d57601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3614cb782601d6000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546158ba90919063ffffffff16565b601d6000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3614dd583601d60008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546158ba90919063ffffffff16565b601d60008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614e2d83600f546158ba90919063ffffffff16565b600f81905550614e4883601b546159ea90919063ffffffff16565b601b8190555033601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505b614ea83a6012546158ba90919063ffffffff16565b6012819055506001905092915050565b600160189054906101000a900460ff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480614f6f5750600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b614f7557fe5b600160189054906101000a900460ff1615600160186101000a81548160ff021916908315150217905550565b60125481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061504b5750600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61505157fe5b600160159054906101000a900460ff1615600160156101000a81548160ff021916908315150217905550565b600a5481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806151275750600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61512d57fe5b600160199054906101000a900460ff1615600160196101000a81548160ff021916908315150217905550565b6000600160159054906101000a900460ff161580156151c25750600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6151c857fe5b82601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040518082815260200191505060405180910390a38373ffffffffffffffffffffffffffffffffffffffff16638f4ffcb1338530866040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561538757808201518184015260208101905061536c565b50505050905090810190601f1680156153b45780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156153d657600080fd5b505af11580156153ea573d6000803e3d6000fd5b505050506154033a6012546158ba90919063ffffffff16565b601281905550600190509392505050565b600c5481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461549b57600080fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561554357600080fd5b505af1158015615557573d6000803e3d6000fd5b505050506040513d602081101561556d57600080fd5b8101908080519060200190929190505050905092915050565b6000601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60006005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156156a157600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806157455750600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61574b57fe5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600160199054906101000a900460ff1681565b600f5481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461587057600080fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60115481565b600080828401905083811015615938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600061598483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250615a34565b905092915050565b6159a260016008546158ba90919063ffffffff16565b60088190555060006159c1601954600854615afa90919063ffffffff16565b14156159d4576001600e5401600e819055505b6159dc615b44565b506001430340601381905550565b6000615a2c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250615b89565b905092915050565b60008083118290615ae0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015615aa5578082015181840152602081019050615a8a565b50505050905090810190601f168015615ad25780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581615aec57fe5b049050809150509392505050565b6000615b3c83836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000815250615c49565b905092915050565b6000615b7579026d74d4927727023acef662489b14a98a0bf02f52b5398e0803600d546159ea90919063ffffffff16565b600d8190555043600c819055506001905090565b6000838311158290615c36576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015615bfb578082015181840152602081019050615be0565b50505050905090810190601f168015615c285780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000808314158290615cf6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015615cbb578082015181840152602081019050615ca0565b50505050905090810190601f168015615ce85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50828481615d0057fe5b069050939250505056fea265627a7a7231582036570dbec0381e484ff05eaac2b4d140b643970ea91f1adf8fe85a0b83046e7d64736f6c634300050b0032
Deployed Bytecode Sourcemap
18143:18144:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34822:8;;;17342:18;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17342:18:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;17342:18:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16550:22;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16550:22:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25382:413;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25382:413:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;25382:413:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;16674:36;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16674:36:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33511:112;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33511:112:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19670:1695;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19670:1695:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19670:1695:0;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;32255:83;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32255:83:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6701:38;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6701:38:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;22124:198;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22124:198:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;22124:198:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;22124:198:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;22124:198:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;22124:198:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;22124:198:0;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;22124:198:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;22124:198:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;22124:198:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;22124:198:0;;;;;;;;;;;;;;;:::i;:::-;;8640:217;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8640:217:0;;;:::i;:::-;;17426:38;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17426:38:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27386:1794;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27386:1794:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;27386:1794:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;24525:619;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24525:619:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;24525:619:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;16793:21;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16793:21:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17397;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17397:21:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;33814:87;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33814:87:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15822:110;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15822:110:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;15822:110:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25986:484;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25986:484:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;25986:484:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;17564:24;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17564:24:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12992:407;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12992:407:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12992:407:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;6862:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6862:28:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;34092:429;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34092:429:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10357:220;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10357:220:0;;;:::i;:::-;;33174:96;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33174:96:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13607:345;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13607:345:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13607:345:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;6789:31;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6789:31:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;21588:338;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21588:338:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;21588:338:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;11329:339;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11329:339:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11329:339:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;14606:166;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14606:166:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;14606:166:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;14197;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14197:166:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;14197:166:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;17032:27;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17032:27:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;32815:115;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32815:115:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;32815:115:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7195:32;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7195:32:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;32518:85;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32518:85:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5935:183;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5935:183:0;;;:::i;:::-;;16153:115;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16153:115:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16153:115:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35949:334;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35949:334:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;35949:334:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;17065:29;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17065:29:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;9065:208;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9065:208:0;;;:::i;:::-;;17470:40;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17470:40:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16763:24;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16763:24:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12444:345;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12444:345:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12444:345:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;16945:30;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16945:30:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5556:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5556:20:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;10773:350;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10773:350:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10773:350:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;17366:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17366:20:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;17366:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35513:247;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35513:247:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;35513:247:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16850:27;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16850:27:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16605:29;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16605:29:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15010:236;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15010:236:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;15010:236:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;26662:494;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26662:494:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;26662:494:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;22551:1784;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22551:1784:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;22551:1784:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;6949:36;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6949:36:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;9481:232;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9481:232:0;;;:::i;:::-;;16912:25;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16912:25:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8198:238;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8198:238:0;;;:::i;:::-;;16640:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16640:28:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9921:232;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9921:232:0;;;:::i;:::-;;29525:480;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29525:480:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;29525:480:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;29525:480:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;29525:480:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;29525:480:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;29525:480:0;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;16716:41;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16716:41:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5582:23;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5582:23:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;35145:179;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35145:179:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;35145:179:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;31935:142;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31935:142:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;31935:142:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15476:110;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15476:110:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;15476:110:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;11873:363;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11873:363:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11873:363:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;7072:36;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7072:36:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;16820:24;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16820:24:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5830:98;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5830:98:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5830:98:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;16883:23;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16883:23:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17342:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;16550:22::-;;;;:::o;25382:413::-;25444:12;25474:11;;;;;;;;;;;25473:12;:38;;;;;25490:9;:21;25500:10;25490:21;;;;;;;;;;;;;;;;;;;;;;;;;25489:22;25473:38;25466:46;;;;25585:1;25566:21;;:7;:21;;;;25559:29;;;;25659:6;25628:7;:19;25636:10;25628:19;;;;;;;;;;;;;;;:28;25648:7;25628:28;;;;;;;;;;;;;;;:37;;;;25699:7;25678:37;;25687:10;25678:37;;;25708:6;25678:37;;;;;;;;;;;;;;;;;;25739:30;25757:11;25739:13;;:17;;:30;;;;:::i;:::-;25723:13;:46;;;;25784:4;25777:11;;25382:413;;;;:::o;16674:36::-;;;;:::o;33511:112::-;33562:4;33583:33;33603:12;;33583:15;;:19;;:33;;;;:::i;:::-;33576:40;;33511:112;:::o;19670:1695::-;19740:12;19764:8;;;;;;;;;;;:33;;;;19776:9;:21;19786:10;19776:21;;;;;;;;;;;;;;;;;;;;;;;;;19764:33;19761:46;;;19799:8;;;19761:46;19849:18;19870:17;:15;:17::i;:::-;19849:38;;19918:1;19901:13;:18;19897:32;;;19921:8;;;19897:32;19958:8;19941:12;;:26;19937:40;;19969:8;;;19937:40;20138:14;20182:15;;20199:10;20211:5;20165:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;20165:52:0;;;20155:63;;;;;;20138:80;;20293:16;20283:6;:26;20279:40;;20311:8;;;20279:40;20407:12;;20397:6;20389:15;;:30;20385:44;;;20421:8;;;20385:44;20486:16;20505:20;:37;20526:15;;20505:37;;;;;;;;;;;;20486:56;;20590:6;20550:20;:37;20571:15;;20550:37;;;;;;;;;;;:46;;;;20620:3;20608:15;;:8;:15;20604:29;;20625:8;;;20604:29;20704:10;20689:12;;:25;;;;;;;;;;;;;;;;;;20741:13;20722:16;:32;;;;20789:12;20762:24;:39;;;;20809:22;:20;:22::i;:::-;20851:10;20846:60;;;20863:13;20878:10;;20890:15;;20846:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20937:39;20962:13;20937:8;:20;20946:10;20937:20;;;;;;;;;;;;;;;;:24;;:39;;;;:::i;:::-;20914:8;:20;20923:10;20914:20;;;;;;;;;;;;;;;:62;;;;20998:30;21014:13;20998:11;;:15;;:30;;;;:::i;:::-;20984:11;:44;;;;21051:31;21068:13;21051:12;;:16;;:31;;;;:::i;:::-;21036:12;:46;;;;21115:10;21090;:22;21101:10;;21090:22;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;21159:13;21133:11;:23;21145:10;;21133:23;;;;;;;;;;;:39;;;;21206:42;21234:13;21206:11;:23;21218:10;21206:23;;;;;;;;;;;;;;;;:27;;:42;;;;:::i;:::-;21180:11;:23;21192:10;21180:23;;;;;;;;;;;;;;;:68;;;;21280:3;21260:17;:23;;;;21309:30;21327:11;21309:13;;:17;;:30;;;;:::i;:::-;21293:13;:46;;;;21354:4;21347:11;;;;;19670:1695;;;;:::o;32255:83::-;32298:4;32319:12;;32312:19;;32255:83;:::o;6701:38::-;;;;;;;;;;;;;:::o;22124:198::-;22221:9;22233:1;22221:13;;22216:100;22240:9;:16;22236:1;:20;22216:100;;;22273:34;22282:9;22292:1;22282:12;;;;;;;;;;;;;;22296:7;22304:1;22296:10;;;;;;;;;;;;;;22273:8;:34::i;:::-;;22258:3;;;;;;;22216:100;;;;22124:198;;:::o;8640:217::-;8722:5;;;;;;;;;;;8691:37;;8699:10;8691:37;;;:65;;;;8732:12;:24;8745:10;8732:24;;;;;;;;;;;;;;;;;;;;;;;;;8691:65;8684:73;;;;8839:11;;;;;;;;;;;8838:12;8824:11;;:26;;;;;;;;;;;;;;;;;;8640:217::o;17426:38::-;;;;:::o;27386:1794::-;27462:12;27492:16;;;;;;;;;;;27491:17;27484:25;;;;27553:8;:14;27562:4;27553:14;;;;;;;;;;;;;;;;27543:6;:24;;27536:32;;;;27623:7;:13;27631:4;27623:13;;;;;;;;;;;;;;;:25;27637:10;27623:25;;;;;;;;;;;;;;;;27613:6;:35;;27606:43;;;;27719:1;27694:27;;27702:4;27694:27;;;;27687:35;;;;27795:9;:15;27805:4;27795:15;;;;;;;;;;;;;;;;;;;;;;;;;27791:1310;;;27956:1;27933:42;;27942:4;27933:42;;;27960:8;:14;27969:4;27960:14;;;;;;;;;;;;;;;;27933:42;;;;;;;;;;;;;;;;;;28008:40;28033:8;:14;28042:4;28033:14;;;;;;;;;;;;;;;;28008:8;:20;28025:1;28008:20;;;;;;;;;;;;;;;;:24;;:40;;;;:::i;:::-;27985:8;:20;28002:1;27985:20;;;;;;;;;;;;;;;:63;;;;28073:32;28090:8;:14;28099:4;28090:14;;;;;;;;;;;;;;;;28073:12;;:16;;:32;;;;:::i;:::-;28058:12;:47;;;;28130:32;28147:8;:14;28156:4;28147:14;;;;;;;;;;;;;;;;28130:12;;:16;;:32;;;;:::i;:::-;28115:12;:47;;;;28189:1;28172:8;:14;28181:4;28172:14;;;;;;;;;;;;;;;:18;;;;27791:1310;;;28215:11;28229:15;28240:3;28229:6;:10;;:15;;;;:::i;:::-;28215:29;;28290:15;28308:6;28290:24;;28324:11;28338:34;28349:22;28360:10;28349:6;:10;;:22;;;;:::i;:::-;28338:6;:10;;:34;;;;:::i;:::-;28324:48;;28404:2;28389:26;;28398:4;28389:26;;;28408:6;28389:26;;;;;;;;;;;;;;;;;;28453:37;28483:6;28453:7;:13;28461:4;28453:13;;;;;;;;;;;;;;;:25;28467:10;28453:25;;;;;;;;;;;;;;;;:29;;:37;;;;:::i;:::-;28425:7;:13;28433:4;28425:13;;;;;;;;;;;;;;;:25;28439:10;28425:25;;;;;;;;;;;;;;;:65;;;;28517:26;28536:6;28517:8;:14;28526:4;28517:14;;;;;;;;;;;;;;;;:18;;:26;;;;:::i;:::-;28500:8;:14;28509:4;28500:14;;;;;;;;;;;;;;;:43;;;;28569:24;28586:6;28569:8;:12;28578:2;28569:12;;;;;;;;;;;;;;;;:16;;:24;;;;:::i;:::-;28554:8;:12;28563:2;28554:12;;;;;;;;;;;;;;;:39;;;;28634:14;;;;;;;;;;;28609:40;;28617:4;28609:40;;;28605:241;;28729:14;;;;;;;;;;;28714:42;;28723:4;28714:42;;;28745:10;28714:42;;;;;;;;;;;;;;;;;;28795:40;28824:10;28795:8;:24;28804:14;;;;;;;;;;;28795:24;;;;;;;;;;;;;;;;:28;;:40;;;;:::i;:::-;28768:8;:24;28777:14;;;;;;;;;;;28768:24;;;;;;;;;;;;;;;:67;;;;28605:241;28885:1;28862:34;;28871:4;28862:34;;;28889:6;28862:34;;;;;;;;;;;;;;;;;;28929:32;28954:6;28929:8;:20;28946:1;28929:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;28906:8;:20;28923:1;28906:20;;;;;;;;;;;;;;;:55;;;;28986:24;29003:6;28986:12;;:16;;:24;;;;:::i;:::-;28971:12;:39;;;;29035:24;29052:6;29035:12;;:16;;:24;;;;:::i;:::-;29020:12;:39;;;;29088:4;29071:14;;:21;;;;;;;;;;;;;;;;;;27791:1310;;;;29124:30;29142:11;29124:13;;:17;;:30;;;;:::i;:::-;29108:13;:46;;;;29169:4;29162:11;;27386:1794;;;;;:::o;24525:619::-;24601:12;24631:16;;;;;;;;;;;24630:17;:88;;;;;24683:5;;;;;;;;;;;24652:37;;24660:10;24652:37;;;:65;;;;24693:12;:24;24706:10;24693:24;;;;;;;;;;;;;;;;;;;;;;;;;24652:65;24630:88;24623:96;;;;24746:26;24765:6;24746:8;:14;24755:4;24746:14;;;;;;;;;;;;;;;;:18;;:26;;;;:::i;:::-;24729:8;:14;24738:4;24729:14;;;;;;;;;;;;;;;:43;;;;24795:24;24812:6;24795:8;:12;24804:2;24795:12;;;;;;;;;;;;;;;;:16;;:24;;;;:::i;:::-;24780:8;:12;24789:2;24780:12;;;;;;;;;;;;;;;:39;;;;24847:2;24832:26;;24841:4;24832:26;;;24851:6;24832:26;;;;;;;;;;;;;;;;;;24897:1;24872:27;;24880:4;24872:27;;;24868:97;;;24929:27;24949:6;24929:15;;:19;;:27;;;;:::i;:::-;24911:15;:45;;;;24868:97;25001:1;24978:25;;24986:2;24978:25;;;24974:89;;;25030:24;25047:6;25030:12;;:16;;:24;;;;:::i;:::-;25015:12;:39;;;;24974:89;25088:30;25106:11;25088:13;;:17;;:30;;;;:::i;:::-;25072:13;:46;;;;25133:4;25126:11;;24525:619;;;;;:::o;16793:21::-;;;;:::o;17397:::-;;;;;;;;;;;;;:::o;33814:87::-;33861:4;33882:12;;33875:19;;33814:87;:::o;15822:110::-;15880:4;15901:11;:24;15913:11;15901:24;;;;;;;;;;;;15894:31;;15822:110;;;:::o;25986:484::-;26065:4;26087:11;;;;;;;;;;;26086:12;:38;;;;;26103:9;:21;26113:10;26103:21;;;;;;;;;;;;;;;;;;;;;;;;;26102:22;26086:38;26079:46;;;;26198:1;26179:21;;:7;:21;;;;26172:29;;;;26273:44;26306:10;26273:7;:19;26281:10;26273:19;;;;;;;;;;;;;;;:28;26293:7;26273:28;;;;;;;;;;;;;;;;:32;;:44;;;;:::i;:::-;26241:7;:19;26249:10;26241:19;;;;;;;;;;;;;;;:28;26261:7;26241:28;;;;;;;;;;;;;;;:77;;;;26352:7;26331:59;;26340:10;26331:59;;;26361:7;:19;26369:10;26361:19;;;;;;;;;;;;;;;:28;26381:7;26361:28;;;;;;;;;;;;;;;;26331:59;;;;;;;;;;;;;;;;;;26414:30;26432:11;26414:13;;:17;;:30;;;;:::i;:::-;26398:13;:46;;;;26459:4;26452:11;;25986:484;;;;:::o;17564:24::-;;;;:::o;12992:407::-;13064:9;:25;13074:14;13064:25;;;;;;;;;;;;;;;;;;;;;;;;;13063:26;13055:35;;;;;;13173:5;;;;;;;;;;;13142:37;;13150:10;13142:37;;;:65;;;;13183:12;:24;13196:10;13183:24;;;;;;;;;;;;;;;;;;;;;;;;;13142:65;13135:73;;;;13303:4;13275:9;:25;13285:14;13275:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;13346:5;13315:12;:28;13328:14;13315:28;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;13387:5;13359:9;:25;13369:14;13359:25;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;12992:407;:::o;6862:28::-;;;;;;;;;;;;;:::o;34092:429::-;34139:4;34174:8;34157:12;;:26;34153:40;;34192:1;34185:8;;;;34153:40;34289:11;;34275:12;;:25;34272:38;;34309:1;34302:8;;;;34272:38;34346:18;34367:39;34403:2;34368:29;34385:11;;34368:12;;:16;;:29;;;;:::i;:::-;34367:35;;:39;;;;:::i;:::-;34346:60;;34501:13;34494:20;;;34092:429;;:::o;10357:220::-;10440:5;;;;;;;;;;;10409:37;;10417:10;10409:37;;;:65;;;;10450:12;:24;10463:10;10450:24;;;;;;;;;;;;;;;;;;;;;;;;;10409:65;10402:73;;;;10558:12;;;;;;;;;;;10557:13;10542:12;;:28;;;;;;;;;;;;;;;;;;10357:220::o;33174:96::-;33224:7;33248:15;;33241:22;;33174:96;:::o;13607:345::-;13688:9;:30;13698:19;13688:30;;;;;;;;;;;;;;;;;;;;;;;;;13680:39;;;;;;13805:5;;;;;;;;;;;13774:37;;13782:10;13774:37;;;:65;;;;13815:12;:24;13828:10;13815:24;;;;;;;;;;;;;;;;;;;;;;;;;13774:65;13767:73;;;;13940:5;13907:9;:30;13917:19;13907:30;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;13607:345;:::o;6789:31::-;;;;;;;;;;;;;:::o;21588:338::-;21643:12;21673:9;:21;21683:10;21673:21;;;;;;;;;;;;;;;;;;;;;;;;;21672:22;21665:30;;;;21741:5;;;;;;;;;;;21710:37;;21718:10;21710:37;;;:65;;;;21751:12;:24;21764:10;21751:24;;;;;;;;;;;;;;;;;;;;;;;;;21710:65;21703:73;;;;21836:10;21821:12;:25;;;;21870:30;21888:11;21870:13;;:17;;:30;;;;:::i;:::-;21854:13;:46;;;;21915:4;21908:11;;21588:338;;;:::o;11329:339::-;11408:12;:28;11421:14;11408:28;;;;;;;;;;;;;;;;;;;;;;;;;11400:37;;;;;;11523:5;;;;;;;;;;;11492:37;;11500:10;11492:37;;;:65;;;;11533:12;:24;11546:10;11533:24;;;;;;;;;;;;;;;;;;;;;;;;;11492:65;11485:73;;;;11656:5;11625:12;:28;11638:14;11625:28;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;11329:339;:::o;14606:166::-;14673:4;14695:9;:27;14705:16;14695:27;;;;;;;;;;;;;;;;;;;;;;;;;14687:36;;;;;;14738:9;:27;14748:16;14738:27;;;;;;;;;;;;;;;;;;;;;;;;;14731:34;;14606:166;;;:::o;14197:::-;14264:4;14286:9;:27;14296:16;14286:27;;;;;;;;;;;;;;;;;;;;;;;;;14278:36;;;;;;14329:9;:27;14339:16;14329:27;;;;;;;;;;;;;;;;;;;;;;;;;14322:34;;14197:166;;;:::o;17032:27::-;;;;;;;;;;;;;:::o;32815:115::-;32874:12;32903:8;:20;32912:10;32903:20;;;;;;;;;;;;;;;;32896:27;;32815:115;;;:::o;7195:32::-;;;;;;;;;;;;;:::o;32518:85::-;32563:4;32584:12;;32577:19;;32518:85;:::o;5935:183::-;5999:8;;;;;;;;;;;5985:22;;:10;:22;;;5977:31;;;;;;6049:8;;;;;;;;;;;6021:37;;6042:5;;;;;;;;;;;6021:37;;;;;;;;;;;;6074:8;;;;;;;;;;;6066:5;;:16;;;;;;;;;;;;;;;;;;6109:1;6090:8;;:21;;;;;;;;;;;;;;;;;;5935:183::o;16153:115::-;16215:4;16236:11;:25;16248:12;16236:25;;;;;;;;;;;;;;;;16229:32;;16153:115;;;:::o;35949:334::-;36080:12;36102:14;36146:16;36164:10;36176:5;36129:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;36129:53:0;;;36119:64;;;;;;36102:81;;36213:10;36203:6;36195:15;;:28;36191:42;;;36225:8;;;36191:42;36259:16;36249:6;:26;36241:35;;;35949:334;;;;;;:::o;17065:29::-;;;;;;;;;;;;;:::o;9065:208::-;9144:5;;;;;;;;;;;9113:37;;9121:10;9113:37;;;:65;;;;9154:12;:24;9167:10;9154:24;;;;;;;;;;;;;;;;;;;;;;;;;9113:65;9106:73;;;;9258:8;;;;;;;;;;;9257:9;9246:8;;:20;;;;;;;;;;;;;;;;;;9065:208::o;17470:40::-;;;;:::o;16763:24::-;;;;:::o;12444:345::-;12525:9;:30;12535:19;12525:30;;;;;;;;;;;;;;;;;;;;;;;;;12517:39;;;;;;12642:5;;;;;;;;;;;12611:37;;12619:10;12611:37;;;:65;;;;12652:12;:24;12665:10;12652:24;;;;;;;;;;;;;;;;;;;;;;;;;12611:65;12604:73;;;;12777:5;12744:9;:30;12754:19;12744:30;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;12444:345;:::o;16945:30::-;;;;:::o;5556:20::-;;;;;;;;;;;;;:::o;10773:350::-;10843:12;:23;10856:9;10843:23;;;;;;;;;;;;;;;;;;;;;;;;;10842:24;10834:33;;;;;;10948:5;;;;;;;;;;;10917:37;;10925:10;10917:37;;;:65;;;;10958:12;:24;10971:10;10958:24;;;;;;;;;;;;;;;;;;;;;;;;;10917:65;10910:73;;;;11076:4;11050:12;:23;11063:9;11050:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;11111:5;11088:9;:20;11098:9;11088:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;10773:350;:::o;17366:20::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;35513:247::-;35623:18;35651:14;35695:16;35713:10;35725:5;35678:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;35678:53:0;;;35668:64;;;;;;35651:81;;35747:6;35740:13;;;35513:247;;;;;:::o;16850:27::-;;;;:::o;16605:29::-;;;;:::o;15010:236::-;15068:4;15090:12;:26;15103:12;15090:26;;;;;;;;;;;;;;;;;;;;;;;;;15082:35;;;;;;15163:5;;;;;;;;;;;15132:37;;15140:10;15132:37;;;:65;;;;15173:12;:24;15186:10;15173:24;;;;;;;;;;;;;;;;;;;;;;;;;15132:65;15125:73;;;;15213:12;:26;15226:12;15213:26;;;;;;;;;;;;;;;;;;;;;;;;;15206:33;;15010:236;;;:::o;26662:494::-;26746:4;26768:11;;;;;;;;;;;26767:12;:38;;;;;26784:9;:21;26794:10;26784:21;;;;;;;;;;;;;;;;;;;;;;;;;26783:22;26767:38;26760:46;;;;26879:1;26860:21;;:7;:21;;;;26853:29;;;;26954:49;26987:15;26954:7;:19;26962:10;26954:19;;;;;;;;;;;;;;;:28;26974:7;26954:28;;;;;;;;;;;;;;;;:32;;:49;;;;:::i;:::-;26922:7;:19;26930:10;26922:19;;;;;;;;;;;;;;;:28;26942:7;26922:28;;;;;;;;;;;;;;;:82;;;;27038:7;27017:59;;27026:10;27017:59;;;27047:7;:19;27055:10;27047:19;;;;;;;;;;;;;;;:28;27067:7;27047:28;;;;;;;;;;;;;;;;27017:59;;;;;;;;;;;;;;;;;;27100:30;27118:11;27100:13;;:17;;:30;;;;:::i;:::-;27084:13;:46;;;;27145:4;27138:11;;26662:494;;;;:::o;22551:1784::-;22609:12;22639;;;;;;;;;;;22638:13;22631:21;;;;22709:8;:20;22718:10;22709:20;;;;;;;;;;;;;;;;22699:6;:30;;22692:38;;;;22816:1;22785:33;;22793:10;22785:33;;;;22778:41;;;;22892:9;:21;22902:10;22892:21;;;;;;;;;;;;;;;;;;;;;;;;;22888:1361;;;23065:1;23036:54;;23045:10;23036:54;;;23069:8;:20;23078:10;23069:20;;;;;;;;;;;;;;;;23036:54;;;;;;;;;;;;;;;;;;23123:46;23148:8;:20;23157:10;23148:20;;;;;;;;;;;;;;;;23123:8;:20;23140:1;23123:20;;;;;;;;;;;;;;;;:24;;:46;;;;:::i;:::-;23100:8;:20;23117:1;23100:20;;;;;;;;;;;;;;;:69;;;;23194:38;23211:8;:20;23220:10;23211:20;;;;;;;;;;;;;;;;23194:12;;:16;;:38;;;;:::i;:::-;23179:12;:53;;;;23257:38;23274:8;:20;23283:10;23274:20;;;;;;;;;;;;;;;;23257:12;;:16;;:38;;;;:::i;:::-;23242:12;:53;;;;23328:1;23305:8;:20;23314:10;23305:20;;;;;;;;;;;;;;;:24;;;;22888:1361;;;23354:11;23368:15;23379:3;23368:6;:10;;:15;;;;:::i;:::-;23354:29;;23429:15;23447:6;23429:24;;23463:11;23477:34;23488:22;23499:10;23488:6;:10;;:22;;;;:::i;:::-;23477:6;:10;;:34;;;;:::i;:::-;23463:48;;23548:2;23527:32;;23536:10;23527:32;;;23552:6;23527:32;;;;;;;;;;;;;;;;;;23591;23616:6;23591:8;:20;23600:10;23591:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;23568:8;:20;23577:10;23568:20;;;;;;;;;;;;;;;:55;;;;23689:24;23706:6;23689:8;:12;23698:2;23689:12;;;;;;;;;;;;;;;;:16;;:24;;;;:::i;:::-;23674:8;:12;23683:2;23674:12;;;;;;;;;;;;;;;:39;;;;23765:14;;;;;;;;;;;23734:46;;23742:10;23734:46;;;23730:253;;23866:14;;;;;;;;;;;23845:48;;23854:10;23845:48;;;23882:10;23845:48;;;;;;;;;;;;;;;;;;23932:40;23961:10;23932:8;:24;23941:14;;;;;;;;;;;23932:24;;;;;;;;;;;;;;;;:28;;:40;;;;:::i;:::-;23905:8;:24;23914:14;;;;;;;;;;;23905:24;;;;;;;;;;;;;;;:67;;;;23730:253;24028:1;23999:40;;24008:10;23999:40;;;24032:6;23999:40;;;;;;;;;;;;;;;;;;24072:32;24097:6;24072:8;:20;24089:1;24072:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;24049:8;:20;24066:1;24049:20;;;;;;;;;;;;;;;:55;;;;24129:24;24146:6;24129:12;;:16;;:24;;;;:::i;:::-;24114:12;:39;;;;24178:24;24195:6;24178:12;;:16;;:24;;;;:::i;:::-;24163:12;:39;;;;24230:10;24213:14;;:27;;;;;;;;;;;;;;;;;;22888:1361;;;;24279:30;24297:11;24279:13;;:17;;:30;;;;:::i;:::-;24263:13;:46;;;;24324:4;24317:11;;22551:1784;;;;:::o;6949:36::-;;;;;;;;;;;;;:::o;9481:232::-;9568:5;;;;;;;;;;;9537:37;;9545:10;9537:37;;;:65;;;;9578:12;:24;9591:10;9578:24;;;;;;;;;;;;;;;;;;;;;;;;;9537:65;9530:73;;;;9690:16;;;;;;;;;;;9689:17;9670:16;;:36;;;;;;;;;;;;;;;;;;9481:232::o;16912:25::-;;;;:::o;8198:238::-;8287:5;;;;;;;;;;;8256:37;;8264:10;8256:37;;;:65;;;;8297:12;:24;8310:10;8297:24;;;;;;;;;;;;;;;;;;;;;;;;;8256:65;8249:73;;;;8411:18;;;;;;;;;;;8410:19;8389:18;;:40;;;;;;;;;;;;;;;;;;8198:238::o;16640:28::-;;;;:::o;9921:232::-;10008:5;;;;;;;;;;;9977:37;;9985:10;9977:37;;;:65;;;;10018:12;:24;10031:10;10018:24;;;;;;;;;;;;;;;;;;;;;;;;;9977:65;9970:73;;;;10130:16;;;;;;;;;;;10129:17;10110:16;;:36;;;;;;;;;;;;;;;;;;9921:232::o;29525:480::-;29613:12;29643:18;;;;;;;;;;;29642:19;:45;;;;;29666:9;:21;29676:10;29666:21;;;;;;;;;;;;;;;;;;;;;;;;;29665:22;29642:45;29635:53;;;;29773:6;29742:7;:19;29750:10;29742:19;;;;;;;;;;;;;;;:28;29762:7;29742:28;;;;;;;;;;;;;;;:37;;;;29813:7;29792:37;;29801:10;29792:37;;;29822:6;29792:37;;;;;;;;;;;;;;;;;;29860:7;29837:47;;;29885:10;29897:6;29913:4;29920;29837:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;29837:88:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29837:88:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29837:88:0;;;;29949:30;29967:11;29949:13;;:17;;:30;;;;:::i;:::-;29933:13;:46;;;;29994:4;29987:11;;29525:480;;;;;:::o;16716:41::-;;;;:::o;5582:23::-;;;;;;;;;;;;;:::o;35145:179::-;35236:12;5801:5;;;;;;;;;;;5787:19;;:10;:19;;;5779:28;;;;;;35280:12;35265:37;;;35303:5;;;;;;;;;;;35310:6;35265:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35265:52:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35265:52:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;35265:52:0;;;;;;;;;;;;;;;;35258:59;;35145:179;;;;:::o;31935:142::-;32011:14;32042:7;:19;32050:10;32042:19;;;;;;;;;;;;;;;:28;32062:7;32042:28;;;;;;;;;;;;;;;;32035:35;;31935:142;;;;:::o;15476:110::-;15532:7;15556:10;:23;15567:11;15556:23;;;;;;;;;;;;;;;;;;;;;15549:30;;15476:110;;;:::o;11873:363::-;11945:9;:25;11955:14;11945:25;;;;;;;;;;;;;;;;;;;;;;;;;11944:26;11936:35;;;;;;12054:5;;;;;;;;;;;12023:37;;12031:10;12023:37;;;:65;;;;12064:12;:24;12077:10;12064:24;;;;;;;;;;;;;;;;;;;;;;;;;12023:65;12016:73;;;;12184:4;12156:9;:25;12166:14;12156:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;12224:5;12196:9;:25;12206:14;12196:25;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;11873:363;:::o;7072:36::-;;;;;;;;;;;;;:::o;16820:24::-;;;;:::o;5830:98::-;5801:5;;;;;;;;;;;5787:19;;:10;:19;;;5779:28;;;;;;5912:9;5901:8;;:20;;;;;;;;;;;;;;;;;;5830:98;:::o;16883:23::-;;;;:::o;512:168::-;569:7;586:9;602:1;598;:5;586:17;;624:1;619;:6;;611:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;672:1;665:8;;;512:168;;;;:::o;1242:127::-;1299:7;1323:39;1327:1;1330;1323:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;1316:46;;1242:127;;;;:::o;31108:471::-;31170:17;31185:1;31170:10;;:14;;:17;;;;:::i;:::-;31157:10;:30;;;;31237:1;31202:31;31217:15;;31202:10;;:14;;:31;;;;:::i;:::-;:36;31197:88;;;31275:1;31263:9;;:13;31251:9;:25;;;;31197:88;31299:20;:18;:20::i;:::-;;31570:1;31555:12;:16;31545:27;31527:15;:45;;;;31108:471::o;687:131::-;744:7;768:43;772:1;775;768:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;761:50;;687:131;;;;:::o;1376:178::-;1461:7;1490:1;1486;:5;1493:12;1478:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1478:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1514:9;1530:1;1526;:5;;;;;;1514:17;;1546:1;1539:8;;;1376:178;;;;;:::o;1561:125::-;1618:7;1642:37;1646:1;1649;1642:37;;;;;;;;;;;;;;;;;:3;:37::i;:::-;1635:44;;1561:125;;;;:::o;30297:602::-;30345:4;30735:79;30752:61;30735:12;;:16;;:79;;;;:::i;:::-;30720:12;:94;;;;30861:12;30829:29;:44;;;;30888:4;30881:11;;30297:602;:::o;825:179::-;910:7;940:1;935;:6;;943:12;927:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;927:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;964:9;980:1;976;:5;964:17;;996:1;989:8;;;825:179;;;;;:::o;1693:158::-;1778:7;1808:1;1803;:6;;1811:12;1795:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1795:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1843:1;1839;:5;;;;;;1832:12;;1693:158;;;;;:::o
Swarm Source
bzzr://36570dbec0381e484ff05eaac2b4d140b643970ea91f1adf8fe85a0b83046e7d
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.