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 4,285 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer | 13686156 | 1126 days ago | IN | 0 ETH | 0.0085779 | ||||
Transfer | 12719372 | 1277 days ago | IN | 0 ETH | 0.0006 | ||||
Transfer | 12644069 | 1289 days ago | IN | 0 ETH | 0.00187 | ||||
Transfer | 12636447 | 1290 days ago | IN | 0 ETH | 0.001275 | ||||
Transfer | 12351452 | 1334 days ago | IN | 0 ETH | 0.00087 | ||||
Transfer | 10704944 | 1587 days ago | IN | 0 ETH | 0.02022 | ||||
Transfer | 9678223 | 1746 days ago | IN | 0 ETH | 0.00111671 | ||||
Transfer | 9382571 | 1792 days ago | IN | 0 ETH | 0.00026215 | ||||
Transfer | 9336988 | 1799 days ago | IN | 0 ETH | 0.01 | ||||
Transfer | 8329951 | 1963 days ago | IN | 0 ETH | 0.00281492 | ||||
Transfer | 8150199 | 1991 days ago | IN | 0 ETH | 0.00166515 | ||||
Transfer | 7956558 | 2021 days ago | IN | 0 ETH | 0.01647375 | ||||
Transfer | 7556182 | 2084 days ago | IN | 0 ETH | 0.00296293 | ||||
Transfer | 7533944 | 2087 days ago | IN | 0 ETH | 0.00166546 | ||||
Transfer | 7503645 | 2092 days ago | IN | 0 ETH | 0.00274877 | ||||
Transfer | 7503516 | 2092 days ago | IN | 0 ETH | 0.000304 | ||||
Transfer | 6980458 | 2187 days ago | IN | 0 ETH | 0.001 | ||||
Transfer | 6575785 | 2254 days ago | IN | 0 ETH | 0.00029612 | ||||
Transfer | 6575654 | 2254 days ago | IN | 0 ETH | 0.00257625 | ||||
Transfer | 6526654 | 2262 days ago | IN | 0 ETH | 0.00506107 | ||||
Transfer | 6482351 | 2269 days ago | IN | 0 ETH | 0.00200502 | ||||
Transfer | 6480309 | 2270 days ago | IN | 0 ETH | 0.00200502 | ||||
Transfer | 6479688 | 2270 days ago | IN | 0 ETH | 0.00200502 | ||||
Transfer | 6400852 | 2283 days ago | IN | 0 ETH | 0.001 | ||||
Transfer | 6400683 | 2283 days ago | IN | 0 ETH | 0.00045 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
DayToken
Compiler Version
v0.4.16+commit.d7661dd9
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2017-09-15 */ pragma solidity ^0.4.13; ////////////////// >>>>> Wallet Contract <<<<< /////////////////// /// @title Multisignature wallet - Allows multiple parties to agree on transactions before execution. /// @author Stefan George - <[email protected]> contract MultiSigWallet { uint constant public MAX_OWNER_COUNT = 50; event Confirmation(address indexed sender, uint indexed transactionId); event Revocation(address indexed sender, uint indexed transactionId); event Submission(uint indexed transactionId); event Execution(uint indexed transactionId); event ExecutionFailure(uint indexed transactionId); event Deposit(address indexed sender, uint value); event OwnerAddition(address indexed owner); event OwnerRemoval(address indexed owner); event RequirementChange(uint required); mapping (uint => Transaction) public transactions; mapping (uint => mapping (address => bool)) public confirmations; mapping (address => bool) public isOwner; address[] public owners; uint public required; uint public transactionCount; struct Transaction { address destination; uint value; bytes data; bool executed; } modifier onlyWallet() { if (msg.sender != address(this)) throw; _; } modifier ownerDoesNotExist(address owner) { if (isOwner[owner]) throw; _; } modifier ownerExists(address owner) { if (!isOwner[owner]) throw; _; } modifier transactionExists(uint transactionId) { if (transactions[transactionId].destination == 0) throw; _; } modifier confirmed(uint transactionId, address owner) { if (!confirmations[transactionId][owner]) throw; _; } modifier notConfirmed(uint transactionId, address owner) { if (confirmations[transactionId][owner]) throw; _; } modifier notExecuted(uint transactionId) { if (transactions[transactionId].executed) throw; _; } modifier notNull(address _address) { if (_address == 0) throw; _; } modifier validRequirement(uint ownerCount, uint _required) { if ( ownerCount > MAX_OWNER_COUNT || _required > ownerCount || _required == 0 || ownerCount == 0) throw; _; } /// @dev Fallback function allows to deposit ether. function() payable { if (msg.value > 0) Deposit(msg.sender, msg.value); } /* * Public functions */ /// @dev Contract constructor sets initial owners and required number of confirmations. /// @param _owners List of initial owners. /// @param _required Number of required confirmations. function MultiSigWallet(address[] _owners, uint _required) public validRequirement(_owners.length, _required) { for (uint i=0; i<_owners.length; i++) { if (isOwner[_owners[i]] || _owners[i] == 0) throw; isOwner[_owners[i]] = true; } owners = _owners; required = _required; } /// @dev Allows to add a new owner. Transaction has to be sent by wallet. /// @param owner Address of new owner. function addOwner(address owner) public onlyWallet ownerDoesNotExist(owner) notNull(owner) validRequirement(owners.length + 1, required) { isOwner[owner] = true; owners.push(owner); OwnerAddition(owner); } /// @dev Allows to remove an owner. Transaction has to be sent by wallet. /// @param owner Address of owner. function removeOwner(address owner) public onlyWallet ownerExists(owner) { isOwner[owner] = false; for (uint i=0; i<owners.length - 1; i++) if (owners[i] == owner) { owners[i] = owners[owners.length - 1]; break; } owners.length -= 1; if (required > owners.length) changeRequirement(owners.length); OwnerRemoval(owner); } /// @dev Allows to replace an owner with a new owner. Transaction has to be sent by wallet. /// @param owner Address of owner to be replaced. /// @param owner Address of new owner. function replaceOwner(address owner, address newOwner) public onlyWallet ownerExists(owner) ownerDoesNotExist(newOwner) { for (uint i=0; i<owners.length; i++) if (owners[i] == owner) { owners[i] = newOwner; break; } isOwner[owner] = false; isOwner[newOwner] = true; OwnerRemoval(owner); OwnerAddition(newOwner); } /// @dev Allows to change the number of required confirmations. Transaction has to be sent by wallet. /// @param _required Number of required confirmations. function changeRequirement(uint _required) public onlyWallet validRequirement(owners.length, _required) { required = _required; RequirementChange(_required); } /// @dev Allows an owner to submit and confirm a transaction. /// @param destination Transaction target address. /// @param value Transaction ether value. /// @param data Transaction data payload. /// @return Returns transaction ID. function submitTransaction(address destination, uint value, bytes data) public returns (uint transactionId) { transactionId = addTransaction(destination, value, data); confirmTransaction(transactionId); } /// @dev Allows an owner to confirm a transaction. /// @param transactionId Transaction ID. function confirmTransaction(uint transactionId) public ownerExists(msg.sender) transactionExists(transactionId) notConfirmed(transactionId, msg.sender) { confirmations[transactionId][msg.sender] = true; Confirmation(msg.sender, transactionId); executeTransaction(transactionId); } /// @dev Allows an owner to revoke a confirmation for a transaction. /// @param transactionId Transaction ID. function revokeConfirmation(uint transactionId) public ownerExists(msg.sender) confirmed(transactionId, msg.sender) notExecuted(transactionId) { confirmations[transactionId][msg.sender] = false; Revocation(msg.sender, transactionId); } /// @dev Allows anyone to execute a confirmed transaction. /// @param transactionId Transaction ID. function executeTransaction(uint transactionId) public notExecuted(transactionId) { if (isConfirmed(transactionId)) { Transaction tx = transactions[transactionId]; tx.executed = true; if (tx.destination.call.value(tx.value)(tx.data)) Execution(transactionId); else { ExecutionFailure(transactionId); tx.executed = false; } } } /// @dev Returns the confirmation status of a transaction. /// @param transactionId Transaction ID. /// @return Confirmation status. function isConfirmed(uint transactionId) public constant returns (bool) { uint count = 0; for (uint i=0; i<owners.length; i++) { if (confirmations[transactionId][owners[i]]) count += 1; if (count == required) return true; } } /* * Internal functions */ /// @dev Adds a new transaction to the transaction mapping, if transaction does not exist yet. /// @param destination Transaction target address. /// @param value Transaction ether value. /// @param data Transaction data payload. /// @return Returns transaction ID. function addTransaction(address destination, uint value, bytes data) internal notNull(destination) returns (uint transactionId) { transactionId = transactionCount; transactions[transactionId] = Transaction({ destination: destination, value: value, data: data, executed: false }); transactionCount += 1; Submission(transactionId); } /* * Web3 call functions */ /// @dev Returns number of confirmations of a transaction. /// @param transactionId Transaction ID. /// @return Number of confirmations. function getConfirmationCount(uint transactionId) public constant returns (uint count) { for (uint i=0; i<owners.length; i++) if (confirmations[transactionId][owners[i]]) count += 1; } /// @dev Returns total number of transactions after filers are applied. /// @param pending Include pending transactions. /// @param executed Include executed transactions. /// @return Total number of transactions after filters are applied. function getTransactionCount(bool pending, bool executed) public constant returns (uint count) { for (uint i=0; i<transactionCount; i++) if ( pending && !transactions[i].executed || executed && transactions[i].executed) count += 1; } /// @dev Returns list of owners. /// @return List of owner addresses. function getOwners() public constant returns (address[]) { return owners; } /// @dev Returns array with owner addresses, which confirmed transaction. /// @param transactionId Transaction ID. /// @return Returns array of owner addresses. function getConfirmations(uint transactionId) public constant returns (address[] _confirmations) { address[] memory confirmationsTemp = new address[](owners.length); uint count = 0; uint i; for (i=0; i<owners.length; i++) if (confirmations[transactionId][owners[i]]) { confirmationsTemp[count] = owners[i]; count += 1; } _confirmations = new address[](count); for (i=0; i<count; i++) _confirmations[i] = confirmationsTemp[i]; } /// @dev Returns list of transaction IDs in defined range. /// @param from Index start position of transaction array. /// @param to Index end position of transaction array. /// @param pending Include pending transactions. /// @param executed Include executed transactions. /// @return Returns array of transaction IDs. function getTransactionIds(uint from, uint to, bool pending, bool executed) public constant returns (uint[] _transactionIds) { uint[] memory transactionIdsTemp = new uint[](transactionCount); uint count = 0; uint i; for (i=0; i<transactionCount; i++) if ( pending && !transactions[i].executed || executed && transactions[i].executed) { transactionIdsTemp[count] = i; count += 1; } _transactionIds = new uint[](to - from); for (i=from; i<to; i++) _transactionIds[i - from] = transactionIdsTemp[i]; } } ////////////////// >>>>> Library Contracts <<<<< /////////////////// contract SafeMathLib { function safeMul(uint a, uint b) constant returns (uint) { uint c = a * b; assert(a == 0 || c / a == b); return c; } function safeSub(uint a, uint b) constant returns (uint) { assert(b <= a); return a - b; } function safeAdd(uint a, uint b) constant returns (uint) { uint c = a + b; assert(c>=a); return c; } } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of "user permissions". */ contract Ownable { address public owner; address public newOwner; event OwnershipTransferred(address indexed _from, address indexed _to); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function transferOwnership(address _newOwner) onlyOwner { newOwner = _newOwner; } function acceptOwnership() { require(msg.sender == newOwner); OwnershipTransferred(owner, newOwner); owner = newOwner; } } ////////////////// >>>>> Token Contracts <<<<< /////////////////// /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20Basic { uint public totalSupply; function balanceOf(address _owner) constant returns (uint balance); function transfer(address _to, uint _value) returns (bool success); event Transfer(address indexed _from, address indexed _to, uint _value); } /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address _owner, address _spender) constant returns (uint remaining); function transferFrom(address _from, address _to, uint _value) returns (bool success); function approve(address _spender, uint _value) returns (bool success); event Approval(address indexed _owner, address indexed _spender, uint _value); } /** * Standard ERC20 token with Short Hand Attack and approve() race condition mitigation. * * Based on code by FirstBlood: * https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol */ contract StandardToken is ERC20, SafeMathLib { /* Token supply got increased and a new owner received these tokens */ event Minted(address receiver, uint amount); /* Actual balances of token holders */ mapping(address => uint) balances; /* approve() allowances */ mapping (address => mapping (address => uint)) allowed; function transfer(address _to, uint _value) returns (bool success) { if (balances[msg.sender] >= _value && _value > 0 && balances[_to] + _value > balances[_to] ) { balances[msg.sender] = safeSub(balances[msg.sender],_value); balances[_to] = safeAdd(balances[_to],_value); Transfer(msg.sender, _to, _value); return true; } else{ return false; } } function transferFrom(address _from, address _to, uint _value) returns (bool success) { uint _allowance = allowed[_from][msg.sender]; if (balances[_from] >= _value // From a/c has balance && _allowance >= _value // Transfer approved && _value > 0 // Non-zero transfer && balances[_to] + _value > balances[_to] // Overflow check ){ balances[_to] = safeAdd(balances[_to],_value); balances[_from] = safeSub(balances[_from],_value); allowed[_from][msg.sender] = safeSub(_allowance,_value); Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint balance) { return balances[_owner]; } function approve(address _spender, uint _value) returns (bool success) { // 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; } function allowance(address _owner, address _spender) constant returns (uint remaining) { return allowed[_owner][_spender]; } } /** * A token that can increase its supply by another contract. * * This allows uncapped crowdsale by dynamically increasing the supply when money pours in. * Only mint agents, contracts whitelisted by owner, can mint new tokens. * */ contract MintableToken is StandardToken, Ownable { bool public mintingFinished = false; /** List of agents that are allowed to create new tokens */ mapping (address => bool) public mintAgents; event MintingAgentChanged(address addr, bool state ); /** * Create new tokens and allocate them to an address.. * * Only callably by a crowdsale contract (mint agent). */ function mint(address receiver, uint amount) onlyMintAgent canMint public { totalSupply = safeAdd(totalSupply, amount); balances[receiver] = safeAdd(balances[receiver], amount); // This will make the mint transaction apper in EtherScan.io // We can remove this after there is a standardized minting event Transfer(0, receiver, amount); } /** * Owner can allow a crowdsale contract to mint new tokens. */ function setMintAgent(address addr, bool state) onlyOwner canMint public { mintAgents[addr] = state; MintingAgentChanged(addr, state); } modifier onlyMintAgent() { // Only crowdsale contracts are allowed to mint new tokens require(mintAgents[msg.sender]); _; } /** Make sure we are not done yet. */ modifier canMint() { require(!mintingFinished); _; } } /** * Define interface for releasing the token transfer after a successful crowdsale. */ contract ReleasableToken is ERC20, Ownable { /* The finalizer contract that allows unlift the transfer limits on this token */ address public releaseAgent; /** A crowdsale contract can release us to the wild if ICO success. * If false we are are in transfer lock up period. */ bool public released = false; /** Map of agents that are allowed to transfer tokens regardless of the lock down period. * These are crowdsale contracts and possible the team multisig itself. */ mapping (address => bool) public transferAgents; /** * Limit token transfer until the crowdsale is over. */ modifier canTransfer(address _sender) { if (!released) { require(transferAgents[_sender]); } _; } /** * Set the contract that can call release and make the token transferable. * * Design choice. Allow reset the release agent to fix fat finger mistakes. */ function setReleaseAgent(address addr) onlyOwner inReleaseState(false) public { // We don't do interface check here as we might want to a normal wallet address to act as a release agent releaseAgent = addr; } /** * Owner can allow a particular address (a crowdsale contract) to transfer tokens despite the lock up period. */ function setTransferAgent(address addr, bool state) onlyOwner inReleaseState(false) public { transferAgents[addr] = state; } /** * One way function to release the tokens to the wild. * * Can be called only from the release agent that is the final ICO contract. * It is only called if the crowdsale has been success (first milestone reached). */ function releaseTokenTransfer() public onlyReleaseAgent { released = true; } /** The function can be called only before or after the tokens have been releasesd */ modifier inReleaseState(bool releaseState) { require(releaseState == released); _; } /** The function can be called only by a whitelisted release agent. */ modifier onlyReleaseAgent() { require(msg.sender == releaseAgent); _; } function transfer(address _to, uint _value) canTransfer(msg.sender) returns (bool success) { // Call StandardToken.transfer() return super.transfer(_to, _value); } function transferFrom(address _from, address _to, uint _value) canTransfer(_from) returns (bool success) { // Call StandardToken.transferForm() return super.transferFrom(_from, _to, _value); } } /** * Upgrade agent interface inspired by Lunyr. * * Upgrade agent transfers tokens to a new contract. * Upgrade agent itself can be the token contract, or just a middle man contract doing the heavy lifting. */ contract UpgradeAgent { uint public originalSupply; /** Interface marker */ function isUpgradeAgent() public constant returns (bool) { return true; } function upgradeFrom(address _from, uint256 _value) public; } /** * A token upgrade mechanism where users can opt-in amount of tokens to the next smart contract revision. * * First envisioned by Golem and Lunyr projects. */ contract UpgradeableToken is StandardToken { /** Contract / person who can set the upgrade path. * This can be the same as team multisig wallet, as what it is with its default value. */ address public upgradeMaster; /** The next contract where the tokens will be migrated. */ UpgradeAgent public upgradeAgent; /** How many tokens we have upgraded by now. */ uint256 public totalUpgraded; /** * Upgrade states. * * - NotAllowed: The child contract has not reached a condition where the upgrade can bgun * - WaitingForAgent: Token allows upgrade, but we don't have a new agent yet * - ReadyToUpgrade: The agent is set, but not a single token has been upgraded yet * - Upgrading: Upgrade agent is set and the balance holders can upgrade their tokens * */ enum UpgradeState {Unknown, NotAllowed, WaitingForAgent, ReadyToUpgrade, Upgrading} /** * Somebody has upgraded some of their tokens. */ event Upgrade(address indexed _from, address indexed _to, uint256 _value); /** * New upgrade agent available. */ event UpgradeAgentSet(address agent); /** * Do not allow construction without upgrade master set. */ function UpgradeableToken(address _upgradeMaster) { upgradeMaster = _upgradeMaster; } /** * Allow the token holder to upgrade some of their tokens to a new contract. */ function upgrade(uint256 value) public { UpgradeState state = getUpgradeState(); require((state == UpgradeState.ReadyToUpgrade || state == UpgradeState.Upgrading)); // Validate input value. require(value!=0); balances[msg.sender] = safeSub(balances[msg.sender],value); // Take tokens out from circulation totalSupply = safeSub(totalSupply,value); totalUpgraded = safeAdd(totalUpgraded,value); // Upgrade agent reissues the tokens upgradeAgent.upgradeFrom(msg.sender, value); Upgrade(msg.sender, upgradeAgent, value); } /** * Set an upgrade agent that handles */ function setUpgradeAgent(address agent) external { require(canUpgrade()); require(agent != 0x0); // Only a master can designate the next agent require(msg.sender == upgradeMaster); // Upgrade has already begun for an agent require(getUpgradeState() != UpgradeState.Upgrading); upgradeAgent = UpgradeAgent(agent); // Bad interface require(upgradeAgent.isUpgradeAgent()); // Make sure that token supplies match in source and target require(upgradeAgent.originalSupply() == totalSupply); UpgradeAgentSet(upgradeAgent); } /** * Get the state of the token upgrade. */ function getUpgradeState() public constant returns(UpgradeState) { if (!canUpgrade()) return UpgradeState.NotAllowed; else if(address(upgradeAgent) == 0x00) return UpgradeState.WaitingForAgent; else if(totalUpgraded == 0) return UpgradeState.ReadyToUpgrade; else return UpgradeState.Upgrading; } /** * Change the upgrade master. * * This allows us to set a new owner for the upgrade mechanism. */ function setUpgradeMaster(address master) public { require(master != 0x0); require(msg.sender == upgradeMaster); upgradeMaster = master; } /** * Child contract can enable to provide the condition when the upgrade can begun. */ function canUpgrade() public constant returns(bool) { return true; } } /** * A crowdsale token. * * An ERC-20 token designed specifically for crowdsales with investor protection and * further development path. * * - The token transfer() is disabled until the crowdsale is over * - The token contract gives an opt-in upgrade path to a new contract * - The same token can be part of several crowdsales through approve() mechanism * - The token can be capped (supply set in the constructor) * or uncapped (crowdsale contract can mint new tokens) */ contract DayToken is ReleasableToken, MintableToken, UpgradeableToken { enum sellingStatus {NOTONSALE, EXPIRED, ONSALE} /** Basic structure for a contributor with a minting Address * adr address of the contributor * initialContributionDay initial contribution of the contributor in wei * lastUpdatedOn day count from Minting Epoch when the account balance was last updated * mintingPower Initial Minting power of the address * expiryBlockNumber Variable to mark end of Minting address sale. Set by user * minPriceInDay minimum price of Minting address in Day tokens. Set by user * status Selling status Variable for transfer Minting address. * sellingPriceInDay Variable for transfer Minting address. Price at which the address is actually sold */ struct Contributor { address adr; uint256 initialContributionDay; uint256 lastUpdatedOn; //Day from Minting Epoch uint256 mintingPower; uint expiryBlockNumber; uint256 minPriceInDay; sellingStatus status; } /* Stores maximum days for which minting will happen since minting epoch */ uint256 public maxMintingDays = 1095; /* Mapping to store id of each minting address */ mapping (address => uint) public idOf; /* Mapping from id of each minting address to their respective structures */ mapping (uint256 => Contributor) public contributors; /* mapping to store unix timestamp of when the minting address is issued to each team member */ mapping (address => uint256) public teamIssuedTimestamp; mapping (address => bool) public soldAddresses; mapping (address => uint256) public sellingPriceInDayOf; /* Stores the id of the first contributor */ uint256 public firstContributorId; /* Stores total Pre + Post ICO TimeMints */ uint256 public totalNormalContributorIds; /* Stores total Normal TimeMints allocated */ uint256 public totalNormalContributorIdsAllocated = 0; /* Stores the id of the first team TimeMint */ uint256 public firstTeamContributorId; /* Stores the total team TimeMints */ uint256 public totalTeamContributorIds; /* Stores total team TimeMints allocated */ uint256 public totalTeamContributorIdsAllocated = 0; /* Stores the id of the first Post ICO contributor (for auctionable TimeMints) */ uint256 public firstPostIcoContributorId; /* Stores total Post ICO TimeMints (for auction) */ uint256 public totalPostIcoContributorIds; /* Stores total Auction TimeMints allocated */ uint256 public totalPostIcoContributorIdsAllocated = 0; /* Maximum number of address */ uint256 public maxAddresses; /* Min Minting power with 19 decimals: 0.5% : 5000000000000000000 */ uint256 public minMintingPower; /* Max Minting power with 19 decimals: 1% : 10000000000000000000 */ uint256 public maxMintingPower; /* Halving cycle in days (88) */ uint256 public halvingCycle; /* Unix timestamp when minting is to be started */ uint256 public initialBlockTimestamp; /* Flag to prevent setting initialBlockTimestamp more than once */ bool public isInitialBlockTimestampSet; /* number of decimals in minting power */ uint256 public mintingDec; /* Minimum Balance in Day tokens required to sell a minting address */ uint256 public minBalanceToSell; /* Team address lock down period from issued time, in seconds */ uint256 public teamLockPeriodInSec; //Initialize and set function /* Duration in secs that we consider as a day. (For test deployment purposes, if we want to decrease length of a day. default: 84600)*/ uint256 public DayInSecs; event UpdatedTokenInformation(string newName, string newSymbol); event MintingAdrTransferred(uint id, address from, address to); event ContributorAdded(address adr, uint id); event TimeMintOnSale(uint id, address seller, uint minPriceInDay, uint expiryBlockNumber); event TimeMintSold(uint id, address buyer, uint offerInDay); event PostInvested(address investor, uint weiAmount, uint tokenAmount, uint customerId, uint contributorId); event TeamAddressAdded(address teamAddress, uint id); // Tell us invest was success event Invested(address receiver, uint weiAmount, uint tokenAmount, uint customerId, uint contributorId); modifier onlyContributor(uint id){ require(isValidContributorId(id)); _; } string public name; string public symbol; uint8 public decimals; /** * Construct the token. * * This token must be created through a team multisig wallet, so that it is owned by that wallet. * * @param _name Token name * @param _symbol Token symbol - should be all caps * @param _initialSupply How many tokens we start with * @param _decimals Number of decimal places * _mintable Are new tokens created over the crowdsale or do we distribute only the initial supply? */ function DayToken(string _name, string _symbol, uint _initialSupply, uint8 _decimals, bool _mintable, uint _maxAddresses, uint _firstTeamContributorId, uint _totalTeamContributorIds, uint _totalPostIcoContributorIds, uint256 _minMintingPower, uint256 _maxMintingPower, uint _halvingCycle, uint256 _minBalanceToSell, uint256 _dayInSecs, uint256 _teamLockPeriodInSec) UpgradeableToken(msg.sender) { // Create any address, can be transferred // to team multisig via changeOwner(), // also remember to call setUpgradeMaster() owner = msg.sender; name = _name; symbol = _symbol; totalSupply = _initialSupply; decimals = _decimals; // Create initially all balance on the team multisig balances[owner] = totalSupply; maxAddresses = _maxAddresses; require(maxAddresses > 1); // else division by zero will occur in setInitialMintingPowerOf firstContributorId = 1; totalNormalContributorIds = maxAddresses - _totalTeamContributorIds - _totalPostIcoContributorIds; // check timeMint total is sane require(totalNormalContributorIds >= 1); firstTeamContributorId = _firstTeamContributorId; totalTeamContributorIds = _totalTeamContributorIds; totalPostIcoContributorIds = _totalPostIcoContributorIds; // calculate first contributor id to be auctioned post ICO firstPostIcoContributorId = maxAddresses - totalPostIcoContributorIds + 1; minMintingPower = _minMintingPower; maxMintingPower = _maxMintingPower; halvingCycle = _halvingCycle; // setting future date far far away, year 2020, // call setInitialBlockTimestamp to set proper timestamp initialBlockTimestamp = 1577836800; isInitialBlockTimestampSet = false; // use setMintingDec to change this mintingDec = 19; minBalanceToSell = _minBalanceToSell; DayInSecs = _dayInSecs; teamLockPeriodInSec = _teamLockPeriodInSec; if (totalSupply > 0) { Minted(owner, totalSupply); } if (!_mintable) { mintingFinished = true; require(totalSupply != 0); } } /** * Used to set timestamp at which minting power of TimeMints is activated * Can be called only by owner * @param _initialBlockTimestamp timestamp to be set. */ function setInitialBlockTimestamp(uint _initialBlockTimestamp) internal onlyOwner { require(!isInitialBlockTimestampSet); isInitialBlockTimestampSet = true; initialBlockTimestamp = _initialBlockTimestamp; } /** * check if mintining power is activated and Day token and Timemint transfer is enabled */ function isDayTokenActivated() constant returns (bool isActivated) { return (block.timestamp >= initialBlockTimestamp); } /** * to check if an id is a valid contributor * @param _id contributor id to check. */ function isValidContributorId(uint _id) constant returns (bool isValidContributor) { return (_id > 0 && _id <= maxAddresses && contributors[_id].adr != 0 && idOf[contributors[_id].adr] == _id); // cross checking } /** * to check if an address is a valid contributor * @param _address contributor address to check. */ function isValidContributorAddress(address _address) constant returns (bool isValidContributor) { return isValidContributorId(idOf[_address]); } /** * In case of Team address check if lock-in period is over (returns true for all non team addresses) * @param _address team address to check lock in period for. */ function isTeamLockInPeriodOverIfTeamAddress(address _address) constant returns (bool isLockInPeriodOver) { isLockInPeriodOver = true; if (teamIssuedTimestamp[_address] != 0) { if (block.timestamp - teamIssuedTimestamp[_address] < teamLockPeriodInSec) isLockInPeriodOver = false; } return isLockInPeriodOver; } /** * Used to set mintingDec * Can be called only by owner * @param _mintingDec bounty to be set. */ function setMintingDec(uint256 _mintingDec) onlyOwner { require(!isInitialBlockTimestampSet); mintingDec = _mintingDec; } /** * When token is released to be transferable, enforce no new tokens can be created. */ function releaseTokenTransfer() public onlyOwner { require(isInitialBlockTimestampSet); mintingFinished = true; super.releaseTokenTransfer(); } /** * Allow upgrade agent functionality kick in only if the crowdsale was success. */ function canUpgrade() public constant returns(bool) { return released && super.canUpgrade(); } /** * Owner can update token information here */ function setTokenInformation(string _name, string _symbol) onlyOwner { name = _name; symbol = _symbol; UpdatedTokenInformation(name, symbol); } /** * Returns the current phase. * Note: Phase starts with 1 * @param _day Number of days since Minting Epoch */ function getPhaseCount(uint _day) public constant returns (uint phase) { phase = (_day/halvingCycle) + 1; return (phase); } /** * Returns current day number since minting epoch * or zero if initialBlockTimestamp is in future or its DayZero. */ function getDayCount() public constant returns (uint daySinceMintingEpoch) { daySinceMintingEpoch = 0; if (isDayTokenActivated()) daySinceMintingEpoch = (block.timestamp - initialBlockTimestamp)/DayInSecs; return daySinceMintingEpoch; } /** * Calculates and Sets the minting power of a particular id. * Called before Minting Epoch by constructor * @param _id id of the address whose minting power is to be set. */ function setInitialMintingPowerOf(uint256 _id) internal onlyContributor(_id) { contributors[_id].mintingPower = (maxMintingPower - ((_id-1) * (maxMintingPower - minMintingPower)/(maxAddresses-1))); } /** * Returns minting power of a particular id. * @param _id Contribution id whose minting power is to be returned */ function getMintingPowerById(uint _id) public constant returns (uint256 mintingPower) { return contributors[_id].mintingPower/(2**(getPhaseCount(getDayCount())-1)); } /** * Returns minting power of a particular address. * @param _adr Address whose minting power is to be returned */ function getMintingPowerByAddress(address _adr) public constant returns (uint256 mintingPower) { return getMintingPowerById(idOf[_adr]); } /** * Calculates and returns the balance based on the minting power, day and phase. * Can only be called internally * Can calculate balance based on last updated. * @param _id id whose balnce is to be calculated * @param _dayCount day count upto which balance is to be updated */ function availableBalanceOf(uint256 _id, uint _dayCount) internal returns (uint256) { uint256 balance = balances[contributors[_id].adr]; uint maxUpdateDays = _dayCount < maxMintingDays ? _dayCount : maxMintingDays; uint i = contributors[_id].lastUpdatedOn + 1; while(i <= maxUpdateDays) { uint phase = getPhaseCount(i); uint phaseEndDay = phase * halvingCycle - 1; // as first day is 0 uint constantFactor = contributors[_id].mintingPower / 2**(phase-1); for (uint j = i; j <= phaseEndDay && j <= maxUpdateDays; j++) { balance = safeAdd( balance, constantFactor * balance / 10**(mintingDec + 2) ); } i = j; } return balance; } /** * Updates the balance of the specified id in its structure and also in the balances[] mapping. * returns true if successful. * Only for internal calls. Not public. * @param _id id whose balance is to be updated. */ function updateBalanceOf(uint256 _id) internal returns (bool success) { // check if its contributor if (isValidContributorId(_id)) { uint dayCount = getDayCount(); // proceed only if not already updated today if (contributors[_id].lastUpdatedOn != dayCount && contributors[_id].lastUpdatedOn < maxMintingDays) { address adr = contributors[_id].adr; uint oldBalance = balances[adr]; totalSupply = safeSub(totalSupply, oldBalance); uint newBalance = availableBalanceOf(_id, dayCount); balances[adr] = newBalance; totalSupply = safeAdd(totalSupply, newBalance); contributors[_id].lastUpdatedOn = dayCount; Transfer(0, adr, newBalance - oldBalance); return true; } } return false; } /** * Standard ERC20 function overridden. * Returns the balance of the specified address. * Calculates the balance on fly only if it is a minting address else * simply returns balance from balances[] mapping. * For public calls. * @param _adr address whose balance is to be returned. */ function balanceOf(address _adr) constant returns (uint balance) { uint id = idOf[_adr]; if (id != 0) return balanceById(id); else return balances[_adr]; } /** * Standard ERC20 function overridden. * Returns the balance of the specified id. * Calculates the balance on fly only if it is a minting address else * simply returns balance from balances[] mapping. * For public calls. * @param _id address whose balance is to be returned. */ function balanceById(uint _id) public constant returns (uint256 balance) { address adr = contributors[_id].adr; if (isDayTokenActivated()) { if (isValidContributorId(_id)) { return ( availableBalanceOf(_id, getDayCount()) ); } } return balances[adr]; } /** * Returns totalSupply of DAY tokens. */ function getTotalSupply() public constant returns (uint) { return totalSupply; } /** Function to update balance of a Timemint * returns true if balance updated, false otherwise * @param _id TimeMint to update */ function updateTimeMintBalance(uint _id) public returns (bool) { require(isDayTokenActivated()); return updateBalanceOf(_id); } /** Function to update balance of sender's Timemint * returns true if balance updated, false otherwise */ function updateMyTimeMintBalance() public returns (bool) { require(isDayTokenActivated()); return updateBalanceOf(idOf[msg.sender]); } /** * Standard ERC20 function overidden. * Used to transfer day tokens from caller's address to another * @param _to address to which Day tokens are to be transferred * @param _value Number of Day tokens to be transferred */ function transfer(address _to, uint _value) public returns (bool success) { require(isDayTokenActivated()); // if Team address, check if lock-in period is over require(isTeamLockInPeriodOverIfTeamAddress(msg.sender)); updateBalanceOf(idOf[msg.sender]); // Check sender account has enough balance and transfer amount is non zero require ( balanceOf(msg.sender) >= _value && _value != 0 ); updateBalanceOf(idOf[_to]); balances[msg.sender] = safeSub(balances[msg.sender], _value); balances[_to] = safeAdd(balances[_to], _value); Transfer(msg.sender, _to, _value); return true; } /** * Standard ERC20 Standard Token function overridden. Added Team address vesting period lock. */ function transferFrom(address _from, address _to, uint _value) public returns (bool success) { require(isDayTokenActivated()); // if Team address, check if lock-in period is over require(isTeamLockInPeriodOverIfTeamAddress(_from)); uint _allowance = allowed[_from][msg.sender]; updateBalanceOf(idOf[_from]); // Check from account has enough balance, transfer amount is non zero // and _value is allowed to be transferred require ( balanceOf(_from) >= _value && _value != 0 && _value <= _allowance); updateBalanceOf(idOf[_to]); allowed[_from][msg.sender] = safeSub(_allowance, _value); balances[_from] = safeSub(balances[_from], _value); balances[_to] = safeAdd(balances[_to], _value); Transfer(_from, _to, _value); return true; } /** * Add any contributor structure (For every kind of contributors: Team/Pre-ICO/ICO/Test) * @param _adr Address of the contributor to be added * @param _initialContributionDay Initial Contribution of the contributor to be added */ function addContributor(uint contributorId, address _adr, uint _initialContributionDay) internal onlyOwner { require(contributorId <= maxAddresses); //address should not be an existing contributor require(!isValidContributorAddress(_adr)); //TimeMint should not be already allocated require(!isValidContributorId(contributorId)); contributors[contributorId].adr = _adr; idOf[_adr] = contributorId; setInitialMintingPowerOf(contributorId); contributors[contributorId].initialContributionDay = _initialContributionDay; contributors[contributorId].lastUpdatedOn = getDayCount(); ContributorAdded(_adr, contributorId); contributors[contributorId].status = sellingStatus.NOTONSALE; } /** Function to be called by minting addresses in order to sell their address * @param _minPriceInDay Minimum price in DAY tokens set by the seller * @param _expiryBlockNumber Expiry Block Number set by the seller */ function sellMintingAddress(uint256 _minPriceInDay, uint _expiryBlockNumber) public returns (bool) { require(isDayTokenActivated()); require(_expiryBlockNumber > block.number); // if Team address, check if lock-in period is over require(isTeamLockInPeriodOverIfTeamAddress(msg.sender)); uint id = idOf[msg.sender]; require(contributors[id].status == sellingStatus.NOTONSALE); // update balance of sender address before checking for minimum required balance updateBalanceOf(id); require(balances[msg.sender] >= minBalanceToSell); contributors[id].minPriceInDay = _minPriceInDay; contributors[id].expiryBlockNumber = _expiryBlockNumber; contributors[id].status = sellingStatus.ONSALE; balances[msg.sender] = safeSub(balances[msg.sender], minBalanceToSell); balances[this] = safeAdd(balances[this], minBalanceToSell); Transfer(msg.sender, this, minBalanceToSell); TimeMintOnSale(id, msg.sender, contributors[id].minPriceInDay, contributors[id].expiryBlockNumber); return true; } /** Function to be called by minting address in order to cancel the sale of their TimeMint */ function cancelSaleOfMintingAddress() onlyContributor(idOf[msg.sender]) public { uint id = idOf[msg.sender]; // TimeMint should be on sale require(contributors[id].status == sellingStatus.ONSALE); contributors[id].status = sellingStatus.EXPIRED; } /** Function to be called by any user to get a list of all On Sale TimeMints */ function getOnSaleIds() constant public returns(uint[]) { uint[] memory idsOnSale = new uint[](maxAddresses); uint j = 0; for(uint i=1; i <= maxAddresses; i++) { if ( isValidContributorId(i) && block.number <= contributors[i].expiryBlockNumber && contributors[i].status == sellingStatus.ONSALE ) { idsOnSale[j] = i; j++; } } return idsOnSale; } /** Function to be called by any user to get status of a Time Mint. * returns status 0 - Not on sale, 1 - Expired, 2 - On sale, * @param _id ID number of the Time Mint */ function getSellingStatus(uint _id) constant public returns(sellingStatus status) { require(isValidContributorId(_id)); status = contributors[_id].status; if ( block.number > contributors[_id].expiryBlockNumber && status == sellingStatus.ONSALE ) status = sellingStatus.EXPIRED; return status; } /** Function to be called by any user to buy a onsale address by offering an amount * @param _offerId ID number of the address to be bought by the buyer * @param _offerInDay Offer given by the buyer in number of DAY tokens */ function buyMintingAddress(uint _offerId, uint256 _offerInDay) public returns(bool) { if (contributors[_offerId].status == sellingStatus.ONSALE && block.number > contributors[_offerId].expiryBlockNumber) { contributors[_offerId].status = sellingStatus.EXPIRED; } address soldAddress = contributors[_offerId].adr; require(contributors[_offerId].status == sellingStatus.ONSALE); require(_offerInDay >= contributors[_offerId].minPriceInDay); // prevent seller from cancelling sale in between contributors[_offerId].status = sellingStatus.NOTONSALE; // first get the offered DayToken in the token contract & // then transfer the total sum (minBalanceToSend+_offerInDay) to the seller balances[msg.sender] = safeSub(balances[msg.sender], _offerInDay); balances[this] = safeAdd(balances[this], _offerInDay); Transfer(msg.sender, this, _offerInDay); if(transferMintingAddress(contributors[_offerId].adr, msg.sender)) { //mark the offer as sold & let seller pull the proceed to their own account. sellingPriceInDayOf[soldAddress] = _offerInDay; soldAddresses[soldAddress] = true; TimeMintSold(_offerId, msg.sender, _offerInDay); } return true; } /** * Transfer minting address from one user to another * Gives the transfer-to address, the id of the original address * returns true if successful and false if not. * @param _to address of the user to which minting address is to be tranferred */ function transferMintingAddress(address _from, address _to) internal onlyContributor(idOf[_from]) returns (bool) { require(isDayTokenActivated()); // _to should be non minting address require(!isValidContributorAddress(_to)); uint id = idOf[_from]; // update balance of from address before transferring minting power updateBalanceOf(id); contributors[id].adr = _to; idOf[_to] = id; idOf[_from] = 0; contributors[id].initialContributionDay = 0; // needed as id is assigned to new address contributors[id].lastUpdatedOn = getDayCount(); contributors[id].expiryBlockNumber = 0; contributors[id].minPriceInDay = 0; MintingAdrTransferred(id, _from, _to); return true; } /** Function to allow seller to get back their deposited amount of day tokens(minBalanceToSell) and * offer made by buyer after successful sale. * Throws if sale is not successful */ function fetchSuccessfulSaleProceed() public returns(bool) { require(soldAddresses[msg.sender] == true); // to prevent re-entrancy attack soldAddresses[msg.sender] = false; uint saleProceed = safeAdd(minBalanceToSell, sellingPriceInDayOf[msg.sender]); balances[this] = safeSub(balances[this], saleProceed); balances[msg.sender] = safeAdd(balances[msg.sender], saleProceed); Transfer(this, msg.sender, saleProceed); return true; } /** Function that lets a seller get their deposited day tokens (minBalanceToSell) back, if no buyer turns up. * Allowed only after expiryBlockNumber * Throws if any other state other than EXPIRED */ function refundFailedAuctionAmount() onlyContributor(idOf[msg.sender]) public returns(bool){ uint id = idOf[msg.sender]; if(block.number > contributors[id].expiryBlockNumber && contributors[id].status == sellingStatus.ONSALE) { contributors[id].status = sellingStatus.EXPIRED; } require(contributors[id].status == sellingStatus.EXPIRED); // reset selling status contributors[id].status = sellingStatus.NOTONSALE; balances[this] = safeSub(balances[this], minBalanceToSell); // update balance of seller address before refunding updateBalanceOf(id); balances[msg.sender] = safeAdd(balances[msg.sender], minBalanceToSell); contributors[id].minPriceInDay = 0; contributors[id].expiryBlockNumber = 0; Transfer(this, msg.sender, minBalanceToSell); return true; } /** Function to add a team address as a contributor and store it's time issued to calculate vesting period * Called by owner */ function addTeamTimeMints(address _adr, uint _id, uint _tokens, bool _isTest) public onlyOwner { //check if Id is in range of team Ids require(_id >= firstTeamContributorId && _id < firstTeamContributorId + totalTeamContributorIds); require(totalTeamContributorIdsAllocated < totalTeamContributorIds); addContributor(_id, _adr, 0); totalTeamContributorIdsAllocated++; // enforce lockin period if not test address if(!_isTest) teamIssuedTimestamp[_adr] = block.timestamp; mint(_adr, _tokens); TeamAddressAdded(_adr, _id); } /** Function to add reserved aution TimeMints post-ICO. Only by owner * @param _receiver Address of the minting to be added * @param _customerId Server side id of the customer * @param _id contributorId */ function postAllocateAuctionTimeMints(address _receiver, uint _customerId, uint _id) public onlyOwner { //check if Id is in range of Auction Ids require(_id >= firstPostIcoContributorId && _id < firstPostIcoContributorId + totalPostIcoContributorIds); require(totalPostIcoContributorIdsAllocated < totalPostIcoContributorIds); require(released == true); addContributor(_id, _receiver, 0); totalPostIcoContributorIdsAllocated++; PostInvested(_receiver, 0, 0, _customerId, _id); } /** Function to add all contributors except team, test and Auctions TimeMints. Only by owner * @param _receiver Address of the minting to be added * @param _customerId Server side id of the customer * @param _id contributor id * @param _tokens day tokens to allocate * @param _weiAmount ether invested in wei */ function allocateNormalTimeMints(address _receiver, uint _customerId, uint _id, uint _tokens, uint _weiAmount) public onlyOwner { // check if Id is in range of Normal Ids require(_id >= firstContributorId && _id <= totalNormalContributorIds); require(totalNormalContributorIdsAllocated < totalNormalContributorIds); addContributor(_id, _receiver, _tokens); totalNormalContributorIdsAllocated++; mint(_receiver, _tokens); Invested(_receiver, _weiAmount, _tokens, _customerId, _id); } /** Function to release token * Called by owner */ function releaseToken(uint _initialBlockTimestamp) public onlyOwner { require(!released); // check not already released setInitialBlockTimestamp(_initialBlockTimestamp); // Make token transferable releaseTokenTransfer(); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":false,"inputs":[{"name":"addr","type":"address"},{"name":"state","type":"bool"}],"name":"setTransferAgent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalNormalContributorIdsAllocated","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"mintingFinished","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"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":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_receiver","type":"address"},{"name":"_customerId","type":"uint256"},{"name":"_id","type":"uint256"},{"name":"_tokens","type":"uint256"},{"name":"_weiAmount","type":"uint256"}],"name":"allocateNormalTimeMints","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"teamLockPeriodInSec","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isDayTokenActivated","outputs":[{"name":"isActivated","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"firstTeamContributorId","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":true,"inputs":[],"name":"totalPostIcoContributorIdsAllocated","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":"addr","type":"address"}],"name":"setReleaseAgent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"fetchSuccessfulSaleProceed","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_adr","type":"address"},{"name":"_id","type":"uint256"},{"name":"_tokens","type":"uint256"},{"name":"_isTest","type":"bool"}],"name":"addTeamTimeMints","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint256"}],"name":"getMintingPowerById","outputs":[{"name":"mintingPower","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_day","type":"uint256"}],"name":"getPhaseCount","outputs":[{"name":"phase","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"contributors","outputs":[{"name":"adr","type":"address"},{"name":"initialContributionDay","type":"uint256"},{"name":"lastUpdatedOn","type":"uint256"},{"name":"mintingPower","type":"uint256"},{"name":"expiryBlockNumber","type":"uint256"},{"name":"minPriceInDay","type":"uint256"},{"name":"status","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_minPriceInDay","type":"uint256"},{"name":"_expiryBlockNumber","type":"uint256"}],"name":"sellMintingAddress","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"receiver","type":"address"},{"name":"amount","type":"uint256"}],"name":"mint","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"mintAgents","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"},{"name":"state","type":"bool"}],"name":"setMintAgent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"value","type":"uint256"}],"name":"upgrade","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint256"}],"name":"balanceById","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"halvingCycle","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"DayInSecs","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"teamIssuedTimestamp","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"initialBlockTimestamp","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"string"},{"name":"_symbol","type":"string"}],"name":"setTokenInformation","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"mintingDec","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maxMintingPower","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"soldAddresses","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"minMintingPower","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"upgradeAgent","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_offerId","type":"uint256"},{"name":"_offerInDay","type":"uint256"}],"name":"buyMintingAddress","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"releaseTokenTransfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"upgradeMaster","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_adr","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalTeamContributorIdsAllocated","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"cancelSaleOfMintingAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"acceptOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getUpgradeState","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"isValidContributorAddress","outputs":[{"name":"isValidContributor","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"transferAgents","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":"_address","type":"address"}],"name":"isTeamLockInPeriodOverIfTeamAddress","outputs":[{"name":"isLockInPeriodOver","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"sellingPriceInDayOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalPostIcoContributorIds","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maxAddresses","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"released","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_receiver","type":"address"},{"name":"_customerId","type":"uint256"},{"name":"_id","type":"uint256"}],"name":"postAllocateAuctionTimeMints","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"canUpgrade","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isInitialBlockTimestampSet","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_mintingDec","type":"uint256"}],"name":"setMintingDec","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"firstPostIcoContributorId","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"a","type":"uint256"},{"name":"b","type":"uint256"}],"name":"safeSub","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maxMintingDays","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"}],"name":"updateTimeMintBalance","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalNormalContributorIds","outputs":[{"name":"","type":"uint256"}],"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":false,"inputs":[],"name":"refundFailedAuctionAmount","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_initialBlockTimestamp","type":"uint256"}],"name":"releaseToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_adr","type":"address"}],"name":"getMintingPowerByAddress","outputs":[{"name":"mintingPower","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalTeamContributorIds","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint256"}],"name":"getSellingStatus","outputs":[{"name":"status","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getTotalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"updateMyTimeMintBalance","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalUpgraded","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"firstContributorId","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"a","type":"uint256"},{"name":"b","type":"uint256"}],"name":"safeMul","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"releaseAgent","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"minBalanceToSell","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"newOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"agent","type":"address"}],"name":"setUpgradeAgent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"idOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","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":true,"inputs":[{"name":"_id","type":"uint256"}],"name":"isValidContributorId","outputs":[{"name":"isValidContributor","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getOnSaleIds","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"a","type":"uint256"},{"name":"b","type":"uint256"}],"name":"safeAdd","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getDayCount","outputs":[{"name":"daySinceMintingEpoch","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"master","type":"address"}],"name":"setUpgradeMaster","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_name","type":"string"},{"name":"_symbol","type":"string"},{"name":"_initialSupply","type":"uint256"},{"name":"_decimals","type":"uint8"},{"name":"_mintable","type":"bool"},{"name":"_maxAddresses","type":"uint256"},{"name":"_firstTeamContributorId","type":"uint256"},{"name":"_totalTeamContributorIds","type":"uint256"},{"name":"_totalPostIcoContributorIds","type":"uint256"},{"name":"_minMintingPower","type":"uint256"},{"name":"_maxMintingPower","type":"uint256"},{"name":"_halvingCycle","type":"uint256"},{"name":"_minBalanceToSell","type":"uint256"},{"name":"_dayInSecs","type":"uint256"},{"name":"_teamLockPeriodInSec","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newName","type":"string"},{"indexed":false,"name":"newSymbol","type":"string"}],"name":"UpdatedTokenInformation","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"id","type":"uint256"},{"indexed":false,"name":"from","type":"address"},{"indexed":false,"name":"to","type":"address"}],"name":"MintingAdrTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"adr","type":"address"},{"indexed":false,"name":"id","type":"uint256"}],"name":"ContributorAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"id","type":"uint256"},{"indexed":false,"name":"seller","type":"address"},{"indexed":false,"name":"minPriceInDay","type":"uint256"},{"indexed":false,"name":"expiryBlockNumber","type":"uint256"}],"name":"TimeMintOnSale","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"id","type":"uint256"},{"indexed":false,"name":"buyer","type":"address"},{"indexed":false,"name":"offerInDay","type":"uint256"}],"name":"TimeMintSold","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"investor","type":"address"},{"indexed":false,"name":"weiAmount","type":"uint256"},{"indexed":false,"name":"tokenAmount","type":"uint256"},{"indexed":false,"name":"customerId","type":"uint256"},{"indexed":false,"name":"contributorId","type":"uint256"}],"name":"PostInvested","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"teamAddress","type":"address"},{"indexed":false,"name":"id","type":"uint256"}],"name":"TeamAddressAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"receiver","type":"address"},{"indexed":false,"name":"weiAmount","type":"uint256"},{"indexed":false,"name":"tokenAmount","type":"uint256"},{"indexed":false,"name":"customerId","type":"uint256"},{"indexed":false,"name":"contributorId","type":"uint256"}],"name":"Invested","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Upgrade","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"agent","type":"address"}],"name":"UpgradeAgentSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"addr","type":"address"},{"indexed":false,"name":"state","type":"bool"}],"name":"MintingAgentChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"receiver","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Minted","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"},{"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"}]
Contract Creation Code
60606040526005805460a060020a60ff02191690556007805460ff19169055610447600c55600060148190556017819055601a5534156200003f57600080fd5b60405162003a9b38038062003a9b833981016040528080518201919060200180518201919060200180519190602001805191906020018051919060200180519190602001805191906020018051919060200180519190602001805191906020018051919060200180519190602001805191906020018051919060200180519150505b335b5b60038054600160a060020a03191633600160a060020a03161790555b60098054600160a060020a031916600160a060020a0383161790555b5060038054600160a060020a03191633600160a060020a031617905560258f80516200012d92916020019062000291565b5060268e80516200014392916020019062000291565b5060008d81556027805460ff191660ff8f16179055600354600160a060020a031681526001602081905260409091208e9055601b8b90558a116200018657600080fd5b60016012819055601b5489900388900360138190551015620001a757600080fd5b601589905560168890556019879055601b54879003600101601855601c869055601d859055601e849055635e0be100601f556020805460ff19169055601360215560228390556024829055602381905560008054111562000256576003546000547f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe91600160a060020a031690604051600160a060020a03909216825260208201526040908101905180910390a15b8a15156200027a576007805460ff1916600117905560005415156200027a57600080fd5b5b5b5050505050505050505050505050506200033b565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620002d457805160ff191683800117855562000304565b8280016001018555821562000304579182015b8281111562000304578251825591602001919060010190620002e7565b5b506200031392915062000317565b5090565b6200033891905b808211156200031357600081556001016200031e565b5090565b90565b613750806200034b6000396000f300606060405236156103b65763ffffffff60e060020a60003504166302f652a381146103bb57806304d41474146103e157806305d2035b1461040657806306fdde031461042d578063095ea7b3146104b85780630a402742146104ee5780630c58062b1461051b57806310f1726d14610540578063128e37611461056757806318160ddd1461058c5780631bf2a90a146105b157806323b872dd146105d657806329ff4f53146106125780632f83f78114610633578063313ce5671461065a578063331c55b414610683578063335494a4146106af57806335995022146106d75780633cb5d100146106ff5780633ed66d3d1461077557806340c10f19146107a257806342c1867b146107c657806343214675146107f957806345977d031461081f5780634778dfb8146108375780634813e3e51461085f578063485d5dd21461088457806348bb4067146108a95780634b3d81b6146108da5780634eee966f146108ff578063534439a31461099457806354f63105146109b95780635956b853146109de5780635d444ffb14610a115780635de4ccb014610a365780635df34ff214610a655780635f412d4f14610a92578063600440cb14610aa757806370a0823114610ad6578063718228fa14610b07578063740707cf14610b2c57806379ba509714610b415780638444b39114610b565780638526d09214610b8d578063867c285714610bc05780638da5cb5b14610bf35780638f7b7bce14610c22578063928e659214610c55578063936bbf9a14610c8657806393e5365f14610cab57806395d89b4114610cd05780639613252114610d5b57806396a8069914610d825780639738968c14610da95780639aaac86414610dd05780639bc8e9ee14610df7578063a222a52f14610e0f578063a293d1e814610e34578063a41ff1e514610e5f578063a5f2676014610e84578063a666190114610eae578063a9059cbb14610ed3578063b19b216214610f09578063b54d623814610f30578063b6033daf14610f48578063bef17ed014610f79578063c392f11814610f9e578063c4e41b2214610fd8578063c59513a414610ffd578063c752ff6214611024578063c96e83db14611049578063d05c78da1461106e578063d1f276d314611099578063d49dbb5c146110c8578063d4ee1d90146110ed578063d7e7088a1461111c578063d94fe8321461113d578063dd62ed3e1461116e578063df30e592146111a5578063e0faf0a8146111cf578063e6cb901314611236578063eb60764f14611261578063f2fde38b14611286578063ffeb7d75146112a7575b600080fd5b34156103c657600080fd5b6103df600160a060020a036004351660243515156112c8565b005b34156103ec57600080fd5b6103f4611329565b60405190815260200160405180910390f35b341561041157600080fd5b61041961132f565b604051901515815260200160405180910390f35b341561043857600080fd5b610440611338565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561047d5780820151818401525b602001610464565b50505050905090810190601f1680156104aa5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156104c357600080fd5b610419600160a060020a03600435166024356113d6565b604051901515815260200160405180910390f35b34156104f957600080fd5b6103df600160a060020a036004351660243560443560643560843561147d565b005b341561052657600080fd5b6103f461154e565b60405190815260200160405180910390f35b341561054b57600080fd5b610419611554565b604051901515815260200160405180910390f35b341561057257600080fd5b6103f461155e565b60405190815260200160405180910390f35b341561059757600080fd5b6103f4611564565b60405190815260200160405180910390f35b34156105bc57600080fd5b6103f461156a565b60405190815260200160405180910390f35b34156105e157600080fd5b610419600160a060020a0360043581169060243516604435611570565b604051901515815260200160405180910390f35b341561061d57600080fd5b6103df600160a060020a03600435166116f7565b005b341561063e57600080fd5b61041961174e565b604051901515815260200160405180910390f35b341561066557600080fd5b61066d611858565b60405160ff909116815260200160405180910390f35b341561068e57600080fd5b6103df600160a060020a03600435166024356044356064351515611861565b005b34156106ba57600080fd5b6103f460043561193c565b60405190815260200160405180910390f35b34156106e257600080fd5b6103f460043561197b565b60405190815260200160405180910390f35b341561070a57600080fd5b610715600435611996565b6040518088600160a060020a0316600160a060020a0316815260200187815260200186815260200185815260200184815260200183815260200182600281111561075b57fe5b60ff16815260200197505050505050505060405180910390f35b341561078057600080fd5b6104196004356024356119e0565b604051901515815260200160405180910390f35b34156107ad57600080fd5b6103df600160a060020a0360043516602435611bf8565b005b34156107d157600080fd5b610419600160a060020a0360043516611ca7565b604051901515815260200160405180910390f35b341561080457600080fd5b6103df600160a060020a03600435166024351515611cbc565b005b341561082a57600080fd5b6103df600435611d5b565b005b341561084257600080fd5b6103f4600435611eb5565b60405190815260200160405180910390f35b341561086a57600080fd5b6103f4611f23565b60405190815260200160405180910390f35b341561088f57600080fd5b6103f4611f29565b60405190815260200160405180910390f35b34156108b457600080fd5b6103f4600160a060020a0360043516611f2f565b60405190815260200160405180910390f35b34156108e557600080fd5b6103f4611f41565b60405190815260200160405180910390f35b341561090a57600080fd5b6103df60046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650611f4795505050505050565b005b341561099f57600080fd5b6103f46120b7565b60405190815260200160405180910390f35b34156109c457600080fd5b6103f46120bd565b60405190815260200160405180910390f35b34156109e957600080fd5b610419600160a060020a03600435166120c3565b604051901515815260200160405180910390f35b3415610a1c57600080fd5b6103f46120d8565b60405190815260200160405180910390f35b3415610a4157600080fd5b610a496120de565b604051600160a060020a03909116815260200160405180910390f35b3415610a7057600080fd5b6104196004356024356120ed565b604051901515815260200160405180910390f35b3415610a9d57600080fd5b6103df61232d565b005b3415610ab257600080fd5b610a49612372565b604051600160a060020a03909116815260200160405180910390f35b3415610ae157600080fd5b6103f4600160a060020a0360043516612381565b60405190815260200160405180910390f35b3415610b1257600080fd5b6103f46123d7565b60405190815260200160405180910390f35b3415610b3757600080fd5b6103df6123dd565b005b3415610b4c57600080fd5b6103df61247b565b005b3415610b6157600080fd5b610b696124fa565b60405180826004811115610b7957fe5b60ff16815260200191505060405180910390f35b3415610b9857600080fd5b610419600160a060020a036004351661254b565b604051901515815260200160405180910390f35b3415610bcb57600080fd5b610419600160a060020a0360043516612575565b604051901515815260200160405180910390f35b3415610bfe57600080fd5b610a4961258a565b604051600160a060020a03909116815260200160405180910390f35b3415610c2d57600080fd5b610419600160a060020a0360043516612599565b604051901515815260200160405180910390f35b3415610c6057600080fd5b6103f4600160a060020a03600435166125e9565b60405190815260200160405180910390f35b3415610c9157600080fd5b6103f46125fb565b60405190815260200160405180910390f35b3415610cb657600080fd5b6103f4612601565b60405190815260200160405180910390f35b3415610cdb57600080fd5b610440612607565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561047d5780820151818401525b602001610464565b50505050905090810190601f1680156104aa5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3415610d6657600080fd5b6104196126a5565b604051901515815260200160405180910390f35b3415610d8d57600080fd5b6103df600160a060020a03600435166024356044356126b5565b005b3415610db457600080fd5b61041961279a565b604051901515815260200160405180910390f35b3415610ddb57600080fd5b6104196127c0565b604051901515815260200160405180910390f35b3415610e0257600080fd5b6103df6004356127c9565b005b3415610e1a57600080fd5b6103f46127fe565b60405190815260200160405180910390f35b3415610e3f57600080fd5b6103f4600435602435612804565b60405190815260200160405180910390f35b3415610e6a57600080fd5b6103f461281b565b60405190815260200160405180910390f35b3415610e8f57600080fd5b610419600435612821565b604051901515815260200160405180910390f35b3415610eb957600080fd5b6103f4612847565b60405190815260200160405180910390f35b3415610ede57600080fd5b610419600160a060020a036004351660243561284d565b604051901515815260200160405180910390f35b3415610f1457600080fd5b610419612980565b604051901515815260200160405180910390f35b3415610f3b57600080fd5b6103df600435612b5a565b005b3415610f5357600080fd5b6103f4600160a060020a0360043516612ba2565b60405190815260200160405180910390f35b3415610f8457600080fd5b6103f4612bcc565b60405190815260200160405180910390f35b3415610fa957600080fd5b610fb4600435612bd2565b60405180826002811115610b7957fe5b60ff16815260200191505060405180910390f35b3415610fe357600080fd5b6103f4612c31565b60405190815260200160405180910390f35b341561100857600080fd5b610419612c38565b604051901515815260200160405180910390f35b341561102f57600080fd5b6103f4612c75565b60405190815260200160405180910390f35b341561105457600080fd5b6103f4612c7b565b60405190815260200160405180910390f35b341561107957600080fd5b6103f4600435602435612c81565b60405190815260200160405180910390f35b34156110a457600080fd5b610a49612cb0565b604051600160a060020a03909116815260200160405180910390f35b34156110d357600080fd5b6103f4612cbf565b60405190815260200160405180910390f35b34156110f857600080fd5b610a49612cc5565b604051600160a060020a03909116815260200160405180910390f35b341561112757600080fd5b6103df600160a060020a0360043516612cd4565b005b341561114857600080fd5b6103f4600160a060020a0360043516612e80565b60405190815260200160405180910390f35b341561117957600080fd5b6103f4600160a060020a0360043581169060243516612e92565b60405190815260200160405180910390f35b34156111b057600080fd5b610419600435612ebf565b604051901515815260200160405180910390f35b34156111da57600080fd5b6111e2612f2b565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156112225780820151818401525b602001611209565b505050509050019250505060405180910390f35b341561124157600080fd5b6103f4600435602435612ffc565b60405190815260200160405180910390f35b341561126c57600080fd5b6103f4613016565b60405190815260200160405180910390f35b341561129157600080fd5b6103df600160a060020a036004351661303e565b005b34156112b257600080fd5b6103df600160a060020a0360043516613079565b005b60035433600160a060020a039081169116146112e357600080fd5b60055460009060a060020a900460ff16156112fd57600080fd5b600160a060020a0383166000908152600660205260409020805460ff19168315151790555b5b505b5050565b60145481565b60075460ff1681565b60258054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156113ce5780601f106113a3576101008083540402835291602001916113ce565b820191906000526020600020905b8154815290600101906020018083116113b157829003601f168201915b505050505081565b60008115806114085750600160a060020a03338116600090815260026020908152604080832093871683529290522054155b151561141357600080fd5b600160a060020a03338116600081815260026020908152604080832094881680845294909152908190208590557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a35060015b92915050565b60035433600160a060020a0390811691161461149857600080fd5b60125483101580156114ac57506013548311155b15156114b757600080fd5b601354601454106114c757600080fd5b6114d28386846130c8565b6014805460010190556114e58583611bf8565b7f6bd11c91e66ab57411c3d72828f939eac4446988c1c1f5862442bf7fa9884e238582848787604051600160a060020a03909516855260208501939093526040808501929092526060840152608083019190915260a0909101905180910390a15b5b5050505050565b60235481565b601f544210155b90565b60155481565b60005481565b601a5481565b60008061157b611554565b151561158657600080fd5b61158f85612599565b151561159a57600080fd5b50600160a060020a03808516600081815260026020908152604080832033909516835293815283822054928252600d905291909120546115d9906131fb565b50826115e486612381565b101580156115f157508215155b80156115fd5750808311155b151561160857600080fd5b600160a060020a0384166000908152600d602052604090205461162a906131fb565b506116358184612804565b600160a060020a0380871660008181526002602090815260408083203390951683529381528382209490945590815260019092529020546116769084612804565b600160a060020a0380871660009081526001602052604080822093909355908616815220546116a59084612ffc565b600160a060020a03808616600081815260016020526040908190209390935591908716906000805160206137058339815191529086905190815260200160405180910390a3600191505b509392505050565b60035433600160a060020a0390811691161461171257600080fd5b60055460009060a060020a900460ff161561172c57600080fd5b60058054600160a060020a031916600160a060020a0384161790555b5b505b50565b600160a060020a033316600090815260106020526040812054819060ff16151560011461177a57600080fd5b600160a060020a0333166000908152601060209081526040808320805460ff191690556022546011909252909120546117b39190612ffc565b600160a060020a0330166000908152600160205260409020549091506117d99082612804565b600160a060020a033081166000908152600160205260408082209390935533909116815220546118099082612ffc565b600160a060020a0333811660008181526001602052604090819020939093559130909116906000805160206137058339815191529084905190815260200160405180910390a3600191505b5090565b60275460ff1681565b60035433600160a060020a0390811691161461187c57600080fd5b601554831015801561189357506016546015540183105b151561189e57600080fd5b601654601754106118ae57600080fd5b6118ba838560006130c8565b6017805460010190558015156118e657600160a060020a0384166000908152600f602052604090204290555b6118f08483611bf8565b7fe79fec6463e59273a1da7bc924872b8b35b64c591ce527b6329f0db8d6be71fd8484604051600160a060020a03909216825260208201526040908101905180910390a15b5b50505050565b6000600161195061194b613016565b61197b565b6000848152600e602052604090206003015491900360020a9081151561197257fe5b0490505b919050565b6000601e548281151561198a57fe5b0460010190505b919050565b600e602052600090815260409020805460018201546002830154600384015460048501546005860154600690960154600160a060020a039095169593949293919290919060ff1687565b6000806119eb611554565b15156119f657600080fd5b438311611a0257600080fd5b611a0b33612599565b1515611a1657600080fd5b50600160a060020a0333166000908152600d6020526040812054905b6000828152600e602052604090206006015460ff166002811115611a5257fe5b14611a5c57600080fd5b611a65816131fb565b50602254600160a060020a0333166000908152600160205260409020541015611a8d57600080fd5b6000818152600e60205260409020600581018590556004810184905560060180546002919060ff19166001835b0217905550600160a060020a033316600090815260016020526040902054602254611ae59190612804565b600160a060020a03338116600090815260016020526040808220939093553090911681522054602254611b189190612ffc565b6001600030600160a060020a0316600160a060020a031681526020019081526020016000208190555030600160a060020a031633600160a060020a031660008051602061370583398151915260225460405190815260200160405180910390a36000818152600e60205260409081902060058101546004909101547f789864ab03bca8d309c9bec6804307cfc416db24eab7873ba7f3df79797b09179284923392909151938452600160a060020a03909216602084015260408084019190915260608301919091526080909101905180910390a1600191505b5092915050565b600160a060020a03331660009081526008602052604090205460ff161515611c1f57600080fd5b60075460ff1615611c2f57600080fd5b611c3b60005482612ffc565b6000908155600160a060020a038316815260016020526040902054611c609082612ffc565b600160a060020a0383166000818152600160205260408082209390935590916000805160206137058339815191529084905190815260200160405180910390a35b5b5b5050565b60086020526000908152604090205460ff1681565b60035433600160a060020a03908116911614611cd757600080fd5b60075460ff1615611ce757600080fd5b600160a060020a03821660009081526008602052604090819020805460ff19168315151790557f4b0adf6c802794c7dde28a08a4e07131abcff3bf9603cd71f14f90bec7865efa908390839051600160a060020a039092168252151560208201526040908101905180910390a15b5b5b5050565b6000611d656124fa565b905060035b816004811115611d7657fe5b1480611d8e575060045b816004811115611d8c57fe5b145b1515611d9957600080fd5b811515611da557600080fd5b600160a060020a033316600090815260016020526040902054611dc89083612804565b600160a060020a03331660009081526001602052604081209190915554611def9083612804565b600055600b54611dff9083612ffc565b600b55600a54600160a060020a031663753e88e5338460405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515611e5857600080fd5b6102c65a03f11515611e6957600080fd5b5050600a54600160a060020a03908116915033167f7e5c344a8141a805725cb476f76c6953b842222b967edd1f78ddb6e8b3f397ac8460405190815260200160405180910390a35b5050565b6000818152600e6020526040812054600160a060020a0316611ed5611554565b15611f0057611ee383612ebf565b15611f0057611ef983611ef4613016565b613321565b9150611f1d565b5b600160a060020a03811660009081526001602052604090205491505b50919050565b601e5481565b60245481565b600f6020526000908152604090205481565b601f5481565b60035433600160a060020a03908116911614611f6257600080fd5b6025828051611f75929160200190613652565b506026818051611f89929160200190613652565b507fd131ab1e6f279deea74e13a18477e13e2107deb6dc8ae955648948be5841fb466025602660405160408082528354600260001961010060018416150201909116049082018190528190602082019060608301908690801561202d5780601f106120025761010080835404028352916020019161202d565b820191906000526020600020905b81548152906001019060200180831161201057829003601f168201915b50508381038252845460026000196101006001841615020190911604808252602090910190859080156120a15780601f10612076576101008083540402835291602001916120a1565b820191906000526020600020905b81548152906001019060200180831161208457829003601f168201915b505094505050505060405180910390a15b5b5050565b60215481565b601d5481565b60106020526000908152604090205460ff1681565b601c5481565b600a54600160a060020a031681565b60008060025b6000858152600e602052604090206006015460ff16600281111561211357fe5b14801561213057506000848152600e602052604090206004015443115b15612159576000848152600e6020526040902060060180546001919060ff191682805b02179055505b506000838152600e6020526040902054600160a060020a031660025b6000858152600e602052604090206006015460ff16600281111561219557fe5b1461219f57600080fd5b6000848152600e60205260409020600501548310156121bd57600080fd5b6000848152600e60205260408120600601805460ff19166001835b0217905550600160a060020a0333166000908152600160205260409020546122009084612804565b600160a060020a033381166000908152600160205260408082209390935530909116815220546122309084612ffc565b600160a060020a0330811660008181526001602052604090819020939093559133909116906000805160206137058339815191529086905190815260200160405180910390a36000848152600e602052604090205461229890600160a060020a031633613420565b1561232157600160a060020a0381166000908152601160209081526040808320869055601090915290819020805460ff191660011790557f72760e46b3824807567c13ec75882de5d9c789a91517ae7b474d2e6b62d3771e9085903390869051928352600160a060020a0390911660208301526040808301919091526060909101905180910390a15b600191505b5092915050565b60035433600160a060020a0390811691161461234857600080fd5b60205460ff16151561235957600080fd5b6007805460ff1916600117905561236e613574565b5b5b565b600954600160a060020a031681565b600160a060020a0381166000908152600d602052604081205480156123b057611ef981611eb5565b9150611f1d565b600160a060020a0383166000908152600160205260409020549150611f1d565b5b50919050565b60175481565b600160a060020a0333166000908152600d60205260408120546123ff81612ebf565b151561240a57600080fd5b600160a060020a0333166000908152600d6020526040902054915060025b6000838152600e602052604090206006015460ff16600281111561244857fe5b1461245257600080fd5b6000828152600e6020526040902060060180546001919060ff191682805b02179055505b5b5050565b60045433600160a060020a0390811691161461249657600080fd5b600454600354600160a060020a0391821691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360045460038054600160a060020a031916600160a060020a039092169190911790555b565b600061250461279a565b15156125125750600161155b565b600a54600160a060020a0316151561252c5750600261155b565b600b54151561253d5750600361155b565b50600461155b565b5b5b5b90565b600160a060020a0381166000908152600d602052604081205461256d90612ebf565b90505b919050565b60066020526000908152604090205460ff1681565b600354600160a060020a031681565b600160a060020a0381166000908152600f60205260409020546001901561197657602354600160a060020a0383166000908152600f602052604090205442031015611976575060005b5b5b919050565b60116020526000908152604090205481565b60195481565b601b5481565b60268054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156113ce5780601f106113a3576101008083540402835291602001916113ce565b820191906000526020600020905b8154815290600101906020018083116113b157829003601f168201915b505050505081565b60055460a060020a900460ff1681565b60035433600160a060020a039081169116146126d057600080fd5b60185481101580156126e757506019546018540181105b15156126f257600080fd5b601954601a541061270257600080fd5b60055460a060020a900460ff16151560011461271d57600080fd5b612729818460006130c8565b601a805460010190557f5da87a24d5db985862dc335ff32e322d9588ae9b4a971bd1526a58051c8cbaa4836000808585604051600160a060020a03909516855260208501939093526040808501929092526060840152608083019190915260a0909101905180910390a15b5b505050565b60055460009060a060020a900460ff1680156127b957506127b96135b7565b5b90505b90565b60205460ff1681565b60035433600160a060020a039081169116146127e457600080fd5b60205460ff16156127f457600080fd5b60218190555b5b50565b60185481565b60008282111561281057fe5b508082035b92915050565b600c5481565b600061282b611554565b151561283657600080fd5b61256d826131fb565b90505b919050565b60135481565b6000612857611554565b151561286257600080fd5b61286b33612599565b151561287657600080fd5b600160a060020a0333166000908152600d6020526040902054612898906131fb565b50816128a333612381565b101580156128b057508115155b15156128bb57600080fd5b600160a060020a0383166000908152600d60205260409020546128dd906131fb565b50600160a060020a0333166000908152600160205260409020546129019083612804565b600160a060020a0333811660009081526001602052604080822093909355908516815220546129309083612ffc565b600160a060020a0380851660008181526001602052604090819020939093559133909116906000805160206137058339815191529085905190815260200160405180910390a35060015b92915050565b600160a060020a0333166000908152600d602052604081205481906129a481612ebf565b15156129af57600080fd5b600160a060020a0333166000908152600d6020908152604080832054808452600e9092529091206004015490925043118015612a0b575060025b6000838152600e602052604090206006015460ff166002811115612a0957fe5b145b15612a34576000828152600e6020526040902060060180546001919060ff191682805b02179055505b60015b6000838152600e602052604090206006015460ff166002811115612a5757fe5b14612a6157600080fd5b6000828152600e60205260408120600601805460ff19166001835b0217905550600160a060020a033016600090815260016020526040902054602254612aa79190612804565b600160a060020a033016600090815260016020526040902055612ac9826131fb565b50600160a060020a033316600090815260016020526040902054602254612af09190612ffc565b600160a060020a03338116600081815260016020908152604080832095909555868252600e905283812060058101829055600401556022549092309092169160008051602061370583398151915291905190815260200160405180910390a3600192505b5b505090565b60035433600160a060020a03908116911614612b7557600080fd5b60055460a060020a900460ff1615612b8c57600080fd5b612b95816135bd565b61174b61232d565b5b5b50565b600160a060020a0381166000908152600d602052604081205461256d9061193c565b90505b919050565b60165481565b6000612bdd82612ebf565b1515612be857600080fd5b506000818152600e60205260409020600681015460049091015460ff9091169043118015612c22575060025b816002811115612c2057fe5b145b15611976575060015b5b919050565b6000545b90565b6000612c42611554565b1515612c4d57600080fd5b600160a060020a0333166000908152600d60205260409020546127b9906131fb565b90505b90565b600b5481565b60125481565b6000828202831580612c9d5750828482811515612c9a57fe5b04145b1515612ca557fe5b8091505b5092915050565b600554600160a060020a031681565b60225481565b600454600160a060020a031681565b612cdc61279a565b1515612ce757600080fd5b600160a060020a0381161515612cfc57600080fd5b60095433600160a060020a03908116911614612d1757600080fd5b60045b612d226124fa565b6004811115612d2d57fe5b1415612d3857600080fd5b600a8054600160a060020a031916600160a060020a038381169190911791829055166361d3d7a66000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515612d9657600080fd5b6102c65a03f11515612da757600080fd5b505050604051805190501515612dbc57600080fd5b60008054600a549091600160a060020a0390911690634b2ba0dd90604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515612e0c57600080fd5b6102c65a03f11515612e1d57600080fd5b50505060405180519050141515612e3357600080fd5b600a547f7845d5aa74cc410e35571258d954f23b82276e160fe8c188fa80566580f279cc90600160a060020a0316604051600160a060020a03909116815260200160405180910390a15b50565b600d6020526000908152604090205481565b600160a060020a038083166000908152600260209081526040808320938516835292905220545b92915050565b60008082118015612ed25750601b548211155b8015612ef457506000828152600e6020526040902054600160a060020a031615155b801561256d57506000828152600e6020908152604080832054600160a060020a03168352600d90915290205482145b90505b919050565b612f336136d1565b612f3b6136d1565b600080601b54604051805910612f4e5750595b908082528060200260200182016040525b50925060009150600190505b601b548111612ff257612f7d81612ebf565b8015612f9a57506000818152600e60205260409020600401544311155b8015612fc6575060025b6000828152600e602052604090206006015460ff166002811115612fc457fe5b145b15612fe95780838381518110612fd857fe5b602090810290910101526001909101905b5b600101612f6b565b8293505b50505090565b600082820183811015612ca557fe5b8091505b5092915050565b6000613020611554565b1561155b57602454601f54420381151561303657fe5b0490505b5b90565b60035433600160a060020a0390811691161461305957600080fd5b60048054600160a060020a031916600160a060020a0383161790555b5b50565b600160a060020a038116151561308e57600080fd5b60095433600160a060020a039081169116146130a957600080fd5b60098054600160a060020a031916600160a060020a0383161790555b50565b60035433600160a060020a039081169116146130e357600080fd5b601b548311156130f257600080fd5b6130fb8261254b565b1561310557600080fd5b61310e83612ebf565b1561311857600080fd5b6000838152600e602090815260408083208054600160a060020a031916600160a060020a0387169081179091558352600d909152902083905561315a836135ff565b6000838152600e60205260409020600101819055613176613016565b600e6000858152602001908152602001600020600201819055507f5fd6d0b7e707fe344bd2a1887f9d0eeea8bfcac6f339ba4200e74f0647f101c08284604051600160a060020a03909216825260208201526040908101905180910390a16000838152600e60205260408120600601805460ff19166001835b02179055505b5b505050565b600080600080600061320c86612ebf565b1561331257613219613016565b6000878152600e6020526040902060020154909450841480159061324f5750600c546000878152600e6020526040902060020154105b15613312576000868152600e6020908152604080832054600160a060020a03168084526001909252822054915490945090925061328c9083612804565b6000556132998685613321565b600160a060020a0384166000908152600160205260408120829055549091506132c29082612ffc565b6000908155868152600e6020526040808220600201869055600160a060020a038516919060008051602061370583398151915290858503905190815260200160405180910390a360019450613318565b5b600094505b50505050919050565b6000828152600e6020908152604080832054600160a060020a031683526001909152812054600c54829081908190819081908190891061336357600c54613365565b885b60008b8152600e602052604090206002015490965060010194505b85851161340f576133908561197b565b601e5460008c8152600e602052604090206003015491955060001990860281019450850160020a908115156133c157fe5b0491508490505b8281111580156133d85750858111155b15613407576133fc87602154600201600a0a8985028115156133f657fe5b04612ffc565b96505b6001016133c8565b809450613380565b8697505b5050505050505092915050565b600160a060020a0382166000908152600d6020526040812054819061344481612ebf565b151561344f57600080fd5b613457611554565b151561346257600080fd5b61346b8461254b565b1561347557600080fd5b600160a060020a0385166000908152600d60205260409020549150613499826131fb565b506000828152600e602081815260408084208054600160a060020a031916600160a060020a038a81169182178355908652600d84528286208890558a168552908420849055858452919052600101556134f0613016565b6000838152600e60205260408082206002810193909355600483018290556005909201557ffb7aaa2ec871044b8cde9fee0cd727b02c8d6caf7aeb7f5fa2e02ffdfe1643349083908790879051928352600160a060020a039182166020840152166040808301919091526060909101905180910390a1600192505b5b505092915050565b60055433600160a060020a0390811691161461358f57600080fd5b6005805474ff0000000000000000000000000000000000000000191660a060020a1790555b5b565b60015b90565b60035433600160a060020a039081169116146135d857600080fd5b60205460ff16156135e857600080fd5b6020805460ff19166001179055601f8190555b5b50565b8061360981612ebf565b151561361457600080fd5b6001601b5403601c54601d5403600184030281151561362f57fe5b601d546000858152600e602052604090209290910490036003909101555b5b5050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061369357805160ff19168380011785556136c0565b828001600101855582156136c0579182015b828111156136c05782518255916020019190600101906136a5565b5b506118549291506136e3565b5090565b60206040519081016040526000815290565b61155b91905b8082111561185457600081556001016136e9565b5090565b905600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a723058203c8e25f14894b4155b24701de30f025078d8ed7672c303ae840676a0ea8b273f002900000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000d050000000000000000000000000000000000000000000000000000000000000c9c0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000005800000000000000000000000000000000000000000000000006f05b59d3b200000000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000580000000000000000000000000000000000000000000001e1d1c72d5b97e0000000000000000000000000000000000000000000000000000000000000000151800000000000000000000000000000000000000000000000000000000001e133800000000000000000000000000000000000000000000000000000000000000003444159000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034441590000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x606060405236156103b65763ffffffff60e060020a60003504166302f652a381146103bb57806304d41474146103e157806305d2035b1461040657806306fdde031461042d578063095ea7b3146104b85780630a402742146104ee5780630c58062b1461051b57806310f1726d14610540578063128e37611461056757806318160ddd1461058c5780631bf2a90a146105b157806323b872dd146105d657806329ff4f53146106125780632f83f78114610633578063313ce5671461065a578063331c55b414610683578063335494a4146106af57806335995022146106d75780633cb5d100146106ff5780633ed66d3d1461077557806340c10f19146107a257806342c1867b146107c657806343214675146107f957806345977d031461081f5780634778dfb8146108375780634813e3e51461085f578063485d5dd21461088457806348bb4067146108a95780634b3d81b6146108da5780634eee966f146108ff578063534439a31461099457806354f63105146109b95780635956b853146109de5780635d444ffb14610a115780635de4ccb014610a365780635df34ff214610a655780635f412d4f14610a92578063600440cb14610aa757806370a0823114610ad6578063718228fa14610b07578063740707cf14610b2c57806379ba509714610b415780638444b39114610b565780638526d09214610b8d578063867c285714610bc05780638da5cb5b14610bf35780638f7b7bce14610c22578063928e659214610c55578063936bbf9a14610c8657806393e5365f14610cab57806395d89b4114610cd05780639613252114610d5b57806396a8069914610d825780639738968c14610da95780639aaac86414610dd05780639bc8e9ee14610df7578063a222a52f14610e0f578063a293d1e814610e34578063a41ff1e514610e5f578063a5f2676014610e84578063a666190114610eae578063a9059cbb14610ed3578063b19b216214610f09578063b54d623814610f30578063b6033daf14610f48578063bef17ed014610f79578063c392f11814610f9e578063c4e41b2214610fd8578063c59513a414610ffd578063c752ff6214611024578063c96e83db14611049578063d05c78da1461106e578063d1f276d314611099578063d49dbb5c146110c8578063d4ee1d90146110ed578063d7e7088a1461111c578063d94fe8321461113d578063dd62ed3e1461116e578063df30e592146111a5578063e0faf0a8146111cf578063e6cb901314611236578063eb60764f14611261578063f2fde38b14611286578063ffeb7d75146112a7575b600080fd5b34156103c657600080fd5b6103df600160a060020a036004351660243515156112c8565b005b34156103ec57600080fd5b6103f4611329565b60405190815260200160405180910390f35b341561041157600080fd5b61041961132f565b604051901515815260200160405180910390f35b341561043857600080fd5b610440611338565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561047d5780820151818401525b602001610464565b50505050905090810190601f1680156104aa5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156104c357600080fd5b610419600160a060020a03600435166024356113d6565b604051901515815260200160405180910390f35b34156104f957600080fd5b6103df600160a060020a036004351660243560443560643560843561147d565b005b341561052657600080fd5b6103f461154e565b60405190815260200160405180910390f35b341561054b57600080fd5b610419611554565b604051901515815260200160405180910390f35b341561057257600080fd5b6103f461155e565b60405190815260200160405180910390f35b341561059757600080fd5b6103f4611564565b60405190815260200160405180910390f35b34156105bc57600080fd5b6103f461156a565b60405190815260200160405180910390f35b34156105e157600080fd5b610419600160a060020a0360043581169060243516604435611570565b604051901515815260200160405180910390f35b341561061d57600080fd5b6103df600160a060020a03600435166116f7565b005b341561063e57600080fd5b61041961174e565b604051901515815260200160405180910390f35b341561066557600080fd5b61066d611858565b60405160ff909116815260200160405180910390f35b341561068e57600080fd5b6103df600160a060020a03600435166024356044356064351515611861565b005b34156106ba57600080fd5b6103f460043561193c565b60405190815260200160405180910390f35b34156106e257600080fd5b6103f460043561197b565b60405190815260200160405180910390f35b341561070a57600080fd5b610715600435611996565b6040518088600160a060020a0316600160a060020a0316815260200187815260200186815260200185815260200184815260200183815260200182600281111561075b57fe5b60ff16815260200197505050505050505060405180910390f35b341561078057600080fd5b6104196004356024356119e0565b604051901515815260200160405180910390f35b34156107ad57600080fd5b6103df600160a060020a0360043516602435611bf8565b005b34156107d157600080fd5b610419600160a060020a0360043516611ca7565b604051901515815260200160405180910390f35b341561080457600080fd5b6103df600160a060020a03600435166024351515611cbc565b005b341561082a57600080fd5b6103df600435611d5b565b005b341561084257600080fd5b6103f4600435611eb5565b60405190815260200160405180910390f35b341561086a57600080fd5b6103f4611f23565b60405190815260200160405180910390f35b341561088f57600080fd5b6103f4611f29565b60405190815260200160405180910390f35b34156108b457600080fd5b6103f4600160a060020a0360043516611f2f565b60405190815260200160405180910390f35b34156108e557600080fd5b6103f4611f41565b60405190815260200160405180910390f35b341561090a57600080fd5b6103df60046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650611f4795505050505050565b005b341561099f57600080fd5b6103f46120b7565b60405190815260200160405180910390f35b34156109c457600080fd5b6103f46120bd565b60405190815260200160405180910390f35b34156109e957600080fd5b610419600160a060020a03600435166120c3565b604051901515815260200160405180910390f35b3415610a1c57600080fd5b6103f46120d8565b60405190815260200160405180910390f35b3415610a4157600080fd5b610a496120de565b604051600160a060020a03909116815260200160405180910390f35b3415610a7057600080fd5b6104196004356024356120ed565b604051901515815260200160405180910390f35b3415610a9d57600080fd5b6103df61232d565b005b3415610ab257600080fd5b610a49612372565b604051600160a060020a03909116815260200160405180910390f35b3415610ae157600080fd5b6103f4600160a060020a0360043516612381565b60405190815260200160405180910390f35b3415610b1257600080fd5b6103f46123d7565b60405190815260200160405180910390f35b3415610b3757600080fd5b6103df6123dd565b005b3415610b4c57600080fd5b6103df61247b565b005b3415610b6157600080fd5b610b696124fa565b60405180826004811115610b7957fe5b60ff16815260200191505060405180910390f35b3415610b9857600080fd5b610419600160a060020a036004351661254b565b604051901515815260200160405180910390f35b3415610bcb57600080fd5b610419600160a060020a0360043516612575565b604051901515815260200160405180910390f35b3415610bfe57600080fd5b610a4961258a565b604051600160a060020a03909116815260200160405180910390f35b3415610c2d57600080fd5b610419600160a060020a0360043516612599565b604051901515815260200160405180910390f35b3415610c6057600080fd5b6103f4600160a060020a03600435166125e9565b60405190815260200160405180910390f35b3415610c9157600080fd5b6103f46125fb565b60405190815260200160405180910390f35b3415610cb657600080fd5b6103f4612601565b60405190815260200160405180910390f35b3415610cdb57600080fd5b610440612607565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561047d5780820151818401525b602001610464565b50505050905090810190601f1680156104aa5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3415610d6657600080fd5b6104196126a5565b604051901515815260200160405180910390f35b3415610d8d57600080fd5b6103df600160a060020a03600435166024356044356126b5565b005b3415610db457600080fd5b61041961279a565b604051901515815260200160405180910390f35b3415610ddb57600080fd5b6104196127c0565b604051901515815260200160405180910390f35b3415610e0257600080fd5b6103df6004356127c9565b005b3415610e1a57600080fd5b6103f46127fe565b60405190815260200160405180910390f35b3415610e3f57600080fd5b6103f4600435602435612804565b60405190815260200160405180910390f35b3415610e6a57600080fd5b6103f461281b565b60405190815260200160405180910390f35b3415610e8f57600080fd5b610419600435612821565b604051901515815260200160405180910390f35b3415610eb957600080fd5b6103f4612847565b60405190815260200160405180910390f35b3415610ede57600080fd5b610419600160a060020a036004351660243561284d565b604051901515815260200160405180910390f35b3415610f1457600080fd5b610419612980565b604051901515815260200160405180910390f35b3415610f3b57600080fd5b6103df600435612b5a565b005b3415610f5357600080fd5b6103f4600160a060020a0360043516612ba2565b60405190815260200160405180910390f35b3415610f8457600080fd5b6103f4612bcc565b60405190815260200160405180910390f35b3415610fa957600080fd5b610fb4600435612bd2565b60405180826002811115610b7957fe5b60ff16815260200191505060405180910390f35b3415610fe357600080fd5b6103f4612c31565b60405190815260200160405180910390f35b341561100857600080fd5b610419612c38565b604051901515815260200160405180910390f35b341561102f57600080fd5b6103f4612c75565b60405190815260200160405180910390f35b341561105457600080fd5b6103f4612c7b565b60405190815260200160405180910390f35b341561107957600080fd5b6103f4600435602435612c81565b60405190815260200160405180910390f35b34156110a457600080fd5b610a49612cb0565b604051600160a060020a03909116815260200160405180910390f35b34156110d357600080fd5b6103f4612cbf565b60405190815260200160405180910390f35b34156110f857600080fd5b610a49612cc5565b604051600160a060020a03909116815260200160405180910390f35b341561112757600080fd5b6103df600160a060020a0360043516612cd4565b005b341561114857600080fd5b6103f4600160a060020a0360043516612e80565b60405190815260200160405180910390f35b341561117957600080fd5b6103f4600160a060020a0360043581169060243516612e92565b60405190815260200160405180910390f35b34156111b057600080fd5b610419600435612ebf565b604051901515815260200160405180910390f35b34156111da57600080fd5b6111e2612f2b565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156112225780820151818401525b602001611209565b505050509050019250505060405180910390f35b341561124157600080fd5b6103f4600435602435612ffc565b60405190815260200160405180910390f35b341561126c57600080fd5b6103f4613016565b60405190815260200160405180910390f35b341561129157600080fd5b6103df600160a060020a036004351661303e565b005b34156112b257600080fd5b6103df600160a060020a0360043516613079565b005b60035433600160a060020a039081169116146112e357600080fd5b60055460009060a060020a900460ff16156112fd57600080fd5b600160a060020a0383166000908152600660205260409020805460ff19168315151790555b5b505b5050565b60145481565b60075460ff1681565b60258054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156113ce5780601f106113a3576101008083540402835291602001916113ce565b820191906000526020600020905b8154815290600101906020018083116113b157829003601f168201915b505050505081565b60008115806114085750600160a060020a03338116600090815260026020908152604080832093871683529290522054155b151561141357600080fd5b600160a060020a03338116600081815260026020908152604080832094881680845294909152908190208590557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a35060015b92915050565b60035433600160a060020a0390811691161461149857600080fd5b60125483101580156114ac57506013548311155b15156114b757600080fd5b601354601454106114c757600080fd5b6114d28386846130c8565b6014805460010190556114e58583611bf8565b7f6bd11c91e66ab57411c3d72828f939eac4446988c1c1f5862442bf7fa9884e238582848787604051600160a060020a03909516855260208501939093526040808501929092526060840152608083019190915260a0909101905180910390a15b5b5050505050565b60235481565b601f544210155b90565b60155481565b60005481565b601a5481565b60008061157b611554565b151561158657600080fd5b61158f85612599565b151561159a57600080fd5b50600160a060020a03808516600081815260026020908152604080832033909516835293815283822054928252600d905291909120546115d9906131fb565b50826115e486612381565b101580156115f157508215155b80156115fd5750808311155b151561160857600080fd5b600160a060020a0384166000908152600d602052604090205461162a906131fb565b506116358184612804565b600160a060020a0380871660008181526002602090815260408083203390951683529381528382209490945590815260019092529020546116769084612804565b600160a060020a0380871660009081526001602052604080822093909355908616815220546116a59084612ffc565b600160a060020a03808616600081815260016020526040908190209390935591908716906000805160206137058339815191529086905190815260200160405180910390a3600191505b509392505050565b60035433600160a060020a0390811691161461171257600080fd5b60055460009060a060020a900460ff161561172c57600080fd5b60058054600160a060020a031916600160a060020a0384161790555b5b505b50565b600160a060020a033316600090815260106020526040812054819060ff16151560011461177a57600080fd5b600160a060020a0333166000908152601060209081526040808320805460ff191690556022546011909252909120546117b39190612ffc565b600160a060020a0330166000908152600160205260409020549091506117d99082612804565b600160a060020a033081166000908152600160205260408082209390935533909116815220546118099082612ffc565b600160a060020a0333811660008181526001602052604090819020939093559130909116906000805160206137058339815191529084905190815260200160405180910390a3600191505b5090565b60275460ff1681565b60035433600160a060020a0390811691161461187c57600080fd5b601554831015801561189357506016546015540183105b151561189e57600080fd5b601654601754106118ae57600080fd5b6118ba838560006130c8565b6017805460010190558015156118e657600160a060020a0384166000908152600f602052604090204290555b6118f08483611bf8565b7fe79fec6463e59273a1da7bc924872b8b35b64c591ce527b6329f0db8d6be71fd8484604051600160a060020a03909216825260208201526040908101905180910390a15b5b50505050565b6000600161195061194b613016565b61197b565b6000848152600e602052604090206003015491900360020a9081151561197257fe5b0490505b919050565b6000601e548281151561198a57fe5b0460010190505b919050565b600e602052600090815260409020805460018201546002830154600384015460048501546005860154600690960154600160a060020a039095169593949293919290919060ff1687565b6000806119eb611554565b15156119f657600080fd5b438311611a0257600080fd5b611a0b33612599565b1515611a1657600080fd5b50600160a060020a0333166000908152600d6020526040812054905b6000828152600e602052604090206006015460ff166002811115611a5257fe5b14611a5c57600080fd5b611a65816131fb565b50602254600160a060020a0333166000908152600160205260409020541015611a8d57600080fd5b6000818152600e60205260409020600581018590556004810184905560060180546002919060ff19166001835b0217905550600160a060020a033316600090815260016020526040902054602254611ae59190612804565b600160a060020a03338116600090815260016020526040808220939093553090911681522054602254611b189190612ffc565b6001600030600160a060020a0316600160a060020a031681526020019081526020016000208190555030600160a060020a031633600160a060020a031660008051602061370583398151915260225460405190815260200160405180910390a36000818152600e60205260409081902060058101546004909101547f789864ab03bca8d309c9bec6804307cfc416db24eab7873ba7f3df79797b09179284923392909151938452600160a060020a03909216602084015260408084019190915260608301919091526080909101905180910390a1600191505b5092915050565b600160a060020a03331660009081526008602052604090205460ff161515611c1f57600080fd5b60075460ff1615611c2f57600080fd5b611c3b60005482612ffc565b6000908155600160a060020a038316815260016020526040902054611c609082612ffc565b600160a060020a0383166000818152600160205260408082209390935590916000805160206137058339815191529084905190815260200160405180910390a35b5b5b5050565b60086020526000908152604090205460ff1681565b60035433600160a060020a03908116911614611cd757600080fd5b60075460ff1615611ce757600080fd5b600160a060020a03821660009081526008602052604090819020805460ff19168315151790557f4b0adf6c802794c7dde28a08a4e07131abcff3bf9603cd71f14f90bec7865efa908390839051600160a060020a039092168252151560208201526040908101905180910390a15b5b5b5050565b6000611d656124fa565b905060035b816004811115611d7657fe5b1480611d8e575060045b816004811115611d8c57fe5b145b1515611d9957600080fd5b811515611da557600080fd5b600160a060020a033316600090815260016020526040902054611dc89083612804565b600160a060020a03331660009081526001602052604081209190915554611def9083612804565b600055600b54611dff9083612ffc565b600b55600a54600160a060020a031663753e88e5338460405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515611e5857600080fd5b6102c65a03f11515611e6957600080fd5b5050600a54600160a060020a03908116915033167f7e5c344a8141a805725cb476f76c6953b842222b967edd1f78ddb6e8b3f397ac8460405190815260200160405180910390a35b5050565b6000818152600e6020526040812054600160a060020a0316611ed5611554565b15611f0057611ee383612ebf565b15611f0057611ef983611ef4613016565b613321565b9150611f1d565b5b600160a060020a03811660009081526001602052604090205491505b50919050565b601e5481565b60245481565b600f6020526000908152604090205481565b601f5481565b60035433600160a060020a03908116911614611f6257600080fd5b6025828051611f75929160200190613652565b506026818051611f89929160200190613652565b507fd131ab1e6f279deea74e13a18477e13e2107deb6dc8ae955648948be5841fb466025602660405160408082528354600260001961010060018416150201909116049082018190528190602082019060608301908690801561202d5780601f106120025761010080835404028352916020019161202d565b820191906000526020600020905b81548152906001019060200180831161201057829003601f168201915b50508381038252845460026000196101006001841615020190911604808252602090910190859080156120a15780601f10612076576101008083540402835291602001916120a1565b820191906000526020600020905b81548152906001019060200180831161208457829003601f168201915b505094505050505060405180910390a15b5b5050565b60215481565b601d5481565b60106020526000908152604090205460ff1681565b601c5481565b600a54600160a060020a031681565b60008060025b6000858152600e602052604090206006015460ff16600281111561211357fe5b14801561213057506000848152600e602052604090206004015443115b15612159576000848152600e6020526040902060060180546001919060ff191682805b02179055505b506000838152600e6020526040902054600160a060020a031660025b6000858152600e602052604090206006015460ff16600281111561219557fe5b1461219f57600080fd5b6000848152600e60205260409020600501548310156121bd57600080fd5b6000848152600e60205260408120600601805460ff19166001835b0217905550600160a060020a0333166000908152600160205260409020546122009084612804565b600160a060020a033381166000908152600160205260408082209390935530909116815220546122309084612ffc565b600160a060020a0330811660008181526001602052604090819020939093559133909116906000805160206137058339815191529086905190815260200160405180910390a36000848152600e602052604090205461229890600160a060020a031633613420565b1561232157600160a060020a0381166000908152601160209081526040808320869055601090915290819020805460ff191660011790557f72760e46b3824807567c13ec75882de5d9c789a91517ae7b474d2e6b62d3771e9085903390869051928352600160a060020a0390911660208301526040808301919091526060909101905180910390a15b600191505b5092915050565b60035433600160a060020a0390811691161461234857600080fd5b60205460ff16151561235957600080fd5b6007805460ff1916600117905561236e613574565b5b5b565b600954600160a060020a031681565b600160a060020a0381166000908152600d602052604081205480156123b057611ef981611eb5565b9150611f1d565b600160a060020a0383166000908152600160205260409020549150611f1d565b5b50919050565b60175481565b600160a060020a0333166000908152600d60205260408120546123ff81612ebf565b151561240a57600080fd5b600160a060020a0333166000908152600d6020526040902054915060025b6000838152600e602052604090206006015460ff16600281111561244857fe5b1461245257600080fd5b6000828152600e6020526040902060060180546001919060ff191682805b02179055505b5b5050565b60045433600160a060020a0390811691161461249657600080fd5b600454600354600160a060020a0391821691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360045460038054600160a060020a031916600160a060020a039092169190911790555b565b600061250461279a565b15156125125750600161155b565b600a54600160a060020a0316151561252c5750600261155b565b600b54151561253d5750600361155b565b50600461155b565b5b5b5b90565b600160a060020a0381166000908152600d602052604081205461256d90612ebf565b90505b919050565b60066020526000908152604090205460ff1681565b600354600160a060020a031681565b600160a060020a0381166000908152600f60205260409020546001901561197657602354600160a060020a0383166000908152600f602052604090205442031015611976575060005b5b5b919050565b60116020526000908152604090205481565b60195481565b601b5481565b60268054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156113ce5780601f106113a3576101008083540402835291602001916113ce565b820191906000526020600020905b8154815290600101906020018083116113b157829003601f168201915b505050505081565b60055460a060020a900460ff1681565b60035433600160a060020a039081169116146126d057600080fd5b60185481101580156126e757506019546018540181105b15156126f257600080fd5b601954601a541061270257600080fd5b60055460a060020a900460ff16151560011461271d57600080fd5b612729818460006130c8565b601a805460010190557f5da87a24d5db985862dc335ff32e322d9588ae9b4a971bd1526a58051c8cbaa4836000808585604051600160a060020a03909516855260208501939093526040808501929092526060840152608083019190915260a0909101905180910390a15b5b505050565b60055460009060a060020a900460ff1680156127b957506127b96135b7565b5b90505b90565b60205460ff1681565b60035433600160a060020a039081169116146127e457600080fd5b60205460ff16156127f457600080fd5b60218190555b5b50565b60185481565b60008282111561281057fe5b508082035b92915050565b600c5481565b600061282b611554565b151561283657600080fd5b61256d826131fb565b90505b919050565b60135481565b6000612857611554565b151561286257600080fd5b61286b33612599565b151561287657600080fd5b600160a060020a0333166000908152600d6020526040902054612898906131fb565b50816128a333612381565b101580156128b057508115155b15156128bb57600080fd5b600160a060020a0383166000908152600d60205260409020546128dd906131fb565b50600160a060020a0333166000908152600160205260409020546129019083612804565b600160a060020a0333811660009081526001602052604080822093909355908516815220546129309083612ffc565b600160a060020a0380851660008181526001602052604090819020939093559133909116906000805160206137058339815191529085905190815260200160405180910390a35060015b92915050565b600160a060020a0333166000908152600d602052604081205481906129a481612ebf565b15156129af57600080fd5b600160a060020a0333166000908152600d6020908152604080832054808452600e9092529091206004015490925043118015612a0b575060025b6000838152600e602052604090206006015460ff166002811115612a0957fe5b145b15612a34576000828152600e6020526040902060060180546001919060ff191682805b02179055505b60015b6000838152600e602052604090206006015460ff166002811115612a5757fe5b14612a6157600080fd5b6000828152600e60205260408120600601805460ff19166001835b0217905550600160a060020a033016600090815260016020526040902054602254612aa79190612804565b600160a060020a033016600090815260016020526040902055612ac9826131fb565b50600160a060020a033316600090815260016020526040902054602254612af09190612ffc565b600160a060020a03338116600081815260016020908152604080832095909555868252600e905283812060058101829055600401556022549092309092169160008051602061370583398151915291905190815260200160405180910390a3600192505b5b505090565b60035433600160a060020a03908116911614612b7557600080fd5b60055460a060020a900460ff1615612b8c57600080fd5b612b95816135bd565b61174b61232d565b5b5b50565b600160a060020a0381166000908152600d602052604081205461256d9061193c565b90505b919050565b60165481565b6000612bdd82612ebf565b1515612be857600080fd5b506000818152600e60205260409020600681015460049091015460ff9091169043118015612c22575060025b816002811115612c2057fe5b145b15611976575060015b5b919050565b6000545b90565b6000612c42611554565b1515612c4d57600080fd5b600160a060020a0333166000908152600d60205260409020546127b9906131fb565b90505b90565b600b5481565b60125481565b6000828202831580612c9d5750828482811515612c9a57fe5b04145b1515612ca557fe5b8091505b5092915050565b600554600160a060020a031681565b60225481565b600454600160a060020a031681565b612cdc61279a565b1515612ce757600080fd5b600160a060020a0381161515612cfc57600080fd5b60095433600160a060020a03908116911614612d1757600080fd5b60045b612d226124fa565b6004811115612d2d57fe5b1415612d3857600080fd5b600a8054600160a060020a031916600160a060020a038381169190911791829055166361d3d7a66000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515612d9657600080fd5b6102c65a03f11515612da757600080fd5b505050604051805190501515612dbc57600080fd5b60008054600a549091600160a060020a0390911690634b2ba0dd90604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515612e0c57600080fd5b6102c65a03f11515612e1d57600080fd5b50505060405180519050141515612e3357600080fd5b600a547f7845d5aa74cc410e35571258d954f23b82276e160fe8c188fa80566580f279cc90600160a060020a0316604051600160a060020a03909116815260200160405180910390a15b50565b600d6020526000908152604090205481565b600160a060020a038083166000908152600260209081526040808320938516835292905220545b92915050565b60008082118015612ed25750601b548211155b8015612ef457506000828152600e6020526040902054600160a060020a031615155b801561256d57506000828152600e6020908152604080832054600160a060020a03168352600d90915290205482145b90505b919050565b612f336136d1565b612f3b6136d1565b600080601b54604051805910612f4e5750595b908082528060200260200182016040525b50925060009150600190505b601b548111612ff257612f7d81612ebf565b8015612f9a57506000818152600e60205260409020600401544311155b8015612fc6575060025b6000828152600e602052604090206006015460ff166002811115612fc457fe5b145b15612fe95780838381518110612fd857fe5b602090810290910101526001909101905b5b600101612f6b565b8293505b50505090565b600082820183811015612ca557fe5b8091505b5092915050565b6000613020611554565b1561155b57602454601f54420381151561303657fe5b0490505b5b90565b60035433600160a060020a0390811691161461305957600080fd5b60048054600160a060020a031916600160a060020a0383161790555b5b50565b600160a060020a038116151561308e57600080fd5b60095433600160a060020a039081169116146130a957600080fd5b60098054600160a060020a031916600160a060020a0383161790555b50565b60035433600160a060020a039081169116146130e357600080fd5b601b548311156130f257600080fd5b6130fb8261254b565b1561310557600080fd5b61310e83612ebf565b1561311857600080fd5b6000838152600e602090815260408083208054600160a060020a031916600160a060020a0387169081179091558352600d909152902083905561315a836135ff565b6000838152600e60205260409020600101819055613176613016565b600e6000858152602001908152602001600020600201819055507f5fd6d0b7e707fe344bd2a1887f9d0eeea8bfcac6f339ba4200e74f0647f101c08284604051600160a060020a03909216825260208201526040908101905180910390a16000838152600e60205260408120600601805460ff19166001835b02179055505b5b505050565b600080600080600061320c86612ebf565b1561331257613219613016565b6000878152600e6020526040902060020154909450841480159061324f5750600c546000878152600e6020526040902060020154105b15613312576000868152600e6020908152604080832054600160a060020a03168084526001909252822054915490945090925061328c9083612804565b6000556132998685613321565b600160a060020a0384166000908152600160205260408120829055549091506132c29082612ffc565b6000908155868152600e6020526040808220600201869055600160a060020a038516919060008051602061370583398151915290858503905190815260200160405180910390a360019450613318565b5b600094505b50505050919050565b6000828152600e6020908152604080832054600160a060020a031683526001909152812054600c54829081908190819081908190891061336357600c54613365565b885b60008b8152600e602052604090206002015490965060010194505b85851161340f576133908561197b565b601e5460008c8152600e602052604090206003015491955060001990860281019450850160020a908115156133c157fe5b0491508490505b8281111580156133d85750858111155b15613407576133fc87602154600201600a0a8985028115156133f657fe5b04612ffc565b96505b6001016133c8565b809450613380565b8697505b5050505050505092915050565b600160a060020a0382166000908152600d6020526040812054819061344481612ebf565b151561344f57600080fd5b613457611554565b151561346257600080fd5b61346b8461254b565b1561347557600080fd5b600160a060020a0385166000908152600d60205260409020549150613499826131fb565b506000828152600e602081815260408084208054600160a060020a031916600160a060020a038a81169182178355908652600d84528286208890558a168552908420849055858452919052600101556134f0613016565b6000838152600e60205260408082206002810193909355600483018290556005909201557ffb7aaa2ec871044b8cde9fee0cd727b02c8d6caf7aeb7f5fa2e02ffdfe1643349083908790879051928352600160a060020a039182166020840152166040808301919091526060909101905180910390a1600192505b5b505092915050565b60055433600160a060020a0390811691161461358f57600080fd5b6005805474ff0000000000000000000000000000000000000000191660a060020a1790555b5b565b60015b90565b60035433600160a060020a039081169116146135d857600080fd5b60205460ff16156135e857600080fd5b6020805460ff19166001179055601f8190555b5b50565b8061360981612ebf565b151561361457600080fd5b6001601b5403601c54601d5403600184030281151561362f57fe5b601d546000858152600e602052604090209290910490036003909101555b5b5050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061369357805160ff19168380011785556136c0565b828001600101855582156136c0579182015b828111156136c05782518255916020019190600101906136a5565b5b506118549291506136e3565b5090565b60206040519081016040526000815290565b61155b91905b8082111561185457600081556001016136e9565b5090565b905600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a723058203c8e25f14894b4155b24701de30f025078d8ed7672c303ae840676a0ea8b273f0029
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000d050000000000000000000000000000000000000000000000000000000000000c9c0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000005800000000000000000000000000000000000000000000000006f05b59d3b200000000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000580000000000000000000000000000000000000000000001e1d1c72d5b97e0000000000000000000000000000000000000000000000000000000000000000151800000000000000000000000000000000000000000000000000000000001e133800000000000000000000000000000000000000000000000000000000000000003444159000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034441590000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): DAY
Arg [1] : _symbol (string): DAY
Arg [2] : _initialSupply (uint256): 0
Arg [3] : _decimals (uint8): 18
Arg [4] : _mintable (bool): True
Arg [5] : _maxAddresses (uint256): 3333
Arg [6] : _firstTeamContributorId (uint256): 3228
Arg [7] : _totalTeamContributorIds (uint256): 18
Arg [8] : _totalPostIcoContributorIds (uint256): 88
Arg [9] : _minMintingPower (uint256): 500000000000000000
Arg [10] : _maxMintingPower (uint256): 1000000000000000000
Arg [11] : _halvingCycle (uint256): 88
Arg [12] : _minBalanceToSell (uint256): 8888000000000000000000
Arg [13] : _dayInSecs (uint256): 86400
Arg [14] : _teamLockPeriodInSec (uint256): 31536000
-----Encoded View---------------
19 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000001e0
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000220
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000d05
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000c9c
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000058
Arg [9] : 00000000000000000000000000000000000000000000000006f05b59d3b20000
Arg [10] : 0000000000000000000000000000000000000000000000000de0b6b3a7640000
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000058
Arg [12] : 0000000000000000000000000000000000000000000001e1d1c72d5b97e00000
Arg [13] : 0000000000000000000000000000000000000000000000000000000000015180
Arg [14] : 0000000000000000000000000000000000000000000000000000000001e13380
Arg [15] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [16] : 4441590000000000000000000000000000000000000000000000000000000000
Arg [17] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [18] : 4441590000000000000000000000000000000000000000000000000000000000
Swarm Source
bzzr://3c8e25f14894b4155b24701de30f025078d8ed7672c303ae840676a0ea8b273f
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.