Source Code
Overview
ETH Balance
0 ETH
ETH Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
Latest 1 internal transaction
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 14706236 | 603 days ago | 0.00000002 ETH |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
TaxToken
Compiler Version
v0.8.20+commit.a1b79de6
Optimization Enabled:
No with 200 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.4;
library Address {
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize/address.code.length, which returns 0
// for contracts in construction, since the code is only stored at the end
// of the constructor execution.
return account.code.length > 0;
}
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, "Address: low-level call failed");
}
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResultFromTarget(target, success, returndata, errorMessage);
}
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResultFromTarget(target, success, returndata, errorMessage);
}
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResultFromTarget(target, success, returndata, errorMessage);
}
function verifyCallResultFromTarget(
address target,
bool success,
bytes memory returndata,
string memory errorMessage
) internal view returns (bytes memory) {
if (success) {
if (returndata.length == 0) {
// only check isContract if the call was successful and the return data is empty
// otherwise we already know that it was a contract
require(isContract(target), "Address: call to non-contract");
}
return returndata;
} else {
_revert(returndata, errorMessage);
}
}
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
_revert(returndata, errorMessage);
}
}
function _revert(bytes memory returndata, string memory errorMessage) private pure {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
/// @solidity memory-safe-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
pragma solidity ^0.8.0;
interface IERC20 {
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address to, uint256 amount) external returns (bool);
function allowance(address owner, address spender) external view returns (uint256);
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(address from, address to, uint256 amount) external returns (bool);
}
interface IERC20Metadata is IERC20 {
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function decimals() external view returns (uint8);
}
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
contract ERC20 is Context, IERC20, IERC20Metadata {
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
function name() public view virtual override returns (string memory) {
return _name;
}
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
function decimals() public view virtual override returns (uint8) {
return 18;
}
function totalSupply() public view virtual override returns (uint256) {
return _totalSupply;
}
function balanceOf(address account) public view virtual override returns (uint256) {
return _balances[account];
}
function transfer(address to, uint256 amount) public virtual override returns (bool) {
address owner = _msgSender();
_transfer(owner, to, amount);
return true;
}
function allowance(address owner, address spender) public view virtual override returns (uint256) {
return _allowances[owner][spender];
}
function approve(address spender, uint256 amount) public virtual override returns (bool) {
address owner = _msgSender();
_approve(owner, spender, amount);
return true;
}
function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
address spender = _msgSender();
_spendAllowance(from, spender, amount);
_transfer(from, to, amount);
return true;
}
function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
address owner = _msgSender();
_approve(owner, spender, allowance(owner, spender) + addedValue);
return true;
}
function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
address owner = _msgSender();
uint256 currentAllowance = allowance(owner, spender);
require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
unchecked {
_approve(owner, spender, currentAllowance - subtractedValue);
}
return true;
}
function _transfer(address from, address to, uint256 amount) internal virtual {
require(from != address(0), "ERC20: transfer from the zero address");
require(to != address(0), "ERC20: transfer to the zero address");
_beforeTokenTransfer(from, to, amount);
uint256 fromBalance = _balances[from];
require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
unchecked {
_balances[from] = fromBalance - amount;
// Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
// decrementing then incrementing.
_balances[to] += amount;
}
emit Transfer(from, to, amount);
_afterTokenTransfer(from, to, amount);
}
function _mint(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: mint to the zero address");
_beforeTokenTransfer(address(0), account, amount);
_totalSupply += amount;
unchecked {
// Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
_balances[account] += amount;
}
emit Transfer(address(0), account, amount);
_afterTokenTransfer(address(0), account, amount);
}
function _burn(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: burn from the zero address");
_beforeTokenTransfer(account, address(0), amount);
uint256 accountBalance = _balances[account];
require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
unchecked {
_balances[account] = accountBalance - amount;
// Overflow not possible: amount <= accountBalance <= totalSupply.
_totalSupply -= amount;
}
emit Transfer(account, address(0), amount);
_afterTokenTransfer(account, address(0), amount);
}
function _approve(address owner, address spender, uint256 amount) internal virtual {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
uint256 currentAllowance = allowance(owner, spender);
if (currentAllowance != type(uint256).max) {
require(currentAllowance >= amount, "ERC20: insufficient allowance");
unchecked {
_approve(owner, spender, currentAllowance - amount);
}
}
}
function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}
function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}
}
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
constructor() {
_transferOwnership(_msgSender());
}
modifier onlyOwner() {
_checkOwner();
_;
}
function owner() public view virtual returns (address) {
return _owner;
}
function _checkOwner() internal view virtual {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
}
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
interface IERC20Permit {
function permit(
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) external;
function nonces(address owner) external view returns (uint256);
function DOMAIN_SEPARATOR() external view returns (bytes32);
}
library SafeERC20 {
using Address for address;
function safeTransfer(IERC20 token, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
}
function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
}
function safeApprove(IERC20 token, address spender, uint256 value) internal {
// safeApprove should only be called when setting an initial allowance,
// or when resetting it to zero. To increase and decrease it, use
// 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
require(
(value == 0) || (token.allowance(address(this), spender) == 0),
"SafeERC20: approve from non-zero to non-zero allowance"
);
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
}
function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 oldAllowance = token.allowance(address(this), spender);
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance + value));
}
function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
unchecked {
uint256 oldAllowance = token.allowance(address(this), spender);
require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance - value));
}
}
function forceApprove(IERC20 token, address spender, uint256 value) internal {
bytes memory approvalCall = abi.encodeWithSelector(token.approve.selector, spender, value);
if (!_callOptionalReturnBool(token, approvalCall)) {
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, 0));
_callOptionalReturn(token, approvalCall);
}
}
function safePermit(
IERC20Permit token,
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) internal {
uint256 nonceBefore = token.nonces(owner);
token.permit(owner, spender, value, deadline, v, r, s);
uint256 nonceAfter = token.nonces(owner);
require(nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed");
}
function _callOptionalReturn(IERC20 token, bytes memory data) private {
// We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
// we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that
// the target address contains contract code and also asserts for success in the low-level call.
bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
require(returndata.length == 0 || abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
}
function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {
// We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
// we're implementing it ourselves. We cannot use {Address-functionCall} here since this should return false
// and not revert is the subcall reverts.
(bool success, bytes memory returndata) = address(token).call(data);
return
success && (returndata.length == 0 || abi.decode(returndata, (bool))) && Address.isContract(address(token));
}
}
library Math {
enum Rounding {
Down, // Toward negative infinity
Up, // Toward infinity
Zero // Toward zero
}
function max(uint256 a, uint256 b) internal pure returns (uint256) {
return a > b ? a : b;
}
function min(uint256 a, uint256 b) internal pure returns (uint256) {
return a < b ? a : b;
}
function average(uint256 a, uint256 b) internal pure returns (uint256) {
// (a + b) / 2 can overflow.
return (a & b) + (a ^ b) / 2;
}
function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {
// (a + b - 1) / b can overflow on addition, so we distribute.
return a == 0 ? 0 : (a - 1) / b + 1;
}
function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {
unchecked {
// 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use
// use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256
// variables such that product = prod1 * 2^256 + prod0.
uint256 prod0; // Least significant 256 bits of the product
uint256 prod1; // Most significant 256 bits of the product
assembly {
let mm := mulmod(x, y, not(0))
prod0 := mul(x, y)
prod1 := sub(sub(mm, prod0), lt(mm, prod0))
}
// Handle non-overflow cases, 256 by 256 division.
if (prod1 == 0) {
// Solidity will revert if denominator == 0, unlike the div opcode on its own.
// The surrounding unchecked block does not change this fact.
// See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.
return prod0 / denominator;
}
// Make sure the result is less than 2^256. Also prevents denominator == 0.
require(denominator > prod1, "Math: mulDiv overflow");
uint256 remainder;
assembly {
// Compute remainder using mulmod.
remainder := mulmod(x, y, denominator)
// Subtract 256 bit number from 512 bit number.
prod1 := sub(prod1, gt(remainder, prod0))
prod0 := sub(prod0, remainder)
}
// Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.
// See https://cs.stackexchange.com/q/138556/92363.
// Does not overflow because the denominator cannot be zero at this stage in the function.
uint256 twos = denominator & (~denominator + 1);
assembly {
// Divide denominator by twos.
denominator := div(denominator, twos)
// Divide [prod1 prod0] by twos.
prod0 := div(prod0, twos)
// Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.
twos := add(div(sub(0, twos), twos), 1)
}
// Shift in bits from prod1 into prod0.
prod0 |= prod1 * twos;
// Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such
// that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for
// four bits. That is, denominator * inv = 1 mod 2^4.
uint256 inverse = (3 * denominator) ^ 2;
// Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works
// in modular arithmetic, doubling the correct bits in each step.
inverse *= 2 - denominator * inverse; // inverse mod 2^8
inverse *= 2 - denominator * inverse; // inverse mod 2^16
inverse *= 2 - denominator * inverse; // inverse mod 2^32
inverse *= 2 - denominator * inverse; // inverse mod 2^64
inverse *= 2 - denominator * inverse; // inverse mod 2^128
inverse *= 2 - denominator * inverse; // inverse mod 2^256
// Because the division is now exact we can divide by multiplying with the modular inverse of denominator.
// This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is
// less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1
// is no longer required.
result = prod0 * inverse;
return result;
}
}
function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {
uint256 result = mulDiv(x, y, denominator);
if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {
result += 1;
}
return result;
}
function sqrt(uint256 a) internal pure returns (uint256) {
if (a == 0) {
return 0;
}
// For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.
//
// We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have
// `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.
//
// This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`
// → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`
// → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`
//
// Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.
uint256 result = 1 << (log2(a) >> 1);
// At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,
// since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at
// every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision
// into the expected uint128 result.
unchecked {
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
return min(result, a / result);
}
}
function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {
unchecked {
uint256 result = sqrt(a);
return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);
}
}
function log2(uint256 value) internal pure returns (uint256) {
uint256 result = 0;
unchecked {
if (value >> 128 > 0) {
value >>= 128;
result += 128;
}
if (value >> 64 > 0) {
value >>= 64;
result += 64;
}
if (value >> 32 > 0) {
value >>= 32;
result += 32;
}
if (value >> 16 > 0) {
value >>= 16;
result += 16;
}
if (value >> 8 > 0) {
value >>= 8;
result += 8;
}
if (value >> 4 > 0) {
value >>= 4;
result += 4;
}
if (value >> 2 > 0) {
value >>= 2;
result += 2;
}
if (value >> 1 > 0) {
result += 1;
}
}
return result;
}
function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {
unchecked {
uint256 result = log2(value);
return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);
}
}
function log10(uint256 value) internal pure returns (uint256) {
uint256 result = 0;
unchecked {
if (value >= 10 ** 64) {
value /= 10 ** 64;
result += 64;
}
if (value >= 10 ** 32) {
value /= 10 ** 32;
result += 32;
}
if (value >= 10 ** 16) {
value /= 10 ** 16;
result += 16;
}
if (value >= 10 ** 8) {
value /= 10 ** 8;
result += 8;
}
if (value >= 10 ** 4) {
value /= 10 ** 4;
result += 4;
}
if (value >= 10 ** 2) {
value /= 10 ** 2;
result += 2;
}
if (value >= 10 ** 1) {
result += 1;
}
}
return result;
}
function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {
unchecked {
uint256 result = log10(value);
return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);
}
}
function log256(uint256 value) internal pure returns (uint256) {
uint256 result = 0;
unchecked {
if (value >> 128 > 0) {
value >>= 128;
result += 16;
}
if (value >> 64 > 0) {
value >>= 64;
result += 8;
}
if (value >> 32 > 0) {
value >>= 32;
result += 4;
}
if (value >> 16 > 0) {
value >>= 16;
result += 2;
}
if (value >> 8 > 0) {
result += 1;
}
}
return result;
}
function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {
unchecked {
uint256 result = log256(value);
return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);
}
}
}
interface IUniswapV2Factory {
event PairCreated(
address indexed token0,
address indexed token1,
address pair,
uint256
);
function feeTo() external view returns (address);
function feeToSetter() external view returns (address);
function getPair(address tokenA, address tokenB)
external
view
returns (address pair);
function allPairs(uint256) external view returns (address pair);
function allPairsLength() external view returns (uint256);
function createPair(address tokenA, address tokenB)
external
returns (address pair);
function setFeeTo(address) external;
function setFeeToSetter(address) external;
}
pragma solidity >=0.6.2;
interface IUniswapV2Pair {
event Approval(address indexed owner, address indexed spender, uint value);
event Transfer(address indexed from, address indexed to, uint value);
function name() external pure returns (string memory);
function symbol() external pure returns (string memory);
function decimals() external pure returns (uint8);
function totalSupply() external view returns (uint);
function balanceOf(address owner) external view returns (uint);
function allowance(address owner, address spender) external view returns (uint);
function approve(address spender, uint value) external returns (bool);
function transfer(address to, uint value) external returns (bool);
function transferFrom(address from, address to, uint value) external returns (bool);
function DOMAIN_SEPARATOR() external view returns (bytes32);
function PERMIT_TYPEHASH() external pure returns (bytes32);
function nonces(address owner) external view returns (uint);
function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
event Mint(address indexed sender, uint amount0, uint amount1);
event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
event Swap(
address indexed sender,
uint amount0In,
uint amount1In,
uint amount0Out,
uint amount1Out,
address indexed to
);
event Sync(uint112 reserve0, uint112 reserve1);
function MINIMUM_LIQUIDITY() external pure returns (uint);
function factory() external view returns (address);
function token0() external view returns (address);
function token1() external view returns (address);
function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
function price0CumulativeLast() external view returns (uint);
function price1CumulativeLast() external view returns (uint);
function kLast() external view returns (uint);
function mint(address to) external returns (uint liquidity);
function burn(address to) external returns (uint amount0, uint amount1);
function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
function skim(address to) external;
function sync() external;
function initialize(address, address) external;
}
interface IUniswapV2Router01 {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function addLiquidity(
address tokenA,
address tokenB,
uint256 amountADesired,
uint256 amountBDesired,
uint256 amountAMin,
uint256 amountBMin,
address to,
uint256 deadline
)
external
returns (
uint256 amountA,
uint256 amountB,
uint256 liquidity
);
function addLiquidityETH(
address token,
uint256 amountTokenDesired,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline
)
external
payable
returns (
uint256 amountToken,
uint256 amountETH,
uint256 liquidity
);
function removeLiquidity(
address tokenA,
address tokenB,
uint256 liquidity,
uint256 amountAMin,
uint256 amountBMin,
address to,
uint256 deadline
) external returns (uint256 amountA, uint256 amountB);
function removeLiquidityETH(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline
) external returns (uint256 amountToken, uint256 amountETH);
function removeLiquidityWithPermit(
address tokenA,
address tokenB,
uint256 liquidity,
uint256 amountAMin,
uint256 amountBMin,
address to,
uint256 deadline,
bool approveMax,
uint8 v,
bytes32 r,
bytes32 s
) external returns (uint256 amountA, uint256 amountB);
function removeLiquidityETHWithPermit(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline,
bool approveMax,
uint8 v,
bytes32 r,
bytes32 s
) external returns (uint256 amountToken, uint256 amountETH);
function swapExactTokensForTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external returns (uint256[] memory amounts);
function swapTokensForExactTokens(
uint256 amountOut,
uint256 amountInMax,
address[] calldata path,
address to,
uint256 deadline
) external returns (uint256[] memory amounts);
function swapExactETHForTokens(
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external payable returns (uint256[] memory amounts);
function swapTokensForExactETH(
uint256 amountOut,
uint256 amountInMax,
address[] calldata path,
address to,
uint256 deadline
) external returns (uint256[] memory amounts);
function swapExactTokensForETH(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external returns (uint256[] memory amounts);
function swapETHForExactTokens(
uint256 amountOut,
address[] calldata path,
address to,
uint256 deadline
) external payable returns (uint256[] memory amounts);
function quote(
uint256 amountA,
uint256 reserveA,
uint256 reserveB
) external pure returns (uint256 amountB);
function getAmountOut(
uint256 amountIn,
uint256 reserveIn,
uint256 reserveOut
) external pure returns (uint256 amountOut);
function getAmountIn(
uint256 amountOut,
uint256 reserveIn,
uint256 reserveOut
) external pure returns (uint256 amountIn);
function getAmountsOut(uint256 amountIn, address[] calldata path)
external
view
returns (uint256[] memory amounts);
function getAmountsIn(uint256 amountOut, address[] calldata path)
external
view
returns (uint256[] memory amounts);
}
interface IUniswapV2Router02 is IUniswapV2Router01 {
function removeLiquidityETHSupportingFeeOnTransferTokens(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline
) external returns (uint256 amountETH);
function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline,
bool approveMax,
uint8 v,
bytes32 r,
bytes32 s
) external returns (uint256 amountETH);
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external;
function swapExactETHForTokensSupportingFeeOnTransferTokens(
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external payable;
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external;
}
contract TaxToken is ERC20, Ownable {
using SafeERC20 for IERC20;
uint8 private _decimals;
uint256 private _totalSupply;
address payable private _serviceFeeReceiver;
uint256 private _serviceFee; //amount
address payable public _taxReceiver;
uint24 private _buyFee; //percent 10^6
uint24 private _sellFee; // percent 10^6
address public _pancakeRouter;
address public _pancakePair;
mapping(address => bool) public automatedMarketMakerPairs;
constructor(
string memory name_,
string memory symbol_,
uint8 decimals_,
uint256 totalSupply_,
uint24 buyFee_,
uint24 sellFee_,
address payable taxReceiver_,
address pancakeRouter_,
address payable serviceFeeReceiver_,
uint256 serviceFee_
) payable ERC20(name_, symbol_) {
require(
msg.sender != serviceFeeReceiver_,
"Owner and marketing wallet cannot be the same"
);
require(
msg.value >= serviceFee_, "Service fee is not enough!"
);
require(
buyFee_ <= 1000000,
"sell fee should be less than 100%"
);
require(
sellFee_ <= 1000000,
"buy fee should be less than 100%"
);
_decimals = decimals_;
_totalSupply = totalSupply_;
_serviceFeeReceiver = serviceFeeReceiver_;
_buyFee = buyFee_;
_sellFee = sellFee_;
_taxReceiver = taxReceiver_;
_pancakeRouter = pancakeRouter_;
_serviceFee = serviceFee_;
_mint(msg.sender, totalSupply_);
(bool os, ) = payable(serviceFeeReceiver_).call{value: serviceFee_}("");
require(os);
_pancakePair = IUniswapV2Factory(IUniswapV2Router02(_pancakeRouter).factory()).createPair(
address(this),
IUniswapV2Router02(_pancakeRouter).WETH()
);
_setAutomatedMarketMakerPair(_pancakePair, true);
}
function decimals() public view override returns (uint8) {
return _decimals;
}
function totalSupply() public view override returns (uint256) {
return _totalSupply;
}
function updateTaxFee(
uint24 _sellTaxFee,
uint24 _buyTaxFee
) external onlyOwner {
require(
_sellTaxFee <= 1000000,
"sell fee should be less than 100%"
);
require(
_buyTaxFee <= 1000000,
"buy fee should be less than 100%"
);
_buyFee = _buyTaxFee;
_sellFee = _sellTaxFee;
}
function updateTaxReceiver(
address taxReceiver_
) external onlyOwner {
require(taxReceiver_ != address(0), "marketing wallet can't be 0");
_taxReceiver = payable(taxReceiver_);
}
function setAutomatedMarketMakerPair(address pair, bool value)
public
onlyOwner
{
require(
automatedMarketMakerPairs[pair] != value,
"Automated market maker pair is already set to that value"
);
_setAutomatedMarketMakerPair(pair, value);
}
function _setAutomatedMarketMakerPair(address pair, bool value) private {
automatedMarketMakerPairs[pair] = value;
}
function updateMainPair(
address _mainRouter,
address _baseTokenForMarket
) external onlyOwner {
address mainPair;
mainPair = IUniswapV2Factory(IUniswapV2Router02(_mainRouter).factory()).createPair(
address(this),
_baseTokenForMarket
);
_setAutomatedMarketMakerPair(mainPair, true);
}
function _transfer(
address from,
address to,
uint256 amount
) internal override {
require(from != address(0), "ERC20: transfer from the zero address");
require(to != address(0), "ERC20: transfer to the zero address");
uint256 _swapFee;
// Buy
if (automatedMarketMakerPairs[from]) {
_swapFee = amount * _buyFee / 1000000;
}
// Sell
else if (automatedMarketMakerPairs[to]) {
_swapFee = amount * _sellFee / 1000000;
}
if (_swapFee > 0) {
super._transfer(from, _taxReceiver, _swapFee);
amount = amount - _swapFee;
}
super._transfer(from, to, amount);
}
function withdrawETH() external onlyOwner {
(bool success, )=address(owner()).call{value: address(this).balance}("");
require(success, "Failed in withdrawal");
}
function withdrawToken(address token) external onlyOwner{
require(address(this) != token, "Not allowed");
IERC20(token).safeTransfer(owner(), IERC20(token).balanceOf(address(this)));
}
receive() external payable {}
}{
"evmVersion": "paris",
"optimizer": {
"enabled": false,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"uint8","name":"decimals_","type":"uint8"},{"internalType":"uint256","name":"totalSupply_","type":"uint256"},{"internalType":"uint24","name":"buyFee_","type":"uint24"},{"internalType":"uint24","name":"sellFee_","type":"uint24"},{"internalType":"address payable","name":"taxReceiver_","type":"address"},{"internalType":"address","name":"pancakeRouter_","type":"address"},{"internalType":"address payable","name":"serviceFeeReceiver_","type":"address"},{"internalType":"uint256","name":"serviceFee_","type":"uint256"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_pancakePair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_pancakeRouter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxReceiver","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_mainRouter","type":"address"},{"internalType":"address","name":"_baseTokenForMarket","type":"address"}],"name":"updateMainPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint24","name":"_sellTaxFee","type":"uint24"},{"internalType":"uint24","name":"_buyTaxFee","type":"uint24"}],"name":"updateTaxFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"taxReceiver_","type":"address"}],"name":"updateTaxReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
608060405260405162003fd238038062003fd2833981810160405281019062000029919062000b40565b898981600390816200003c919062000eb5565b5080600490816200004e919062000eb5565b5050506200007162000065620005aa60201b60201c565b620005b260201b60201c565b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603620000e2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000d99062001023565b60405180910390fd5b8034101562000128576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200011f9062001095565b60405180910390fd5b620f42408662ffffff16111562000176576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200016d906200112d565b60405180910390fd5b620f42408562ffffff161115620001c4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001bb906200119f565b60405180910390fd5b87600560146101000a81548160ff021916908360ff1602179055508660068190555081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600960146101000a81548162ffffff021916908362ffffff16021790555084600960176101000a81548162ffffff021916908362ffffff16021790555083600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806008819055506200030033886200067860201b60201c565b60008273ffffffffffffffffffffffffffffffffffffffff16826040516200032890620011f6565b60006040518083038185875af1925050503d806000811462000367576040519150601f19603f3d011682016040523d82523d6000602084013e6200036c565b606091505b50509050806200037b57600080fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003e9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200040f91906200120d565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000499573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004bf91906200120d565b6040518363ffffffff1660e01b8152600401620004de92919062001250565b6020604051808303816000875af1158015620004fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200052491906200120d565b600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000599600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620007e560201b60201c565b505050505050505050505062001387565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620006ea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006e190620012cd565b60405180910390fd5b620006fe600083836200084060201b60201c565b80600260008282546200071291906200131e565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620007c591906200136a565b60405180910390a3620007e1600083836200084560201b60201c565b5050565b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b505050565b505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620008b38262000868565b810181811067ffffffffffffffff82111715620008d557620008d462000879565b5b80604052505050565b6000620008ea6200084a565b9050620008f88282620008a8565b919050565b600067ffffffffffffffff8211156200091b576200091a62000879565b5b620009268262000868565b9050602081019050919050565b60005b838110156200095357808201518184015260208101905062000936565b60008484015250505050565b6000620009766200097084620008fd565b620008de565b90508281526020810184848401111562000995576200099462000863565b5b620009a284828562000933565b509392505050565b600082601f830112620009c257620009c16200085e565b5b8151620009d48482602086016200095f565b91505092915050565b600060ff82169050919050565b620009f581620009dd565b811462000a0157600080fd5b50565b60008151905062000a1581620009ea565b92915050565b6000819050919050565b62000a308162000a1b565b811462000a3c57600080fd5b50565b60008151905062000a508162000a25565b92915050565b600062ffffff82169050919050565b62000a708162000a56565b811462000a7c57600080fd5b50565b60008151905062000a908162000a65565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000ac38262000a96565b9050919050565b62000ad58162000ab6565b811462000ae157600080fd5b50565b60008151905062000af58162000aca565b92915050565b600062000b088262000a96565b9050919050565b62000b1a8162000afb565b811462000b2657600080fd5b50565b60008151905062000b3a8162000b0f565b92915050565b6000806000806000806000806000806101408b8d03121562000b675762000b6662000854565b5b60008b015167ffffffffffffffff81111562000b885762000b8762000859565b5b62000b968d828e01620009aa565b9a505060208b015167ffffffffffffffff81111562000bba5762000bb962000859565b5b62000bc88d828e01620009aa565b995050604062000bdb8d828e0162000a04565b985050606062000bee8d828e0162000a3f565b975050608062000c018d828e0162000a7f565b96505060a062000c148d828e0162000a7f565b95505060c062000c278d828e0162000ae4565b94505060e062000c3a8d828e0162000b29565b93505061010062000c4e8d828e0162000ae4565b92505061012062000c628d828e0162000a3f565b9150509295989b9194979a5092959850565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000cc757607f821691505b60208210810362000cdd5762000cdc62000c7f565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000d477fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000d08565b62000d53868362000d08565b95508019841693508086168417925050509392505050565b6000819050919050565b600062000d9662000d9062000d8a8462000a1b565b62000d6b565b62000a1b565b9050919050565b6000819050919050565b62000db28362000d75565b62000dca62000dc18262000d9d565b84845462000d15565b825550505050565b600090565b62000de162000dd2565b62000dee81848462000da7565b505050565b5b8181101562000e165762000e0a60008262000dd7565b60018101905062000df4565b5050565b601f82111562000e655762000e2f8162000ce3565b62000e3a8462000cf8565b8101602085101562000e4a578190505b62000e6262000e598562000cf8565b83018262000df3565b50505b505050565b600082821c905092915050565b600062000e8a6000198460080262000e6a565b1980831691505092915050565b600062000ea5838362000e77565b9150826002028217905092915050565b62000ec08262000c74565b67ffffffffffffffff81111562000edc5762000edb62000879565b5b62000ee8825462000cae565b62000ef582828562000e1a565b600060209050601f83116001811462000f2d576000841562000f18578287015190505b62000f24858262000e97565b86555062000f94565b601f19841662000f3d8662000ce3565b60005b8281101562000f675784890151825560018201915060208501945060208101905062000f40565b8683101562000f87578489015162000f83601f89168262000e77565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f4f776e657220616e64206d61726b6574696e672077616c6c65742063616e6e6f60008201527f74206265207468652073616d6500000000000000000000000000000000000000602082015250565b60006200100b602d8362000f9c565b9150620010188262000fad565b604082019050919050565b600060208201905081810360008301526200103e8162000ffc565b9050919050565b7f5365727669636520666565206973206e6f7420656e6f75676821000000000000600082015250565b60006200107d601a8362000f9c565b91506200108a8262001045565b602082019050919050565b60006020820190508181036000830152620010b0816200106e565b9050919050565b7f73656c6c206665652073686f756c64206265206c657373207468616e2031303060008201527f2500000000000000000000000000000000000000000000000000000000000000602082015250565b60006200111560218362000f9c565b91506200112282620010b7565b604082019050919050565b60006020820190508181036000830152620011488162001106565b9050919050565b7f627579206665652073686f756c64206265206c657373207468616e2031303025600082015250565b60006200118760208362000f9c565b915062001194826200114f565b602082019050919050565b60006020820190508181036000830152620011ba8162001178565b9050919050565b600081905092915050565b50565b6000620011de600083620011c1565b9150620011eb82620011cc565b600082019050919050565b60006200120382620011cf565b9150819050919050565b60006020828403121562001226576200122562000854565b5b6000620012368482850162000b29565b91505092915050565b6200124a8162000afb565b82525050565b60006040820190506200126760008301856200123f565b6200127660208301846200123f565b9392505050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620012b5601f8362000f9c565b9150620012c2826200127d565b602082019050919050565b60006020820190508181036000830152620012e881620012a6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200132b8262000a1b565b9150620013388362000a1b565b9250828201905080821115620013535762001352620012ef565b5b92915050565b620013648162000a1b565b82525050565b600060208201905062001381600083018462001359565b92915050565b612c3b80620013976000396000f3fe60806040526004361061014f5760003560e01c806389476069116100b6578063b62496f51161006f578063b62496f5146104b1578063ba6f43e6146104ee578063dd62ed3e14610519578063e086e5ec14610556578063f2fde38b1461056d578063fec408431461059657610156565b8063894760691461038f5780638da5cb5b146103b857806395d89b41146103e35780639a7a23d61461040e578063a457c2d714610437578063a9059cbb1461047457610156565b80633950935111610108578063395093511461028157806356b09616146102be5780636c516a70146102e757806370a0823114610310578063715018a61461034d57806372be26931461036457610156565b806306fdde031461015b578063095ea7b31461018657806318160ddd146101c357806323b872dd146101ee5780632509180e1461022b578063313ce5671461025657610156565b3661015657005b600080fd5b34801561016757600080fd5b506101706105bf565b60405161017d9190611be2565b60405180910390f35b34801561019257600080fd5b506101ad60048036038101906101a89190611c9d565b610651565b6040516101ba9190611cf8565b60405180910390f35b3480156101cf57600080fd5b506101d8610674565b6040516101e59190611d22565b60405180910390f35b3480156101fa57600080fd5b5061021560048036038101906102109190611d3d565b61067e565b6040516102229190611cf8565b60405180910390f35b34801561023757600080fd5b506102406106ad565b60405161024d9190611d9f565b60405180910390f35b34801561026257600080fd5b5061026b6106d3565b6040516102789190611dd6565b60405180910390f35b34801561028d57600080fd5b506102a860048036038101906102a39190611c9d565b6106ea565b6040516102b59190611cf8565b60405180910390f35b3480156102ca57600080fd5b506102e560048036038101906102e09190611df1565b610721565b005b3480156102f357600080fd5b5061030e60048036038101906103099190611e1e565b6107dc565b005b34801561031c57600080fd5b5061033760048036038101906103329190611df1565b6108e4565b6040516103449190611d22565b60405180910390f35b34801561035957600080fd5b5061036261092c565b005b34801561037057600080fd5b50610379610940565b6040516103869190611e7f565b60405180910390f35b34801561039b57600080fd5b506103b660048036038101906103b19190611df1565b610966565b005b3480156103c457600080fd5b506103cd610a8a565b6040516103da9190611d9f565b60405180910390f35b3480156103ef57600080fd5b506103f8610ab4565b6040516104059190611be2565b60405180910390f35b34801561041a57600080fd5b5061043560048036038101906104309190611ec6565b610b46565b005b34801561044357600080fd5b5061045e60048036038101906104599190611c9d565b610bee565b60405161046b9190611cf8565b60405180910390f35b34801561048057600080fd5b5061049b60048036038101906104969190611c9d565b610c65565b6040516104a89190611cf8565b60405180910390f35b3480156104bd57600080fd5b506104d860048036038101906104d39190611df1565b610c88565b6040516104e59190611cf8565b60405180910390f35b3480156104fa57600080fd5b50610503610ca8565b6040516105109190611d9f565b60405180910390f35b34801561052557600080fd5b50610540600480360381019061053b9190611e1e565b610cce565b60405161054d9190611d22565b60405180910390f35b34801561056257600080fd5b5061056b610d55565b005b34801561057957600080fd5b50610594600480360381019061058f9190611df1565b610e13565b005b3480156105a257600080fd5b506105bd60048036038101906105b89190611f41565b610e96565b005b6060600380546105ce90611fb0565b80601f01602080910402602001604051908101604052809291908181526020018280546105fa90611fb0565b80156106475780601f1061061c57610100808354040283529160200191610647565b820191906000526020600020905b81548152906001019060200180831161062a57829003601f168201915b5050505050905090565b60008061065c610f76565b9050610669818585610f7e565b600191505092915050565b6000600654905090565b600080610689610f76565b9050610696858285611147565b6106a18585856111d3565b60019150509392505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560149054906101000a900460ff16905090565b6000806106f5610f76565b90506107168185856107078589610cce565b6107119190612010565b610f7e565b600191505092915050565b610729611418565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f90612090565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6107e4611418565b60008273ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610831573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085591906120c5565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630846040518363ffffffff1660e01b815260040161088f9291906120f2565b6020604051808303816000875af11580156108ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d291906120c5565b90506108df816001611496565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610934611418565b61093e60006114f1565b565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61096e611418565b8073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16036109dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d390612167565b60405180910390fd5b610a876109e7610a8a565b8273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610a209190611d9f565b602060405180830381865afa158015610a3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a61919061219c565b8373ffffffffffffffffffffffffffffffffffffffff166115b79092919063ffffffff16565b50565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610ac390611fb0565b80601f0160208091040260200160405190810160405280929190818152602001828054610aef90611fb0565b8015610b3c5780601f10610b1157610100808354040283529160200191610b3c565b820191906000526020600020905b815481529060010190602001808311610b1f57829003601f168201915b5050505050905090565b610b4e611418565b801515600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503610be0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd79061223b565b60405180910390fd5b610bea8282611496565b5050565b600080610bf9610f76565b90506000610c078286610cce565b905083811015610c4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c43906122cd565b60405180910390fd5b610c598286868403610f7e565b60019250505092915050565b600080610c70610f76565b9050610c7d8185856111d3565b600191505092915050565b600c6020528060005260406000206000915054906101000a900460ff1681565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610d5d611418565b6000610d67610a8a565b73ffffffffffffffffffffffffffffffffffffffff1647604051610d8a9061231e565b60006040518083038185875af1925050503d8060008114610dc7576040519150601f19603f3d011682016040523d82523d6000602084013e610dcc565b606091505b5050905080610e10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e079061237f565b60405180910390fd5b50565b610e1b611418565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8190612411565b60405180910390fd5b610e93816114f1565b50565b610e9e611418565b620f42408262ffffff161115610ee9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee0906124a3565b60405180910390fd5b620f42408162ffffff161115610f34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2b9061250f565b60405180910390fd5b80600960146101000a81548162ffffff021916908362ffffff16021790555081600960176101000a81548162ffffff021916908362ffffff1602179055505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610fed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe4906125a1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361105c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105390612633565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161113a9190611d22565b60405180910390a3505050565b60006111538484610cce565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146111cd57818110156111bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b69061269f565b60405180910390fd5b6111cc8484848403610f7e565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611242576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123990612731565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036112b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a8906127c3565b60405180910390fd5b6000600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561133c57620f4240600960149054906101000a900462ffffff1662ffffff168361132b91906127e3565b6113359190612854565b90506113c2565b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156113c157620f4240600960179054906101000a900462ffffff1662ffffff16836113b491906127e3565b6113be9190612854565b90505b5b6000811115611407576113f884600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361163d565b80826114049190612885565b91505b61141284848461163d565b50505050565b611420610f76565b73ffffffffffffffffffffffffffffffffffffffff1661143e610a8a565b73ffffffffffffffffffffffffffffffffffffffff1614611494576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148b90612905565b60405180910390fd5b565b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6116388363a9059cbb60e01b84846040516024016115d6929190612925565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506118b3565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036116ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a390612731565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361171b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611712906127c3565b60405180910390fd5b61172683838361197b565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156117ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a3906129c0565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161189a9190611d22565b60405180910390a36118ad848484611980565b50505050565b6000611915826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166119859092919063ffffffff16565b905060008151148061193757508080602001905181019061193691906129f5565b5b611976576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196d90612a94565b60405180910390fd5b505050565b505050565b505050565b6060611994848460008561199d565b90509392505050565b6060824710156119e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d990612b26565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051611a0b9190612b82565b60006040518083038185875af1925050503d8060008114611a48576040519150601f19603f3d011682016040523d82523d6000602084013e611a4d565b606091505b5091509150611a5e87838387611a6a565b92505050949350505050565b60608315611acc576000835103611ac457611a8485611adf565b611ac3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aba90612be5565b60405180910390fd5b5b829050611ad7565b611ad68383611b02565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600082511115611b155781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b499190611be2565b60405180910390fd5b600081519050919050565b600082825260208201905092915050565b60005b83811015611b8c578082015181840152602081019050611b71565b60008484015250505050565b6000601f19601f8301169050919050565b6000611bb482611b52565b611bbe8185611b5d565b9350611bce818560208601611b6e565b611bd781611b98565b840191505092915050565b60006020820190508181036000830152611bfc8184611ba9565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611c3482611c09565b9050919050565b611c4481611c29565b8114611c4f57600080fd5b50565b600081359050611c6181611c3b565b92915050565b6000819050919050565b611c7a81611c67565b8114611c8557600080fd5b50565b600081359050611c9781611c71565b92915050565b60008060408385031215611cb457611cb3611c04565b5b6000611cc285828601611c52565b9250506020611cd385828601611c88565b9150509250929050565b60008115159050919050565b611cf281611cdd565b82525050565b6000602082019050611d0d6000830184611ce9565b92915050565b611d1c81611c67565b82525050565b6000602082019050611d376000830184611d13565b92915050565b600080600060608486031215611d5657611d55611c04565b5b6000611d6486828701611c52565b9350506020611d7586828701611c52565b9250506040611d8686828701611c88565b9150509250925092565b611d9981611c29565b82525050565b6000602082019050611db46000830184611d90565b92915050565b600060ff82169050919050565b611dd081611dba565b82525050565b6000602082019050611deb6000830184611dc7565b92915050565b600060208284031215611e0757611e06611c04565b5b6000611e1584828501611c52565b91505092915050565b60008060408385031215611e3557611e34611c04565b5b6000611e4385828601611c52565b9250506020611e5485828601611c52565b9150509250929050565b6000611e6982611c09565b9050919050565b611e7981611e5e565b82525050565b6000602082019050611e946000830184611e70565b92915050565b611ea381611cdd565b8114611eae57600080fd5b50565b600081359050611ec081611e9a565b92915050565b60008060408385031215611edd57611edc611c04565b5b6000611eeb85828601611c52565b9250506020611efc85828601611eb1565b9150509250929050565b600062ffffff82169050919050565b611f1e81611f06565b8114611f2957600080fd5b50565b600081359050611f3b81611f15565b92915050565b60008060408385031215611f5857611f57611c04565b5b6000611f6685828601611f2c565b9250506020611f7785828601611f2c565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611fc857607f821691505b602082108103611fdb57611fda611f81565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061201b82611c67565b915061202683611c67565b925082820190508082111561203e5761203d611fe1565b5b92915050565b7f6d61726b6574696e672077616c6c65742063616e277420626520300000000000600082015250565b600061207a601b83611b5d565b915061208582612044565b602082019050919050565b600060208201905081810360008301526120a98161206d565b9050919050565b6000815190506120bf81611c3b565b92915050565b6000602082840312156120db576120da611c04565b5b60006120e9848285016120b0565b91505092915050565b60006040820190506121076000830185611d90565b6121146020830184611d90565b9392505050565b7f4e6f7420616c6c6f776564000000000000000000000000000000000000000000600082015250565b6000612151600b83611b5d565b915061215c8261211b565b602082019050919050565b6000602082019050818103600083015261218081612144565b9050919050565b60008151905061219681611c71565b92915050565b6000602082840312156121b2576121b1611c04565b5b60006121c084828501612187565b91505092915050565b7f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160008201527f6c72656164792073657420746f20746861742076616c75650000000000000000602082015250565b6000612225603883611b5d565b9150612230826121c9565b604082019050919050565b6000602082019050818103600083015261225481612218565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006122b7602583611b5d565b91506122c28261225b565b604082019050919050565b600060208201905081810360008301526122e6816122aa565b9050919050565b600081905092915050565b50565b60006123086000836122ed565b9150612313826122f8565b600082019050919050565b6000612329826122fb565b9150819050919050565b7f4661696c656420696e207769746864726177616c000000000000000000000000600082015250565b6000612369601483611b5d565b915061237482612333565b602082019050919050565b600060208201905081810360008301526123988161235c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006123fb602683611b5d565b91506124068261239f565b604082019050919050565b6000602082019050818103600083015261242a816123ee565b9050919050565b7f73656c6c206665652073686f756c64206265206c657373207468616e2031303060008201527f2500000000000000000000000000000000000000000000000000000000000000602082015250565b600061248d602183611b5d565b915061249882612431565b604082019050919050565b600060208201905081810360008301526124bc81612480565b9050919050565b7f627579206665652073686f756c64206265206c657373207468616e2031303025600082015250565b60006124f9602083611b5d565b9150612504826124c3565b602082019050919050565b60006020820190508181036000830152612528816124ec565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061258b602483611b5d565b91506125968261252f565b604082019050919050565b600060208201905081810360008301526125ba8161257e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061261d602283611b5d565b9150612628826125c1565b604082019050919050565b6000602082019050818103600083015261264c81612610565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612689601d83611b5d565b915061269482612653565b602082019050919050565b600060208201905081810360008301526126b88161267c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061271b602583611b5d565b9150612726826126bf565b604082019050919050565b6000602082019050818103600083015261274a8161270e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006127ad602383611b5d565b91506127b882612751565b604082019050919050565b600060208201905081810360008301526127dc816127a0565b9050919050565b60006127ee82611c67565b91506127f983611c67565b925082820261280781611c67565b9150828204841483151761281e5761281d611fe1565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061285f82611c67565b915061286a83611c67565b92508261287a57612879612825565b5b828204905092915050565b600061289082611c67565b915061289b83611c67565b92508282039050818111156128b3576128b2611fe1565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006128ef602083611b5d565b91506128fa826128b9565b602082019050919050565b6000602082019050818103600083015261291e816128e2565b9050919050565b600060408201905061293a6000830185611d90565b6129476020830184611d13565b9392505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006129aa602683611b5d565b91506129b58261294e565b604082019050919050565b600060208201905081810360008301526129d98161299d565b9050919050565b6000815190506129ef81611e9a565b92915050565b600060208284031215612a0b57612a0a611c04565b5b6000612a19848285016129e0565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000612a7e602a83611b5d565b9150612a8982612a22565b604082019050919050565b60006020820190508181036000830152612aad81612a71565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b6000612b10602683611b5d565b9150612b1b82612ab4565b604082019050919050565b60006020820190508181036000830152612b3f81612b03565b9050919050565b600081519050919050565b6000612b5c82612b46565b612b6681856122ed565b9350612b76818560208601611b6e565b80840191505092915050565b6000612b8e8284612b51565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000612bcf601d83611b5d565b9150612bda82612b99565b602082019050919050565b60006020820190508181036000830152612bfe81612bc2565b905091905056fea26469706673582212205f2a7fd8d17596164f1f2d294c584c4a53bafea9532a2200578b2b43867afa6264736f6c6343000814003300000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000007d00000000000000000000000009ee7f3f78a694e6c0f791c6e05549960b5d850810000000000000000000000008cfe327cec66d1c090dd72bd0ff11d690c33a2eb0000000000000000000000009ee7f3f78a694e6c0f791c6e05549960b5d8508100000000000000000000000000000000000000000000000000000004a817c800000000000000000000000000000000000000000000000000000000000000000354617800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002544b000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x60806040526004361061014f5760003560e01c806389476069116100b6578063b62496f51161006f578063b62496f5146104b1578063ba6f43e6146104ee578063dd62ed3e14610519578063e086e5ec14610556578063f2fde38b1461056d578063fec408431461059657610156565b8063894760691461038f5780638da5cb5b146103b857806395d89b41146103e35780639a7a23d61461040e578063a457c2d714610437578063a9059cbb1461047457610156565b80633950935111610108578063395093511461028157806356b09616146102be5780636c516a70146102e757806370a0823114610310578063715018a61461034d57806372be26931461036457610156565b806306fdde031461015b578063095ea7b31461018657806318160ddd146101c357806323b872dd146101ee5780632509180e1461022b578063313ce5671461025657610156565b3661015657005b600080fd5b34801561016757600080fd5b506101706105bf565b60405161017d9190611be2565b60405180910390f35b34801561019257600080fd5b506101ad60048036038101906101a89190611c9d565b610651565b6040516101ba9190611cf8565b60405180910390f35b3480156101cf57600080fd5b506101d8610674565b6040516101e59190611d22565b60405180910390f35b3480156101fa57600080fd5b5061021560048036038101906102109190611d3d565b61067e565b6040516102229190611cf8565b60405180910390f35b34801561023757600080fd5b506102406106ad565b60405161024d9190611d9f565b60405180910390f35b34801561026257600080fd5b5061026b6106d3565b6040516102789190611dd6565b60405180910390f35b34801561028d57600080fd5b506102a860048036038101906102a39190611c9d565b6106ea565b6040516102b59190611cf8565b60405180910390f35b3480156102ca57600080fd5b506102e560048036038101906102e09190611df1565b610721565b005b3480156102f357600080fd5b5061030e60048036038101906103099190611e1e565b6107dc565b005b34801561031c57600080fd5b5061033760048036038101906103329190611df1565b6108e4565b6040516103449190611d22565b60405180910390f35b34801561035957600080fd5b5061036261092c565b005b34801561037057600080fd5b50610379610940565b6040516103869190611e7f565b60405180910390f35b34801561039b57600080fd5b506103b660048036038101906103b19190611df1565b610966565b005b3480156103c457600080fd5b506103cd610a8a565b6040516103da9190611d9f565b60405180910390f35b3480156103ef57600080fd5b506103f8610ab4565b6040516104059190611be2565b60405180910390f35b34801561041a57600080fd5b5061043560048036038101906104309190611ec6565b610b46565b005b34801561044357600080fd5b5061045e60048036038101906104599190611c9d565b610bee565b60405161046b9190611cf8565b60405180910390f35b34801561048057600080fd5b5061049b60048036038101906104969190611c9d565b610c65565b6040516104a89190611cf8565b60405180910390f35b3480156104bd57600080fd5b506104d860048036038101906104d39190611df1565b610c88565b6040516104e59190611cf8565b60405180910390f35b3480156104fa57600080fd5b50610503610ca8565b6040516105109190611d9f565b60405180910390f35b34801561052557600080fd5b50610540600480360381019061053b9190611e1e565b610cce565b60405161054d9190611d22565b60405180910390f35b34801561056257600080fd5b5061056b610d55565b005b34801561057957600080fd5b50610594600480360381019061058f9190611df1565b610e13565b005b3480156105a257600080fd5b506105bd60048036038101906105b89190611f41565b610e96565b005b6060600380546105ce90611fb0565b80601f01602080910402602001604051908101604052809291908181526020018280546105fa90611fb0565b80156106475780601f1061061c57610100808354040283529160200191610647565b820191906000526020600020905b81548152906001019060200180831161062a57829003601f168201915b5050505050905090565b60008061065c610f76565b9050610669818585610f7e565b600191505092915050565b6000600654905090565b600080610689610f76565b9050610696858285611147565b6106a18585856111d3565b60019150509392505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560149054906101000a900460ff16905090565b6000806106f5610f76565b90506107168185856107078589610cce565b6107119190612010565b610f7e565b600191505092915050565b610729611418565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f90612090565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6107e4611418565b60008273ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610831573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085591906120c5565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630846040518363ffffffff1660e01b815260040161088f9291906120f2565b6020604051808303816000875af11580156108ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d291906120c5565b90506108df816001611496565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610934611418565b61093e60006114f1565b565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61096e611418565b8073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16036109dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d390612167565b60405180910390fd5b610a876109e7610a8a565b8273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610a209190611d9f565b602060405180830381865afa158015610a3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a61919061219c565b8373ffffffffffffffffffffffffffffffffffffffff166115b79092919063ffffffff16565b50565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610ac390611fb0565b80601f0160208091040260200160405190810160405280929190818152602001828054610aef90611fb0565b8015610b3c5780601f10610b1157610100808354040283529160200191610b3c565b820191906000526020600020905b815481529060010190602001808311610b1f57829003601f168201915b5050505050905090565b610b4e611418565b801515600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503610be0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd79061223b565b60405180910390fd5b610bea8282611496565b5050565b600080610bf9610f76565b90506000610c078286610cce565b905083811015610c4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c43906122cd565b60405180910390fd5b610c598286868403610f7e565b60019250505092915050565b600080610c70610f76565b9050610c7d8185856111d3565b600191505092915050565b600c6020528060005260406000206000915054906101000a900460ff1681565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610d5d611418565b6000610d67610a8a565b73ffffffffffffffffffffffffffffffffffffffff1647604051610d8a9061231e565b60006040518083038185875af1925050503d8060008114610dc7576040519150601f19603f3d011682016040523d82523d6000602084013e610dcc565b606091505b5050905080610e10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e079061237f565b60405180910390fd5b50565b610e1b611418565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8190612411565b60405180910390fd5b610e93816114f1565b50565b610e9e611418565b620f42408262ffffff161115610ee9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee0906124a3565b60405180910390fd5b620f42408162ffffff161115610f34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2b9061250f565b60405180910390fd5b80600960146101000a81548162ffffff021916908362ffffff16021790555081600960176101000a81548162ffffff021916908362ffffff1602179055505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610fed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe4906125a1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361105c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105390612633565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161113a9190611d22565b60405180910390a3505050565b60006111538484610cce565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146111cd57818110156111bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b69061269f565b60405180910390fd5b6111cc8484848403610f7e565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611242576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123990612731565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036112b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a8906127c3565b60405180910390fd5b6000600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561133c57620f4240600960149054906101000a900462ffffff1662ffffff168361132b91906127e3565b6113359190612854565b90506113c2565b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156113c157620f4240600960179054906101000a900462ffffff1662ffffff16836113b491906127e3565b6113be9190612854565b90505b5b6000811115611407576113f884600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361163d565b80826114049190612885565b91505b61141284848461163d565b50505050565b611420610f76565b73ffffffffffffffffffffffffffffffffffffffff1661143e610a8a565b73ffffffffffffffffffffffffffffffffffffffff1614611494576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148b90612905565b60405180910390fd5b565b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6116388363a9059cbb60e01b84846040516024016115d6929190612925565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506118b3565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036116ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a390612731565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361171b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611712906127c3565b60405180910390fd5b61172683838361197b565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156117ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a3906129c0565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161189a9190611d22565b60405180910390a36118ad848484611980565b50505050565b6000611915826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166119859092919063ffffffff16565b905060008151148061193757508080602001905181019061193691906129f5565b5b611976576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196d90612a94565b60405180910390fd5b505050565b505050565b505050565b6060611994848460008561199d565b90509392505050565b6060824710156119e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d990612b26565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051611a0b9190612b82565b60006040518083038185875af1925050503d8060008114611a48576040519150601f19603f3d011682016040523d82523d6000602084013e611a4d565b606091505b5091509150611a5e87838387611a6a565b92505050949350505050565b60608315611acc576000835103611ac457611a8485611adf565b611ac3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aba90612be5565b60405180910390fd5b5b829050611ad7565b611ad68383611b02565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600082511115611b155781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b499190611be2565b60405180910390fd5b600081519050919050565b600082825260208201905092915050565b60005b83811015611b8c578082015181840152602081019050611b71565b60008484015250505050565b6000601f19601f8301169050919050565b6000611bb482611b52565b611bbe8185611b5d565b9350611bce818560208601611b6e565b611bd781611b98565b840191505092915050565b60006020820190508181036000830152611bfc8184611ba9565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611c3482611c09565b9050919050565b611c4481611c29565b8114611c4f57600080fd5b50565b600081359050611c6181611c3b565b92915050565b6000819050919050565b611c7a81611c67565b8114611c8557600080fd5b50565b600081359050611c9781611c71565b92915050565b60008060408385031215611cb457611cb3611c04565b5b6000611cc285828601611c52565b9250506020611cd385828601611c88565b9150509250929050565b60008115159050919050565b611cf281611cdd565b82525050565b6000602082019050611d0d6000830184611ce9565b92915050565b611d1c81611c67565b82525050565b6000602082019050611d376000830184611d13565b92915050565b600080600060608486031215611d5657611d55611c04565b5b6000611d6486828701611c52565b9350506020611d7586828701611c52565b9250506040611d8686828701611c88565b9150509250925092565b611d9981611c29565b82525050565b6000602082019050611db46000830184611d90565b92915050565b600060ff82169050919050565b611dd081611dba565b82525050565b6000602082019050611deb6000830184611dc7565b92915050565b600060208284031215611e0757611e06611c04565b5b6000611e1584828501611c52565b91505092915050565b60008060408385031215611e3557611e34611c04565b5b6000611e4385828601611c52565b9250506020611e5485828601611c52565b9150509250929050565b6000611e6982611c09565b9050919050565b611e7981611e5e565b82525050565b6000602082019050611e946000830184611e70565b92915050565b611ea381611cdd565b8114611eae57600080fd5b50565b600081359050611ec081611e9a565b92915050565b60008060408385031215611edd57611edc611c04565b5b6000611eeb85828601611c52565b9250506020611efc85828601611eb1565b9150509250929050565b600062ffffff82169050919050565b611f1e81611f06565b8114611f2957600080fd5b50565b600081359050611f3b81611f15565b92915050565b60008060408385031215611f5857611f57611c04565b5b6000611f6685828601611f2c565b9250506020611f7785828601611f2c565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611fc857607f821691505b602082108103611fdb57611fda611f81565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061201b82611c67565b915061202683611c67565b925082820190508082111561203e5761203d611fe1565b5b92915050565b7f6d61726b6574696e672077616c6c65742063616e277420626520300000000000600082015250565b600061207a601b83611b5d565b915061208582612044565b602082019050919050565b600060208201905081810360008301526120a98161206d565b9050919050565b6000815190506120bf81611c3b565b92915050565b6000602082840312156120db576120da611c04565b5b60006120e9848285016120b0565b91505092915050565b60006040820190506121076000830185611d90565b6121146020830184611d90565b9392505050565b7f4e6f7420616c6c6f776564000000000000000000000000000000000000000000600082015250565b6000612151600b83611b5d565b915061215c8261211b565b602082019050919050565b6000602082019050818103600083015261218081612144565b9050919050565b60008151905061219681611c71565b92915050565b6000602082840312156121b2576121b1611c04565b5b60006121c084828501612187565b91505092915050565b7f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160008201527f6c72656164792073657420746f20746861742076616c75650000000000000000602082015250565b6000612225603883611b5d565b9150612230826121c9565b604082019050919050565b6000602082019050818103600083015261225481612218565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006122b7602583611b5d565b91506122c28261225b565b604082019050919050565b600060208201905081810360008301526122e6816122aa565b9050919050565b600081905092915050565b50565b60006123086000836122ed565b9150612313826122f8565b600082019050919050565b6000612329826122fb565b9150819050919050565b7f4661696c656420696e207769746864726177616c000000000000000000000000600082015250565b6000612369601483611b5d565b915061237482612333565b602082019050919050565b600060208201905081810360008301526123988161235c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006123fb602683611b5d565b91506124068261239f565b604082019050919050565b6000602082019050818103600083015261242a816123ee565b9050919050565b7f73656c6c206665652073686f756c64206265206c657373207468616e2031303060008201527f2500000000000000000000000000000000000000000000000000000000000000602082015250565b600061248d602183611b5d565b915061249882612431565b604082019050919050565b600060208201905081810360008301526124bc81612480565b9050919050565b7f627579206665652073686f756c64206265206c657373207468616e2031303025600082015250565b60006124f9602083611b5d565b9150612504826124c3565b602082019050919050565b60006020820190508181036000830152612528816124ec565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061258b602483611b5d565b91506125968261252f565b604082019050919050565b600060208201905081810360008301526125ba8161257e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061261d602283611b5d565b9150612628826125c1565b604082019050919050565b6000602082019050818103600083015261264c81612610565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612689601d83611b5d565b915061269482612653565b602082019050919050565b600060208201905081810360008301526126b88161267c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061271b602583611b5d565b9150612726826126bf565b604082019050919050565b6000602082019050818103600083015261274a8161270e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006127ad602383611b5d565b91506127b882612751565b604082019050919050565b600060208201905081810360008301526127dc816127a0565b9050919050565b60006127ee82611c67565b91506127f983611c67565b925082820261280781611c67565b9150828204841483151761281e5761281d611fe1565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061285f82611c67565b915061286a83611c67565b92508261287a57612879612825565b5b828204905092915050565b600061289082611c67565b915061289b83611c67565b92508282039050818111156128b3576128b2611fe1565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006128ef602083611b5d565b91506128fa826128b9565b602082019050919050565b6000602082019050818103600083015261291e816128e2565b9050919050565b600060408201905061293a6000830185611d90565b6129476020830184611d13565b9392505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006129aa602683611b5d565b91506129b58261294e565b604082019050919050565b600060208201905081810360008301526129d98161299d565b9050919050565b6000815190506129ef81611e9a565b92915050565b600060208284031215612a0b57612a0a611c04565b5b6000612a19848285016129e0565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000612a7e602a83611b5d565b9150612a8982612a22565b604082019050919050565b60006020820190508181036000830152612aad81612a71565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b6000612b10602683611b5d565b9150612b1b82612ab4565b604082019050919050565b60006020820190508181036000830152612b3f81612b03565b9050919050565b600081519050919050565b6000612b5c82612b46565b612b6681856122ed565b9350612b76818560208601611b6e565b80840191505092915050565b6000612b8e8284612b51565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000612bcf601d83611b5d565b9150612bda82612b99565b602082019050919050565b60006020820190508181036000830152612bfe81612bc2565b905091905056fea26469706673582212205f2a7fd8d17596164f1f2d294c584c4a53bafea9532a2200578b2b43867afa6264736f6c63430008140033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000007d00000000000000000000000009ee7f3f78a694e6c0f791c6e05549960b5d850810000000000000000000000008cfe327cec66d1c090dd72bd0ff11d690c33a2eb0000000000000000000000009ee7f3f78a694e6c0f791c6e05549960b5d8508100000000000000000000000000000000000000000000000000000004a817c800000000000000000000000000000000000000000000000000000000000000000354617800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002544b000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name_ (string): Tax
Arg [1] : symbol_ (string): TK
Arg [2] : decimals_ (uint8): 18
Arg [3] : totalSupply_ (uint256): 1000000000000000
Arg [4] : buyFee_ (uint24): 1000
Arg [5] : sellFee_ (uint24): 2000
Arg [6] : taxReceiver_ (address): 0x9Ee7F3f78a694E6C0F791c6E05549960b5D85081
Arg [7] : pancakeRouter_ (address): 0x8cFe327CEc66d1C090Dd72bd0FF11d690C33a2Eb
Arg [8] : serviceFeeReceiver_ (address): 0x9Ee7F3f78a694E6C0F791c6E05549960b5D85081
Arg [9] : serviceFee_ (uint256): 20000000000
-----Encoded View---------------
14 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000180
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [3] : 00000000000000000000000000000000000000000000000000038d7ea4c68000
Arg [4] : 00000000000000000000000000000000000000000000000000000000000003e8
Arg [5] : 00000000000000000000000000000000000000000000000000000000000007d0
Arg [6] : 0000000000000000000000009ee7f3f78a694e6c0f791c6e05549960b5d85081
Arg [7] : 0000000000000000000000008cfe327cec66d1c090dd72bd0ff11d690c33a2eb
Arg [8] : 0000000000000000000000009ee7f3f78a694e6c0f791c6e05549960b5d85081
Arg [9] : 00000000000000000000000000000000000000000000000000000004a817c800
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [11] : 5461780000000000000000000000000000000000000000000000000000000000
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [13] : 544b000000000000000000000000000000000000000000000000000000000000
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ 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.