ERC-20
Source Code
Overview
Max Total Supply
600,000,000 TRVL
Holders
460
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 |
|---|
Contract Name:
TRVLToken
Compiler Version
v0.4.24+commit.e67f0147
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2018-07-28
*/
pragma solidity ^0.4.23;
/**
* @title ERC20Basic
* @dev Simpler version of ERC20 interface
* @dev see https://github.com/ethereum/EIPs/issues/179
*/
contract ERC20Basic {
function totalSupply() public view returns (uint256);
function balanceOf(address who) public view returns (uint256);
function transfer(address to, uint256 value) public returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
}
/**
* @title SafeERC20
* @dev Wrappers around ERC20 operations that throw on failure.
* To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract,
* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
*/
library SafeERC20 {
function safeTransfer(ERC20Basic token, address to, uint256 value) internal {
require(token.transfer(to, value));
}
function safeTransferFrom(
ERC20 token,
address from,
address to,
uint256 value
)
internal
{
require(token.transferFrom(from, to, value));
}
function safeApprove(ERC20 token, address spender, uint256 value) internal {
require(token.approve(spender, value));
}
}
/**
* @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;
event OwnershipRenounced(address indexed previousOwner);
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;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(msg.sender == owner);
_;
}
/**
* @dev Allows the current owner to relinquish control of the contract.
*/
function renounceOwnership() public onlyOwner {
emit OwnershipRenounced(owner);
owner = address(0);
}
/**
* @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) public onlyOwner {
_transferOwnership(_newOwner);
}
/**
* @dev Transfers control of the contract to a newOwner.
* @param _newOwner The address to transfer ownership to.
*/
function _transferOwnership(address _newOwner) internal {
require(_newOwner != address(0));
emit OwnershipTransferred(owner, _newOwner);
owner = _newOwner;
}
}
/// Gives the owner the ability to transfer ownership of the contract to a new
/// address and it requires the owner of the new address to accept the transfer.
/**
* @title Claimable
* @dev Extension for the Ownable contract, where the ownership needs to be claimed.
* This allows the new owner to accept the transfer.
*/
contract Claimable is Ownable {
address public pendingOwner;
/**
* @dev Modifier throws if called by any account other than the pendingOwner.
*/
modifier onlyPendingOwner() {
require(msg.sender == pendingOwner);
_;
}
/**
* @dev Allows the current owner to set the pendingOwner address.
* @param newOwner The address to transfer ownership to.
*/
function transferOwnership(address newOwner) onlyOwner public {
pendingOwner = newOwner;
}
/**
* @dev Allows the pendingOwner address to finalize the transfer.
*/
function claimOwnership() onlyPendingOwner public {
emit OwnershipTransferred(owner, pendingOwner);
owner = pendingOwner;
pendingOwner = address(0);
}
}
/// @title Admin functionality for TRVLToken.sol contracts.
contract Admin is Claimable{
mapping(address => bool) public admins;
event AdminAdded(address added);
event AdminRemoved(address removed);
/// @dev Verifies the msg.sender is a member of the admins mapping. Owner is by default an admin.
modifier onlyAdmin() {
require(admins[msg.sender] || msg.sender == owner, "msg.sender is not an admin!");
_;
}
/// @notice Adds a list of addresses to the admins list.
/// @dev Requires that the msg.sender is the Owner. Emits an event on success.
/// @param _admins The list of addresses to add to the admins mapping.
function addAddressesToAdmins(address[] _admins) external onlyOwner {
require(_admins.length > 0, "Cannot add an empty list to admins!");
for (uint256 i = 0; i < _admins.length; ++i) {
address user = _admins[i];
require(user != address(0), "Cannot add the zero address to admins!");
if (!admins[user]) {
admins[user] = true;
emit AdminAdded(user);
}
}
}
/// @notice Removes a list of addresses from the admins list.
/// @dev Requires that the msg.sender is an Owner. It is possible for the admins list to be empty, this is a fail safe
/// in the event the admin accounts are compromised. The owner has the ability to lockout the server access from which
/// TravelBlock is processing payments. Emits an event on success.
/// @param _admins The list of addresses to remove from the admins mapping.
function removeAddressesFromAdmins(address[] _admins) external onlyOwner {
require(_admins.length > 0, "Cannot remove an empty list to admins!");
for (uint256 i = 0; i < _admins.length; ++i) {
address user = _admins[i];
if (admins[user]) {
admins[user] = false;
emit AdminRemoved(user);
}
}
}
}
/// @title Whitelist configurations for the TRVL Token contract.
contract Whitelist is Admin {
mapping(address => bool) public whitelist;
event WhitelistAdded(address added);
event WhitelistRemoved(address removed);
/// @dev Verifies the user is whitelisted.
modifier isWhitelisted(address _user) {
require(whitelist[_user] != false, "User is not whitelisted!");
_;
}
/// @notice Adds a list of addresses to the whitelist.
/// @dev Requires that the msg.sender is the Admin. Emits an event on success.
/// @param _users The list of addresses to add to the whitelist.
function addAddressesToWhitelist(address[] _users) external onlyAdmin {
require(_users.length > 0, "Cannot add an empty list to whitelist!");
for (uint256 i = 0; i < _users.length; ++i) {
address user = _users[i];
require(user != address(0), "Cannot add the zero address to whitelist!");
if (!whitelist[user]) {
whitelist[user] = true;
emit WhitelistAdded(user);
}
}
}
/// @notice Removes a list of addresses from the whitelist.
/// @dev Requires that the msg.sender is an Admin. Emits an event on success.
/// @param _users The list of addresses to remove from the whitelist.
function removeAddressesFromWhitelist(address[] _users) external onlyAdmin {
require(_users.length > 0, "Cannot remove an empty list to whitelist!");
for (uint256 i = 0; i < _users.length; ++i) {
address user = _users[i];
if (whitelist[user]) {
whitelist[user] = false;
emit WhitelistRemoved(user);
}
}
}
}
/// Standard ERC20 token with the ability to freeze and unfreeze token transfer.
/**
* @title SafeMath
* @dev Math operations with safety checks that throw on error
*/
library SafeMath {
/**
* @dev Multiplies two numbers, throws on overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
// Gas optimization: this is cheaper than asserting 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
if (a == 0) {
return 0;
}
c = a * b;
assert(c / a == b);
return c;
}
/**
* @dev Integer division of two numbers, truncating the quotient.
*/
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 a / b;
}
/**
* @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
assert(b <= a);
return a - b;
}
/**
* @dev Adds two numbers, throws on overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
c = a + b;
assert(c >= a);
return c;
}
}
/**
* @title Basic token
* @dev Basic version of StandardToken, with no allowances.
*/
contract BasicToken is ERC20Basic {
using SafeMath for uint256;
mapping(address => uint256) balances;
uint256 totalSupply_;
/**
* @dev total number of tokens in existence
*/
function totalSupply() public view returns (uint256) {
return totalSupply_;
}
/**
* @dev transfer token for a specified address
* @param _to The address to transfer to.
* @param _value The amount to be transferred.
*/
function transfer(address _to, uint256 _value) public returns (bool) {
require(_to != address(0));
require(_value <= balances[msg.sender]);
balances[msg.sender] = balances[msg.sender].sub(_value);
balances[_to] = balances[_to].add(_value);
emit Transfer(msg.sender, _to, _value);
return true;
}
/**
* @dev Gets the balance of the specified address.
* @param _owner The address to query the the balance of.
* @return An uint256 representing the amount owned by the passed address.
*/
function balanceOf(address _owner) public view returns (uint256) {
return balances[_owner];
}
}
/**
* @title ERC20 interface
* @dev see https://github.com/ethereum/EIPs/issues/20
*/
contract ERC20 is ERC20Basic {
function allowance(address owner, address spender)
public view returns (uint256);
function transferFrom(address from, address to, uint256 value)
public returns (bool);
function approve(address spender, uint256 value) public returns (bool);
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
}
/**
* @title Standard ERC20 token
*
* @dev Implementation of the basic standard token.
* @dev https://github.com/ethereum/EIPs/issues/20
* @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol
*/
contract StandardToken is ERC20, BasicToken {
mapping (address => mapping (address => uint256)) internal allowed;
/**
* @dev Transfer tokens from one address to another
* @param _from address The address which you want to send tokens from
* @param _to address The address which you want to transfer to
* @param _value uint256 the amount of tokens to be transferred
*/
function transferFrom(
address _from,
address _to,
uint256 _value
)
public
returns (bool)
{
require(_to != address(0));
require(_value <= balances[_from]);
require(_value <= allowed[_from][msg.sender]);
balances[_from] = balances[_from].sub(_value);
balances[_to] = balances[_to].add(_value);
allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
emit Transfer(_from, _to, _value);
return true;
}
/**
* @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.
*
* Beware that changing an allowance with this method brings the risk that someone may use both the old
* and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this
* race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
* @param _spender The address which will spend the funds.
* @param _value The amount of tokens to be spent.
*/
function approve(address _spender, uint256 _value) public returns (bool) {
allowed[msg.sender][_spender] = _value;
emit Approval(msg.sender, _spender, _value);
return true;
}
/**
* @dev Function to check the amount of tokens that an owner allowed to a spender.
* @param _owner address The address which owns the funds.
* @param _spender address The address which will spend the funds.
* @return A uint256 specifying the amount of tokens still available for the spender.
*/
function allowance(
address _owner,
address _spender
)
public
view
returns (uint256)
{
return allowed[_owner][_spender];
}
/**
* @dev Increase the amount of tokens that an owner allowed to a spender.
*
* approve should be called when allowed[_spender] == 0. To increment
* allowed value is better to use this function to avoid 2 calls (and wait until
* the first transaction is mined)
* From MonolithDAO Token.sol
* @param _spender The address which will spend the funds.
* @param _addedValue The amount of tokens to increase the allowance by.
*/
function increaseApproval(
address _spender,
uint _addedValue
)
public
returns (bool)
{
allowed[msg.sender][_spender] = (
allowed[msg.sender][_spender].add(_addedValue));
emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
return true;
}
/**
* @dev Decrease the amount of tokens that an owner allowed to a spender.
*
* approve should be called when allowed[_spender] == 0. To decrement
* allowed value is better to use this function to avoid 2 calls (and wait until
* the first transaction is mined)
* From MonolithDAO Token.sol
* @param _spender The address which will spend the funds.
* @param _subtractedValue The amount of tokens to decrease the allowance by.
*/
function decreaseApproval(
address _spender,
uint _subtractedValue
)
public
returns (bool)
{
uint oldValue = allowed[msg.sender][_spender];
if (_subtractedValue > oldValue) {
allowed[msg.sender][_spender] = 0;
} else {
allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue);
}
emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
return true;
}
}
/**
* @title Pausable
* @dev Base contract which allows children to implement an emergency stop mechanism.
*/
contract Pausable is Ownable {
event Pause();
event Unpause();
bool public paused = false;
/**
* @dev Modifier to make a function callable only when the contract is not paused.
*/
modifier whenNotPaused() {
require(!paused);
_;
}
/**
* @dev Modifier to make a function callable only when the contract is paused.
*/
modifier whenPaused() {
require(paused);
_;
}
/**
* @dev called by the owner to pause, triggers stopped state
*/
function pause() onlyOwner whenNotPaused public {
paused = true;
emit Pause();
}
/**
* @dev called by the owner to unpause, returns to normal state
*/
function unpause() onlyOwner whenPaused public {
paused = false;
emit Unpause();
}
}
/**
* @title Pausable token
* @dev StandardToken modified with pausable transfers.
**/
contract PausableToken is StandardToken, Pausable {
function transfer(
address _to,
uint256 _value
)
public
whenNotPaused
returns (bool)
{
return super.transfer(_to, _value);
}
function transferFrom(
address _from,
address _to,
uint256 _value
)
public
whenNotPaused
returns (bool)
{
return super.transferFrom(_from, _to, _value);
}
function approve(
address _spender,
uint256 _value
)
public
whenNotPaused
returns (bool)
{
return super.approve(_spender, _value);
}
function increaseApproval(
address _spender,
uint _addedValue
)
public
whenNotPaused
returns (bool success)
{
return super.increaseApproval(_spender, _addedValue);
}
function decreaseApproval(
address _spender,
uint _subtractedValue
)
public
whenNotPaused
returns (bool success)
{
return super.decreaseApproval(_spender, _subtractedValue);
}
}
/// Blocks ERC223 tokens and allows the smart contract to transfer ownership of
/// ERC20 tokens that are sent to the contract address.
/**
* @title Contracts that should be able to recover tokens
* @author SylTi
* @dev This allow a contract to recover any ERC20 token received in a contract by transferring the balance to the contract owner.
* This will prevent any accidental loss of tokens.
*/
contract CanReclaimToken is Ownable {
using SafeERC20 for ERC20Basic;
/**
* @dev Reclaim all ERC20Basic compatible tokens
* @param token ERC20Basic The address of the token contract
*/
function reclaimToken(ERC20Basic token) external onlyOwner {
uint256 balance = token.balanceOf(this);
token.safeTransfer(owner, balance);
}
}
/**
* @title Contracts that should not own Tokens
* @author Remco Bloemen <remco@2π.com>
* @dev This blocks incoming ERC223 tokens to prevent accidental loss of tokens.
* Should tokens (any ERC20Basic compatible) end up in the contract, it allows the
* owner to reclaim the tokens.
*/
contract HasNoTokens is CanReclaimToken {
/**
* @dev Reject all ERC223 compatible tokens
* @param from_ address The address that is transferring the tokens
* @param value_ uint256 the amount of the specified token
* @param data_ Bytes The data passed from the caller.
*/
function tokenFallback(address from_, uint256 value_, bytes data_) external {
from_;
value_;
data_;
revert();
}
}
/// @title Reward Token contract that contains all reward token configurations.
contract RewardToken is PausableToken, Whitelist, HasNoTokens{
/// @dev Any token balances added here must be removed from the balances map.
mapping(address => uint256) public rewardBalances;
uint256[] public rewardPercentage;
uint256 public rewardPercentageDecimals;
uint256 public rewardPercentageDivisor;
event RewardPercentage(uint256 index, uint256 percentage);
/// @dev Verifies the reward index is valid.
modifier isValidRewardIndex(uint256 _index) {
require(_index < rewardPercentage.length, "The reward percentage index does not exist!");
_;
}
/// @dev Verifies the reward percentage is valid.
modifier isValidRewardPercentage(uint256 _percentage) {
require(_percentage <= rewardPercentageDivisor, "Cannot have a reward percentage greater than 100%!");
_;
}
constructor(uint256 _rewardPercentageDecimals) public {
rewardPercentageDecimals = _rewardPercentageDecimals;
rewardPercentageDivisor = (10 ** uint256(_rewardPercentageDecimals)).mul(100);
}
/// @notice Adds a reward percentage to the list of available reward percentages, specific to 18 decimals.
/// @dev To achieve an affective 5% bonus, the sender needs to use 5 x 10^18.
/// Requires:
/// - Msg.sender is an admin
/// - Percentage is <= 100%
/// @param _percentage The new percentage specific to 18 decimals.
/// @return The index of the percentage added in the rewardPercentage array.
function addRewardPercentage(uint256 _percentage) public onlyAdmin isValidRewardPercentage(_percentage) returns (uint256 _index) {
_index = rewardPercentage.length;
rewardPercentage.push(_percentage);
emit RewardPercentage(_index, _percentage);
}
/// @notice Edits the contents of the percentage array, with the specified parameters.
/// @dev Allows the owner to edit percentage array contents for a given index.
/// Requires:
/// - Msg.sender is an admin
/// - The index must be within the bounds of the rewardPercentage array
/// - The new percentage must be <= 100%
/// @param _index The index of the percentage to be edited.
/// @param _percentage The new percentage to be used for the given index.
function updateRewardPercentageByIndex(uint256 _index, uint256 _percentage)
public
onlyAdmin
isValidRewardIndex(_index)
isValidRewardPercentage(_percentage)
{
rewardPercentage[_index] = _percentage;
emit RewardPercentage(_index, _percentage);
}
/// @dev Calculates the reward based on the reward percentage index.
/// Requires:
/// - The index must be within the bounds of the rewardPercentage array
/// @param _amount The amount tokens to be converted to rewards.
/// @param _rewardPercentageIndex The location of reward percentage to be applied.
/// @return The amount of tokens converted to reward tokens.
function getRewardToken(uint256 _amount, uint256 _rewardPercentageIndex)
internal
view
isValidRewardIndex(_rewardPercentageIndex)
returns(uint256 _rewardToken)
{
_rewardToken = _amount.mul(rewardPercentage[_rewardPercentageIndex]).div(rewardPercentageDivisor);
}
}
/// @title TRVLToken smart contract
contract TRVLToken is RewardToken {
string public constant name = "TRVL Token";
string public constant symbol = "TRVL";
uint8 public constant decimals = 18;
uint256 public constant TOTAL_CAP = 600000000 * (10 ** uint256(decimals));
event TransferReward(address from, address to, uint256 value);
/// @dev Verifies the user has enough tokens to cover the payment.
modifier senderHasEnoughTokens(uint256 _regularTokens, uint256 _rewardTokens) {
require(rewardBalances[msg.sender] >= _rewardTokens, "User does not have enough reward tokens!");
require(balances[msg.sender] >= _regularTokens, "User does not have enough regular tokens!");
_;
}
/// @dev Verifies the amount is > 0.
modifier validAmount(uint256 _amount) {
require(_amount > 0, "The amount specified is 0!");
_;
}
/// @dev The TRVL Token is an ERC20 complaint token with a built in reward system that
/// gives users back a percentage of tokens spent on travel. These tokens are
/// non-transferable and can only be spent on travel through the TravelBlock website.
/// The percentages are defined in the rewardPercentage array and can be modified by
/// the TravelBlock team. The token is created with the entire balance being owned by the address that deploys.
constructor() RewardToken(decimals) public {
totalSupply_ = TOTAL_CAP;
balances[owner] = totalSupply_;
emit Transfer(0x0, owner, totalSupply_);
}
/// @notice Process a payment that prioritizes the use of regular tokens.
/// @dev Uses up all of the available regular tokens, before using rewards tokens to cover a payment. Pushes the calculated amounts
/// into their respective function calls.
/// @param _amount The total tokens to be paid.
function paymentRegularTokensPriority (uint256 _amount, uint256 _rewardPercentageIndex) public {
uint256 regularTokensAvailable = balances[msg.sender];
if (regularTokensAvailable >= _amount) {
paymentRegularTokens(_amount, _rewardPercentageIndex);
} else {
if (regularTokensAvailable > 0) {
uint256 amountOfRewardsTokens = _amount.sub(regularTokensAvailable);
paymentMixed(regularTokensAvailable, amountOfRewardsTokens, _rewardPercentageIndex);
} else {
paymentRewardTokens(_amount);
}
}
}
/// @notice Process a payment that prioritizes the use of reward tokens.
/// @dev Uses up all of the available reward tokens, before using regular tokens to cover a payment. Pushes the calculated amounts
/// into their respective function calls.
/// @param _amount The total tokens to be paid.
function paymentRewardTokensPriority (uint256 _amount, uint256 _rewardPercentageIndex) public {
uint256 rewardTokensAvailable = rewardBalances[msg.sender];
if (rewardTokensAvailable >= _amount) {
paymentRewardTokens(_amount);
} else {
if (rewardTokensAvailable > 0) {
uint256 amountOfRegularTokens = _amount.sub(rewardTokensAvailable);
paymentMixed(amountOfRegularTokens, rewardTokensAvailable, _rewardPercentageIndex);
} else {
paymentRegularTokens(_amount, _rewardPercentageIndex);
}
}
}
/// @notice Process a TRVL tokens payment with a combination of regular and rewards tokens.
/// @dev calls the regular/rewards payment methods respectively.
/// @param _regularTokenAmount The amount of regular tokens to be processed.
/// @param _rewardTokenAmount The amount of reward tokens to be processed.
function paymentMixed (uint256 _regularTokenAmount, uint256 _rewardTokenAmount, uint256 _rewardPercentageIndex) public {
paymentRewardTokens(_rewardTokenAmount);
paymentRegularTokens(_regularTokenAmount, _rewardPercentageIndex);
}
/// @notice Process a payment using only regular TRVL Tokens with a specified reward percentage.
/// @dev Adjusts the balances accordingly and applies a reward token bonus. The accounts must be whitelisted because the travel team must own the address
/// to make transfers on their behalf.
/// Requires:
/// - The contract is not paused
/// - The amount being processed is greater than 0
/// - The reward index being passed is valid
/// - The sender has enough tokens to cover the payment
/// - The sender is a whitelisted address
/// @param _regularTokenAmount The amount of regular tokens being used for the payment.
/// @param _rewardPercentageIndex The index pointing to the percentage of reward tokens to be applied.
function paymentRegularTokens (uint256 _regularTokenAmount, uint256 _rewardPercentageIndex)
public
validAmount(_regularTokenAmount)
isValidRewardIndex(_rewardPercentageIndex)
senderHasEnoughTokens(_regularTokenAmount, 0)
isWhitelisted(msg.sender)
whenNotPaused
{
// 1. Pay the specified amount with from the balance of the user/sender.
balances[msg.sender] = balances[msg.sender].sub(_regularTokenAmount);
// 2. distribute reward tokens to the user.
uint256 rewardAmount = getRewardToken(_regularTokenAmount, _rewardPercentageIndex);
rewardBalances[msg.sender] = rewardBalances[msg.sender].add(rewardAmount);
emit TransferReward(owner, msg.sender, rewardAmount);
// 3. Update the owner balance minus the reward tokens.
balances[owner] = balances[owner].add(_regularTokenAmount.sub(rewardAmount));
emit Transfer(msg.sender, owner, _regularTokenAmount.sub(rewardAmount));
}
/// @notice Process a payment using only reward TRVL Tokens.
/// @dev Adjusts internal balances accordingly. The accounts must be whitelisted because the travel team must own the address
/// to make transfers on their behalf.
/// Requires:
/// - The contract is not paused
/// - The amount being processed is greater than 0
/// - The sender has enough tokens to cover the payment
/// - The sender is a whitelisted address
/// @param _rewardTokenAmount The amount of reward tokens being used for the payment.
function paymentRewardTokens (uint256 _rewardTokenAmount)
public
validAmount(_rewardTokenAmount)
senderHasEnoughTokens(0, _rewardTokenAmount)
isWhitelisted(msg.sender)
whenNotPaused
{
rewardBalances[msg.sender] = rewardBalances[msg.sender].sub(_rewardTokenAmount);
rewardBalances[owner] = rewardBalances[owner].add(_rewardTokenAmount);
emit TransferReward(msg.sender, owner, _rewardTokenAmount);
}
/// @notice Convert a specific amount of regular TRVL tokens from the owner, into reward tokens for a user.
/// @dev Converts the regular tokens into reward tokens at a 1-1 ratio.
/// Requires:
/// - Owner has enough tokens to convert
/// - The specified user is whitelisted
/// - The amount being converted is greater than 0
/// @param _user The user receiving the converted tokens.
/// @param _amount The amount of tokens to be converted.
function convertRegularToRewardTokens(address _user, uint256 _amount)
external
onlyOwner
validAmount(_amount)
senderHasEnoughTokens(_amount, 0)
isWhitelisted(_user)
{
balances[msg.sender] = balances[msg.sender].sub(_amount);
rewardBalances[_user] = rewardBalances[_user].add(_amount);
emit TransferReward(msg.sender, _user, _amount);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"constant":true,"inputs":[],"name":"TOTAL_CAP","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"rewardPercentageDecimals","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_amount","type":"uint256"},{"name":"_rewardPercentageIndex","type":"uint256"}],"name":"paymentRegularTokensPriority","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"}],"name":"reclaimToken","outputs":[],"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":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_users","type":"address[]"}],"name":"removeAddressesFromWhitelist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"unpause","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":false,"inputs":[],"name":"claimOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_index","type":"uint256"},{"name":"_percentage","type":"uint256"}],"name":"updateRewardPercentageByIndex","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"rewardPercentage","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_subtractedValue","type":"uint256"}],"name":"decreaseApproval","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_regularTokenAmount","type":"uint256"},{"name":"_rewardPercentageIndex","type":"uint256"}],"name":"paymentRegularTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_rewardTokenAmount","type":"uint256"}],"name":"paymentRewardTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"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":"_admins","type":"address[]"}],"name":"removeAddressesFromAdmins","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"rewardBalances","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"whitelist","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_percentage","type":"uint256"}],"name":"addRewardPercentage","outputs":[{"name":"_index","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_admins","type":"address[]"}],"name":"addAddressesToAdmins","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"from_","type":"address"},{"name":"value_","type":"uint256"},{"name":"data_","type":"bytes"}],"name":"tokenFallback","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_amount","type":"uint256"},{"name":"_rewardPercentageIndex","type":"uint256"}],"name":"paymentRewardTokensPriority","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_regularTokenAmount","type":"uint256"},{"name":"_rewardTokenAmount","type":"uint256"},{"name":"_rewardPercentageIndex","type":"uint256"}],"name":"paymentMixed","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_user","type":"address"},{"name":"_amount","type":"uint256"}],"name":"convertRegularToRewardTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_addedValue","type":"uint256"}],"name":"increaseApproval","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rewardPercentageDivisor","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_users","type":"address[]"}],"name":"addAddressesToWhitelist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"pendingOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"from","type":"address"},{"indexed":false,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"TransferReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"index","type":"uint256"},{"indexed":false,"name":"percentage","type":"uint256"}],"name":"RewardPercentage","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"added","type":"address"}],"name":"WhitelistAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"removed","type":"address"}],"name":"WhitelistRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"added","type":"address"}],"name":"AdminAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"removed","type":"address"}],"name":"AdminRemoved","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"}]Contract Creation Code
60806040526000600360146101000a81548160ff0219169083151502179055503480156200002c57600080fd5b50601260ff1633600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600981905550620000a1606482600a0a6200019d6401000000000262004884179091906401000000009004565b600a8190555050601260ff16600a0a6323c3460002600181905550600154600080600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6001546040518082815260200191505060405180910390a3620001d9565b600080831415620001b25760009050620001d3565b8183029050818382811515620001c457fe5b04141515620001cf57fe5b8090505b92915050565b6148fe80620001e96000396000f3006080604052600436106101ee576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806302548866146101f357806306fdde031461021e578063095ea7b3146102ae5780630ca5f72f1461031357806313a5aac71461033e57806317ffc3201461037557806318160ddd146103b857806323b872dd146103e357806324953eaa14610468578063313ce567146104a35780633f4ba83a146104d4578063429b62e5146104eb5780634e71e0c8146105465780635adfafdf1461055d5780635c975abb14610594578063619f7cd0146105c3578063661884631461060457806370a0823114610669578063715018a6146106c0578063803fbe5b146106d7578063841eb7f81461070e5780638456cb591461073b5780638da5cb5b146107525780638ee365fa146107a957806393c8dc6d146107e457806395d89b411461083b5780639b19251a146108cb5780639c1747e514610926578063a289409b14610967578063a9059cbb146109a2578063c0ee0b8a14610a07578063d38cba4b14610a6c578063d39ce83a14610aa3578063d5d1b95a14610ae4578063d73dd62314610b31578063dd62ed3e14610b96578063e025a66614610c0d578063e2ec6ec314610c38578063e30c397814610c73578063f2fde38b14610cca575b600080fd5b3480156101ff57600080fd5b50610208610d0d565b6040518082815260200191505060405180910390f35b34801561022a57600080fd5b50610233610d1e565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610273578082015181840152602081019050610258565b50505050905090810190601f1680156102a05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102ba57600080fd5b506102f9600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d57565b604051808215151515815260200191505060405180910390f35b34801561031f57600080fd5b50610328610d87565b6040518082815260200191505060405180910390f35b34801561034a57600080fd5b506103736004803603810190808035906020019092919080359060200190929190505050610d8d565b005b34801561038157600080fd5b506103b6600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610e28565b005b3480156103c457600080fd5b506103cd610faf565b6040518082815260200191505060405180910390f35b3480156103ef57600080fd5b5061044e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610fb9565b604051808215151515815260200191505060405180910390f35b34801561047457600080fd5b506104a1600480360381019080803590602001908201803590602001919091929391929390505050610feb565b005b3480156104af57600080fd5b506104b8611304565b604051808260ff1660ff16815260200191505060405180910390f35b3480156104e057600080fd5b506104e9611309565b005b3480156104f757600080fd5b5061052c600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113c9565b604051808215151515815260200191505060405180910390f35b34801561055257600080fd5b5061055b6113e9565b005b34801561056957600080fd5b50610592600480360381019080803590602001909291908035906020019092919050505061158a565b005b3480156105a057600080fd5b506105a961184a565b604051808215151515815260200191505060405180910390f35b3480156105cf57600080fd5b506105ee6004803603810190808035906020019092919050505061185d565b6040518082815260200191505060405180910390f35b34801561061057600080fd5b5061064f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611880565b604051808215151515815260200191505060405180910390f35b34801561067557600080fd5b506106aa600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506118b0565b6040518082815260200191505060405180910390f35b3480156106cc57600080fd5b506106d56118f8565b005b3480156106e357600080fd5b5061070c60048036038101908080359060200190929190803590602001909291905050506119fd565b005b34801561071a57600080fd5b506107396004803603810190808035906020019092919050505061213e565b005b34801561074757600080fd5b5061075061268f565b005b34801561075e57600080fd5b50610767612750565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156107b557600080fd5b506107e2600480360381019080803590602001908201803590602001919091929391929390505050612776565b005b3480156107f057600080fd5b50610825600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506129d2565b6040518082815260200191505060405180910390f35b34801561084757600080fd5b506108506129ea565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610890578082015181840152602081019050610875565b50505050905090810190601f1680156108bd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156108d757600080fd5b5061090c600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612a23565b604051808215151515815260200191505060405180910390f35b34801561093257600080fd5b5061095160048036038101908080359060200190929190505050612a43565b6040518082815260200191505060405180910390f35b34801561097357600080fd5b506109a0600480360381019080803590602001908201803590602001919091929391929390505050612c78565b005b3480156109ae57600080fd5b506109ed600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612fa0565b604051808215151515815260200191505060405180910390f35b348015610a1357600080fd5b50610a6a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001919091929391929390505050612fd0565b005b348015610a7857600080fd5b50610aa16004803603810190808035906020019092919080359060200190929190505050612fd5565b005b348015610aaf57600080fd5b50610ae2600480360381019080803590602001909291908035906020019092919080359060200190929190505050613071565b005b348015610af057600080fd5b50610b2f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613089565b005b348015610b3d57600080fd5b50610b7c600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506135b3565b604051808215151515815260200191505060405180910390f35b348015610ba257600080fd5b50610bf7600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506135e3565b6040518082815260200191505060405180910390f35b348015610c1957600080fd5b50610c2261366a565b6040518082815260200191505060405180910390f35b348015610c4457600080fd5b50610c71600480360381019080803590602001908201803590602001919091929391929390505050613670565b005b348015610c7f57600080fd5b50610c88613a55565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610cd657600080fd5b50610d0b600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613a7b565b005b601260ff16600a0a6323c346000281565b6040805190810160405280600a81526020017f5452564c20546f6b656e0000000000000000000000000000000000000000000081525081565b6000600360149054906101000a900460ff16151515610d7557600080fd5b610d7f8383613b1b565b905092915050565b60095481565b6000806000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205491508382101515610de957610de484846119fd565b610e22565b6000821115610e1757610e058285613c0d90919063ffffffff16565b9050610e12828285613071565b610e21565b610e208461213e565b5b5b50505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610e8657600080fd5b8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b158015610f2157600080fd5b505af1158015610f35573d6000803e3d6000fd5b505050506040513d6020811015610f4b57600080fd5b81019080805190602001909291905050509050610fab600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828473ffffffffffffffffffffffffffffffffffffffff16613c269092919063ffffffff16565b5050565b6000600154905090565b6000600360149054906101000a900460ff16151515610fd757600080fd5b610fe2848484613d14565b90509392505050565b600080600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806110935750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b1515611107576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f6d73672e73656e646572206973206e6f7420616e2061646d696e21000000000081525060200191505060405180910390fd5b6000848490501115156111a8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001807f43616e6e6f742072656d6f766520616e20656d707479206c69737420746f207781526020017f686974656c69737421000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600091505b838390508210156112fe5783838381811015156111c657fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff169050600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156112f3576000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fde8cf212af7ce38b2840785a2768d97ff2dbf3c21b516961cec0061e134c2a1e81604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15b8160010191506111ad565b50505050565b601281565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561136557600080fd5b600360149054906101000a900460ff16151561138057600080fd5b6000600360146101000a81548160ff0219169083151502179055507f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1565b60056020528060005260406000206000915054906101000a900460ff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561144557600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061162f5750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b15156116a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f6d73672e73656e646572206973206e6f7420616e2061646d696e21000000000081525060200191505060405180910390fd5b8160088054905081101515611746576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001807f546865207265776172642070657263656e7461676520696e64657820646f657381526020017f206e6f742065786973742100000000000000000000000000000000000000000081525060400191505060405180910390fd5b81600a5481111515156117e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001807f43616e6e6f7420686176652061207265776172642070657263656e746167652081526020017f67726561746572207468616e203130302521000000000000000000000000000081525060400191505060405180910390fd5b826008858154811015156117f757fe5b90600052602060002001819055507f05f4496f879690498b5e029b5e8e2382de819ac154cbf728f6ad317347921ff38484604051808381526020018281526020019250505060405180910390a150505050565b600360149054906101000a900460ff1681565b60088181548110151561186c57fe5b906000526020600020016000915090505481565b6000600360149054906101000a900460ff1615151561189e57600080fd5b6118a883836140ce565b905092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561195457600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482060405160405180910390a26000600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600082600081111515611a78576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f54686520616d6f756e742073706563696669656420697320302100000000000081525060200191505060405180910390fd5b8260088054905081101515611b1b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001807f546865207265776172642070657263656e7461676520696e64657820646f657381526020017f206e6f742065786973742100000000000000000000000000000000000000000081525060400191505060405180910390fd5b84600080600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410151515611bfb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001807f5573657220646f6573206e6f74206861766520656e6f7567682072657761726481526020017f20746f6b656e732100000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410151515611cd7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001807f5573657220646f6573206e6f74206861766520656e6f75676820726567756c6181526020017f7220746f6b656e7321000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b3360001515600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514151515611da1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f55736572206973206e6f742077686974656c697374656421000000000000000081525060200191505060405180910390fd5b600360149054906101000a900460ff16151515611dbd57600080fd5b611e0e886000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c0d90919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611e5a888861435f565b9550611eae86600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461444d90919063ffffffff16565b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f4332d3aac8bbc1ec65700cf5d1235e2118fe56b06c41aaf3e9627fb19a39b1bf600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff163388604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a1612037611fc8878a613c0d90919063ffffffff16565b600080600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461444d90919063ffffffff16565b600080600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef61211f898c613c0d90919063ffffffff16565b6040518082815260200191505060405180910390a35050505050505050565b806000811115156121b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f54686520616d6f756e742073706563696669656420697320302100000000000081525060200191505060405180910390fd5b60008280600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410151515612297576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001807f5573657220646f6573206e6f74206861766520656e6f7567682072657761726481526020017f20746f6b656e732100000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410151515612373576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001807f5573657220646f6573206e6f74206861766520656e6f75676820726567756c6181526020017f7220746f6b656e7321000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b3360001515600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415151561243d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f55736572206973206e6f742077686974656c697374656421000000000000000081525060200191505060405180910390fd5b600360149054906101000a900460ff1615151561245957600080fd5b6124ab85600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c0d90919063ffffffff16565b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506125628560076000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461444d90919063ffffffff16565b60076000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f4332d3aac8bbc1ec65700cf5d1235e2118fe56b06c41aaf3e9627fb19a39b1bf33600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1687604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a15050505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156126eb57600080fd5b600360149054906101000a900460ff1615151561270757600080fd5b6001600360146101000a81548160ff0219169083151502179055507f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a1565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156127d557600080fd5b600084849050111515612876576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f43616e6e6f742072656d6f766520616e20656d707479206c69737420746f206181526020017f646d696e7321000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600091505b838390508210156129cc57838383818110151561289457fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff169050600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156129c1576000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fa3b62bc36326052d97ea62d63c3d60308ed4c3ea8ac079dd8499f1e9c4f80c0f81604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15b81600101915061287b565b50505050565b60076020528060005260406000206000915090505481565b6040805190810160405280600481526020017f5452564c0000000000000000000000000000000000000000000000000000000081525081565b60066020528060005260406000206000915054906101000a900460ff1681565b6000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612aea5750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b1515612b5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f6d73672e73656e646572206973206e6f7420616e2061646d696e21000000000081525060200191505060405180910390fd5b81600a548111151515612bff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001807f43616e6e6f7420686176652061207265776172642070657263656e746167652081526020017f67726561746572207468616e203130302521000000000000000000000000000081525060400191505060405180910390fd5b600880549050915060088390806001815401808255809150509060018203906000526020600020016000909192909190915055507f05f4496f879690498b5e029b5e8e2382de819ac154cbf728f6ad317347921ff38284604051808381526020018281526020019250505060405180910390a150919050565b600080600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612cd757600080fd5b600084849050111515612d78576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f43616e6e6f742061646420616e20656d707479206c69737420746f2061646d6981526020017f6e7321000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600091505b83839050821015612f9a578383838181101515612d9657fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515612e80576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f43616e6e6f742061646420746865207a65726f206164647265737320746f206181526020017f646d696e7321000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515612f8f576001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f44d6d25963f097ad14f29f06854a01f575648a1ef82f30e562ccd3889717e33981604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15b816001019150612d7d565b50505050565b6000600360149054906101000a900460ff16151515612fbe57600080fd5b612fc88383614469565b905092915050565b600080fd5b600080600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054915083821015156130315761302c8461213e565b61306b565b600082111561305f5761304d8285613c0d90919063ffffffff16565b905061305a818385613071565b61306a565b61306984846119fd565b5b5b50505050565b61307a8261213e565b61308483826119fd565b505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156130e557600080fd5b8060008111151561315e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f54686520616d6f756e742073706563696669656420697320302100000000000081525060200191505060405180910390fd5b81600080600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561323e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001807f5573657220646f6573206e6f74206861766520656e6f7567682072657761726481526020017f20746f6b656e732100000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561331a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001807f5573657220646f6573206e6f74206861766520656e6f75676820726567756c6181526020017f7220746f6b656e7321000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8460001515600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141515156133e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f55736572206973206e6f742077686974656c697374656421000000000000000081525060200191505060405180910390fd5b613435856000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c0d90919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506134c985600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461444d90919063ffffffff16565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f4332d3aac8bbc1ec65700cf5d1235e2118fe56b06c41aaf3e9627fb19a39b1bf338787604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a1505050505050565b6000600360149054906101000a900460ff161515156135d157600080fd5b6135db8383614688565b905092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b600080600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806137185750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b151561378c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f6d73672e73656e646572206973206e6f7420616e2061646d696e21000000000081525060200191505060405180910390fd5b60008484905011151561382d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f43616e6e6f742061646420616e20656d707479206c69737420746f207768697481526020017f656c69737421000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600091505b83839050821015613a4f57838383818110151561384b57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515613935576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001807f43616e6e6f742061646420746865207a65726f206164647265737320746f207781526020017f686974656c69737421000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515613a44576001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f4790a4adb426ca2345bb5108f6e454eae852a7bf687544cd66a7270dff3a41d681604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15b816001019150613832565b50505050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515613ad757600080fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6000828211151515613c1b57fe5b818303905092915050565b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015613cc957600080fd5b505af1158015613cdd573d6000803e3d6000fd5b505050506040513d6020811015613cf357600080fd5b81019080805190602001909291905050501515613d0f57600080fd5b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515613d5157600080fd5b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515613d9e57600080fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515613e2957600080fd5b613e7a826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c0d90919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f0d826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461444d90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613fde82600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c0d90919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b600080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050808311156141df576000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614273565b6141f28382613c0d90919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b60008160088054905081101515614404576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001807f546865207265776172642070657263656e7461676520696e64657820646f657381526020017f206e6f742065786973742100000000000000000000000000000000000000000081525060400191505060405180910390fd5b614444600a5461443660088681548110151561441c57fe5b90600052602060002001548761488490919063ffffffff16565b6148bc90919063ffffffff16565b91505092915050565b6000818301905082811015151561446057fe5b80905092915050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156144a657600080fd5b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482111515156144f357600080fd5b614544826000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c0d90919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506145d7826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461444d90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b600061471982600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461444d90919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b60008083141561489757600090506148b6565b81830290508183828115156148a857fe5b041415156148b257fe5b8090505b92915050565b600081838115156148c957fe5b049050929150505600a165627a7a72305820efed9ed6db8c31ddf4f8c355fcba182f5637fb9fb6bc544ebfe4822ab93c46d10029
Deployed Bytecode
0x6080604052600436106101ee576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806302548866146101f357806306fdde031461021e578063095ea7b3146102ae5780630ca5f72f1461031357806313a5aac71461033e57806317ffc3201461037557806318160ddd146103b857806323b872dd146103e357806324953eaa14610468578063313ce567146104a35780633f4ba83a146104d4578063429b62e5146104eb5780634e71e0c8146105465780635adfafdf1461055d5780635c975abb14610594578063619f7cd0146105c3578063661884631461060457806370a0823114610669578063715018a6146106c0578063803fbe5b146106d7578063841eb7f81461070e5780638456cb591461073b5780638da5cb5b146107525780638ee365fa146107a957806393c8dc6d146107e457806395d89b411461083b5780639b19251a146108cb5780639c1747e514610926578063a289409b14610967578063a9059cbb146109a2578063c0ee0b8a14610a07578063d38cba4b14610a6c578063d39ce83a14610aa3578063d5d1b95a14610ae4578063d73dd62314610b31578063dd62ed3e14610b96578063e025a66614610c0d578063e2ec6ec314610c38578063e30c397814610c73578063f2fde38b14610cca575b600080fd5b3480156101ff57600080fd5b50610208610d0d565b6040518082815260200191505060405180910390f35b34801561022a57600080fd5b50610233610d1e565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610273578082015181840152602081019050610258565b50505050905090810190601f1680156102a05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102ba57600080fd5b506102f9600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d57565b604051808215151515815260200191505060405180910390f35b34801561031f57600080fd5b50610328610d87565b6040518082815260200191505060405180910390f35b34801561034a57600080fd5b506103736004803603810190808035906020019092919080359060200190929190505050610d8d565b005b34801561038157600080fd5b506103b6600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610e28565b005b3480156103c457600080fd5b506103cd610faf565b6040518082815260200191505060405180910390f35b3480156103ef57600080fd5b5061044e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610fb9565b604051808215151515815260200191505060405180910390f35b34801561047457600080fd5b506104a1600480360381019080803590602001908201803590602001919091929391929390505050610feb565b005b3480156104af57600080fd5b506104b8611304565b604051808260ff1660ff16815260200191505060405180910390f35b3480156104e057600080fd5b506104e9611309565b005b3480156104f757600080fd5b5061052c600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113c9565b604051808215151515815260200191505060405180910390f35b34801561055257600080fd5b5061055b6113e9565b005b34801561056957600080fd5b50610592600480360381019080803590602001909291908035906020019092919050505061158a565b005b3480156105a057600080fd5b506105a961184a565b604051808215151515815260200191505060405180910390f35b3480156105cf57600080fd5b506105ee6004803603810190808035906020019092919050505061185d565b6040518082815260200191505060405180910390f35b34801561061057600080fd5b5061064f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611880565b604051808215151515815260200191505060405180910390f35b34801561067557600080fd5b506106aa600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506118b0565b6040518082815260200191505060405180910390f35b3480156106cc57600080fd5b506106d56118f8565b005b3480156106e357600080fd5b5061070c60048036038101908080359060200190929190803590602001909291905050506119fd565b005b34801561071a57600080fd5b506107396004803603810190808035906020019092919050505061213e565b005b34801561074757600080fd5b5061075061268f565b005b34801561075e57600080fd5b50610767612750565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156107b557600080fd5b506107e2600480360381019080803590602001908201803590602001919091929391929390505050612776565b005b3480156107f057600080fd5b50610825600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506129d2565b6040518082815260200191505060405180910390f35b34801561084757600080fd5b506108506129ea565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610890578082015181840152602081019050610875565b50505050905090810190601f1680156108bd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156108d757600080fd5b5061090c600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612a23565b604051808215151515815260200191505060405180910390f35b34801561093257600080fd5b5061095160048036038101908080359060200190929190505050612a43565b6040518082815260200191505060405180910390f35b34801561097357600080fd5b506109a0600480360381019080803590602001908201803590602001919091929391929390505050612c78565b005b3480156109ae57600080fd5b506109ed600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612fa0565b604051808215151515815260200191505060405180910390f35b348015610a1357600080fd5b50610a6a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001919091929391929390505050612fd0565b005b348015610a7857600080fd5b50610aa16004803603810190808035906020019092919080359060200190929190505050612fd5565b005b348015610aaf57600080fd5b50610ae2600480360381019080803590602001909291908035906020019092919080359060200190929190505050613071565b005b348015610af057600080fd5b50610b2f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613089565b005b348015610b3d57600080fd5b50610b7c600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506135b3565b604051808215151515815260200191505060405180910390f35b348015610ba257600080fd5b50610bf7600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506135e3565b6040518082815260200191505060405180910390f35b348015610c1957600080fd5b50610c2261366a565b6040518082815260200191505060405180910390f35b348015610c4457600080fd5b50610c71600480360381019080803590602001908201803590602001919091929391929390505050613670565b005b348015610c7f57600080fd5b50610c88613a55565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610cd657600080fd5b50610d0b600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613a7b565b005b601260ff16600a0a6323c346000281565b6040805190810160405280600a81526020017f5452564c20546f6b656e0000000000000000000000000000000000000000000081525081565b6000600360149054906101000a900460ff16151515610d7557600080fd5b610d7f8383613b1b565b905092915050565b60095481565b6000806000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205491508382101515610de957610de484846119fd565b610e22565b6000821115610e1757610e058285613c0d90919063ffffffff16565b9050610e12828285613071565b610e21565b610e208461213e565b5b5b50505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610e8657600080fd5b8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b158015610f2157600080fd5b505af1158015610f35573d6000803e3d6000fd5b505050506040513d6020811015610f4b57600080fd5b81019080805190602001909291905050509050610fab600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828473ffffffffffffffffffffffffffffffffffffffff16613c269092919063ffffffff16565b5050565b6000600154905090565b6000600360149054906101000a900460ff16151515610fd757600080fd5b610fe2848484613d14565b90509392505050565b600080600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806110935750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b1515611107576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f6d73672e73656e646572206973206e6f7420616e2061646d696e21000000000081525060200191505060405180910390fd5b6000848490501115156111a8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001807f43616e6e6f742072656d6f766520616e20656d707479206c69737420746f207781526020017f686974656c69737421000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600091505b838390508210156112fe5783838381811015156111c657fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff169050600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156112f3576000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fde8cf212af7ce38b2840785a2768d97ff2dbf3c21b516961cec0061e134c2a1e81604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15b8160010191506111ad565b50505050565b601281565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561136557600080fd5b600360149054906101000a900460ff16151561138057600080fd5b6000600360146101000a81548160ff0219169083151502179055507f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1565b60056020528060005260406000206000915054906101000a900460ff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561144557600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061162f5750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b15156116a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f6d73672e73656e646572206973206e6f7420616e2061646d696e21000000000081525060200191505060405180910390fd5b8160088054905081101515611746576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001807f546865207265776172642070657263656e7461676520696e64657820646f657381526020017f206e6f742065786973742100000000000000000000000000000000000000000081525060400191505060405180910390fd5b81600a5481111515156117e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001807f43616e6e6f7420686176652061207265776172642070657263656e746167652081526020017f67726561746572207468616e203130302521000000000000000000000000000081525060400191505060405180910390fd5b826008858154811015156117f757fe5b90600052602060002001819055507f05f4496f879690498b5e029b5e8e2382de819ac154cbf728f6ad317347921ff38484604051808381526020018281526020019250505060405180910390a150505050565b600360149054906101000a900460ff1681565b60088181548110151561186c57fe5b906000526020600020016000915090505481565b6000600360149054906101000a900460ff1615151561189e57600080fd5b6118a883836140ce565b905092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561195457600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482060405160405180910390a26000600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600082600081111515611a78576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f54686520616d6f756e742073706563696669656420697320302100000000000081525060200191505060405180910390fd5b8260088054905081101515611b1b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001807f546865207265776172642070657263656e7461676520696e64657820646f657381526020017f206e6f742065786973742100000000000000000000000000000000000000000081525060400191505060405180910390fd5b84600080600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410151515611bfb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001807f5573657220646f6573206e6f74206861766520656e6f7567682072657761726481526020017f20746f6b656e732100000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410151515611cd7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001807f5573657220646f6573206e6f74206861766520656e6f75676820726567756c6181526020017f7220746f6b656e7321000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b3360001515600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514151515611da1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f55736572206973206e6f742077686974656c697374656421000000000000000081525060200191505060405180910390fd5b600360149054906101000a900460ff16151515611dbd57600080fd5b611e0e886000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c0d90919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611e5a888861435f565b9550611eae86600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461444d90919063ffffffff16565b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f4332d3aac8bbc1ec65700cf5d1235e2118fe56b06c41aaf3e9627fb19a39b1bf600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff163388604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a1612037611fc8878a613c0d90919063ffffffff16565b600080600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461444d90919063ffffffff16565b600080600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef61211f898c613c0d90919063ffffffff16565b6040518082815260200191505060405180910390a35050505050505050565b806000811115156121b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f54686520616d6f756e742073706563696669656420697320302100000000000081525060200191505060405180910390fd5b60008280600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410151515612297576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001807f5573657220646f6573206e6f74206861766520656e6f7567682072657761726481526020017f20746f6b656e732100000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410151515612373576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001807f5573657220646f6573206e6f74206861766520656e6f75676820726567756c6181526020017f7220746f6b656e7321000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b3360001515600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415151561243d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f55736572206973206e6f742077686974656c697374656421000000000000000081525060200191505060405180910390fd5b600360149054906101000a900460ff1615151561245957600080fd5b6124ab85600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c0d90919063ffffffff16565b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506125628560076000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461444d90919063ffffffff16565b60076000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f4332d3aac8bbc1ec65700cf5d1235e2118fe56b06c41aaf3e9627fb19a39b1bf33600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1687604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a15050505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156126eb57600080fd5b600360149054906101000a900460ff1615151561270757600080fd5b6001600360146101000a81548160ff0219169083151502179055507f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a1565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156127d557600080fd5b600084849050111515612876576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f43616e6e6f742072656d6f766520616e20656d707479206c69737420746f206181526020017f646d696e7321000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600091505b838390508210156129cc57838383818110151561289457fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff169050600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156129c1576000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fa3b62bc36326052d97ea62d63c3d60308ed4c3ea8ac079dd8499f1e9c4f80c0f81604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15b81600101915061287b565b50505050565b60076020528060005260406000206000915090505481565b6040805190810160405280600481526020017f5452564c0000000000000000000000000000000000000000000000000000000081525081565b60066020528060005260406000206000915054906101000a900460ff1681565b6000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612aea5750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b1515612b5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f6d73672e73656e646572206973206e6f7420616e2061646d696e21000000000081525060200191505060405180910390fd5b81600a548111151515612bff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001807f43616e6e6f7420686176652061207265776172642070657263656e746167652081526020017f67726561746572207468616e203130302521000000000000000000000000000081525060400191505060405180910390fd5b600880549050915060088390806001815401808255809150509060018203906000526020600020016000909192909190915055507f05f4496f879690498b5e029b5e8e2382de819ac154cbf728f6ad317347921ff38284604051808381526020018281526020019250505060405180910390a150919050565b600080600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612cd757600080fd5b600084849050111515612d78576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f43616e6e6f742061646420616e20656d707479206c69737420746f2061646d6981526020017f6e7321000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600091505b83839050821015612f9a578383838181101515612d9657fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515612e80576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f43616e6e6f742061646420746865207a65726f206164647265737320746f206181526020017f646d696e7321000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515612f8f576001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f44d6d25963f097ad14f29f06854a01f575648a1ef82f30e562ccd3889717e33981604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15b816001019150612d7d565b50505050565b6000600360149054906101000a900460ff16151515612fbe57600080fd5b612fc88383614469565b905092915050565b600080fd5b600080600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054915083821015156130315761302c8461213e565b61306b565b600082111561305f5761304d8285613c0d90919063ffffffff16565b905061305a818385613071565b61306a565b61306984846119fd565b5b5b50505050565b61307a8261213e565b61308483826119fd565b505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156130e557600080fd5b8060008111151561315e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f54686520616d6f756e742073706563696669656420697320302100000000000081525060200191505060405180910390fd5b81600080600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561323e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001807f5573657220646f6573206e6f74206861766520656e6f7567682072657761726481526020017f20746f6b656e732100000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561331a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001807f5573657220646f6573206e6f74206861766520656e6f75676820726567756c6181526020017f7220746f6b656e7321000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8460001515600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141515156133e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f55736572206973206e6f742077686974656c697374656421000000000000000081525060200191505060405180910390fd5b613435856000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c0d90919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506134c985600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461444d90919063ffffffff16565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f4332d3aac8bbc1ec65700cf5d1235e2118fe56b06c41aaf3e9627fb19a39b1bf338787604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a1505050505050565b6000600360149054906101000a900460ff161515156135d157600080fd5b6135db8383614688565b905092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b600080600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806137185750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b151561378c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f6d73672e73656e646572206973206e6f7420616e2061646d696e21000000000081525060200191505060405180910390fd5b60008484905011151561382d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f43616e6e6f742061646420616e20656d707479206c69737420746f207768697481526020017f656c69737421000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600091505b83839050821015613a4f57838383818110151561384b57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515613935576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001807f43616e6e6f742061646420746865207a65726f206164647265737320746f207781526020017f686974656c69737421000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515613a44576001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f4790a4adb426ca2345bb5108f6e454eae852a7bf687544cd66a7270dff3a41d681604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15b816001019150613832565b50505050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515613ad757600080fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6000828211151515613c1b57fe5b818303905092915050565b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015613cc957600080fd5b505af1158015613cdd573d6000803e3d6000fd5b505050506040513d6020811015613cf357600080fd5b81019080805190602001909291905050501515613d0f57600080fd5b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515613d5157600080fd5b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515613d9e57600080fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515613e2957600080fd5b613e7a826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c0d90919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f0d826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461444d90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613fde82600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c0d90919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b600080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050808311156141df576000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614273565b6141f28382613c0d90919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b60008160088054905081101515614404576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001807f546865207265776172642070657263656e7461676520696e64657820646f657381526020017f206e6f742065786973742100000000000000000000000000000000000000000081525060400191505060405180910390fd5b614444600a5461443660088681548110151561441c57fe5b90600052602060002001548761488490919063ffffffff16565b6148bc90919063ffffffff16565b91505092915050565b6000818301905082811015151561446057fe5b80905092915050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156144a657600080fd5b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482111515156144f357600080fd5b614544826000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c0d90919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506145d7826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461444d90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b600061471982600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461444d90919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b60008083141561489757600090506148b6565b81830290508183828115156148a857fe5b041415156148b257fe5b8090505b92915050565b600081838115156148c957fe5b049050929150505600a165627a7a72305820efed9ed6db8c31ddf4f8c355fcba182f5637fb9fb6bc544ebfe4822ab93c46d10029
Swarm Source
bzzr://efed9ed6db8c31ddf4f8c355fcba182f5637fb9fb6bc544ebfe4822ab93c46d1
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)