Source Code
Overview
ETH Balance
0.000391491710581234 ETH
Eth Value
$0.79 (@ $2,024.87/ETH)More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 39 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| With Draw Operat... | 17765908 | 958 days ago | IN | 0 ETH | 0.00073943 | ||||
| With Draw Gold A... | 17765901 | 958 days ago | IN | 0 ETH | 0.00069774 | ||||
| Buy | 8715233 | 2341 days ago | IN | 0.1 ETH | 0.00007291 | ||||
| Set Gold Price | 7970257 | 2458 days ago | IN | 0 ETH | 0.00002871 | ||||
| Set Gold Range | 7970247 | 2458 days ago | IN | 0 ETH | 0.00003424 | ||||
| Set Gold Range | 7970232 | 2458 days ago | IN | 0 ETH | 0.00003424 | ||||
| Approve | 7939813 | 2462 days ago | IN | 0 ETH | 0.00009105 | ||||
| Set Token Price | 7939460 | 2462 days ago | IN | 0 ETH | 0.00008754 | ||||
| Approve | 7938978 | 2462 days ago | IN | 0 ETH | 0.00050077 | ||||
| Set Token Price | 7771979 | 2489 days ago | IN | 0 ETH | 0.0005836 | ||||
| Set Token Range | 7771820 | 2489 days ago | IN | 0 ETH | 0.00068934 | ||||
| Set Token Range | 7771801 | 2489 days ago | IN | 0 ETH | 0.00068934 | ||||
| Set Gold Price | 7715776 | 2497 days ago | IN | 0 ETH | 0.00028718 | ||||
| Set Token Price | 7715773 | 2497 days ago | IN | 0 ETH | 0.0002918 | ||||
| Set Token Price | 7528888 | 2526 days ago | IN | 0 ETH | 0.00011672 | ||||
| Set Gold Price | 7528885 | 2526 days ago | IN | 0 ETH | 0.00011487 | ||||
| Set Token Price | 7236704 | 2575 days ago | IN | 0 ETH | 0.00064196 | ||||
| With Draw Operat... | 7228758 | 2577 days ago | IN | 0 ETH | 0.00027983 | ||||
| Withdraw | 7228276 | 2577 days ago | IN | 0 ETH | 0.00049493 | ||||
| Set Token Price | 7211483 | 2581 days ago | IN | 0 ETH | 0.0001459 | ||||
| With Draw Operat... | 7207545 | 2582 days ago | IN | 0 ETH | 0.00029951 | ||||
| With Draw Gold A... | 7188878 | 2586 days ago | IN | 0 ETH | 0.00033398 | ||||
| Buy | 7179965 | 2588 days ago | IN | 0.4 ETH | 0.00061747 | ||||
| Buy | 7179788 | 2588 days ago | IN | 0.3 ETH | 0.00072039 | ||||
| With Draw Operat... | 7179400 | 2588 days ago | IN | 0 ETH | 0.00022463 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Transfer | 23532339 | 152 days ago | 0.37091114 ETH | ||||
| Transfer | 23532339 | 152 days ago | 0.37091114 ETH | ||||
| Transfer | 23532339 | 152 days ago | 0.37091114 ETH | ||||
| Transfer | 23532339 | 152 days ago | 0.37091114 ETH | ||||
| Transfer | 23532339 | 152 days ago | 0.37091114 ETH | ||||
| Transfer | 23532339 | 152 days ago | 0.37091114 ETH | ||||
| Transfer | 23532339 | 152 days ago | 0.37091114 ETH | ||||
| Transfer | 23532339 | 152 days ago | 0.37091114 ETH | ||||
| Transfer | 23532339 | 152 days ago | 0.37091114 ETH | ||||
| Transfer | 23532339 | 152 days ago | 0.37091114 ETH | ||||
| Transfer | 23532339 | 152 days ago | 0.37091114 ETH | ||||
| Transfer | 23532339 | 152 days ago | 0.37091114 ETH | ||||
| Transfer | 23532339 | 152 days ago | 0.37091114 ETH | ||||
| Transfer | 23532339 | 152 days ago | 0.37091114 ETH | ||||
| Transfer | 23532339 | 152 days ago | 0.37091114 ETH | ||||
| Transfer | 23532339 | 152 days ago | 0.37091114 ETH | ||||
| Transfer | 23532339 | 152 days ago | 0.37091114 ETH | ||||
| Transfer | 23532339 | 152 days ago | 0.37091114 ETH | ||||
| Transfer | 23532339 | 152 days ago | 0.37091114 ETH | ||||
| Transfer | 23532339 | 152 days ago | 0.37091114 ETH | ||||
| Transfer | 23532339 | 152 days ago | 0.37091114 ETH | ||||
| Transfer | 23532339 | 152 days ago | 0.37091114 ETH | ||||
| Transfer | 23532339 | 152 days ago | 0.37091114 ETH | ||||
| Transfer | 23532339 | 152 days ago | 0.37091114 ETH | ||||
| Transfer | 23532339 | 152 days ago | 0.37091114 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
GuardianGoldToken
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 2019-01-30
*/
pragma solidity ^0.4.24;
/*
________ _____ ____ ____ _______ _ __ __________ __ ____
/ ____/ / / / | / __ \/ __ \/ _/ | / | / / / ____/ __ \/ / / __ \
/ / __/ / / / /| | / /_/ / / / // // /| | / |/ / / / __/ / / / / / / / /
/ /_/ / /_/ / ___ |/ _, _/ /_/ // // ___ |/ /| / / /_/ / /_/ / /___/ /_/ /
\____/\____/_/ |_/_/ |_/_____/___/_/ |_/_/ |_/ \____/\____/_____/_____/
*/
// Guardian Gold Token
// https://guardian-gold.com
// https://guardian-gold.com/exchange.html
// Launch Jan 30, 2019 22:00 UTC
//
// Gold Backed Cryptocurrency with Proof of Stake Rewards
// 1 GGT = 1 Gram of Physical Gold
// NO Transaction Fees
// NO Gold Storage Fees
contract ERC20Basic {
function totalSupply() public view returns (uint256);
function allowance(address tokenOwner, address spender) public view returns (uint remaining);
function balanceOf(address who) public view returns (uint256);
function approve(address spender, uint tokens) public returns (bool success);
function transfer(address to, uint256 value) public returns (bool);
function transferFrom(address from, address to, uint tokens) public returns (bool success);
event Transfer(address indexed from, address indexed to, uint256 tokens);
event Approval(address indexed tokenOwner, address indexed spender, uint tokens);
event Buy(address to, uint amount);
event onWithdraw(
address indexed customerAddress,
uint256 ethereumWithdrawn
);
event onGoldAccountWithdraw(
uint256 ethereumWithdrawn
);
event onOpAccountWithdraw(
uint256 ethereumWithdrawn
);
event onTokenSale(
address indexed customerAddress,
uint256 amount
);
event onTokenRedeem(
address indexed customerAddress,
uint256 amount
);
}
contract ApproveAndCallFallBack {
function receiveApproval(address from, uint256 tokens, address token, bytes memory data) public;
}
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) {
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;
}
}
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 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;
}
}
library Roles {
struct Role {
mapping (address => bool) bearer;
}
/**
* @dev give an address access to this role
*/
function add(Role storage role, address addr)
internal
{
role.bearer[addr] = true;
}
/**
* @dev remove an address' access to this role
*/
function remove(Role storage role, address addr)
internal
{
role.bearer[addr] = false;
}
/**
* @dev check if an address has this role
* // reverts
*/
function check(Role storage role, address addr)
view
internal
{
require(has(role, addr));
}
/**
* @dev check if an address has this role
* @return bool
*/
function has(Role storage role, address addr)
view
internal
returns (bool)
{
return role.bearer[addr];
}
}
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]);
//if(myDividends() > 0) withdraw();
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];
}
}
contract MultiSigTransfer is Ownable {
string public name = "MultiSigTransfer";
string public symbol = "MST";
bool public complete = false;
bool public denied = false;
uint256 public quantity;
address public targetAddress;
address public requesterAddress;
/**
* @dev The multisig transfer contract ensures that no single administrator can
* GGTs without approval of another administrator
* @param _quantity The number of GGT to transfer
* @param _targetAddress The receiver of the GGTs
* @param _requesterAddress The administrator requesting the transfer
*/
constructor(
uint256 _quantity,
address _targetAddress,
address _requesterAddress
) public {
quantity = _quantity;
targetAddress = _targetAddress;
requesterAddress = _requesterAddress;
}
/**
* @dev Mark the transfer as approved / complete
*/
function approveTransfer() public onlyOwner {
require(denied == false, "cannot approve a denied transfer");
require(complete == false, "cannot approve a complete transfer");
complete = true;
}
/**
* @dev Mark the transfer as denied
*/
function denyTransfer() public onlyOwner {
require(denied == false, "cannot deny a transfer that is already denied");
denied = true;
}
/**
* @dev Determine if the transfer is pending
*/
function isPending() public view returns (bool) {
return !complete;
}
}
contract RBAC {
using Roles for Roles.Role;
mapping (string => Roles.Role) private roles;
event RoleAdded(address indexed operator, string role);
event RoleRemoved(address indexed operator, string role);
/**
* @dev reverts if addr does not have role
* @param _operator address
* @param _role the name of the role
* // reverts
*/
function checkRole(address _operator, string _role)
view
public
{
roles[_role].check(_operator);
}
/**
* @dev determine if addr has role
* @param _operator address
* @param _role the name of the role
* @return bool
*/
function hasRole(address _operator, string _role)
view
public
returns (bool)
{
return roles[_role].has(_operator);
}
/**
* @dev add a role to an address
* @param _operator address
* @param _role the name of the role
*/
function addRole(address _operator, string _role)
internal
{
roles[_role].add(_operator);
emit RoleAdded(_operator, _role);
}
/**
* @dev remove a role from an address
* @param _operator address
* @param _role the name of the role
*/
function removeRole(address _operator, string _role)
internal
{
roles[_role].remove(_operator);
emit RoleRemoved(_operator, _role);
}
/**
* @dev modifier to scope access to a single role (uses msg.sender as addr)
* @param _role the name of the role
* // reverts
*/
modifier onlyRole(string _role)
{
checkRole(msg.sender, _role);
_;
}
/**
* @dev modifier to scope access to a set of roles (uses msg.sender as addr)
* @param _roles the names of the roles to scope access to
* // reverts
*
* @TODO - when solidity supports dynamic arrays as arguments to modifiers, provide this
* see: https://github.com/ethereum/solidity/issues/2467
*/
// modifier onlyRoles(string[] _roles) {
// bool hasAnyRole = false;
// for (uint8 i = 0; i < _roles.length; i++) {
// if (hasRole(msg.sender, _roles[i])) {
// hasAnyRole = true;
// break;
// }
// }
// require(hasAnyRole);
// _;
// }
}
contract GuardianGoldToken is BasicToken, Ownable, RBAC {
string public name = "GuardianGoldToken";
string public symbol = "GGT";
uint8 public decimals = 18;
string public constant ADMIN_ROLE = "ADMIN";
uint256 constant internal magnitude = 2**64;
uint public maxTokens = 5000e18;
mapping(address => uint256) internal tokenBalanceLedger_;
mapping(address => int256) internal payoutsTo_;
mapping(address => uint256) internal referralBalance_;
mapping(address => mapping (address => uint256)) allowed;
uint public goldAccount = 0;
uint public operationsAccount = 0;
uint256 internal profitPerShare_;
address[] public transfers;
uint public constant INITIAL_SUPPLY = 62207e15;
uint public totalSupply = 62207e15;
uint public totalGoldReserves = 62207e15;
uint public pendingGold = 0;
uint public totalETHReceived = 57.599 ether;
bool public isTransferable = true;
bool public toggleTransferablePending = false;
address public transferToggleRequester = address(0);
uint public tokenPrice = 0.925925 ether;
uint public goldPrice = 0.390185 ether;
uint public tokenSellDiscount = 950; //95%
uint public referralFee = 30; //3%
uint minGoldPrice = 0.2 ether;
uint maxGoldPrice = 0.7 ether;
uint minTokenPrice = 0.5 ether;
uint maxTokenPrice = 2 ether;
uint public dividendRate = 150; //15%
uint public minPurchaseAmount = 0.1 ether;
uint public minSaleAmount = 1e18; //1 GGT
uint public minRefStake = 1e17; //0.1 GGT
bool public allowBuy = false;
bool public allowSell = false;
bool public allowRedeem = false;
constructor() public {
totalSupply = INITIAL_SUPPLY;
balances[msg.sender] = INITIAL_SUPPLY;
addRole(msg.sender, ADMIN_ROLE);
emit Transfer(address(this), msg.sender, INITIAL_SUPPLY);
}
function buy(address _referredBy)
payable
public
{
require(msg.value >= minPurchaseAmount);
require(allowBuy);
//uint newTokens = SafeMath.div(msg.value,tokenPrice);
//newTokens = SafeMath.mul(newTokens, 1e18);
uint newTokens = ethereumToTokens_(msg.value);
totalETHReceived = SafeMath.add(totalETHReceived, msg.value);
require(SafeMath.add(totalSupply, newTokens) <= maxTokens);
balances[msg.sender] = SafeMath.add(balances[msg.sender], newTokens);
totalSupply = SafeMath.add(newTokens, totalSupply);
uint goldAmount = SafeMath.div(SafeMath.mul(goldPrice,msg.value),tokenPrice);
uint operationsAmount = SafeMath.sub(msg.value,goldAmount);
uint256 _referralBonus = SafeMath.div(SafeMath.mul(operationsAmount, referralFee),1000);
goldAccount = SafeMath.add(goldAmount, goldAccount);
uint _dividends = SafeMath.div(SafeMath.mul(dividendRate, operationsAmount),1000);
if(
// is this a referred purchase?
_referredBy != 0x0000000000000000000000000000000000000000 &&
_referredBy != msg.sender &&
balances[_referredBy] >= minRefStake)
{
operationsAmount = SafeMath.sub(operationsAmount,_referralBonus);
//add referral amount to referrer dividend account
referralBalance_[_referredBy] = SafeMath.add(referralBalance_[_referredBy], _referralBonus);
}
uint256 _fee = _dividends * magnitude;
profitPerShare_ += (_dividends * magnitude / (totalSupply));
_fee = _fee - (_fee-(newTokens * (_dividends * magnitude / (totalSupply))));
int256 _updatedPayouts = (int256) ((profitPerShare_ * newTokens) - _fee);
payoutsTo_[msg.sender] += _updatedPayouts;
operationsAmount = SafeMath.sub(operationsAmount, _dividends);
operationsAccount = SafeMath.add(operationsAccount, operationsAmount);
pendingGold = SafeMath.add(pendingGold, newTokens);
emit Buy(msg.sender, newTokens);
emit Transfer(address(this), msg.sender, newTokens);
}
function sell(uint amount)
public
{
require(allowSell);
require(amount >= minSaleAmount);
require(balances[msg.sender] >= amount);
//calculate Eth to be returned
uint256 _ethereum = tokensToEthereum_(amount);
require(_ethereum <= operationsAccount);
//burn sold tokens
totalSupply = SafeMath.sub(totalSupply, amount);
if (pendingGold > amount) {
pendingGold = SafeMath.sub(pendingGold, amount);
}else{
pendingGold = 0;
}
balances[msg.sender] = SafeMath.sub(balances[msg.sender], amount);
//payout goes to dividend account
int256 _updatedPayouts = (int256) (profitPerShare_ * amount + (_ethereum * magnitude));
payoutsTo_[msg.sender] -= _updatedPayouts;
operationsAccount = SafeMath.sub(operationsAccount, _ethereum);
emit onTokenSale(msg.sender, amount);
}
function redeemTokensForGold(uint amount)
public
{
//burn tokens that are to be redeemed for physical gold
require(allowRedeem);
require(balances[msg.sender] >= amount);
if(myDividends(true) > 0) withdraw();
payoutsTo_[msg.sender] -= (int256) (profitPerShare_ * amount);
balances[msg.sender] = SafeMath.sub(balances[msg.sender], amount);
totalSupply = SafeMath.sub(totalSupply, amount);
emit onTokenRedeem(msg.sender, amount);
}
function getTokenAmount(uint amount) public
returns(uint)
{
return (amount*1e18)/(tokenPrice);
}
function depositGold()
public
payable
{
goldAccount = SafeMath.add(goldAccount, msg.value);
}
function depositOperations()
public
payable
{
operationsAccount = SafeMath.add(operationsAccount, msg.value);
}
function tokensToEthereum_(uint256 _tokens)
internal
view
returns(uint256)
{
uint liquidPrice = SafeMath.div(SafeMath.mul(goldPrice, tokenSellDiscount),1000);
uint256 _etherReceived = SafeMath.div(_tokens * liquidPrice, 1e18);
return _etherReceived;
}
function ethereumToTokens_(uint256 _ethereum)
public
view
returns(uint256)
{
uint256 _tokensReceived = SafeMath.div(_ethereum*1e18, tokenPrice);
return _tokensReceived;
}
function updateGoldReserves(uint newReserves)
public
onlyRole(ADMIN_ROLE)
{
totalGoldReserves = newReserves;
if (totalSupply > totalGoldReserves) {
pendingGold = SafeMath.sub(totalSupply,totalGoldReserves);
}else{
pendingGold = 0;
}
}
function setTokenPrice(uint newPrice)
public
onlyRole(ADMIN_ROLE)
{
require(newPrice >= minTokenPrice);
require(newPrice <= maxTokenPrice);
tokenPrice = newPrice;
}
function setGoldPrice(uint newPrice)
public
onlyRole(ADMIN_ROLE)
{
require(newPrice >= minGoldPrice);
require(newPrice <= maxGoldPrice);
goldPrice = newPrice;
}
function setTokenRange(uint newMax, uint newMin)
public
onlyRole(ADMIN_ROLE)
{
minTokenPrice = newMin;
maxTokenPrice = newMax;
}
function setmaxTokens(uint newMax)
public
onlyRole(ADMIN_ROLE)
{
maxTokens = newMax;
}
function setGoldRange(uint newMax, uint newMin)
public
onlyRole(ADMIN_ROLE)
{
minGoldPrice = newMin;
maxGoldPrice = newMax;
}
function withDrawGoldAccount(uint amount)
public
onlyRole(ADMIN_ROLE)
{
require(amount <= goldAccount);
goldAccount = SafeMath.sub(goldAccount, amount);
msg.sender.transfer(amount);
}
function withDrawOperationsAccount(uint amount)
public
onlyRole(ADMIN_ROLE)
{
require(amount <= operationsAccount);
operationsAccount = SafeMath.sub(operationsAccount, amount);
msg.sender.transfer(amount);
}
function setAllowBuy(bool newAllow)
public
onlyRole(ADMIN_ROLE)
{
allowBuy = newAllow;
}
function setAllowSell(bool newAllow)
public
onlyRole(ADMIN_ROLE)
{
allowSell = newAllow;
}
function setAllowRedeem(bool newAllow)
public
onlyRole(ADMIN_ROLE)
{
allowRedeem = newAllow;
}
function setMinPurchaseAmount(uint newAmount)
public
onlyRole(ADMIN_ROLE)
{
minPurchaseAmount = newAmount;
}
function setMinSaleAmount(uint newAmount)
public
onlyRole(ADMIN_ROLE)
{
minSaleAmount = newAmount;
}
function setMinRefStake(uint newAmount)
public
onlyRole(ADMIN_ROLE)
{
minRefStake = newAmount;
}
function setReferralFee(uint newAmount)
public
onlyRole(ADMIN_ROLE)
{
referralFee = newAmount;
}
function setProofofStakeFee(uint newAmount)
public
onlyRole(ADMIN_ROLE)
{
dividendRate = newAmount;
}
function setTokenSellDiscount(uint newAmount)
public
onlyRole(ADMIN_ROLE)
{
tokenSellDiscount = newAmount;
}
function withdraw()
{
//require(myDividends() > 0);
address _customerAddress = msg.sender;
uint256 _dividends = myDividends(false);
payoutsTo_[_customerAddress] += (int256) (_dividends * magnitude);
// add ref. bonus
_dividends += referralBalance_[_customerAddress];
referralBalance_[_customerAddress] = 0;
msg.sender.transfer(_dividends);
onWithdraw(_customerAddress, _dividends);
}
function myDividends(bool _includeReferralBonus)
public
view
returns(uint256)
{
address _customerAddress = msg.sender;
// return dividendsOf(_customerAddress);
return _includeReferralBonus ? dividendsOf(_customerAddress) + referralBalance_[_customerAddress] : dividendsOf(_customerAddress) ;
}
/**
* Retrieve the dividend balance of any single address.
*/
function dividendsOf(address _customerAddress)
view
public
returns(uint256)
{
return (uint256) ((int256)(profitPerShare_ * balanceOf(_customerAddress)) - payoutsTo_[_customerAddress]) / magnitude;
}
function profitShare()
public
view
returns(uint256)
{
return profitPerShare_;
}
function payouts()
public
view
returns(int256)
{
return payoutsTo_[msg.sender];
}
function getTotalDivs()
public
view
returns(uint256)
{
return (profitPerShare_ * totalSupply);
}
function tokenData()
//Ethereum Balance, MyTokens, TotalTokens, myDividends
public
view
returns(uint256, uint256, uint256, uint256, uint256, uint256)
{
return(address(this).balance, balanceOf(msg.sender), totalSupply, myDividends(true), tokenSellDiscount, goldPrice);
}
/**
* @dev Determine if the address is the owner of the contract
* @param _address The address to determine of ownership
*/
function isOwner(address _address) public view returns (bool) {
return owner == _address;
}
/**
* @dev Returns the list of MultiSig transfers
*/
function getTransfers() public view returns (address[]) {
return transfers;
}
/**
* @dev The GGT ERC20 token uses adminstrators to handle transfering to the crowdsale, vesting and pre-purchasers
*/
function isAdmin(address _address) public view returns (bool) {
return hasRole(_address, ADMIN_ROLE);
}
/**
* @dev Set an administrator as the owner, using Open Zepplin RBAC implementation
*/
function setAdmin(address _newAdmin) public onlyOwner {
return addRole(_newAdmin, ADMIN_ROLE);
}
/**
* @dev Remove an administrator as the owner, using Open Zepplin RBAC implementation
*/
function removeAdmin(address _oldAdmin) public onlyOwner {
return removeRole(_oldAdmin, ADMIN_ROLE);
}
/**
* @dev As an administrator, request the token is made transferable
* @param _toState The transfer state being requested
*/
function setTransferable(bool _toState) public onlyRole(ADMIN_ROLE) {
require(isTransferable != _toState, "to init a transfer toggle, the toState must change");
toggleTransferablePending = true;
transferToggleRequester = msg.sender;
}
/**
* @dev As an administrator who did not make the request, approve the transferable state change
*/
function approveTransferableToggle() public onlyRole(ADMIN_ROLE) {
require(toggleTransferablePending == true, "transfer toggle not in pending state");
require(transferToggleRequester != msg.sender, "the requester cannot approve the transfer toggle");
isTransferable = !isTransferable;
toggleTransferablePending = false;
transferToggleRequester = address(0);
}
/**
* @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, address _from, uint256 _value) private returns (bool) {
require(_value <= balances[_from], "the balance in the from address is smaller than the tx value");
// SafeMath.sub will throw if there is not enough balance.
//payoutsTo_[_to] += (int256) (profitPerShare_ * _value);
if(myDividends(true) > 0) withdraw();
balances[_from] = balances[_from].sub(_value);
balances[_to] = balances[_to].add(_value);
// update dividend trackers
payoutsTo_[_from] -= (int256) (profitPerShare_ * _value);
payoutsTo_[_to] += (int256) (profitPerShare_ * _value);
// disperse dividends among holders
//profitPerShare_ = SafeMath.add(profitPerShare_, (_dividends * magnitude) / totalSupply);
emit Transfer(_from, _to, _value);
return true;
}
/**
* @dev Public transfer token function. This wrapper ensures the token is transferable
* @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), "cannot transfer to the zero address");
/* We allow holders to return their Tokens to the contract owner at any point */
if (_to != owner && msg.sender != crowdsale) {
require(isTransferable == true, "GGT is not yet transferable");
}
/* Transfers from the owner address must use the administrative transfer */
require(msg.sender != owner, "the owner of the GGT contract cannot transfer");
return _transfer(_to, msg.sender, _value);
}
function transferFrom(address from, address to, uint tokens) public returns (bool success) {
balances[from] = balances[from].sub(tokens);
allowed[from][msg.sender] = allowed[from][msg.sender].sub(tokens);
balances[to] = balances[to].add(tokens);
Transfer(from, to, tokens);
return true;
}
// Allow `spender` to withdraw from your account, multiple times, up to the `tokens` amount.
// If this function is called again it overwrites the current allowance with _value.
function approve(address spender, uint tokens) public returns (bool success) {
allowed[msg.sender][spender] = tokens;
Approval(msg.sender, spender, tokens);
return true;
}
// ------------------------------------------------------------------------
// Returns the amount of tokens approved by the owner that can be
// transferred to the spender's account
// ------------------------------------------------------------------------
function allowance(address tokenOwner, address spender) public view returns (uint remaining) {
return allowed[tokenOwner][spender];
}
// ------------------------------------------------------------------------
// Token owner can approve for `spender` to transferFrom(...) `tokens`
// from the token owner's account. The `spender` contract function
// `receiveApproval(...)` is then executed
// ------------------------------------------------------------------------
function approveAndCall(address spender, uint tokens, bytes memory data) public returns (bool success) {
allowed[msg.sender][spender] = tokens;
emit Approval(msg.sender, spender, tokens);
ApproveAndCallFallBack(spender).receiveApproval(msg.sender, tokens, address(this), data);
return true;
}
/**
* @dev Request an administrative transfer. This does not move tokens
* @param _to The address to transfer to.
* @param _quantity The amount to be transferred.
*/
function adminTransfer(address _to, uint256 _quantity) public onlyRole(ADMIN_ROLE) {
address newTransfer = new MultiSigTransfer(_quantity, _to, msg.sender);
transfers.push(newTransfer);
}
/**
* @dev Approve an administrative transfer. This moves the tokens if the requester
* is an admin, but not the same admin as the one who made the request
* @param _approvedTransfer The contract address of the multisignature transfer.
*/
function approveTransfer(address _approvedTransfer) public onlyRole(ADMIN_ROLE) returns (bool) {
MultiSigTransfer transferToApprove = MultiSigTransfer(_approvedTransfer);
uint256 transferQuantity = transferToApprove.quantity();
address deliveryAddress = transferToApprove.targetAddress();
address requesterAddress = transferToApprove.requesterAddress();
require(msg.sender != requesterAddress, "a requester cannot approve an admin transfer");
transferToApprove.approveTransfer();
return _transfer(deliveryAddress, owner, transferQuantity);
}
/**
* @dev Deny an administrative transfer. This ensures it cannot be approved.
* @param _approvedTransfer The contract address of the multisignature transfer.
*/
function denyTransfer(address _approvedTransfer) public onlyRole(ADMIN_ROLE) returns (bool) {
MultiSigTransfer transferToApprove = MultiSigTransfer(_approvedTransfer);
transferToApprove.denyTransfer();
}
address public crowdsale = address(0);
/**
* @dev Any admin can set the current crowdsale address, to allows transfers
* from the crowdsale to the purchaser
*/
function setCrowdsaleAddress(address _crowdsaleAddress) public onlyRole(ADMIN_ROLE) {
crowdsale = _crowdsaleAddress;
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"constant":true,"inputs":[{"name":"_customerAddress","type":"address"}],"name":"dividendsOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokenData","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"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":"tokens","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_operator","type":"address"},{"name":"_role","type":"string"}],"name":"checkRole","outputs":[],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"operationsAccount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_oldAdmin","type":"address"}],"name":"removeAdmin","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":"_crowdsaleAddress","type":"address"}],"name":"setCrowdsaleAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isTransferable","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_operator","type":"address"},{"name":"_role","type":"string"}],"name":"hasRole","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"tokens","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"isAdmin","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"toggleTransferablePending","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokenSellDiscount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_ethereum","type":"uint256"}],"name":"ethereumToTokens_","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newPrice","type":"uint256"}],"name":"setGoldPrice","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getTransfers","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"INITIAL_SUPPLY","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pendingGold","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"minRefStake","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newAllow","type":"bool"}],"name":"setAllowRedeem","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"allowSell","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newMax","type":"uint256"}],"name":"setmaxTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"profitShare","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"approveTransferableToggle","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_approvedTransfer","type":"address"}],"name":"approveTransfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"goldPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"goldAccount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"depositOperations","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"newMax","type":"uint256"},{"name":"newMin","type":"uint256"}],"name":"setGoldRange","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newAmount","type":"uint256"}],"name":"setMinRefStake","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"depositGold","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"_includeReferralBonus","type":"bool"}],"name":"myDividends","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newPrice","type":"uint256"}],"name":"setTokenPrice","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalETHReceived","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newAdmin","type":"address"}],"name":"setAdmin","outputs":[],"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":"newAmount","type":"uint256"}],"name":"setReferralFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"redeemTokensForGold","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newMax","type":"uint256"},{"name":"newMin","type":"uint256"}],"name":"setTokenRange","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"ADMIN_ROLE","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newAmount","type":"uint256"}],"name":"setTokenSellDiscount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getTotalDivs","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokenPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newReserves","type":"uint256"}],"name":"updateGoldReserves","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"referralFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newAmount","type":"uint256"}],"name":"setMinSaleAmount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"withDrawGoldAccount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"transfers","outputs":[{"name":"","type":"address"}],"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":"totalGoldReserves","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"crowdsale","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_toState","type":"bool"}],"name":"setTransferable","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"payouts","outputs":[{"name":"","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"transferToggleRequester","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","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":true,"inputs":[],"name":"allowBuy","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"minPurchaseAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"getTokenAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newAmount","type":"uint256"}],"name":"setProofofStakeFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"tokens","type":"uint256"},{"name":"data","type":"bytes"}],"name":"approveAndCall","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"withDrawOperationsAccount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newAllow","type":"bool"}],"name":"setAllowSell","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newAllow","type":"bool"}],"name":"setAllowBuy","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"dividendRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenOwner","type":"address"},{"name":"spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"sell","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"maxTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newAmount","type":"uint256"}],"name":"setMinPurchaseAmount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"allowRedeem","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_referredBy","type":"address"}],"name":"buy","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_quantity","type":"uint256"}],"name":"adminTransfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_approvedTransfer","type":"address"}],"name":"denyTransfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"minSaleAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"operator","type":"address"},{"indexed":false,"name":"role","type":"string"}],"name":"RoleAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"operator","type":"address"},{"indexed":false,"name":"role","type":"string"}],"name":"RoleRemoved","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":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"tokens","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"tokenOwner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"tokens","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Buy","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"customerAddress","type":"address"},{"indexed":false,"name":"ethereumWithdrawn","type":"uint256"}],"name":"onWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"ethereumWithdrawn","type":"uint256"}],"name":"onGoldAccountWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"ethereumWithdrawn","type":"uint256"}],"name":"onOpAccountWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"customerAddress","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"onTokenSale","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"customerAddress","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"onTokenRedeem","type":"event"}]Contract Creation Code
60806040526040805190810160405280601181526020017f477561726469616e476f6c64546f6b656e00000000000000000000000000000081525060049080519060200190620000519291906200059d565b506040805190810160405280600381526020017f4747540000000000000000000000000000000000000000000000000000000000815250600590805190602001906200009f9291906200059d565b506012600660006101000a81548160ff021916908360ff16021790555069010f0cf064dd592000006007556000600c556000600d5568035f4ba8e9c6b9800060105568035f4ba8e9c6b98000601155600060125568031f58c153d1b980006013556001601460006101000a81548160ff0219169083151502179055506000601460016101000a81548160ff0219169083151502179055506000601460026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550670cd98be1b9a7500060155567056a3730b1af90006016556103b6601755601e6018556702c68af0bb1400006019556709b6e64a8ec60000601a556706f05b59d3b20000601b55671bc16d674ec80000601c556096601d5567016345785d8a0000601e55670de0b6b3a7640000601f5567016345785d8a00006020556000602160006101000a81548160ff0219169083151502179055506000602160016101000a81548160ff0219169083151502179055506000602160026101000a81548160ff0219169083151502179055506000602160036101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200029457600080fd5b5033600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555068035f4ba8e9c6b9800060108190555068035f4ba8e9c6b980006000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062000382336040805190810160405280600581526020017f41444d494e000000000000000000000000000000000000000000000000000000815250620003f6640100000000026401000000009004565b3373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef68035f4ba8e9c6b980006040518082815260200191505060405180910390a36200064c565b62000485826003836040518082805190602001908083835b6020831015156200043557805182526020820191506020810190506020830392506200040e565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390206200053f6401000000000262004f2e179091906401000000009004565b8173ffffffffffffffffffffffffffffffffffffffff167fbfec83d64eaa953f2708271a023ab9ee82057f8f3578d548c1a4ba0b5b700489826040518080602001828103825283818151815260200191508051906020019080838360005b8381101562000500578082015181840152602081019050620004e3565b50505050905090810190601f1680156200052e5780820380516001836020036101000a031916815260200191505b509250505060405180910390a25050565b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620005e057805160ff191683800117855562000611565b8280016001018555821562000611579182015b8281111562000610578251825591602001919060010190620005f3565b5b50905062000620919062000624565b5090565b6200064991905b80821115620006455760008160009055506001016200062b565b5090565b90565b615ccb806200065c6000396000f300608060405260043610620003f6576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806265318b14620003fb578063024fd650146200045557806306fdde0314620004a6578063095ea7b3146200053c5780630988ca8c14620005a45780630f5f1dbc14620006305780631785f53c146200065e57806318160ddd14620006a45780631f35bc4014620006d25780632121dc751462000718578063217fe6c6146200074a57806323b872dd14620007ee57806324d7806c14620008765780632813de1714620008d4578063298e681e14620009065780632a9121c714620009345780632d02a5b214620009785780632f54bf6e14620009a85780632f65142c1462000a065780632ff2e9dc1462000a7757806330ab85b91462000aa5578063313ce5671462000ad3578063315b91481462000b07578063350924231462000b3557806336e0f6cc1462000b675780633ccfd60b1462000b995780633ce7214c1462000bb35780633e1f55e41462000be357806340c3b18e1462000c115780634355b9d21462000c2b578063445014041462000c89578063485505761462000cb75780634c309d1b1462000ce55780634e6904b51462000cf15780635d2d733d1462000d2b57806360d48b441462000d5b578063688abbf71462000d675780636a61e5fc1462000dad5780636e1682a01462000ddd578063704b6c021462000e0b57806370a082311462000e51578063713494d71462000eab5780637138127a1462000edb578063719fa76d1462000f0b57806375b238fc1462000f4557806376731fe11462000fdb578063792fd9a9146200100b5780637ff9b596146200103957806382337cbe146200106757806384ae2bc6146200109757806385dff0ff14620010c557806388ab152614620010f55780638da5cb5b14620011255780639377d711146200117f57806395d89b4114620011ef578063969ddf8a14620012855780639c1e03a014620012b35780639cd23707146200130d578063a247bc32146200133f578063a3adb958146200136d578063a9059cbb14620013c7578063ab7cb211146200142f578063b47dbf221462001461578063c2507ac1146200148f578063c6f7c5c814620014d3578063cae9ca511462001503578063cd4795cc14620015b1578063d373507b14620015e1578063d60468361462001613578063d6a3f3741462001645578063dd62ed3e1462001673578063e4849b3214620016ed578063e8315742146200171d578063e9d3fb78146200174b578063eb328095146200177b578063f088d54714620017ad578063f17e48ec14620017e5578063f2fde38b1462001835578063f5c4201f146200187b578063fd085b4114620018d9575b600080fd5b3480156200040857600080fd5b506200043f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062001907565b6040518082815260200191505060405180910390f35b3480156200046257600080fd5b506200046d62001975565b60405180878152602001868152602001858152602001848152602001838152602001828152602001965050505050505060405180910390f35b348015620004b357600080fd5b50620004be620019ca565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101562000500578082015181840152602081019050620004e3565b50505050905090810190601f1680156200052e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156200054957600080fd5b506200058a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505062001a6c565b604051808215151515815260200191505060405180910390f35b348015620005b157600080fd5b506200062e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929050505062001b5e565b005b3480156200063d57600080fd5b506200064862001be3565b6040518082815260200191505060405180910390f35b3480156200066b57600080fd5b50620006a2600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062001be9565b005b348015620006b157600080fd5b50620006bc62001c8a565b6040518082815260200191505060405180910390f35b348015620006df57600080fd5b5062000716600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062001c90565b005b3480156200072557600080fd5b506200073062001d17565b604051808215151515815260200191505060405180910390f35b3480156200075757600080fd5b50620007d4600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929050505062001d2a565b604051808215151515815260200191505060405180910390f35b348015620007fb57600080fd5b506200085c600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505062001db5565b604051808215151515815260200191505060405180910390f35b3480156200088357600080fd5b50620008ba600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062002062565b604051808215151515815260200191505060405180910390f35b348015620008e157600080fd5b50620008ec620020ac565b604051808215151515815260200191505060405180910390f35b3480156200091357600080fd5b506200091e620020bf565b6040518082815260200191505060405180910390f35b3480156200094157600080fd5b506200096260048036038101908080359060200190929190505050620020c5565b6040518082815260200191505060405180910390f35b3480156200098557600080fd5b50620009a660048036038101908080359060200190929190505050620020eb565b005b348015620009b557600080fd5b50620009ec600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506200215c565b604051808215151515815260200191505060405180910390f35b34801562000a1357600080fd5b5062000a1e620021b6565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101562000a6357808201518184015260208101905062000a46565b505050509050019250505060405180910390f35b34801562000a8457600080fd5b5062000a8f62002246565b6040518082815260200191505060405180910390f35b34801562000ab257600080fd5b5062000abd62002253565b6040518082815260200191505060405180910390f35b34801562000ae057600080fd5b5062000aeb62002259565b604051808260ff1660ff16815260200191505060405180910390f35b34801562000b1457600080fd5b5062000b1f6200226c565b6040518082815260200191505060405180910390f35b34801562000b4257600080fd5b5062000b6560048036038101908080351515906020019092919050505062002272565b005b34801562000b7457600080fd5b5062000b7f620022d2565b604051808215151515815260200191505060405180910390f35b34801562000ba657600080fd5b5062000bb1620022e5565b005b34801562000bc057600080fd5b5062000be16004803603810190808035906020019092919050505062002474565b005b34801562000bf057600080fd5b5062000bfb620024c1565b6040518082815260200191505060405180910390f35b34801562000c1e57600080fd5b5062000c29620024cb565b005b34801562000c3857600080fd5b5062000c6f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062002736565b604051808215151515815260200191505060405180910390f35b34801562000c9657600080fd5b5062000ca162002af3565b6040518082815260200191505060405180910390f35b34801562000cc457600080fd5b5062000ccf62002af9565b6040518082815260200191505060405180910390f35b62000cef62002aff565b005b34801562000cfe57600080fd5b5062000d29600480360381019080803590602001909291908035906020019092919050505062002b15565b005b34801562000d3857600080fd5b5062000d596004803603810190808035906020019092919050505062002b6a565b005b62000d6562002bb7565b005b34801562000d7457600080fd5b5062000d9760048036038101908080351515906020019092919050505062002bcd565b6040518082815260200191505060405180910390f35b34801562000dba57600080fd5b5062000ddb6004803603810190808035906020019092919050505062002c3f565b005b34801562000dea57600080fd5b5062000df562002cb0565b6040518082815260200191505060405180910390f35b34801562000e1857600080fd5b5062000e4f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062002cb6565b005b34801562000e5e57600080fd5b5062000e95600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062002d57565b6040518082815260200191505060405180910390f35b34801562000eb857600080fd5b5062000ed96004803603810190808035906020019092919050505062002d9f565b005b34801562000ee857600080fd5b5062000f096004803603810190808035906020019092919050505062002dec565b005b34801562000f1857600080fd5b5062000f43600480360381019080803590602001909291908035906020019092919050505062002fb8565b005b34801562000f5257600080fd5b5062000f5d6200300d565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101562000f9f57808201518184015260208101905062000f82565b50505050905090810190601f16801562000fcd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801562000fe857600080fd5b50620010096004803603810190808035906020019092919050505062003046565b005b3480156200101857600080fd5b506200102362003093565b6040518082815260200191505060405180910390f35b3480156200104657600080fd5b5062001051620030a1565b6040518082815260200191505060405180910390f35b3480156200107457600080fd5b506200109560048036038101908080359060200190929190505050620030a7565b005b348015620010a457600080fd5b50620010af62003126565b6040518082815260200191505060405180910390f35b348015620010d257600080fd5b50620010f3600480360381019080803590602001909291905050506200312c565b005b3480156200110257600080fd5b50620011236004803603810190808035906020019092919050505062003179565b005b3480156200113257600080fd5b506200113d6200322d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156200118c57600080fd5b50620011ad6004803603810190808035906020019092919050505062003253565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015620011fc57600080fd5b506200120762003292565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015620012495780820151818401526020810190506200122c565b50505050905090810190601f168015620012775780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156200129257600080fd5b506200129d62003334565b6040518082815260200191505060405180910390f35b348015620012c057600080fd5b50620012cb6200333a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156200131a57600080fd5b506200133d60048036038101908080351515906020019092919050505062003360565b005b3480156200134c57600080fd5b5062001357620034b4565b6040518082815260200191505060405180910390f35b3480156200137a57600080fd5b5062001385620034fb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015620013d457600080fd5b5062001415600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505062003521565b604051808215151515815260200191505060405180910390f35b3480156200143c57600080fd5b506200144762003830565b604051808215151515815260200191505060405180910390f35b3480156200146e57600080fd5b506200147962003843565b6040518082815260200191505060405180910390f35b3480156200149c57600080fd5b50620014bd6004803603810190808035906020019092919050505062003849565b6040518082815260200191505060405180910390f35b348015620014e057600080fd5b5062001501600480360381019080803590602001909291905050506200386b565b005b3480156200151057600080fd5b5062001597600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050620038b8565b604051808215151515815260200191505060405180910390f35b348015620015be57600080fd5b50620015df6004803603810190808035906020019092919050505062003b0c565b005b348015620015ee57600080fd5b506200161160048036038101908080351515906020019092919050505062003bc0565b005b3480156200162057600080fd5b506200164360048036038101908080351515906020019092919050505062003c20565b005b3480156200165257600080fd5b506200165d62003c80565b6040518082815260200191505060405180910390f35b3480156200168057600080fd5b50620016d7600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062003c86565b6040518082815260200191505060405180910390f35b348015620016fa57600080fd5b506200171b6004803603810190808035906020019092919050505062003d0d565b005b3480156200172a57600080fd5b506200173562003f41565b6040518082815260200191505060405180910390f35b3480156200175857600080fd5b50620017796004803603810190808035906020019092919050505062003f47565b005b3480156200178857600080fd5b506200179362003f94565b604051808215151515815260200191505060405180910390f35b620017e3600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062003fa7565b005b348015620017f257600080fd5b5062001833600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505062004452565b005b3480156200184257600080fd5b5062001879600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506200459f565b005b3480156200188857600080fd5b50620018bf600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506200460a565b604051808215151515815260200191505060405180910390f35b348015620018e657600080fd5b50620018f1620046d7565b6040518082815260200191505060405180910390f35b600068010000000000000000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200195e8462002d57565b600e5402038115156200196d57fe5b049050919050565b6000806000806000803073ffffffffffffffffffffffffffffffffffffffff1631620019a13362002d57565b601054620019b0600162002bcd565b601754601654955095509550955095509550909192939495565b60048054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801562001a645780601f1062001a385761010080835404028352916020019162001a64565b820191906000526020600020905b81548152906001019060200180831162001a4657829003601f168201915b505050505081565b600081600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b62001bdf826003836040518082805190602001908083835b60208310151562001b9d578051825260208201915060208101905060208303925062001b76565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020620046dd90919063ffffffff16565b5050565b600d5481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151562001c4657600080fd5b62001c87816040805190810160405280600581526020017f41444d494e000000000000000000000000000000000000000000000000000000815250620046f9565b50565b60105481565b6040805190810160405280600581526020017f41444d494e00000000000000000000000000000000000000000000000000000081525062001cd2338262001b5e565b81602160036101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b601460009054906101000a900460ff1681565b600062001dad836003846040518082805190602001908083835b60208310151562001d6b578051825260208201915060208101905060208303925062001d44565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390206200483490919063ffffffff16565b905092915050565b600062001e0a826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200488d90919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062001edd82600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200488d90919063ffffffff16565b600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062001fb0826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620048a790919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000620020a5826040805190810160405280600581526020017f41444d494e00000000000000000000000000000000000000000000000000000081525062001d2a565b9050919050565b601460019054906101000a900460ff1681565b60175481565b600080620020e0670de0b6b3a76400008402601554620048c4565b905080915050919050565b6040805190810160405280600581526020017f41444d494e0000000000000000000000000000000000000000000000000000008152506200212d338262001b5e565b60195482101515156200213f57600080fd5b601a5482111515156200215157600080fd5b816016819055505050565b60008173ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16149050919050565b6060600f8054806020026020016040519081016040528092919081815260200182805480156200223c57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311620021f1575b5050505050905090565b68035f4ba8e9c6b9800081565b60125481565b600660009054906101000a900460ff1681565b60205481565b6040805190810160405280600581526020017f41444d494e000000000000000000000000000000000000000000000000000000815250620022b4338262001b5e565b81602160026101000a81548160ff0219169083151502179055505050565b602160019054906101000a900460ff1681565b600080339150620022f7600062002bcd565b9050680100000000000000008102600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054810190506000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801562002421573d6000803e3d6000fd5b508173ffffffffffffffffffffffffffffffffffffffff167fccad973dcd043c7d680389db4378bd6b9775db7124092e9e0422c9e46d7985dc826040518082815260200191505060405180910390a25050565b6040805190810160405280600581526020017f41444d494e000000000000000000000000000000000000000000000000000000815250620024b6338262001b5e565b816007819055505050565b6000600e54905090565b6040805190810160405280600581526020017f41444d494e0000000000000000000000000000000000000000000000000000008152506200250d338262001b5e565b60011515601460019054906101000a900460ff161515141515620025bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001807f7472616e7366657220746f67676c65206e6f7420696e2070656e64696e67207381526020017f746174650000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16601460029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151515620026ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001807f746865207265717565737465722063616e6e6f7420617070726f76652074686581526020017f207472616e7366657220746f67676c650000000000000000000000000000000081525060400191505060405180910390fd5b601460009054906101000a900460ff1615601460006101000a81548160ff0219169083151502179055506000601460016101000a81548160ff0219169083151502179055506000601460026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060008060006040805190810160405280600581526020017f41444d494e00000000000000000000000000000000000000000000000000000081525062002780338262001b5e565b8694508473ffffffffffffffffffffffffffffffffffffffff166317fc45e26040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015620027e857600080fd5b505af1158015620027fd573d6000803e3d6000fd5b505050506040513d60208110156200281457600080fd5b810190808051906020019092919050505093508473ffffffffffffffffffffffffffffffffffffffff16635210eb566040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156200288c57600080fd5b505af1158015620028a1573d6000803e3d6000fd5b505050506040513d6020811015620028b857600080fd5b810190808051906020019092919050505092508473ffffffffffffffffffffffffffffffffffffffff1663d424ee7d6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156200293057600080fd5b505af115801562002945573d6000803e3d6000fd5b505050506040513d60208110156200295c57600080fd5b810190808051906020019092919050505091508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415151562002a3a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001807f61207265717565737465722063616e6e6f7420617070726f766520616e20616481526020017f6d696e207472616e73666572000000000000000000000000000000000000000081525060400191505060405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16632a8d26e86040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b15801562002a9f57600080fd5b505af115801562002ab4573d6000803e3d6000fd5b5050505062002ae783600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1686620048db565b95505050505050919050565b60165481565b600c5481565b62002b0d600d5434620048a7565b600d81905550565b6040805190810160405280600581526020017f41444d494e00000000000000000000000000000000000000000000000000000081525062002b57338262001b5e565b8160198190555082601a81905550505050565b6040805190810160405280600581526020017f41444d494e00000000000000000000000000000000000000000000000000000081525062002bac338262001b5e565b816020819055505050565b62002bc5600c5434620048a7565b600c81905550565b6000803390508262002bea5762002be48162001907565b62002c37565b600a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462002c358262001907565b015b915050919050565b6040805190810160405280600581526020017f41444d494e00000000000000000000000000000000000000000000000000000081525062002c81338262001b5e565b601b54821015151562002c9357600080fd5b601c54821115151562002ca557600080fd5b816015819055505050565b60135481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151562002d1357600080fd5b62002d54816040805190810160405280600581526020017f41444d494e00000000000000000000000000000000000000000000000000000081525062004c16565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6040805190810160405280600581526020017f41444d494e00000000000000000000000000000000000000000000000000000081525062002de1338262001b5e565b816018819055505050565b602160029054906101000a900460ff16151562002e0857600080fd5b806000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151562002e5657600080fd5b600062002e64600162002bcd565b111562002e765762002e75620022e5565b5b80600e5402600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555062002f116000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826200488d565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062002f61601054826200488d565b6010819055503373ffffffffffffffffffffffffffffffffffffffff167f2f61833efe103718b6e4db0d250ac84e125f9bf724fe3856b695c214b7cc55be826040518082815260200191505060405180910390a250565b6040805190810160405280600581526020017f41444d494e00000000000000000000000000000000000000000000000000000081525062002ffa338262001b5e565b81601b8190555082601c81905550505050565b6040805190810160405280600581526020017f41444d494e00000000000000000000000000000000000000000000000000000081525081565b6040805190810160405280600581526020017f41444d494e00000000000000000000000000000000000000000000000000000081525062003088338262001b5e565b816017819055505050565b6000601054600e5402905090565b60155481565b6040805190810160405280600581526020017f41444d494e000000000000000000000000000000000000000000000000000000815250620030e9338262001b5e565b81601181905550601154601054111562003119576200310d6010546011546200488d565b60128190555062003122565b60006012819055505b5050565b60185481565b6040805190810160405280600581526020017f41444d494e0000000000000000000000000000000000000000000000000000008152506200316e338262001b5e565b81601f819055505050565b6040805190810160405280600581526020017f41444d494e000000000000000000000000000000000000000000000000000000815250620031bb338262001b5e565b600c548211151515620031cd57600080fd5b620031db600c54836200488d565b600c819055503373ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015801562003228573d6000803e3d6000fd5b505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f818154811015156200326357fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60058054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156200332c5780601f1062003300576101008083540402835291602001916200332c565b820191906000526020600020905b8154815290600101906020018083116200330e57829003601f168201915b505050505081565b60115481565b602160039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6040805190810160405280600581526020017f41444d494e000000000000000000000000000000000000000000000000000000815250620033a2338262001b5e565b811515601460009054906101000a900460ff1615151415151562003454576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001807f746f20696e69742061207472616e7366657220746f67676c652c20746865207481526020017f6f5374617465206d757374206368616e6765000000000000000000000000000081525060400191505060405180910390fd5b6001601460016101000a81548160ff02191690831515021790555033601460026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905090565b601460029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515620035ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f63616e6e6f74207472616e7366657220746f20746865207a65726f206164647281526020017f657373000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156200369b5750602160039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b156200372e5760011515601460009054906101000a900460ff1615151415156200372d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f474754206973206e6f7420796574207472616e7366657261626c65000000000081525060200191505060405180910390fd5b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515156200381b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001807f746865206f776e6572206f66207468652047475420636f6e747261637420636181526020017f6e6e6f74207472616e736665720000000000000000000000000000000000000081525060400191505060405180910390fd5b62003828833384620048db565b905092915050565b602160009054906101000a900460ff1681565b601e5481565b6000601554670de0b6b3a764000083028115156200386357fe5b049050919050565b6040805190810160405280600581526020017f41444d494e000000000000000000000000000000000000000000000000000000815250620038ad338262001b5e565b81601d819055505050565b600082600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040518082815260200191505060405180910390a38373ffffffffffffffffffffffffffffffffffffffff16638f4ffcb1338530866040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101562003a9757808201518184015260208101905062003a7a565b50505050905090810190601f16801562003ac55780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801562003ae857600080fd5b505af115801562003afd573d6000803e3d6000fd5b50505050600190509392505050565b6040805190810160405280600581526020017f41444d494e00000000000000000000000000000000000000000000000000000081525062003b4e338262001b5e565b600d54821115151562003b6057600080fd5b62003b6e600d54836200488d565b600d819055503373ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015801562003bbb573d6000803e3d6000fd5b505050565b6040805190810160405280600581526020017f41444d494e00000000000000000000000000000000000000000000000000000081525062003c02338262001b5e565b81602160016101000a81548160ff0219169083151502179055505050565b6040805190810160405280600581526020017f41444d494e00000000000000000000000000000000000000000000000000000081525062003c62338262001b5e565b81602160006101000a81548160ff0219169083151502179055505050565b601d5481565b6000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600080602160019054906101000a900460ff16151562003d2c57600080fd5b601f54831015151562003d3e57600080fd5b826000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151562003d8c57600080fd5b62003d978362004d51565b9150600d54821115151562003dab57600080fd5b62003db9601054846200488d565b60108190555082601254111562003de45762003dd8601254846200488d565b60128190555062003ded565b60006012819055505b62003e376000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846200488d565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555068010000000000000000820283600e540201905080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555062003ee8600d54836200488d565b600d819055503373ffffffffffffffffffffffffffffffffffffffff167fd527546b9a6c42ae0e36c977e5efc630305d93e36fb17f05b2c28b6333af41d8846040518082815260200191505060405180910390a2505050565b60075481565b6040805190810160405280600581526020017f41444d494e00000000000000000000000000000000000000000000000000000081525062003f89338262001b5e565b81601e819055505050565b602160029054906101000a900460ff1681565b6000806000806000806000601e54341015151562003fc457600080fd5b602160009054906101000a900460ff16151562003fe057600080fd5b62003feb34620020c5565b965062003ffb60135434620048a7565b6013819055506007546200401260105489620048a7565b111515156200402057600080fd5b6200406a6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205488620048a7565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620040ba87601054620048a7565b601081905550620040db620040d26016543462004d97565b601554620048c4565b9550620040e934876200488d565b945062004106620040fd8660185462004d97565b6103e8620048c4565b93506200411686600c54620048a7565b600c81905550620041376200412e601d548762004d97565b6103e8620048c4565b9250600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614158015620041a357503373ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614155b8015620041f057506020546000808a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b1562004293576200420285856200488d565b94506200424f600a60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205485620048a7565b600a60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6801000000000000000083029150601054680100000000000000008402811515620042ba57fe5b04600e60008282540192505081905550601054680100000000000000008402811515620042e357fe5b0487028203820391508187600e540203905080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506200434e85846200488d565b94506200435e600d5486620048a7565b600d819055506200437260125488620048a7565b6012819055507fe3d4187f6ca4248660cc0ac8b8056515bac4a8132be2eca31d6d0cc170722a7e3388604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a13373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef896040518082815260200191505060405180910390a35050505050505050565b60006040805190810160405280600581526020017f41444d494e00000000000000000000000000000000000000000000000000000081525062004496338262001b5e565b828433620044a362004f8c565b808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050604051809103906000f08015801562004530573d6000803e3d6000fd5b509150600f8290806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515620045fc57600080fd5b620046078162004dd3565b50565b6000806040805190810160405280600581526020017f41444d494e0000000000000000000000000000000000000000000000000000008152506200464f338262001b5e565b8391508173ffffffffffffffffffffffffffffffffffffffff16639b012dec6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b158015620046b757600080fd5b505af1158015620046cc573d6000803e3d6000fd5b505050505050919050565b601f5481565b620046e9828262004834565b1515620046f557600080fd5b5050565b6200477a826003836040518082805190602001908083835b60208310151562004738578051825260208201915060208101905060208303925062004711565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902062004ed090919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff167fd211483f91fc6eff862467f8de606587a30c8fc9981056f051b897a418df803a826040518080602001828103825283818151815260200191508051906020019080838360005b83811015620047f5578082015181840152602081019050620047d8565b50505050905090810190601f168015620048235780820380516001836020036101000a031916815260200191505b509250505060405180910390a25050565b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60008282111515156200489c57fe5b818303905092915050565b60008183019050828110151515620048bb57fe5b80905092915050565b60008183811515620048d257fe5b04905092915050565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515620049ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c8152602001807f7468652062616c616e636520696e207468652066726f6d20616464726573732081526020017f697320736d616c6c6572207468616e207468652074782076616c75650000000081525060400191505060405180910390fd5b6000620049c8600162002bcd565b1115620049da57620049d9620022e5565b5b62004a2d826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200488d90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062004ac2826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620048a790919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600e5402600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600e5402600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b62004c97826003836040518082805190602001908083835b60208310151562004c55578051825260208201915060208101905060208303925062004c2e565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902062004f2e90919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff167fbfec83d64eaa953f2708271a023ab9ee82057f8f3578d548c1a4ba0b5b700489826040518080602001828103825283818151815260200191508051906020019080838360005b8381101562004d1257808201518184015260208101905062004cf5565b50505050905090810190601f16801562004d405780820380516001836020036101000a031916815260200191505b509250505060405180910390a25050565b600080600062004d7362004d6a60165460175462004d97565b6103e8620048c4565b915062004d8b828502670de0b6b3a7640000620048c4565b90508092505050919050565b60008083141562004dac576000905062004dcd565b818302905081838281151562004dbe57fe5b0414151562004dc957fe5b8090505b92915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151562004e1057600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b604051610d028062004f9e83390190560060806040526040805190810160405280601081526020017f4d756c74695369675472616e73666572000000000000000000000000000000008152506001908051906020019061004f9291906101e6565b506040805190810160405280600381526020017f4d535400000000000000000000000000000000000000000000000000000000008152506002908051906020019061009b9291906101e6565b506000600360006101000a81548160ff0219169083151502179055506000600360016101000a81548160ff0219169083151502179055503480156100de57600080fd5b50604051606080610d02833981018060405281019080805190602001909291908051906020019092919080519060200190929190505050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508260048190555081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505061028b565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061022757805160ff1916838001178555610255565b82800160010185558215610255579182015b82811115610254578251825591602001919060010190610239565b5b5090506102629190610266565b5090565b61028891905b8082111561028457600081600090555060010161026c565b5090565b90565b610a688061029a6000396000f3006080604052600436106100ba576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146100bf57806317fc45e21461014f5780632a8d26e81461017a5780635210eb5614610191578063522e1177146101e8578063794542ad146102175780638da5cb5b1461024657806395d89b411461029d5780639b012dec1461032d5780639c30ad7e14610344578063d424ee7d14610373578063f2fde38b146103ca575b600080fd5b3480156100cb57600080fd5b506100d461040d565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101145780820151818401526020810190506100f9565b50505050905090810190601f1680156101415780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561015b57600080fd5b506101646104ab565b6040518082815260200191505060405180910390f35b34801561018657600080fd5b5061018f6104b1565b005b34801561019d57600080fd5b506101a6610665565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156101f457600080fd5b506101fd61068b565b604051808215151515815260200191505060405180910390f35b34801561022357600080fd5b5061022c61069e565b604051808215151515815260200191505060405180910390f35b34801561025257600080fd5b5061025b6106b1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102a957600080fd5b506102b26106d6565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102f25780820151818401526020810190506102d7565b50505050905090810190601f16801561031f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561033957600080fd5b50610342610774565b005b34801561035057600080fd5b5061035961089d565b604051808215151515815260200191505060405180910390f35b34801561037f57600080fd5b506103886108b5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103d657600080fd5b5061040b600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506108db565b005b60018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156104a35780601f10610478576101008083540402835291602001916104a3565b820191906000526020600020905b81548152906001019060200180831161048657829003601f168201915b505050505081565b60045481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561050c57600080fd5b60001515600360019054906101000a900460ff161515141515610597576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f63616e6e6f7420617070726f766520612064656e696564207472616e7366657281525060200191505060405180910390fd5b60001515600360009054906101000a900460ff161515141515610648576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f63616e6e6f7420617070726f7665206120636f6d706c657465207472616e736681526020017f657200000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6001600360006101000a81548160ff021916908315150217905550565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900460ff1681565b600360019054906101000a900460ff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60028054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561076c5780601f106107415761010080835404028352916020019161076c565b820191906000526020600020905b81548152906001019060200180831161074f57829003601f168201915b505050505081565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156107cf57600080fd5b60001515600360019054906101000a900460ff161515141515610880576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001807f63616e6e6f742064656e792061207472616e736665722074686174206973206181526020017f6c72656164792064656e6965640000000000000000000000000000000000000081525060400191505060405180910390fd5b6001600360016101000a81548160ff021916908315150217905550565b6000600360009054906101000a900460ff1615905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561093657600080fd5b61093f81610942565b50565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561097e57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505600a165627a7a7230582007836e7e623c8e9d7b537a35f7aa6db9b79efc15122dd9ec6f8029815837bf8e0029a165627a7a7230582027fcae16c7970f526dd3ff325b918261a5939ad76cfb3b665657c43ea1f1d2bb0029
Deployed Bytecode
0x608060405260043610620003f6576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806265318b14620003fb578063024fd650146200045557806306fdde0314620004a6578063095ea7b3146200053c5780630988ca8c14620005a45780630f5f1dbc14620006305780631785f53c146200065e57806318160ddd14620006a45780631f35bc4014620006d25780632121dc751462000718578063217fe6c6146200074a57806323b872dd14620007ee57806324d7806c14620008765780632813de1714620008d4578063298e681e14620009065780632a9121c714620009345780632d02a5b214620009785780632f54bf6e14620009a85780632f65142c1462000a065780632ff2e9dc1462000a7757806330ab85b91462000aa5578063313ce5671462000ad3578063315b91481462000b07578063350924231462000b3557806336e0f6cc1462000b675780633ccfd60b1462000b995780633ce7214c1462000bb35780633e1f55e41462000be357806340c3b18e1462000c115780634355b9d21462000c2b578063445014041462000c89578063485505761462000cb75780634c309d1b1462000ce55780634e6904b51462000cf15780635d2d733d1462000d2b57806360d48b441462000d5b578063688abbf71462000d675780636a61e5fc1462000dad5780636e1682a01462000ddd578063704b6c021462000e0b57806370a082311462000e51578063713494d71462000eab5780637138127a1462000edb578063719fa76d1462000f0b57806375b238fc1462000f4557806376731fe11462000fdb578063792fd9a9146200100b5780637ff9b596146200103957806382337cbe146200106757806384ae2bc6146200109757806385dff0ff14620010c557806388ab152614620010f55780638da5cb5b14620011255780639377d711146200117f57806395d89b4114620011ef578063969ddf8a14620012855780639c1e03a014620012b35780639cd23707146200130d578063a247bc32146200133f578063a3adb958146200136d578063a9059cbb14620013c7578063ab7cb211146200142f578063b47dbf221462001461578063c2507ac1146200148f578063c6f7c5c814620014d3578063cae9ca511462001503578063cd4795cc14620015b1578063d373507b14620015e1578063d60468361462001613578063d6a3f3741462001645578063dd62ed3e1462001673578063e4849b3214620016ed578063e8315742146200171d578063e9d3fb78146200174b578063eb328095146200177b578063f088d54714620017ad578063f17e48ec14620017e5578063f2fde38b1462001835578063f5c4201f146200187b578063fd085b4114620018d9575b600080fd5b3480156200040857600080fd5b506200043f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062001907565b6040518082815260200191505060405180910390f35b3480156200046257600080fd5b506200046d62001975565b60405180878152602001868152602001858152602001848152602001838152602001828152602001965050505050505060405180910390f35b348015620004b357600080fd5b50620004be620019ca565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101562000500578082015181840152602081019050620004e3565b50505050905090810190601f1680156200052e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156200054957600080fd5b506200058a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505062001a6c565b604051808215151515815260200191505060405180910390f35b348015620005b157600080fd5b506200062e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929050505062001b5e565b005b3480156200063d57600080fd5b506200064862001be3565b6040518082815260200191505060405180910390f35b3480156200066b57600080fd5b50620006a2600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062001be9565b005b348015620006b157600080fd5b50620006bc62001c8a565b6040518082815260200191505060405180910390f35b348015620006df57600080fd5b5062000716600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062001c90565b005b3480156200072557600080fd5b506200073062001d17565b604051808215151515815260200191505060405180910390f35b3480156200075757600080fd5b50620007d4600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929050505062001d2a565b604051808215151515815260200191505060405180910390f35b348015620007fb57600080fd5b506200085c600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505062001db5565b604051808215151515815260200191505060405180910390f35b3480156200088357600080fd5b50620008ba600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062002062565b604051808215151515815260200191505060405180910390f35b348015620008e157600080fd5b50620008ec620020ac565b604051808215151515815260200191505060405180910390f35b3480156200091357600080fd5b506200091e620020bf565b6040518082815260200191505060405180910390f35b3480156200094157600080fd5b506200096260048036038101908080359060200190929190505050620020c5565b6040518082815260200191505060405180910390f35b3480156200098557600080fd5b50620009a660048036038101908080359060200190929190505050620020eb565b005b348015620009b557600080fd5b50620009ec600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506200215c565b604051808215151515815260200191505060405180910390f35b34801562000a1357600080fd5b5062000a1e620021b6565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101562000a6357808201518184015260208101905062000a46565b505050509050019250505060405180910390f35b34801562000a8457600080fd5b5062000a8f62002246565b6040518082815260200191505060405180910390f35b34801562000ab257600080fd5b5062000abd62002253565b6040518082815260200191505060405180910390f35b34801562000ae057600080fd5b5062000aeb62002259565b604051808260ff1660ff16815260200191505060405180910390f35b34801562000b1457600080fd5b5062000b1f6200226c565b6040518082815260200191505060405180910390f35b34801562000b4257600080fd5b5062000b6560048036038101908080351515906020019092919050505062002272565b005b34801562000b7457600080fd5b5062000b7f620022d2565b604051808215151515815260200191505060405180910390f35b34801562000ba657600080fd5b5062000bb1620022e5565b005b34801562000bc057600080fd5b5062000be16004803603810190808035906020019092919050505062002474565b005b34801562000bf057600080fd5b5062000bfb620024c1565b6040518082815260200191505060405180910390f35b34801562000c1e57600080fd5b5062000c29620024cb565b005b34801562000c3857600080fd5b5062000c6f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062002736565b604051808215151515815260200191505060405180910390f35b34801562000c9657600080fd5b5062000ca162002af3565b6040518082815260200191505060405180910390f35b34801562000cc457600080fd5b5062000ccf62002af9565b6040518082815260200191505060405180910390f35b62000cef62002aff565b005b34801562000cfe57600080fd5b5062000d29600480360381019080803590602001909291908035906020019092919050505062002b15565b005b34801562000d3857600080fd5b5062000d596004803603810190808035906020019092919050505062002b6a565b005b62000d6562002bb7565b005b34801562000d7457600080fd5b5062000d9760048036038101908080351515906020019092919050505062002bcd565b6040518082815260200191505060405180910390f35b34801562000dba57600080fd5b5062000ddb6004803603810190808035906020019092919050505062002c3f565b005b34801562000dea57600080fd5b5062000df562002cb0565b6040518082815260200191505060405180910390f35b34801562000e1857600080fd5b5062000e4f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062002cb6565b005b34801562000e5e57600080fd5b5062000e95600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062002d57565b6040518082815260200191505060405180910390f35b34801562000eb857600080fd5b5062000ed96004803603810190808035906020019092919050505062002d9f565b005b34801562000ee857600080fd5b5062000f096004803603810190808035906020019092919050505062002dec565b005b34801562000f1857600080fd5b5062000f43600480360381019080803590602001909291908035906020019092919050505062002fb8565b005b34801562000f5257600080fd5b5062000f5d6200300d565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101562000f9f57808201518184015260208101905062000f82565b50505050905090810190601f16801562000fcd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801562000fe857600080fd5b50620010096004803603810190808035906020019092919050505062003046565b005b3480156200101857600080fd5b506200102362003093565b6040518082815260200191505060405180910390f35b3480156200104657600080fd5b5062001051620030a1565b6040518082815260200191505060405180910390f35b3480156200107457600080fd5b506200109560048036038101908080359060200190929190505050620030a7565b005b348015620010a457600080fd5b50620010af62003126565b6040518082815260200191505060405180910390f35b348015620010d257600080fd5b50620010f3600480360381019080803590602001909291905050506200312c565b005b3480156200110257600080fd5b50620011236004803603810190808035906020019092919050505062003179565b005b3480156200113257600080fd5b506200113d6200322d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156200118c57600080fd5b50620011ad6004803603810190808035906020019092919050505062003253565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015620011fc57600080fd5b506200120762003292565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015620012495780820151818401526020810190506200122c565b50505050905090810190601f168015620012775780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156200129257600080fd5b506200129d62003334565b6040518082815260200191505060405180910390f35b348015620012c057600080fd5b50620012cb6200333a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156200131a57600080fd5b506200133d60048036038101908080351515906020019092919050505062003360565b005b3480156200134c57600080fd5b5062001357620034b4565b6040518082815260200191505060405180910390f35b3480156200137a57600080fd5b5062001385620034fb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015620013d457600080fd5b5062001415600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505062003521565b604051808215151515815260200191505060405180910390f35b3480156200143c57600080fd5b506200144762003830565b604051808215151515815260200191505060405180910390f35b3480156200146e57600080fd5b506200147962003843565b6040518082815260200191505060405180910390f35b3480156200149c57600080fd5b50620014bd6004803603810190808035906020019092919050505062003849565b6040518082815260200191505060405180910390f35b348015620014e057600080fd5b5062001501600480360381019080803590602001909291905050506200386b565b005b3480156200151057600080fd5b5062001597600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050620038b8565b604051808215151515815260200191505060405180910390f35b348015620015be57600080fd5b50620015df6004803603810190808035906020019092919050505062003b0c565b005b348015620015ee57600080fd5b506200161160048036038101908080351515906020019092919050505062003bc0565b005b3480156200162057600080fd5b506200164360048036038101908080351515906020019092919050505062003c20565b005b3480156200165257600080fd5b506200165d62003c80565b6040518082815260200191505060405180910390f35b3480156200168057600080fd5b50620016d7600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062003c86565b6040518082815260200191505060405180910390f35b348015620016fa57600080fd5b506200171b6004803603810190808035906020019092919050505062003d0d565b005b3480156200172a57600080fd5b506200173562003f41565b6040518082815260200191505060405180910390f35b3480156200175857600080fd5b50620017796004803603810190808035906020019092919050505062003f47565b005b3480156200178857600080fd5b506200179362003f94565b604051808215151515815260200191505060405180910390f35b620017e3600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062003fa7565b005b348015620017f257600080fd5b5062001833600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505062004452565b005b3480156200184257600080fd5b5062001879600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506200459f565b005b3480156200188857600080fd5b50620018bf600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506200460a565b604051808215151515815260200191505060405180910390f35b348015620018e657600080fd5b50620018f1620046d7565b6040518082815260200191505060405180910390f35b600068010000000000000000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200195e8462002d57565b600e5402038115156200196d57fe5b049050919050565b6000806000806000803073ffffffffffffffffffffffffffffffffffffffff1631620019a13362002d57565b601054620019b0600162002bcd565b601754601654955095509550955095509550909192939495565b60048054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801562001a645780601f1062001a385761010080835404028352916020019162001a64565b820191906000526020600020905b81548152906001019060200180831162001a4657829003601f168201915b505050505081565b600081600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b62001bdf826003836040518082805190602001908083835b60208310151562001b9d578051825260208201915060208101905060208303925062001b76565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020620046dd90919063ffffffff16565b5050565b600d5481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151562001c4657600080fd5b62001c87816040805190810160405280600581526020017f41444d494e000000000000000000000000000000000000000000000000000000815250620046f9565b50565b60105481565b6040805190810160405280600581526020017f41444d494e00000000000000000000000000000000000000000000000000000081525062001cd2338262001b5e565b81602160036101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b601460009054906101000a900460ff1681565b600062001dad836003846040518082805190602001908083835b60208310151562001d6b578051825260208201915060208101905060208303925062001d44565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390206200483490919063ffffffff16565b905092915050565b600062001e0a826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200488d90919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062001edd82600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200488d90919063ffffffff16565b600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062001fb0826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620048a790919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000620020a5826040805190810160405280600581526020017f41444d494e00000000000000000000000000000000000000000000000000000081525062001d2a565b9050919050565b601460019054906101000a900460ff1681565b60175481565b600080620020e0670de0b6b3a76400008402601554620048c4565b905080915050919050565b6040805190810160405280600581526020017f41444d494e0000000000000000000000000000000000000000000000000000008152506200212d338262001b5e565b60195482101515156200213f57600080fd5b601a5482111515156200215157600080fd5b816016819055505050565b60008173ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16149050919050565b6060600f8054806020026020016040519081016040528092919081815260200182805480156200223c57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311620021f1575b5050505050905090565b68035f4ba8e9c6b9800081565b60125481565b600660009054906101000a900460ff1681565b60205481565b6040805190810160405280600581526020017f41444d494e000000000000000000000000000000000000000000000000000000815250620022b4338262001b5e565b81602160026101000a81548160ff0219169083151502179055505050565b602160019054906101000a900460ff1681565b600080339150620022f7600062002bcd565b9050680100000000000000008102600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054810190506000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801562002421573d6000803e3d6000fd5b508173ffffffffffffffffffffffffffffffffffffffff167fccad973dcd043c7d680389db4378bd6b9775db7124092e9e0422c9e46d7985dc826040518082815260200191505060405180910390a25050565b6040805190810160405280600581526020017f41444d494e000000000000000000000000000000000000000000000000000000815250620024b6338262001b5e565b816007819055505050565b6000600e54905090565b6040805190810160405280600581526020017f41444d494e0000000000000000000000000000000000000000000000000000008152506200250d338262001b5e565b60011515601460019054906101000a900460ff161515141515620025bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001807f7472616e7366657220746f67676c65206e6f7420696e2070656e64696e67207381526020017f746174650000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16601460029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151515620026ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001807f746865207265717565737465722063616e6e6f7420617070726f76652074686581526020017f207472616e7366657220746f67676c650000000000000000000000000000000081525060400191505060405180910390fd5b601460009054906101000a900460ff1615601460006101000a81548160ff0219169083151502179055506000601460016101000a81548160ff0219169083151502179055506000601460026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060008060006040805190810160405280600581526020017f41444d494e00000000000000000000000000000000000000000000000000000081525062002780338262001b5e565b8694508473ffffffffffffffffffffffffffffffffffffffff166317fc45e26040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015620027e857600080fd5b505af1158015620027fd573d6000803e3d6000fd5b505050506040513d60208110156200281457600080fd5b810190808051906020019092919050505093508473ffffffffffffffffffffffffffffffffffffffff16635210eb566040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156200288c57600080fd5b505af1158015620028a1573d6000803e3d6000fd5b505050506040513d6020811015620028b857600080fd5b810190808051906020019092919050505092508473ffffffffffffffffffffffffffffffffffffffff1663d424ee7d6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156200293057600080fd5b505af115801562002945573d6000803e3d6000fd5b505050506040513d60208110156200295c57600080fd5b810190808051906020019092919050505091508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415151562002a3a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001807f61207265717565737465722063616e6e6f7420617070726f766520616e20616481526020017f6d696e207472616e73666572000000000000000000000000000000000000000081525060400191505060405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16632a8d26e86040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b15801562002a9f57600080fd5b505af115801562002ab4573d6000803e3d6000fd5b5050505062002ae783600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1686620048db565b95505050505050919050565b60165481565b600c5481565b62002b0d600d5434620048a7565b600d81905550565b6040805190810160405280600581526020017f41444d494e00000000000000000000000000000000000000000000000000000081525062002b57338262001b5e565b8160198190555082601a81905550505050565b6040805190810160405280600581526020017f41444d494e00000000000000000000000000000000000000000000000000000081525062002bac338262001b5e565b816020819055505050565b62002bc5600c5434620048a7565b600c81905550565b6000803390508262002bea5762002be48162001907565b62002c37565b600a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462002c358262001907565b015b915050919050565b6040805190810160405280600581526020017f41444d494e00000000000000000000000000000000000000000000000000000081525062002c81338262001b5e565b601b54821015151562002c9357600080fd5b601c54821115151562002ca557600080fd5b816015819055505050565b60135481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151562002d1357600080fd5b62002d54816040805190810160405280600581526020017f41444d494e00000000000000000000000000000000000000000000000000000081525062004c16565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6040805190810160405280600581526020017f41444d494e00000000000000000000000000000000000000000000000000000081525062002de1338262001b5e565b816018819055505050565b602160029054906101000a900460ff16151562002e0857600080fd5b806000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151562002e5657600080fd5b600062002e64600162002bcd565b111562002e765762002e75620022e5565b5b80600e5402600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555062002f116000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826200488d565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062002f61601054826200488d565b6010819055503373ffffffffffffffffffffffffffffffffffffffff167f2f61833efe103718b6e4db0d250ac84e125f9bf724fe3856b695c214b7cc55be826040518082815260200191505060405180910390a250565b6040805190810160405280600581526020017f41444d494e00000000000000000000000000000000000000000000000000000081525062002ffa338262001b5e565b81601b8190555082601c81905550505050565b6040805190810160405280600581526020017f41444d494e00000000000000000000000000000000000000000000000000000081525081565b6040805190810160405280600581526020017f41444d494e00000000000000000000000000000000000000000000000000000081525062003088338262001b5e565b816017819055505050565b6000601054600e5402905090565b60155481565b6040805190810160405280600581526020017f41444d494e000000000000000000000000000000000000000000000000000000815250620030e9338262001b5e565b81601181905550601154601054111562003119576200310d6010546011546200488d565b60128190555062003122565b60006012819055505b5050565b60185481565b6040805190810160405280600581526020017f41444d494e0000000000000000000000000000000000000000000000000000008152506200316e338262001b5e565b81601f819055505050565b6040805190810160405280600581526020017f41444d494e000000000000000000000000000000000000000000000000000000815250620031bb338262001b5e565b600c548211151515620031cd57600080fd5b620031db600c54836200488d565b600c819055503373ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015801562003228573d6000803e3d6000fd5b505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f818154811015156200326357fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60058054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156200332c5780601f1062003300576101008083540402835291602001916200332c565b820191906000526020600020905b8154815290600101906020018083116200330e57829003601f168201915b505050505081565b60115481565b602160039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6040805190810160405280600581526020017f41444d494e000000000000000000000000000000000000000000000000000000815250620033a2338262001b5e565b811515601460009054906101000a900460ff1615151415151562003454576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001807f746f20696e69742061207472616e7366657220746f67676c652c20746865207481526020017f6f5374617465206d757374206368616e6765000000000000000000000000000081525060400191505060405180910390fd5b6001601460016101000a81548160ff02191690831515021790555033601460026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905090565b601460029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515620035ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f63616e6e6f74207472616e7366657220746f20746865207a65726f206164647281526020017f657373000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156200369b5750602160039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b156200372e5760011515601460009054906101000a900460ff1615151415156200372d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f474754206973206e6f7420796574207472616e7366657261626c65000000000081525060200191505060405180910390fd5b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515156200381b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001807f746865206f776e6572206f66207468652047475420636f6e747261637420636181526020017f6e6e6f74207472616e736665720000000000000000000000000000000000000081525060400191505060405180910390fd5b62003828833384620048db565b905092915050565b602160009054906101000a900460ff1681565b601e5481565b6000601554670de0b6b3a764000083028115156200386357fe5b049050919050565b6040805190810160405280600581526020017f41444d494e000000000000000000000000000000000000000000000000000000815250620038ad338262001b5e565b81601d819055505050565b600082600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040518082815260200191505060405180910390a38373ffffffffffffffffffffffffffffffffffffffff16638f4ffcb1338530866040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101562003a9757808201518184015260208101905062003a7a565b50505050905090810190601f16801562003ac55780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801562003ae857600080fd5b505af115801562003afd573d6000803e3d6000fd5b50505050600190509392505050565b6040805190810160405280600581526020017f41444d494e00000000000000000000000000000000000000000000000000000081525062003b4e338262001b5e565b600d54821115151562003b6057600080fd5b62003b6e600d54836200488d565b600d819055503373ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015801562003bbb573d6000803e3d6000fd5b505050565b6040805190810160405280600581526020017f41444d494e00000000000000000000000000000000000000000000000000000081525062003c02338262001b5e565b81602160016101000a81548160ff0219169083151502179055505050565b6040805190810160405280600581526020017f41444d494e00000000000000000000000000000000000000000000000000000081525062003c62338262001b5e565b81602160006101000a81548160ff0219169083151502179055505050565b601d5481565b6000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600080602160019054906101000a900460ff16151562003d2c57600080fd5b601f54831015151562003d3e57600080fd5b826000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151562003d8c57600080fd5b62003d978362004d51565b9150600d54821115151562003dab57600080fd5b62003db9601054846200488d565b60108190555082601254111562003de45762003dd8601254846200488d565b60128190555062003ded565b60006012819055505b62003e376000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846200488d565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555068010000000000000000820283600e540201905080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555062003ee8600d54836200488d565b600d819055503373ffffffffffffffffffffffffffffffffffffffff167fd527546b9a6c42ae0e36c977e5efc630305d93e36fb17f05b2c28b6333af41d8846040518082815260200191505060405180910390a2505050565b60075481565b6040805190810160405280600581526020017f41444d494e00000000000000000000000000000000000000000000000000000081525062003f89338262001b5e565b81601e819055505050565b602160029054906101000a900460ff1681565b6000806000806000806000601e54341015151562003fc457600080fd5b602160009054906101000a900460ff16151562003fe057600080fd5b62003feb34620020c5565b965062003ffb60135434620048a7565b6013819055506007546200401260105489620048a7565b111515156200402057600080fd5b6200406a6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205488620048a7565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620040ba87601054620048a7565b601081905550620040db620040d26016543462004d97565b601554620048c4565b9550620040e934876200488d565b945062004106620040fd8660185462004d97565b6103e8620048c4565b93506200411686600c54620048a7565b600c81905550620041376200412e601d548762004d97565b6103e8620048c4565b9250600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614158015620041a357503373ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614155b8015620041f057506020546000808a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b1562004293576200420285856200488d565b94506200424f600a60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205485620048a7565b600a60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6801000000000000000083029150601054680100000000000000008402811515620042ba57fe5b04600e60008282540192505081905550601054680100000000000000008402811515620042e357fe5b0487028203820391508187600e540203905080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506200434e85846200488d565b94506200435e600d5486620048a7565b600d819055506200437260125488620048a7565b6012819055507fe3d4187f6ca4248660cc0ac8b8056515bac4a8132be2eca31d6d0cc170722a7e3388604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a13373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef896040518082815260200191505060405180910390a35050505050505050565b60006040805190810160405280600581526020017f41444d494e00000000000000000000000000000000000000000000000000000081525062004496338262001b5e565b828433620044a362004f8c565b808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050604051809103906000f08015801562004530573d6000803e3d6000fd5b509150600f8290806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515620045fc57600080fd5b620046078162004dd3565b50565b6000806040805190810160405280600581526020017f41444d494e0000000000000000000000000000000000000000000000000000008152506200464f338262001b5e565b8391508173ffffffffffffffffffffffffffffffffffffffff16639b012dec6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b158015620046b757600080fd5b505af1158015620046cc573d6000803e3d6000fd5b505050505050919050565b601f5481565b620046e9828262004834565b1515620046f557600080fd5b5050565b6200477a826003836040518082805190602001908083835b60208310151562004738578051825260208201915060208101905060208303925062004711565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902062004ed090919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff167fd211483f91fc6eff862467f8de606587a30c8fc9981056f051b897a418df803a826040518080602001828103825283818151815260200191508051906020019080838360005b83811015620047f5578082015181840152602081019050620047d8565b50505050905090810190601f168015620048235780820380516001836020036101000a031916815260200191505b509250505060405180910390a25050565b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60008282111515156200489c57fe5b818303905092915050565b60008183019050828110151515620048bb57fe5b80905092915050565b60008183811515620048d257fe5b04905092915050565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515620049ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c8152602001807f7468652062616c616e636520696e207468652066726f6d20616464726573732081526020017f697320736d616c6c6572207468616e207468652074782076616c75650000000081525060400191505060405180910390fd5b6000620049c8600162002bcd565b1115620049da57620049d9620022e5565b5b62004a2d826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200488d90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062004ac2826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620048a790919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600e5402600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600e5402600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b62004c97826003836040518082805190602001908083835b60208310151562004c55578051825260208201915060208101905060208303925062004c2e565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902062004f2e90919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff167fbfec83d64eaa953f2708271a023ab9ee82057f8f3578d548c1a4ba0b5b700489826040518080602001828103825283818151815260200191508051906020019080838360005b8381101562004d1257808201518184015260208101905062004cf5565b50505050905090810190601f16801562004d405780820380516001836020036101000a031916815260200191505b509250505060405180910390a25050565b600080600062004d7362004d6a60165460175462004d97565b6103e8620048c4565b915062004d8b828502670de0b6b3a7640000620048c4565b90508092505050919050565b60008083141562004dac576000905062004dcd565b818302905081838281151562004dbe57fe5b0414151562004dc957fe5b8090505b92915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151562004e1057600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b604051610d028062004f9e83390190560060806040526040805190810160405280601081526020017f4d756c74695369675472616e73666572000000000000000000000000000000008152506001908051906020019061004f9291906101e6565b506040805190810160405280600381526020017f4d535400000000000000000000000000000000000000000000000000000000008152506002908051906020019061009b9291906101e6565b506000600360006101000a81548160ff0219169083151502179055506000600360016101000a81548160ff0219169083151502179055503480156100de57600080fd5b50604051606080610d02833981018060405281019080805190602001909291908051906020019092919080519060200190929190505050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508260048190555081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505061028b565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061022757805160ff1916838001178555610255565b82800160010185558215610255579182015b82811115610254578251825591602001919060010190610239565b5b5090506102629190610266565b5090565b61028891905b8082111561028457600081600090555060010161026c565b5090565b90565b610a688061029a6000396000f3006080604052600436106100ba576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146100bf57806317fc45e21461014f5780632a8d26e81461017a5780635210eb5614610191578063522e1177146101e8578063794542ad146102175780638da5cb5b1461024657806395d89b411461029d5780639b012dec1461032d5780639c30ad7e14610344578063d424ee7d14610373578063f2fde38b146103ca575b600080fd5b3480156100cb57600080fd5b506100d461040d565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101145780820151818401526020810190506100f9565b50505050905090810190601f1680156101415780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561015b57600080fd5b506101646104ab565b6040518082815260200191505060405180910390f35b34801561018657600080fd5b5061018f6104b1565b005b34801561019d57600080fd5b506101a6610665565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156101f457600080fd5b506101fd61068b565b604051808215151515815260200191505060405180910390f35b34801561022357600080fd5b5061022c61069e565b604051808215151515815260200191505060405180910390f35b34801561025257600080fd5b5061025b6106b1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102a957600080fd5b506102b26106d6565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102f25780820151818401526020810190506102d7565b50505050905090810190601f16801561031f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561033957600080fd5b50610342610774565b005b34801561035057600080fd5b5061035961089d565b604051808215151515815260200191505060405180910390f35b34801561037f57600080fd5b506103886108b5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103d657600080fd5b5061040b600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506108db565b005b60018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156104a35780601f10610478576101008083540402835291602001916104a3565b820191906000526020600020905b81548152906001019060200180831161048657829003601f168201915b505050505081565b60045481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561050c57600080fd5b60001515600360019054906101000a900460ff161515141515610597576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f63616e6e6f7420617070726f766520612064656e696564207472616e7366657281525060200191505060405180910390fd5b60001515600360009054906101000a900460ff161515141515610648576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f63616e6e6f7420617070726f7665206120636f6d706c657465207472616e736681526020017f657200000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6001600360006101000a81548160ff021916908315150217905550565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900460ff1681565b600360019054906101000a900460ff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60028054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561076c5780601f106107415761010080835404028352916020019161076c565b820191906000526020600020905b81548152906001019060200180831161074f57829003601f168201915b505050505081565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156107cf57600080fd5b60001515600360019054906101000a900460ff161515141515610880576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001807f63616e6e6f742064656e792061207472616e736665722074686174206973206181526020017f6c72656164792064656e6965640000000000000000000000000000000000000081525060400191505060405180910390fd5b6001600360016101000a81548160ff021916908315150217905550565b6000600360009054906101000a900460ff1615905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561093657600080fd5b61093f81610942565b50565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561097e57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505600a165627a7a7230582007836e7e623c8e9d7b537a35f7aa6db9b79efc15122dd9ec6f8029815837bf8e0029a165627a7a7230582027fcae16c7970f526dd3ff325b918261a5939ad76cfb3b665657c43ea1f1d2bb0029
Swarm Source
bzzr://27fcae16c7970f526dd3ff325b918261a5939ad76cfb3b665657c43ea1f1d2bb
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.79
Net Worth in ETH
0.000391
Token Allocations
ETH
100.00%
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 100.00% | $2,024.87 | 0.00039149 | $0.79272 |
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.