Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 31 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Set Tokens To Sw... | 21081831 | 441 days ago | IN | 0 ETH | 0.00027899 | ||||
| Approve | 20823753 | 477 days ago | IN | 0 ETH | 0.00062547 | ||||
| Approve | 19132519 | 713 days ago | IN | 0 ETH | 0.00079736 | ||||
| Transfer | 19076175 | 721 days ago | IN | 0 ETH | 0.0005122 | ||||
| Transfer | 18989885 | 733 days ago | IN | 0 ETH | 0.00349159 | ||||
| Approve | 18892916 | 747 days ago | IN | 0 ETH | 0.00113632 | ||||
| Transfer | 18888545 | 747 days ago | IN | 0 ETH | 0.00317871 | ||||
| Approve | 18733592 | 769 days ago | IN | 0 ETH | 0.00216074 | ||||
| Approve | 18580157 | 791 days ago | IN | 0 ETH | 0.00182176 | ||||
| Approve | 18508880 | 801 days ago | IN | 0 ETH | 0.00072806 | ||||
| Approve | 18508349 | 801 days ago | IN | 0 ETH | 0.0008988 | ||||
| Exclude From Fee | 18427654 | 812 days ago | IN | 0 ETH | 0.0013707 | ||||
| Approve | 18427437 | 812 days ago | IN | 0 ETH | 0.00066663 | ||||
| Approve | 18422046 | 813 days ago | IN | 0 ETH | 0.0010709 | ||||
| Exclude From Fee | 18272181 | 834 days ago | IN | 0 ETH | 0.00074486 | ||||
| Approve | 18271962 | 834 days ago | IN | 0 ETH | 0.00134289 | ||||
| Approve | 18270360 | 834 days ago | IN | 0 ETH | 0.00054144 | ||||
| Approve | 18270316 | 834 days ago | IN | 0 ETH | 0.00058451 | ||||
| Approve | 18270293 | 834 days ago | IN | 0 ETH | 0.0005949 | ||||
| Approve | 18270272 | 834 days ago | IN | 0 ETH | 0.00062366 | ||||
| Approve | 18269710 | 834 days ago | IN | 0 ETH | 0.00042231 | ||||
| Approve | 18269636 | 834 days ago | IN | 0 ETH | 0.00042805 | ||||
| Approve | 18269474 | 834 days ago | IN | 0 ETH | 0.00040613 | ||||
| Exclude From Fee | 18269365 | 834 days ago | IN | 0 ETH | 0.00042655 | ||||
| Exclude From Fee | 18269161 | 834 days ago | IN | 0 ETH | 0.00043643 |
Latest 22 internal transactions
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Transfer | 19132495 | 713 days ago | 0.00406254 ETH | ||||
| Transfer | 19132495 | 713 days ago | 0.00406254 ETH | ||||
| Transfer | 19076156 | 721 days ago | 0.00326567 ETH | ||||
| Transfer | 19076156 | 721 days ago | 0.00326567 ETH | ||||
| Transfer | 19027301 | 728 days ago | 0.00488572 ETH | ||||
| Transfer | 19027301 | 728 days ago | 0.00488572 ETH | ||||
| Transfer | 18989885 | 733 days ago | 0.00742069 ETH | ||||
| Transfer | 18989885 | 733 days ago | 0.00742069 ETH | ||||
| Transfer | 18903928 | 745 days ago | 0.00969727 ETH | ||||
| Transfer | 18903928 | 745 days ago | 0.00969727 ETH | ||||
| Transfer | 18888545 | 747 days ago | 0.0015769 ETH | ||||
| Transfer | 18888545 | 747 days ago | 0.0015769 ETH | ||||
| Transfer | 18741689 | 768 days ago | 0.00913512 ETH | ||||
| Transfer | 18741689 | 768 days ago | 0.00913512 ETH | ||||
| Transfer | 18733584 | 769 days ago | 0.0025716 ETH | ||||
| Transfer | 18733584 | 769 days ago | 0.0025716 ETH | ||||
| Transfer | 18519196 | 799 days ago | 0.00178293 ETH | ||||
| Transfer | 18519196 | 799 days ago | 0.00178293 ETH | ||||
| Transfer | 18508907 | 801 days ago | 0.00640003 ETH | ||||
| Transfer | 18508907 | 801 days ago | 0.00640003 ETH | ||||
| Transfer | 18508330 | 801 days ago | 0.07278924 ETH | ||||
| Transfer | 18508330 | 801 days ago | 0.07278924 ETH |
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
SpeedSterBucks
Compiler Version
v0.8.21+commit.d9974bed
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2023-09-29
*/
// SPDX-License-Identifier: MIT
pragma solidity 0.8.21;
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
interface IERC20 {
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(
address recipient,
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 sender,
address recipient,
uint256 amount
) external returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
}
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*
* [IMPORTANT]
* ====
* You shouldn't rely on `isContract` to protect against flash loan attacks!
*
* Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
* like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
* constructor.
* ====
*/
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;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
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"
);
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data
) internal returns (bytes memory) {
return
functionCallWithValue(
target,
data,
0,
"Address: low-level call failed"
);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
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"
);
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
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
);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data
) internal view returns (bytes memory) {
return
functionStaticCall(
target,
data,
"Address: low-level static call failed"
);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
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
);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data
) internal returns (bytes memory) {
return
functionDelegateCall(
target,
data,
"Address: low-level delegate call failed"
);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
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
);
}
/**
* @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
* the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
*
* _Available since v4.8._
*/
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);
}
}
/**
* @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason or using the provided one.
*
* _Available since v4.3._
*/
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);
}
}
}
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(
address indexed previousOwner,
address indexed newOwner
);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(
newOwner != address(0),
"Ownable: new owner is the zero address"
);
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
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;
}
interface IUniswapV2Pair {
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
event Transfer(address indexed from, address indexed to, uint256 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 (uint256);
function balanceOf(address owner) external view returns (uint256);
function allowance(
address owner,
address spender
) external view returns (uint256);
function approve(address spender, uint256 value) external returns (bool);
function transfer(address to, uint256 value) external returns (bool);
function transferFrom(
address from,
address to,
uint256 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 (uint256);
function permit(
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) external;
event Burn(
address indexed sender,
uint256 amount0,
uint256 amount1,
address indexed to
);
event Swap(
address indexed sender,
uint256 amount0In,
uint256 amount1In,
uint256 amount0Out,
uint256 amount1Out,
address indexed to
);
event Sync(uint112 reserve0, uint112 reserve1);
function MINIMUM_LIQUIDITY() external pure returns (uint256);
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 (uint256);
function price1CumulativeLast() external view returns (uint256);
function kLast() external view returns (uint256);
function burn(
address to
) external returns (uint256 amount0, uint256 amount1);
function swap(
uint256 amount0Out,
uint256 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 SpeedSterBucks is Context, IERC20, Ownable {
using Address for address;
//Definition of Wallets for Marketing.
address payable public marketingWallet =
payable(0xb5bC64b9C4b952b75F77Ff8bd6201D1820691a9A);
//Dead Wallet for SAFU Contract
address public constant deadWallet =
0x000000000000000000000000000000000000dEaD;
//Mapping section for better tracking.
mapping(address => uint256) private _tOwned;
mapping(address => mapping(address => uint256)) private _allowances;
mapping(address => bool) private _isExcludedFromFee;
//Loging and Event Information for better troubleshooting.
event Log(string, uint256);
event AuditLog(string, address);
event SwapAndLiquifyEnabledUpdated(bool enabled);
event SwapAndLiquify(
uint256 tokensSwapped,
uint256 ethReceived,
uint256 tokensIntoLiqudity
);
event SwapTokensForETH(uint256 amountIn, address[] path);
//Supply Definition.
uint256 private _tTotal = 1_000_000_000 ether;
//Token Definition.
string public constant name = "Speedster Bucks";
string public constant symbol = "SSB";
uint8 public constant decimals = 18;
//Taxes Definition.
uint256 public buyFee = 5;
uint256 public transferFee = 0;
uint256 public sellFee = 5;
uint256 public marketingTokensCollected = 0;
uint256 public totalMarketingTokensCollected = 0;
uint256 public minimumTokensBeforeSwap = 10_000 ether;
//Router and Pair Configuration.
IUniswapV2Router02 public immutable uniswapV2Router;
address public immutable uniswapV2Pair;
address private immutable WETH;
//Tracking of Automatic Swap vs Manual Swap.
bool public inSwapAndLiquify;
bool public swapAndLiquifyEnabled = true;
modifier lockTheSwap() {
inSwapAndLiquify = true;
_;
inSwapAndLiquify = false;
}
constructor() {
_tOwned[_msgSender()] = _tTotal;
address currentRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; //Uniswap Router Address
//Create Pair in the contructor, this may fail on some blockchains and can be done in a separate line if needed.
IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(currentRouter);
WETH = _uniswapV2Router.WETH();
uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
.createPair(address(this), WETH);
uniswapV2Router = _uniswapV2Router;
//Approve router to be used.
_approve(msg.sender, address(uniswapV2Router), type(uint256).max);
_approve(address(this), address(uniswapV2Router), type(uint256).max);
//Exclude from Fees
_isExcludedFromFee[owner()] = true;
_isExcludedFromFee[address(this)] = true;
emit Transfer(address(0), _msgSender(), _tTotal);
}
//Readable Functions.
function totalSupply() public view override returns (uint256) {
return _tTotal;
}
function balanceOf(address account) public view override returns (uint256) {
return _tOwned[account];
}
//ERC 20 Standard Transfer Functions
function transfer(
address recipient,
uint256 amount
) public override returns (bool) {
_transfer(_msgSender(), recipient, amount);
return true;
}
//ERC 20 Standard Allowance Function
function allowance(
address _owner,
address spender
) public view override returns (uint256) {
return _allowances[_owner][spender];
}
//ERC 20 Standard Approve Function
function approve(
address spender,
uint256 amount
) public override returns (bool) {
_approve(_msgSender(), spender, amount);
return true;
}
//ERC 20 Standard Transfer From
function transferFrom(
address sender,
address recipient,
uint256 amount
) public override returns (bool) {
uint currentAllowance = _allowances[sender][_msgSender()];
require(
currentAllowance >= amount,
"ERC20: transfer amount exceeds allowance"
);
_transfer(sender, recipient, amount);
_approve(sender, _msgSender(), currentAllowance - amount);
return true;
}
//ERC 20 Standard increase Allowance
function increaseAllowance(
address spender,
uint256 addedValue
) public virtual returns (bool) {
_approve(
_msgSender(),
spender,
_allowances[_msgSender()][spender] + addedValue
);
return true;
}
//ERC 20 Standard decrease Allowance
function decreaseAllowance(
address spender,
uint256 subtractedValue
) public virtual returns (bool) {
_approve(
_msgSender(),
spender,
_allowances[_msgSender()][spender] - subtractedValue
);
return true;
}
//Approve Function
function _approve(address _owner, address spender, uint256 amount) private {
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);
}
//Transfer function, validate correct wallet structure, take fees, and other custom taxes are done during the transfer.
function _transfer(address from, address to, uint256 amount) private {
require(from != address(0), "ERC20: transfer from the zero address");
require(to != address(0), "ERC20: transfer to the zero address");
require(amount > 0, "Transfer amount must be greater than zero");
require(
_tOwned[from] >= amount,
"ERC20: transfer amount exceeds balance"
);
//Adding logic for automatic swap.
uint256 contractTokenBalance = balanceOf(address(this));
bool overMinimumTokenBalance = contractTokenBalance >=
minimumTokensBeforeSwap;
uint fee = 0;
bool fromLP = from == uniswapV2Pair;
bool toLP = to == uniswapV2Pair;
//if any account belongs to _isExcludedFromFee account then remove the fee
if (
!inSwapAndLiquify &&
!fromLP &&
overMinimumTokenBalance &&
swapAndLiquifyEnabled
) {
swapAndLiquify();
}
// This saves a bit of gas on transfers
bool NOTfromExcluded = !_isExcludedFromFee[from];
bool NOTtoExcluded = !_isExcludedFromFee[to];
// Apply tax when necessary
if (toLP && NOTfromExcluded) {
fee = (sellFee * amount) / 100;
} else if (fromLP && NOTtoExcluded) {
fee = (buyFee * amount) / 100;
} else if (NOTtoExcluded && NOTfromExcluded) {
fee = (transferFee * amount) / 100;
}
amount -= fee;
if (fee > 0) {
_tokenTransfer(from, address(this), fee);
marketingTokensCollected += fee;
totalMarketingTokensCollected += fee;
}
_tokenTransfer(from, to, amount);
}
//Swap Tokens for ETH or to add liquidity either automatically or manual, due to SAFU this was changed to Automatic after enable trading.
//Corrected newBalance bug, it sending ETH to wallet and any remaining is on contract and can be recoverred.
function swapAndLiquify() public lockTheSwap {
uint256 totalTokens = balanceOf(address(this));
swapTokensForEth(totalTokens);
uint ethBalance = address(this).balance;
transferToAddressETH(marketingWallet, ethBalance);
marketingTokensCollected = 0;
}
//swap for eth is to support the converstion of tokens to weth during swapandliquify this is a supporting function
function swapTokensForEth(uint256 tokenAmount) private {
// generate the uniswap pair path of token -> weth
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = WETH;
_approve(address(this), address(uniswapV2Router), tokenAmount);
// make the swap
uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
tokenAmount,
0, // accept any amount of ETH
path,
address(this), // The contract
block.timestamp
);
emit SwapTokensForETH(tokenAmount, path);
}
//ERC 20 standard transfer, only added if taking fees to countup the amount of fees for better tracking and split purpose.
function _tokenTransfer(
address sender,
address recipient,
uint256 amount
) private {
_tOwned[sender] -= amount;
_tOwned[recipient] += amount;
emit Transfer(sender, recipient, amount);
}
//View the wallets that are excluded from fee.
function isExcludedFromFee(address account) external view returns (bool) {
return _isExcludedFromFee[account];
}
//exclude wallets from fees, this is needed for launch or other contracts.
function excludeFromFee(address account) external onlyOwner {
require(
!_isExcludedFromFee[account],
"The wallet is already excluded!"
);
_isExcludedFromFee[account] = true;
emit AuditLog(
"We have excluded the following wallet from fees:",
account
);
}
//include wallet back in fees.
function includeInFee(address account) external onlyOwner {
require(
_isExcludedFromFee[account],
"The wallet is already included!"
);
_isExcludedFromFee[account] = false;
emit AuditLog(
"We have including the following wallet from fees:",
account
);
}
//Automatic Swap Configuration.
function setTokensToSwap(
uint256 _minimumTokensBeforeSwap
) external onlyOwner {
require(
_minimumTokensBeforeSwap >= 1000 ether,
"You need to enter more than 1000 tokens."
);
minimumTokensBeforeSwap = _minimumTokensBeforeSwap;
emit Log(
"We have updated minimunTokensBeforeSwap to:",
minimumTokensBeforeSwap
);
}
//set a new marketing wallet.
function setMarketingWallet(address _marketingWallet) external onlyOwner {
require(_marketingWallet != address(0), "setmarketingWallet: ZERO");
marketingWallet = payable(_marketingWallet);
emit AuditLog("We have Updated the MarketingWallet:", marketingWallet);
}
//This allow you to configure buy fees, in this contract all fees goes to marketing during the swapandliquify.
function setBuyFee(uint256 _buyFee) external onlyOwner {
require(_buyFee <= 5, "Buy Fee cannot be more than 5%");
buyFee = _buyFee;
emit Log("We have updated the buy fee to:", buyFee);
}
//This allow you to configure sell fee, in this contract all fees goes to marketing during the swapandliquify.
function setSellFee(uint256 _sellFee) external onlyOwner {
require(_sellFee <= 5, "Sell Fee cannot be more than 5%");
sellFee = _sellFee;
emit Log("We have updated the sell fee to:", sellFee);
}
function setTransferFee(uint256 _transferFee) external onlyOwner {
require(_transferFee <= 5, "transfer Fee cannot be more than 5%");
transferFee = _transferFee;
emit Log("We have updated the transfer fee to:", _transferFee);
}
function transferToAddressETH(
address payable recipient,
uint256 amount
) private {
(bool succ, ) = recipient.call{value: amount}("");
require(succ, "Transfer failed.");
}
//to recieve ETH from uniswapV2Router when swaping
receive() external payable {}
/////---fallback--////
//This cannot be removed as is a fallback to the swapAndLiquify
event SwapETHForTokens(uint256 amountIn, address[] path);
function swapETHForTokens(uint256 amount) private {
// generate the uniswap pair path of token -> weth
address[] memory path = new address[](2);
path[0] = WETH;
path[1] = address(this);
// make the swap
uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{
value: amount
}(
0, // accept any amount of Tokens
path,
deadWallet, // Burn address
block.timestamp + 300
);
emit SwapETHForTokens(amount, path);
}
// Withdraw ETH that's potentially stuck in the Contract
function recoverETHfromContract() external onlyOwner {
uint ethBalance = address(this).balance;
(bool succ, ) = payable(marketingWallet).call{value: ethBalance}("");
require(succ, "Transfer failed");
emit AuditLog(
"We have recover the stock eth from contract.",
marketingWallet
);
}
// Withdraw ERC20 tokens that are potentially stuck in Contract
//your not able to withdraw own tokens due to swapandliquify.
function recoverTokensFromContract(
address _tokenAddress,
uint256 _amount
) external onlyOwner {
require(
_tokenAddress != address(this),
"Owner can't claim contract's balance of its own tokens"
);
bool succ = IERC20(_tokenAddress).transfer(marketingWallet, _amount);
require(succ, "Transfer failed");
emit Log("We have recovered tokens from contract:", _amount);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","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":false,"internalType":"string","name":"","type":"string"},{"indexed":false,"internalType":"address","name":"","type":"address"}],"name":"AuditLog","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"","type":"string"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"Log","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":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","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":[{"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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"inSwapAndLiquify","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"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":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTokensCollected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"recoverETHfromContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"recoverTokensFromContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyFee","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sellFee","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minimumTokensBeforeSwap","type":"uint256"}],"name":"setTokensToSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_transferFee","type":"uint256"}],"name":"setTransferFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalMarketingTokensCollected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","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":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60e0604052600180546001600160a01b03191673b5bc64b9c4b952b75f77ff8bd6201d1820691a9a1790556b033b2e3c9fd0803ce8000000600590815560068190555f60078190556008919091556009819055600a5569021e19e0c9bab2400000600b55600c805461ff0019166101001790553480156200007e575f80fd5b506200008a33620002f8565b600554335f908152600260209081526040918290209290925580516315ab88c960e31b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d928392839263ad5c4648926004808401939192918290030181865afa158015620000f2573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000118919062000472565b6001600160a01b031660c0816001600160a01b031681525050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200016e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000194919062000472565b60c0516040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303815f875af1158015620001e3573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000209919062000472565b6001600160a01b0390811660a052811660808190526200022d9033905f1962000347565b62000243306080515f196200034760201b60201c565b600160045f6200025a5f546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081015f908120805494151560ff199586161790553081526004909252902080549091166001179055620002a13390565b6001600160a01b03165f6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600554604051620002e891815260200190565b60405180910390a35050620004a1565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038316620003af5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b038216620004125760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401620003a6565b6001600160a01b038381165f8181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f6020828403121562000483575f80fd5b81516001600160a01b03811681146200049a575f80fd5b9392505050565b60805160a05160c051611c7e620004e15f395f61173401525f8181610434015261151b01525f81816102d10152818161178c01526117c80152611c7e5ff3fe608060405260043610610215575f3560e01c80636ca60bc61161011e578063a457c2d7116100a8578063d2d7ad831161006d578063d2d7ad831461065e578063dd62ed3e14610673578063e6be4a72146106b7578063ea2f0b37146106d6578063f2fde38b146106f5575f80fd5b8063a457c2d7146105e3578063a9059cbb14610602578063acb2ad6f14610621578063b29ad50a14610636578063ce831ed51461064a575f80fd5b806385141a77116100ee57806385141a77146105465780638b4cee081461055b5780638da5cb5b1461057a5780638f02bb5b1461059657806395d89b41146105b5575f80fd5b80636ca60bc6146104ca57806370a08231146104df578063715018a61461051357806375f0a87414610527575f80fd5b8063395093511161019f578063470624021161016f578063470624021461040e57806349bd5a5e146104235780634a74bb02146104565780635342acb4146104745780635d098b38146104ab575f80fd5b8063395093511461039c57806340763503146103bb578063437823ec146103d0578063461d9476146103ef575f80fd5b806318160ddd116101e557806318160ddd1461030b578063220f66961461032957806323b872dd146103425780632b14ca5614610361578063313ce56714610376575f80fd5b806306fdde0314610220578063095ea7b3146102705780630cc835a31461029f5780631694505e146102c0575f80fd5b3661021c57005b5f80fd5b34801561022b575f80fd5b5061025a6040518060400160405280600f81526020016e537065656473746572204275636b7360881b81525081565b6040516102679190611999565b60405180910390f35b34801561027b575f80fd5b5061028f61028a3660046119ff565b610714565b6040519015158152602001610267565b3480156102aa575f80fd5b506102be6102b9366004611a27565b61072a565b005b3480156102cb575f80fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610267565b348015610316575f80fd5b506005545b604051908152602001610267565b348015610334575f80fd5b50600c5461028f9060ff1681565b34801561034d575f80fd5b5061028f61035c366004611a3e565b6107e8565b34801561036c575f80fd5b5061031b60085481565b348015610381575f80fd5b5061038a601281565b60405160ff9091168152602001610267565b3480156103a7575f80fd5b5061028f6103b63660046119ff565b610896565b3480156103c6575f80fd5b5061031b600a5481565b3480156103db575f80fd5b506102be6103ea366004611a77565b6108cc565b3480156103fa575f80fd5b506102be610409366004611a27565b6109d7565b348015610419575f80fd5b5061031b60065481565b34801561042e575f80fd5b506102f37f000000000000000000000000000000000000000000000000000000000000000081565b348015610461575f80fd5b50600c5461028f90610100900460ff1681565b34801561047f575f80fd5b5061028f61048e366004611a77565b6001600160a01b03165f9081526004602052604090205460ff1690565b3480156104b6575f80fd5b506102be6104c5366004611a77565b610ab6565b3480156104d5575f80fd5b5061031b60095481565b3480156104ea575f80fd5b5061031b6104f9366004611a77565b6001600160a01b03165f9081526002602052604090205490565b34801561051e575f80fd5b506102be610b94565b348015610532575f80fd5b506001546102f3906001600160a01b031681565b348015610551575f80fd5b506102f361dead81565b348015610566575f80fd5b506102be610575366004611a27565b610ba7565b348015610585575f80fd5b505f546001600160a01b03166102f3565b3480156105a1575f80fd5b506102be6105b0366004611a27565b610c57565b3480156105c0575f80fd5b5061025a6040518060400160405280600381526020016229a9a160e91b81525081565b3480156105ee575f80fd5b5061028f6105fd3660046119ff565b610d22565b34801561060d575f80fd5b5061028f61061c3660046119ff565b610d58565b34801561062c575f80fd5b5061031b60075481565b348015610641575f80fd5b506102be610d64565b348015610655575f80fd5b506102be610db5565b348015610669575f80fd5b5061031b600b5481565b34801561067e575f80fd5b5061031b61068d366004611a97565b6001600160a01b039182165f90815260036020908152604080832093909416825291909152205490565b3480156106c2575f80fd5b506102be6106d13660046119ff565b610ed0565b3480156106e1575f80fd5b506102be6106f0366004611a77565b61106d565b348015610700575f80fd5b506102be61070f366004611a77565b61116a565b5f6107203384846111e3565b5060015b92915050565b610732611307565b60058111156107885760405162461bcd60e51b815260206004820152601e60248201527f427579204665652063616e6e6f74206265206d6f7265207468616e203525000060448201526064015b60405180910390fd5b600681905560408051818152601f918101919091527f57652068617665207570646174656420746865206275792066656520746f3a006060820152602081018290525f80516020611c09833981519152906080015b60405180910390a150565b6001600160a01b0383165f9081526003602090815260408083203384529091528120548281101561086c5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161077f565b610877858585611360565b61088b85336108868685611adc565b6111e3565b506001949350505050565b335f8181526003602090815260408083206001600160a01b03871684529091528120549091610720918590610886908690611aef565b6108d4611307565b6001600160a01b0381165f9081526004602052604090205460ff161561093c5760405162461bcd60e51b815260206004820152601f60248201527f5468652077616c6c657420697320616c7265616479206578636c756465642100604482015260640161077f565b6001600160a01b0381165f9081526004602052604090819020805460ff19166001179055515f80516020611c29833981519152906107dd90839060408082526030908201527f57652068617665206578636c756465642074686520666f6c6c6f77696e67207760608201526f30b63632ba10333937b6903332b2b99d60811b60808201526001600160a01b0391909116602082015260a00190565b6109df611307565b683635c9adc5dea00000811015610a495760405162461bcd60e51b815260206004820152602860248201527f596f75206e65656420746f20656e746572206d6f7265207468616e2031303030604482015267103a37b5b2b7399760c11b606482015260840161077f565b600b81905560408051818152602b918101919091527f576520686176652075706461746564206d696e696d756e546f6b656e7342656660608201526a37b932a9bbb0b8103a379d60a91b6080820152602081018290525f80516020611c098339815191529060a0016107dd565b610abe611307565b6001600160a01b038116610b145760405162461bcd60e51b815260206004820152601860248201527f7365746d61726b6574696e6757616c6c65743a205a45524f0000000000000000604482015260640161077f565b600180546001600160a01b0319166001600160a01b038316908117909155604080518181526024918101919091527f57652068617665205570646174656420746865204d61726b6574696e6757616c6060820152633632ba1d60e11b608082015260208101919091525f80516020611c298339815191529060a0016107dd565b610b9c611307565b610ba55f611690565b565b610baf611307565b6005811115610c005760405162461bcd60e51b815260206004820152601f60248201527f53656c6c204665652063616e6e6f74206265206d6f7265207468616e20352500604482015260640161077f565b60088190556040805181815260209181018290527f576520686176652075706461746564207468652073656c6c2066656520746f3a60608201529081018290525f80516020611c09833981519152906080016107dd565b610c5f611307565b6005811115610cbc5760405162461bcd60e51b815260206004820152602360248201527f7472616e73666572204665652063616e6e6f74206265206d6f7265207468616e60448201526220352560e81b606482015260840161077f565b6007819055604080518181526024918101919091527f57652068617665207570646174656420746865207472616e7366657220666565606082015263103a379d60e11b6080820152602081018290525f80516020611c098339815191529060a0016107dd565b335f8181526003602090815260408083206001600160a01b03871684529091528120549091610720918590610886908690611adc565b5f610720338484611360565b600c805460ff19166001179055305f908152600260205260408120549050610d8b816116df565b6001544790610da3906001600160a01b031682611863565b50505f600955600c805460ff19169055565b610dbd611307565b60015460405147915f916001600160a01b039091169083908381818185875af1925050503d805f8114610e0b576040519150601f19603f3d011682016040523d82523d5f602084013e610e10565b606091505b5050905080610e535760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015260640161077f565b60015460408051818152602c918101919091527f57652068617665207265636f766572207468652073746f636b2065746820667260608201526b37b69031b7b73a3930b1ba1760a11b60808201526001600160a01b0390911660208201525f80516020611c298339815191529060a0015b60405180910390a15050565b610ed8611307565b306001600160a01b03831603610f4f5760405162461bcd60e51b815260206004820152603660248201527f4f776e65722063616e277420636c61696d20636f6e747261637427732062616c604482015275616e6365206f6620697473206f776e20746f6b656e7360501b606482015260840161077f565b60015460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390525f9184169063a9059cbb906044016020604051808303815f875af1158015610fa0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fc49190611b02565b9050806110055760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015260640161077f565b604080518181526027818301527f57652068617665207265636f766572656420746f6b656e732066726f6d20636f606082015266373a3930b1ba1d60c91b60808201526020810184905290515f80516020611c098339815191529181900360a00190a1505050565b611075611307565b6001600160a01b0381165f9081526004602052604090205460ff166110dc5760405162461bcd60e51b815260206004820152601f60248201527f5468652077616c6c657420697320616c726561647920696e636c756465642100604482015260640161077f565b6001600160a01b0381165f81815260046020908152604091829020805460ff1916905581518281526031928101929092527f5765206861766520696e636c7564696e672074686520666f6c6c6f77696e67206060830152703bb0b63632ba10333937b6903332b2b99d60791b60808301528101919091525f80516020611c298339815191529060a0016107dd565b611172611307565b6001600160a01b0381166111d75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161077f565b6111e081611690565b50565b6001600160a01b0383166112455760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161077f565b6001600160a01b0382166112a65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161077f565b6001600160a01b038381165f8181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b5f546001600160a01b03163314610ba55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161077f565b6001600160a01b0383166113c45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161077f565b6001600160a01b0382166114265760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161077f565b5f81116114875760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161077f565b6001600160a01b0383165f908152600260205260409020548111156114fd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161077f565b305f90815260026020526040812054600b54600c54919290831015917f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03908116888216811492918816149060ff1615801561155e575081155b80156115675750835b801561157a5750600c54610100900460ff165b1561158757611587610d64565b6001600160a01b038089165f9081526004602052604080822054928a16825290205460ff918216159116158280156115bc5750815b156115e2576064886008546115d19190611b21565b6115db9190611b38565b945061162d565b8380156115ec5750805b15611601576064886006546115d19190611b21565b80801561160b5750815b1561162d576064886007546116209190611b21565b61162a9190611b38565b94505b6116378589611adc565b975084156116795761164a8a30876118fa565b8460095f82825461165b9190611aef565b9250508190555084600a5f8282546116739190611aef565b90915550505b6116848a8a8a6118fa565b50505050505050505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061171257611712611b57565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000008160018151811061176657611766611b57565b60200260200101906001600160a01b031690816001600160a01b0316815250506117b1307f0000000000000000000000000000000000000000000000000000000000000000846111e3565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906118059085905f90869030904290600401611bad565b5f604051808303815f87803b15801561181c575f80fd5b505af115801561182e573d5f803e3d5ffd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051610ec4929190611be8565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f81146118ac576040519150601f19603f3d011682016040523d82523d5f602084013e6118b1565b606091505b50509050806118f55760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b604482015260640161077f565b505050565b6001600160a01b0383165f9081526002602052604081208054839290611921908490611adc565b90915550506001600160a01b0382165f908152600260205260408120805483929061194d908490611aef565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516112fa91815260200190565b5f6020808352835180828501525f5b818110156119c4578581018301518582016040015282016119a8565b505f604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146119fa575f80fd5b919050565b5f8060408385031215611a10575f80fd5b611a19836119e4565b946020939093013593505050565b5f60208284031215611a37575f80fd5b5035919050565b5f805f60608486031215611a50575f80fd5b611a59846119e4565b9250611a67602085016119e4565b9150604084013590509250925092565b5f60208284031215611a87575f80fd5b611a90826119e4565b9392505050565b5f8060408385031215611aa8575f80fd5b611ab1836119e4565b9150611abf602084016119e4565b90509250929050565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561072457610724611ac8565b8082018082111561072457610724611ac8565b5f60208284031215611b12575f80fd5b81518015158114611a90575f80fd5b808202811582820484141761072457610724611ac8565b5f82611b5257634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52603260045260245ffd5b5f8151808452602080850194508084015f5b83811015611ba25781516001600160a01b031687529582019590820190600101611b7d565b509495945050505050565b85815284602082015260a060408201525f611bcb60a0830186611b6b565b6001600160a01b0394909416606083015250608001529392505050565b828152604060208201525f611c006040830184611b6b565b94935050505056fedd970dd9b5bfe707922155b058a407655cb18288b807e2216442bca8ad83d6b5025dbd6ad989fe1a64db7dc049e29723ff9d35a97d84ae9aab96196f00ec1a00a2646970667358221220655208d8f15de3c4097468c138802a262793b96043a5c8d455833cbfc1d78b5664736f6c63430008150033
Deployed Bytecode
0x608060405260043610610215575f3560e01c80636ca60bc61161011e578063a457c2d7116100a8578063d2d7ad831161006d578063d2d7ad831461065e578063dd62ed3e14610673578063e6be4a72146106b7578063ea2f0b37146106d6578063f2fde38b146106f5575f80fd5b8063a457c2d7146105e3578063a9059cbb14610602578063acb2ad6f14610621578063b29ad50a14610636578063ce831ed51461064a575f80fd5b806385141a77116100ee57806385141a77146105465780638b4cee081461055b5780638da5cb5b1461057a5780638f02bb5b1461059657806395d89b41146105b5575f80fd5b80636ca60bc6146104ca57806370a08231146104df578063715018a61461051357806375f0a87414610527575f80fd5b8063395093511161019f578063470624021161016f578063470624021461040e57806349bd5a5e146104235780634a74bb02146104565780635342acb4146104745780635d098b38146104ab575f80fd5b8063395093511461039c57806340763503146103bb578063437823ec146103d0578063461d9476146103ef575f80fd5b806318160ddd116101e557806318160ddd1461030b578063220f66961461032957806323b872dd146103425780632b14ca5614610361578063313ce56714610376575f80fd5b806306fdde0314610220578063095ea7b3146102705780630cc835a31461029f5780631694505e146102c0575f80fd5b3661021c57005b5f80fd5b34801561022b575f80fd5b5061025a6040518060400160405280600f81526020016e537065656473746572204275636b7360881b81525081565b6040516102679190611999565b60405180910390f35b34801561027b575f80fd5b5061028f61028a3660046119ff565b610714565b6040519015158152602001610267565b3480156102aa575f80fd5b506102be6102b9366004611a27565b61072a565b005b3480156102cb575f80fd5b506102f37f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610267565b348015610316575f80fd5b506005545b604051908152602001610267565b348015610334575f80fd5b50600c5461028f9060ff1681565b34801561034d575f80fd5b5061028f61035c366004611a3e565b6107e8565b34801561036c575f80fd5b5061031b60085481565b348015610381575f80fd5b5061038a601281565b60405160ff9091168152602001610267565b3480156103a7575f80fd5b5061028f6103b63660046119ff565b610896565b3480156103c6575f80fd5b5061031b600a5481565b3480156103db575f80fd5b506102be6103ea366004611a77565b6108cc565b3480156103fa575f80fd5b506102be610409366004611a27565b6109d7565b348015610419575f80fd5b5061031b60065481565b34801561042e575f80fd5b506102f37f0000000000000000000000003551fbb363e6c608a02ab33f10582863b700f8df81565b348015610461575f80fd5b50600c5461028f90610100900460ff1681565b34801561047f575f80fd5b5061028f61048e366004611a77565b6001600160a01b03165f9081526004602052604090205460ff1690565b3480156104b6575f80fd5b506102be6104c5366004611a77565b610ab6565b3480156104d5575f80fd5b5061031b60095481565b3480156104ea575f80fd5b5061031b6104f9366004611a77565b6001600160a01b03165f9081526002602052604090205490565b34801561051e575f80fd5b506102be610b94565b348015610532575f80fd5b506001546102f3906001600160a01b031681565b348015610551575f80fd5b506102f361dead81565b348015610566575f80fd5b506102be610575366004611a27565b610ba7565b348015610585575f80fd5b505f546001600160a01b03166102f3565b3480156105a1575f80fd5b506102be6105b0366004611a27565b610c57565b3480156105c0575f80fd5b5061025a6040518060400160405280600381526020016229a9a160e91b81525081565b3480156105ee575f80fd5b5061028f6105fd3660046119ff565b610d22565b34801561060d575f80fd5b5061028f61061c3660046119ff565b610d58565b34801561062c575f80fd5b5061031b60075481565b348015610641575f80fd5b506102be610d64565b348015610655575f80fd5b506102be610db5565b348015610669575f80fd5b5061031b600b5481565b34801561067e575f80fd5b5061031b61068d366004611a97565b6001600160a01b039182165f90815260036020908152604080832093909416825291909152205490565b3480156106c2575f80fd5b506102be6106d13660046119ff565b610ed0565b3480156106e1575f80fd5b506102be6106f0366004611a77565b61106d565b348015610700575f80fd5b506102be61070f366004611a77565b61116a565b5f6107203384846111e3565b5060015b92915050565b610732611307565b60058111156107885760405162461bcd60e51b815260206004820152601e60248201527f427579204665652063616e6e6f74206265206d6f7265207468616e203525000060448201526064015b60405180910390fd5b600681905560408051818152601f918101919091527f57652068617665207570646174656420746865206275792066656520746f3a006060820152602081018290525f80516020611c09833981519152906080015b60405180910390a150565b6001600160a01b0383165f9081526003602090815260408083203384529091528120548281101561086c5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161077f565b610877858585611360565b61088b85336108868685611adc565b6111e3565b506001949350505050565b335f8181526003602090815260408083206001600160a01b03871684529091528120549091610720918590610886908690611aef565b6108d4611307565b6001600160a01b0381165f9081526004602052604090205460ff161561093c5760405162461bcd60e51b815260206004820152601f60248201527f5468652077616c6c657420697320616c7265616479206578636c756465642100604482015260640161077f565b6001600160a01b0381165f9081526004602052604090819020805460ff19166001179055515f80516020611c29833981519152906107dd90839060408082526030908201527f57652068617665206578636c756465642074686520666f6c6c6f77696e67207760608201526f30b63632ba10333937b6903332b2b99d60811b60808201526001600160a01b0391909116602082015260a00190565b6109df611307565b683635c9adc5dea00000811015610a495760405162461bcd60e51b815260206004820152602860248201527f596f75206e65656420746f20656e746572206d6f7265207468616e2031303030604482015267103a37b5b2b7399760c11b606482015260840161077f565b600b81905560408051818152602b918101919091527f576520686176652075706461746564206d696e696d756e546f6b656e7342656660608201526a37b932a9bbb0b8103a379d60a91b6080820152602081018290525f80516020611c098339815191529060a0016107dd565b610abe611307565b6001600160a01b038116610b145760405162461bcd60e51b815260206004820152601860248201527f7365746d61726b6574696e6757616c6c65743a205a45524f0000000000000000604482015260640161077f565b600180546001600160a01b0319166001600160a01b038316908117909155604080518181526024918101919091527f57652068617665205570646174656420746865204d61726b6574696e6757616c6060820152633632ba1d60e11b608082015260208101919091525f80516020611c298339815191529060a0016107dd565b610b9c611307565b610ba55f611690565b565b610baf611307565b6005811115610c005760405162461bcd60e51b815260206004820152601f60248201527f53656c6c204665652063616e6e6f74206265206d6f7265207468616e20352500604482015260640161077f565b60088190556040805181815260209181018290527f576520686176652075706461746564207468652073656c6c2066656520746f3a60608201529081018290525f80516020611c09833981519152906080016107dd565b610c5f611307565b6005811115610cbc5760405162461bcd60e51b815260206004820152602360248201527f7472616e73666572204665652063616e6e6f74206265206d6f7265207468616e60448201526220352560e81b606482015260840161077f565b6007819055604080518181526024918101919091527f57652068617665207570646174656420746865207472616e7366657220666565606082015263103a379d60e11b6080820152602081018290525f80516020611c098339815191529060a0016107dd565b335f8181526003602090815260408083206001600160a01b03871684529091528120549091610720918590610886908690611adc565b5f610720338484611360565b600c805460ff19166001179055305f908152600260205260408120549050610d8b816116df565b6001544790610da3906001600160a01b031682611863565b50505f600955600c805460ff19169055565b610dbd611307565b60015460405147915f916001600160a01b039091169083908381818185875af1925050503d805f8114610e0b576040519150601f19603f3d011682016040523d82523d5f602084013e610e10565b606091505b5050905080610e535760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015260640161077f565b60015460408051818152602c918101919091527f57652068617665207265636f766572207468652073746f636b2065746820667260608201526b37b69031b7b73a3930b1ba1760a11b60808201526001600160a01b0390911660208201525f80516020611c298339815191529060a0015b60405180910390a15050565b610ed8611307565b306001600160a01b03831603610f4f5760405162461bcd60e51b815260206004820152603660248201527f4f776e65722063616e277420636c61696d20636f6e747261637427732062616c604482015275616e6365206f6620697473206f776e20746f6b656e7360501b606482015260840161077f565b60015460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390525f9184169063a9059cbb906044016020604051808303815f875af1158015610fa0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fc49190611b02565b9050806110055760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015260640161077f565b604080518181526027818301527f57652068617665207265636f766572656420746f6b656e732066726f6d20636f606082015266373a3930b1ba1d60c91b60808201526020810184905290515f80516020611c098339815191529181900360a00190a1505050565b611075611307565b6001600160a01b0381165f9081526004602052604090205460ff166110dc5760405162461bcd60e51b815260206004820152601f60248201527f5468652077616c6c657420697320616c726561647920696e636c756465642100604482015260640161077f565b6001600160a01b0381165f81815260046020908152604091829020805460ff1916905581518281526031928101929092527f5765206861766520696e636c7564696e672074686520666f6c6c6f77696e67206060830152703bb0b63632ba10333937b6903332b2b99d60791b60808301528101919091525f80516020611c298339815191529060a0016107dd565b611172611307565b6001600160a01b0381166111d75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161077f565b6111e081611690565b50565b6001600160a01b0383166112455760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161077f565b6001600160a01b0382166112a65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161077f565b6001600160a01b038381165f8181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b5f546001600160a01b03163314610ba55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161077f565b6001600160a01b0383166113c45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161077f565b6001600160a01b0382166114265760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161077f565b5f81116114875760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161077f565b6001600160a01b0383165f908152600260205260409020548111156114fd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161077f565b305f90815260026020526040812054600b54600c54919290831015917f0000000000000000000000003551fbb363e6c608a02ab33f10582863b700f8df6001600160a01b03908116888216811492918816149060ff1615801561155e575081155b80156115675750835b801561157a5750600c54610100900460ff165b1561158757611587610d64565b6001600160a01b038089165f9081526004602052604080822054928a16825290205460ff918216159116158280156115bc5750815b156115e2576064886008546115d19190611b21565b6115db9190611b38565b945061162d565b8380156115ec5750805b15611601576064886006546115d19190611b21565b80801561160b5750815b1561162d576064886007546116209190611b21565b61162a9190611b38565b94505b6116378589611adc565b975084156116795761164a8a30876118fa565b8460095f82825461165b9190611aef565b9250508190555084600a5f8282546116739190611aef565b90915550505b6116848a8a8a6118fa565b50505050505050505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061171257611712611b57565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28160018151811061176657611766611b57565b60200260200101906001600160a01b031690816001600160a01b0316815250506117b1307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846111e3565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906118059085905f90869030904290600401611bad565b5f604051808303815f87803b15801561181c575f80fd5b505af115801561182e573d5f803e3d5ffd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051610ec4929190611be8565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f81146118ac576040519150601f19603f3d011682016040523d82523d5f602084013e6118b1565b606091505b50509050806118f55760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b604482015260640161077f565b505050565b6001600160a01b0383165f9081526002602052604081208054839290611921908490611adc565b90915550506001600160a01b0382165f908152600260205260408120805483929061194d908490611aef565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516112fa91815260200190565b5f6020808352835180828501525f5b818110156119c4578581018301518582016040015282016119a8565b505f604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146119fa575f80fd5b919050565b5f8060408385031215611a10575f80fd5b611a19836119e4565b946020939093013593505050565b5f60208284031215611a37575f80fd5b5035919050565b5f805f60608486031215611a50575f80fd5b611a59846119e4565b9250611a67602085016119e4565b9150604084013590509250925092565b5f60208284031215611a87575f80fd5b611a90826119e4565b9392505050565b5f8060408385031215611aa8575f80fd5b611ab1836119e4565b9150611abf602084016119e4565b90509250929050565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561072457610724611ac8565b8082018082111561072457610724611ac8565b5f60208284031215611b12575f80fd5b81518015158114611a90575f80fd5b808202811582820484141761072457610724611ac8565b5f82611b5257634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52603260045260245ffd5b5f8151808452602080850194508084015f5b83811015611ba25781516001600160a01b031687529582019590820190600101611b7d565b509495945050505050565b85815284602082015260a060408201525f611bcb60a0830186611b6b565b6001600160a01b0394909416606083015250608001529392505050565b828152604060208201525f611c006040830184611b6b565b94935050505056fedd970dd9b5bfe707922155b058a407655cb18288b807e2216442bca8ad83d6b5025dbd6ad989fe1a64db7dc049e29723ff9d35a97d84ae9aab96196f00ec1a00a2646970667358221220655208d8f15de3c4097468c138802a262793b96043a5c8d455833cbfc1d78b5664736f6c63430008150033
Deployed Bytecode Sourcemap
22894:14015:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23996:47;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;23996:47:0;;;;;;;;;;;;:::i;:::-;;;;;;;;26598:186;;;;;;;;;;-1:-1:-1;26598:186:0;;;;;:::i;:::-;;:::i;:::-;;;1169:14:1;;1162:22;1144:41;;1132:2;1117:18;26598:186:0;1004:187:1;33974:218:0;;;;;;;;;;-1:-1:-1;33974:218:0;;;;;:::i;:::-;;:::i;:::-;;24476:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1572:32:1;;;1554:51;;1542:2;1527:18;24476:51:0;1381:230:1;25868:95:0;;;;;;;;;;-1:-1:-1;25948:7:0;;25868:95;;;1762:25:1;;;1750:2;1735:18;25868:95:0;1616:177:1;24672:28:0;;;;;;;;;;-1:-1:-1;24672:28:0;;;;;;;;26829:478;;;;;;;;;;-1:-1:-1;26829:478:0;;;;;:::i;:::-;;:::i;24232:26::-;;;;;;;;;;;;;;;;24094:35;;;;;;;;;;;;24127:2;24094:35;;;;;2303:4:1;2291:17;;;2273:36;;2261:2;2246:18;24094:35:0;2131:184:1;27357:290:0;;;;;;;;;;-1:-1:-1;27357:290:0;;;;;:::i;:::-;;:::i;24319:48::-;;;;;;;;;;;;;;;;32285:355;;;;;;;;;;-1:-1:-1;32285:355:0;;;;;:::i;:::-;;:::i;33083:430::-;;;;;;;;;;-1:-1:-1;33083:430:0;;;;;:::i;:::-;;:::i;24163:25::-;;;;;;;;;;;;;;;;24534:38;;;;;;;;;;;;;;;24707:40;;;;;;;;;;-1:-1:-1;24707:40:0;;;;;;;;;;;32071:126;;;;;;;;;;-1:-1:-1;32071:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;32162:27:0;32138:4;32162:27;;;:18;:27;;;;;;;;;32071:126;33556:294;;;;;;;;;;-1:-1:-1;33556:294:0;;;;;:::i;:::-;;:::i;24269:43::-;;;;;;;;;;;;;;;;25971:117;;;;;;;;;;-1:-1:-1;25971:117:0;;;;;:::i;:::-;-1:-1:-1;;;;;26064:16:0;26037:7;26064:16;;;:7;:16;;;;;;;25971:117;13010:103;;;;;;;;;;;;;:::i;23031:101::-;;;;;;;;;;-1:-1:-1;23031:101:0;;;;-1:-1:-1;;;;;23031:101:0;;;23178:88;;;;;;;;;;;;23224:42;23178:88;;34316:226;;;;;;;;;;-1:-1:-1;34316:226:0;;;;;:::i;:::-;;:::i;12362:87::-;;;;;;;;;;-1:-1:-1;12408:7:0;12435:6;-1:-1:-1;;;;;12435:6:0;12362:87;;34550:259;;;;;;;;;;-1:-1:-1;34550:259:0;;;;;:::i;:::-;;:::i;24050:37::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;24050:37:0;;;;;27697:300;;;;;;;;;;-1:-1:-1;27697:300:0;;;;;:::i;:::-;;:::i;26138:192::-;;;;;;;;;;-1:-1:-1;26138:192:0;;;;;:::i;:::-;;:::i;24195:30::-;;;;;;;;;;;;;;;;30553:303;;;;;;;;;;;;;:::i;35938:359::-;;;;;;;;;;;;;:::i;24376:53::-;;;;;;;;;;;;;;;;26380:170;;;;;;;;;;-1:-1:-1;26380:170:0;;;;;:::i;:::-;-1:-1:-1;;;;;26514:19:0;;;26487:7;26514:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;26380:170;36441:465;;;;;;;;;;-1:-1:-1;36441:465:0;;;;;:::i;:::-;;:::i;32684:354::-;;;;;;;;;;-1:-1:-1;32684:354:0;;;;;:::i;:::-;;:::i;13268:238::-;;;;;;;;;;-1:-1:-1;13268:238:0;;;;;:::i;:::-;;:::i;26598:186::-;26698:4;26715:39;173:10;26738:7;26747:6;26715:8;:39::i;:::-;-1:-1:-1;26772:4:0;26598:186;;;;;:::o;33974:218::-;12248:13;:11;:13::i;:::-;34059:1:::1;34048:7;:12;;34040:55;;;::::0;-1:-1:-1;;;34040:55:0;;3410:2:1;34040:55:0::1;::::0;::::1;3392:21:1::0;3449:2;3429:18;;;3422:30;3488:32;3468:18;;;3461:60;3538:18;;34040:55:0::1;;;;;;;;;34106:6;:16:::0;;;34138:46:::1;::::0;;3779:21:1;;;3836:2;3816:18;;;3809:30;;;;3875:33;3870:2;3855:18;;3848:61;3976:4;3961:20;;3954:36;;;-1:-1:-1;;;;;;;;;;;34138:46:0;3941:3:1;3926:19;34138:46:0::1;;;;;;;;33974:218:::0;:::o;26829:478::-;-1:-1:-1;;;;;27002:19:0;;26961:4;27002:19;;;:11;:19;;;;;;;;173:10;27002:33;;;;;;;;27068:26;;;;27046:116;;;;-1:-1:-1;;;27046:116:0;;4203:2:1;27046:116:0;;;4185:21:1;4242:2;4222:18;;;4215:30;4281:34;4261:18;;;4254:62;-1:-1:-1;;;4332:18:1;;;4325:38;4380:19;;27046:116:0;4001:404:1;27046:116:0;27173:36;27183:6;27191:9;27202:6;27173:9;:36::i;:::-;27220:57;27229:6;173:10;27251:25;27270:6;27251:16;:25;:::i;:::-;27220:8;:57::i;:::-;-1:-1:-1;27295:4:0;;26829:478;-1:-1:-1;;;;26829:478:0:o;27357:290::-;173:10;27470:4;27559:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;27559:34:0;;;;;;;;;;27470:4;;27487:130;;27537:7;;27559:47;;27596:10;;27559:47;:::i;32285:355::-;12248:13;:11;:13::i;:::-;-1:-1:-1;;;;;32379:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;::::1;;32378:28;32356:109;;;::::0;-1:-1:-1;;;32356:109:0;;5007:2:1;32356:109:0::1;::::0;::::1;4989:21:1::0;5046:2;5026:18;;;5019:30;5085:33;5065:18;;;5058:61;5136:18;;32356:109:0::1;4805:355:1::0;32356:109:0::1;-1:-1:-1::0;;;;;32476:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;:34;;-1:-1:-1;;32476:34:0::1;32506:4;32476:34;::::0;;32526:106;-1:-1:-1;;;;;;;;;;;32526:106:0;::::1;::::0;32495:7;;5395:2:1;5377:21;;;5434:2;5414:18;;;5407:30;5473:34;5468:2;5453:18;;5446:62;-1:-1:-1;;;5539:3:1;5524:19;;5517:47;-1:-1:-1;;;;;5638:32:1;;;;5631:4;5616:20;;5609:62;5596:3;5581:19;;5165:512;33083:430:0;12248:13;:11;:13::i;:::-;33238:10:::1;33210:24;:38;;33188:128;;;::::0;-1:-1:-1;;;33188:128:0;;5884:2:1;33188:128:0::1;::::0;::::1;5866:21:1::0;5923:2;5903:18;;;5896:30;5962:34;5942:18;;;5935:62;-1:-1:-1;;;6013:18:1;;;6006:38;6061:19;;33188:128:0::1;5682:404:1::0;33188:128:0::1;33327:23;:50:::0;;;33393:112:::1;::::0;;6303:21:1;;;6360:2;6340:18;;;6333:30;;;;6399:34;6394:2;6379:18;;6372:62;-1:-1:-1;;;6465:3:1;6450:19;;6443:42;6552:4;6537:20;;6530:36;;;-1:-1:-1;;;;;;;;;;;33393:112:0;6517:3:1;6502:19;33393:112:0::1;6091:481:1::0;33556:294:0;12248:13;:11;:13::i;:::-;-1:-1:-1;;;;;33648:30:0;::::1;33640:67;;;::::0;-1:-1:-1;;;33640:67:0;;6779:2:1;33640:67:0::1;::::0;::::1;6761:21:1::0;6818:2;6798:18;;;6791:30;6857:26;6837:18;;;6830:54;6901:18;;33640:67:0::1;6577:348:1::0;33640:67:0::1;33718:15;:43:::0;;-1:-1:-1;;;;;;33718:43:0::1;-1:-1:-1::0;;;;;33718:43:0;::::1;::::0;;::::1;::::0;;;33777:65:::1;::::0;;7150:21:1;;;7207:2;7187:18;;;7180:30;;;;7246:34;7241:2;7226:18;;7219:62;-1:-1:-1;;;7312:3:1;7297:19;;7290:35;7392:4;7377:20;;7370:62;;;;-1:-1:-1;;;;;;;;;;;33777:65:0;7357:3:1;7342:19;33777:65:0::1;6930:508:1::0;13010:103:0;12248:13;:11;:13::i;:::-;13075:30:::1;13102:1;13075:18;:30::i;:::-;13010:103::o:0;34316:226::-;12248:13;:11;:13::i;:::-;34404:1:::1;34392:8;:13;;34384:57;;;::::0;-1:-1:-1;;;34384:57:0;;7645:2:1;34384:57:0::1;::::0;::::1;7627:21:1::0;7684:2;7664:18;;;7657:30;7723:33;7703:18;;;7696:61;7774:18;;34384:57:0::1;7443:355:1::0;34384:57:0::1;34452:7;:18:::0;;;34486:48:::1;::::0;;8015:21:1;;;8072:2;8052:18;;;8045:30;;;8111:34;8106:2;8091:18;;8084:62;8198:18;;;8191:34;;;-1:-1:-1;;;;;;;;;;;34486:48:0;8178:3:1;8163:19;34486:48:0::1;7803:428:1::0;34550:259:0;12248:13;:11;:13::i;:::-;34650:1:::1;34634:12;:17;;34626:65;;;::::0;-1:-1:-1;;;34626:65:0;;8438:2:1;34626:65:0::1;::::0;::::1;8420:21:1::0;8477:2;8457:18;;;8450:30;8516:34;8496:18;;;8489:62;-1:-1:-1;;;8567:18:1;;;8560:33;8610:19;;34626:65:0::1;8236:399:1::0;34626:65:0::1;34702:11;:26:::0;;;34744:57:::1;::::0;;8852:21:1;;;8909:2;8889:18;;;8882:30;;;;8948:34;8943:2;8928:18;;8921:62;-1:-1:-1;;;9014:3:1;8999:19;;8992:35;9094:4;9079:20;;9072:36;;;-1:-1:-1;;;;;;;;;;;34744:57:0;9059:3:1;9044:19;34744:57:0::1;8640:474:1::0;27697:300:0;173:10;27815:4;27904:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;27904:34:0;;;;;;;;;;27815:4;;27832:135;;27882:7;;27904:52;;27941:15;;27904:52;:::i;26138:192::-;26241:4;26258:42;173:10;26282:9;26293:6;26258:9;:42::i;30553:303::-;24790:16;:23;;-1:-1:-1;;24790:23:0;24809:4;24790:23;;;30649:4:::1;-1:-1:-1::0;26064:16:0;;;:7;:16;;;;;;30609:46:::1;;30666:29;30683:11;30666:16;:29::i;:::-;30779:15;::::0;30724:21:::1;::::0;30758:49:::1;::::0;-1:-1:-1;;;;;30779:15:0::1;30724:21:::0;30758:20:::1;:49::i;:::-;-1:-1:-1::0;;30847:1:0::1;30820:24;:28:::0;24836:16;:24;;-1:-1:-1;;24836:24:0;;;30553:303::o;35938:359::-;12248:13;:11;:13::i;:::-;36076:15:::1;::::0;36068:52:::1;::::0;36020:21:::1;::::0;36002:15:::1;::::0;-1:-1:-1;;;;;36076:15:0;;::::1;::::0;36020:21;;36002:15;36068:52;36002:15;36068:52;36020:21;36076:15;36068:52:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36052:68;;;36139:4;36131:32;;;::::0;-1:-1:-1;;;36131:32:0;;9531:2:1;36131:32:0::1;::::0;::::1;9513:21:1::0;9570:2;9550:18;;;9543:30;-1:-1:-1;;;9589:18:1;;;9582:45;9644:18;;36131:32:0::1;9329:339:1::0;36131:32:0::1;36263:15;::::0;36179:110:::1;::::0;;9893:21:1;;;9950:2;9930:18;;;9923:30;;;;9989:34;9984:2;9969:18;;9962:62;-1:-1:-1;;;10055:3:1;10040:19;;10033:43;-1:-1:-1;;;;;36263:15:0;;::::1;10143:4:1::0;10128:20;;10121:62;-1:-1:-1;;;;;;;;;;;36179:110:0;10108:3:1;10093:19;36179:110:0::1;;;;;;;;35991:306;;35938:359::o:0;36441:465::-;12248:13;:11;:13::i;:::-;36618:4:::1;-1:-1:-1::0;;;;;36593:30:0;::::1;::::0;36571:134:::1;;;::::0;-1:-1:-1;;;36571:134:0;;10396:2:1;36571:134:0::1;::::0;::::1;10378:21:1::0;10435:2;10415:18;;;10408:30;10474:34;10454:18;;;10447:62;-1:-1:-1;;;10525:18:1;;;10518:52;10587:19;;36571:134:0::1;10194:418:1::0;36571:134:0::1;36759:15;::::0;36728:56:::1;::::0;-1:-1:-1;;;36728:56:0;;-1:-1:-1;;;;;36759:15:0;;::::1;36728:56;::::0;::::1;10799:51:1::0;10866:18;;;10859:34;;;36716:9:0::1;::::0;36728:30;::::1;::::0;::::1;::::0;10772:18:1;;36728:56:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36716:68;;36803:4;36795:32;;;::::0;-1:-1:-1;;;36795:32:0;;9531:2:1;36795:32:0::1;::::0;::::1;9513:21:1::0;9570:2;9550:18;;;9543:30;-1:-1:-1;;;9589:18:1;;;9582:45;9644:18;;36795:32:0::1;9329:339:1::0;36795:32:0::1;36843:55;::::0;;11398:21:1;;;11455:2;11435:18;;;11428:30;11494:34;11489:2;11474:18;;11467:62;-1:-1:-1;;;11560:3:1;11545:19;;11538:38;11643:4;11628:20;;11621:36;;;36843:55:0;;-1:-1:-1;;;;;;;;;;;36843:55:0;;;;11608:3:1;36843:55:0;;::::1;36560:346;36441:465:::0;;:::o;32684:354::-;12248:13;:11;:13::i;:::-;-1:-1:-1;;;;;32775:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;::::1;;32753:108;;;::::0;-1:-1:-1;;;32753:108:0;;11870:2:1;32753:108:0::1;::::0;::::1;11852:21:1::0;11909:2;11889:18;;;11882:30;11948:33;11928:18;;;11921:61;11999:18;;32753:108:0::1;11668:355:1::0;32753:108:0::1;-1:-1:-1::0;;;;;32872:27:0;::::1;32902:5;32872:27:::0;;;:18:::1;:27;::::0;;;;;;;;:35;;-1:-1:-1;;32872:35:0::1;::::0;;32923:107;;12240:21:1;;;12297:2;12277:18;;;12270:30;;;;12336:34;12331:2;12316:18;;12309:62;-1:-1:-1;;;12402:3:1;12387:19;;12380:48;12480:20;;12473:62;;;;-1:-1:-1;;;;;;;;;;;32923:107:0;12460:3:1;12445:19;32923:107:0::1;12028:513:1::0;13268:238:0;12248:13;:11;:13::i;:::-;-1:-1:-1;;;;;13371:22:0;::::1;13349:110;;;::::0;-1:-1:-1;;;13349:110:0;;12748:2:1;13349:110:0::1;::::0;::::1;12730:21:1::0;12787:2;12767:18;;;12760:30;12826:34;12806:18;;;12799:62;-1:-1:-1;;;12877:18:1;;;12870:36;12923:19;;13349:110:0::1;12546:402:1::0;13349:110:0::1;13470:28;13489:8;13470:18;:28::i;:::-;13268:238:::0;:::o;28029:341::-;-1:-1:-1;;;;;28123:20:0;;28115:69;;;;-1:-1:-1;;;28115:69:0;;13155:2:1;28115:69:0;;;13137:21:1;13194:2;13174:18;;;13167:30;13233:34;13213:18;;;13206:62;-1:-1:-1;;;13284:18:1;;;13277:34;13328:19;;28115:69:0;12953:400:1;28115:69:0;-1:-1:-1;;;;;28203:21:0;;28195:68;;;;-1:-1:-1;;;28195:68:0;;13560:2:1;28195:68:0;;;13542:21:1;13599:2;13579:18;;;13572:30;13638:34;13618:18;;;13611:62;-1:-1:-1;;;13689:18:1;;;13682:32;13731:19;;28195:68:0;13358:398:1;28195:68:0;-1:-1:-1;;;;;28276:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;28329:33;;1762:25:1;;;28329:33:0;;1735:18:1;28329:33:0;;;;;;;;28029:341;;;:::o;12527:132::-;12408:7;12435:6;-1:-1:-1;;;;;12435:6:0;173:10;12591:23;12583:68;;;;-1:-1:-1;;;12583:68:0;;13963:2:1;12583:68:0;;;13945:21:1;;;13982:18;;;13975:30;14041:34;14021:18;;;14014:62;14093:18;;12583:68:0;13761:356:1;28503:1785:0;-1:-1:-1;;;;;28591:18:0;;28583:68;;;;-1:-1:-1;;;28583:68:0;;14324:2:1;28583:68:0;;;14306:21:1;14363:2;14343:18;;;14336:30;14402:34;14382:18;;;14375:62;-1:-1:-1;;;14453:18:1;;;14446:35;14498:19;;28583:68:0;14122:401:1;28583:68:0;-1:-1:-1;;;;;28670:16:0;;28662:64;;;;-1:-1:-1;;;28662:64:0;;14730:2:1;28662:64:0;;;14712:21:1;14769:2;14749:18;;;14742:30;14808:34;14788:18;;;14781:62;-1:-1:-1;;;14859:18:1;;;14852:33;14902:19;;28662:64:0;14528:399:1;28662:64:0;28754:1;28745:6;:10;28737:64;;;;-1:-1:-1;;;28737:64:0;;15134:2:1;28737:64:0;;;15116:21:1;15173:2;15153:18;;;15146:30;15212:34;15192:18;;;15185:62;-1:-1:-1;;;15263:18:1;;;15256:39;15312:19;;28737:64:0;14932:405:1;28737:64:0;-1:-1:-1;;;;;28834:13:0;;;;;;:7;:13;;;;;;:23;-1:-1:-1;28834:23:0;28812:111;;;;-1:-1:-1;;;28812:111:0;;15544:2:1;28812:111:0;;;15526:21:1;15583:2;15563:18;;;15556:30;15622:34;15602:18;;;15595:62;-1:-1:-1;;;15673:18:1;;;15666:36;15719:19;;28812:111:0;15342:402:1;28812:111:0;29029:4;28980:28;26064:16;;;:7;:16;;;;;;29114:23;;29362:16;;26064;;29077:60;;;;;29193:13;-1:-1:-1;;;;;29185:21:0;;;;;;;;;29229:19;;;;;29362:16;;29361:17;:41;;;;;29396:6;29395:7;29361:41;:81;;;;;29419:23;29361:81;:119;;;;-1:-1:-1;29459:21:0;;;;;;;29361:119;29343:192;;;29507:16;:14;:16::i;:::-;-1:-1:-1;;;;;29618:24:0;;;29594:20;29618:24;;;:18;:24;;;;;;;29675:22;;;;;;;;29618:24;;;;29617:25;;29675:22;29674:23;29749:4;:23;;;;;29757:15;29749:23;29745:282;;;29816:3;29806:6;29796:7;;:16;;;;:::i;:::-;29795:24;;;;:::i;:::-;29789:30;;29745:282;;;29841:6;:23;;;;;29851:13;29841:23;29837:190;;;29907:3;29897:6;29888;;:15;;;;:::i;29837:190::-;29932:13;:32;;;;;29949:15;29932:32;29928:99;;;30012:3;30002:6;29988:11;;:20;;;;:::i;:::-;29987:28;;;;:::i;:::-;29981:34;;29928:99;30037:13;30047:3;30037:13;;:::i;:::-;;-1:-1:-1;30065:7:0;;30061:177;;30089:40;30104:4;30118;30125:3;30089:14;:40::i;:::-;30172:3;30144:24;;:31;;;;;;;:::i;:::-;;;;;;;;30223:3;30190:29;;:36;;;;;;;:::i;:::-;;;;-1:-1:-1;;30061:177:0;30248:32;30263:4;30269:2;30273:6;30248:14;:32::i;:::-;28572:1716;;;;;;;28503:1785;;;:::o;13666:191::-;13740:16;13759:6;;-1:-1:-1;;;;;13776:17:0;;;-1:-1:-1;;;;;;13776:17:0;;;;;;13809:40;;13759:6;;;;;;;13809:40;;13740:16;13809:40;13729:128;13666:191;:::o;30984:638::-;31134:16;;;31148:1;31134:16;;;;;;;;31110:21;;31134:16;;;;;;;;;;-1:-1:-1;31134:16:0;31110:40;;31179:4;31161;31166:1;31161:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;31161:23:0;;;-1:-1:-1;;;;;31161:23:0;;;;;31205:4;31195;31200:1;31195:7;;;;;;;;:::i;:::-;;;;;;:14;-1:-1:-1;;;;;31195:14:0;;;-1:-1:-1;;;;;31195:14:0;;;;;31220:62;31237:4;31252:15;31270:11;31220:8;:62::i;:::-;31321:240;;-1:-1:-1;;;31321:240:0;;-1:-1:-1;;;;;31321:15:0;:66;;;;:240;;31402:11;;31428:1;;31472:4;;31499;;31535:15;;31321:240;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31579:35;31596:11;31609:4;31579:35;;;;;;;:::i;34817:218::-;34935:9;34950;-1:-1:-1;;;;;34950:14:0;34972:6;34950:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34934:49;;;35002:4;34994:33;;;;-1:-1:-1;;;34994:33:0;;18000:2:1;34994:33:0;;;17982:21:1;18039:2;18019:18;;;18012:30;-1:-1:-1;;;18058:18:1;;;18051:46;18114:18;;34994:33:0;17798:340:1;34994:33:0;34923:112;34817:218;;:::o;31758:253::-;-1:-1:-1;;;;;31886:15:0;;;;;;:7;:15;;;;;:25;;31905:6;;31886:15;:25;;31905:6;;31886:25;:::i;:::-;;;;-1:-1:-1;;;;;;;31922:18:0;;;;;;:7;:18;;;;;:28;;31944:6;;31922:18;:28;;31944:6;;31922:28;:::i;:::-;;;;;;;;31985:9;-1:-1:-1;;;;;31968:35:0;31977:6;-1:-1:-1;;;;;31968:35:0;;31996:6;31968:35;;;;1762:25:1;;1750:2;1735:18;;1616:177;14:548;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:173::-;635:20;;-1:-1:-1;;;;;684:31:1;;674:42;;664:70;;730:1;727;720:12;664:70;567:173;;;:::o;745:254::-;813:6;821;874:2;862:9;853:7;849:23;845:32;842:52;;;890:1;887;880:12;842:52;913:29;932:9;913:29;:::i;:::-;903:39;989:2;974:18;;;;961:32;;-1:-1:-1;;;745:254:1:o;1196:180::-;1255:6;1308:2;1296:9;1287:7;1283:23;1279:32;1276:52;;;1324:1;1321;1314:12;1276:52;-1:-1:-1;1347:23:1;;1196:180;-1:-1:-1;1196:180:1:o;1798:328::-;1875:6;1883;1891;1944:2;1932:9;1923:7;1919:23;1915:32;1912:52;;;1960:1;1957;1950:12;1912:52;1983:29;2002:9;1983:29;:::i;:::-;1973:39;;2031:38;2065:2;2054:9;2050:18;2031:38;:::i;:::-;2021:48;;2116:2;2105:9;2101:18;2088:32;2078:42;;1798:328;;;;;:::o;2320:186::-;2379:6;2432:2;2420:9;2411:7;2407:23;2403:32;2400:52;;;2448:1;2445;2438:12;2400:52;2471:29;2490:9;2471:29;:::i;:::-;2461:39;2320:186;-1:-1:-1;;;2320:186:1:o;2943:260::-;3011:6;3019;3072:2;3060:9;3051:7;3047:23;3043:32;3040:52;;;3088:1;3085;3078:12;3040:52;3111:29;3130:9;3111:29;:::i;:::-;3101:39;;3159:38;3193:2;3182:9;3178:18;3159:38;:::i;:::-;3149:48;;2943:260;;;;;:::o;4410:127::-;4471:10;4466:3;4462:20;4459:1;4452:31;4502:4;4499:1;4492:15;4526:4;4523:1;4516:15;4542:128;4609:9;;;4630:11;;;4627:37;;;4644:18;;:::i;4675:125::-;4740:9;;;4761:10;;;4758:36;;;4774:18;;:::i;10904:277::-;10971:6;11024:2;11012:9;11003:7;10999:23;10995:32;10992:52;;;11040:1;11037;11030:12;10992:52;11072:9;11066:16;11125:5;11118:13;11111:21;11104:5;11101:32;11091:60;;11147:1;11144;11137:12;15749:168;15822:9;;;15853;;15870:15;;;15864:22;;15850:37;15840:71;;15891:18;;:::i;15922:217::-;15962:1;15988;15978:132;;16032:10;16027:3;16023:20;16020:1;16013:31;16067:4;16064:1;16057:15;16095:4;16092:1;16085:15;15978:132;-1:-1:-1;16124:9:1;;15922:217::o;16276:127::-;16337:10;16332:3;16328:20;16325:1;16318:31;16368:4;16365:1;16358:15;16392:4;16389:1;16382:15;16408:461;16461:3;16499:5;16493:12;16526:6;16521:3;16514:19;16552:4;16581:2;16576:3;16572:12;16565:19;;16618:2;16611:5;16607:14;16639:1;16649:195;16663:6;16660:1;16657:13;16649:195;;;16728:13;;-1:-1:-1;;;;;16724:39:1;16712:52;;16784:12;;;;16819:15;;;;16760:1;16678:9;16649:195;;;-1:-1:-1;16860:3:1;;16408:461;-1:-1:-1;;;;;16408:461:1:o;16874:582::-;17173:6;17162:9;17155:25;17216:6;17211:2;17200:9;17196:18;17189:34;17259:3;17254:2;17243:9;17239:18;17232:31;17136:4;17280:57;17332:3;17321:9;17317:19;17309:6;17280:57;:::i;:::-;-1:-1:-1;;;;;17373:32:1;;;;17368:2;17353:18;;17346:60;-1:-1:-1;17437:3:1;17422:19;17415:35;17272:65;16874:582;-1:-1:-1;;;16874:582:1:o;17461:332::-;17668:6;17657:9;17650:25;17711:2;17706;17695:9;17691:18;17684:30;17631:4;17731:56;17783:2;17772:9;17768:18;17760:6;17731:56;:::i;:::-;17723:64;17461:332;-1:-1:-1;;;;17461:332:1:o
Swarm Source
ipfs://655208d8f15de3c4097468c138802a262793b96043a5c8d455833cbfc1d78b56
Loading...
Loading
Loading...
Loading
OVERVIEW
Speedster is a groundbreaking Web3 game that catapults players into an expansive and procedurally generated universe, where they embark on a thrilling planetary space adventure, resources are waiting to be harnessed, sterships are crafted, and epic battles for territorial control await.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 ]
[ 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.