Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
This contract has been partially verified via Sourcify.
View contract in Sourcify repository
- Contract name:
- tokenService
- Optimization enabled
- true
- Compiler version
- v0.6.1+commit.e6f7d5a4
- Optimization runs
- 200
- EVM Version
- istanbul
- Verified at
- 2026-02-09T05:24:12.273767Z
Constructor Arguments
00000000000000000000000090e340e2d11e6eb1d99e34d122d6fe0fef3213fd000000000000000000000000a6be27538a28114fe03eb7ade9adfe53164f2a4c
Arg [0] (address) : 0x90e340e2d11e6eb1d99e34d122d6fe0fef3213fd
Arg [1] (address) : 0xa6be27538a28114fe03eb7ade9adfe53164f2a4c
tokenService.sol
pragma solidity ^0.6.0;
interface publicCalls {
function setOwnerTokenService ( ) external;
function tokenCreatedSet ( address _address, address _tokenCreated ) external;
function tokenICOCreatedSet ( address _address, address _tokenICOCreated ) external;
function amountOfMNEForToken ( ) external view returns ( uint256 );
function amountOfMNEForTokenICO ( ) external view returns ( uint256 );
function ethFeeForToken ( ) external view returns ( uint256 );
function ethFeeForTokenICO ( ) external view returns ( uint256 );
function tokenWithoutICOCount ( ) external view returns ( uint256 );
function tokenICOCount ( ) external view returns ( uint256 );
function tokenWithoutICOCountSet ( uint256 _tokenWithoutICOCount ) external;
function tokenICOCountSet ( uint256 _tokenICOCount ) external;
}
interface genesis {
function availableBalanceOf ( address _address ) external view returns ( uint256 Balance );
}
contract tokenService
{
address public ownerMain = 0x0000000000000000000000000000000000000000;
address public updaterAddress = 0x0000000000000000000000000000000000000000;
function setUpdater() public {if (updaterAddress == 0x0000000000000000000000000000000000000000) updaterAddress = msg.sender; else revert();}
function updaterSetOwnerMain(address _address) public {if (tx.origin == updaterAddress) ownerMain = _address; else revert();}
function setOwnerMain() public {
if (tx.origin == updaterAddress)
ownerMain = msg.sender;
else
revert();
}
modifier onlyOwner(){
require(msg.sender == ownerMain);
_;
}
publicCalls public pc;
genesis public gn;
constructor(address _publicCallsAddress, address _genesisAddress) public {
setUpdater();
pc = publicCalls(_publicCallsAddress);
pc.setOwnerTokenService();
gn = genesis(_genesisAddress);
}
function reloadGenesis(address _address) public
{
if (msg.sender == updaterAddress)
{
gn = genesis(_address);
}
else revert();
}
function reloadPublicCalls(address _address, uint code) public { if (!(code == 1234)) revert(); if (msg.sender == updaterAddress) {pc = publicCalls(_address); pc.setOwnerTokenService();} else revert();}
event CreateTokenHistory(address indexed _owner, address indexed _address);
event CreateTokenICOHistory(address indexed _owner, address indexed _address);
function CreateToken(address _from, uint256 _msgvalue) public onlyOwner returns (uint256 _mneToBurn, address _address) {
uint256 mneToBurn = pc.amountOfMNEForToken();
if (!(gn.availableBalanceOf(_from) >= mneToBurn)) revert('(!(gn.availableBalanceOf(_from) >= mneToBurn))');
uint256 feesToPayToContract = pc.ethFeeForToken();
uint256 feesToPayToSeller = 0;
uint256 feesGeneralToPayToContract = (feesToPayToContract + feesToPayToSeller) * 0;
uint256 totalToSend = feesToPayToContract + feesToPayToSeller + feesGeneralToPayToContract;
if (!(_msgvalue == totalToSend)) revert('(!(_msgvalue == totalToSend))');
Token token = new Token(_from);
pc.tokenCreatedSet(_from, address(token));
emit CreateTokenHistory(_from, address(token));
pc.tokenWithoutICOCountSet(pc.tokenWithoutICOCount() + 1);
return (mneToBurn, address(token));
}
function CreateTokenICO(address _from, uint256 _msgvalue) public onlyOwner returns (uint256 _mneToBurn, address _address) {
/*uint256 mneToBurn = pc.amountOfMNEForTokenICO();
if (!(gn.availableBalanceOf(_from) >= mneToBurn)) revert('(!(gn.availableBalanceOf(_from) >= mneToBurn))');
uint256 feesToPayToContract = pc.ethFeeForTokenICO();
uint256 feesToPayToSeller = 0;
uint256 feesGeneralToPayToContract = (feesToPayToContract + feesToPayToSeller) * 0;
uint256 totalToSend = feesToPayToContract + feesToPayToSeller + feesGeneralToPayToContract;
if (!(_msgvalue == totalToSend)) revert('(!(_msgvalue == totalToSend))');
TokenICO token = new TokenICO(payable(_from));
pc.tokenICOCreatedSet(_from, address(token));
emit CreateTokenICOHistory(_from, address(token));
pc.tokenICOCountSet(pc.tokenICOCount() + 1);
return (mneToBurn, address(token));*/
return (0, 0x0000000000000000000000000000000000000000);
}
}
contract Token {
string public symbol = "";
string public name = "";
uint8 public constant decimals = 18;
uint256 _totalSupply = 0;
address owner = 0x0000000000000000000000000000000000000000;
bool setupDone = false;
event Transfer(address indexed _from, address indexed _to, uint256 _value);
event Approval(address indexed _owner, address indexed _spender, uint256 _value);
mapping(address => uint256) balances;
mapping(address => mapping (address => uint256)) allowed;
constructor(address adr) public {
owner = adr;
}
function SetupToken(string memory tokenName, string memory tokenSymbol, uint256 tokenSupply) public
{
if (msg.sender == owner && setupDone == false)
{
symbol = tokenSymbol;
name = tokenName;
_totalSupply = tokenSupply * 1000000000000000000;
balances[owner] = _totalSupply;
setupDone = true;
}
}
function totalSupply() public view returns (uint256 totalSupply) {
return _totalSupply;
}
function balanceOf(address _owner) public view returns (uint256 balance) {
return balances[_owner];
}
function transfer(address _to, uint256 _amount) public returns (bool success) {
if (balances[msg.sender] >= _amount
&& _amount > 0
&& balances[_to] + _amount > balances[_to]) {
balances[msg.sender] -= _amount;
balances[_to] += _amount;
emit Transfer(msg.sender, _to, _amount);
return true;
} else {
return false;
}
}
function transferFrom(
address _from,
address _to,
uint256 _amount
) public returns (bool success) {
if (balances[_from] >= _amount
&& allowed[_from][msg.sender] >= _amount
&& _amount > 0
&& balances[_to] + _amount > balances[_to]) {
balances[_from] -= _amount;
allowed[_from][msg.sender] -= _amount;
balances[_to] += _amount;
emit Transfer(_from, _to, _amount);
return true;
} else {
return false;
}
}
function approve(address _spender, uint256 _amount) public returns (bool success) {
allowed[msg.sender][_spender] = _amount;
emit Approval(msg.sender, _spender, _amount);
return true;
}
function allowance(address _owner, address _spender) public view returns (uint256 remaining) {
return allowed[_owner][_spender];
}
}
contract TokenICO {
string public symbol = "";
string public name = "";
uint8 public constant decimals = 18;
string public constant ICOFactoryVersion = "1.0";
uint256 _totalSupply = 0;
uint256 _oneEtherEqualsInWei = 0;
uint256 _maxICOpublicSupply = 0;
uint256 _ownerICOsupply = 0;
uint256 _currentICOpublicSupply = 0;
uint256 _blockICOdatetime = 0;
address payable _ICOfundsReceiverAddress = 0x0000000000000000000000000000000000000000;
address _remainingTokensReceiverAddress = 0x0000000000000000000000000000000000000000;
address payable owner = 0x0000000000000000000000000000000000000000;
bool setupDone = false;
bool isICOrunning = false;
bool ICOstarted = false;
uint256 ICOoverTimestamp = 0;
event Transfer(address indexed _from, address indexed _to, uint256 _value);
event Approval(address indexed _owner, address indexed _spender, uint256 _value);
event Burn(address indexed _owner, uint256 _value);
mapping(address => uint256) balances;
mapping(address => mapping (address => uint256)) allowed;
constructor(address payable adr) public {
owner = adr;
}
receive() external payable
{
if ((isICOrunning && _blockICOdatetime == 0) || (isICOrunning && _blockICOdatetime > 0 && now <= _blockICOdatetime))
{
uint256 _amount = ((msg.value * _oneEtherEqualsInWei) / 1000000000000000000);
if (((_currentICOpublicSupply + _amount) > _maxICOpublicSupply) && _maxICOpublicSupply > 0) revert();
if(!_ICOfundsReceiverAddress.send(msg.value)) revert();
_currentICOpublicSupply += _amount;
balances[msg.sender] += _amount;
_totalSupply += _amount;
emit Transfer(address(this), msg.sender, _amount);
}
else
{
revert();
}
}
function SetupToken(string memory tokenName, string memory tokenSymbol, uint256 oneEtherEqualsInWei, uint256 maxICOpublicSupply, uint256 ownerICOsupply, address remainingTokensReceiverAddress, address payable ICOfundsReceiverAddress, uint256 blockICOdatetime) public
{
if (msg.sender == owner && !setupDone)
{
symbol = tokenSymbol;
name = tokenName;
_oneEtherEqualsInWei = oneEtherEqualsInWei;
_maxICOpublicSupply = maxICOpublicSupply * 1000000000000000000;
if (ownerICOsupply > 0)
{
_ownerICOsupply = ownerICOsupply * 1000000000000000000;
_totalSupply = _ownerICOsupply;
balances[owner] = _totalSupply;
emit Transfer(address(this), owner, _totalSupply);
}
_ICOfundsReceiverAddress = ICOfundsReceiverAddress;
if (_ICOfundsReceiverAddress == 0x0000000000000000000000000000000000000000) _ICOfundsReceiverAddress = owner;
_remainingTokensReceiverAddress = remainingTokensReceiverAddress;
_blockICOdatetime = blockICOdatetime;
setupDone = true;
}
}
function StartICO() public returns (bool success)
{
if (msg.sender == owner && !ICOstarted && setupDone)
{
ICOstarted = true;
isICOrunning = true;
}
else
{
revert();
}
return true;
}
function StopICO() public returns (bool success)
{
if (msg.sender == owner && isICOrunning)
{
if (_remainingTokensReceiverAddress != 0x0000000000000000000000000000000000000000 && _maxICOpublicSupply > 0)
{
uint256 _remainingAmount = _maxICOpublicSupply - _currentICOpublicSupply;
if (_remainingAmount > 0)
{
balances[_remainingTokensReceiverAddress] += _remainingAmount;
_totalSupply += _remainingAmount;
emit Transfer(address(this), _remainingTokensReceiverAddress, _remainingAmount);
}
}
isICOrunning = false;
ICOoverTimestamp = now;
}
else
{
revert();
}
return true;
}
function BurnTokens(uint256 amountInWei) public returns (bool success)
{
if (balances[msg.sender] >= amountInWei)
{
balances[msg.sender] -= amountInWei;
_totalSupply -= amountInWei;
emit Burn(msg.sender, amountInWei);
emit Transfer(msg.sender, 0x0000000000000000000000000000000000000000, amountInWei);
}
else
{
revert();
}
return true;
}
function totalSupply() public view returns (uint256 totalSupplyValue) {
return _totalSupply;
}
function OneEtherEqualsInWei() public view returns (uint256 oneEtherEqualsInWei) {
return _oneEtherEqualsInWei;
}
function MaxICOpublicSupply() public view returns (uint256 maxICOpublicSupply) {
return _maxICOpublicSupply;
}
function OwnerICOsupply() public view returns (uint256 ownerICOsupply) {
return _ownerICOsupply;
}
function CurrentICOpublicSupply() public view returns (uint256 currentICOpublicSupply) {
return _currentICOpublicSupply;
}
function RemainingTokensReceiverAddress() public view returns (address remainingTokensReceiverAddress) {
return _remainingTokensReceiverAddress;
}
function ICOfundsReceiverAddress() public view returns (address ICOfundsReceiver) {
return _ICOfundsReceiverAddress;
}
function Owner() public view returns (address ownerAddress) {
return owner;
}
function SetupDone() public view returns (bool setupDoneFlag) {
return setupDone;
}
function IsICOrunning() public view returns (bool isICOrunningFalg) {
return isICOrunning;
}
function IsICOstarted() public view returns (bool isICOstartedFlag) {
return ICOstarted;
}
function ICOoverTimeStamp() public view returns (uint256 ICOoverTimestampCheck) {
return ICOoverTimestamp;
}
function BlockICOdatetime() public view returns (uint256 blockStopICOdate) {
return _blockICOdatetime;
}
function TimeNow() public view returns (uint256 timenow) {
return now;
}
function balanceOf(address _owner) public view returns (uint256 balance) {
return balances[_owner];
}
function transfer(address _to, uint256 _amount) public returns (bool success) {
if (balances[msg.sender] >= _amount
&& _amount > 0
&& balances[_to] + _amount > balances[_to]) {
balances[msg.sender] -= _amount;
balances[_to] += _amount;
emit Transfer(msg.sender, _to, _amount);
return true;
} else {
return false;
}
}
function transferFrom(
address _from,
address _to,
uint256 _amount
) public returns (bool success) {
if (balances[_from] >= _amount
&& allowed[_from][msg.sender] >= _amount
&& _amount > 0
&& balances[_to] + _amount > balances[_to]) {
balances[_from] -= _amount;
allowed[_from][msg.sender] -= _amount;
balances[_to] += _amount;
emit Transfer(_from, _to, _amount);
return true;
} else {
return false;
}
}
function approve(address _spender, uint256 _amount) public returns (bool success) {
allowed[msg.sender][_spender] = _amount;
emit Approval(msg.sender, _spender, _amount);
return true;
}
function allowance(address _owner, address _spender) public view returns (uint256 remaining) {
return allowed[_owner][_spender];
}
}
Compiler Settings
{"remappings":[],"optimizer":{"runs":200,"enabled":true},"metadata":{"bytecodeHash":"ipfs"},"libraries":{},"evmVersion":"istanbul","compilationTarget":{"tokenService.sol":"tokenService"}}
Contract ABI
[{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"address","name":"_publicCallsAddress","internalType":"address"},{"type":"address","name":"_genesisAddress","internalType":"address"}]},{"type":"event","name":"CreateTokenHistory","inputs":[{"type":"address","name":"_owner","internalType":"address","indexed":true},{"type":"address","name":"_address","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"CreateTokenICOHistory","inputs":[{"type":"address","name":"_owner","internalType":"address","indexed":true},{"type":"address","name":"_address","internalType":"address","indexed":true}],"anonymous":false},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"uint256","name":"_mneToBurn","internalType":"uint256"},{"type":"address","name":"_address","internalType":"address"}],"name":"CreateToken","inputs":[{"type":"address","name":"_from","internalType":"address"},{"type":"uint256","name":"_msgvalue","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"uint256","name":"_mneToBurn","internalType":"uint256"},{"type":"address","name":"_address","internalType":"address"}],"name":"CreateTokenICO","inputs":[{"type":"address","name":"_from","internalType":"address"},{"type":"uint256","name":"_msgvalue","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract genesis"}],"name":"gn","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"ownerMain","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract publicCalls"}],"name":"pc","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"reloadGenesis","inputs":[{"type":"address","name":"_address","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"reloadPublicCalls","inputs":[{"type":"address","name":"_address","internalType":"address"},{"type":"uint256","name":"code","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setOwnerMain","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setUpdater","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"updaterAddress","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updaterSetOwnerMain","inputs":[{"type":"address","name":"_address","internalType":"address"}]}]
Contract Creation Code
0x6080604052600080546001600160a01b031990811690915560018054909116905534801561002c57600080fd5b506040516112d03803806112d08339818101604052604081101561004f57600080fd5b5080516020909101516100696001600160e01b0361010616565b600280546001600160a01b0319166001600160a01b03848116919091179182905560408051630eaa789d60e41b81529051929091169163eaa789d09160048082019260009290919082900301818387803b1580156100c657600080fd5b505af11580156100da573d6000803e3d6000fd5b5050600380546001600160a01b0319166001600160a01b03949094169390931790925550610134915050565b6001546001600160a01b031661012d57600180546001600160a01b03191633179055610132565b600080fd5b565b61118d806101436000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c806393c63b9d1161007157806393c63b9d14610136578063a472591c1461015c578063b378e89b146101a9578063e2412630146101d5578063e69919ae146101dd578063fdbc6530146101e5576100a9565b806313b9f0c7146100ae57806327d4da0e146100b85780633118f543146100de5780637366881714610102578063919e0b791461012e575b600080fd5b6100b66101ed565b005b6100b6600480360360208110156100ce57600080fd5b50356001600160a01b0316610215565b6100e6610247565b604080516001600160a01b039092168252519081900360200190f35b6100b66004803603604081101561011857600080fd5b506001600160a01b038135169060200135610256565b6100e66102f0565b6100b66004803603602081101561014c57600080fd5b50356001600160a01b03166102ff565b6101886004803603604081101561017257600080fd5b506001600160a01b038135169060200135610332565b604080519283526001600160a01b0390911660208301528051918290030190f35b610188600480360360408110156101bf57600080fd5b506001600160a01b038135169060200135610358565b6100b661072f565b6100e6610756565b6100e6610765565b6001546001600160a01b03163214156100a957600080546001600160a01b031916331790555b565b6001546001600160a01b03163214156100a957600080546001600160a01b0319166001600160a01b0383161790555b50565b6003546001600160a01b031681565b806104d21461026457600080fd5b6001546001600160a01b03163314156100a957600280546001600160a01b0319166001600160a01b03848116919091179182905560408051630eaa789d60e41b81529051929091169163eaa789d09160048082019260009290919082900301818387803b1580156102d457600080fd5b505af11580156102e8573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031681565b6001546001600160a01b03163314156100a957600380546001600160a01b0319166001600160a01b038316179055610244565b6000805481906001600160a01b0316331461034c57600080fd5b50600093849350915050565b6000805481906001600160a01b0316331461037257600080fd5b6002546040805163c1e786d560e01b815290516000926001600160a01b03169163c1e786d5916004808301926020929190829003018186803b1580156103b757600080fd5b505afa1580156103cb573d6000803e3d6000fd5b505050506040513d60208110156103e157600080fd5b5051600354604080516325d998bb60e01b81526001600160a01b0389811660048301529151939450849391909216916325d998bb916024808301926020929190829003018186803b15801561043557600080fd5b505afa158015610449573d6000803e3d6000fd5b505050506040513d602081101561045f57600080fd5b5051101561049e5760405162461bcd60e51b815260040180806020018281038252602e81526020018061112a602e913960400191505060405180910390fd5b6002546040805163217dd64560e01b815290516000926001600160a01b03169163217dd645916004808301926020929190829003018186803b1580156104e357600080fd5b505afa1580156104f7573d6000803e3d6000fd5b505050506040513d602081101561050d57600080fd5b5051905060008082878114610569576040805162461bcd60e51b815260206004820152601d60248201527f2821285f6d736776616c7565203d3d20746f74616c546f53656e642929000000604482015290519081900360640190fd5b60008960405161057890610774565b6001600160a01b03909116815260405190819003602001906000f0801580156105a5573d6000803e3d6000fd5b506002546040805163824eca6f60e01b81526001600160a01b038e811660048301528085166024830152915193945091169163824eca6f9160448082019260009290919082900301818387803b1580156105fe57600080fd5b505af1158015610612573d6000803e3d6000fd5b50506040516001600160a01b0380851693508d1691507f1de1df184536fe176d3bab87fb15d6cf9d42f06a12e6a35b4611568bcb0d688e90600090a3600254604080516353ef781160e01b815290516001600160a01b0390921691638ffb7c529183916353ef781191600480820192602092909190829003018186803b15801561069b57600080fd5b505afa1580156106af573d6000803e3d6000fd5b505050506040513d60208110156106c557600080fd5b5051604080516001600160e01b031960e085901b1681526001909201600483015251602480830192600092919082900301818387803b15801561070757600080fd5b505af115801561071b573d6000803e3d6000fd5b50979c929b50919950505050505050505050565b6001546001600160a01b03166100a957600180546001600160a01b03191633179055610213565b6002546001600160a01b031681565b6001546001600160a01b031681565b6109a8806107828339019056fe60a060408190526000608081905261001791816100a1565b50604080516020810191829052600090819052610036916001916100a1565b506000600255600380546001600160a81b031916905534801561005857600080fd5b506040516109a83803806109a88339818101604052602081101561007b57600080fd5b5051600380546001600160a01b0319166001600160a01b0390921691909117905561013c565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100e257805160ff191683800117855561010f565b8280016001018555821561010f579182015b8281111561010f5782518255916020019190600101906100f4565b5061011b92915061011f565b5090565b61013991905b8082111561011b5760008155600101610125565b90565b61085d8061014b6000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c806370a082311161006657806370a08231146101ce57806395d89b41146101f4578063a9059cbb146101fc578063b6d2a9b914610228578063dd62ed3e146103595761009e565b806306fdde03146100a3578063095ea7b31461012057806318160ddd1461016057806323b872dd1461017a578063313ce567146101b0575b600080fd5b6100ab610387565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100e55781810151838201526020016100cd565b50505050905090810190601f1680156101125780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61014c6004803603604081101561013657600080fd5b506001600160a01b038135169060200135610414565b604080519115158252519081900360200190f35b61016861047b565b60408051918252519081900360200190f35b61014c6004803603606081101561019057600080fd5b506001600160a01b03813581169160208101359091169060400135610482565b6101b8610594565b6040805160ff9092168252519081900360200190f35b610168600480360360208110156101e457600080fd5b50356001600160a01b0316610599565b6100ab6105b4565b61014c6004803603604081101561021257600080fd5b506001600160a01b03813516906020013561060f565b6103576004803603606081101561023e57600080fd5b81019060208101813564010000000081111561025957600080fd5b82018360208201111561026b57600080fd5b8035906020019184600183028401116401000000008311171561028d57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092959493602081019350359150506401000000008111156102e057600080fd5b8201836020820111156102f257600080fd5b8035906020019184600183028401116401000000008311171561031457600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955050913592506106cd915050565b005b6101686004803603604081101561036f57600080fd5b506001600160a01b0381358116916020013516610764565b60018054604080516020600284861615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561040c5780601f106103e15761010080835404028352916020019161040c565b820191906000526020600020905b8154815290600101906020018083116103ef57829003601f168201915b505050505081565b3360008181526005602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b6002545b90565b6001600160a01b03831660009081526004602052604081205482118015906104cd57506001600160a01b03841660009081526005602090815260408083203384529091529020548211155b80156104d95750600082115b80156104fe57506001600160a01b038316600090815260046020526040902054828101115b15610589576001600160a01b0380851660008181526004602081815260408084208054899003905560058252808420338552825280842080548990039055948816808452918152918490208054870190558351868152935190937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92908290030190a350600161058d565b5060005b9392505050565b601281565b6001600160a01b031660009081526004602052604090205490565b6000805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561040c5780601f106103e15761010080835404028352916020019161040c565b33600090815260046020526040812054821180159061062e5750600082115b801561065357506001600160a01b038316600090815260046020526040902054828101115b156106c557336000818152600460209081526040808320805487900390556001600160a01b03871680845292819020805487019055805186815290519293927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a3506001610475565b506000610475565b6003546001600160a01b0316331480156106f15750600354600160a01b900460ff16155b1561075f57815161070990600090602085019061078f565b50825161071d90600190602086019061078f565b50670de0b6b3a764000081026002819055600380546001600160a01b0316600090815260046020526040902091909155805460ff60a01b1916600160a01b1790555b505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106107d057805160ff19168380011785556107fd565b828001600101855582156107fd579182015b828111156107fd5782518255916020019190600101906107e2565b5061080992915061080d565b5090565b61047f91905b80821115610809576000815560010161081356fea26469706673582212205b8878f5587a0571ced97bd287c020c37afa59d79a69a76edfcff817bbe1af8a64736f6c63430006010033282128676e2e617661696c61626c6542616c616e63654f66285f66726f6d29203e3d206d6e65546f4275726e2929a2646970667358221220df52431f93542240f931dfda921876499acbebdc3bdb5262ea086f4d7f7768d464736f6c6343000601003300000000000000000000000090e340e2d11e6eb1d99e34d122d6fe0fef3213fd000000000000000000000000a6be27538a28114fe03eb7ade9adfe53164f2a4c
Deployed ByteCode
0x608060405234801561001057600080fd5b50600436106100a95760003560e01c806393c63b9d1161007157806393c63b9d14610136578063a472591c1461015c578063b378e89b146101a9578063e2412630146101d5578063e69919ae146101dd578063fdbc6530146101e5576100a9565b806313b9f0c7146100ae57806327d4da0e146100b85780633118f543146100de5780637366881714610102578063919e0b791461012e575b600080fd5b6100b66101ed565b005b6100b6600480360360208110156100ce57600080fd5b50356001600160a01b0316610215565b6100e6610247565b604080516001600160a01b039092168252519081900360200190f35b6100b66004803603604081101561011857600080fd5b506001600160a01b038135169060200135610256565b6100e66102f0565b6100b66004803603602081101561014c57600080fd5b50356001600160a01b03166102ff565b6101886004803603604081101561017257600080fd5b506001600160a01b038135169060200135610332565b604080519283526001600160a01b0390911660208301528051918290030190f35b610188600480360360408110156101bf57600080fd5b506001600160a01b038135169060200135610358565b6100b661072f565b6100e6610756565b6100e6610765565b6001546001600160a01b03163214156100a957600080546001600160a01b031916331790555b565b6001546001600160a01b03163214156100a957600080546001600160a01b0319166001600160a01b0383161790555b50565b6003546001600160a01b031681565b806104d21461026457600080fd5b6001546001600160a01b03163314156100a957600280546001600160a01b0319166001600160a01b03848116919091179182905560408051630eaa789d60e41b81529051929091169163eaa789d09160048082019260009290919082900301818387803b1580156102d457600080fd5b505af11580156102e8573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031681565b6001546001600160a01b03163314156100a957600380546001600160a01b0319166001600160a01b038316179055610244565b6000805481906001600160a01b0316331461034c57600080fd5b50600093849350915050565b6000805481906001600160a01b0316331461037257600080fd5b6002546040805163c1e786d560e01b815290516000926001600160a01b03169163c1e786d5916004808301926020929190829003018186803b1580156103b757600080fd5b505afa1580156103cb573d6000803e3d6000fd5b505050506040513d60208110156103e157600080fd5b5051600354604080516325d998bb60e01b81526001600160a01b0389811660048301529151939450849391909216916325d998bb916024808301926020929190829003018186803b15801561043557600080fd5b505afa158015610449573d6000803e3d6000fd5b505050506040513d602081101561045f57600080fd5b5051101561049e5760405162461bcd60e51b815260040180806020018281038252602e81526020018061112a602e913960400191505060405180910390fd5b6002546040805163217dd64560e01b815290516000926001600160a01b03169163217dd645916004808301926020929190829003018186803b1580156104e357600080fd5b505afa1580156104f7573d6000803e3d6000fd5b505050506040513d602081101561050d57600080fd5b5051905060008082878114610569576040805162461bcd60e51b815260206004820152601d60248201527f2821285f6d736776616c7565203d3d20746f74616c546f53656e642929000000604482015290519081900360640190fd5b60008960405161057890610774565b6001600160a01b03909116815260405190819003602001906000f0801580156105a5573d6000803e3d6000fd5b506002546040805163824eca6f60e01b81526001600160a01b038e811660048301528085166024830152915193945091169163824eca6f9160448082019260009290919082900301818387803b1580156105fe57600080fd5b505af1158015610612573d6000803e3d6000fd5b50506040516001600160a01b0380851693508d1691507f1de1df184536fe176d3bab87fb15d6cf9d42f06a12e6a35b4611568bcb0d688e90600090a3600254604080516353ef781160e01b815290516001600160a01b0390921691638ffb7c529183916353ef781191600480820192602092909190829003018186803b15801561069b57600080fd5b505afa1580156106af573d6000803e3d6000fd5b505050506040513d60208110156106c557600080fd5b5051604080516001600160e01b031960e085901b1681526001909201600483015251602480830192600092919082900301818387803b15801561070757600080fd5b505af115801561071b573d6000803e3d6000fd5b50979c929b50919950505050505050505050565b6001546001600160a01b03166100a957600180546001600160a01b03191633179055610213565b6002546001600160a01b031681565b6001546001600160a01b031681565b6109a8806107828339019056fe60a060408190526000608081905261001791816100a1565b50604080516020810191829052600090819052610036916001916100a1565b506000600255600380546001600160a81b031916905534801561005857600080fd5b506040516109a83803806109a88339818101604052602081101561007b57600080fd5b5051600380546001600160a01b0319166001600160a01b0390921691909117905561013c565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100e257805160ff191683800117855561010f565b8280016001018555821561010f579182015b8281111561010f5782518255916020019190600101906100f4565b5061011b92915061011f565b5090565b61013991905b8082111561011b5760008155600101610125565b90565b61085d8061014b6000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c806370a082311161006657806370a08231146101ce57806395d89b41146101f4578063a9059cbb146101fc578063b6d2a9b914610228578063dd62ed3e146103595761009e565b806306fdde03146100a3578063095ea7b31461012057806318160ddd1461016057806323b872dd1461017a578063313ce567146101b0575b600080fd5b6100ab610387565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100e55781810151838201526020016100cd565b50505050905090810190601f1680156101125780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61014c6004803603604081101561013657600080fd5b506001600160a01b038135169060200135610414565b604080519115158252519081900360200190f35b61016861047b565b60408051918252519081900360200190f35b61014c6004803603606081101561019057600080fd5b506001600160a01b03813581169160208101359091169060400135610482565b6101b8610594565b6040805160ff9092168252519081900360200190f35b610168600480360360208110156101e457600080fd5b50356001600160a01b0316610599565b6100ab6105b4565b61014c6004803603604081101561021257600080fd5b506001600160a01b03813516906020013561060f565b6103576004803603606081101561023e57600080fd5b81019060208101813564010000000081111561025957600080fd5b82018360208201111561026b57600080fd5b8035906020019184600183028401116401000000008311171561028d57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092959493602081019350359150506401000000008111156102e057600080fd5b8201836020820111156102f257600080fd5b8035906020019184600183028401116401000000008311171561031457600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955050913592506106cd915050565b005b6101686004803603604081101561036f57600080fd5b506001600160a01b0381358116916020013516610764565b60018054604080516020600284861615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561040c5780601f106103e15761010080835404028352916020019161040c565b820191906000526020600020905b8154815290600101906020018083116103ef57829003601f168201915b505050505081565b3360008181526005602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b6002545b90565b6001600160a01b03831660009081526004602052604081205482118015906104cd57506001600160a01b03841660009081526005602090815260408083203384529091529020548211155b80156104d95750600082115b80156104fe57506001600160a01b038316600090815260046020526040902054828101115b15610589576001600160a01b0380851660008181526004602081815260408084208054899003905560058252808420338552825280842080548990039055948816808452918152918490208054870190558351868152935190937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92908290030190a350600161058d565b5060005b9392505050565b601281565b6001600160a01b031660009081526004602052604090205490565b6000805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561040c5780601f106103e15761010080835404028352916020019161040c565b33600090815260046020526040812054821180159061062e5750600082115b801561065357506001600160a01b038316600090815260046020526040902054828101115b156106c557336000818152600460209081526040808320805487900390556001600160a01b03871680845292819020805487019055805186815290519293927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a3506001610475565b506000610475565b6003546001600160a01b0316331480156106f15750600354600160a01b900460ff16155b1561075f57815161070990600090602085019061078f565b50825161071d90600190602086019061078f565b50670de0b6b3a764000081026002819055600380546001600160a01b0316600090815260046020526040902091909155805460ff60a01b1916600160a01b1790555b505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106107d057805160ff19168380011785556107fd565b828001600101855582156107fd579182015b828111156107fd5782518255916020019190600101906107e2565b5061080992915061080d565b5090565b61047f91905b80821115610809576000815560010161081356fea26469706673582212205b8878f5587a0571ced97bd287c020c37afa59d79a69a76edfcff817bbe1af8a64736f6c63430006010033282128676e2e617661696c61626c6542616c616e63654f66285f66726f6d29203e3d206d6e65546f4275726e2929a2646970667358221220df52431f93542240f931dfda921876499acbebdc3bdb5262ea086f4d7f7768d464736f6c63430006010033