Overview
Max Total Supply
107,142,857 COIN
Holders
4,450 (0.00%)
Transfers
-
0
Market
Onchain Market Cap
-
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
| # | Exchange | Pair | Price | 24H Volume | % Volume |
|---|
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
CoinvestToken
Compiler Version
v0.4.25+commit.59dbf8f1
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2018-11-04
*/
pragma solidity ^0.4.24;
/**
* @title SafeMath
* @dev Math operations with safety checks that throw on error
*/
library SafeMathLib{
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a * b;
assert(a == 0 || c / a == b);
return c;
}
function div(uint256 a, uint256 b) internal pure returns (uint256) {
// assert(b > 0); // Solidity automatically throws when dividing by 0
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
assert(b <= a);
return a - b;
}
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
assert(c >= a);
return c;
}
}
/**
* @title Ownable
* @dev The Ownable contract has an owner address, and provides basic authorization control
* functions, this simplifies the implementation of "user permissions".
*/
contract Ownable {
address public owner;
address public coinvest;
mapping (address => bool) public admins;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev The Ownable constructor sets the original `owner` of the contract to the sender
* account.
*/
constructor() public {
owner = msg.sender;
coinvest = msg.sender;
admins[owner] = true;
admins[coinvest] = true;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(msg.sender == owner);
_;
}
modifier onlyCoinvest() {
require(msg.sender == coinvest);
_;
}
modifier onlyAdmin() {
require(admins[msg.sender]);
_;
}
/**
* @dev Allows the current owner to transfer control of the contract to a newOwner.
* @param newOwner The address to transfer ownership to.
*/
function transferOwnership(address newOwner) onlyOwner public {
require(newOwner != address(0));
emit OwnershipTransferred(owner, newOwner);
owner = newOwner;
}
/**
* @dev Changes the Coinvest wallet that will receive funds from investment contract.
* @param _newCoinvest The address of the new wallet.
**/
function transferCoinvest(address _newCoinvest)
external
onlyCoinvest
{
require(_newCoinvest != address(0));
coinvest = _newCoinvest;
}
/**
* @dev Used to add admins who are allowed to add funds to the investment contract.
* @param _user The address of the admin to add or remove.
* @param _status True to add the user, False to remove the user.
**/
function alterAdmin(address _user, bool _status)
external
onlyCoinvest
{
require(_user != address(0));
require(_user != coinvest);
admins[_user] = _status;
}
}
/**
* @dev Abstract contract for approveAndCall.
**/
contract ApproveAndCallFallBack {
function receiveApproval(address from, uint256 tokens, address token, bytes data) public;
}
/**
* @title Coinvest COIN Token
* @dev ERC20 contract utilizing ERC865-ish structure (3esmit's implementation with alterations).
* @dev to allow users to pay Ethereum fees in tokens.
**/
contract CoinvestToken is Ownable {
using SafeMathLib for uint256;
string public constant symbol = "COIN";
string public constant name = "Coinvest COIN V3 Token";
uint8 public constant decimals = 18;
uint256 private _totalSupply = 107142857 * (10 ** 18);
// Function sigs to be used within contract for signature recovery.
bytes4 internal constant transferSig = 0xa9059cbb;
bytes4 internal constant approveSig = 0x095ea7b3;
bytes4 internal constant increaseApprovalSig = 0xd73dd623;
bytes4 internal constant decreaseApprovalSig = 0x66188463;
bytes4 internal constant approveAndCallSig = 0xcae9ca51;
bytes4 internal constant revokeHashSig = 0x70de43f1;
// Balances for each account
mapping(address => uint256) balances;
// Owner of account approves the transfer of an amount to another account
mapping(address => mapping (address => uint256)) allowed;
// Keeps track of the last nonce sent from user. Used for delegated functions.
mapping(address => uint256) nonces;
// Mapping of past used hashes: true if already used.
mapping(address => mapping (bytes32 => bool)) invalidHashes;
event Transfer(address indexed from, address indexed to, uint tokens);
event Approval(address indexed from, address indexed spender, uint tokens);
event HashRedeemed(bytes32 indexed txHash, address indexed from);
/**
* @dev Set owner and beginning balance.
**/
constructor()
public
{
balances[msg.sender] = _totalSupply;
}
/**
* @dev approveAndCall reception used primarily to pay gas with other tokens.
**/
function receiveApproval(address _from, uint256 _amount, address _token, bytes _data)
public
{
require(address(this).delegatecall(_data));
_from; _amount; _token;
}
/** ******************************** ERC20 ********************************* **/
/**
* @dev Transfers coins from one address to another.
* @param _to The recipient of the transfer amount.
* @param _amount The amount of tokens to transfer.
**/
function transfer(address _to, uint256 _amount)
public
returns (bool success)
{
require(_transfer(msg.sender, _to, _amount));
return true;
}
/**
* @dev An allowed address can transfer tokens from another's address.
* @param _from The owner of the tokens to be transferred.
* @param _to The address to which the tokens will be transferred.
* @param _amount The amount of tokens to be transferred.
**/
function transferFrom(address _from, address _to, uint _amount)
public
returns (bool success)
{
require(balances[_from] >= _amount && allowed[_from][msg.sender] >= _amount);
allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_amount);
require(_transfer(_from, _to, _amount));
return true;
}
/**
* @dev Approves a wallet to transfer tokens on one's behalf.
* @param _spender The wallet approved to spend tokens.
* @param _amount The amount of tokens approved to spend.
**/
function approve(address _spender, uint256 _amount)
public
returns (bool success)
{
require(_approve(msg.sender, _spender, _amount));
return true;
}
/**
* @dev Increases the allowed amount for spender from msg.sender.
* @param _spender The address to increase allowed amount for.
* @param _amount The amount of tokens to increase allowed amount by.
**/
function increaseApproval(address _spender, uint256 _amount)
public
returns (bool success)
{
require(_increaseApproval(msg.sender, _spender, _amount));
return true;
}
/**
* @dev Decreases the allowed amount for spender from msg.sender.
* @param _spender The address to decrease allowed amount for.
* @param _amount The amount of tokens to decrease allowed amount by.
**/
function decreaseApproval(address _spender, uint256 _amount)
public
returns (bool success)
{
require(_decreaseApproval(msg.sender, _spender, _amount));
return true;
}
/**
* @dev Used to approve an address and call a function on it in the same transaction.
* @dev _spender The address to be approved to spend COIN.
* @dev _amount The amount of COIN to be approved to spend.
* @dev _data The data to send to the called contract.
**/
function approveAndCall(address _spender, uint256 _amount, bytes _data)
public
returns (bool success)
{
require(_approve(msg.sender, _spender, _amount));
ApproveAndCallFallBack(_spender).receiveApproval(msg.sender, _amount, address(this), _data);
return true;
}
/** ****************************** Internal ******************************** **/
/**
* @dev Internal transfer for all functions that transfer.
* @param _from The address that is transferring coins.
* @param _to The receiving address of the coins.
* @param _amount The amount of coins being transferred.
**/
function _transfer(address _from, address _to, uint256 _amount)
internal
returns (bool success)
{
require (_to != address(0), "Invalid transfer recipient address.");
require(balances[_from] >= _amount, "Sender does not have enough balance.");
balances[_from] = balances[_from].sub(_amount);
balances[_to] = balances[_to].add(_amount);
emit Transfer(_from, _to, _amount);
return true;
}
/**
* @dev Internal approve for all functions that require an approve.
* @param _owner The owner who is allowing spender to use their balance.
* @param _spender The wallet approved to spend tokens.
* @param _amount The amount of tokens approved to spend.
**/
function _approve(address _owner, address _spender, uint256 _amount)
internal
returns (bool success)
{
allowed[_owner][_spender] = _amount;
emit Approval(_owner, _spender, _amount);
return true;
}
/**
* @dev Increases the allowed by "_amount" for "_spender" from "owner"
* @param _owner The address that tokens may be transferred from.
* @param _spender The address that may transfer these tokens.
* @param _amount The amount of tokens to transfer.
**/
function _increaseApproval(address _owner, address _spender, uint256 _amount)
internal
returns (bool success)
{
allowed[_owner][_spender] = allowed[_owner][_spender].add(_amount);
emit Approval(_owner, _spender, allowed[_owner][_spender]);
return true;
}
/**
* @dev Decreases the allowed by "_amount" for "_spender" from "_owner"
* @param _owner The owner of the tokens to decrease allowed for.
* @param _spender The spender whose allowed will decrease.
* @param _amount The amount of tokens to decrease allowed by.
**/
function _decreaseApproval(address _owner, address _spender, uint256 _amount)
internal
returns (bool success)
{
if (allowed[_owner][_spender] <= _amount) allowed[_owner][_spender] = 0;
else allowed[_owner][_spender] = allowed[_owner][_spender].sub(_amount);
emit Approval(_owner, _spender, allowed[_owner][_spender]);
return true;
}
/** ************************ Delegated Functions *************************** **/
/**
* @dev Called by delegate with a signed hash of the transaction data to allow a user
* @dev to transfer tokens without paying gas in Ether (they pay in COIN instead).
* @param _signature Signed hash of data for this transfer.
* @param _to The address to transfer COIN to.
* @param _value The amount of COIN to transfer.
* @param _gasPrice Price (IN COIN) that will be paid per unit of gas by user to "delegate".
* @param _nonce Nonce of the user's new transaction.
**/
function transferPreSigned(
bytes _signature,
address _to,
uint256 _value,
uint256 _gasPrice,
uint256 _nonce)
public
returns (bool)
{
// Log starting gas left of transaction for later gas price calculations.
uint256 gas = gasleft();
// Recover signer address from signature; ensure address is valid.
address from = recoverPreSigned(_signature, transferSig, _to, _value, "", _gasPrice, _nonce);
require(from != address(0), "Invalid signature provided.");
// Require the hash has not been used, declare it used, increment nonce.
bytes32 txHash = getPreSignedHash(transferSig, _to, _value, "", _gasPrice, _nonce);
require(!invalidHashes[from][txHash], "Transaction has already been executed.");
invalidHashes[from][txHash] = true;
nonces[from]++;
// Internal transfer.
require(_transfer(from, _to, _value));
// If the delegate is charging, pay them for gas in COIN.
if (_gasPrice > 0) {
// 35000 because of base fee of 21000 and ~14000 for the fee transfer.
gas = 35000 + gas.sub(gasleft());
require(_transfer(from, tx.origin, _gasPrice.mul(gas)), "Gas cost could not be paid.");
}
emit HashRedeemed(txHash, from);
return true;
}
/**
* @dev Called by a delegate with signed hash to approve a transaction for user.
* @dev All variables equivalent to transfer except _to:
* @param _to The address that will be approved to transfer COIN from user's wallet.
**/
function approvePreSigned(
bytes _signature,
address _to,
uint256 _value,
uint256 _gasPrice,
uint256 _nonce)
public
returns (bool)
{
uint256 gas = gasleft();
address from = recoverPreSigned(_signature, approveSig, _to, _value, "", _gasPrice, _nonce);
require(from != address(0), "Invalid signature provided.");
bytes32 txHash = getPreSignedHash(approveSig, _to, _value, "", _gasPrice, _nonce);
require(!invalidHashes[from][txHash], "Transaction has already been executed.");
invalidHashes[from][txHash] = true;
nonces[from]++;
require(_approve(from, _to, _value));
if (_gasPrice > 0) {
gas = 35000 + gas.sub(gasleft());
require(_transfer(from, tx.origin, _gasPrice.mul(gas)), "Gas cost could not be paid.");
}
emit HashRedeemed(txHash, from);
return true;
}
/**
* @dev Used to increase the amount allowed for "_to" to spend from "from"
* @dev A bare approve allows potentially nasty race conditions when using a delegate.
**/
function increaseApprovalPreSigned(
bytes _signature,
address _to,
uint256 _value,
uint256 _gasPrice,
uint256 _nonce)
public
returns (bool)
{
uint256 gas = gasleft();
address from = recoverPreSigned(_signature, increaseApprovalSig, _to, _value, "", _gasPrice, _nonce);
require(from != address(0), "Invalid signature provided.");
bytes32 txHash = getPreSignedHash(increaseApprovalSig, _to, _value, "", _gasPrice, _nonce);
require(!invalidHashes[from][txHash], "Transaction has already been executed.");
invalidHashes[from][txHash] = true;
nonces[from]++;
require(_increaseApproval(from, _to, _value));
if (_gasPrice > 0) {
gas = 35000 + gas.sub(gasleft());
require(_transfer(from, tx.origin, _gasPrice.mul(gas)), "Gas cost could not be paid.");
}
emit HashRedeemed(txHash, from);
return true;
}
/**
* @dev Added for the same reason as increaseApproval. Decreases to 0 if "_value" is greater than allowed.
**/
function decreaseApprovalPreSigned(
bytes _signature,
address _to,
uint256 _value,
uint256 _gasPrice,
uint256 _nonce)
public
returns (bool)
{
uint256 gas = gasleft();
address from = recoverPreSigned(_signature, decreaseApprovalSig, _to, _value, "", _gasPrice, _nonce);
require(from != address(0), "Invalid signature provided.");
bytes32 txHash = getPreSignedHash(decreaseApprovalSig, _to, _value, "", _gasPrice, _nonce);
require(!invalidHashes[from][txHash], "Transaction has already been executed.");
invalidHashes[from][txHash] = true;
nonces[from]++;
require(_decreaseApproval(from, _to, _value));
if (_gasPrice > 0) {
gas = 35000 + gas.sub(gasleft());
require(_transfer(from, tx.origin, _gasPrice.mul(gas)), "Gas cost could not be paid.");
}
emit HashRedeemed(txHash, from);
return true;
}
/**
* @dev approveAndCallPreSigned allows a user to approve a contract and call a function on it
* @dev in the same transaction. As with the other presigneds, a delegate calls this with signed data from user.
* @dev This function is the big reason we're using gas price and calculating gas use.
* @dev Using this with the investment contract can result in varying gas costs.
* @param _extraData The data to send to the contract.
**/
function approveAndCallPreSigned(
bytes _signature,
address _to,
uint256 _value,
bytes _extraData,
uint256 _gasPrice,
uint256 _nonce)
public
returns (bool)
{
uint256 gas = gasleft();
address from = recoverPreSigned(_signature, approveAndCallSig, _to, _value, _extraData, _gasPrice, _nonce);
require(from != address(0), "Invalid signature provided.");
bytes32 txHash = getPreSignedHash(approveAndCallSig, _to, _value, _extraData, _gasPrice, _nonce);
require(!invalidHashes[from][txHash], "Transaction has already been executed.");
invalidHashes[from][txHash] = true;
nonces[from]++;
if (_value > 0) require(_approve(from, _to, _value));
ApproveAndCallFallBack(_to).receiveApproval(from, _value, address(this), _extraData);
if (_gasPrice > 0) {
gas = 35000 + gas.sub(gasleft());
require(_transfer(from, tx.origin, _gasPrice.mul(gas)), "Gas cost could not be paid.");
}
emit HashRedeemed(txHash, from);
return true;
}
/** *************************** Revoke PreSigned ************************** **/
/**
* @dev Revoke hash without going through a delegate.
* @param _hashToRevoke The hash that you no longer want to be used.
**/
function revokeHash(bytes32 _hashToRevoke)
public
returns (bool)
{
invalidHashes[msg.sender][_hashToRevoke] = true;
nonces[msg.sender]++;
return true;
}
/**
* @dev Revoke hash through a delegate.
* @param _signature The signature allowing this revocation.
* @param _hashToRevoke The hash that you would like revoked.
* @param _gasPrice The amount of token wei to be paid for each uint of gas.
**/
function revokeHashPreSigned(
bytes _signature,
bytes32 _hashToRevoke,
uint256 _gasPrice)
public
returns (bool)
{
uint256 gas = gasleft();
address from = recoverRevokeHash(_signature, _hashToRevoke, _gasPrice);
require(from != address(0), "Invalid signature provided.");
bytes32 txHash = getRevokeHash(_hashToRevoke, _gasPrice);
require(!invalidHashes[from][txHash], "Transaction has already been executed.");
invalidHashes[from][txHash] = true;
nonces[from]++;
invalidHashes[from][_hashToRevoke] = true;
if (_gasPrice > 0) {
gas = 35000 + gas.sub(gasleft());
require(_transfer(from, tx.origin, _gasPrice.mul(gas)), "Gas cost could not be paid.");
}
emit HashRedeemed(txHash, from);
return true;
}
/**
* @dev Get hash for a revocation.
* @param _hashToRevoke The signature to be revoked.
* @param _gasPrice The amount to be paid to delegate for sending this tx.
**/
function getRevokeHash(bytes32 _hashToRevoke, uint256 _gasPrice)
public
view
returns (bytes32 txHash)
{
return keccak256(abi.encodePacked(address(this), revokeHashSig, _hashToRevoke, _gasPrice));
}
/**
* @dev Recover the address from a revocation hash.
* @param _hashToRevoke The hash to be revoked.
* @param _signature The signature allowing this revocation.
* @param _gasPrice The amount of token wei to be paid for each unit of gas.
**/
function recoverRevokeHash(bytes _signature, bytes32 _hashToRevoke, uint256 _gasPrice)
public
view
returns (address from)
{
return ecrecoverFromSig(getSignHash(getRevokeHash(_hashToRevoke, _gasPrice)), _signature);
}
/** ************************** PreSigned Constants ************************ **/
/**
* @dev Used in frontend and contract to get hashed data of any given pre-signed transaction.
* @param _to The address to transfer COIN to.
* @param _value The amount of COIN to be transferred.
* @param _extraData Extra data of tx if needed. Transfers and approves will leave this null.
* @param _function Function signature of the pre-signed function being used.
* @param _gasPrice The agreed-upon amount of COIN to be paid per unit of gas.
* @param _nonce The user's nonce of the new transaction.
**/
function getPreSignedHash(
bytes4 _function,
address _to,
uint256 _value,
bytes _extraData,
uint256 _gasPrice,
uint256 _nonce)
public
view
returns (bytes32 txHash)
{
return keccak256(abi.encodePacked(address(this), _function, _to, _value, _extraData, _gasPrice, _nonce));
}
/**
* @dev Recover an address from a signed pre-signed hash.
* @param _sig The signed hash.
* @param _function The function signature for function being called.
* @param _to The address to transfer/approve/transferFrom/etc. tokens to.
* @param _value The amont of tokens to transfer/approve/etc.
* @param _extraData The extra data included in the transaction, if any.
* @param _gasPrice The amount of token wei to be paid to the delegate for each unit of gas.
* @param _nonce The user's nonce for this transaction.
**/
function recoverPreSigned(
bytes _sig,
bytes4 _function,
address _to,
uint256 _value,
bytes _extraData,
uint256 _gasPrice,
uint256 _nonce)
public
view
returns (address recovered)
{
return ecrecoverFromSig(getSignHash(getPreSignedHash(_function, _to, _value, _extraData, _gasPrice, _nonce)), _sig);
}
/**
* @dev Add signature prefix to hash for recovery à la ERC191.
* @param _hash The hashed transaction to add signature prefix to.
**/
function getSignHash(bytes32 _hash)
public
pure
returns (bytes32 signHash)
{
return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", _hash));
}
/**
* @dev Helps to reduce stack depth problems for delegations. Thank you to Bokky for this!
* @param hash The hash of signed data for the transaction.
* @param sig Contains r, s, and v for recovery of address from the hash.
**/
function ecrecoverFromSig(bytes32 hash, bytes sig)
public
pure
returns (address recoveredAddress)
{
bytes32 r;
bytes32 s;
uint8 v;
if (sig.length != 65) return address(0);
assembly {
r := mload(add(sig, 32))
s := mload(add(sig, 64))
// Here we are loading the last 32 bytes. We exploit the fact that 'mload' will pad with zeroes if we overread.
// There is no 'mload8' to do this, but that would be nicer.
v := byte(0, mload(add(sig, 96)))
}
// Albeit non-transactional signatures are not specified by the YP, one would expect it to match the YP range of [27, 28]
// geth uses [0, 1] and some clients have followed. This might change, see https://github.com/ethereum/go-ethereum/issues/2053
if (v < 27) v += 27;
if (v != 27 && v != 28) return address(0);
return ecrecover(hash, v, r, s);
}
/**
* @dev Frontend queries to find the next nonce of the user so they can find the new nonce to send.
* @param _owner Address that will be sending the COIN.
**/
function getNonce(address _owner)
external
view
returns (uint256 nonce)
{
return nonces[_owner];
}
/** ****************************** Constants ******************************* **/
/**
* @dev Return total supply of token.
**/
function totalSupply()
external
view
returns (uint256)
{
return _totalSupply;
}
/**
* @dev Return balance of a certain address.
* @param _owner The address whose balance we want to check.
**/
function balanceOf(address _owner)
external
view
returns (uint256)
{
return balances[_owner];
}
/**
* @dev Allowed amount for a user to spend of another's tokens.
* @param _owner The owner of the tokens approved to spend.
* @param _spender The address of the user allowed to spend the tokens.
**/
function allowance(address _owner, address _spender)
external
view
returns (uint256)
{
return allowed[_owner][_spender];
}
/** ****************************** onlyOwner ******************************* **/
/**
* @dev Allow the owner to take ERC20 tokens off of this contract if they are accidentally sent.
**/
function tokenEscape(address _tokenContract)
external
onlyOwner
{
CoinvestToken lostToken = CoinvestToken(_tokenContract);
uint256 stuckTokens = lostToken.balanceOf(address(this));
lostToken.transfer(owner, stuckTokens);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"coinvest","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_amount","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_sig","type":"bytes"},{"name":"_function","type":"bytes4"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_extraData","type":"bytes"},{"name":"_gasPrice","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"recoverPreSigned","outputs":[{"name":"recovered","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_user","type":"address"},{"name":"_status","type":"bool"}],"name":"alterAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_signature","type":"bytes"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_gasPrice","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"transferPreSigned","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"getNonce","outputs":[{"name":"nonce","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenContract","type":"address"}],"name":"tokenEscape","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"admins","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_signature","type":"bytes"},{"name":"_hashToRevoke","type":"bytes32"},{"name":"_gasPrice","type":"uint256"}],"name":"recoverRevokeHash","outputs":[{"name":"from","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_signature","type":"bytes"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_gasPrice","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"approvePreSigned","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_amount","type":"uint256"}],"name":"decreaseApproval","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_hashToRevoke","type":"bytes32"}],"name":"revokeHash","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_signature","type":"bytes"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_gasPrice","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"decreaseApprovalPreSigned","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_signature","type":"bytes"},{"name":"_hashToRevoke","type":"bytes32"},{"name":"_gasPrice","type":"uint256"}],"name":"revokeHashPreSigned","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_token","type":"address"},{"name":"_data","type":"bytes"}],"name":"receiveApproval","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_hashToRevoke","type":"bytes32"},{"name":"_gasPrice","type":"uint256"}],"name":"getRevokeHash","outputs":[{"name":"txHash","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_function","type":"bytes4"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_extraData","type":"bytes"},{"name":"_gasPrice","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"getPreSignedHash","outputs":[{"name":"txHash","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_signature","type":"bytes"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_gasPrice","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"increaseApprovalPreSigned","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_hash","type":"bytes32"}],"name":"getSignHash","outputs":[{"name":"signHash","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_signature","type":"bytes"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_extraData","type":"bytes"},{"name":"_gasPrice","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"approveAndCallPreSigned","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_data","type":"bytes"}],"name":"approveAndCall","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"hash","type":"bytes32"},{"name":"sig","type":"bytes"}],"name":"ecrecoverFromSig","outputs":[{"name":"recoveredAddress","type":"address"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_amount","type":"uint256"}],"name":"increaseApproval","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newCoinvest","type":"address"}],"name":"transferCoinvest","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"tokens","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"tokens","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"txHash","type":"bytes32"},{"indexed":true,"name":"from","type":"address"}],"name":"HashRedeemed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]Contract Creation Code
60806040526a58a061ea91aa7f2584000060035534801561001f57600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600260008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160026000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600354600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614904806101e96000396000f3006080604052600436106101ac576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146101b15780630958a9f314610241578063095ea7b31461029857806309ea63e3146102fd57806310840303146104535780631296830d146104a257806318160ddd1461056157806323b872dd1461058c5780632d0335ab14610611578063313ce567146106685780633f45440614610699578063429b62e5146106dc578063476e492f14610737578063617b390b146107f857806366188463146108b757806370a082311461091c57806370de43f1146109735780638be52783146109bc5780638da5cb5b14610a7b5780638e421f1614610ad25780638f4ffcb114610b6b57806395d89b4114610c1e578063a59b3d4614610cae578063a9059cbb14610d05578063a9a0b49514610d6a578063adb8249e14610e56578063b15aa5b714610f15578063c8d4b38914610f62578063cae9ca5114611067578063d4acaf6c14611112578063d73dd623146111c9578063dd62ed3e1461122e578063dfb6c468146112a5578063f2fde38b146112e8575b600080fd5b3480156101bd57600080fd5b506101c661132b565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102065780820151818401526020810190506101eb565b50505050905090810190601f1680156102335780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561024d57600080fd5b50610256611364565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102a457600080fd5b506102e3600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061138a565b604051808215151515815260200191505060405180910390f35b34801561030957600080fd5b50610411600480360381019080803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929080359060200190929190803590602001909291905050506113ac565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561045f57600080fd5b506104a0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506113da565b005b3480156104ae57600080fd5b50610547600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919050505061152a565b604051808215151515815260200191505060405180910390f35b34801561056d57600080fd5b50610576611942565b6040518082815260200191505060405180910390f35b34801561059857600080fd5b506105f7600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061194c565b604051808215151515815260200191505060405180910390f35b34801561061d57600080fd5b50610652600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b54565b6040518082815260200191505060405180910390f35b34801561067457600080fd5b5061067d611b9d565b604051808260ff1660ff16815260200191505060405180910390f35b3480156106a557600080fd5b506106da600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ba2565b005b3480156106e857600080fd5b5061071d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611de0565b604051808215151515815260200191505060405180910390f35b34801561074357600080fd5b506107b6600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803560001916906020019092919080359060200190929190505050611e00565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561080457600080fd5b5061089d600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190505050611e26565b604051808215151515815260200191505060405180910390f35b3480156108c357600080fd5b50610902600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061223e565b604051808215151515815260200191505060405180910390f35b34801561092857600080fd5b5061095d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612260565b6040518082815260200191505060405180910390f35b34801561097f57600080fd5b506109a260048036038101908080356000191690602001909291905050506122a9565b604051808215151515815260200191505060405180910390f35b3480156109c857600080fd5b50610a61600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190505050612374565b604051808215151515815260200191505060405180910390f35b348015610a8757600080fd5b50610a9061278c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610ade57600080fd5b50610b51600480360381019080803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192908035600019169060200190929190803590602001909291905050506127b1565b604051808215151515815260200191505060405180910390f35b348015610b7757600080fd5b50610c1c600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050612bb4565b005b348015610c2a57600080fd5b50610c33612c4a565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610c73578082015181840152602081019050610c58565b50505050905090810190601f168015610ca05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610cba57600080fd5b50610ce7600480360381019080803560001916906020019092919080359060200190929190505050612c83565b60405180826000191660001916815260200191505060405180910390f35b348015610d1157600080fd5b50610d50600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612dcb565b604051808215151515815260200191505060405180910390f35b348015610d7657600080fd5b50610e3860048036038101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192908035906020019092919080359060200190929190505050612ded565b60405180826000191660001916815260200191505060405180910390f35b348015610e6257600080fd5b50610efb600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190505050612fae565b604051808215151515815260200191505060405180910390f35b348015610f2157600080fd5b50610f4460048036038101908080356000191690602001909291905050506133c6565b60405180826000191660001916815260200191505060405180910390f35b348015610f6e57600080fd5b5061104d600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192908035906020019092919080359060200190929190505050613481565b604051808215151515815260200191505060405180910390f35b34801561107357600080fd5b506110f8600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506139e0565b604051808215151515815260200191505060405180910390f35b34801561111e57600080fd5b506111876004803603810190808035600019169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050613b5f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156111d557600080fd5b50611214600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613c57565b604051808215151515815260200191505060405180910390f35b34801561123a57600080fd5b5061128f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613c79565b6040518082815260200191505060405180910390f35b3480156112b157600080fd5b506112e6600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613d00565b005b3480156112f457600080fd5b50611329600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613ddc565b005b6040805190810160405280601681526020017f436f696e7665737420434f494e20563320546f6b656e0000000000000000000081525081565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611397338484613f31565b15156113a257600080fd5b6001905092915050565b60006113cd6113c76113c2898989898989612ded565b6133c6565b89613b5f565b9050979650505050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561143657600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561147257600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156114cf57600080fd5b80600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000806000805a92506115758963a9059cbb7c0100000000000000000000000000000000000000000000000000000000028a8a60206040519081016040528060008152508b8b6113ac565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561161c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f496e76616c6964207369676e61747572652070726f76696465642e000000000081525060200191505060405180910390fd5b61165d63a9059cbb7c010000000000000000000000000000000000000000000000000000000002898960206040519081016040528060008152508a8a612ded565b9050600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000826000191660001916815260200190815260200160002060009054906101000a900460ff16151515611760576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f5472616e73616374696f6e2068617320616c7265616479206265656e2065786581526020017f63757465642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000836000191660001916815260200190815260200160002060006101000a81548160ff021916908315150217905550600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600101919050555061182b828989614024565b151561183657600080fd5b60008611156118ea576118525a8461436790919063ffffffff16565b6188b80192506118758232611870868a61438090919063ffffffff16565b614024565b15156118e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f47617320636f737420636f756c64206e6f7420626520706169642e000000000081525060200191505060405180910390fd5b5b8173ffffffffffffffffffffffffffffffffffffffff1681600019167ff4a65fdaee7ca2336b6b5ea720055552af3fd371f7ebe46b8c83fa89d8c733f860405160405180910390a36001935050505095945050505050565b6000600354905090565b600081600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410158015611a19575081600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b1515611a2457600080fd5b611ab382600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461436790919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611b3e848484614024565b1515611b4957600080fd5b600190509392505050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601281565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611c0057600080fd5b8291508173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b158015611c9e57600080fd5b505af1158015611cb2573d6000803e3d6000fd5b505050506040513d6020811015611cc857600080fd5b810190808051906020019092919050505090508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611d9f57600080fd5b505af1158015611db3573d6000803e3d6000fd5b505050506040513d6020811015611dc957600080fd5b810190808051906020019092919050505050505050565b60026020528060005260406000206000915054906101000a900460ff1681565b6000611e1d611e17611e128585612c83565b6133c6565b85613b5f565b90509392505050565b6000806000805a9250611e718963095ea7b37c0100000000000000000000000000000000000000000000000000000000028a8a60206040519081016040528060008152508b8b6113ac565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611f18576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f496e76616c6964207369676e61747572652070726f76696465642e000000000081525060200191505060405180910390fd5b611f5963095ea7b37c010000000000000000000000000000000000000000000000000000000002898960206040519081016040528060008152508a8a612ded565b9050600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000826000191660001916815260200190815260200160002060009054906101000a900460ff1615151561205c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f5472616e73616374696f6e2068617320616c7265616479206265656e2065786581526020017f63757465642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000836000191660001916815260200190815260200160002060006101000a81548160ff021916908315150217905550600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001019190505550612127828989613f31565b151561213257600080fd5b60008611156121e65761214e5a8461436790919063ffffffff16565b6188b8019250612171823261216c868a61438090919063ffffffff16565b614024565b15156121e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f47617320636f737420636f756c64206e6f7420626520706169642e000000000081525060200191505060405180910390fd5b5b8173ffffffffffffffffffffffffffffffffffffffff1681600019167ff4a65fdaee7ca2336b6b5ea720055552af3fd371f7ebe46b8c83fa89d8c733f860405160405180910390a36001935050505095945050505050565b600061224b3384846143b3565b151561225657600080fd5b6001905092915050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006001600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000846000191660001916815260200190815260200160002060006101000a81548160ff021916908315150217905550600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600101919050555060019050919050565b6000806000805a92506123bf8963661884637c0100000000000000000000000000000000000000000000000000000000028a8a60206040519081016040528060008152508b8b6113ac565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515612466576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f496e76616c6964207369676e61747572652070726f76696465642e000000000081525060200191505060405180910390fd5b6124a763661884637c010000000000000000000000000000000000000000000000000000000002898960206040519081016040528060008152508a8a612ded565b9050600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000826000191660001916815260200190815260200160002060009054906101000a900460ff161515156125aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f5472616e73616374696f6e2068617320616c7265616479206265656e2065786581526020017f63757465642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000836000191660001916815260200190815260200160002060006101000a81548160ff021916908315150217905550600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919060010191905055506126758289896143b3565b151561268057600080fd5b60008611156127345761269c5a8461436790919063ffffffff16565b6188b80192506126bf82326126ba868a61438090919063ffffffff16565b614024565b1515612733576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f47617320636f737420636f756c64206e6f7420626520706169642e000000000081525060200191505060405180910390fd5b5b8173ffffffffffffffffffffffffffffffffffffffff1681600019167ff4a65fdaee7ca2336b6b5ea720055552af3fd371f7ebe46b8c83fa89d8c733f860405160405180910390a36001935050505095945050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000805a92506127c5878787611e00565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561286c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f496e76616c6964207369676e61747572652070726f76696465642e000000000081525060200191505060405180910390fd5b6128768686612c83565b9050600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000826000191660001916815260200190815260200160002060009054906101000a900460ff16151515612979576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f5472616e73616374696f6e2068617320616c7265616479206265656e2065786581526020017f63757465642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000836000191660001916815260200190815260200160002060006101000a81548160ff021916908315150217905550600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919060010191905055506001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000886000191660001916815260200190815260200160002060006101000a81548160ff0219169083151502179055506000851115612b5e57612ac65a8461436790919063ffffffff16565b6188b8019250612ae98232612ae4868961438090919063ffffffff16565b614024565b1515612b5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f47617320636f737420636f756c64206e6f7420626520706169642e000000000081525060200191505060405180910390fd5b5b8173ffffffffffffffffffffffffffffffffffffffff1681600019167ff4a65fdaee7ca2336b6b5ea720055552af3fd371f7ebe46b8c83fa89d8c733f860405160405180910390a3600193505050509392505050565b3073ffffffffffffffffffffffffffffffffffffffff168160405180828051906020019080838360005b83811015612bf9578082015181840152602081019050612bde565b50505050905090810190601f168015612c265780820380516001836020036101000a031916815260200191505b50915050600060405180830381855af49150501515612c4457600080fd5b50505050565b6040805190810160405280600481526020017f434f494e0000000000000000000000000000000000000000000000000000000081525081565b6000306370de43f17c0100000000000000000000000000000000000000000000000000000000028484604051602001808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260040183600019166000191681526020018281526020019450505050506040516020818303038152906040526040518082805190602001908083835b602083101515612d965780518252602082019150602081019050602083039250612d71565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020905092915050565b6000612dd8338484614024565b1515612de357600080fd5b6001905092915050565b600030878787878787604051602001808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401877bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526004018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140185815260200184805190602001908083835b602083101515612efa5780518252602082019150602081019050602083039250612ed5565b6001836020036101000a0380198251168184511680821785525050505050509050018381526020018281526020019750505050505050506040516020818303038152906040526040518082805190602001908083835b602083101515612f755780518252602082019150602081019050602083039250612f50565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902090509695505050505050565b6000806000805a9250612ff98963d73dd6237c0100000000000000000000000000000000000000000000000000000000028a8a60206040519081016040528060008152508b8b6113ac565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156130a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f496e76616c6964207369676e61747572652070726f76696465642e000000000081525060200191505060405180910390fd5b6130e163d73dd6237c010000000000000000000000000000000000000000000000000000000002898960206040519081016040528060008152508a8a612ded565b9050600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000826000191660001916815260200190815260200160002060009054906101000a900460ff161515156131e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f5472616e73616374696f6e2068617320616c7265616479206265656e2065786581526020017f63757465642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000836000191660001916815260200190815260200160002060006101000a81548160ff021916908315150217905550600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919060010191905055506132af8289896146bd565b15156132ba57600080fd5b600086111561336e576132d65a8461436790919063ffffffff16565b6188b80192506132f982326132f4868a61438090919063ffffffff16565b614024565b151561336d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f47617320636f737420636f756c64206e6f7420626520706169642e000000000081525060200191505060405180910390fd5b5b8173ffffffffffffffffffffffffffffffffffffffff1681600019167ff4a65fdaee7ca2336b6b5ea720055552af3fd371f7ebe46b8c83fa89d8c733f860405160405180910390a36001935050505095945050505050565b60008160405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c0182600019166000191681526020019150506040516020818303038152906040526040518082805190602001908083835b60208310151561344d5780518252602082019150602081019050602083039250613428565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209050919050565b6000806000805a92506134bc8a63cae9ca517c0100000000000000000000000000000000000000000000000000000000028b8b8b8b8b6113ac565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515613563576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f496e76616c6964207369676e61747572652070726f76696465642e000000000081525060200191505060405180910390fd5b61359463cae9ca517c0100000000000000000000000000000000000000000000000000000000028a8a8a8a8a612ded565b9050600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000826000191660001916815260200190815260200160002060009054906101000a900460ff16151515613697576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f5472616e73616374696f6e2068617320616c7265616479206265656e2065786581526020017f63757465642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000836000191660001916815260200190815260200160002060006101000a81548160ff021916908315150217905550600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600101919050555060008811156137775761376b828a8a613f31565b151561377657600080fd5b5b8873ffffffffffffffffffffffffffffffffffffffff16638f4ffcb1838a308b6040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561386c578082015181840152602081019050613851565b50505050905090810190601f1680156138995780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156138bb57600080fd5b505af11580156138cf573d6000803e3d6000fd5b505050506000861115613987576138ef5a8461436790919063ffffffff16565b6188b8019250613912823261390d868a61438090919063ffffffff16565b614024565b1515613986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f47617320636f737420636f756c64206e6f7420626520706169642e000000000081525060200191505060405180910390fd5b5b8173ffffffffffffffffffffffffffffffffffffffff1681600019167ff4a65fdaee7ca2336b6b5ea720055552af3fd371f7ebe46b8c83fa89d8c733f860405160405180910390a3600193505050509695505050505050565b60006139ed338585613f31565b15156139f857600080fd5b8373ffffffffffffffffffffffffffffffffffffffff16638f4ffcb1338530866040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015613aed578082015181840152602081019050613ad2565b50505050905090810190601f168015613b1a5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613b3c57600080fd5b505af1158015613b50573d6000803e3d6000fd5b50505050600190509392505050565b60008060008060418551141515613b795760009350613c4e565b6020850151925060408501519150606085015160001a9050601b8160ff161015613ba457601b810190505b601b8160ff1614158015613bbc5750601c8160ff1614155b15613bca5760009350613c4e565b600186828585604051600081526020016040526040518085600019166000191681526020018460ff1660ff1681526020018360001916600019168152602001826000191660001916815260200194505050505060206040516020810390808403906000865af1158015613c41573d6000803e3d6000fd5b5050506020604051035193505b50505092915050565b6000613c643384846146bd565b1515613c6f57600080fd5b6001905092915050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515613d5c57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515613d9857600080fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515613e3757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515613e7357600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600081600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a3600190509392505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156140f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f496e76616c6964207472616e7366657220726563697069656e7420616464726581526020017f73732e000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b81600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156141cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001807f53656e64657220646f6573206e6f74206861766520656e6f7567682062616c6181526020017f6e63652e0000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b61421f82600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461436790919063ffffffff16565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506142b482600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546148ba90919063ffffffff16565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b600082821115151561437557fe5b818303905092915050565b600080828402905060008414806143a1575082848281151561439e57fe5b04145b15156143a957fe5b8091505092915050565b600081600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115156144c1576000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506145d1565b61455082600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461436790919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600190509392505050565b600061474e82600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546148ba90919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600190509392505050565b60008082840190508381101515156148ce57fe5b80915050929150505600a165627a7a7230582007d68a1f18f53f5415f82453c99a6cc161c73a3b065d675f85b492b37322b8070029
Deployed Bytecode
0x6080604052600436106101ac576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146101b15780630958a9f314610241578063095ea7b31461029857806309ea63e3146102fd57806310840303146104535780631296830d146104a257806318160ddd1461056157806323b872dd1461058c5780632d0335ab14610611578063313ce567146106685780633f45440614610699578063429b62e5146106dc578063476e492f14610737578063617b390b146107f857806366188463146108b757806370a082311461091c57806370de43f1146109735780638be52783146109bc5780638da5cb5b14610a7b5780638e421f1614610ad25780638f4ffcb114610b6b57806395d89b4114610c1e578063a59b3d4614610cae578063a9059cbb14610d05578063a9a0b49514610d6a578063adb8249e14610e56578063b15aa5b714610f15578063c8d4b38914610f62578063cae9ca5114611067578063d4acaf6c14611112578063d73dd623146111c9578063dd62ed3e1461122e578063dfb6c468146112a5578063f2fde38b146112e8575b600080fd5b3480156101bd57600080fd5b506101c661132b565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102065780820151818401526020810190506101eb565b50505050905090810190601f1680156102335780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561024d57600080fd5b50610256611364565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102a457600080fd5b506102e3600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061138a565b604051808215151515815260200191505060405180910390f35b34801561030957600080fd5b50610411600480360381019080803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929080359060200190929190803590602001909291905050506113ac565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561045f57600080fd5b506104a0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506113da565b005b3480156104ae57600080fd5b50610547600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919050505061152a565b604051808215151515815260200191505060405180910390f35b34801561056d57600080fd5b50610576611942565b6040518082815260200191505060405180910390f35b34801561059857600080fd5b506105f7600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061194c565b604051808215151515815260200191505060405180910390f35b34801561061d57600080fd5b50610652600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b54565b6040518082815260200191505060405180910390f35b34801561067457600080fd5b5061067d611b9d565b604051808260ff1660ff16815260200191505060405180910390f35b3480156106a557600080fd5b506106da600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ba2565b005b3480156106e857600080fd5b5061071d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611de0565b604051808215151515815260200191505060405180910390f35b34801561074357600080fd5b506107b6600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803560001916906020019092919080359060200190929190505050611e00565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561080457600080fd5b5061089d600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190505050611e26565b604051808215151515815260200191505060405180910390f35b3480156108c357600080fd5b50610902600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061223e565b604051808215151515815260200191505060405180910390f35b34801561092857600080fd5b5061095d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612260565b6040518082815260200191505060405180910390f35b34801561097f57600080fd5b506109a260048036038101908080356000191690602001909291905050506122a9565b604051808215151515815260200191505060405180910390f35b3480156109c857600080fd5b50610a61600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190505050612374565b604051808215151515815260200191505060405180910390f35b348015610a8757600080fd5b50610a9061278c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610ade57600080fd5b50610b51600480360381019080803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192908035600019169060200190929190803590602001909291905050506127b1565b604051808215151515815260200191505060405180910390f35b348015610b7757600080fd5b50610c1c600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050612bb4565b005b348015610c2a57600080fd5b50610c33612c4a565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610c73578082015181840152602081019050610c58565b50505050905090810190601f168015610ca05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610cba57600080fd5b50610ce7600480360381019080803560001916906020019092919080359060200190929190505050612c83565b60405180826000191660001916815260200191505060405180910390f35b348015610d1157600080fd5b50610d50600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612dcb565b604051808215151515815260200191505060405180910390f35b348015610d7657600080fd5b50610e3860048036038101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192908035906020019092919080359060200190929190505050612ded565b60405180826000191660001916815260200191505060405180910390f35b348015610e6257600080fd5b50610efb600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190505050612fae565b604051808215151515815260200191505060405180910390f35b348015610f2157600080fd5b50610f4460048036038101908080356000191690602001909291905050506133c6565b60405180826000191660001916815260200191505060405180910390f35b348015610f6e57600080fd5b5061104d600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192908035906020019092919080359060200190929190505050613481565b604051808215151515815260200191505060405180910390f35b34801561107357600080fd5b506110f8600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506139e0565b604051808215151515815260200191505060405180910390f35b34801561111e57600080fd5b506111876004803603810190808035600019169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050613b5f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156111d557600080fd5b50611214600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613c57565b604051808215151515815260200191505060405180910390f35b34801561123a57600080fd5b5061128f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613c79565b6040518082815260200191505060405180910390f35b3480156112b157600080fd5b506112e6600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613d00565b005b3480156112f457600080fd5b50611329600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613ddc565b005b6040805190810160405280601681526020017f436f696e7665737420434f494e20563320546f6b656e0000000000000000000081525081565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611397338484613f31565b15156113a257600080fd5b6001905092915050565b60006113cd6113c76113c2898989898989612ded565b6133c6565b89613b5f565b9050979650505050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561143657600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561147257600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156114cf57600080fd5b80600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000806000805a92506115758963a9059cbb7c0100000000000000000000000000000000000000000000000000000000028a8a60206040519081016040528060008152508b8b6113ac565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561161c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f496e76616c6964207369676e61747572652070726f76696465642e000000000081525060200191505060405180910390fd5b61165d63a9059cbb7c010000000000000000000000000000000000000000000000000000000002898960206040519081016040528060008152508a8a612ded565b9050600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000826000191660001916815260200190815260200160002060009054906101000a900460ff16151515611760576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f5472616e73616374696f6e2068617320616c7265616479206265656e2065786581526020017f63757465642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000836000191660001916815260200190815260200160002060006101000a81548160ff021916908315150217905550600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600101919050555061182b828989614024565b151561183657600080fd5b60008611156118ea576118525a8461436790919063ffffffff16565b6188b80192506118758232611870868a61438090919063ffffffff16565b614024565b15156118e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f47617320636f737420636f756c64206e6f7420626520706169642e000000000081525060200191505060405180910390fd5b5b8173ffffffffffffffffffffffffffffffffffffffff1681600019167ff4a65fdaee7ca2336b6b5ea720055552af3fd371f7ebe46b8c83fa89d8c733f860405160405180910390a36001935050505095945050505050565b6000600354905090565b600081600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410158015611a19575081600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b1515611a2457600080fd5b611ab382600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461436790919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611b3e848484614024565b1515611b4957600080fd5b600190509392505050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601281565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611c0057600080fd5b8291508173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b158015611c9e57600080fd5b505af1158015611cb2573d6000803e3d6000fd5b505050506040513d6020811015611cc857600080fd5b810190808051906020019092919050505090508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611d9f57600080fd5b505af1158015611db3573d6000803e3d6000fd5b505050506040513d6020811015611dc957600080fd5b810190808051906020019092919050505050505050565b60026020528060005260406000206000915054906101000a900460ff1681565b6000611e1d611e17611e128585612c83565b6133c6565b85613b5f565b90509392505050565b6000806000805a9250611e718963095ea7b37c0100000000000000000000000000000000000000000000000000000000028a8a60206040519081016040528060008152508b8b6113ac565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611f18576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f496e76616c6964207369676e61747572652070726f76696465642e000000000081525060200191505060405180910390fd5b611f5963095ea7b37c010000000000000000000000000000000000000000000000000000000002898960206040519081016040528060008152508a8a612ded565b9050600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000826000191660001916815260200190815260200160002060009054906101000a900460ff1615151561205c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f5472616e73616374696f6e2068617320616c7265616479206265656e2065786581526020017f63757465642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000836000191660001916815260200190815260200160002060006101000a81548160ff021916908315150217905550600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001019190505550612127828989613f31565b151561213257600080fd5b60008611156121e65761214e5a8461436790919063ffffffff16565b6188b8019250612171823261216c868a61438090919063ffffffff16565b614024565b15156121e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f47617320636f737420636f756c64206e6f7420626520706169642e000000000081525060200191505060405180910390fd5b5b8173ffffffffffffffffffffffffffffffffffffffff1681600019167ff4a65fdaee7ca2336b6b5ea720055552af3fd371f7ebe46b8c83fa89d8c733f860405160405180910390a36001935050505095945050505050565b600061224b3384846143b3565b151561225657600080fd5b6001905092915050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006001600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000846000191660001916815260200190815260200160002060006101000a81548160ff021916908315150217905550600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600101919050555060019050919050565b6000806000805a92506123bf8963661884637c0100000000000000000000000000000000000000000000000000000000028a8a60206040519081016040528060008152508b8b6113ac565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515612466576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f496e76616c6964207369676e61747572652070726f76696465642e000000000081525060200191505060405180910390fd5b6124a763661884637c010000000000000000000000000000000000000000000000000000000002898960206040519081016040528060008152508a8a612ded565b9050600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000826000191660001916815260200190815260200160002060009054906101000a900460ff161515156125aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f5472616e73616374696f6e2068617320616c7265616479206265656e2065786581526020017f63757465642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000836000191660001916815260200190815260200160002060006101000a81548160ff021916908315150217905550600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919060010191905055506126758289896143b3565b151561268057600080fd5b60008611156127345761269c5a8461436790919063ffffffff16565b6188b80192506126bf82326126ba868a61438090919063ffffffff16565b614024565b1515612733576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f47617320636f737420636f756c64206e6f7420626520706169642e000000000081525060200191505060405180910390fd5b5b8173ffffffffffffffffffffffffffffffffffffffff1681600019167ff4a65fdaee7ca2336b6b5ea720055552af3fd371f7ebe46b8c83fa89d8c733f860405160405180910390a36001935050505095945050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000805a92506127c5878787611e00565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561286c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f496e76616c6964207369676e61747572652070726f76696465642e000000000081525060200191505060405180910390fd5b6128768686612c83565b9050600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000826000191660001916815260200190815260200160002060009054906101000a900460ff16151515612979576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f5472616e73616374696f6e2068617320616c7265616479206265656e2065786581526020017f63757465642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000836000191660001916815260200190815260200160002060006101000a81548160ff021916908315150217905550600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919060010191905055506001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000886000191660001916815260200190815260200160002060006101000a81548160ff0219169083151502179055506000851115612b5e57612ac65a8461436790919063ffffffff16565b6188b8019250612ae98232612ae4868961438090919063ffffffff16565b614024565b1515612b5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f47617320636f737420636f756c64206e6f7420626520706169642e000000000081525060200191505060405180910390fd5b5b8173ffffffffffffffffffffffffffffffffffffffff1681600019167ff4a65fdaee7ca2336b6b5ea720055552af3fd371f7ebe46b8c83fa89d8c733f860405160405180910390a3600193505050509392505050565b3073ffffffffffffffffffffffffffffffffffffffff168160405180828051906020019080838360005b83811015612bf9578082015181840152602081019050612bde565b50505050905090810190601f168015612c265780820380516001836020036101000a031916815260200191505b50915050600060405180830381855af49150501515612c4457600080fd5b50505050565b6040805190810160405280600481526020017f434f494e0000000000000000000000000000000000000000000000000000000081525081565b6000306370de43f17c0100000000000000000000000000000000000000000000000000000000028484604051602001808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260040183600019166000191681526020018281526020019450505050506040516020818303038152906040526040518082805190602001908083835b602083101515612d965780518252602082019150602081019050602083039250612d71565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020905092915050565b6000612dd8338484614024565b1515612de357600080fd5b6001905092915050565b600030878787878787604051602001808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401877bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526004018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140185815260200184805190602001908083835b602083101515612efa5780518252602082019150602081019050602083039250612ed5565b6001836020036101000a0380198251168184511680821785525050505050509050018381526020018281526020019750505050505050506040516020818303038152906040526040518082805190602001908083835b602083101515612f755780518252602082019150602081019050602083039250612f50565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902090509695505050505050565b6000806000805a9250612ff98963d73dd6237c0100000000000000000000000000000000000000000000000000000000028a8a60206040519081016040528060008152508b8b6113ac565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156130a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f496e76616c6964207369676e61747572652070726f76696465642e000000000081525060200191505060405180910390fd5b6130e163d73dd6237c010000000000000000000000000000000000000000000000000000000002898960206040519081016040528060008152508a8a612ded565b9050600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000826000191660001916815260200190815260200160002060009054906101000a900460ff161515156131e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f5472616e73616374696f6e2068617320616c7265616479206265656e2065786581526020017f63757465642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000836000191660001916815260200190815260200160002060006101000a81548160ff021916908315150217905550600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919060010191905055506132af8289896146bd565b15156132ba57600080fd5b600086111561336e576132d65a8461436790919063ffffffff16565b6188b80192506132f982326132f4868a61438090919063ffffffff16565b614024565b151561336d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f47617320636f737420636f756c64206e6f7420626520706169642e000000000081525060200191505060405180910390fd5b5b8173ffffffffffffffffffffffffffffffffffffffff1681600019167ff4a65fdaee7ca2336b6b5ea720055552af3fd371f7ebe46b8c83fa89d8c733f860405160405180910390a36001935050505095945050505050565b60008160405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c0182600019166000191681526020019150506040516020818303038152906040526040518082805190602001908083835b60208310151561344d5780518252602082019150602081019050602083039250613428565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209050919050565b6000806000805a92506134bc8a63cae9ca517c0100000000000000000000000000000000000000000000000000000000028b8b8b8b8b6113ac565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515613563576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f496e76616c6964207369676e61747572652070726f76696465642e000000000081525060200191505060405180910390fd5b61359463cae9ca517c0100000000000000000000000000000000000000000000000000000000028a8a8a8a8a612ded565b9050600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000826000191660001916815260200190815260200160002060009054906101000a900460ff16151515613697576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f5472616e73616374696f6e2068617320616c7265616479206265656e2065786581526020017f63757465642e000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000836000191660001916815260200190815260200160002060006101000a81548160ff021916908315150217905550600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600101919050555060008811156137775761376b828a8a613f31565b151561377657600080fd5b5b8873ffffffffffffffffffffffffffffffffffffffff16638f4ffcb1838a308b6040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561386c578082015181840152602081019050613851565b50505050905090810190601f1680156138995780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156138bb57600080fd5b505af11580156138cf573d6000803e3d6000fd5b505050506000861115613987576138ef5a8461436790919063ffffffff16565b6188b8019250613912823261390d868a61438090919063ffffffff16565b614024565b1515613986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f47617320636f737420636f756c64206e6f7420626520706169642e000000000081525060200191505060405180910390fd5b5b8173ffffffffffffffffffffffffffffffffffffffff1681600019167ff4a65fdaee7ca2336b6b5ea720055552af3fd371f7ebe46b8c83fa89d8c733f860405160405180910390a3600193505050509695505050505050565b60006139ed338585613f31565b15156139f857600080fd5b8373ffffffffffffffffffffffffffffffffffffffff16638f4ffcb1338530866040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015613aed578082015181840152602081019050613ad2565b50505050905090810190601f168015613b1a5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613b3c57600080fd5b505af1158015613b50573d6000803e3d6000fd5b50505050600190509392505050565b60008060008060418551141515613b795760009350613c4e565b6020850151925060408501519150606085015160001a9050601b8160ff161015613ba457601b810190505b601b8160ff1614158015613bbc5750601c8160ff1614155b15613bca5760009350613c4e565b600186828585604051600081526020016040526040518085600019166000191681526020018460ff1660ff1681526020018360001916600019168152602001826000191660001916815260200194505050505060206040516020810390808403906000865af1158015613c41573d6000803e3d6000fd5b5050506020604051035193505b50505092915050565b6000613c643384846146bd565b1515613c6f57600080fd5b6001905092915050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515613d5c57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515613d9857600080fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515613e3757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515613e7357600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600081600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a3600190509392505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156140f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f496e76616c6964207472616e7366657220726563697069656e7420616464726581526020017f73732e000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b81600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156141cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001807f53656e64657220646f6573206e6f74206861766520656e6f7567682062616c6181526020017f6e63652e0000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b61421f82600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461436790919063ffffffff16565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506142b482600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546148ba90919063ffffffff16565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b600082821115151561437557fe5b818303905092915050565b600080828402905060008414806143a1575082848281151561439e57fe5b04145b15156143a957fe5b8091505092915050565b600081600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115156144c1576000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506145d1565b61455082600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461436790919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600190509392505050565b600061474e82600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546148ba90919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600190509392505050565b60008082840190508381101515156148ce57fe5b80915050929150505600a165627a7a7230582007d68a1f18f53f5415f82453c99a6cc161c73a3b065d675f85b492b37322b8070029
Swarm Source
bzzr://07d68a1f18f53f5415f82453c99a6cc161c73a3b065d675f85b492b37322b807
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.
Add Token to MetaMask (Web3)