ERC-20
Supply Chain
Overview
Max Total Supply
21,266,200 MOD
Holders
12,243 (0.00%)
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 0 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
ModumToken
Compiler Version
v0.4.18+commit.9cf6e910
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2017-10-20 */ pragma solidity ^0.4.14; /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { function mul(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal constant returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal constant returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } //Interface declaration from: https://github.com/ethereum/eips/issues/20 contract ERC20Interface { //from: https://github.com/OpenZeppelin/zeppelin-solidity/blob/b395b06b65ce35cac155c13d01ab3fc9d42c5cfb/contracts/token/ERC20Basic.sol uint256 public totalSupply; //tokens that can vote, transfer, receive dividend function balanceOf(address who) public constant returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); //from: https://github.com/OpenZeppelin/zeppelin-solidity/blob/b395b06b65ce35cac155c13d01ab3fc9d42c5cfb/contracts/token/ERC20.sol function allowance(address owner, address spender) public constant returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } contract ModumToken is ERC20Interface { using SafeMath for uint256; address public owner; mapping(address => mapping (address => uint256)) public allowed; enum UpdateMode{Wei, Vote, Both} //update mode for the account struct Account { uint256 lastProposalStartTime; //For checking at which proposal valueModVote was last updated uint256 lastAirdropWei; //For checking after which airDrop bonusWei was last updated uint256 lastAirdropClaimTime; //for unclaimed airdrops, re-airdrop uint256 bonusWei; //airDrop/Dividend payout available for withdrawal. uint256 valueModVote; // votes available for voting on active Proposal uint256 valueMod; // the owned tokens } mapping(address => Account) public accounts; //Airdorp uint256 public totalDropPerUnlockedToken = 0; //totally airdropped eth per unlocked token uint256 public rounding = 0; //airdrops not accounted yet to make system rounding error proof //Token locked/unlocked - totalSupply/max uint256 public lockedTokens = 9 * 1100 * 1000; //token that need to be unlocked by voting uint256 public constant maxTokens = 30 * 1000 * 1000; //max distributable tokens //minting phase running if false, true otherwise. Many operations can only be called when //minting phase is over bool public mintDone = false; uint256 public constant redistributionTimeout = 548 days; //18 month //as suggested in https://theethereum.wiki/w/index.php/ERC20_Token_Standard string public constant name = "Modum Token"; string public constant symbol = "MOD"; uint8 public constant decimals = 0; //Voting struct Proposal { string addr; //Uri for more info bytes32 hash; //Hash of the uri content for checking uint256 valueMod; //token to unlock: proposal with 0 amount is invalid uint256 startTime; uint256 yay; uint256 nay; } Proposal public currentProposal; uint256 public constant votingDuration = 2 weeks; uint256 public lastNegativeVoting = 0; uint256 public constant blockingDuration = 90 days; event Voted(address _addr, bool option, uint256 votes); //called when a vote is casted event Payout(uint256 weiPerToken); //called when an someone payed ETHs to this contract, that can be distributed function ModumToken() public { owner = msg.sender; } /** * In case an owner account gets compromised, it should be possible to move control * over to another account. This helps in cases like the Parity multisig exploit: As * soon as an exploit becomes known, the affected parties might have a small time * window before being attacked. */ function transferOwnership(address _newOwner) public { require(msg.sender == owner); require(_newOwner != address(0)); owner = _newOwner; } //*************************** Voting ***************************************** /* * In addition to the the vode with address/URL and its hash, we also set the value * of tokens to be transfered from the locked tokens to the modum account. */ function votingProposal(string _addr, bytes32 _hash, uint256 _value) public { require(msg.sender == owner); // proposal ony by onwer require(!isProposalActive()); // no proposal is active, cannot vote in parallel require(_value <= lockedTokens); //proposal cannot be larger than remaining locked tokens require(_value > 0); //there needs to be locked tokens to make proposal, at least 1 locked token require(_hash != bytes32(0)); //hash need to be set require(bytes(_addr).length > 0); //the address need to be set and non-empty require(mintDone); //minting phase needs to be over //in case of negative vote, wait 90 days. If no lastNegativeVoting have //occured, lastNegativeVoting is 0 and now is always larger than 14.1.1970 //(1.1.1970 plus blockingDuration). require(now >= lastNegativeVoting.add(blockingDuration)); currentProposal = Proposal(_addr, _hash, _value, now, 0, 0); } function vote(bool _vote) public returns (uint256) { require(isVoteOngoing()); // vote needs to be ongoing Account storage account = updateAccount(msg.sender, UpdateMode.Vote); uint256 votes = account.valueModVote; //available votes require(votes > 0); //voter must have a vote left, either by not voting yet, or have modum tokens if(_vote) { currentProposal.yay = currentProposal.yay.add(votes); } else { currentProposal.nay = currentProposal.nay.add(votes); } account.valueModVote = 0; Voted(msg.sender, _vote, votes); return votes; } function showVotes(address _addr) public constant returns (uint256) { Account memory account = accounts[_addr]; if(account.lastProposalStartTime < currentProposal.startTime || // the user did set his token power yet (account.lastProposalStartTime == 0 && currentProposal.startTime == 0)) { return account.valueMod; } return account.valueModVote; } // The voting can be claimed by the owner of this contract function claimVotingProposal() public { require(msg.sender == owner); //only owner can claim proposal require(isProposalActive()); // proposal active require(isVotingPhaseOver()); // voting has already ended if(currentProposal.yay > currentProposal.nay && currentProposal.valueMod > 0) { //Vote was accepted Account storage account = updateAccount(owner, UpdateMode.Both); uint256 valueMod = currentProposal.valueMod; account.valueMod = account.valueMod.add(valueMod); //add tokens to owner totalSupply = totalSupply.add(valueMod); lockedTokens = lockedTokens.sub(valueMod); } else if(currentProposal.yay <= currentProposal.nay) { //in case of a negative vote, set the time of this negative //vote to the end of the negative voting period. //This will prevent any new voting to be conducted. lastNegativeVoting = currentProposal.startTime.add(votingDuration); } delete currentProposal; //proposal ended } function isProposalActive() public constant returns (bool) { return currentProposal.hash != bytes32(0); } function isVoteOngoing() public constant returns (bool) { return isProposalActive() && now >= currentProposal.startTime && now < currentProposal.startTime.add(votingDuration); //its safe to use it for longer periods: //https://ethereum.stackexchange.com/questions/6795/is-block-timestamp-safe-for-longer-time-periods } function isVotingPhaseOver() public constant returns (bool) { //its safe to use it for longer periods: //https://ethereum.stackexchange.com/questions/6795/is-block-timestamp-safe-for-longer-time-periods return now >= currentProposal.startTime.add(votingDuration); } //*********************** Minting ***************************************** function mint(address[] _recipient, uint256[] _value) public { require(msg.sender == owner); //only owner can claim proposal require(!mintDone); //only during minting //require(_recipient.length == _value.length); //input need to be of same size //we know what we are doing... remove check to save gas //we want to mint a couple of accounts for (uint8 i=0; i<_recipient.length; i++) { //require(lockedTokens.add(totalSupply).add(_value[i]) <= maxTokens); //do the check in the mintDone //121 gas can be saved by creating temporary variables address tmpRecipient = _recipient[i]; uint tmpValue = _value[i]; //no need to update account, as we have not set minting to true. This means //nobody can start a proposal (isVoteOngoing() is always false) and airdrop //cannot be done either totalDropPerUnlockedToken is 0 thus, bonus is always //zero. Account storage account = accounts[tmpRecipient]; account.valueMod = account.valueMod.add(tmpValue); //if this remains 0, we cannot calculate the time period when the user claimed //his airdrop, thus, set it to now account.lastAirdropClaimTime = now; totalSupply = totalSupply.add(tmpValue); //create the tokens and add to recipient Transfer(msg.sender, tmpRecipient, tmpValue); } } function setMintDone() public { require(msg.sender == owner); require(!mintDone); //only in minting phase //here we check that we never exceed the 30mio max tokens. This includes //the locked and the unlocked tokens. require(lockedTokens.add(totalSupply) <= maxTokens); mintDone = true; //end the minting } //updates an account for voting or airdrop or both. This is required to be able to fix the amount of tokens before //a vote or airdrop happend. function updateAccount(address _addr, UpdateMode mode) internal returns (Account storage){ Account storage account = accounts[_addr]; if(mode == UpdateMode.Vote || mode == UpdateMode.Both) { if(isVoteOngoing() && account.lastProposalStartTime < currentProposal.startTime) {// the user did set his token power yet account.valueModVote = account.valueMod; account.lastProposalStartTime = currentProposal.startTime; } } if(mode == UpdateMode.Wei || mode == UpdateMode.Both) { uint256 bonus = totalDropPerUnlockedToken.sub(account.lastAirdropWei); if(bonus != 0) { account.bonusWei = account.bonusWei.add(bonus.mul(account.valueMod)); account.lastAirdropWei = totalDropPerUnlockedToken; } } return account; } //*********************** Airdrop ************************************************ //default function to pay bonus, anybody that sends eth to this contract will distribute the wei //to their token holders //Dividend payment / Airdrop function() public payable { require(mintDone); //minting needs to be over require(msg.sender == owner); //ETH payment need to be one-way only, from modum to tokenholders, confirmed by Lykke payout(msg.value); } //anybody can pay and add address that will be checked if they //can be added to the bonus function payBonus(address[] _addr) public payable { require(msg.sender == owner); //ETH payment need to be one-way only, from modum to tokenholders, confirmed by Lykke uint256 totalWei = 0; for (uint8 i=0; i<_addr.length; i++) { Account storage account = updateAccount(_addr[i], UpdateMode.Wei); if(now >= account.lastAirdropClaimTime + redistributionTimeout) { totalWei += account.bonusWei; account.bonusWei = 0; account.lastAirdropClaimTime = now; } else { revert(); } } payout(msg.value.add(totalWei)); } function payout(uint256 valueWei) internal { uint256 value = valueWei.add(rounding); //add old rounding rounding = value % totalSupply; //ensure no rounding error uint256 weiPerToken = value.sub(rounding).div(totalSupply); totalDropPerUnlockedToken = totalDropPerUnlockedToken.add(weiPerToken); //account for locked tokens and add the drop Payout(weiPerToken); } function showBonus(address _addr) public constant returns (uint256) { uint256 bonus = totalDropPerUnlockedToken.sub(accounts[_addr].lastAirdropWei); if(bonus != 0) { return accounts[_addr].bonusWei.add(bonus.mul(accounts[_addr].valueMod)); } return accounts[_addr].bonusWei; } function claimBonus() public returns (uint256) { require(mintDone); //minting needs to be over Account storage account = updateAccount(msg.sender, UpdateMode.Wei); uint256 sendValue = account.bonusWei; //fetch the values if(sendValue != 0) { account.bonusWei = 0; //set to zero (before, against reentry) account.lastAirdropClaimTime = now; //mark as collected now msg.sender.transfer(sendValue); //send the bonus to the correct account return sendValue; } return 0; } //****************************** ERC20 ************************************ // Get the account balance of another account with address _owner function balanceOf(address _owner) public constant returns (uint256 balance) { return accounts[_owner].valueMod; } // Send _value amount of tokens to address _to function transfer(address _to, uint256 _value) public returns (bool success) { require(mintDone); require(_value > 0); Account memory tmpFrom = accounts[msg.sender]; require(tmpFrom.valueMod >= _value); Account storage from = updateAccount(msg.sender, UpdateMode.Both); Account storage to = updateAccount(_to, UpdateMode.Both); from.valueMod = from.valueMod.sub(_value); to.valueMod = to.valueMod.add(_value); Transfer(msg.sender, _to, _value); return true; } // Send _value amount of tokens from address _from to address _to function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { require(mintDone); require(_value > 0); Account memory tmpFrom = accounts[_from]; require(tmpFrom.valueMod >= _value); require(allowed[_from][msg.sender] >= _value); Account storage from = updateAccount(_from, UpdateMode.Both); Account storage to = updateAccount(_to, UpdateMode.Both); from.valueMod = from.valueMod.sub(_value); to.valueMod = to.valueMod.add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); Transfer(msg.sender, _to, _value); return true; } // ********************** approve, allowance, increaseApproval, and decreaseApproval used from: // https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/token/StandardToken.sol // // changed from uint to uint256 as this is considered to be best practice. /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. */ function approve(address _spender, uint256 _value) public returns (bool) { // To change the approve amount you first have to reduce the addresses` // allowance to zero by calling `approve(_spender, 0)` if it is not // already 0 to mitigate the race condition described here: // https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 require((_value == 0) || (allowed[msg.sender][_spender] == 0)); allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance(address _owner, address _spender) public constant returns (uint256 remaining) { return allowed[_owner][_spender]; } /* * approve should be called when allowed[_spender] == 0. To increment * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol */ function increaseApproval(address _spender, uint256 _addedValue) public returns (bool success) { allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function decreaseApproval(address _spender, uint256 _subtractedValue) public returns (bool success) { uint256 oldValue = allowed[msg.sender][_spender]; if(_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"lockedTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"votingDuration","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"claimVotingProposal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"currentProposal","outputs":[{"name":"addr","type":"string"},{"name":"hash","type":"bytes32"},{"name":"valueMod","type":"uint256"},{"name":"startTime","type":"uint256"},{"name":"yay","type":"uint256"},{"name":"nay","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rounding","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_addr","type":"address"}],"name":"showVotes","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_vote","type":"bool"}],"name":"vote","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"claimBonus","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"}],"name":"allowed","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"accounts","outputs":[{"name":"lastProposalStartTime","type":"uint256"},{"name":"lastAirdropWei","type":"uint256"},{"name":"lastAirdropClaimTime","type":"uint256"},{"name":"bonusWei","type":"uint256"},{"name":"valueModVote","type":"uint256"},{"name":"valueMod","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_subtractedValue","type":"uint256"}],"name":"decreaseApproval","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"string"},{"name":"_hash","type":"bytes32"},{"name":"_value","type":"uint256"}],"name":"votingProposal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address[]"}],"name":"payBonus","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"isProposalActive","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"redistributionTimeout","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"setMintDone","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isVotingPhaseOver","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"mintDone","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_addr","type":"address"}],"name":"showBonus","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lastNegativeVoting","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_addedValue","type":"uint256"}],"name":"increaseApproval","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_recipient","type":"address[]"},{"name":"_value","type":"uint256[]"}],"name":"mint","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"maxTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"blockingDuration","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalDropPerUnlockedToken","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isVoteOngoing","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_addr","type":"address"},{"indexed":false,"name":"option","type":"bool"},{"indexed":false,"name":"votes","type":"uint256"}],"name":"Voted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"weiPerToken","type":"uint256"}],"name":"Payout","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"}]
Contract Creation Code
606060405260006004819055600581905562970fe06006556007805460ff19169055600e55341561002f57600080fd5b60018054600160a060020a03191633600160a060020a0316179055611a1a806100596000396000f3006060604052600436106101cc5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde038114610203578063095ea7b31461028d5780630eb34740146102c3578063132002fc146102e857806318160ddd146102fb57806323b872dd1461030e5780632877c748146103365780632b49d425146103495780632e4404031461040c578063313ce5671461041f5780633b81b785146104485780634b9f5c9814610467578063506353941461047f5780635c658165146104925780635e5c06e2146104b7578063661884631461050f57806370a0823114610531578063772e6f0314610550578063826efb6d146105a85780638672f1bc146105ec5780638da5cb5b146105ff57806395d89b411461062e578063a9059cbb14610641578063b54eb82214610663578063b5e8297514610676578063b5ee6f3d14610689578063bd0887241461069c578063cc70decb146106af578063d246a8c9146106ce578063d73dd623146106e1578063dd62ed3e14610703578063e467f7e014610728578063e8315742146107b7578063ea8eb4be146107ca578063ed343f65146107dd578063f247016c146107f0578063f2fde38b14610803575b60075460ff1615156101dd57600080fd5b60015433600160a060020a039081169116146101f857600080fd5b61020134610822565b005b341561020e57600080fd5b6102166108c4565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561025257808201518382015260200161023a565b50505050905090810190601f16801561027f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561029857600080fd5b6102af600160a060020a03600435166024356108fb565b604051901515815260200160405180910390f35b34156102ce57600080fd5b6102d66109a1565b60405190815260200160405180910390f35b34156102f357600080fd5b6102d66109a7565b341561030657600080fd5b6102d66109ae565b341561031957600080fd5b6102af600160a060020a03600435811690602435166044356109b4565b341561034157600080fd5b610201610b7e565b341561035457600080fd5b61035c610ca5565b6040516020810186905260408101859052606081018490526080810183905260a0810182905260c0808252875460026101006001831615026000190190911604908201819052819060e0820190899080156103f85780601f106103cd576101008083540402835291602001916103f8565b820191906000526020600020905b8154815290600101906020018083116103db57829003601f168201915b505097505050505050505060405180910390f35b341561041757600080fd5b6102d6610cbe565b341561042a57600080fd5b610432610cc4565b60405160ff909116815260200160405180910390f35b341561045357600080fd5b6102d6600160a060020a0360043516610cc9565b341561047257600080fd5b6102d66004351515610d6d565b341561048a57600080fd5b6102d6610e3e565b341561049d57600080fd5b6102d6600160a060020a0360043581169060243516610ec1565b34156104c257600080fd5b6104d6600160a060020a0360043516610ede565b60405180878152602001868152602001858152602001848152602001838152602001828152602001965050505050505060405180910390f35b341561051a57600080fd5b6102af600160a060020a0360043516602435610f1a565b341561053c57600080fd5b6102d6600160a060020a0360043516611014565b341561055b57600080fd5b61020160046024813581810190830135806020601f820181900481020160405190810160405281815292919060208401838380828437509496505084359460200135935061103292505050565b610201600460248135818101908301358060208181020160405190810160405280939291908181526020018383602002808284375094965061114895505050505050565b34156105f757600080fd5b6102af6111ff565b341561060a57600080fd5b610612611208565b604051600160a060020a03909116815260200160405180910390f35b341561063957600080fd5b610216611217565b341561064c57600080fd5b6102af600160a060020a036004351660243561124e565b341561066e57600080fd5b6102d6611389565b341561068157600080fd5b610201611391565b341561069457600080fd5b6102af6113f2565b34156106a757600080fd5b6102af611413565b34156106ba57600080fd5b6102d6600160a060020a036004351661141c565b34156106d957600080fd5b6102d66114d7565b34156106ec57600080fd5b6102af600160a060020a03600435166024356114dd565b341561070e57600080fd5b6102d6600160a060020a0360043581169060243516611581565b341561073357600080fd5b6102016004602481358181019083013580602081810201604051908101604052809392919081815260200183836020028082843782019150505050505091908035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437509496506115ac95505050505050565b34156107c257600080fd5b6102d66116cc565b34156107d557600080fd5b6102d66116d4565b34156107e857600080fd5b6102d66116db565b34156107fb57600080fd5b6102af6116e1565b341561080e57600080fd5b610201600160a060020a036004351661171e565b60008061083a6005548461177d90919063ffffffff16565b91506000548281151561084957fe5b0660058190556000546108739161086790859063ffffffff61179316565b9063ffffffff6117a516565b600454909150610889908263ffffffff61177d16565b6004557f22427047e1a674a9aff59700a2c8d00ea96e017ddf9236690bdedf1f21f28d9d8160405190815260200160405180910390a1505050565b60408051908101604052600b81527f4d6f64756d20546f6b656e000000000000000000000000000000000000000000602082015281565b600081158061092d5750600160a060020a03338116600090815260026020908152604080832093871683529290522054155b151561093857600080fd5b600160a060020a03338116600081815260026020908152604080832094881680845294909152908190208590557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a350600192915050565b60065481565b6212750081565b60005481565b60006109be6118d8565b600754600090819060ff1615156109d457600080fd5b600085116109e157600080fd5b600160a060020a038716600090815260036020526040908190209060c0905190810160409081528254825260018301546020830152600283015490820152600382015460608201526004820154608082015260059091015460a082019081529093508590511015610a5157600080fd5b600160a060020a038088166000908152600260209081526040808320339094168352929052205485901015610a8557600080fd5b610a908760026117bc565b9150610a9d8660026117bc565b6005830154909150610ab5908663ffffffff61179316565b600580840191909155810154610ad1908663ffffffff61177d16565b6005820155600160a060020a0380881660009081526002602090815260408083203390941683529290522054610b0d908663ffffffff61179316565b600160a060020a0380891660009081526002602090815260408083203385168085529252918290209390935590881691907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9088905190815260200160405180910390a35060019695505050505050565b600154600090819033600160a060020a03908116911614610b9e57600080fd5b610ba66111ff565b1515610bb157600080fd5b610bb96113f2565b1515610bc457600080fd5b600d54600c54118015610bda5750600a54600090115b15610c4957600154610bf690600160a060020a031660026117bc565b600a5460058201549193509150610c13908263ffffffff61177d16565b6005830155600054610c2b908263ffffffff61177d16565b600055600654610c41908263ffffffff61179316565b600655610c6e565b600d54600c5411610c6e57600b54610c6a906212750063ffffffff61177d16565b600e555b60086000610c7c828261190f565b506000600182018190556002820181905560038201819055600482018190556005909101555050565b600954600a54600b54600c54600d546008949392919086565b60055481565b600081565b6000610cd36118d8565b600160a060020a038316600090815260036020526040908190209060c0905190810160409081528254825260018301546020830152600283015490820152600382015460608201526004820154608082015260059091015460a0820152600b5490915081511080610d4e57508051158015610d4e5750600b54155b15610d5f578060a001519150610d67565b806080015191505b50919050565b6000806000610d7a6116e1565b1515610d8557600080fd5b610d903360016117bc565b6004810154909250905060008111610da757600080fd5b8315610dc857600c54610dc0908263ffffffff61177d16565b600c55610ddf565b600d54610ddb908263ffffffff61177d16565b600d555b600060048301557f591a89b27b3057021df052ec15caa0a817c1894bcb52243ed0c8cdaa83f322be338583604051600160a060020a03909316835290151560208301526040808301919091526060909101905180910390a19392505050565b6007546000908190819060ff161515610e5657600080fd5b610e613360006117bc565b600381015490925090508015610eb75760006003830155426002830155600160a060020a03331681156108fc0282604051600060405180830381858888f193505050501515610eaf57600080fd5b809250610ebc565b600092505b505090565b600260209081526000928352604080842090915290825290205481565b60036020528060005260406000206000915090508060000154908060010154908060020154908060030154908060040154908060050154905086565b600160a060020a03338116600090815260026020908152604080832093861683529290529081205480831115610f7757600160a060020a033381166000908152600260209081526040808320938816835292905290812055610fae565b610f87818463ffffffff61179316565b600160a060020a033381166000908152600260209081526040808320938916835292905220555b600160a060020a0333811660008181526002602090815260408083209489168084529490915290819020547f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925915190815260200160405180910390a35060019392505050565b600160a060020a031660009081526003602052604090206005015490565b60015433600160a060020a0390811691161461104d57600080fd5b6110556111ff565b1561105f57600080fd5b60065481111561106e57600080fd5b6000811161107b57600080fd5b81151561108757600080fd5b600083511161109557600080fd5b60075460ff1615156110a657600080fd5b600e546110bc906276a70063ffffffff61177d16565b4210156110c857600080fd5b60c0604051908101604090815284825260208201849052810182905242606082015260006080820181905260a0820152600881518190805161110e929160200190611956565b506020820151600182015560408201518160020155606082015181600301556080820151816004015560a082015160059091015550505050565b6001546000908190819033600160a060020a0390811691161461116a57600080fd5b60009250600091505b83518260ff1610156111e1576111a2848360ff168151811061119157fe5b9060200190602002015160006117bc565b60028101549091506302d276000142106111d157600381018054600090915542600283015592909201916111d6565b600080fd5b600190910190611173565b6111f96111f4348563ffffffff61177d16565b610822565b50505050565b60095415155b90565b600154600160a060020a031681565b60408051908101604052600381527f4d4f440000000000000000000000000000000000000000000000000000000000602082015281565b60006112586118d8565b600754600090819060ff16151561126e57600080fd5b6000851161127b57600080fd5b600160a060020a033316600090815260036020526040908190209060c0905190810160409081528254825260018301546020830152600283015490820152600382015460608201526004820154608082015260059091015460a0820190815290935085905110156112eb57600080fd5b6112f63360026117bc565b91506113038660026117bc565b600583015490915061131b908663ffffffff61179316565b600580840191909155810154611337908663ffffffff61177d16565b6005820155600160a060020a038087169033167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8760405190815260200160405180910390a350600195945050505050565b6302d2760081565b60015433600160a060020a039081169116146113ac57600080fd5b60075460ff16156113bc57600080fd5b6301c9c3806113d860005460065461177d90919063ffffffff16565b11156113e357600080fd5b6007805460ff19166001179055565b600b5460009061140b906212750063ffffffff61177d16565b421015905090565b60075460ff1681565b600160a060020a038116600090815260036020526040812060010154600454829161144d919063ffffffff61179316565b905080156114b657600160a060020a0383166000908152600360205260409020600501546114af9061148690839063ffffffff6118b416565b600160a060020a038516600090815260036020819052604090912001549063ffffffff61177d16565b9150610d67565b5050600160a060020a03166000908152600360208190526040909120015490565b600e5481565b600160a060020a033381166000908152600260209081526040808320938616835292905290812054611515908363ffffffff61177d16565b600160a060020a0333811660008181526002602090815260408083209489168084529490915290819020849055919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591905190815260200160405180910390a350600192915050565b600160a060020a03918216600090815260026020908152604080832093909416825291909152205490565b60015460009081908190819033600160a060020a039081169116146115d057600080fd5b60075460ff16156115e057600080fd5b600093505b85518460ff1610156116c457858460ff168151811061160057fe5b906020019060200201519250848460ff168151811061161b57fe5b90602001906020020151600160a060020a038416600090815260036020526040902060058101549193509150611657908363ffffffff61177d16565b6005820155426002820155600054611675908363ffffffff61177d16565b600055600160a060020a038084169033167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405190815260200160405180910390a36001909301926115e5565b505050505050565b6301c9c38081565b6276a70081565b60045481565b60006116eb6111ff565b80156116f95750600b544210155b80156117195750600b54611716906212750063ffffffff61177d16565b42105b905090565b60015433600160a060020a0390811691161461173957600080fd5b600160a060020a038116151561174e57600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60008282018381101561178c57fe5b9392505050565b60008282111561179f57fe5b50900390565b60008082848115156117b357fe5b04949350505050565b600160a060020a03821660009081526003602052604081208160018460028111156117e357fe5b14806117fa575060028460028111156117f857fe5b145b1561182a576118076116e1565b80156118155750600b548254105b1561182a5760058201546004830155600b5482555b600084600281111561183857fe5b148061184f5750600284600281111561184d57fe5b145b156118ac57600182015460045461186b9163ffffffff61179316565b905080156118ac5761189e61188d8360050154836118b490919063ffffffff16565b60038401549063ffffffff61177d16565b600383015560045460018301555b509392505050565b60008282028315806118d057508284828115156118cd57fe5b04145b151561178c57fe5b60c0604051908101604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b50805460018160011615610100020316600290046000825580601f106119355750611953565b601f01602090049060005260206000209081019061195391906119d4565b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061199757805160ff19168380011785556119c4565b828001600101855582156119c4579182015b828111156119c45782518255916020019190600101906119a9565b506119d09291506119d4565b5090565b61120591905b808211156119d057600081556001016119da5600a165627a7a723058206378abcfaefceadc69da8c6a5ce5584d9407c8c1b14d336a43049204bdd502450029
Deployed Bytecode
0x6060604052600436106101cc5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde038114610203578063095ea7b31461028d5780630eb34740146102c3578063132002fc146102e857806318160ddd146102fb57806323b872dd1461030e5780632877c748146103365780632b49d425146103495780632e4404031461040c578063313ce5671461041f5780633b81b785146104485780634b9f5c9814610467578063506353941461047f5780635c658165146104925780635e5c06e2146104b7578063661884631461050f57806370a0823114610531578063772e6f0314610550578063826efb6d146105a85780638672f1bc146105ec5780638da5cb5b146105ff57806395d89b411461062e578063a9059cbb14610641578063b54eb82214610663578063b5e8297514610676578063b5ee6f3d14610689578063bd0887241461069c578063cc70decb146106af578063d246a8c9146106ce578063d73dd623146106e1578063dd62ed3e14610703578063e467f7e014610728578063e8315742146107b7578063ea8eb4be146107ca578063ed343f65146107dd578063f247016c146107f0578063f2fde38b14610803575b60075460ff1615156101dd57600080fd5b60015433600160a060020a039081169116146101f857600080fd5b61020134610822565b005b341561020e57600080fd5b6102166108c4565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561025257808201518382015260200161023a565b50505050905090810190601f16801561027f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561029857600080fd5b6102af600160a060020a03600435166024356108fb565b604051901515815260200160405180910390f35b34156102ce57600080fd5b6102d66109a1565b60405190815260200160405180910390f35b34156102f357600080fd5b6102d66109a7565b341561030657600080fd5b6102d66109ae565b341561031957600080fd5b6102af600160a060020a03600435811690602435166044356109b4565b341561034157600080fd5b610201610b7e565b341561035457600080fd5b61035c610ca5565b6040516020810186905260408101859052606081018490526080810183905260a0810182905260c0808252875460026101006001831615026000190190911604908201819052819060e0820190899080156103f85780601f106103cd576101008083540402835291602001916103f8565b820191906000526020600020905b8154815290600101906020018083116103db57829003601f168201915b505097505050505050505060405180910390f35b341561041757600080fd5b6102d6610cbe565b341561042a57600080fd5b610432610cc4565b60405160ff909116815260200160405180910390f35b341561045357600080fd5b6102d6600160a060020a0360043516610cc9565b341561047257600080fd5b6102d66004351515610d6d565b341561048a57600080fd5b6102d6610e3e565b341561049d57600080fd5b6102d6600160a060020a0360043581169060243516610ec1565b34156104c257600080fd5b6104d6600160a060020a0360043516610ede565b60405180878152602001868152602001858152602001848152602001838152602001828152602001965050505050505060405180910390f35b341561051a57600080fd5b6102af600160a060020a0360043516602435610f1a565b341561053c57600080fd5b6102d6600160a060020a0360043516611014565b341561055b57600080fd5b61020160046024813581810190830135806020601f820181900481020160405190810160405281815292919060208401838380828437509496505084359460200135935061103292505050565b610201600460248135818101908301358060208181020160405190810160405280939291908181526020018383602002808284375094965061114895505050505050565b34156105f757600080fd5b6102af6111ff565b341561060a57600080fd5b610612611208565b604051600160a060020a03909116815260200160405180910390f35b341561063957600080fd5b610216611217565b341561064c57600080fd5b6102af600160a060020a036004351660243561124e565b341561066e57600080fd5b6102d6611389565b341561068157600080fd5b610201611391565b341561069457600080fd5b6102af6113f2565b34156106a757600080fd5b6102af611413565b34156106ba57600080fd5b6102d6600160a060020a036004351661141c565b34156106d957600080fd5b6102d66114d7565b34156106ec57600080fd5b6102af600160a060020a03600435166024356114dd565b341561070e57600080fd5b6102d6600160a060020a0360043581169060243516611581565b341561073357600080fd5b6102016004602481358181019083013580602081810201604051908101604052809392919081815260200183836020028082843782019150505050505091908035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437509496506115ac95505050505050565b34156107c257600080fd5b6102d66116cc565b34156107d557600080fd5b6102d66116d4565b34156107e857600080fd5b6102d66116db565b34156107fb57600080fd5b6102af6116e1565b341561080e57600080fd5b610201600160a060020a036004351661171e565b60008061083a6005548461177d90919063ffffffff16565b91506000548281151561084957fe5b0660058190556000546108739161086790859063ffffffff61179316565b9063ffffffff6117a516565b600454909150610889908263ffffffff61177d16565b6004557f22427047e1a674a9aff59700a2c8d00ea96e017ddf9236690bdedf1f21f28d9d8160405190815260200160405180910390a1505050565b60408051908101604052600b81527f4d6f64756d20546f6b656e000000000000000000000000000000000000000000602082015281565b600081158061092d5750600160a060020a03338116600090815260026020908152604080832093871683529290522054155b151561093857600080fd5b600160a060020a03338116600081815260026020908152604080832094881680845294909152908190208590557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a350600192915050565b60065481565b6212750081565b60005481565b60006109be6118d8565b600754600090819060ff1615156109d457600080fd5b600085116109e157600080fd5b600160a060020a038716600090815260036020526040908190209060c0905190810160409081528254825260018301546020830152600283015490820152600382015460608201526004820154608082015260059091015460a082019081529093508590511015610a5157600080fd5b600160a060020a038088166000908152600260209081526040808320339094168352929052205485901015610a8557600080fd5b610a908760026117bc565b9150610a9d8660026117bc565b6005830154909150610ab5908663ffffffff61179316565b600580840191909155810154610ad1908663ffffffff61177d16565b6005820155600160a060020a0380881660009081526002602090815260408083203390941683529290522054610b0d908663ffffffff61179316565b600160a060020a0380891660009081526002602090815260408083203385168085529252918290209390935590881691907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9088905190815260200160405180910390a35060019695505050505050565b600154600090819033600160a060020a03908116911614610b9e57600080fd5b610ba66111ff565b1515610bb157600080fd5b610bb96113f2565b1515610bc457600080fd5b600d54600c54118015610bda5750600a54600090115b15610c4957600154610bf690600160a060020a031660026117bc565b600a5460058201549193509150610c13908263ffffffff61177d16565b6005830155600054610c2b908263ffffffff61177d16565b600055600654610c41908263ffffffff61179316565b600655610c6e565b600d54600c5411610c6e57600b54610c6a906212750063ffffffff61177d16565b600e555b60086000610c7c828261190f565b506000600182018190556002820181905560038201819055600482018190556005909101555050565b600954600a54600b54600c54600d546008949392919086565b60055481565b600081565b6000610cd36118d8565b600160a060020a038316600090815260036020526040908190209060c0905190810160409081528254825260018301546020830152600283015490820152600382015460608201526004820154608082015260059091015460a0820152600b5490915081511080610d4e57508051158015610d4e5750600b54155b15610d5f578060a001519150610d67565b806080015191505b50919050565b6000806000610d7a6116e1565b1515610d8557600080fd5b610d903360016117bc565b6004810154909250905060008111610da757600080fd5b8315610dc857600c54610dc0908263ffffffff61177d16565b600c55610ddf565b600d54610ddb908263ffffffff61177d16565b600d555b600060048301557f591a89b27b3057021df052ec15caa0a817c1894bcb52243ed0c8cdaa83f322be338583604051600160a060020a03909316835290151560208301526040808301919091526060909101905180910390a19392505050565b6007546000908190819060ff161515610e5657600080fd5b610e613360006117bc565b600381015490925090508015610eb75760006003830155426002830155600160a060020a03331681156108fc0282604051600060405180830381858888f193505050501515610eaf57600080fd5b809250610ebc565b600092505b505090565b600260209081526000928352604080842090915290825290205481565b60036020528060005260406000206000915090508060000154908060010154908060020154908060030154908060040154908060050154905086565b600160a060020a03338116600090815260026020908152604080832093861683529290529081205480831115610f7757600160a060020a033381166000908152600260209081526040808320938816835292905290812055610fae565b610f87818463ffffffff61179316565b600160a060020a033381166000908152600260209081526040808320938916835292905220555b600160a060020a0333811660008181526002602090815260408083209489168084529490915290819020547f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925915190815260200160405180910390a35060019392505050565b600160a060020a031660009081526003602052604090206005015490565b60015433600160a060020a0390811691161461104d57600080fd5b6110556111ff565b1561105f57600080fd5b60065481111561106e57600080fd5b6000811161107b57600080fd5b81151561108757600080fd5b600083511161109557600080fd5b60075460ff1615156110a657600080fd5b600e546110bc906276a70063ffffffff61177d16565b4210156110c857600080fd5b60c0604051908101604090815284825260208201849052810182905242606082015260006080820181905260a0820152600881518190805161110e929160200190611956565b506020820151600182015560408201518160020155606082015181600301556080820151816004015560a082015160059091015550505050565b6001546000908190819033600160a060020a0390811691161461116a57600080fd5b60009250600091505b83518260ff1610156111e1576111a2848360ff168151811061119157fe5b9060200190602002015160006117bc565b60028101549091506302d276000142106111d157600381018054600090915542600283015592909201916111d6565b600080fd5b600190910190611173565b6111f96111f4348563ffffffff61177d16565b610822565b50505050565b60095415155b90565b600154600160a060020a031681565b60408051908101604052600381527f4d4f440000000000000000000000000000000000000000000000000000000000602082015281565b60006112586118d8565b600754600090819060ff16151561126e57600080fd5b6000851161127b57600080fd5b600160a060020a033316600090815260036020526040908190209060c0905190810160409081528254825260018301546020830152600283015490820152600382015460608201526004820154608082015260059091015460a0820190815290935085905110156112eb57600080fd5b6112f63360026117bc565b91506113038660026117bc565b600583015490915061131b908663ffffffff61179316565b600580840191909155810154611337908663ffffffff61177d16565b6005820155600160a060020a038087169033167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8760405190815260200160405180910390a350600195945050505050565b6302d2760081565b60015433600160a060020a039081169116146113ac57600080fd5b60075460ff16156113bc57600080fd5b6301c9c3806113d860005460065461177d90919063ffffffff16565b11156113e357600080fd5b6007805460ff19166001179055565b600b5460009061140b906212750063ffffffff61177d16565b421015905090565b60075460ff1681565b600160a060020a038116600090815260036020526040812060010154600454829161144d919063ffffffff61179316565b905080156114b657600160a060020a0383166000908152600360205260409020600501546114af9061148690839063ffffffff6118b416565b600160a060020a038516600090815260036020819052604090912001549063ffffffff61177d16565b9150610d67565b5050600160a060020a03166000908152600360208190526040909120015490565b600e5481565b600160a060020a033381166000908152600260209081526040808320938616835292905290812054611515908363ffffffff61177d16565b600160a060020a0333811660008181526002602090815260408083209489168084529490915290819020849055919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591905190815260200160405180910390a350600192915050565b600160a060020a03918216600090815260026020908152604080832093909416825291909152205490565b60015460009081908190819033600160a060020a039081169116146115d057600080fd5b60075460ff16156115e057600080fd5b600093505b85518460ff1610156116c457858460ff168151811061160057fe5b906020019060200201519250848460ff168151811061161b57fe5b90602001906020020151600160a060020a038416600090815260036020526040902060058101549193509150611657908363ffffffff61177d16565b6005820155426002820155600054611675908363ffffffff61177d16565b600055600160a060020a038084169033167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405190815260200160405180910390a36001909301926115e5565b505050505050565b6301c9c38081565b6276a70081565b60045481565b60006116eb6111ff565b80156116f95750600b544210155b80156117195750600b54611716906212750063ffffffff61177d16565b42105b905090565b60015433600160a060020a0390811691161461173957600080fd5b600160a060020a038116151561174e57600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60008282018381101561178c57fe5b9392505050565b60008282111561179f57fe5b50900390565b60008082848115156117b357fe5b04949350505050565b600160a060020a03821660009081526003602052604081208160018460028111156117e357fe5b14806117fa575060028460028111156117f857fe5b145b1561182a576118076116e1565b80156118155750600b548254105b1561182a5760058201546004830155600b5482555b600084600281111561183857fe5b148061184f5750600284600281111561184d57fe5b145b156118ac57600182015460045461186b9163ffffffff61179316565b905080156118ac5761189e61188d8360050154836118b490919063ffffffff16565b60038401549063ffffffff61177d16565b600383015560045460018301555b509392505050565b60008282028315806118d057508284828115156118cd57fe5b04145b151561178c57fe5b60c0604051908101604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b50805460018160011615610100020316600290046000825580601f106119355750611953565b601f01602090049060005260206000209081019061195391906119d4565b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061199757805160ff19168380011785556119c4565b828001600101855582156119c4579182015b828111156119c45782518255916020019190600101906119a9565b506119d09291506119d4565b5090565b61120591905b808211156119d057600081556001016119da5600a165627a7a723058206378abcfaefceadc69da8c6a5ce5584d9407c8c1b14d336a43049204bdd502450029
Swarm Source
bzzr://6378abcfaefceadc69da8c6a5ce5584d9407c8c1b14d336a43049204bdd50245
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.