Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Artificial Intelligence
Overview
Max Total Supply
1,000,000,000 TOR
Holders
2,394 ( -0.125%)
Market
Price
$0.00 @ 0.000000 ETH (+28.53%)
Onchain Market Cap
$459,620.00
Circulating Supply Market Cap
$0.00
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
TOR
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-04-03 */ // SPDX-License-Identifier: UNLICENSED pragma solidity 0.8.19; /* Resistor AI Blockchain With AI Resources and Marketplace Provide and Consume AI Services On-Chain https://resistorai.org */ 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 TOR is Context, IERC20, Ownable { using Address for address; //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 RewardLiquidityProviders(uint256 tokenAmount); 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; uint256 private _tFeeTotal; //Token Definition. string public constant name = "Resistor AI"; string public constant symbol = "TOR"; uint8 public constant decimals = 18; //Definition of Wallets for Marketing or team. address payable public marketingWallet = payable(0x0bb3719C674401D665a5418423bf48972B4f9c4f); address payable public revenueWallet = payable(0x0bb3719C674401D665a5418423bf48972B4f9c4f); //Dead Wallet for SAFU Contract address public constant deadWallet = 0x000000000000000000000000000000000000dEaD; //Taxes Definition. uint public buyFee = 5; uint256 public sellFee = 5; uint public revenueFee = 1; uint public marketingFee = 3; uint256 public marketingTokensCollected = 0; uint256 public totalMarketingTokensCollected = 0; uint256 public minimumTokensBeforeSwap = 10_000 ether; //Oracle Price Update, Manual Process. uint256 public swapOutput = 0; //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; //End of Router Variables. //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; _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; //if any account belongs to _isExcludedFromFee account then remove the fee if ( !inSwapAndLiquify && from != uniswapV2Pair && overMinimumTokenBalance && swapAndLiquifyEnabled ) { swapAndLiquify(); } if (to == uniswapV2Pair && !_isExcludedFromFee[from]) { fee = (sellFee * amount) / 100; } if (from == uniswapV2Pair && !_isExcludedFromFee[to]) { fee = (buyFee * amount) / 100; } amount -= fee; if (fee > 0) { _tokenTransfer(from, address(this), fee); marketingTokensCollected += fee; totalMarketingTokensCollected += fee; } _tokenTransfer(from, to, amount); } function swapAndLiquify() public lockTheSwap { uint256 totalTokens = balanceOf(address(this)); swapTokensForEth(totalTokens); uint ethBalance = address(this).balance; uint totalFees = revenueFee + marketingFee; if (totalFees == 0) totalFees = 1; uint revenueAmount = (ethBalance * revenueFee) / totalFees; ethBalance -= revenueAmount; transferToAddressETH(revenueWallet, revenueAmount); transferToAddressETH(marketingWallet, ethBalance); marketingTokensCollected = 0; } 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); } 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 { _isExcludedFromFee[account] = true; emit AuditLog( "We have excluded the following walled in fees:", account ); } //include wallet back in fees. function includeInFee(address account) external onlyOwner { _isExcludedFromFee[account] = false; emit AuditLog( "We have including the following walled in fees:", account ); } //Automatic Swap Configuration. function setTokensToSwap( uint256 _minimumTokensBeforeSwap ) external onlyOwner { require( _minimumTokensBeforeSwap >= 100 ether, "You need to enter more than 100 tokens." ); minimumTokensBeforeSwap = _minimumTokensBeforeSwap; emit Log( "We have updated minimunTokensBeforeSwap to:", minimumTokensBeforeSwap ); } function setSwapAndLiquifyEnabled(bool _enabled) external onlyOwner { require(swapAndLiquifyEnabled != _enabled, "Value already set"); swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } //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); } //set a new team wallet. function setRevenueWallet(address _revenueWallet) external onlyOwner { require(_revenueWallet != address(0), "setRevenueWallet: ZERO"); revenueWallet = payable(_revenueWallet); emit AuditLog("We have Updated the RarketingWallet:", revenueWallet); } function transferToAddressETH( address payable recipient, uint256 amount ) private { if (amount == 0) return; (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 }( swapOutput, // 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 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
[{"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":"tokenAmount","type":"uint256"}],"name":"RewardLiquidityProviders","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":"marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"revenueFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"revenueWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_revenueWallet","type":"address"}],"name":"setRevenueWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minimumTokensBeforeSwap","type":"uint256"}],"name":"setTokensToSwap","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":"swapOutput","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"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
60e06040526b033b2e3c9fd0803ce8000000600455600680546001600160a01b0319908116730bb3719c674401d665a5418423bf48972b4f9c4f908117909255600780549091169091179055600560088190556009556001600a556003600b556000600c819055600d81905569021e19e0c9bab2400000600e55600f556010805461ff0019166101001790553480156200009857600080fd5b50620000a433620002f5565b60048054336000908152600160209081526040918290209290925580516315ab88c960e31b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d938493849363ad5c4648938184019390918290030181865afa1580156200010d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000133919062000345565b6001600160a01b031660c0816001600160a01b031681525050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200018b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b1919062000345565b60c0516040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303816000875af115801562000203573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000229919062000345565b6001600160a01b0390811660a0528116608052600160036000620002556000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff1995861617905530815260039092529020805490911660011790556200029d3390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600454604051620002e591815260200190565b60405180910390a3505062000377565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156200035857600080fd5b81516001600160a01b03811681146200037057600080fd5b9392505050565b60805160a05160c051611cb0620003ca600039600061172b01526000818161047501528181611473015281816114d3015261154f0152600081816102cf0152818161178301526117bf0152611cb06000f3fe6080604052600436106102345760003560e01c80635eaa82471161012e578063a9059cbb116100ab578063dd62ed3e1161006f578063dd62ed3e146106bf578063e6be4a7214610705578063ea2f0b3714610725578063f2fde38b14610745578063fb235f341461076557600080fd5b8063a9059cbb1461063f578063b29ad50a1461065f578063c49b9a8014610674578063ce831ed514610694578063d2d7ad83146106a957600080fd5b806375f0a874116100f257806375f0a8741461059c57806385141a77146105bc5780638da5cb5b146105d257806395d89b41146105f0578063a457c2d71461061f57600080fd5b80635eaa82471461050f5780636b67c4df146105255780636ca60bc61461053b57806370a0823114610551578063715018a61461058757600080fd5b806339509351116101bc5780634706240211610180578063470624021461044d57806349bd5a5e146104635780634a74bb02146104975780635342acb4146104b65780635d098b38146104ef57600080fd5b806339509351146103b557806340763503146103d5578063437823ec146103eb578063444784251461040d578063461d94761461042d57600080fd5b8063220f669611610203578063220f66961461032857806323b872dd146103425780632b14ca5614610362578063313ce5671461037857806336e4ec641461039f57600080fd5b806306fdde0314610240578063095ea7b31461028d5780631694505e146102bd57806318160ddd1461030957600080fd5b3661023b57005b600080fd5b34801561024c57600080fd5b506102776040518060400160405280600b81526020016a5265736973746f7220414960a81b81525081565b60405161028491906119a8565b60405180910390f35b34801561029957600080fd5b506102ad6102a8366004611a12565b610785565b6040519015158152602001610284565b3480156102c957600080fd5b506102f17f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610284565b34801561031557600080fd5b506004545b604051908152602001610284565b34801561033457600080fd5b506010546102ad9060ff1681565b34801561034e57600080fd5b506102ad61035d366004611a3c565b61079c565b34801561036e57600080fd5b5061031a60095481565b34801561038457600080fd5b5061038d601281565b60405160ff9091168152602001610284565b3480156103ab57600080fd5b5061031a600a5481565b3480156103c157600080fd5b506102ad6103d0366004611a12565b610850565b3480156103e157600080fd5b5061031a600d5481565b3480156103f757600080fd5b5061040b610406366004611a78565b610887565b005b34801561041957600080fd5b506007546102f1906001600160a01b031681565b34801561043957600080fd5b5061040b610448366004611a9a565b610935565b34801561045957600080fd5b5061031a60085481565b34801561046f57600080fd5b506102f17f000000000000000000000000000000000000000000000000000000000000000081565b3480156104a357600080fd5b506010546102ad90610100900460ff1681565b3480156104c257600080fd5b506102ad6104d1366004611a78565b6001600160a01b031660009081526003602052604090205460ff1690565b3480156104fb57600080fd5b5061040b61050a366004611a78565b610a26565b34801561051b57600080fd5b5061031a600f5481565b34801561053157600080fd5b5061031a600b5481565b34801561054757600080fd5b5061031a600c5481565b34801561055d57600080fd5b5061031a61056c366004611a78565b6001600160a01b031660009081526001602052604090205490565b34801561059357600080fd5b5061040b610b05565b3480156105a857600080fd5b506006546102f1906001600160a01b031681565b3480156105c857600080fd5b506102f161dead81565b3480156105de57600080fd5b506000546001600160a01b03166102f1565b3480156105fc57600080fd5b50610277604051806040016040528060038152602001622a27a960e91b81525081565b34801561062b57600080fd5b506102ad61063a366004611a12565b610b19565b34801561064b57600080fd5b506102ad61065a366004611a12565b610b50565b34801561066b57600080fd5b5061040b610b5d565b34801561068057600080fd5b5061040b61068f366004611ac1565b610c24565b3480156106a057600080fd5b5061040b610ccb565b3480156106b557600080fd5b5061031a600e5481565b3480156106cb57600080fd5b5061031a6106da366004611ade565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561071157600080fd5b5061040b610720366004611a12565b610dea565b34801561073157600080fd5b5061040b610740366004611a78565b610f9e565b34801561075157600080fd5b5061040b610760366004611a78565b611034565b34801561077157600080fd5b5061040b610780366004611a78565b6110ad565b6000610792338484611185565b5060015b92915050565b6001600160a01b0383166000908152600260209081526040808320338452909152812054828110156108265760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b6108318585856112aa565b61084585336108408685611b27565b611185565b506001949350505050565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610792918590610840908690611b3a565b61088f61162a565b6001600160a01b03811660009081526003602052604090819020805460ff1916600117905551600080516020611c5b8339815191529061092a9083906040808252602e908201527f57652068617665206578636c756465642074686520666f6c6c6f77696e67207760608201526d30b63632b21034b7103332b2b99d60911b60808201526001600160a01b0391909116602082015260a00190565b60405180910390a150565b61093d61162a565b68056bc75e2d631000008110156109a65760405162461bcd60e51b815260206004820152602760248201527f596f75206e65656420746f20656e746572206d6f7265207468616e20313030206044820152663a37b5b2b7399760c91b606482015260840161081d565b600e81905560408051818152602b918101919091527f576520686176652075706461746564206d696e696d756e546f6b656e7342656660608201526a37b932a9bbb0b8103a379d60a91b6080820152602081018290527fdd970dd9b5bfe707922155b058a407655cb18288b807e2216442bca8ad83d6b59060a00161092a565b610a2e61162a565b6001600160a01b038116610a845760405162461bcd60e51b815260206004820152601860248201527f7365744d61726b6574696e6757616c6c65743a205a45524f0000000000000000604482015260640161081d565b600680546001600160a01b0319166001600160a01b038316908117909155604080518181526024918101919091527f57652068617665205570646174656420746865204d61726b6574696e6757616c6060820152633632ba1d60e11b60808201526020810191909152600080516020611c5b8339815191529060a00161092a565b610b0d61162a565b610b176000611684565b565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610792918590610840908690611b27565b60006107923384846112aa565b6010805460ff191660011790556000610b8b306001600160a01b031660009081526001602052604090205490565b9050610b96816116d4565b600b54600a544791600091610bab9190611b3a565b905080600003610bb9575060015b600081600a5484610bca9190611b4d565b610bd49190611b64565b9050610be08184611b27565b600754909350610bf9906001600160a01b031682611860565b600654610c0f906001600160a01b031684611860565b50506000600c5550506010805460ff19169055565b610c2c61162a565b801515601060019054906101000a900460ff16151503610c825760405162461bcd60e51b815260206004820152601160248201527015985b1d5948185b1c9958591e481cd95d607a1b604482015260640161081d565b601080548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061092a90831515815260200190565b610cd361162a565b60065460405147916000916001600160a01b039091169083908381818185875af1925050503d8060008114610d24576040519150601f19603f3d011682016040523d82523d6000602084013e610d29565b606091505b5050905080610d6c5760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015260640161081d565b60065460408051818152602c918101919091527f57652068617665207265636f766572207468652073746f636b2065746820667260608201526b37b69031b7b73a3930b1ba1760a11b60808201526001600160a01b039091166020820152600080516020611c5b8339815191529060a0015b60405180910390a15050565b610df261162a565b306001600160a01b03831603610e695760405162461bcd60e51b815260206004820152603660248201527f4f776e65722063616e277420636c61696d20636f6e747261637427732062616c604482015275616e6365206f6620697473206f776e20746f6b656e7360501b606482015260840161081d565b60065460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810183905260009184169063a9059cbb906044016020604051808303816000875af1158015610ebe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee29190611b86565b905080610f235760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015260640161081d565b604080518181526027818301527f57652068617665207265636f766572656420746f6b656e732066726f6d20636f606082015266373a3930b1ba1d60c91b60808201526020810184905290517fdd970dd9b5bfe707922155b058a407655cb18288b807e2216442bca8ad83d6b59181900360a00190a1505050565b610fa661162a565b6001600160a01b038116600081815260036020908152604091829020805460ff191690558151828152602f928101929092527f5765206861766520696e636c7564696e672074686520666f6c6c6f77696e672060608301526e3bb0b63632b21034b7103332b2b99d60891b6080830152810191909152600080516020611c5b8339815191529060a00161092a565b61103c61162a565b6001600160a01b0381166110a15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161081d565b6110aa81611684565b50565b6110b561162a565b6001600160a01b0381166111045760405162461bcd60e51b8152602060048201526016602482015275736574526576656e756557616c6c65743a205a45524f60501b604482015260640161081d565b600780546001600160a01b0319166001600160a01b038316908117909155604080518181526024918101919091527f57652068617665205570646174656420746865205261726b6574696e6757616c6060820152633632ba1d60e11b60808201526020810191909152600080516020611c5b8339815191529060a00161092a565b6001600160a01b0383166111e75760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161081d565b6001600160a01b0382166112485760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161081d565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b03831661130e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161081d565b6001600160a01b0382166113705760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161081d565b600081116113d25760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161081d565b6001600160a01b0383166000908152600160205260409020548111156114495760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161081d565b30600090815260016020526040812054600e546010549192908310159160ff161580156114a857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b031614155b80156114b15750815b80156114c45750601054610100900460ff165b156114d1576114d1610b5d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614801561152b57506001600160a01b03861660009081526003602052604090205460ff16155b1561154d576064846009546115409190611b4d565b61154a9190611b64565b90505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b03161480156115a757506001600160a01b03851660009081526003602052604090205460ff16155b156115c9576064846008546115bc9190611b4d565b6115c69190611b64565b90505b6115d38185611b27565b93508015611617576115e6863083611907565b80600c60008282546115f89190611b3a565b9250508190555080600d60008282546116119190611b3a565b90915550505b611622868686611907565b505050505050565b6000546001600160a01b03163314610b175760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161081d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061170957611709611ba3565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000008160018151811061175d5761175d611ba3565b60200260200101906001600160a01b031690816001600160a01b0316815250506117a8307f000000000000000000000000000000000000000000000000000000000000000084611185565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906117fd908590600090869030904290600401611bfd565b600060405180830381600087803b15801561181757600080fd5b505af115801561182b573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051610dde929190611c39565b8060000361186c575050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146118b9576040519150601f19603f3d011682016040523d82523d6000602084013e6118be565b606091505b50509050806119025760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b604482015260640161081d565b505050565b6001600160a01b0383166000908152600160205260408120805483929061192f908490611b27565b90915550506001600160a01b0382166000908152600160205260408120805483929061195c908490611b3a565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161129d91815260200190565b600060208083528351808285015260005b818110156119d5578581018301518582016040015282016119b9565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114611a0d57600080fd5b919050565b60008060408385031215611a2557600080fd5b611a2e836119f6565b946020939093013593505050565b600080600060608486031215611a5157600080fd5b611a5a846119f6565b9250611a68602085016119f6565b9150604084013590509250925092565b600060208284031215611a8a57600080fd5b611a93826119f6565b9392505050565b600060208284031215611aac57600080fd5b5035919050565b80151581146110aa57600080fd5b600060208284031215611ad357600080fd5b8135611a9381611ab3565b60008060408385031215611af157600080fd5b611afa836119f6565b9150611b08602084016119f6565b90509250929050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561079657610796611b11565b8082018082111561079657610796611b11565b808202811582820484141761079657610796611b11565b600082611b8157634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215611b9857600080fd5b8151611a9381611ab3565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b83811015611bf25781516001600160a01b031687529582019590820190600101611bcd565b509495945050505050565b85815284602082015260a060408201526000611c1c60a0830186611bb9565b6001600160a01b0394909416606083015250608001529392505050565b828152604060208201526000611c526040830184611bb9565b94935050505056fe025dbd6ad989fe1a64db7dc049e29723ff9d35a97d84ae9aab96196f00ec1a00a2646970667358221220c262752b6421380ff774b0f0b79094dfab91819af1605b5f8a144ec72f9b33df64736f6c63430008130033
Deployed Bytecode
0x6080604052600436106102345760003560e01c80635eaa82471161012e578063a9059cbb116100ab578063dd62ed3e1161006f578063dd62ed3e146106bf578063e6be4a7214610705578063ea2f0b3714610725578063f2fde38b14610745578063fb235f341461076557600080fd5b8063a9059cbb1461063f578063b29ad50a1461065f578063c49b9a8014610674578063ce831ed514610694578063d2d7ad83146106a957600080fd5b806375f0a874116100f257806375f0a8741461059c57806385141a77146105bc5780638da5cb5b146105d257806395d89b41146105f0578063a457c2d71461061f57600080fd5b80635eaa82471461050f5780636b67c4df146105255780636ca60bc61461053b57806370a0823114610551578063715018a61461058757600080fd5b806339509351116101bc5780634706240211610180578063470624021461044d57806349bd5a5e146104635780634a74bb02146104975780635342acb4146104b65780635d098b38146104ef57600080fd5b806339509351146103b557806340763503146103d5578063437823ec146103eb578063444784251461040d578063461d94761461042d57600080fd5b8063220f669611610203578063220f66961461032857806323b872dd146103425780632b14ca5614610362578063313ce5671461037857806336e4ec641461039f57600080fd5b806306fdde0314610240578063095ea7b31461028d5780631694505e146102bd57806318160ddd1461030957600080fd5b3661023b57005b600080fd5b34801561024c57600080fd5b506102776040518060400160405280600b81526020016a5265736973746f7220414960a81b81525081565b60405161028491906119a8565b60405180910390f35b34801561029957600080fd5b506102ad6102a8366004611a12565b610785565b6040519015158152602001610284565b3480156102c957600080fd5b506102f17f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610284565b34801561031557600080fd5b506004545b604051908152602001610284565b34801561033457600080fd5b506010546102ad9060ff1681565b34801561034e57600080fd5b506102ad61035d366004611a3c565b61079c565b34801561036e57600080fd5b5061031a60095481565b34801561038457600080fd5b5061038d601281565b60405160ff9091168152602001610284565b3480156103ab57600080fd5b5061031a600a5481565b3480156103c157600080fd5b506102ad6103d0366004611a12565b610850565b3480156103e157600080fd5b5061031a600d5481565b3480156103f757600080fd5b5061040b610406366004611a78565b610887565b005b34801561041957600080fd5b506007546102f1906001600160a01b031681565b34801561043957600080fd5b5061040b610448366004611a9a565b610935565b34801561045957600080fd5b5061031a60085481565b34801561046f57600080fd5b506102f17f00000000000000000000000094749e8ae30bc2aa5e127f868409e871f310c10b81565b3480156104a357600080fd5b506010546102ad90610100900460ff1681565b3480156104c257600080fd5b506102ad6104d1366004611a78565b6001600160a01b031660009081526003602052604090205460ff1690565b3480156104fb57600080fd5b5061040b61050a366004611a78565b610a26565b34801561051b57600080fd5b5061031a600f5481565b34801561053157600080fd5b5061031a600b5481565b34801561054757600080fd5b5061031a600c5481565b34801561055d57600080fd5b5061031a61056c366004611a78565b6001600160a01b031660009081526001602052604090205490565b34801561059357600080fd5b5061040b610b05565b3480156105a857600080fd5b506006546102f1906001600160a01b031681565b3480156105c857600080fd5b506102f161dead81565b3480156105de57600080fd5b506000546001600160a01b03166102f1565b3480156105fc57600080fd5b50610277604051806040016040528060038152602001622a27a960e91b81525081565b34801561062b57600080fd5b506102ad61063a366004611a12565b610b19565b34801561064b57600080fd5b506102ad61065a366004611a12565b610b50565b34801561066b57600080fd5b5061040b610b5d565b34801561068057600080fd5b5061040b61068f366004611ac1565b610c24565b3480156106a057600080fd5b5061040b610ccb565b3480156106b557600080fd5b5061031a600e5481565b3480156106cb57600080fd5b5061031a6106da366004611ade565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561071157600080fd5b5061040b610720366004611a12565b610dea565b34801561073157600080fd5b5061040b610740366004611a78565b610f9e565b34801561075157600080fd5b5061040b610760366004611a78565b611034565b34801561077157600080fd5b5061040b610780366004611a78565b6110ad565b6000610792338484611185565b5060015b92915050565b6001600160a01b0383166000908152600260209081526040808320338452909152812054828110156108265760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b6108318585856112aa565b61084585336108408685611b27565b611185565b506001949350505050565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610792918590610840908690611b3a565b61088f61162a565b6001600160a01b03811660009081526003602052604090819020805460ff1916600117905551600080516020611c5b8339815191529061092a9083906040808252602e908201527f57652068617665206578636c756465642074686520666f6c6c6f77696e67207760608201526d30b63632b21034b7103332b2b99d60911b60808201526001600160a01b0391909116602082015260a00190565b60405180910390a150565b61093d61162a565b68056bc75e2d631000008110156109a65760405162461bcd60e51b815260206004820152602760248201527f596f75206e65656420746f20656e746572206d6f7265207468616e20313030206044820152663a37b5b2b7399760c91b606482015260840161081d565b600e81905560408051818152602b918101919091527f576520686176652075706461746564206d696e696d756e546f6b656e7342656660608201526a37b932a9bbb0b8103a379d60a91b6080820152602081018290527fdd970dd9b5bfe707922155b058a407655cb18288b807e2216442bca8ad83d6b59060a00161092a565b610a2e61162a565b6001600160a01b038116610a845760405162461bcd60e51b815260206004820152601860248201527f7365744d61726b6574696e6757616c6c65743a205a45524f0000000000000000604482015260640161081d565b600680546001600160a01b0319166001600160a01b038316908117909155604080518181526024918101919091527f57652068617665205570646174656420746865204d61726b6574696e6757616c6060820152633632ba1d60e11b60808201526020810191909152600080516020611c5b8339815191529060a00161092a565b610b0d61162a565b610b176000611684565b565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610792918590610840908690611b27565b60006107923384846112aa565b6010805460ff191660011790556000610b8b306001600160a01b031660009081526001602052604090205490565b9050610b96816116d4565b600b54600a544791600091610bab9190611b3a565b905080600003610bb9575060015b600081600a5484610bca9190611b4d565b610bd49190611b64565b9050610be08184611b27565b600754909350610bf9906001600160a01b031682611860565b600654610c0f906001600160a01b031684611860565b50506000600c5550506010805460ff19169055565b610c2c61162a565b801515601060019054906101000a900460ff16151503610c825760405162461bcd60e51b815260206004820152601160248201527015985b1d5948185b1c9958591e481cd95d607a1b604482015260640161081d565b601080548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061092a90831515815260200190565b610cd361162a565b60065460405147916000916001600160a01b039091169083908381818185875af1925050503d8060008114610d24576040519150601f19603f3d011682016040523d82523d6000602084013e610d29565b606091505b5050905080610d6c5760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015260640161081d565b60065460408051818152602c918101919091527f57652068617665207265636f766572207468652073746f636b2065746820667260608201526b37b69031b7b73a3930b1ba1760a11b60808201526001600160a01b039091166020820152600080516020611c5b8339815191529060a0015b60405180910390a15050565b610df261162a565b306001600160a01b03831603610e695760405162461bcd60e51b815260206004820152603660248201527f4f776e65722063616e277420636c61696d20636f6e747261637427732062616c604482015275616e6365206f6620697473206f776e20746f6b656e7360501b606482015260840161081d565b60065460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810183905260009184169063a9059cbb906044016020604051808303816000875af1158015610ebe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee29190611b86565b905080610f235760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015260640161081d565b604080518181526027818301527f57652068617665207265636f766572656420746f6b656e732066726f6d20636f606082015266373a3930b1ba1d60c91b60808201526020810184905290517fdd970dd9b5bfe707922155b058a407655cb18288b807e2216442bca8ad83d6b59181900360a00190a1505050565b610fa661162a565b6001600160a01b038116600081815260036020908152604091829020805460ff191690558151828152602f928101929092527f5765206861766520696e636c7564696e672074686520666f6c6c6f77696e672060608301526e3bb0b63632b21034b7103332b2b99d60891b6080830152810191909152600080516020611c5b8339815191529060a00161092a565b61103c61162a565b6001600160a01b0381166110a15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161081d565b6110aa81611684565b50565b6110b561162a565b6001600160a01b0381166111045760405162461bcd60e51b8152602060048201526016602482015275736574526576656e756557616c6c65743a205a45524f60501b604482015260640161081d565b600780546001600160a01b0319166001600160a01b038316908117909155604080518181526024918101919091527f57652068617665205570646174656420746865205261726b6574696e6757616c6060820152633632ba1d60e11b60808201526020810191909152600080516020611c5b8339815191529060a00161092a565b6001600160a01b0383166111e75760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161081d565b6001600160a01b0382166112485760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161081d565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b03831661130e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161081d565b6001600160a01b0382166113705760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161081d565b600081116113d25760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161081d565b6001600160a01b0383166000908152600160205260409020548111156114495760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161081d565b30600090815260016020526040812054600e546010549192908310159160ff161580156114a857507f00000000000000000000000094749e8ae30bc2aa5e127f868409e871f310c10b6001600160a01b0316866001600160a01b031614155b80156114b15750815b80156114c45750601054610100900460ff165b156114d1576114d1610b5d565b7f00000000000000000000000094749e8ae30bc2aa5e127f868409e871f310c10b6001600160a01b0316856001600160a01b031614801561152b57506001600160a01b03861660009081526003602052604090205460ff16155b1561154d576064846009546115409190611b4d565b61154a9190611b64565b90505b7f00000000000000000000000094749e8ae30bc2aa5e127f868409e871f310c10b6001600160a01b0316866001600160a01b03161480156115a757506001600160a01b03851660009081526003602052604090205460ff16155b156115c9576064846008546115bc9190611b4d565b6115c69190611b64565b90505b6115d38185611b27565b93508015611617576115e6863083611907565b80600c60008282546115f89190611b3a565b9250508190555080600d60008282546116119190611b3a565b90915550505b611622868686611907565b505050505050565b6000546001600160a01b03163314610b175760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161081d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061170957611709611ba3565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28160018151811061175d5761175d611ba3565b60200260200101906001600160a01b031690816001600160a01b0316815250506117a8307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611185565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906117fd908590600090869030904290600401611bfd565b600060405180830381600087803b15801561181757600080fd5b505af115801561182b573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051610dde929190611c39565b8060000361186c575050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146118b9576040519150601f19603f3d011682016040523d82523d6000602084013e6118be565b606091505b50509050806119025760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b604482015260640161081d565b505050565b6001600160a01b0383166000908152600160205260408120805483929061192f908490611b27565b90915550506001600160a01b0382166000908152600160205260408120805483929061195c908490611b3a565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161129d91815260200190565b600060208083528351808285015260005b818110156119d5578581018301518582016040015282016119b9565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114611a0d57600080fd5b919050565b60008060408385031215611a2557600080fd5b611a2e836119f6565b946020939093013593505050565b600080600060608486031215611a5157600080fd5b611a5a846119f6565b9250611a68602085016119f6565b9150604084013590509250925092565b600060208284031215611a8a57600080fd5b611a93826119f6565b9392505050565b600060208284031215611aac57600080fd5b5035919050565b80151581146110aa57600080fd5b600060208284031215611ad357600080fd5b8135611a9381611ab3565b60008060408385031215611af157600080fd5b611afa836119f6565b9150611b08602084016119f6565b90509250929050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561079657610796611b11565b8082018082111561079657610796611b11565b808202811582820484141761079657610796611b11565b600082611b8157634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215611b9857600080fd5b8151611a9381611ab3565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b83811015611bf25781516001600160a01b031687529582019590820190600101611bcd565b509495945050505050565b85815284602082015260a060408201526000611c1c60a0830186611bb9565b6001600160a01b0394909416606083015250608001529392505050565b828152604060208201526000611c526040830184611bb9565b94935050505056fe025dbd6ad989fe1a64db7dc049e29723ff9d35a97d84ae9aab96196f00ec1a00a2646970667358221220c262752b6421380ff774b0f0b79094dfab91819af1605b5f8a144ec72f9b33df64736f6c63430008130033
Deployed Bytecode Sourcemap
23036:12944:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23924:43;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;23924:43:0;;;;;;;;;;;;:::i;:::-;;;;;;;;26811:186;;;;;;;;;;-1:-1:-1;26811:186:0;;;;;:::i;:::-;;:::i;:::-;;;1169:14:1;;1162:22;1144:41;;1132:2;1117:18;26811:186:0;1004:187:1;24908:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1387:32:1;;;1369:51;;1357:2;1342:18;24908:51:0;1196:230:1;26081:95:0;;;;;;;;;;-1:-1:-1;26161:7:0;;26081:95;;;1577:25:1;;;1565:2;1550:18;26081:95:0;1431:177:1;25098:28:0;;;;;;;;;;-1:-1:-1;25098:28:0;;;;;;;;27042:478;;;;;;;;;;-1:-1:-1;27042:478:0;;;;;:::i;:::-;;:::i;24516:26::-;;;;;;;;;;;;;;;;24018:35;;;;;;;;;;;;24051:2;24018:35;;;;;2118:4:1;2106:17;;;2088:36;;2076:2;2061:18;24018:35:0;1946:184:1;24549:26:0;;;;;;;;;;;;;;;;27570:290;;;;;;;;;;-1:-1:-1;27570:290:0;;;;;:::i;:::-;;:::i;24671:48::-;;;;;;;;;;;;;;;;32007:233;;;;;;;;;;-1:-1:-1;32007:233:0;;;;;:::i;:::-;;:::i;:::-;;24220:99;;;;;;;;;;-1:-1:-1;24220:99:0;;;;-1:-1:-1;;;;;24220:99:0;;;32562:428;;;;;;;;;;-1:-1:-1;32562:428:0;;;;;:::i;:::-;;:::i;24485:22::-;;;;;;;;;;;;;;;;24966:38;;;;;;;;;;;;;;;25133:40;;;;;;;;;;-1:-1:-1;25133:40:0;;;;;;;;;;;31793:126;;;;;;;;;;-1:-1:-1;31793:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;31884:27:0;31860:4;31884:27;;;:18;:27;;;;;;;;;31793:126;33288:294;;;;;;;;;;-1:-1:-1;33288:294:0;;;;;:::i;:::-;;:::i;24834:29::-;;;;;;;;;;;;;;;;24582:28;;;;;;;;;;;;;;;;24619:43;;;;;;;;;;;;;;;;26184:117;;;;;;;;;;-1:-1:-1;26184:117:0;;;;;:::i;:::-;-1:-1:-1;;;;;26277:16:0;26250:7;26277:16;;;:7;:16;;;;;;;26184:117;13156:103;;;;;;;;;;;;;:::i;24112:101::-;;;;;;;;;;-1:-1:-1;24112:101:0;;;;-1:-1:-1;;;;;24112:101:0;;;24363:88;;;;;;;;;;;;24409:42;24363:88;;12508:87;;;;;;;;;;-1:-1:-1;12554:7:0;12581:6;-1:-1:-1;;;;;12581:6:0;12508:87;;23974:37;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;23974:37:0;;;;;27910:300;;;;;;;;;;-1:-1:-1;27910:300:0;;;;;:::i;:::-;;:::i;26351:192::-;;;;;;;;;;-1:-1:-1;26351:192:0;;;;;:::i;:::-;;:::i;30184:566::-;;;;;;;;;;;;;:::i;32998:247::-;;;;;;;;;;-1:-1:-1;32998:247:0;;;;;:::i;:::-;;:::i;35076:359::-;;;;;;;;;;;;;:::i;24728:53::-;;;;;;;;;;;;;;;;26593:170;;;;;;;;;;-1:-1:-1;26593:170:0;;;;;:::i;:::-;-1:-1:-1;;;;;26727:19:0;;;26700:7;26727:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;26593:170;35512:465;;;;;;;;;;-1:-1:-1;35512:465:0;;;;;:::i;:::-;;:::i;32284:233::-;;;;;;;;;;-1:-1:-1;32284:233:0;;;;;:::i;:::-;;:::i;13414:238::-;;;;;;;;;;-1:-1:-1;13414:238:0;;;;;:::i;:::-;;:::i;33620:280::-;;;;;;;;;;-1:-1:-1;33620:280:0;;;;;:::i;:::-;;:::i;26811:186::-;26911:4;26928:39;319:10;26951:7;26960:6;26928:8;:39::i;:::-;-1:-1:-1;26985:4:0;26811:186;;;;;:::o;27042:478::-;-1:-1:-1;;;;;27215:19:0;;27174:4;27215:19;;;:11;:19;;;;;;;;319:10;27215:33;;;;;;;;27281:26;;;;27259:116;;;;-1:-1:-1;;;27259:116:0;;3779:2:1;27259:116:0;;;3761:21:1;3818:2;3798:18;;;3791:30;3857:34;3837:18;;;3830:62;-1:-1:-1;;;3908:18:1;;;3901:38;3956:19;;27259:116:0;;;;;;;;;27386:36;27396:6;27404:9;27415:6;27386:9;:36::i;:::-;27433:57;27442:6;319:10;27464:25;27483:6;27464:16;:25;:::i;:::-;27433:8;:57::i;:::-;-1:-1:-1;27508:4:0;;27042:478;-1:-1:-1;;;;27042:478:0:o;27570:290::-;319:10;27683:4;27772:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;27772:34:0;;;;;;;;;;27683:4;;27700:130;;27750:7;;27772:47;;27809:10;;27772:47;:::i;32007:233::-;12394:13;:11;:13::i;:::-;-1:-1:-1;;;;;32078:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;:34;;-1:-1:-1;;32078:34:0::1;32108:4;32078:34;::::0;;32128:104;-1:-1:-1;;;;;;;;;;;32128:104:0;::::1;::::0;32097:7;;4611:2:1;4593:21;;;4650:2;4630:18;;;4623:30;4689:34;4684:2;4669:18;;4662:62;-1:-1:-1;;;4755:3:1;4740:19;;4733:45;-1:-1:-1;;;;;4852:32:1;;;;4845:4;4830:20;;4823:62;4810:3;4795:19;;4381:510;32128:104:0::1;;;;;;;;32007:233:::0;:::o;32562:428::-;12394:13;:11;:13::i;:::-;32717:9:::1;32689:24;:37;;32667:126;;;::::0;-1:-1:-1;;;32667:126:0;;5098:2:1;32667:126:0::1;::::0;::::1;5080:21:1::0;5137:2;5117:18;;;5110:30;5176:34;5156:18;;;5149:62;-1:-1:-1;;;5227:18:1;;;5220:37;5274:19;;32667:126:0::1;4896:403:1::0;32667:126:0::1;32804:23;:50:::0;;;32870:112:::1;::::0;;5516:21:1;;;5573:2;5553:18;;;5546:30;;;;5612:34;5607:2;5592:18;;5585:62;-1:-1:-1;;;5678:3:1;5663:19;;5656:42;5765:4;5750:20;;5743:36;;;32870:112:0::1;::::0;5730:3:1;5715:19;32870:112:0::1;5304:481:1::0;33288:294:0;12394:13;:11;:13::i;:::-;-1:-1:-1;;;;;33380:30:0;::::1;33372:67;;;::::0;-1:-1:-1;;;33372:67:0;;5992:2:1;33372:67:0::1;::::0;::::1;5974:21:1::0;6031:2;6011:18;;;6004:30;6070:26;6050:18;;;6043:54;6114:18;;33372:67:0::1;5790:348:1::0;33372:67:0::1;33450:15;:43:::0;;-1:-1:-1;;;;;;33450:43:0::1;-1:-1:-1::0;;;;;33450:43:0;::::1;::::0;;::::1;::::0;;;33509:65:::1;::::0;;6363:21:1;;;6420:2;6400:18;;;6393:30;;;;6459:34;6454:2;6439:18;;6432:62;-1:-1:-1;;;6525:3:1;6510:19;;6503:35;6605:4;6590:20;;6583:62;;;;-1:-1:-1;;;;;;;;;;;33509:65:0;6570:3:1;6555:19;33509:65:0::1;6143:508:1::0;13156:103:0;12394:13;:11;:13::i;:::-;13221:30:::1;13248:1;13221:18;:30::i;:::-;13156:103::o:0;27910:300::-;319:10;28028:4;28117:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;28117:34:0;;;;;;;;;;28028:4;;28045:135;;28095:7;;28117:52;;28154:15;;28117:52;:::i;26351:192::-;26454:4;26471:42;319:10;26495:9;26506:6;26471:9;:42::i;30184:566::-;25216:16;:23;;-1:-1:-1;;25216:23:0;25235:4;25216:23;;;:16;30262:24:::1;30280:4;-1:-1:-1::0;;;;;26277:16:0;26250:7;26277:16;;;:7;:16;;;;;;;26184:117;30262:24:::1;30240:46;;30297:29;30314:11;30297:16;:29::i;:::-;30417:12;::::0;30404:10:::1;::::0;30355:21:::1;::::0;30337:15:::1;::::0;30404:25:::1;::::0;30417:12;30404:25:::1;:::i;:::-;30387:42;;30444:9;30457:1;30444:14:::0;30440:33:::1;;-1:-1:-1::0;30472:1:0::1;30440:33;30484:18;30533:9;30519:10;;30506;:23;;;;:::i;:::-;30505:37;;;;:::i;:::-;30484:58:::0;-1:-1:-1;30553:27:0::1;30484:58:::0;30553:27;::::1;:::i;:::-;30612:13;::::0;30553:27;;-1:-1:-1;30591:50:0::1;::::0;-1:-1:-1;;;;;30612:13:0::1;30627::::0;30591:20:::1;:50::i;:::-;30673:15;::::0;30652:49:::1;::::0;-1:-1:-1;;;;;30673:15:0::1;30690:10:::0;30652:20:::1;:49::i;:::-;-1:-1:-1::0;;30741:1:0::1;30714:24;:28:::0;-1:-1:-1;;25262:16:0;:24;;-1:-1:-1;;25262:24:0;;;30184:566::o;32998:247::-;12394:13;:11;:13::i;:::-;33110:8:::1;33085:33;;:21;;;;;;;;;;;:33;;::::0;33077:63:::1;;;::::0;-1:-1:-1;;;33077:63:0;;7253:2:1;33077:63:0::1;::::0;::::1;7235:21:1::0;7292:2;7272:18;;;7265:30;-1:-1:-1;;;7311:18:1;;;7304:47;7368:18;;33077:63:0::1;7051:341:1::0;33077:63:0::1;33151:21;:32:::0;;;::::1;;;;-1:-1:-1::0;;33151:32:0;;::::1;;::::0;;33199:38:::1;::::0;::::1;::::0;::::1;::::0;33175:8;1169:14:1;1162:22;1144:41;;1132:2;1117:18;;1004:187;35076:359:0;12394:13;:11;:13::i;:::-;35214:15:::1;::::0;35206:52:::1;::::0;35158:21:::1;::::0;35140:15:::1;::::0;-1:-1:-1;;;;;35214:15:0;;::::1;::::0;35158:21;;35140:15;35206:52;35140:15;35206:52;35158:21;35214:15;35206:52:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35190:68;;;35277:4;35269:32;;;::::0;-1:-1:-1;;;35269:32:0;;7809:2:1;35269:32:0::1;::::0;::::1;7791:21:1::0;7848:2;7828:18;;;7821:30;-1:-1:-1;;;7867:18:1;;;7860:45;7922:18;;35269:32:0::1;7607:339:1::0;35269:32:0::1;35401:15;::::0;35317:110:::1;::::0;;8171:21:1;;;8228:2;8208:18;;;8201:30;;;;8267:34;8262:2;8247:18;;8240:62;-1:-1:-1;;;8333:3:1;8318:19;;8311:43;-1:-1:-1;;;;;35401:15:0;;::::1;8421:4:1::0;8406:20;;8399:62;-1:-1:-1;;;;;;;;;;;35317:110:0;8386:3:1;8371:19;35317:110:0::1;;;;;;;;35129:306;;35076:359::o:0;35512:465::-;12394:13;:11;:13::i;:::-;35689:4:::1;-1:-1:-1::0;;;;;35664:30:0;::::1;::::0;35642:134:::1;;;::::0;-1:-1:-1;;;35642:134:0;;8674:2:1;35642:134:0::1;::::0;::::1;8656:21:1::0;8713:2;8693:18;;;8686:30;8752:34;8732:18;;;8725:62;-1:-1:-1;;;8803:18:1;;;8796:52;8865:19;;35642:134:0::1;8472:418:1::0;35642:134:0::1;35830:15;::::0;35799:56:::1;::::0;-1:-1:-1;;;35799:56:0;;-1:-1:-1;;;;;35830:15:0;;::::1;35799:56;::::0;::::1;9077:51:1::0;9144:18;;;9137:34;;;35787:9:0::1;::::0;35799:30;::::1;::::0;::::1;::::0;9050:18:1;;35799:56:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35787:68;;35874:4;35866:32;;;::::0;-1:-1:-1;;;35866:32:0;;7809:2:1;35866:32:0::1;::::0;::::1;7791:21:1::0;7848:2;7828:18;;;7821:30;-1:-1:-1;;;7867:18:1;;;7860:45;7922:18;;35866:32:0::1;7607:339:1::0;35866:32:0::1;35914:55;::::0;;9644:21:1;;;9701:2;9681:18;;;9674:30;9740:34;9735:2;9720:18;;9713:62;-1:-1:-1;;;9806:3:1;9791:19;;9784:38;9889:4;9874:20;;9867:36;;;35914:55:0;;::::1;::::0;;;;9854:3:1;35914:55:0;;::::1;35631:346;35512:465:::0;;:::o;32284:233::-;12394:13;:11;:13::i;:::-;-1:-1:-1;;;;;32353:27:0;::::1;32383:5;32353:27:::0;;;:18:::1;:27;::::0;;;;;;;;:35;;-1:-1:-1;;32353:35:0::1;::::0;;32404:105;;10126:21:1;;;10183:2;10163:18;;;10156:30;;;;10222:34;10217:2;10202:18;;10195:62;-1:-1:-1;;;10288:3:1;10273:19;;10266:46;10364:20;;10357:62;;;;-1:-1:-1;;;;;;;;;;;32404:105:0;10344:3:1;10329:19;32404:105:0::1;9914:511:1::0;13414:238:0;12394:13;:11;:13::i;:::-;-1:-1:-1;;;;;13517:22:0;::::1;13495:110;;;::::0;-1:-1:-1;;;13495:110:0;;10632:2:1;13495:110:0::1;::::0;::::1;10614:21:1::0;10671:2;10651:18;;;10644:30;10710:34;10690:18;;;10683:62;-1:-1:-1;;;10761:18:1;;;10754:36;10807:19;;13495:110:0::1;10430:402:1::0;13495:110:0::1;13616:28;13635:8;13616:18;:28::i;:::-;13414:238:::0;:::o;33620:280::-;12394:13;:11;:13::i;:::-;-1:-1:-1;;;;;33708:28:0;::::1;33700:63;;;::::0;-1:-1:-1;;;33700:63:0;;11039:2:1;33700:63:0::1;::::0;::::1;11021:21:1::0;11078:2;11058:18;;;11051:30;-1:-1:-1;;;11097:18:1;;;11090:52;11159:18;;33700:63:0::1;10837:346:1::0;33700:63:0::1;33774:13;:39:::0;;-1:-1:-1;;;;;;33774:39:0::1;-1:-1:-1::0;;;;;33774:39:0;::::1;::::0;;::::1;::::0;;;33829:63:::1;::::0;;11408:21:1;;;11465:2;11445:18;;;11438:30;;;;11504:34;11499:2;11484:18;;11477:62;-1:-1:-1;;;11570:3:1;11555:19;;11548:35;11650:4;11635:20;;11628:62;;;;-1:-1:-1;;;;;;;;;;;33829:63:0;11615:3:1;11600:19;33829:63:0::1;11188:508:1::0;28242:341:0;-1:-1:-1;;;;;28336:20:0;;28328:69;;;;-1:-1:-1;;;28328:69:0;;11903:2:1;28328:69:0;;;11885:21:1;11942:2;11922:18;;;11915:30;11981:34;11961:18;;;11954:62;-1:-1:-1;;;12032:18:1;;;12025:34;12076:19;;28328:69:0;11701:400:1;28328:69:0;-1:-1:-1;;;;;28416:21:0;;28408:68;;;;-1:-1:-1;;;28408:68:0;;12308:2:1;28408:68:0;;;12290:21:1;12347:2;12327:18;;;12320:30;12386:34;12366:18;;;12359:62;-1:-1:-1;;;12437:18:1;;;12430:32;12479:19;;28408:68:0;12106:398:1;28408:68:0;-1:-1:-1;;;;;28489:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;28542:33;;1577:25:1;;;28542:33:0;;1550:18:1;28542:33:0;;;;;;;;28242:341;;;:::o;28716:1460::-;-1:-1:-1;;;;;28804:18:0;;28796:68;;;;-1:-1:-1;;;28796:68:0;;12711:2:1;28796:68:0;;;12693:21:1;12750:2;12730:18;;;12723:30;12789:34;12769:18;;;12762:62;-1:-1:-1;;;12840:18:1;;;12833:35;12885:19;;28796:68:0;12509:401:1;28796:68:0;-1:-1:-1;;;;;28883:16:0;;28875:64;;;;-1:-1:-1;;;28875:64:0;;13117:2:1;28875:64:0;;;13099:21:1;13156:2;13136:18;;;13129:30;13195:34;13175:18;;;13168:62;-1:-1:-1;;;13246:18:1;;;13239:33;13289:19;;28875:64:0;12915:399:1;28875:64:0;28967:1;28958:6;:10;28950:64;;;;-1:-1:-1;;;28950:64:0;;13521:2:1;28950:64:0;;;13503:21:1;13560:2;13540:18;;;13533:30;13599:34;13579:18;;;13572:62;-1:-1:-1;;;13650:18:1;;;13643:39;13699:19;;28950:64:0;13319:405:1;28950:64:0;-1:-1:-1;;;;;29047:13:0;;;;;;:7;:13;;;;;;:23;-1:-1:-1;29047:23:0;29025:111;;;;-1:-1:-1;;;29025:111:0;;13931:2:1;29025:111:0;;;13913:21:1;13970:2;13950:18;;;13943:30;14009:34;13989:18;;;13982:62;-1:-1:-1;;;14060:18:1;;;14053:36;14106:19;;29025:111:0;13729:402:1;29025:111:0;29242:4;29193:28;26277:16;;;:7;:16;;;;;;29327:23;;29487:16;;26277;;29290:60;;;;;29487:16;;29486:17;:55;;;;;29528:13;-1:-1:-1;;;;;29520:21:0;:4;-1:-1:-1;;;;;29520:21:0;;;29486:55;:95;;;;;29558:23;29486:95;:133;;;;-1:-1:-1;29598:21:0;;;;;;;29486:133;29468:206;;;29646:16;:14;:16::i;:::-;29694:13;-1:-1:-1;;;;;29688:19:0;:2;-1:-1:-1;;;;;29688:19:0;;:48;;;;-1:-1:-1;;;;;;29712:24:0;;;;;;:18;:24;;;;;;;;29711:25;29688:48;29684:111;;;29780:3;29770:6;29760:7;;:16;;;;:::i;:::-;29759:24;;;;:::i;:::-;29753:30;;29684:111;29817:13;-1:-1:-1;;;;;29809:21:0;:4;-1:-1:-1;;;;;29809:21:0;;:48;;;;-1:-1:-1;;;;;;29835:22:0;;;;;;:18;:22;;;;;;;;29834:23;29809:48;29805:110;;;29900:3;29890:6;29881;;:15;;;;:::i;:::-;29880:23;;;;:::i;:::-;29874:29;;29805:110;29925:13;29935:3;29925:13;;:::i;:::-;;-1:-1:-1;29953:7:0;;29949:177;;29977:40;29992:4;30006;30013:3;29977:14;:40::i;:::-;30060:3;30032:24;;:31;;;;;;;:::i;:::-;;;;;;;;30111:3;30078:29;;:36;;;;;;;:::i;:::-;;;;-1:-1:-1;;29949:177:0;30136:32;30151:4;30157:2;30161:6;30136:14;:32::i;:::-;28785:1391;;;28716:1460;;;:::o;12673:132::-;12554:7;12581:6;-1:-1:-1;;;;;12581:6:0;319:10;12737:23;12729:68;;;;-1:-1:-1;;;12729:68:0;;14338:2:1;12729:68:0;;;14320:21:1;;;14357:18;;;14350:30;14416:34;14396:18;;;14389:62;14468:18;;12729:68:0;14136:356:1;13812:191:0;13886:16;13905:6;;-1:-1:-1;;;;;13922:17:0;;;-1:-1:-1;;;;;;13922:17:0;;;;;;13955:40;;13905:6;;;;;;;13955:40;;13886:16;13955:40;13875:128;13812:191;:::o;30758:638::-;30908:16;;;30922:1;30908:16;;;;;;;;30884:21;;30908:16;;;;;;;;;;-1:-1:-1;30908:16:0;30884:40;;30953:4;30935;30940:1;30935:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;30935:23:0;;;-1:-1:-1;;;;;30935:23:0;;;;;30979:4;30969;30974:1;30969:7;;;;;;;;:::i;:::-;;;;;;:14;-1:-1:-1;;;;;30969:14:0;;;-1:-1:-1;;;;;30969:14:0;;;;;30994:62;31011:4;31026:15;31044:11;30994:8;:62::i;:::-;31095:240;;-1:-1:-1;;;31095:240:0;;-1:-1:-1;;;;;31095:15:0;:66;;;;:240;;31176:11;;31202:1;;31246:4;;31273;;31309:15;;31095:240;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31353:35;31370:11;31383:4;31353:35;;;;;;;:::i;33912:252::-;34033:6;34043:1;34033:11;34029:24;;33912:252;;:::o;34029:24::-;34064:9;34079;-1:-1:-1;;;;;34079:14:0;34101:6;34079:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34063:49;;;34131:4;34123:33;;;;-1:-1:-1;;;34123:33:0;;16353:2:1;34123:33:0;;;16335:21:1;16392:2;16372:18;;;16365:30;-1:-1:-1;;;16411:18:1;;;16404:46;16467:18;;34123:33:0;16151:340:1;34123:33:0;34018:146;33912:252;;:::o;31532:253::-;-1:-1:-1;;;;;31660:15:0;;;;;;:7;:15;;;;;:25;;31679:6;;31660:15;:25;;31679:6;;31660:25;:::i;:::-;;;;-1:-1:-1;;;;;;;31696:18:0;;;;;;:7;:18;;;;;:28;;31718:6;;31696:18;:28;;31718:6;;31696:28;:::i;:::-;;;;;;;;31759:9;-1:-1:-1;;;;;31742:35:0;31751:6;-1:-1:-1;;;;;31742:35:0;;31770:6;31742:35;;;;1577:25:1;;1565:2;1550:18;;1431: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;1613:328::-;1690:6;1698;1706;1759:2;1747:9;1738:7;1734:23;1730:32;1727:52;;;1775:1;1772;1765:12;1727:52;1798:29;1817:9;1798:29;:::i;:::-;1788:39;;1846:38;1880:2;1869:9;1865:18;1846:38;:::i;:::-;1836:48;;1931:2;1920:9;1916:18;1903:32;1893:42;;1613:328;;;;;:::o;2135:186::-;2194:6;2247:2;2235:9;2226:7;2222:23;2218:32;2215:52;;;2263:1;2260;2253:12;2215:52;2286:29;2305:9;2286:29;:::i;:::-;2276:39;2135:186;-1:-1:-1;;;2135:186:1:o;2550:180::-;2609:6;2662:2;2650:9;2641:7;2637:23;2633:32;2630:52;;;2678:1;2675;2668:12;2630:52;-1:-1:-1;2701:23:1;;2550:180;-1:-1:-1;2550:180:1:o;2943:118::-;3029:5;3022:13;3015:21;3008:5;3005:32;2995:60;;3051:1;3048;3041:12;3066:241;3122:6;3175:2;3163:9;3154:7;3150:23;3146:32;3143:52;;;3191:1;3188;3181:12;3143:52;3230:9;3217:23;3249:28;3271:5;3249:28;:::i;3312:260::-;3380:6;3388;3441:2;3429:9;3420:7;3416:23;3412:32;3409:52;;;3457:1;3454;3447:12;3409:52;3480:29;3499:9;3480:29;:::i;:::-;3470:39;;3528:38;3562:2;3551:9;3547:18;3528:38;:::i;:::-;3518:48;;3312:260;;;;;:::o;3986:127::-;4047:10;4042:3;4038:20;4035:1;4028:31;4078:4;4075:1;4068:15;4102:4;4099:1;4092:15;4118:128;4185:9;;;4206:11;;;4203:37;;;4220:18;;:::i;4251:125::-;4316:9;;;4337:10;;;4334:36;;;4350:18;;:::i;6656:168::-;6729:9;;;6760;;6777:15;;;6771:22;;6757:37;6747:71;;6798:18;;:::i;6829:217::-;6869:1;6895;6885:132;;6939:10;6934:3;6930:20;6927:1;6920:31;6974:4;6971:1;6964:15;7002:4;6999:1;6992:15;6885:132;-1:-1:-1;7031:9:1;;6829:217::o;9182:245::-;9249:6;9302:2;9290:9;9281:7;9277:23;9273:32;9270:52;;;9318:1;9315;9308:12;9270:52;9350:9;9344:16;9369:28;9391:5;9369:28;:::i;14629:127::-;14690:10;14685:3;14681:20;14678:1;14671:31;14721:4;14718:1;14711:15;14745:4;14742:1;14735:15;14761:461;14814:3;14852:5;14846:12;14879:6;14874:3;14867:19;14905:4;14934:2;14929:3;14925:12;14918:19;;14971:2;14964:5;14960:14;14992:1;15002:195;15016:6;15013:1;15010:13;15002:195;;;15081:13;;-1:-1:-1;;;;;15077:39:1;15065:52;;15137:12;;;;15172:15;;;;15113:1;15031:9;15002:195;;;-1:-1:-1;15213:3:1;;14761:461;-1:-1:-1;;;;;14761:461:1:o;15227:582::-;15526:6;15515:9;15508:25;15569:6;15564:2;15553:9;15549:18;15542:34;15612:3;15607:2;15596:9;15592:18;15585:31;15489:4;15633:57;15685:3;15674:9;15670:19;15662:6;15633:57;:::i;:::-;-1:-1:-1;;;;;15726:32:1;;;;15721:2;15706:18;;15699:60;-1:-1:-1;15790:3:1;15775:19;15768:35;15625:65;15227:582;-1:-1:-1;;;15227:582:1:o;15814:332::-;16021:6;16010:9;16003:25;16064:2;16059;16048:9;16044:18;16037:30;15984:4;16084:56;16136:2;16125:9;16121:18;16113:6;16084:56;:::i;:::-;16076:64;15814:332;-1:-1:-1;;;;15814:332:1:o
Swarm Source
ipfs://c262752b6421380ff774b0f0b79094dfab91819af1605b5f8a144ec72f9b33df
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.