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 249 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Refund My Ico In... | 22919512 | 229 days ago | IN | 0 ETH | 0.10155256 | ||||
| 0x68747470 | 22420844 | 299 days ago | IN | 0 ETH | 0.00003 | ||||
| 0x68747470 | 22420532 | 299 days ago | IN | 0 ETH | 0.00003 | ||||
| 0x68747470 | 22420219 | 299 days ago | IN | 0 ETH | 0.00003 | ||||
| 0x68747470 | 22419931 | 299 days ago | IN | 0 ETH | 0.00003 | ||||
| 0x68747470 | 22419642 | 299 days ago | IN | 0 ETH | 0.00003 | ||||
| 0x68747470 | 22419351 | 299 days ago | IN | 0 ETH | 0.00003 | ||||
| 0x68747470 | 22419063 | 299 days ago | IN | 0 ETH | 0.00003 | ||||
| 0x68747470 | 22417914 | 299 days ago | IN | 0 ETH | 0.00003 | ||||
| 0x68747470 | 22417622 | 299 days ago | IN | 0 ETH | 0.00003 | ||||
| 0x68747470 | 22417335 | 300 days ago | IN | 0 ETH | 0.00003 | ||||
| 0x68747470 | 22417054 | 300 days ago | IN | 0 ETH | 0.00003 | ||||
| 0x68747470 | 22416771 | 300 days ago | IN | 0 ETH | 0.00003 | ||||
| 0x68747470 | 22416488 | 300 days ago | IN | 0 ETH | 0.00003 | ||||
| 0x68747470 | 22416202 | 300 days ago | IN | 0 ETH | 0.00003 | ||||
| 0x68747470 | 22415918 | 300 days ago | IN | 0 ETH | 0.00003 | ||||
| 0x68747470 | 22415635 | 300 days ago | IN | 0 ETH | 0.00003 | ||||
| 0x68747470 | 22415349 | 300 days ago | IN | 0 ETH | 0.00003 | ||||
| 0x68747470 | 22415066 | 300 days ago | IN | 0 ETH | 0.00003 | ||||
| Refund My Ico In... | 18089197 | 905 days ago | IN | 0 ETH | 0.27037573 | ||||
| Refund My Ico In... | 5824822 | 2810 days ago | IN | 0 ETH | 0.00353126 | ||||
| Refund My Ico In... | 5824816 | 2810 days ago | IN | 0 ETH | 0.00010906 | ||||
| 0x51fa7efd | 5514801 | 2864 days ago | IN | 0 ETH | 0.00006 | ||||
| Transfer | 5514801 | 2864 days ago | IN | 0 ETH | 0.00053437 | ||||
| Refund My Ico In... | 4754127 | 2995 days ago | IN | 0 ETH | 0.0012 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Transfer | 5430372 | 2879 days ago | 0 ETH | ||||
| Transfer | 2668622 | 3386 days ago | 3 ETH | ||||
| Transfer | 2440530 | 3424 days ago | 0 ETH | ||||
| Transfer | 2440527 | 3424 days ago | 0 ETH | ||||
| Transfer | 2439600 | 3424 days ago | 0 ETH | ||||
| Transfer | 2439594 | 3424 days ago | 0 ETH | ||||
| Transfer | 2439592 | 3424 days ago | 0 ETH | ||||
| Transfer | 2439149 | 3424 days ago | 0 ETH | ||||
| Transfer | 2439074 | 3424 days ago | 0 ETH | ||||
| Transfer | 2438948 | 3424 days ago | 0 ETH | ||||
| Transfer | 2438936 | 3424 days ago | 0 ETH | ||||
| Transfer | 2438863 | 3424 days ago | 0 ETH | ||||
| Transfer | 2438724 | 3424 days ago | 0 ETH | ||||
| Transfer | 2438517 | 3425 days ago | 0 ETH | ||||
| Transfer | 2438507 | 3425 days ago | 0 ETH | ||||
| Transfer | 2438465 | 3425 days ago | 0 ETH | ||||
| Transfer | 2438459 | 3425 days ago | 0 ETH | ||||
| Transfer | 2438438 | 3425 days ago | 0 ETH | ||||
| Transfer | 2438435 | 3425 days ago | 0 ETH | ||||
| Transfer | 2438433 | 3425 days ago | 0 ETH | ||||
| Transfer | 2438388 | 3425 days ago | 0 ETH | ||||
| Transfer | 2438383 | 3425 days ago | 0 ETH | ||||
| Transfer | 2438332 | 3425 days ago | 0 ETH | ||||
| Transfer | 2438321 | 3425 days ago | 0 ETH | ||||
| Transfer | 2438287 | 3425 days ago | 0 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
HONG
Compiler Version
v0.3.5+commit.5f97274
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2017-06-13
*/
/* Verified by 3esmit
- Bytecode Verification performed was compared on second iteration -
This file is part of the HONG.
The HONG is free software: you can redistribute it and/or modify
it under the terms of the GNU lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
The HONG is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU lesser General Public License for more details.
You should have received a copy of the GNU lesser General Public License
along with the HONG. If not, see <http://www.gnu.org/licenses/>.
*/
/*
* Parent contract that contains all of the configurable parameters of the main contract.
*/
contract HongConfiguration {
uint public closingTime;
uint public weiPerInitialHONG = 10**16;
string public name = "HONG";
string public symbol = "Ħ";
uint8 public decimals = 0;
uint public maxBountyTokens = 2 * (10**6);
uint public closingTimeExtensionPeriod = 30 days;
uint public minTokensToCreate = 100 * (10**6);
uint public maxTokensToCreate = 250 * (10**6);
uint public tokensPerTier = 50 * (10**6);
uint public lastKickoffDateBuffer = 304 days;
uint public mgmtRewardPercentage = 20;
uint public mgmtFeePercentage = 8;
uint public harvestQuorumPercent = 20;
uint public freezeQuorumPercent = 50;
uint public kickoffQuorumPercent = 20;
}
contract ErrorHandler {
bool public isInTestMode = false;
event evRecord(address msg_sender, uint msg_value, string message);
function doThrow(string message) internal {
evRecord(msg.sender, msg.value, message);
if(!isInTestMode){
throw;
}
}
}
contract TokenInterface is ErrorHandler {
mapping (address => uint256) balances;
mapping (address => mapping (address => uint256)) allowed;
uint256 public tokensCreated;
function balanceOf(address _owner) constant returns (uint256 balance);
function transfer(address _to, uint256 _amount) returns (bool success);
event evTransfer(address msg_sender, uint msg_value, address indexed _from, address indexed _to, uint256 _amount);
// Modifier that allows only token holders to trigger
modifier onlyTokenHolders {
if (balanceOf(msg.sender) == 0) doThrow("onlyTokenHolders"); else {_}
}
}
contract Token is TokenInterface {
// Protects users by preventing the execution of method calls that
// inadvertently also transferred ether
modifier noEther() {if (msg.value > 0) doThrow("noEther"); else{_}}
modifier hasEther() {if (msg.value <= 0) doThrow("hasEther"); else{_}}
function balanceOf(address _owner) constant returns (uint256 balance) {
return balances[_owner];
}
function transfer(address _to, uint256 _amount) noEther returns (bool success) {
if (_amount <= 0) return false;
if (balances[msg.sender] < _amount) return false;
if (balances[_to] + _amount < balances[_to]) return false;
balances[msg.sender] -= _amount;
balances[_to] += _amount;
evTransfer(msg.sender, msg.value, msg.sender, _to, _amount);
return true;
}
}
contract OwnedAccount is ErrorHandler {
address public owner;
bool acceptDeposits = true;
event evPayOut(address msg_sender, uint msg_value, address indexed _recipient, uint _amount);
modifier onlyOwner() {
if (msg.sender != owner) doThrow("onlyOwner");
else {_}
}
modifier noEther() {
if (msg.value > 0) doThrow("noEther");
else {_}
}
function OwnedAccount(address _owner) {
owner = _owner;
}
function payOutPercentage(address _recipient, uint _percent) internal onlyOwner noEther {
payOutAmount(_recipient, (this.balance * _percent) / 100);
}
function payOutAmount(address _recipient, uint _amount) internal onlyOwner noEther {
// send does not forward enough gas to see that this is a managed account call
if (!_recipient.call.value(_amount)())
doThrow("payOut:sendFailed");
else
evPayOut(msg.sender, msg.value, _recipient, _amount);
}
function () returns (bool success) {
if (!acceptDeposits) throw;
return true;
}
}
contract ReturnWallet is OwnedAccount {
address public mgmtBodyWalletAddress;
bool public inDistributionMode;
uint public amountToDistribute;
uint public totalTokens;
uint public weiPerToken;
function ReturnWallet(address _mgmtBodyWalletAddress) OwnedAccount(msg.sender) {
mgmtBodyWalletAddress = _mgmtBodyWalletAddress;
}
function payManagementBodyPercent(uint _percent) {
payOutPercentage(mgmtBodyWalletAddress, _percent);
}
function switchToDistributionMode(uint _totalTokens) onlyOwner {
inDistributionMode = true;
acceptDeposits = false;
totalTokens = _totalTokens;
amountToDistribute = this.balance;
weiPerToken = amountToDistribute / totalTokens;
}
function payTokenHolderBasedOnTokenCount(address _tokenHolderAddress, uint _tokens) onlyOwner {
payOutAmount(_tokenHolderAddress, weiPerToken * _tokens);
}
}
contract ExtraBalanceWallet is OwnedAccount {
address returnWalletAddress;
function ExtraBalanceWallet(address _returnWalletAddress) OwnedAccount(msg.sender) {
returnWalletAddress = _returnWalletAddress;
}
function returnBalanceToMainAccount() {
acceptDeposits = false;
payOutAmount(owner, this.balance);
}
function returnAmountToMainAccount(uint _amount) {
payOutAmount(owner, _amount);
}
function payBalanceToReturnWallet() {
acceptDeposits = false;
payOutAmount(returnWalletAddress, this.balance);
}
}
contract RewardWallet is OwnedAccount {
address public returnWalletAddress;
function RewardWallet(address _returnWalletAddress) OwnedAccount(msg.sender) {
returnWalletAddress = _returnWalletAddress;
}
function payBalanceToReturnWallet() {
acceptDeposits = false;
payOutAmount(returnWalletAddress, this.balance);
}
}
contract ManagementFeeWallet is OwnedAccount {
address public mgmtBodyAddress;
address public returnWalletAddress;
function ManagementFeeWallet(address _mgmtBodyAddress, address _returnWalletAddress) OwnedAccount(msg.sender) {
mgmtBodyAddress = _mgmtBodyAddress;
returnWalletAddress = _returnWalletAddress;
}
function payManagementBodyAmount(uint _amount) {
payOutAmount(mgmtBodyAddress, _amount);
}
function payBalanceToReturnWallet() {
acceptDeposits = false;
payOutAmount(returnWalletAddress, this.balance);
}
}
/*
* Token Creation contract, similar to other organization,for issuing tokens and initialize
* its ether fund.
*/
contract TokenCreationInterface is HongConfiguration {
address public managementBodyAddress;
ExtraBalanceWallet public extraBalanceWallet;
mapping (address => uint256) weiGiven;
mapping (address => uint256) public taxPaid;
function createTokenProxy(address _tokenHolder) internal returns (bool success);
function refundMyIcoInvestment();
function divisor() constant returns (uint divisor);
event evMinTokensReached(address msg_sender, uint msg_value, uint value);
event evCreatedToken(address msg_sender, uint msg_value, address indexed to, uint amount);
event evRefund(address msg_sender, uint msg_value, address indexed to, uint value, bool result);
}
contract GovernanceInterface is ErrorHandler, HongConfiguration {
// The variable indicating whether the fund has achieved the inital goal or not.
// This value is automatically set, and CANNOT be reversed.
bool public isFundLocked;
bool public isFundReleased;
modifier notLocked() {if (isFundLocked) doThrow("notLocked"); else {_}}
modifier onlyLocked() {if (!isFundLocked) doThrow("onlyLocked"); else {_}}
modifier notReleased() {if (isFundReleased) doThrow("notReleased"); else {_}}
modifier onlyHarvestEnabled() {if (!isHarvestEnabled) doThrow("onlyHarvestEnabled"); else {_}}
modifier onlyDistributionNotInProgress() {if (isDistributionInProgress) doThrow("onlyDistributionNotInProgress"); else {_}}
modifier onlyDistributionNotReady() {if (isDistributionReady) doThrow("onlyDistributionNotReady"); else {_}}
modifier onlyDistributionReady() {if (!isDistributionReady) doThrow("onlyDistributionReady"); else {_}}
modifier onlyCanIssueBountyToken(uint _amount) {
if (bountyTokensCreated + _amount > maxBountyTokens){
doThrow("hitMaxBounty");
}
else {_}
}
modifier onlyFinalFiscalYear() {
// Only call harvest() in the final fiscal year
if (currentFiscalYear < 4) doThrow("currentFiscalYear<4"); else {_}
}
modifier notFinalFiscalYear() {
// Token holders cannot freeze fund at the 4th Fiscal Year after passing `kickoff(4)` voting
if (currentFiscalYear >= 4) doThrow("currentFiscalYear>=4"); else {_}
}
modifier onlyNotFrozen() {
if (isFreezeEnabled) doThrow("onlyNotFrozen"); else {_}
}
bool public isDayThirtyChecked;
bool public isDaySixtyChecked;
uint256 public bountyTokensCreated;
uint public currentFiscalYear;
uint public lastKickoffDate;
mapping (uint => bool) public isKickoffEnabled;
bool public isFreezeEnabled;
bool public isHarvestEnabled;
bool public isDistributionInProgress;
bool public isDistributionReady;
ReturnWallet public returnWallet;
RewardWallet public rewardWallet;
ManagementFeeWallet public managementFeeWallet;
// define the governance of this organization and critical functions
function mgmtIssueBountyToken(address _recipientAddress, uint _amount) returns (bool);
function mgmtDistribute();
function mgmtInvestProject(
address _projectWallet,
uint _amount
) returns (bool);
event evIssueManagementFee(address msg_sender, uint msg_value, uint _amount, bool _success);
event evMgmtIssueBountyToken(address msg_sender, uint msg_value, address _recipientAddress, uint _amount, bool _success);
event evMgmtDistributed(address msg_sender, uint msg_value, uint256 _amount, bool _success);
event evMgmtInvestProject(address msg_sender, uint msg_value, address _projectWallet, uint _amount, bool result);
event evLockFund(address msg_sender, uint msg_value);
event evReleaseFund(address msg_sender, uint msg_value);
}
contract TokenCreation is TokenCreationInterface, Token, GovernanceInterface {
modifier onlyManagementBody {
if(msg.sender != address(managementBodyAddress)) {doThrow("onlyManagementBody");} else {_}
}
function TokenCreation(
address _managementBodyAddress,
uint _closingTime) {
managementBodyAddress = _managementBodyAddress;
closingTime = _closingTime;
}
function createTokenProxy(address _tokenHolder) internal notLocked notReleased hasEther returns (bool success) {
// Business logic (but no state changes)
// setup transaction details
uint tokensSupplied = 0;
uint weiAccepted = 0;
bool wasMinTokensReached = isMinTokensReached();
var weiPerLatestHONG = weiPerInitialHONG * divisor() / 100;
uint remainingWei = msg.value;
uint tokensAvailable = tokensAvailableAtCurrentTier();
if (tokensAvailable == 0) {
doThrow("noTokensToSell");
return false;
}
// Sell tokens in batches based on the current price.
while (remainingWei >= weiPerLatestHONG) {
uint tokensRequested = remainingWei / weiPerLatestHONG;
uint tokensToSellInBatch = min(tokensAvailable, tokensRequested);
// special case. Allow the last purchase to go over the max
if (tokensAvailable == 0 && tokensCreated == maxTokensToCreate) {
tokensToSellInBatch = tokensRequested;
}
uint priceForBatch = tokensToSellInBatch * weiPerLatestHONG;
// track to total wei accepted and total tokens supplied
weiAccepted += priceForBatch;
tokensSupplied += tokensToSellInBatch;
// update state
balances[_tokenHolder] += tokensToSellInBatch;
tokensCreated += tokensToSellInBatch;
weiGiven[_tokenHolder] += priceForBatch;
// update dependent values (state has changed)
weiPerLatestHONG = weiPerInitialHONG * divisor() / 100;
remainingWei = msg.value - weiAccepted;
tokensAvailable = tokensAvailableAtCurrentTier();
}
// the caller will still pay this amount, even though it didn't buy any tokens.
weiGiven[_tokenHolder] += remainingWei;
// when the caller is paying more than 10**16 wei (0.01 Ether) per token, the extra is basically a tax.
uint256 totalTaxLevied = weiAccepted - tokensSupplied * weiPerInitialHONG;
taxPaid[_tokenHolder] += totalTaxLevied;
// State Changes (no external calls)
tryToLockFund();
// External calls
if (totalTaxLevied > 0) {
if (!extraBalanceWallet.send(totalTaxLevied)){
doThrow("extraBalance:sendFail");
return;
}
}
// Events. Safe to publish these now that we know it all worked
evCreatedToken(msg.sender, msg.value, _tokenHolder, tokensSupplied);
if (!wasMinTokensReached && isMinTokensReached()) evMinTokensReached(msg.sender, msg.value, tokensCreated);
if (isFundLocked) evLockFund(msg.sender, msg.value);
if (isFundReleased) evReleaseFund(msg.sender, msg.value);
return true;
}
function refundMyIcoInvestment() noEther notLocked onlyTokenHolders {
// 1: Preconditions
if (weiGiven[msg.sender] == 0) {
doThrow("noWeiGiven");
return;
}
if (balances[msg.sender] > tokensCreated) {
doThrow("invalidTokenCount");
return;
}
// 2: Business logic
bool wasMinTokensReached = isMinTokensReached();
var tmpWeiGiven = weiGiven[msg.sender];
var tmpTaxPaidBySender = taxPaid[msg.sender];
var tmpSenderBalance = balances[msg.sender];
var amountToRefund = tmpWeiGiven;
// 3: state changes.
balances[msg.sender] = 0;
weiGiven[msg.sender] = 0;
taxPaid[msg.sender] = 0;
tokensCreated -= tmpSenderBalance;
// 4: external calls
// Pull taxes paid back into this contract (they would have been paid into the extraBalance account)
extraBalanceWallet.returnAmountToMainAccount(tmpTaxPaidBySender);
// If that works, then do a refund
if (!msg.sender.send(amountToRefund)) {
evRefund(msg.sender, msg.value, msg.sender, amountToRefund, false);
doThrow("refund:SendFailed");
return;
}
evRefund(msg.sender, msg.value, msg.sender, amountToRefund, true);
if (!wasMinTokensReached && isMinTokensReached()) evMinTokensReached(msg.sender, msg.value, tokensCreated);
}
// Using a function rather than a state variable, as it reduces the risk of inconsistent state
function isMinTokensReached() constant returns (bool) {
return tokensCreated >= minTokensToCreate;
}
function isMaxTokensReached() constant returns (bool) {
return tokensCreated >= maxTokensToCreate;
}
function mgmtIssueBountyToken(
address _recipientAddress,
uint _amount
) noEther onlyManagementBody onlyCanIssueBountyToken(_amount) returns (bool){
// send token to the specified address
balances[_recipientAddress] += _amount;
bountyTokensCreated += _amount;
// event
evMgmtIssueBountyToken(msg.sender, msg.value, _recipientAddress, _amount, true);
}
function mgmtDistribute() onlyManagementBody hasEther onlyHarvestEnabled onlyDistributionNotReady {
distributeDownstream(mgmtRewardPercentage);
}
function distributeDownstream(uint _mgmtPercentage) internal onlyDistributionNotInProgress {
// transfer all balance from the following accounts
// (1) HONG main account,
// (2) managementFeeWallet,
// (3) rewardWallet
// (4) extraBalanceWallet
// to returnWallet
// And allocate _mgmtPercentage of the fund to ManagementBody
// State changes first (even though it feels backwards)
isDistributionInProgress = true;
isDistributionReady = true;
payBalanceToReturnWallet();
managementFeeWallet.payBalanceToReturnWallet();
rewardWallet.payBalanceToReturnWallet();
extraBalanceWallet.payBalanceToReturnWallet();
// transfer _mgmtPercentage of returns to mgmt Wallet
if (_mgmtPercentage > 0) returnWallet.payManagementBodyPercent(_mgmtPercentage);
returnWallet.switchToDistributionMode(tokensCreated + bountyTokensCreated);
// Token holder can claim the remaining fund (the total amount harvested/ to be distributed) starting from here
evMgmtDistributed(msg.sender, msg.value, returnWallet.balance, true);
isDistributionInProgress = false;
}
function payBalanceToReturnWallet() internal {
if (!returnWallet.send(this.balance))
doThrow("payBalanceToReturnWallet:sendFailed");
return;
}
function min(uint a, uint b) constant internal returns (uint) {
return (a < b) ? a : b;
}
function tryToLockFund() internal {
// ICO Diagram: https://github.com/hongcoin/DO/wiki/ICO-Period-and-Target
if (isFundReleased) {
// Do not change the state anymore
return;
}
// Case A
isFundLocked = isMaxTokensReached();
// if we've reached the 30 day mark, try to lock the fund
if (!isFundLocked && !isDayThirtyChecked && (now >= closingTime)) {
if (isMinTokensReached()) {
// Case B
isFundLocked = true;
}
isDayThirtyChecked = true;
}
// if we've reached the 60 day mark, try to lock the fund
if (!isFundLocked && !isDaySixtyChecked && (now >= (closingTime + closingTimeExtensionPeriod))) {
if (isMinTokensReached()) {
// Case C
isFundLocked = true;
}
isDaySixtyChecked = true;
}
if (isDaySixtyChecked && !isMinTokensReached()) {
// Case D
// Mark the release state. No fund should be accepted anymore
isFundReleased = true;
}
}
function tokensAvailableAtTierInternal(uint8 _currentTier, uint _tokensPerTier, uint _tokensCreated) constant returns (uint) {
uint tierThreshold = (_currentTier+1) * _tokensPerTier;
// never go above maxTokensToCreate, which could happen if the max is not a multiple of _tokensPerTier
if (tierThreshold > maxTokensToCreate) {
tierThreshold = maxTokensToCreate;
}
// this can happen on the final purchase in the last tier
if (_tokensCreated > tierThreshold) {
return 0;
}
return tierThreshold - _tokensCreated;
}
function tokensAvailableAtCurrentTier() constant returns (uint) {
return tokensAvailableAtTierInternal(getCurrentTier(), tokensPerTier, tokensCreated);
}
function getCurrentTier() constant returns (uint8) {
uint8 tier = (uint8) (tokensCreated / tokensPerTier);
return (tier > 4) ? 4 : tier;
}
function pricePerTokenAtCurrentTier() constant returns (uint) {
return weiPerInitialHONG * divisor() / 100;
}
function divisor() constant returns (uint divisor) {
// Quantity divisor model: based on total quantity of coins issued
// Price ranged from 1.0 to 1.20 Ether for all HONG Tokens with a 0.05 ETH increase for each tier
// The number of (base unit) tokens per wei is calculated
// as `msg.value` * 100 / `divisor`
return 100 + getCurrentTier() * 5;
}
}
contract HONGInterface is ErrorHandler, HongConfiguration {
// we do not have grace period. Once the goal is reached, the fund is secured
address public managementBodyAddress;
// 3 most important votings in blockchain
mapping (uint => mapping (address => uint)) public votedKickoff;
mapping (address => uint) public votedFreeze;
mapping (address => uint) public votedHarvest;
mapping (uint => uint256) public supportKickoffQuorum;
uint256 public supportFreezeQuorum;
uint256 public supportHarvestQuorum;
uint public totalInitialBalance;
uint public annualManagementFee;
function voteToKickoffNewFiscalYear();
function voteToFreezeFund();
function recallVoteToFreezeFund();
function voteToHarvestFund();
function collectMyReturn();
// Trigger the following events when the voting result is available
event evKickoff(address msg_sender, uint msg_value, uint _fiscal);
event evFreeze(address msg_sender, uint msg_value);
event evHarvest(address msg_sender, uint msg_value);
}
// The HONG contract itself
contract HONG is HONGInterface, Token, TokenCreation {
function HONG(
address _managementBodyAddress,
uint _closingTime,
uint _closingTimeExtensionPeriod,
uint _lastKickoffDateBuffer,
uint _minTokensToCreate,
uint _maxTokensToCreate,
uint _tokensPerTier,
bool _isInTestMode
) TokenCreation(_managementBodyAddress, _closingTime) {
managementBodyAddress = _managementBodyAddress;
closingTimeExtensionPeriod = _closingTimeExtensionPeriod;
lastKickoffDateBuffer = _lastKickoffDateBuffer;
minTokensToCreate = _minTokensToCreate;
maxTokensToCreate = _maxTokensToCreate;
tokensPerTier = _tokensPerTier;
isInTestMode = _isInTestMode;
returnWallet = new ReturnWallet(managementBodyAddress);
rewardWallet = new RewardWallet(address(returnWallet));
managementFeeWallet = new ManagementFeeWallet(managementBodyAddress, address(returnWallet));
extraBalanceWallet = new ExtraBalanceWallet(address(returnWallet));
if (address(extraBalanceWallet) == 0)
doThrow("extraBalanceWallet:0");
if (address(returnWallet) == 0)
doThrow("returnWallet:0");
if (address(rewardWallet) == 0)
doThrow("rewardWallet:0");
if (address(managementFeeWallet) == 0)
doThrow("managementFeeWallet:0");
}
function () returns (bool success) {
if (!isFromManagedAccount()) {
// We do not accept donation here. Any extra amount sent to us after fund locking process, will be refunded
return createTokenProxy(msg.sender);
}
else {
evRecord(msg.sender, msg.value, "Recevied ether from ManagedAccount");
return true;
}
}
function isFromManagedAccount() internal returns (bool) {
return msg.sender == address(extraBalanceWallet)
|| msg.sender == address(returnWallet)
|| msg.sender == address(rewardWallet)
|| msg.sender == address(managementFeeWallet);
}
/*
* Voting for some critical steps, on blockchain
*/
function voteToKickoffNewFiscalYear() onlyTokenHolders noEther onlyLocked {
// this is the only valid fiscal year parameter, so there's no point in letting the caller pass it in.
// Best case is they get it wrong and we throw, worst case is the get it wrong and there's some exploit
uint _fiscal = currentFiscalYear + 1;
if(!isKickoffEnabled[1]){ // if the first fiscal year is not kicked off yet
// accept voting
}else if(currentFiscalYear <= 3){ // if there was any kickoff() enabled before already
if(lastKickoffDate + lastKickoffDateBuffer < now){ // 2 months from the end of the fiscal year
// accept voting
}else{
// we do not accept early kickoff
doThrow("kickOff:tooEarly");
return;
}
}else{
// do not accept kickoff anymore after the 4th year
doThrow("kickOff:4thYear");
return;
}
supportKickoffQuorum[_fiscal] -= votedKickoff[_fiscal][msg.sender];
supportKickoffQuorum[_fiscal] += balances[msg.sender];
votedKickoff[_fiscal][msg.sender] = balances[msg.sender];
uint threshold = (kickoffQuorumPercent*(tokensCreated + bountyTokensCreated)) / 100;
if(supportKickoffQuorum[_fiscal] > threshold) {
if(_fiscal == 1){
// transfer fund in extraBalance to main account
extraBalanceWallet.returnBalanceToMainAccount();
// reserve mgmtFeePercentage of whole fund to ManagementFeePoolWallet
totalInitialBalance = this.balance;
uint fundToReserve = (totalInitialBalance * mgmtFeePercentage) / 100;
annualManagementFee = fundToReserve / 4;
if(!managementFeeWallet.send(fundToReserve)){
doThrow("kickoff:ManagementFeePoolWalletFail");
return;
}
}
isKickoffEnabled[_fiscal] = true;
currentFiscalYear = _fiscal;
lastKickoffDate = now;
// transfer annual management fee from reservedWallet to mgmtWallet (external)
managementFeeWallet.payManagementBodyAmount(annualManagementFee);
evKickoff(msg.sender, msg.value, _fiscal);
evIssueManagementFee(msg.sender, msg.value, annualManagementFee, true);
}
}
function voteToFreezeFund() onlyTokenHolders noEther onlyLocked notFinalFiscalYear onlyDistributionNotInProgress {
supportFreezeQuorum -= votedFreeze[msg.sender];
supportFreezeQuorum += balances[msg.sender];
votedFreeze[msg.sender] = balances[msg.sender];
uint threshold = ((tokensCreated + bountyTokensCreated) * freezeQuorumPercent) / 100;
if(supportFreezeQuorum > threshold){
isFreezeEnabled = true;
distributeDownstream(0);
evFreeze(msg.sender, msg.value);
}
}
function recallVoteToFreezeFund() onlyTokenHolders onlyNotFrozen noEther {
supportFreezeQuorum -= votedFreeze[msg.sender];
votedFreeze[msg.sender] = 0;
}
function voteToHarvestFund() onlyTokenHolders noEther onlyLocked onlyFinalFiscalYear {
supportHarvestQuorum -= votedHarvest[msg.sender];
supportHarvestQuorum += balances[msg.sender];
votedHarvest[msg.sender] = balances[msg.sender];
uint threshold = ((tokensCreated + bountyTokensCreated) * harvestQuorumPercent) / 100;
if(supportHarvestQuorum > threshold) {
isHarvestEnabled = true;
evHarvest(msg.sender, msg.value);
}
}
function collectMyReturn() onlyTokenHolders noEther onlyDistributionReady {
uint tokens = balances[msg.sender];
balances[msg.sender] = 0;
returnWallet.payTokenHolderBasedOnTokenCount(msg.sender, tokens);
}
function mgmtInvestProject(
address _projectWallet,
uint _amount
) onlyManagementBody hasEther returns (bool _success) {
if(!isKickoffEnabled[currentFiscalYear] || isFreezeEnabled || isHarvestEnabled){
evMgmtInvestProject(msg.sender, msg.value, _projectWallet, _amount, false);
return;
}
if(_amount >= this.balance){
doThrow("failed:mgmtInvestProject: amount >= actualBalance");
return;
}
// send the balance (_amount) to _projectWallet
if (!_projectWallet.call.value(_amount)()) {
doThrow("failed:mgmtInvestProject: cannot send to _projectWallet");
return;
}
evMgmtInvestProject(msg.sender, msg.value, _projectWallet, _amount, true);
}
function transfer(address _to, uint256 _value) returns (bool success) {
// Update kickoff voting record for the next fiscal year for an address, and the total quorum
if(currentFiscalYear < 4){
if(votedKickoff[currentFiscalYear+1][msg.sender] > _value){
votedKickoff[currentFiscalYear+1][msg.sender] -= _value;
supportKickoffQuorum[currentFiscalYear+1] -= _value;
}else{
supportKickoffQuorum[currentFiscalYear+1] -= votedKickoff[currentFiscalYear+1][msg.sender];
votedKickoff[currentFiscalYear+1][msg.sender] = 0;
}
}
// Update Freeze and Harvest voting records for an address, and the total quorum
if(votedFreeze[msg.sender] > _value){
votedFreeze[msg.sender] -= _value;
supportFreezeQuorum -= _value;
}else{
supportFreezeQuorum -= votedFreeze[msg.sender];
votedFreeze[msg.sender] = 0;
}
if(votedHarvest[msg.sender] > _value){
votedHarvest[msg.sender] -= _value;
supportHarvestQuorum -= _value;
}else{
supportHarvestQuorum -= votedHarvest[msg.sender];
votedHarvest[msg.sender] = 0;
}
if (isFundLocked && super.transfer(_to, _value)) {
return true;
} else {
if(!isFundLocked){
doThrow("failed:transfer: isFundLocked is false");
}else{
doThrow("failed:transfer: cannot send send to _projectWallet");
}
return;
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"constant":true,"inputs":[],"name":"isFundReleased","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":false,"inputs":[],"name":"mgmtDistribute","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"type":"function"},{"constant":true,"inputs":[],"name":"weiPerInitialHONG","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"votedHarvest","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"minTokensToCreate","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"supportHarvestQuorum","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"extraBalanceWallet","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":true,"inputs":[],"name":"totalInitialBalance","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"divisor","outputs":[{"name":"divisor","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[],"name":"voteToHarvestFund","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"type":"function"},{"constant":true,"inputs":[],"name":"pricePerTokenAtCurrentTier","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"mgmtFeePercentage","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"tokensCreated","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"isDistributionReady","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"closingTimeExtensionPeriod","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"},{"name":"","type":"address"}],"name":"votedKickoff","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"closingTime","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"lastKickoffDateBuffer","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"isDayThirtyChecked","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"isFreezeEnabled","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":false,"inputs":[],"name":"collectMyReturn","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"isMinTokensReached","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"isDistributionInProgress","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"lastKickoffDate","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"managementFeeWallet","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":true,"inputs":[],"name":"supportFreezeQuorum","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"tokensAvailableAtCurrentTier","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"getCurrentTier","outputs":[{"name":"","type":"uint8"}],"type":"function"},{"constant":true,"inputs":[],"name":"isFundLocked","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"votedFreeze","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"returnWallet","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":true,"inputs":[],"name":"kickoffQuorumPercent","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"isMaxTokensReached","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"freezeQuorumPercent","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"type":"function"},{"constant":true,"inputs":[],"name":"maxTokensToCreate","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[{"name":"_projectWallet","type":"address"},{"name":"_amount","type":"uint256"}],"name":"mgmtInvestProject","outputs":[{"name":"_success","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"isHarvestEnabled","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"tokensPerTier","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"taxPaid","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"maxBountyTokens","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[],"name":"voteToKickoffNewFiscalYear","outputs":[],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"supportKickoffQuorum","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"isInTestMode","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"managementBodyAddress","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":true,"inputs":[],"name":"harvestQuorumPercent","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"isKickoffEnabled","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"mgmtRewardPercentage","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[],"name":"recallVoteToFreezeFund","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"bountyTokensCreated","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"annualManagementFee","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[{"name":"_currentTier","type":"uint8"},{"name":"_tokensPerTier","type":"uint256"},{"name":"_tokensCreated","type":"uint256"}],"name":"tokensAvailableAtTierInternal","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"isDaySixtyChecked","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":false,"inputs":[],"name":"voteToFreezeFund","outputs":[],"type":"function"},{"constant":false,"inputs":[],"name":"refundMyIcoInvestment","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"rewardWallet","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":false,"inputs":[{"name":"_recipientAddress","type":"address"},{"name":"_amount","type":"uint256"}],"name":"mgmtIssueBountyToken","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"currentFiscalYear","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"inputs":[{"name":"_managementBodyAddress","type":"address"},{"name":"_closingTime","type":"uint256"},{"name":"_closingTimeExtensionPeriod","type":"uint256"},{"name":"_lastKickoffDateBuffer","type":"uint256"},{"name":"_minTokensToCreate","type":"uint256"},{"name":"_maxTokensToCreate","type":"uint256"},{"name":"_tokensPerTier","type":"uint256"},{"name":"_isInTestMode","type":"bool"}],"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"msg_sender","type":"address"},{"indexed":false,"name":"msg_value","type":"uint256"},{"indexed":false,"name":"_amount","type":"uint256"},{"indexed":false,"name":"_success","type":"bool"}],"name":"evIssueManagementFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"msg_sender","type":"address"},{"indexed":false,"name":"msg_value","type":"uint256"},{"indexed":false,"name":"_recipientAddress","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"},{"indexed":false,"name":"_success","type":"bool"}],"name":"evMgmtIssueBountyToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"msg_sender","type":"address"},{"indexed":false,"name":"msg_value","type":"uint256"},{"indexed":false,"name":"_amount","type":"uint256"},{"indexed":false,"name":"_success","type":"bool"}],"name":"evMgmtDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"msg_sender","type":"address"},{"indexed":false,"name":"msg_value","type":"uint256"},{"indexed":false,"name":"_projectWallet","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"},{"indexed":false,"name":"result","type":"bool"}],"name":"evMgmtInvestProject","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"msg_sender","type":"address"},{"indexed":false,"name":"msg_value","type":"uint256"}],"name":"evLockFund","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"msg_sender","type":"address"},{"indexed":false,"name":"msg_value","type":"uint256"}],"name":"evReleaseFund","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"msg_sender","type":"address"},{"indexed":false,"name":"msg_value","type":"uint256"},{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"evTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"msg_sender","type":"address"},{"indexed":false,"name":"msg_value","type":"uint256"},{"indexed":false,"name":"value","type":"uint256"}],"name":"evMinTokensReached","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"msg_sender","type":"address"},{"indexed":false,"name":"msg_value","type":"uint256"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"evCreatedToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"msg_sender","type":"address"},{"indexed":false,"name":"msg_value","type":"uint256"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"result","type":"bool"}],"name":"evRefund","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"msg_sender","type":"address"},{"indexed":false,"name":"msg_value","type":"uint256"},{"indexed":false,"name":"_fiscal","type":"uint256"}],"name":"evKickoff","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"msg_sender","type":"address"},{"indexed":false,"name":"msg_value","type":"uint256"}],"name":"evFreeze","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"msg_sender","type":"address"},{"indexed":false,"name":"msg_value","type":"uint256"}],"name":"evHarvest","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"msg_sender","type":"address"},{"indexed":false,"name":"msg_value","type":"uint256"},{"indexed":false,"name":"message","type":"string"}],"name":"evRecord","type":"event"}]Contract Creation Code
6000805460ff19168155662386f26fc10000600290815560a060405260046060527f484f4e470000000000000000000000000000000000000000000000000000000060805260038054928190527f484f4e47000000000000000000000000000000000000000000000000000000088155916100ca917fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b60206101006001851615026000190190931691909104601f01919091048101905b8082111561015a57600081556001016100b6565b50506040805180820190915260028082527fc4a60000000000000000000000000000000000000000000000000000000000006020928301908152600480546000829052915160ff1916811781559261015e927f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b6001841615610100026000190190931604601f01048101906100b6565b5090565b50506005805460ff19169055621e848060065562278d006007556305f5e1006008908155630ee6b2806009556302faf080600a55630190c800600b556014600c819055600d91909155600e8190556032600f5560105560405161010080614023833981016040528080519060200190919080519060200190919080519060200190919080519060200190919080519060200190919080519060200190919080519060200190919080519060200190919050508787601a8054600160a060020a0319168317905560018190555050601a8054600160a060020a0319168917908190556007879055600b86905560088590556009849055600a8390556000805460ff191683179055604051600160a060020a0391909116906105938061060a8339018082600160a060020a03168152602001915050604051809103906000f0602660046101000a815481600160a060020a0302191690830217905550602660049054906101000a9004600160a060020a031660405161038680610b9d8339018082600160a060020a03168152602001915050604051809103906000f0602760006101000a815481600160a060020a0302191690830217905550601a60009054906101000a9004600160a060020a0316602660049054906101000a9004600160a060020a031660405161041a80610f238339018083600160a060020a0316815260200182600160a060020a0316815260200192505050604051809103906000f0602860006101000a815481600160a060020a0302191690830217905550602660049054906101000a9004600160a060020a03166040516104138061133d8339018082600160a060020a03168152602001915050604051809103906000f0601b8054600160a060020a0319169190911790819055600160a060020a0316600014156104f6576104f6604060405190810160405280601481526020017f657874726142616c616e636557616c6c65743a300000000000000000000000008152602001505b7fe9c64ad7aacefe9ed905822d2a5a6ca63ffdc82b257709dc05a534d60d92f9103334836040518084600160a060020a03168152602001838152602001806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156104d65780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a160005460ff16151561060757610002565b6026546401000000009004600160a060020a03166000141561054f5760408051808201909152600e81527f72657475726e57616c6c65743a30000000000000000000000000000000000000602082015261054f9061043d565b602754600160a060020a0316600014156105a05760408051808201909152600e81527f72657761726457616c6c65743a3000000000000000000000000000000000000060208201526105a09061043d565b602854600160a060020a0316600014156105f15760408051808201909152601581527f6d616e6167656d656e7446656557616c6c65743a30000000000000000000000060208201526105f19061043d565b50505050505050506128d3806117506000396000f35b5056606060408190526000805460ff60a860020a60ff0201191675010000000000000000000000000000000000000000001790556020806105938339506080604052513380600060016101000a815481600160a060020a03021916908302179055505080600160006101000a815481600160a060020a0302191690830217905550506105068061008d6000396000f3606060405236156100825760e060020a60003504632033d9ae81146100b1578063283a6e88146101b4578063345591ec146101c65780637e1c0c09146101d95780638da5cb5b146101e25780639f3ef430146101f9578063b656e9f41461024a578063b8b2776514610256578063dab8263a146102b4578063ed4460ef146102bd575b6102c66000805460ff75010000000000000000000000000000000000000000009091041615156102da57610002565b6102e06004356000546101009004600160a060020a03908116339091161461031157604080518082019091526009815260b960020a6837b7363ca7bbb732b9026020820152610373905b7fe9c64ad7aacefe9ed905822d2a5a6ca63ffdc82b257709dc05a534d60d92f9103334836040518084600160a060020a03168152602001838152602001806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156101945780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a160005460ff16151561037057610002565b6102e2600154600160a060020a031681565b6102c660015460a060020a900460ff1681565b6102ff60035481565b6102e26000546101009004600160a060020a031681565b6102e06004356024356000546101009004600160a060020a03908116339091161461037857604080518082019091526009815260b960020a6837b7363ca7bbb732b90260208201526103cd906100fb565b6102c660005460ff1681565b6102e060043560015461037090600160a060020a03168260005433600160a060020a0390811661010090920416146104ba57604080518082019091526009815260b960020a6837b7363ca7bbb732b90260208201526103cd906100fb565b6102ff60045481565b6102ff60025481565b604080519115158252519081900360200190f35b50600190565b005b60408051600160a060020a03929092168252519081900360200190f35b60408051918252519081900360200190f35b6001805474ff0000000000000000000000000000000000000000191660a060020a1790556000805475ff00000000000000000000000000000000000000000019169055600381905530600160a060020a03163160028190558190046004555b50565b610370565b6103cd8282600460005054025b6000546101009004600160a060020a0390811633909116146103d157604080518082019091526009815260b960020a6837b7363ca7bbb732b90260208201526103cd906100fb565b5050565b600034111561040457604080518082019091526007815260c960020a663737a2ba3432b90260208201526103cd906100fb565b604051600160a060020a038316908290600081818185876185025a03f19250505015156104685760408051808201909152601181527f7061794f75743a73656e644661696c656400000000000000000000000000000060208201526103cd906100fb565b6040805133600160a060020a0390811682523460208301528183018490529151918416917f660c325e06928b5007bda0b9f8b5ce13ff32f2ccabf94c004b1b1994cb7186059181900360600190a25050565b60003411156104ed57604080518082019091526007815260c960020a663737a2ba3432b90260208201526103cd906100fb565b6103cd8260648330600160a060020a031631020461038556606060408190526000805460ff60a860020a60ff0201191675010000000000000000000000000000000000000000001790556020806103868339506080604052513380600060016101000a815481600160a060020a03021916908302179055505080600160006101000a815481600160a060020a0302191690830217905550506102f98061008d6000396000f3606060405236156100405760e060020a60003504635b2cdda3811461006f5780638da5cb5b14610081578063b656e9f414610098578063fc44fd28146100a4575b6101de6000805460ff75010000000000000000000000000000000000000000009091041615156101ea57610002565b6101f0600154600160a060020a031681565b6101f06000546101009004600160a060020a031681565b6101de60005460ff1681565b6000805475ff0000000000000000000000000000000000000000001916908190556001546102039161020591600160a060020a0390811691308216319133811661010090920416146102075760a0604052600960609081527f6f6e6c794f776e65720000000000000000000000000000000000000000000000608052610249905b7fe9c64ad7aacefe9ed905822d2a5a6ca63ffdc82b257709dc05a534d60d92f9103334836040518084600160a060020a03168152602001838152602001806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156101be5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a160005460ff1615156102f657610002565b15156060908152602090f35b50600190565b600160a060020a03166060908152602090f35b005b565b600034111561024e5760a0604052600760609081527f6e6f45746865720000000000000000000000000000000000000000000000000060805261024990610125565b6102f2565b81816060600081818185876185025a03f19250505015156102a65760408051808201909152601181527f7061794f75743a73656e644661696c6564000000000000000000000000000000602082015261024990610125565b6040805133600160a060020a03168152346020820152808201839052905183917f660c325e06928b5007bda0b9f8b5ce13ff32f2ccabf94c004b1b1994cb718605919081900360600190a25b5050565b5056606060408181526000805460ff60a860020a60ff0201191675010000000000000000000000000000000000000000001790558061041a833960a09052516080513380600060016101000a815481600160a060020a03021916908302179055505081600160006101000a815481600160a060020a030219169083021790555080600260006101000a815481600160a060020a0302191690830217905550505061036f806100ab6000396000f3606060405236156100565760e060020a60003504635b2cdda381146100855780638da5cb5b14610097578063a8bcbf3c146100ae578063b656e9f4146101d4578063bb582db6146101e0578063fc44fd28146101f2575b61022f6000805460ff750100000000000000000000000000000000000000000090910416151561024357610002565b610249600254600160a060020a031681565b6102496000546101009004600160a060020a031681565b61026660043560015461026890600160a060020a0316825b6000546101009004600160a060020a0390811633909116146102c05760408051808201909152600981527f6f6e6c794f776e657200000000000000000000000000000000000000000000006020820152610306905b7fe9c64ad7aacefe9ed905822d2a5a6ca63ffdc82b257709dc05a534d60d92f9103334836040518084600160a060020a03168152602001838152602001806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156101b45780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a160005460ff16151561026857610002565b61022f60005460ff1681565b610249600154600160a060020a031681565b6102666000805475ff0000000000000000000000000000000000000000001916905560025461026b90600160a060020a03908116903016316100c6565b604080519115158252519081900360200190f35b50600190565b60408051600160a060020a03929092168252519081900360200190f35b005b50565b565b6040805133600160a060020a0390811682523460208301528183018490529151918416917f660c325e06928b5007bda0b9f8b5ce13ff32f2ccabf94c004b1b1994cb7186059181900360600190a25b5050565b600034111561030b5760408051808201909152600781527f6e6f45746865720000000000000000000000000000000000000000000000000060208201526103069061011b565b6102bc565b604051600160a060020a038316908290600081818185876185025a03f192505050151561026d5760408051808201909152601181527f7061794f75743a73656e644661696c656400000000000000000000000000000060208201526103069061011b56606060408190526000805460ff60a860020a60ff0201191675010000000000000000000000000000000000000000001790556020806104138339506080604052513380600060016101000a815481600160a060020a03021916908302179055505080600160006101000a815481600160a060020a0302191690830217905550506103868061008d6000396000f36060604052361561004b5760e060020a600035046351fa7efd811461007a5780638da5cb5b146101a5578063b1a8b25a146101bc578063b656e9f4146101fd578063fc44fd2814610209575b6102466000805460ff750100000000000000000000000000000000000000000090910416151561025a57610002565b61026060043560005461027f906101009004600160a060020a0316825b6000546101009004600160a060020a0390811633909116146102d75760408051808201909152600981527f6f6e6c794f776e65720000000000000000000000000000000000000000000000602082015261031d905b7fe9c64ad7aacefe9ed905822d2a5a6ca63ffdc82b257709dc05a534d60d92f9103334836040518084600160a060020a03168152602001838152602001806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156101855780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a160005460ff16151561027f57610002565b6102626000546101009004600160a060020a031681565b6102606000805475ff000000000000000000000000000000000000000000191690819055610282906101009004600160a060020a0390811690301631610097565b61024660005460ff1681565b6102606000805475ff0000000000000000000000000000000000000000001916905560015461028290600160a060020a0390811690301631610097565b604080519115158252519081900360200190f35b50600190565b005b60408051600160a060020a03929092168252519081900360200190f35b50565b565b6040805133600160a060020a0390811682523460208301528183018490529151918416917f660c325e06928b5007bda0b9f8b5ce13ff32f2ccabf94c004b1b1994cb7186059181900360600190a25b5050565b60003411156103225760408051808201909152600781527f6e6f457468657200000000000000000000000000000000000000000000000000602082015261031d906100ec565b6102d3565b604051600160a060020a038316908290600081818185876185025a03f19250505015156102845760408051808201909152601181527f7061794f75743a73656e644661696c6564000000000000000000000000000000602082015261031d906100ec56606060405236156102be5760e060020a600035046302410cf68114610337578063044a5f971461034857806306fdde031461039f578063089aa819146103fd5780630c103837146104065780630c3b7b961461041e5780630d40e8d61461042757806314841164146104305780631d107603146104425780631f2dc5ef1461044b57806321d3523c14610459578063313ce56714610467578063342d91851461047357806335d37dbb14610482578063427500201461048b57806344440a59146104945780634845d3f8146104a7578063490fc399146104b05780634b6753bc146104d557806353bc147e146104de5780635474fbd3146104e7578063558305f9146104f957806356a3f4ef146105055780635b6aa3c21461051357806360d3e4c51461052457806367cf91c9146105365780636b9c1d221461053f57806370606cda1461055157806370a082311461055a57806373f5f8ee1461057c5780637412c2231461058d5780637895f853146105ad5780637c2b8d0a146105b95780637e4a1731146105d157806381dd70db146105eb5780638c32e774146105f45780639496df3f1461060657806395d89b411461060f5780639bd90aae1461066d5780639cb74ab6146106765780639e47214a146106d6578063a8d5652e146106e7578063a9059cbb146106f0578063a988e3711461075e578063ab71b8ac14610776578063adbda5a81461077f578063aea3ad8c14610791578063b656e9f4146107a9578063ba0bface146107b5578063bf53e3ba146107c7578063c86a9dea146107d0578063cdd8d4e8146107eb578063cfebb88b146107f4578063da228f9c14610800578063dc7049bf14610809578063df23481514610812578063e0e325041461084c578063e2649caf1461085f578063e84f70541461086d578063fb75b2c7146108ad578063fea5d7b1146108bf578063ffa309e4146108fd575b610906600061091a601b5460009033600160a060020a03908116911614806102fd57506026546401000000009004600160a060020a0390811633909116145b806103175750602754600160a060020a0390811633909116145b80610a1e5750602854600160a060020a0390811633909116149050610a1b565b610906602154610100900460ff1681565b610a25601a54600160a060020a039081163390911614610fc05760408051808201909152601281527f6f6e6c794d616e6167656d656e74426f647900000000000000000000000000006020820152610d7290610ba0565b6040805160038054602060026001831615610100026000190190921691909104601f8101829004820284018201909452838352610a2793908301828280156111115780601f106110e657610100808354040283529160200191611111565b610a9560025481565b610a9560043560146020526000908152604090205481565b610a9560085481565b610a9560175481565b610aa7601b54600160a060020a031681565b610a9560185481565b610a955b6000611119610591565b610a25600061112933610561565b610ac460055460ff1681565b610a95600060646112cf61044f565b610a95600d5481565b610a9560205481565b6109066026546301000000900460ff1681565b610a9560075481565b601260209081526004356000908152604080822090925260243581522054610a959081565b610a9560015481565b610a95600b5481565b61090660215462010000900460ff1681565b61090660265460ff1681565b610a2560006112db33610561565b6109065b6008546020541015610a1b565b61090660265462010000900460ff1681565b610a9560245481565b610aa7602854600160a060020a031681565b610a9560165481565b610a956004355b600160a060020a03166000908152601e602052604090205490565b610a955b6000610a1e611420610591565b610ac45b600a546020546000919004600460ff82161161142c578061142f565b61090660215460ff1681565b610a9560043560136020526000908152604090205481565b610aa76026546401000000009004600160a060020a031681565b610a9560105481565b6109065b602054600954901015610a1b565b610a95600f5481565b6040805160048054602060026001831615610100026000190190921691909104601f8101829004820284018201909452838352610a2793908301828280156111115780601f106110e657610100808354040283529160200191611111565b610a9560095481565b610906600435602435601a54600090600160a060020a0390811633909116146114355760408051808201909152601281527f6f6e6c794d616e6167656d656e74426f64790000000000000000000000000000602082015261146890610ba0565b610906602654610100900460ff1681565b610a95600a5481565b6109066004356024356000600460236000505410156116c057602354600101815260126020908152604080832033600160a060020a031684529091528120548290111561166957604080822080548490039055602354600101825260156020528120805483900390556116c0565b610a95600435601d6020526000908152604090205481565b610a9560065481565b610a2560006000600061184a33610561565b610a9560043560156020526000908152604090205481565b61090660005460ff1681565b610aa7601a54600160a060020a031681565b610a95600e5481565b61090660043560256020526000908152604090205460ff1681565b610a95600c5481565b610a25611c6f33610561565b610a9560225481565b610a9560195481565b610a956004356024356044355b6009546000906001850160ff1684029081111561083b57506009545b80831115611d445760009150611d4a565b6109066021546301000000900460ff1681565b610a256000611d5233610561565b610a25600060006000600060006000341115611f4457604080518082019091526007815260c960020a663737a2ba3432b9026020820152611f7b90610ba0565b610aa7602754600160a060020a031681565b610906600435602435600060003411156122b257604080518082019091526007815260c960020a663737a2ba3432b902602082015261146890610ba0565b610a9560235481565b604080519115158252519081900360200190f35b151561097b57610a1e3360006000600060006000600060006000600060006000602160009054906101000a900460ff1615610adb57604080518082019091526009815260ba60020a681b9bdd131bd8dad959026020820152610b2d90610ba0565b6040805133600160a060020a0316815234602082015260608183018190526022908201527f52656365766965642065746865722066726f6d204d616e616765644163636f7560808201527f6e7400000000000000000000000000000000000000000000000000000000000060a082015290517fe9c64ad7aacefe9ed905822d2a5a6ca63ffdc82b257709dc05a534d60d92f9109181900360c00190a15060015b90565b9050610a1b565b005b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f168015610a875780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b60408051918252519081900360200190f35b60408051600160a060020a03929092168252519081900360200190f35b6040805160ff929092168252519081900360200190f35b602154610100900460ff1615610c595760408051808201909152600b81527f6e6f7452656c65617365640000000000000000000000000000000000000000006020820152610b2d90610ba0565b60009a505b50505050505050505050919050565b611468606060405190810160405280603381526020017f6661696c65643a7472616e736665723a2063616e6e6f742073656e642073656e81526020017f6420746f205f70726f6a65637457616c6c6574000000000000000000000000008152602001505b7fe9c64ad7aacefe9ed905822d2a5a6ca63ffdc82b257709dc05a534d60d92f9103334836040518084600160a060020a03168152602001838152602001806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f168015610c395780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a160005460ff1615156112cc57610002565b60003411610c8c57604080518082019091526008815260c160020a673430b9a2ba3432b9026020820152610b2d90610ba0565b6000995060009850610c9c610517565b97506064610ca861044f565b60025402049650349550610cba610580565b94508460001415610d055760408051808201909152600e81527f6e6f546f6b656e73546f53656c6c0000000000000000000000000000000000006020820152610b2890610ba0565b94505b868610610d25578686049350610d74858560008183106123d857816123da565b50600160a060020a038b166000908152601c60209081526040808320805489019055600254601d9092529091208054918b028a039182019055610df4602154610100900460ff16156123e1575b565b9250846000148015610d895750602054600954145b15610d92578392505b600160a060020a038c166000908152601e60209081526040808320805487019055815486018255601c90915290208054888502908101909155998301999889019891506064610ddf61044f565b60025402049650348990039550610d02610580565b6000811115610e6257604051601b54600160a060020a031690600090839082818181858883f193505050501515610e625760408051808201909152601581527f657874726142616c616e63653a73656e644661696c00000000000000000000006020820152610b2d90610ba0565b60408051600160a060020a0333811682523460208301528183018d90529151918e16917fe2cbb9b7dba3b339b259c4f199464ccf9c277a3ff556b2c0db2b0abacdbeedde9181900360600190a287158015610ec05750610ec0610517565b15610f1457602080546040805133600160a060020a03168152349381019390935282810191909152517f6bb4d57357a9a55fe03d55925e248fcb44bf65dfe36af0c16c22910ae3bb8fb29181900360600190a15b60215460ff1615610f63576040805133600160a060020a0316815234602082015281517fbb9b02a8573d9d68d38e541b0e14a32a2dfe031aade3a25dd3de928fbc3b309d929181900390910190a15b602154610100900460ff1615610fb7576040805133600160a060020a0316815234602082015281517f32f04209c78f4db9d444b9dc3182c73fc63bb6fdd517c19f36798ad870fb1cfe929181900390910190a15b60019a50610b2d565b60003411610ff357604080518082019091526008815260c160020a673430b9a2ba3432b9026020820152610d7290610ba0565b602654610100900460ff1615156110415760408051808201909152601281527f6f6e6c7948617276657374456e61626c656400000000000000000000000000006020820152610d7290610ba0565b6026546301000000900460ff16156110905760408051808201909152601881527f6f6e6c79446973747269627574696f6e4e6f74526561647900000000000000006020820152610d7290610ba0565b600c54610d72905b60265462010000900460ff16156124ec5760408051808201909152601d81527f6f6e6c79446973747269627574696f6e4e6f74496e50726f6772657373000000602082015261118f90610ba0565b820191906000526020600020905b8154815290600101906020018083116110f457829003601f168201915b505050505081565b60050260640160ff169050610a1b565b6000141561115c5760408051808201909152601081526000805160206128b3833981519152602082015261118f90610ba0565b600034111561119457604080518082019091526007815260c960020a663737a2ba3432b902602082015261118f90610ba0565b6112cc565b60215460ff1615156111cd5760408051808201909152600a815260b260020a691bdb9b1e531bd8dad95902602082015261118f90610ba0565b60235460049010156112165760408051808201909152601381527f63757272656e7446697363616c596561723c3400000000000000000000000000602082015261118f90610ba0565b5033600160a060020a0316600090815260146020818152604080842080546017805491909103808255601e85529290952080549290920185559054928252919091556022549054600e549254606491909201929092029190910490819011156112cc576026805461ff0019166101001790556040805133600160a060020a0316815234602082015281517fe6a8fe04d793748334015ee5de6eb69ddb7c3b29df2251bc5b376305ae5cd800929181900390910190a15b50565b60025402049050610a1b565b6000141561130e5760408051808201909152601081526000805160206128b3833981519152602082015261118f90610ba0565b600034111561134157604080518082019091526007815260c960020a663737a2ba3432b902602082015261118f90610ba0565b6026546301000000900460ff1615156113915760408051808201909152601581527f6f6e6c79446973747269627574696f6e52656164790000000000000000000000602082015261118f90610ba0565b50600160a060020a033381166000818152601e602052604080822080549083905560265482517f9f3ef4300000000000000000000000000000000000000000000000000000000081526004810195909552602485018290529151909464010000000090920490911692639f3ef430926044808301939192829003018183876161da5a03f1156100025750505050565b602054600a549061081f565b60045b91505090565b6000341161146d57604080518082019091526008815260c160020a673430b9a2ba3432b902602082015261146890610ba0565b61155b565b60235460009081526025602052604090205460ff161580611490575060265460ff165b806114a25750602654610100900460ff165b156115615760408051600160a060020a033381168252346020830152851681830152606081018490526000608082015290517fd5de30e0bdd3cd6bfbc9d6142e5ded72ce738d3d230051400271eaa0c63b3be39181900360a00190a161155b565b60408051600160a060020a033381168252346020830152851681830152606081018490526001608082015290517fd5de30e0bdd3cd6bfbc9d6142e5ded72ce738d3d230051400271eaa0c63b3be39181900360a00190a15b92915050565b30600160a060020a03163182106115da57611468606060405190810160405280603181526020017f6661696c65643a6d676d74496e7665737450726f6a6563743a20616d6f756e7481526020017f203e3d2061637475616c42616c616e6365000000000000000000000000000000815260200150610ba0565b604051600160a060020a038416908390600081818185876185025a03f192505050151561150357611468606060405190810160405280603781526020017f6661696c65643a6d676d74496e7665737450726f6a6563743a2063616e6e6f7481526020017f2073656e6420746f205f70726f6a65637457616c6c6574000000000000000000815260200150610ba0565b602380546001908101600081815260126020818152604080842033600160a060020a031680865290835281852054958552601583528185208054969096039095559554909401825283528381209181529152908120555b33600160a060020a0316600090815260136020526040902054829011156116fb57604060002080548390039055601680548390039055611721565b33600160a060020a03166000908152601360205260408120805460168054919091039055555b33600160a060020a03166000908152601460205260409020548290111561175c57604060002080548390039055601780548390039055611782565b33600160a060020a03166000908152601460205260408120805460178054919091039055555b60215460ff1680156117c957506117c98383600060003411156127d357604080518082019091526007815260c960020a663737a2ba3432b902602082015261146890610ba0565b156117d65750600161155b565b60215460ff161515610b3c57611468606060405190810160405280602681526020017f6661696c65643a7472616e736665723a20697346756e644c6f636b656420697381526020017f2066616c73650000000000000000000000000000000000000000000000000000815260200150610ba0565b6000141561187d5760408051808201909152601081526000805160206128b383398151915260208201526118b090610ba0565b60003411156118b557604080518082019091526007815260c960020a663737a2ba3432b90260208201526118b090610ba0565b611c6a565b60215460ff1615156118ee5760408051808201909152600a815260b260020a691bdb9b1e531bd8dad9590260208201526118b090610ba0565b6023546001600081905260256020527f20a3e2dd35f58e582c5288344c035e137cace924bb9daf3762b8ef5a58327e26549101935060ff1615156119315761194c565b60235460039011611ace57600b546024544291011015611b0b575b6000838152601260209081526040808320600160a060020a03331680855290835281842080548886526015808652848720805492909203808355938752601e86529386208054909301815591549055602254835460105495899052929093525460649190920190920291909104925082901115611c6a578260011415611b4857601b60009054906101000a9004600160a060020a0316600160a060020a031663b1a8b25a6040518160e060020a0281526004018090506000604051808303816000876161da5a03f115610002575050505030600160a060020a03908116316018819055600d5460046064929091029190910490810460195560285460405191921690600090839082818181858883f193505050501515611b48576118b0606060405190810160405280602381526020017f6b69636b6f66663a4d616e6167656d656e74466565506f6f6c57616c6c65744681526020017f61696c0000000000000000000000000000000000000000000000000000000000815260200150610ba0565b60408051808201909152600f81527f6b69636b4f66663a34746859656172000000000000000000000000000000000060208201526118b090610ba0565b60408051808201909152601081527f6b69636b4f66663a746f6f4561726c790000000000000000000000000000000060208201526118b090610ba0565b600083815260256020526040808220805460ff19166001179055602385905542602490815581516028546019547fa8bcbf3c00000000000000000000000000000000000000000000000000000000835260048301529251600160a060020a03939093169363a8bcbf3c93838301939192909190829003018183876161da5a03f1156100025750506040805133600160a060020a0316815234602082015280820186905290517f43b50d8e46a4af80642a7d3903d182b8f5ab87b17e5bef9fd8ba4c3ba6ef9f0f92509081900360600190a16040805160195433600160a060020a03168252346020830152818301526001606082015290517f47fa1cbddad7488af88763b839f5f5436be7541a8bbfd7fa14d9c6c7581e8c1d9181900360800190a15b505050565b60001415611ca25760408051808201909152601081526000805160206128b38339815191526020820152610d7290610ba0565b60265460ff1615611cea5760408051808201909152600d81527f6f6e6c794e6f7446726f7a656e000000000000000000000000000000000000006020820152610d7290610ba0565b6000341115611d1d57604080518082019091526007815260c960020a663737a2ba3432b9026020820152610d7290610ba0565b33600160a060020a0316600090815260136020526040812080546016805491909103905555565b82810391505b509392505050565b60001415611d855760408051808201909152601081526000805160206128b3833981519152602082015261118f90610ba0565b6000341115611db857604080518082019091526007815260c960020a663737a2ba3432b902602082015261118f90610ba0565b60215460ff161515611df15760408051808201909152600a815260b260020a691bdb9b1e531bd8dad95902602082015261118f90610ba0565b60235460049010611e395760408051808201909152601481527f63757272656e7446697363616c596561723e3d34000000000000000000000000602082015261118f90610ba0565b60265462010000900460ff1615611e875760408051808201909152601d81527f6f6e6c79446973747269627574696f6e4e6f74496e50726f6772657373000000602082015261118f90610ba0565b5033600160a060020a0316600090815260136020818152604080842080546016805491909103808255601e8552929095208054929092018555905492825291909155600f5460225491549254606493909201029190910490819011156112cc576026805460ff19166001179055611efe6000611098565b6040805133600160a060020a0316815234602082015281517fa3a0ee24545ff02dd0d20d670461167188c7adc4c2973fd0d1b294e1e576fc79929181900390910190a150565b60215460ff1615611f8057604080518082019091526009815260ba60020a681b9bdd131bd8dad959026020820152611f7b90610ba0565b6122ab565b611f8933610561565b60001415611fbc5760408051808201909152601081526000805160206128b38339815191526020820152611f7b90610ba0565b33600160a060020a03166000908152601c602052604081205414156120185760408051808201909152600a81527f6e6f576569476976656e000000000000000000000000000000000000000000006020820152611f7b90610ba0565b6020805433600160a060020a03166000908152601e90925260409091205411156120795760408051808201909152601181527f696e76616c6964546f6b656e436f756e740000000000000000000000000000006020820152611f7b90610ba0565b612081610517565b600160a060020a033381166000908152601c602090815260408083208054601d8085528386208054601e87528588208054908990559488905591865286905584548390039094558251601b547f51fa7efd000000000000000000000000000000000000000000000000000000008252600482018690529351979c50909a509298509650889550909216926351fa7efd926024818101939291829003018183876161da5a03f11561000257505060405133600160a060020a03169150600090839082818181858883f1935050505015156121f65733600160a060020a03167fba1c02018a9ab9c5ecec972230d1c4444bd911f121639f33da13896099655b3533348460006040518085600160a060020a03168152602001848152602001838152602001821515815260200194505050505060405180910390a260408051808201909152601181527f726566756e643a53656e644661696c65640000000000000000000000000000006020820152611f7b90610ba0565b6040805133600160a060020a03168082523460208301528183018490526001606083015291517fba1c02018a9ab9c5ecec972230d1c4444bd911f121639f33da13896099655b359181900360800190a2841580156122575750612257610517565b156122ab57602080546040805133600160a060020a03168152349381019390935282810191909152517f6bb4d57357a9a55fe03d55925e248fcb44bf65dfe36af0c16c22910ae3bb8fb29181900360600190a15b5050505050565b601a54600160a060020a0390811633909116146123065760408051808201909152601281527f6f6e6c794d616e6167656d656e74426f64790000000000000000000000000000602082015261146890610ba0565b6022546006548391820111156123535760408051808201909152600c81527f6869744d6178426f756e7479000000000000000000000000000000000000000060208201526123d390610ba0565b600160a060020a038481166000818152601e6020908152604091829020805488019055602280548801905581513390941684523490840152828101919091526060820185905260016080830152517fd169a02076bf076f24fa9c265d5ed41dc57e6553208e7a8e7190cd90c365f1849181900360a00190a15b5092915050565b6123cc565b825b905061155b565b6123e96105f8565b6021805460ff19169091179081905560ff161580156124155750602160029054906101000a900460ff16155b801561242357506001544210155b1561245557612430610517565b15612443576021805460ff191660011790555b6021805462ff00001916620100001790555b60215460ff1615801561247257506021546301000000900460ff16155b80156124845750600754600154014210155b156124b857612491610517565b156124a4576021805460ff191660011790555b6021805463ff000000191663010000001790555b6021546301000000900460ff1680156124d657506124d4610517565b155b15610d72576021805461ff001916610100179055565b6026805463ff0000001962ff00001990911662010000171663010000001790556125ac602654604051640100000000909104600160a060020a03908116916000913016319082818181858883f193505050501515610d7257610d72606060405190810160405280602381526020017f70617942616c616e6365546f52657475726e57616c6c65743a73656e6446616981526020017f6c65640000000000000000000000000000000000000000000000000000000000815260200150610ba0565b602860009054906101000a9004600160a060020a0316600160a060020a031663fc44fd286040518160e060020a0281526004018090506000604051808303816000876161da5a03f11561000257506040805160275460e360020a631f889fa50282529151600160a060020a03929092169350600481810192600092909190829003018183876161da5a03f1156100025750601b546040805160e360020a631f889fa50281529051600160a060020a03929092169350600481810192600092909190829003018183876161da5a03f1156100025750505060008111156126e457602660049054906101000a9004600160a060020a0316600160a060020a031663b8b27765826040518260e060020a028152600401808281526020019150506000604051808303816000876161da5a03f115610002575050505b602654602254602054604080517f2033d9ae0000000000000000000000000000000000000000000000000000000081529190920160048201529051640100000000909204600160a060020a031691632033d9ae91602480820192600092909190829003018183876161da5a03f11561000257505060265460408051600160a060020a033381168252346020830152640100000000909304909216318282015260016060830152517f6816fcd617af2edc3ccc34b8a63bab368d79f315e065779259bb6a13541eaea292509081900360800190a16000602660026101000a81548160ff0219169083021790555050565b600082116127e35750600061155b565b33600160a060020a03166000908152601e60205260409020548290101561280c5750600061155b565b600160a060020a0383166000908152601e602052604090205480830110156128365750600061155b565b600160a060020a033381166000818152601e60209081526040808320805488900390559387168083529184902080548701905583518381523491810191909152808401869052925190927fe921528ef8652e1a832f8063bcbca0186d6c5a28413c90acecaf074846c412db919081900360600190a350600161155b566f6e6c79546f6b656e486f6c6465727300000000000000000000000000000000000000000000000000000000b79ab5993cef2e0b714a66f3eda73b55de812d310000000000000000000000000000000000000000000000000000000057ebbed00000000000000000000000000000000000000000000000000000000000278d00000000000000000000000000000000000000000000000000000000000190c8000000000000000000000000000000000000000000000000000000000008f0d180000000000000000000000000000000000000000000000000000000000ee6b2800000000000000000000000000000000000000000000000000000000002faf0800000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x606060405236156102be5760e060020a600035046302410cf68114610337578063044a5f971461034857806306fdde031461039f578063089aa819146103fd5780630c103837146104065780630c3b7b961461041e5780630d40e8d61461042757806314841164146104305780631d107603146104425780631f2dc5ef1461044b57806321d3523c14610459578063313ce56714610467578063342d91851461047357806335d37dbb14610482578063427500201461048b57806344440a59146104945780634845d3f8146104a7578063490fc399146104b05780634b6753bc146104d557806353bc147e146104de5780635474fbd3146104e7578063558305f9146104f957806356a3f4ef146105055780635b6aa3c21461051357806360d3e4c51461052457806367cf91c9146105365780636b9c1d221461053f57806370606cda1461055157806370a082311461055a57806373f5f8ee1461057c5780637412c2231461058d5780637895f853146105ad5780637c2b8d0a146105b95780637e4a1731146105d157806381dd70db146105eb5780638c32e774146105f45780639496df3f1461060657806395d89b411461060f5780639bd90aae1461066d5780639cb74ab6146106765780639e47214a146106d6578063a8d5652e146106e7578063a9059cbb146106f0578063a988e3711461075e578063ab71b8ac14610776578063adbda5a81461077f578063aea3ad8c14610791578063b656e9f4146107a9578063ba0bface146107b5578063bf53e3ba146107c7578063c86a9dea146107d0578063cdd8d4e8146107eb578063cfebb88b146107f4578063da228f9c14610800578063dc7049bf14610809578063df23481514610812578063e0e325041461084c578063e2649caf1461085f578063e84f70541461086d578063fb75b2c7146108ad578063fea5d7b1146108bf578063ffa309e4146108fd575b610906600061091a601b5460009033600160a060020a03908116911614806102fd57506026546401000000009004600160a060020a0390811633909116145b806103175750602754600160a060020a0390811633909116145b80610a1e5750602854600160a060020a0390811633909116149050610a1b565b610906602154610100900460ff1681565b610a25601a54600160a060020a039081163390911614610fc05760408051808201909152601281527f6f6e6c794d616e6167656d656e74426f647900000000000000000000000000006020820152610d7290610ba0565b6040805160038054602060026001831615610100026000190190921691909104601f8101829004820284018201909452838352610a2793908301828280156111115780601f106110e657610100808354040283529160200191611111565b610a9560025481565b610a9560043560146020526000908152604090205481565b610a9560085481565b610a9560175481565b610aa7601b54600160a060020a031681565b610a9560185481565b610a955b6000611119610591565b610a25600061112933610561565b610ac460055460ff1681565b610a95600060646112cf61044f565b610a95600d5481565b610a9560205481565b6109066026546301000000900460ff1681565b610a9560075481565b601260209081526004356000908152604080822090925260243581522054610a959081565b610a9560015481565b610a95600b5481565b61090660215462010000900460ff1681565b61090660265460ff1681565b610a2560006112db33610561565b6109065b6008546020541015610a1b565b61090660265462010000900460ff1681565b610a9560245481565b610aa7602854600160a060020a031681565b610a9560165481565b610a956004355b600160a060020a03166000908152601e602052604090205490565b610a955b6000610a1e611420610591565b610ac45b600a546020546000919004600460ff82161161142c578061142f565b61090660215460ff1681565b610a9560043560136020526000908152604090205481565b610aa76026546401000000009004600160a060020a031681565b610a9560105481565b6109065b602054600954901015610a1b565b610a95600f5481565b6040805160048054602060026001831615610100026000190190921691909104601f8101829004820284018201909452838352610a2793908301828280156111115780601f106110e657610100808354040283529160200191611111565b610a9560095481565b610906600435602435601a54600090600160a060020a0390811633909116146114355760408051808201909152601281527f6f6e6c794d616e6167656d656e74426f64790000000000000000000000000000602082015261146890610ba0565b610906602654610100900460ff1681565b610a95600a5481565b6109066004356024356000600460236000505410156116c057602354600101815260126020908152604080832033600160a060020a031684529091528120548290111561166957604080822080548490039055602354600101825260156020528120805483900390556116c0565b610a95600435601d6020526000908152604090205481565b610a9560065481565b610a2560006000600061184a33610561565b610a9560043560156020526000908152604090205481565b61090660005460ff1681565b610aa7601a54600160a060020a031681565b610a95600e5481565b61090660043560256020526000908152604090205460ff1681565b610a95600c5481565b610a25611c6f33610561565b610a9560225481565b610a9560195481565b610a956004356024356044355b6009546000906001850160ff1684029081111561083b57506009545b80831115611d445760009150611d4a565b6109066021546301000000900460ff1681565b610a256000611d5233610561565b610a25600060006000600060006000341115611f4457604080518082019091526007815260c960020a663737a2ba3432b9026020820152611f7b90610ba0565b610aa7602754600160a060020a031681565b610906600435602435600060003411156122b257604080518082019091526007815260c960020a663737a2ba3432b902602082015261146890610ba0565b610a9560235481565b604080519115158252519081900360200190f35b151561097b57610a1e3360006000600060006000600060006000600060006000602160009054906101000a900460ff1615610adb57604080518082019091526009815260ba60020a681b9bdd131bd8dad959026020820152610b2d90610ba0565b6040805133600160a060020a0316815234602082015260608183018190526022908201527f52656365766965642065746865722066726f6d204d616e616765644163636f7560808201527f6e7400000000000000000000000000000000000000000000000000000000000060a082015290517fe9c64ad7aacefe9ed905822d2a5a6ca63ffdc82b257709dc05a534d60d92f9109181900360c00190a15060015b90565b9050610a1b565b005b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f168015610a875780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b60408051918252519081900360200190f35b60408051600160a060020a03929092168252519081900360200190f35b6040805160ff929092168252519081900360200190f35b602154610100900460ff1615610c595760408051808201909152600b81527f6e6f7452656c65617365640000000000000000000000000000000000000000006020820152610b2d90610ba0565b60009a505b50505050505050505050919050565b611468606060405190810160405280603381526020017f6661696c65643a7472616e736665723a2063616e6e6f742073656e642073656e81526020017f6420746f205f70726f6a65637457616c6c6574000000000000000000000000008152602001505b7fe9c64ad7aacefe9ed905822d2a5a6ca63ffdc82b257709dc05a534d60d92f9103334836040518084600160a060020a03168152602001838152602001806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f168015610c395780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a160005460ff1615156112cc57610002565b60003411610c8c57604080518082019091526008815260c160020a673430b9a2ba3432b9026020820152610b2d90610ba0565b6000995060009850610c9c610517565b97506064610ca861044f565b60025402049650349550610cba610580565b94508460001415610d055760408051808201909152600e81527f6e6f546f6b656e73546f53656c6c0000000000000000000000000000000000006020820152610b2890610ba0565b94505b868610610d25578686049350610d74858560008183106123d857816123da565b50600160a060020a038b166000908152601c60209081526040808320805489019055600254601d9092529091208054918b028a039182019055610df4602154610100900460ff16156123e1575b565b9250846000148015610d895750602054600954145b15610d92578392505b600160a060020a038c166000908152601e60209081526040808320805487019055815486018255601c90915290208054888502908101909155998301999889019891506064610ddf61044f565b60025402049650348990039550610d02610580565b6000811115610e6257604051601b54600160a060020a031690600090839082818181858883f193505050501515610e625760408051808201909152601581527f657874726142616c616e63653a73656e644661696c00000000000000000000006020820152610b2d90610ba0565b60408051600160a060020a0333811682523460208301528183018d90529151918e16917fe2cbb9b7dba3b339b259c4f199464ccf9c277a3ff556b2c0db2b0abacdbeedde9181900360600190a287158015610ec05750610ec0610517565b15610f1457602080546040805133600160a060020a03168152349381019390935282810191909152517f6bb4d57357a9a55fe03d55925e248fcb44bf65dfe36af0c16c22910ae3bb8fb29181900360600190a15b60215460ff1615610f63576040805133600160a060020a0316815234602082015281517fbb9b02a8573d9d68d38e541b0e14a32a2dfe031aade3a25dd3de928fbc3b309d929181900390910190a15b602154610100900460ff1615610fb7576040805133600160a060020a0316815234602082015281517f32f04209c78f4db9d444b9dc3182c73fc63bb6fdd517c19f36798ad870fb1cfe929181900390910190a15b60019a50610b2d565b60003411610ff357604080518082019091526008815260c160020a673430b9a2ba3432b9026020820152610d7290610ba0565b602654610100900460ff1615156110415760408051808201909152601281527f6f6e6c7948617276657374456e61626c656400000000000000000000000000006020820152610d7290610ba0565b6026546301000000900460ff16156110905760408051808201909152601881527f6f6e6c79446973747269627574696f6e4e6f74526561647900000000000000006020820152610d7290610ba0565b600c54610d72905b60265462010000900460ff16156124ec5760408051808201909152601d81527f6f6e6c79446973747269627574696f6e4e6f74496e50726f6772657373000000602082015261118f90610ba0565b820191906000526020600020905b8154815290600101906020018083116110f457829003601f168201915b505050505081565b60050260640160ff169050610a1b565b6000141561115c5760408051808201909152601081526000805160206128b3833981519152602082015261118f90610ba0565b600034111561119457604080518082019091526007815260c960020a663737a2ba3432b902602082015261118f90610ba0565b6112cc565b60215460ff1615156111cd5760408051808201909152600a815260b260020a691bdb9b1e531bd8dad95902602082015261118f90610ba0565b60235460049010156112165760408051808201909152601381527f63757272656e7446697363616c596561723c3400000000000000000000000000602082015261118f90610ba0565b5033600160a060020a0316600090815260146020818152604080842080546017805491909103808255601e85529290952080549290920185559054928252919091556022549054600e549254606491909201929092029190910490819011156112cc576026805461ff0019166101001790556040805133600160a060020a0316815234602082015281517fe6a8fe04d793748334015ee5de6eb69ddb7c3b29df2251bc5b376305ae5cd800929181900390910190a15b50565b60025402049050610a1b565b6000141561130e5760408051808201909152601081526000805160206128b3833981519152602082015261118f90610ba0565b600034111561134157604080518082019091526007815260c960020a663737a2ba3432b902602082015261118f90610ba0565b6026546301000000900460ff1615156113915760408051808201909152601581527f6f6e6c79446973747269627574696f6e52656164790000000000000000000000602082015261118f90610ba0565b50600160a060020a033381166000818152601e602052604080822080549083905560265482517f9f3ef4300000000000000000000000000000000000000000000000000000000081526004810195909552602485018290529151909464010000000090920490911692639f3ef430926044808301939192829003018183876161da5a03f1156100025750505050565b602054600a549061081f565b60045b91505090565b6000341161146d57604080518082019091526008815260c160020a673430b9a2ba3432b902602082015261146890610ba0565b61155b565b60235460009081526025602052604090205460ff161580611490575060265460ff165b806114a25750602654610100900460ff165b156115615760408051600160a060020a033381168252346020830152851681830152606081018490526000608082015290517fd5de30e0bdd3cd6bfbc9d6142e5ded72ce738d3d230051400271eaa0c63b3be39181900360a00190a161155b565b60408051600160a060020a033381168252346020830152851681830152606081018490526001608082015290517fd5de30e0bdd3cd6bfbc9d6142e5ded72ce738d3d230051400271eaa0c63b3be39181900360a00190a15b92915050565b30600160a060020a03163182106115da57611468606060405190810160405280603181526020017f6661696c65643a6d676d74496e7665737450726f6a6563743a20616d6f756e7481526020017f203e3d2061637475616c42616c616e6365000000000000000000000000000000815260200150610ba0565b604051600160a060020a038416908390600081818185876185025a03f192505050151561150357611468606060405190810160405280603781526020017f6661696c65643a6d676d74496e7665737450726f6a6563743a2063616e6e6f7481526020017f2073656e6420746f205f70726f6a65637457616c6c6574000000000000000000815260200150610ba0565b602380546001908101600081815260126020818152604080842033600160a060020a031680865290835281852054958552601583528185208054969096039095559554909401825283528381209181529152908120555b33600160a060020a0316600090815260136020526040902054829011156116fb57604060002080548390039055601680548390039055611721565b33600160a060020a03166000908152601360205260408120805460168054919091039055555b33600160a060020a03166000908152601460205260409020548290111561175c57604060002080548390039055601780548390039055611782565b33600160a060020a03166000908152601460205260408120805460178054919091039055555b60215460ff1680156117c957506117c98383600060003411156127d357604080518082019091526007815260c960020a663737a2ba3432b902602082015261146890610ba0565b156117d65750600161155b565b60215460ff161515610b3c57611468606060405190810160405280602681526020017f6661696c65643a7472616e736665723a20697346756e644c6f636b656420697381526020017f2066616c73650000000000000000000000000000000000000000000000000000815260200150610ba0565b6000141561187d5760408051808201909152601081526000805160206128b383398151915260208201526118b090610ba0565b60003411156118b557604080518082019091526007815260c960020a663737a2ba3432b90260208201526118b090610ba0565b611c6a565b60215460ff1615156118ee5760408051808201909152600a815260b260020a691bdb9b1e531bd8dad9590260208201526118b090610ba0565b6023546001600081905260256020527f20a3e2dd35f58e582c5288344c035e137cace924bb9daf3762b8ef5a58327e26549101935060ff1615156119315761194c565b60235460039011611ace57600b546024544291011015611b0b575b6000838152601260209081526040808320600160a060020a03331680855290835281842080548886526015808652848720805492909203808355938752601e86529386208054909301815591549055602254835460105495899052929093525460649190920190920291909104925082901115611c6a578260011415611b4857601b60009054906101000a9004600160a060020a0316600160a060020a031663b1a8b25a6040518160e060020a0281526004018090506000604051808303816000876161da5a03f115610002575050505030600160a060020a03908116316018819055600d5460046064929091029190910490810460195560285460405191921690600090839082818181858883f193505050501515611b48576118b0606060405190810160405280602381526020017f6b69636b6f66663a4d616e6167656d656e74466565506f6f6c57616c6c65744681526020017f61696c0000000000000000000000000000000000000000000000000000000000815260200150610ba0565b60408051808201909152600f81527f6b69636b4f66663a34746859656172000000000000000000000000000000000060208201526118b090610ba0565b60408051808201909152601081527f6b69636b4f66663a746f6f4561726c790000000000000000000000000000000060208201526118b090610ba0565b600083815260256020526040808220805460ff19166001179055602385905542602490815581516028546019547fa8bcbf3c00000000000000000000000000000000000000000000000000000000835260048301529251600160a060020a03939093169363a8bcbf3c93838301939192909190829003018183876161da5a03f1156100025750506040805133600160a060020a0316815234602082015280820186905290517f43b50d8e46a4af80642a7d3903d182b8f5ab87b17e5bef9fd8ba4c3ba6ef9f0f92509081900360600190a16040805160195433600160a060020a03168252346020830152818301526001606082015290517f47fa1cbddad7488af88763b839f5f5436be7541a8bbfd7fa14d9c6c7581e8c1d9181900360800190a15b505050565b60001415611ca25760408051808201909152601081526000805160206128b38339815191526020820152610d7290610ba0565b60265460ff1615611cea5760408051808201909152600d81527f6f6e6c794e6f7446726f7a656e000000000000000000000000000000000000006020820152610d7290610ba0565b6000341115611d1d57604080518082019091526007815260c960020a663737a2ba3432b9026020820152610d7290610ba0565b33600160a060020a0316600090815260136020526040812080546016805491909103905555565b82810391505b509392505050565b60001415611d855760408051808201909152601081526000805160206128b3833981519152602082015261118f90610ba0565b6000341115611db857604080518082019091526007815260c960020a663737a2ba3432b902602082015261118f90610ba0565b60215460ff161515611df15760408051808201909152600a815260b260020a691bdb9b1e531bd8dad95902602082015261118f90610ba0565b60235460049010611e395760408051808201909152601481527f63757272656e7446697363616c596561723e3d34000000000000000000000000602082015261118f90610ba0565b60265462010000900460ff1615611e875760408051808201909152601d81527f6f6e6c79446973747269627574696f6e4e6f74496e50726f6772657373000000602082015261118f90610ba0565b5033600160a060020a0316600090815260136020818152604080842080546016805491909103808255601e8552929095208054929092018555905492825291909155600f5460225491549254606493909201029190910490819011156112cc576026805460ff19166001179055611efe6000611098565b6040805133600160a060020a0316815234602082015281517fa3a0ee24545ff02dd0d20d670461167188c7adc4c2973fd0d1b294e1e576fc79929181900390910190a150565b60215460ff1615611f8057604080518082019091526009815260ba60020a681b9bdd131bd8dad959026020820152611f7b90610ba0565b6122ab565b611f8933610561565b60001415611fbc5760408051808201909152601081526000805160206128b38339815191526020820152611f7b90610ba0565b33600160a060020a03166000908152601c602052604081205414156120185760408051808201909152600a81527f6e6f576569476976656e000000000000000000000000000000000000000000006020820152611f7b90610ba0565b6020805433600160a060020a03166000908152601e90925260409091205411156120795760408051808201909152601181527f696e76616c6964546f6b656e436f756e740000000000000000000000000000006020820152611f7b90610ba0565b612081610517565b600160a060020a033381166000908152601c602090815260408083208054601d8085528386208054601e87528588208054908990559488905591865286905584548390039094558251601b547f51fa7efd000000000000000000000000000000000000000000000000000000008252600482018690529351979c50909a509298509650889550909216926351fa7efd926024818101939291829003018183876161da5a03f11561000257505060405133600160a060020a03169150600090839082818181858883f1935050505015156121f65733600160a060020a03167fba1c02018a9ab9c5ecec972230d1c4444bd911f121639f33da13896099655b3533348460006040518085600160a060020a03168152602001848152602001838152602001821515815260200194505050505060405180910390a260408051808201909152601181527f726566756e643a53656e644661696c65640000000000000000000000000000006020820152611f7b90610ba0565b6040805133600160a060020a03168082523460208301528183018490526001606083015291517fba1c02018a9ab9c5ecec972230d1c4444bd911f121639f33da13896099655b359181900360800190a2841580156122575750612257610517565b156122ab57602080546040805133600160a060020a03168152349381019390935282810191909152517f6bb4d57357a9a55fe03d55925e248fcb44bf65dfe36af0c16c22910ae3bb8fb29181900360600190a15b5050505050565b601a54600160a060020a0390811633909116146123065760408051808201909152601281527f6f6e6c794d616e6167656d656e74426f64790000000000000000000000000000602082015261146890610ba0565b6022546006548391820111156123535760408051808201909152600c81527f6869744d6178426f756e7479000000000000000000000000000000000000000060208201526123d390610ba0565b600160a060020a038481166000818152601e6020908152604091829020805488019055602280548801905581513390941684523490840152828101919091526060820185905260016080830152517fd169a02076bf076f24fa9c265d5ed41dc57e6553208e7a8e7190cd90c365f1849181900360a00190a15b5092915050565b6123cc565b825b905061155b565b6123e96105f8565b6021805460ff19169091179081905560ff161580156124155750602160029054906101000a900460ff16155b801561242357506001544210155b1561245557612430610517565b15612443576021805460ff191660011790555b6021805462ff00001916620100001790555b60215460ff1615801561247257506021546301000000900460ff16155b80156124845750600754600154014210155b156124b857612491610517565b156124a4576021805460ff191660011790555b6021805463ff000000191663010000001790555b6021546301000000900460ff1680156124d657506124d4610517565b155b15610d72576021805461ff001916610100179055565b6026805463ff0000001962ff00001990911662010000171663010000001790556125ac602654604051640100000000909104600160a060020a03908116916000913016319082818181858883f193505050501515610d7257610d72606060405190810160405280602381526020017f70617942616c616e6365546f52657475726e57616c6c65743a73656e6446616981526020017f6c65640000000000000000000000000000000000000000000000000000000000815260200150610ba0565b602860009054906101000a9004600160a060020a0316600160a060020a031663fc44fd286040518160e060020a0281526004018090506000604051808303816000876161da5a03f11561000257506040805160275460e360020a631f889fa50282529151600160a060020a03929092169350600481810192600092909190829003018183876161da5a03f1156100025750601b546040805160e360020a631f889fa50281529051600160a060020a03929092169350600481810192600092909190829003018183876161da5a03f1156100025750505060008111156126e457602660049054906101000a9004600160a060020a0316600160a060020a031663b8b27765826040518260e060020a028152600401808281526020019150506000604051808303816000876161da5a03f115610002575050505b602654602254602054604080517f2033d9ae0000000000000000000000000000000000000000000000000000000081529190920160048201529051640100000000909204600160a060020a031691632033d9ae91602480820192600092909190829003018183876161da5a03f11561000257505060265460408051600160a060020a033381168252346020830152640100000000909304909216318282015260016060830152517f6816fcd617af2edc3ccc34b8a63bab368d79f315e065779259bb6a13541eaea292509081900360800190a16000602660026101000a81548160ff0219169083021790555050565b600082116127e35750600061155b565b33600160a060020a03166000908152601e60205260409020548290101561280c5750600061155b565b600160a060020a0383166000908152601e602052604090205480830110156128365750600061155b565b600160a060020a033381166000818152601e60209081526040808320805488900390559387168083529184902080548701905583518381523491810191909152808401869052925190927fe921528ef8652e1a832f8063bcbca0186d6c5a28413c90acecaf074846c412db919081900360600190a350600161155b566f6e6c79546f6b656e486f6c6465727300000000000000000000000000000000
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000b79ab5993cef2e0b714a66f3eda73b55de812d310000000000000000000000000000000000000000000000000000000057ebbed00000000000000000000000000000000000000000000000000000000000278d00000000000000000000000000000000000000000000000000000000000190c8000000000000000000000000000000000000000000000000000000000008f0d180000000000000000000000000000000000000000000000000000000000ee6b2800000000000000000000000000000000000000000000000000000000002faf0800000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _managementBodyAddress (address): 0xb79Ab5993Cef2E0B714A66F3edA73b55DE812D31
Arg [1] : _closingTime (uint256): 1475067600
Arg [2] : _closingTimeExtensionPeriod (uint256): 2592000
Arg [3] : _lastKickoffDateBuffer (uint256): 26265600
Arg [4] : _minTokensToCreate (uint256): 150000000
Arg [5] : _maxTokensToCreate (uint256): 250000000
Arg [6] : _tokensPerTier (uint256): 50000000
Arg [7] : _isInTestMode (bool): False
-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 000000000000000000000000b79ab5993cef2e0b714a66f3eda73b55de812d31
Arg [1] : 0000000000000000000000000000000000000000000000000000000057ebbed0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000278d00
Arg [3] : 000000000000000000000000000000000000000000000000000000000190c800
Arg [4] : 0000000000000000000000000000000000000000000000000000000008f0d180
Arg [5] : 000000000000000000000000000000000000000000000000000000000ee6b280
Arg [6] : 0000000000000000000000000000000000000000000000000000000002faf080
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000000
Loading...
Loading
Loading...
Loading
Net Worth in USD
$1,991,607.57
Net Worth in ETH
1,003.724037
Token Allocations
ETH
100.00%
OMG
0.00%
DECT
0.00%
Others
0.00%
Multichain Portfolio | 33 Chains
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.