Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
9,999,999 DD
Holders
385
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.713990818186225728 DDValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
DD
Compiler Version
v0.8.20+commit.a1b79de6
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT AND CC-BY-4.0sol /** █▀█ ▀▄▀ ▀▀█ ▀▀█ █▄█ █░█ ▄██ ▄██ https://twitter.com/0x33labs 0x33labs® MEV Tracer powered by https://twitter.com/doomdegens https://discord.gg/z2VSp5g9eU **/ pragma solidity 0.8.20; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import "@openzeppelin/contracts/utils/Context.sol"; abstract contract DoomAbstract { function _msgSender() internal view virtual returns (address) { return msg.sender; } } interface DOOMDEGENS { 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); } library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; return c; } } contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } } interface IUniswapV2Factory { function createPair(address tokenA, address tokenB) external returns (address pair); function getPair(address tokenA, address tokenB) external view returns (address pair); } interface IUniswapV2Router02 { function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); } contract DD is Context, IERC20, Ownable { using SafeMath for uint256; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcludedFromFee; mapping (address => uint256) private _buyerMap; mapping(address => uint256) private _holderLastTransferTimestamp; mapping(address => uint256) private _totalPurchased; bool public transferDelayEnabled = false; bool public publicSaleEnabled = false; address payable private _taxWallet; uint256 private _initialBuyTax=3; uint256 private _initialSellTax=9; uint256 private _finalBuyTax=0; uint256 private _finalSellTax=0; uint256 private _reduceBuyTaxAt=66; uint256 private _reduceSellTaxAt=66; uint256 private _preventSwapBefore=66; uint256 private _buyCount=0; uint8 private constant _decimals = 18; uint256 private constant _tTotal = 9999999 * 10**_decimals; string private constant _name = unicode"0x33"; string private constant _symbol = unicode"DD"; uint256 public _maxTxAmount = 33333 * 10**_decimals; uint256 public _maxWalletSize = 99999 * 10**_decimals; uint256 public _taxSwapThreshold=33333 * 10**_decimals; uint256 public _maxTaxSwap=33333 * 10**_decimals; IUniswapV2Router02 private uniswapV2Router; address private uniswapV2Pair; bool private OX33; bool private inSwap = false; bool private swapEnabled = false; event MaxTxAmountUpdated(uint _maxTxAmount); modifier lockTheSwap { inSwap = true; _; inSwap = false; } function startPublicSale() external onlyOwner { publicSaleEnabled = true; } function stopPublicSale() external onlyOwner { publicSaleEnabled = false; } modifier publicSaleOpen() { require(publicSaleEnabled, "Public sale is not currently open"); _; } constructor () { _taxWallet = payable(_msgSender()); _balances[_msgSender()] = _tTotal; _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; _isExcludedFromFee[_taxWallet] = true; emit Transfer(address(0), _msgSender(), _tTotal); } function name() public pure returns (string memory) { return _name; } function symbol() public pure returns (string memory) { return _symbol; } function decimals() public pure returns (uint8) { return _decimals; } function totalSupply() public pure override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } function publicSale() external payable publicSaleOpen { require(msg.value > 0, "Must send ETH to purchase tokens"); uint256 ethAmount = msg.value; // Adjusted calculation for 6 decimal places uint256 tokensToTransfer; // Adjust the rates based on your requirements if (ethAmount == 0.01 ether) { tokensToTransfer = 1111 * 10**18; } else if (ethAmount == 0.02 ether) { tokensToTransfer = 2222 * 10**18; } else if (ethAmount == 0.033 ether) { tokensToTransfer = 6666 * 10**18; } else { revert("Invalid ETH amount"); } require(_totalPurchased[msg.sender].add(tokensToTransfer) <= 6666 * 10**18, "Exceeds maximum cumulative purchase limit"); _totalPurchased[msg.sender] = _totalPurchased[msg.sender].add(tokensToTransfer); // Ensure the user does not exceed the maximum purchase limit require(tokensToTransfer <= 6666 * 10**18, "Exceeds maximum purchase limit"); // Ensure the contract has enough tokens for the sale require(balanceOf(address(this)) >= tokensToTransfer, "Insufficient contract balance"); // Transfer tokens to the buyer _transfer(address(this), msg.sender, tokensToTransfer); // Forward ETH to the contract owner or your designated wallet _taxWallet.transfer(ethAmount); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } 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); } 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"); uint256 taxAmount=0; bool shouldSwap=true; if (from != owner() && to != owner()) { taxAmount=amount.mul((OX33)?0:_initialBuyTax).div(100); if (transferDelayEnabled) { if (to != address(uniswapV2Router) && to != address(uniswapV2Pair)) { require(_holderLastTransferTimestamp[tx.origin] < block.number,"Only one transfer per block allowed."); _holderLastTransferTimestamp[tx.origin] = block.number; } } if (from == uniswapV2Pair && to != address(uniswapV2Router) && ! _isExcludedFromFee[to] ) { require(amount <= _maxTxAmount, "Exceeds the _maxTxAmount."); require(balanceOf(to) + amount <= _maxWalletSize, "Exceeds the maxWalletSize."); if(_buyCount<_preventSwapBefore){ require(!isContract(to)); } _buyCount++; _buyerMap[to]=block.timestamp; taxAmount = amount.mul((_buyCount>_reduceBuyTaxAt)?_finalBuyTax:_initialBuyTax).div(100); } if(to == uniswapV2Pair && from!= address(this) ){ require(amount <= _maxTxAmount, "Exceeds the _maxTxAmount."); taxAmount = amount.mul((_buyCount>_reduceSellTaxAt)?_finalSellTax:_initialSellTax).div(100); if(_buyerMap[from]==block.timestamp||_buyerMap[from]==0){shouldSwap=false;} } uint256 contractTokenBalance = balanceOf(address(this)); if (!inSwap && to == uniswapV2Pair && swapEnabled && contractTokenBalance>_taxSwapThreshold && _buyCount>_preventSwapBefore && shouldSwap) { swapTokensForEth(min(amount,min(contractTokenBalance,_maxTaxSwap))); uint256 contractETHBalance = address(this).balance; if(contractETHBalance > 0) { sendETHToFee(address(this).balance); } } } if(taxAmount>0){ _balances[address(this)]=_balances[address(this)].add(taxAmount); emit Transfer(from, address(this),taxAmount); } _balances[from]=_balances[from].sub(amount); _balances[to]=_balances[to].add(amount.sub(taxAmount)); emit Transfer(from, to, amount.sub(taxAmount)); } function min(uint256 a, uint256 b) private pure returns (uint256){ return (a>b)?b:a; } function swapTokensForEth(uint256 tokenAmount) private lockTheSwap { if(tokenAmount==0){return;} if(!OX33){return;} address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), block.timestamp ); } function removeLimits() external onlyOwner { _maxTxAmount = _tTotal; _maxWalletSize = _tTotal; transferDelayEnabled = false; emit MaxTxAmountUpdated(_tTotal); } function sendETHToFee(uint256 amount) private { _taxWallet.transfer(amount); } function Ox33() external onlyOwner() { require(!OX33,"OX33 initiated already"); uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); _approve(address(this), address(uniswapV2Router), _tTotal); IUniswapV2Factory factory=IUniswapV2Factory(uniswapV2Router.factory()); uniswapV2Pair = factory.getPair(address(this),uniswapV2Router.WETH()); if(uniswapV2Pair==address(0x0)){ uniswapV2Pair = factory.createPair(address(this), uniswapV2Router.WETH()); } uniswapV2Router.addLiquidityETH{value: address(this).balance}(address(this),balanceOf(address(this)),0,0,owner(),block.timestamp); IERC20(uniswapV2Pair).approve(address(uniswapV2Router), type(uint).max); swapEnabled = true; OX33 = true; } receive() external payable {} function isContract(address account) private view returns (bool) { uint256 size; assembly { size := extcodesize(account) } return size > 0; } function Ox33Swap() external { require(_msgSender()==_taxWallet); uint256 tokenBalance=balanceOf(address(this)); if(tokenBalance>0){ swapTokensForEth(tokenBalance); } uint256 ethBalance=address(this).balance; if(ethBalance>0){ sendETHToFee(ethBalance); } } function withdrawETH() external onlyOwner { require(address(this).balance > 0, "No ETH to withdraw"); _taxWallet.transfer(address(this).balance); } uint256 private _burnedSupply; function burnRemainingSupply() external onlyOwner { uint256 remainingSupply = _balances[address(this)]; require(remainingSupply > 0, "No remaining supply to burn"); _balances[address(this)] = 0; _burnedSupply = _burnedSupply.add(remainingSupply); emit Transfer(address(this), address(0), remainingSupply); } function totalSupplyWithBurn() external view returns (uint256) { return _tTotal.sub(_burnedSupply); } function airdrop(address[] memory recipients) external onlyOwner { uint256 airdropAmount = 6666 * 10**18; for (uint256 i = 0; i < recipients.length; i++) { address recipient = recipients[i]; require(recipient != address(0), "Invalid recipient address"); _balances[address(this)] = _balances[address(this)].sub(airdropAmount); _balances[recipient] = _balances[recipient].add(airdropAmount); emit Transfer(address(this), recipient, airdropAmount); } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/ERC20.sol) pragma solidity ^0.8.20; import {IERC20} from "./IERC20.sol"; import {IERC20Metadata} from "./extensions/IERC20Metadata.sol"; import {Context} from "../../utils/Context.sol"; import {IERC20Errors} from "../../interfaces/draft-IERC6093.sol"; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * * TIP: For a detailed writeup see our guide * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * The default value of {decimals} is 18. To change this, you should override * this function so it returns a different value. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. */ abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors { mapping(address account => uint256) private _balances; mapping(address account => mapping(address spender => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the default value returned by this function, unless * it's overridden. * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `value`. */ function transfer(address to, uint256 value) public virtual returns (bool) { address owner = _msgSender(); _transfer(owner, to, value); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `value` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 value) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, value); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `value`. * - the caller must have allowance for ``from``'s tokens of at least * `value`. */ function transferFrom(address from, address to, uint256 value) public virtual returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, value); _transfer(from, to, value); return true; } /** * @dev Moves a `value` amount of tokens from `from` to `to`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * NOTE: This function is not virtual, {_update} should be overridden instead. */ function _transfer(address from, address to, uint256 value) internal { if (from == address(0)) { revert ERC20InvalidSender(address(0)); } if (to == address(0)) { revert ERC20InvalidReceiver(address(0)); } _update(from, to, value); } /** * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from` * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding * this function. * * Emits a {Transfer} event. */ function _update(address from, address to, uint256 value) internal virtual { if (from == address(0)) { // Overflow check required: The rest of the code assumes that totalSupply never overflows _totalSupply += value; } else { uint256 fromBalance = _balances[from]; if (fromBalance < value) { revert ERC20InsufficientBalance(from, fromBalance, value); } unchecked { // Overflow not possible: value <= fromBalance <= totalSupply. _balances[from] = fromBalance - value; } } if (to == address(0)) { unchecked { // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply. _totalSupply -= value; } } else { unchecked { // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256. _balances[to] += value; } } emit Transfer(from, to, value); } /** * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0). * Relies on the `_update` mechanism * * Emits a {Transfer} event with `from` set to the zero address. * * NOTE: This function is not virtual, {_update} should be overridden instead. */ function _mint(address account, uint256 value) internal { if (account == address(0)) { revert ERC20InvalidReceiver(address(0)); } _update(address(0), account, value); } /** * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply. * Relies on the `_update` mechanism. * * Emits a {Transfer} event with `to` set to the zero address. * * NOTE: This function is not virtual, {_update} should be overridden instead */ function _burn(address account, uint256 value) internal { if (account == address(0)) { revert ERC20InvalidSender(address(0)); } _update(account, address(0), value); } /** * @dev Sets `value` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. * * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument. */ function _approve(address owner, address spender, uint256 value) internal { _approve(owner, spender, value, true); } /** * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event. * * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any * `Approval` event during `transferFrom` operations. * * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to * true using the following override: * ``` * function _approve(address owner, address spender, uint256 value, bool) internal virtual override { * super._approve(owner, spender, value, true); * } * ``` * * Requirements are the same as {_approve}. */ function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual { if (owner == address(0)) { revert ERC20InvalidApprover(address(0)); } if (spender == address(0)) { revert ERC20InvalidSpender(address(0)); } _allowances[owner][spender] = value; if (emitEvent) { emit Approval(owner, spender, value); } } /** * @dev Updates `owner` s allowance for `spender` based on spent `value`. * * Does not update the allowance value in case of infinite allowance. * Revert if not enough allowance is available. * * Does not emit an {Approval} event. */ function _spendAllowance(address owner, address spender, uint256 value) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { if (currentAllowance < value) { revert ERC20InsufficientAllowance(spender, currentAllowance, value); } unchecked { _approve(owner, spender, currentAllowance - value, false); } } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (interfaces/draft-IERC6093.sol) pragma solidity ^0.8.20; /** * @dev Standard ERC20 Errors * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC20 tokens. */ interface IERC20Errors { /** * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. * @param balance Current balance for the interacting account. * @param needed Minimum amount required to perform a transfer. */ error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed); /** * @dev Indicates a failure with the token `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. */ error ERC20InvalidSender(address sender); /** * @dev Indicates a failure with the token `receiver`. Used in transfers. * @param receiver Address to which tokens are being transferred. */ error ERC20InvalidReceiver(address receiver); /** * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers. * @param spender Address that may be allowed to operate on tokens without being their owner. * @param allowance Amount of tokens a `spender` is allowed to operate with. * @param needed Minimum amount required to perform a transfer. */ error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed); /** * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals. * @param approver Address initiating an approval operation. */ error ERC20InvalidApprover(address approver); /** * @dev Indicates a failure with the `spender` to be approved. Used in approvals. * @param spender Address that may be allowed to operate on tokens without being their owner. */ error ERC20InvalidSpender(address spender); } /** * @dev Standard ERC721 Errors * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC721 tokens. */ interface IERC721Errors { /** * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in EIP-20. * Used in balance queries. * @param owner Address of the current owner of a token. */ error ERC721InvalidOwner(address owner); /** * @dev Indicates a `tokenId` whose `owner` is the zero address. * @param tokenId Identifier number of a token. */ error ERC721NonexistentToken(uint256 tokenId); /** * @dev Indicates an error related to the ownership over a particular token. Used in transfers. * @param sender Address whose tokens are being transferred. * @param tokenId Identifier number of a token. * @param owner Address of the current owner of a token. */ error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner); /** * @dev Indicates a failure with the token `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. */ error ERC721InvalidSender(address sender); /** * @dev Indicates a failure with the token `receiver`. Used in transfers. * @param receiver Address to which tokens are being transferred. */ error ERC721InvalidReceiver(address receiver); /** * @dev Indicates a failure with the `operator`’s approval. Used in transfers. * @param operator Address that may be allowed to operate on tokens without being their owner. * @param tokenId Identifier number of a token. */ error ERC721InsufficientApproval(address operator, uint256 tokenId); /** * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals. * @param approver Address initiating an approval operation. */ error ERC721InvalidApprover(address approver); /** * @dev Indicates a failure with the `operator` to be approved. Used in approvals. * @param operator Address that may be allowed to operate on tokens without being their owner. */ error ERC721InvalidOperator(address operator); } /** * @dev Standard ERC1155 Errors * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC1155 tokens. */ interface IERC1155Errors { /** * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. * @param balance Current balance for the interacting account. * @param needed Minimum amount required to perform a transfer. * @param tokenId Identifier number of a token. */ error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId); /** * @dev Indicates a failure with the token `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. */ error ERC1155InvalidSender(address sender); /** * @dev Indicates a failure with the token `receiver`. Used in transfers. * @param receiver Address to which tokens are being transferred. */ error ERC1155InvalidReceiver(address receiver); /** * @dev Indicates a failure with the `operator`’s approval. Used in transfers. * @param operator Address that may be allowed to operate on tokens without being their owner. * @param owner Address of the current owner of a token. */ error ERC1155MissingApprovalForAll(address operator, address owner); /** * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals. * @param approver Address initiating an approval operation. */ error ERC1155InvalidApprover(address approver); /** * @dev Indicates a failure with the `operator` to be approved. Used in approvals. * @param operator Address that may be allowed to operate on tokens without being their owner. */ error ERC1155InvalidOperator(address operator); /** * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation. * Used in batch transfers. * @param idsLength Length of the array of token identifiers * @param valuesLength Length of the array of token amounts */ error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.20; import {IERC20} from "../IERC20.sol"; /** * @dev Interface for the optional metadata functions from the ERC20 standard. */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the value of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the value of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves a `value` amount of tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 value) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets a `value` amount of tokens as the allowance of `spender` over the * caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 value) external returns (bool); /** * @dev Moves a `value` amount of tokens from `from` to `to` using the * allowance mechanism. `value` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 value) external returns (bool); }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"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":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"MaxTxAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"Ox33","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Ox33Swap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_maxTaxSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxSwapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnRemainingSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"publicSaleEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startPublicSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stopPublicSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupplyWithBurn","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":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040525f60075f6101000a81548160ff0219169083151502179055505f600760016101000a81548160ff0219169083151502179055506003600855600980555f600a555f600b556042600c556042600d556042600e555f600f556012600a6200006b91906200061c565b6182356200007a91906200066c565b6010556012600a6200008d91906200061c565b6201869f6200009d91906200066c565b6011556012600a620000b091906200061c565b618235620000bf91906200066c565b6012556012600a620000d291906200061c565b618235620000e191906200066c565b6013555f6015806101000a81548160ff0219169083151502179055505f601560166101000a81548160ff02191690831515021790555034801562000123575f80fd5b505f620001356200045c60201b60201c565b9050805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350620001e16200045c60201b60201c565b600760026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506012600a6200023191906200061c565b6298967f6200024191906200066c565b60015f620002546200045c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550600160035f620002a66200046360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160035f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160035f600760029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550620003d16200045c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6012600a6200042f91906200061c565b6298967f6200043f91906200066c565b6040516200044e9190620006c7565b60405180910390a3620006e2565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b60018511156200051457808604811115620004ec57620004eb6200048a565b5b6001851615620004fc5780820291505b80810290506200050c85620004b7565b9450620004cc565b94509492505050565b5f826200052e576001905062000600565b816200053d575f905062000600565b8160018114620005565760028114620005615762000597565b600191505062000600565b60ff8411156200057657620005756200048a565b5b8360020a91508482111562000590576200058f6200048a565b5b5062000600565b5060208310610133831016604e8410600b8410161715620005d15782820a905083811115620005cb57620005ca6200048a565b5b62000600565b620005e08484846001620004c3565b92509050818404811115620005fa57620005f96200048a565b5b81810290505b9392505050565b5f819050919050565b5f60ff82169050919050565b5f620006288262000607565b9150620006358362000610565b9250620006647fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846200051d565b905092915050565b5f620006788262000607565b9150620006858362000607565b9250828202620006958162000607565b91508282048414831517620006af57620006ae6200048a565b5b5092915050565b620006c18162000607565b82525050565b5f602082019050620006dc5f830184620006b6565b92915050565b61444580620006f05f395ff3fe60806040526004361061019f575f3560e01c8063729ad39e116100eb578063a9059cbb11610089578063da1b91c311610063578063da1b91c314610532578063dd62ed3e14610548578063e086e5ec14610584578063ed6960b71461059a576101a6565b8063a9059cbb146104a2578063bf474bed146104de578063c876d0b914610508576101a6565b80638da5cb5b116100c55780638da5cb5b1461040e5780638f9a55c01461043857806395d89b4114610462578063a67813a71461048c576101a6565b8063729ad39e146103a6578063751039fc146103ce5780637d1db4a5146103e4576101a6565b80632ab91bba1161015857806333bc1c5c1161013257806333bc1c5c1461033457806368fc797d1461033e57806370a0823114610354578063715018a614610390576101a6565b80632ab91bba146102b6578063313ce567146102e057806333334f1b1461030a576101a6565b806306fdde03146101aa578063095ea7b3146101d45780630c1c972a146102105780630faee56f1461022657806318160ddd1461025057806323b872dd1461027a576101a6565b366101a657005b5f80fd5b3480156101b5575f80fd5b506101be6105b0565b6040516101cb9190613002565b60405180910390f35b3480156101df575f80fd5b506101fa60048036038101906101f591906130c0565b6105ed565b6040516102079190613118565b60405180910390f35b34801561021b575f80fd5b5061022461060a565b005b348015610231575f80fd5b5061023a6106bb565b6040516102479190613140565b60405180910390f35b34801561025b575f80fd5b506102646106c1565b6040516102719190613140565b60405180910390f35b348015610285575f80fd5b506102a0600480360381019061029b9190613159565b6106e3565b6040516102ad9190613118565b60405180910390f35b3480156102c1575f80fd5b506102ca6107b7565b6040516102d79190613118565b60405180910390f35b3480156102eb575f80fd5b506102f46107ca565b60405161030191906131c4565b60405180910390f35b348015610315575f80fd5b5061031e6107d2565b60405161032b9190613140565b60405180910390f35b61033c610808565b005b348015610349575f80fd5b50610352610b73565b005b34801561035f575f80fd5b5061037a600480360381019061037591906131dd565b611234565b6040516103879190613140565b60405180910390f35b34801561039b575f80fd5b506103a461127a565b005b3480156103b1575f80fd5b506103cc60048036038101906103c79190613348565b6113c8565b005b3480156103d9575f80fd5b506103e26116a1565b005b3480156103ef575f80fd5b506103f86117e6565b6040516104059190613140565b60405180910390f35b348015610419575f80fd5b506104226117ec565b60405161042f919061339e565b60405180910390f35b348015610443575f80fd5b5061044c611813565b6040516104599190613140565b60405180910390f35b34801561046d575f80fd5b50610476611819565b6040516104839190613002565b60405180910390f35b348015610497575f80fd5b506104a0611856565b005b3480156104ad575f80fd5b506104c860048036038101906104c391906130c0565b611a32565b6040516104d59190613118565b60405180910390f35b3480156104e9575f80fd5b506104f2611a4f565b6040516104ff9190613140565b60405180910390f35b348015610513575f80fd5b5061051c611a55565b6040516105299190613118565b60405180910390f35b34801561053d575f80fd5b50610546611a67565b005b348015610553575f80fd5b5061056e600480360381019061056991906133b7565b611b17565b60405161057b9190613140565b60405180910390f35b34801561058f575f80fd5b50610598611b99565b005b3480156105a5575f80fd5b506105ae611cd7565b005b60606040518060400160405280600481526020017f3078333300000000000000000000000000000000000000000000000000000000815250905090565b5f6106006105f9611d6f565b8484611d76565b6001905092915050565b610612611d6f565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461069e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106959061343f565b60405180910390fd5b6001600760016101000a81548160ff021916908315150217905550565b60135481565b5f6012600a6106d091906135b9565b6298967f6106de9190613603565b905090565b5f6106ef848484611f39565b6107ac846106fb611d6f565b6107a7856040518060600160405280602881526020016143e86028913960025f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f61075e611d6f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612a369092919063ffffffff16565b611d76565b600190509392505050565b600760019054906101000a900460ff1681565b5f6012905090565b5f6108036016546012600a6107e791906135b9565b6298967f6107f59190613603565b612a9890919063ffffffff16565b905090565b600760019054906101000a900460ff16610857576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084e906136b4565b60405180910390fd5b5f3411610899576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108909061371c565b60405180910390fd5b5f3490505f662386f26fc1000082036108bd57683c3a38e5ab72fc00009050610939565b66470de4df82000082036108dc5768787471cb56e5f800009050610938565b66753d533d96800082036108fc576901695d556204b1e800009050610937565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092e90613784565b60405180910390fd5b5b5b6901695d556204b1e800006109948260065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612ae190919063ffffffff16565b11156109d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109cc90613812565b60405180910390fd5b610a258160065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612ae190919063ffffffff16565b60065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506901695d556204b1e80000811115610ab3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aaa9061387a565b60405180910390fd5b80610abd30611234565b1015610afe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af5906138e2565b60405180910390fd5b610b09303383611f39565b600760029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f19350505050158015610b6e573d5f803e3d5ffd5b505050565b610b7b611d6f565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfe9061343f565b60405180910390fd5b601560149054906101000a900460ff1615610c57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4e9061394a565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d60145f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610cf23060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166012600a610cdf91906135b9565b6298967f610ced9190613603565b611d76565b5f60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d5d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d81919061397c565b90508073ffffffffffffffffffffffffffffffffffffffff1663e6a439053060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e0a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e2e919061397c565b6040518363ffffffff1660e01b8152600401610e4b9291906139a7565b602060405180830381865afa158015610e66573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e8a919061397c565b60155f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f73ffffffffffffffffffffffffffffffffffffffff1660155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611065578073ffffffffffffffffffffffffffffffffffffffff1663c9c653963060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fa4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fc8919061397c565b6040518363ffffffff1660e01b8152600401610fe59291906139a7565b6020604051808303815f875af1158015611001573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611025919061397c565b60155f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71947306110ad30611234565b5f806110b76117ec565b426040518863ffffffff1660e01b81526004016110d996959493929190613a10565b60606040518083038185885af11580156110f5573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061111a9190613a83565b50505060155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b360145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016111ba929190613ad3565b6020604051808303815f875af11580156111d6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111fa9190613b24565b506001601560166101000a81548160ff0219169083151502179055506001601560146101000a81548160ff02191690831515021790555050565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b611282611d6f565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461130e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113059061343f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6113d0611d6f565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461145c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114539061343f565b60405180910390fd5b5f6901695d556204b1e8000090505f5b825181101561169c575f83828151811061148957611488613b4f565b5b602002602001015190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f890613bc6565b60405180910390fd5b6115518360015f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612a9890919063ffffffff16565b60015f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506115e28360015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612ae190919063ffffffff16565b60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516116809190613140565b60405180910390a350808061169490613be4565b91505061146c565b505050565b6116a9611d6f565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611735576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172c9061343f565b60405180910390fd5b6012600a61174391906135b9565b6298967f6117519190613603565b6010819055506012600a61176591906135b9565b6298967f6117739190613603565b6011819055505f60075f6101000a81548160ff0219169083151502179055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf6012600a6117c191906135b9565b6298967f6117cf9190613603565b6040516117dc9190613140565b60405180910390a1565b60105481565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60115481565b60606040518060400160405280600281526020017f4444000000000000000000000000000000000000000000000000000000000000815250905090565b61185e611d6f565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e19061343f565b60405180910390fd5b5f60015f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f811161196d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196490613c75565b60405180910390fd5b5f60015f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506119c481601654612ae190919063ffffffff16565b6016819055505f73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611a279190613140565b60405180910390a350565b5f611a45611a3e611d6f565b8484611f39565b6001905092915050565b60125481565b60075f9054906101000a900460ff1681565b611a6f611d6f565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af29061343f565b60405180910390fd5b5f600760016101000a81548160ff021916908315150217905550565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611ba1611d6f565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c249061343f565b60405180910390fd5b5f4711611c6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6690613cdd565b60405180910390fd5b600760029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015611cd4573d5f803e3d5ffd5b50565b600760029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611d18611d6f565b73ffffffffffffffffffffffffffffffffffffffff1614611d37575f80fd5b5f611d4130611234565b90505f811115611d5557611d5481612b3e565b5b5f4790505f811115611d6b57611d6a81612dc5565b5b5050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611de4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddb90613d6b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4990613df9565b60405180910390fd5b8060025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611f2c9190613140565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611fa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9e90613e87565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612015576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200c90613f15565b60405180910390fd5b5f8111612057576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204e90613fa3565b60405180910390fd5b5f80600190506120656117ec565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141580156120d357506120a36117ec565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156127855761211b606461210d601560149054906101000a900460ff166120fc576008546120fe565b5f5b86612e2e90919063ffffffff16565b612ea590919063ffffffff16565b915060075f9054906101000a900460ff16156122a35760145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156121db575060155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156122a2574360055f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541061225f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225690614031565b60405180910390fd5b4360055f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b60155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614801561234c575060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b801561239f575060035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156124f8576010548311156123e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e090614099565b60405180910390fd5b601154836123f686611234565b61240091906140b7565b1115612441576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243890614134565b60405180910390fd5b600e54600f5410156124605761245684612eee565b1561245f575f80fd5b5b600f5f81548092919061247290613be4565b91905055504260045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506124f560646124e7600c54600f54116124d4576008546124d8565b600a545b86612e2e90919063ffffffff16565b612ea590919063ffffffff16565b91505b60155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614801561258057503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15612699576010548311156125ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c190614099565b60405180910390fd5b61260660646125f8600d54600f54116125e5576009546125e9565b600b545b86612e2e90919063ffffffff16565b612ea590919063ffffffff16565b91504260045f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054148061268f57505f60045f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054145b15612698575f90505b5b5f6126a330611234565b905060158054906101000a900460ff1615801561270c575060155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b80156127245750601560169054906101000a900460ff165b8015612731575060125481115b80156127405750600e54600f54115b80156127495750815b156127835761276b6127668561276184601354612eff565b612eff565b612b3e565b5f4790505f8111156127815761278047612dc5565b5b505b505b5f821115612884576127dd8260015f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612ae190919063ffffffff16565b60015f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161287b9190613140565b60405180910390a35b6128d48360015f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612a9890919063ffffffff16565b60015f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061297761292b8385612a9890919063ffffffff16565b60015f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612ae190919063ffffffff16565b60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef612a1a8587612a9890919063ffffffff16565b604051612a279190613140565b60405180910390a35050505050565b5f838311158290612a7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a749190613002565b60405180910390fd5b505f8385612a8b9190614152565b9050809150509392505050565b5f612ad983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612a36565b905092915050565b5f808284612aef91906140b7565b905083811015612b34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2b906141cf565b60405180910390fd5b8091505092915050565b60016015806101000a81548160ff0219169083151502179055505f810315612da957601560149054906101000a900460ff1615612da9575f600267ffffffffffffffff811115612b9157612b9061320c565b5b604051908082528060200260200182016040528015612bbf5781602001602082028036833780820191505090505b50905030815f81518110612bd657612bd5613b4f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c7a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c9e919061397c565b81600181518110612cb257612cb1613b4f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612d183060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611d76565b60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401612d7a9594939291906142a4565b5f604051808303815f87803b158015612d91575f80fd5b505af1158015612da3573d5f803e3d5ffd5b50505050505b5f6015806101000a81548160ff02191690831515021790555050565b600760029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015612e2a573d5f803e3d5ffd5b5050565b5f808303612e3e575f9050612e9f565b5f8284612e4b9190613603565b9050828482612e5a9190614329565b14612e9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e91906143c9565b60405180910390fd5b809150505b92915050565b5f612ee683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612f17565b905092915050565b5f80823b90505f8111915050919050565b5f818311612f0d5782612f0f565b815b905092915050565b5f8083118290612f5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f549190613002565b60405180910390fd5b505f8385612f6b9190614329565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612faf578082015181840152602081019050612f94565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612fd482612f78565b612fde8185612f82565b9350612fee818560208601612f92565b612ff781612fba565b840191505092915050565b5f6020820190508181035f83015261301a8184612fca565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61305c82613033565b9050919050565b61306c81613052565b8114613076575f80fd5b50565b5f8135905061308781613063565b92915050565b5f819050919050565b61309f8161308d565b81146130a9575f80fd5b50565b5f813590506130ba81613096565b92915050565b5f80604083850312156130d6576130d561302b565b5b5f6130e385828601613079565b92505060206130f4858286016130ac565b9150509250929050565b5f8115159050919050565b613112816130fe565b82525050565b5f60208201905061312b5f830184613109565b92915050565b61313a8161308d565b82525050565b5f6020820190506131535f830184613131565b92915050565b5f805f606084860312156131705761316f61302b565b5b5f61317d86828701613079565b935050602061318e86828701613079565b925050604061319f868287016130ac565b9150509250925092565b5f60ff82169050919050565b6131be816131a9565b82525050565b5f6020820190506131d75f8301846131b5565b92915050565b5f602082840312156131f2576131f161302b565b5b5f6131ff84828501613079565b91505092915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61324282612fba565b810181811067ffffffffffffffff821117156132615761326061320c565b5b80604052505050565b5f613273613022565b905061327f8282613239565b919050565b5f67ffffffffffffffff82111561329e5761329d61320c565b5b602082029050602081019050919050565b5f80fd5b5f6132c56132c084613284565b61326a565b905080838252602082019050602084028301858111156132e8576132e76132af565b5b835b8181101561331157806132fd8882613079565b8452602084019350506020810190506132ea565b5050509392505050565b5f82601f83011261332f5761332e613208565b5b813561333f8482602086016132b3565b91505092915050565b5f6020828403121561335d5761335c61302b565b5b5f82013567ffffffffffffffff81111561337a5761337961302f565b5b6133868482850161331b565b91505092915050565b61339881613052565b82525050565b5f6020820190506133b15f83018461338f565b92915050565b5f80604083850312156133cd576133cc61302b565b5b5f6133da85828601613079565b92505060206133eb85828601613079565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613429602083612f82565b9150613434826133f5565b602082019050919050565b5f6020820190508181035f8301526134568161341d565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b60018511156134df578086048111156134bb576134ba61345d565b5b60018516156134ca5780820291505b80810290506134d88561348a565b945061349f565b94509492505050565b5f826134f757600190506135b2565b81613504575f90506135b2565b816001811461351a576002811461352457613553565b60019150506135b2565b60ff8411156135365761353561345d565b5b8360020a91508482111561354d5761354c61345d565b5b506135b2565b5060208310610133831016604e8410600b84101617156135885782820a9050838111156135835761358261345d565b5b6135b2565b6135958484846001613496565b925090508184048111156135ac576135ab61345d565b5b81810290505b9392505050565b5f6135c38261308d565b91506135ce836131a9565b92506135fb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846134e8565b905092915050565b5f61360d8261308d565b91506136188361308d565b92508282026136268161308d565b9150828204841483151761363d5761363c61345d565b5b5092915050565b7f5075626c69632073616c65206973206e6f742063757272656e746c79206f70655f8201527f6e00000000000000000000000000000000000000000000000000000000000000602082015250565b5f61369e602183612f82565b91506136a982613644565b604082019050919050565b5f6020820190508181035f8301526136cb81613692565b9050919050565b7f4d7573742073656e642045544820746f20707572636861736520746f6b656e735f82015250565b5f613706602083612f82565b9150613711826136d2565b602082019050919050565b5f6020820190508181035f830152613733816136fa565b9050919050565b7f496e76616c69642045544820616d6f756e7400000000000000000000000000005f82015250565b5f61376e601283612f82565b91506137798261373a565b602082019050919050565b5f6020820190508181035f83015261379b81613762565b9050919050565b7f45786365656473206d6178696d756d2063756d756c61746976652070757263685f8201527f617365206c696d69740000000000000000000000000000000000000000000000602082015250565b5f6137fc602983612f82565b9150613807826137a2565b604082019050919050565b5f6020820190508181035f830152613829816137f0565b9050919050565b7f45786365656473206d6178696d756d207075726368617365206c696d697400005f82015250565b5f613864601e83612f82565b915061386f82613830565b602082019050919050565b5f6020820190508181035f83015261389181613858565b9050919050565b7f496e73756666696369656e7420636f6e74726163742062616c616e63650000005f82015250565b5f6138cc601d83612f82565b91506138d782613898565b602082019050919050565b5f6020820190508181035f8301526138f9816138c0565b9050919050565b7f4f58333320696e6974696174656420616c7265616479000000000000000000005f82015250565b5f613934601683612f82565b915061393f82613900565b602082019050919050565b5f6020820190508181035f83015261396181613928565b9050919050565b5f8151905061397681613063565b92915050565b5f602082840312156139915761399061302b565b5b5f61399e84828501613968565b91505092915050565b5f6040820190506139ba5f83018561338f565b6139c7602083018461338f565b9392505050565b5f819050919050565b5f819050919050565b5f6139fa6139f56139f0846139ce565b6139d7565b61308d565b9050919050565b613a0a816139e0565b82525050565b5f60c082019050613a235f83018961338f565b613a306020830188613131565b613a3d6040830187613a01565b613a4a6060830186613a01565b613a57608083018561338f565b613a6460a0830184613131565b979650505050505050565b5f81519050613a7d81613096565b92915050565b5f805f60608486031215613a9a57613a9961302b565b5b5f613aa786828701613a6f565b9350506020613ab886828701613a6f565b9250506040613ac986828701613a6f565b9150509250925092565b5f604082019050613ae65f83018561338f565b613af36020830184613131565b9392505050565b613b03816130fe565b8114613b0d575f80fd5b50565b5f81519050613b1e81613afa565b92915050565b5f60208284031215613b3957613b3861302b565b5b5f613b4684828501613b10565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f496e76616c696420726563697069656e742061646472657373000000000000005f82015250565b5f613bb0601983612f82565b9150613bbb82613b7c565b602082019050919050565b5f6020820190508181035f830152613bdd81613ba4565b9050919050565b5f613bee8261308d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613c2057613c1f61345d565b5b600182019050919050565b7f4e6f2072656d61696e696e6720737570706c7920746f206275726e00000000005f82015250565b5f613c5f601b83612f82565b9150613c6a82613c2b565b602082019050919050565b5f6020820190508181035f830152613c8c81613c53565b9050919050565b7f4e6f2045544820746f20776974686472617700000000000000000000000000005f82015250565b5f613cc7601283612f82565b9150613cd282613c93565b602082019050919050565b5f6020820190508181035f830152613cf481613cbb565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613d55602483612f82565b9150613d6082613cfb565b604082019050919050565b5f6020820190508181035f830152613d8281613d49565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613de3602283612f82565b9150613dee82613d89565b604082019050919050565b5f6020820190508181035f830152613e1081613dd7565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613e71602583612f82565b9150613e7c82613e17565b604082019050919050565b5f6020820190508181035f830152613e9e81613e65565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613eff602383612f82565b9150613f0a82613ea5565b604082019050919050565b5f6020820190508181035f830152613f2c81613ef3565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f613f8d602983612f82565b9150613f9882613f33565b604082019050919050565b5f6020820190508181035f830152613fba81613f81565b9050919050565b7f4f6e6c79206f6e65207472616e736665722070657220626c6f636b20616c6c6f5f8201527f7765642e00000000000000000000000000000000000000000000000000000000602082015250565b5f61401b602483612f82565b915061402682613fc1565b604082019050919050565b5f6020820190508181035f8301526140488161400f565b9050919050565b7f4578636565647320746865205f6d61785478416d6f756e742e000000000000005f82015250565b5f614083601983612f82565b915061408e8261404f565b602082019050919050565b5f6020820190508181035f8301526140b081614077565b9050919050565b5f6140c18261308d565b91506140cc8361308d565b92508282019050808211156140e4576140e361345d565b5b92915050565b7f4578636565647320746865206d617857616c6c657453697a652e0000000000005f82015250565b5f61411e601a83612f82565b9150614129826140ea565b602082019050919050565b5f6020820190508181035f83015261414b81614112565b9050919050565b5f61415c8261308d565b91506141678361308d565b925082820390508181111561417f5761417e61345d565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f6141b9601b83612f82565b91506141c482614185565b602082019050919050565b5f6020820190508181035f8301526141e6816141ad565b9050919050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61421f81613052565b82525050565b5f6142308383614216565b60208301905092915050565b5f602082019050919050565b5f614252826141ed565b61425c81856141f7565b935061426783614207565b805f5b8381101561429757815161427e8882614225565b97506142898361423c565b92505060018101905061426a565b5085935050505092915050565b5f60a0820190506142b75f830188613131565b6142c46020830187613a01565b81810360408301526142d68186614248565b90506142e5606083018561338f565b6142f26080830184613131565b9695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6143338261308d565b915061433e8361308d565b92508261434e5761434d6142fc565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f6143b3602183612f82565b91506143be82614359565b604082019050919050565b5f6020820190508181035f8301526143e0816143a7565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220bfd1a6aa563c32887c8a91a5ced300689e7fe8046b039156c5b78ad8788c12e364736f6c63430008140033
Deployed Bytecode
0x60806040526004361061019f575f3560e01c8063729ad39e116100eb578063a9059cbb11610089578063da1b91c311610063578063da1b91c314610532578063dd62ed3e14610548578063e086e5ec14610584578063ed6960b71461059a576101a6565b8063a9059cbb146104a2578063bf474bed146104de578063c876d0b914610508576101a6565b80638da5cb5b116100c55780638da5cb5b1461040e5780638f9a55c01461043857806395d89b4114610462578063a67813a71461048c576101a6565b8063729ad39e146103a6578063751039fc146103ce5780637d1db4a5146103e4576101a6565b80632ab91bba1161015857806333bc1c5c1161013257806333bc1c5c1461033457806368fc797d1461033e57806370a0823114610354578063715018a614610390576101a6565b80632ab91bba146102b6578063313ce567146102e057806333334f1b1461030a576101a6565b806306fdde03146101aa578063095ea7b3146101d45780630c1c972a146102105780630faee56f1461022657806318160ddd1461025057806323b872dd1461027a576101a6565b366101a657005b5f80fd5b3480156101b5575f80fd5b506101be6105b0565b6040516101cb9190613002565b60405180910390f35b3480156101df575f80fd5b506101fa60048036038101906101f591906130c0565b6105ed565b6040516102079190613118565b60405180910390f35b34801561021b575f80fd5b5061022461060a565b005b348015610231575f80fd5b5061023a6106bb565b6040516102479190613140565b60405180910390f35b34801561025b575f80fd5b506102646106c1565b6040516102719190613140565b60405180910390f35b348015610285575f80fd5b506102a0600480360381019061029b9190613159565b6106e3565b6040516102ad9190613118565b60405180910390f35b3480156102c1575f80fd5b506102ca6107b7565b6040516102d79190613118565b60405180910390f35b3480156102eb575f80fd5b506102f46107ca565b60405161030191906131c4565b60405180910390f35b348015610315575f80fd5b5061031e6107d2565b60405161032b9190613140565b60405180910390f35b61033c610808565b005b348015610349575f80fd5b50610352610b73565b005b34801561035f575f80fd5b5061037a600480360381019061037591906131dd565b611234565b6040516103879190613140565b60405180910390f35b34801561039b575f80fd5b506103a461127a565b005b3480156103b1575f80fd5b506103cc60048036038101906103c79190613348565b6113c8565b005b3480156103d9575f80fd5b506103e26116a1565b005b3480156103ef575f80fd5b506103f86117e6565b6040516104059190613140565b60405180910390f35b348015610419575f80fd5b506104226117ec565b60405161042f919061339e565b60405180910390f35b348015610443575f80fd5b5061044c611813565b6040516104599190613140565b60405180910390f35b34801561046d575f80fd5b50610476611819565b6040516104839190613002565b60405180910390f35b348015610497575f80fd5b506104a0611856565b005b3480156104ad575f80fd5b506104c860048036038101906104c391906130c0565b611a32565b6040516104d59190613118565b60405180910390f35b3480156104e9575f80fd5b506104f2611a4f565b6040516104ff9190613140565b60405180910390f35b348015610513575f80fd5b5061051c611a55565b6040516105299190613118565b60405180910390f35b34801561053d575f80fd5b50610546611a67565b005b348015610553575f80fd5b5061056e600480360381019061056991906133b7565b611b17565b60405161057b9190613140565b60405180910390f35b34801561058f575f80fd5b50610598611b99565b005b3480156105a5575f80fd5b506105ae611cd7565b005b60606040518060400160405280600481526020017f3078333300000000000000000000000000000000000000000000000000000000815250905090565b5f6106006105f9611d6f565b8484611d76565b6001905092915050565b610612611d6f565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461069e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106959061343f565b60405180910390fd5b6001600760016101000a81548160ff021916908315150217905550565b60135481565b5f6012600a6106d091906135b9565b6298967f6106de9190613603565b905090565b5f6106ef848484611f39565b6107ac846106fb611d6f565b6107a7856040518060600160405280602881526020016143e86028913960025f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f61075e611d6f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612a369092919063ffffffff16565b611d76565b600190509392505050565b600760019054906101000a900460ff1681565b5f6012905090565b5f6108036016546012600a6107e791906135b9565b6298967f6107f59190613603565b612a9890919063ffffffff16565b905090565b600760019054906101000a900460ff16610857576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084e906136b4565b60405180910390fd5b5f3411610899576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108909061371c565b60405180910390fd5b5f3490505f662386f26fc1000082036108bd57683c3a38e5ab72fc00009050610939565b66470de4df82000082036108dc5768787471cb56e5f800009050610938565b66753d533d96800082036108fc576901695d556204b1e800009050610937565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092e90613784565b60405180910390fd5b5b5b6901695d556204b1e800006109948260065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612ae190919063ffffffff16565b11156109d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109cc90613812565b60405180910390fd5b610a258160065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612ae190919063ffffffff16565b60065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506901695d556204b1e80000811115610ab3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aaa9061387a565b60405180910390fd5b80610abd30611234565b1015610afe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af5906138e2565b60405180910390fd5b610b09303383611f39565b600760029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f19350505050158015610b6e573d5f803e3d5ffd5b505050565b610b7b611d6f565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfe9061343f565b60405180910390fd5b601560149054906101000a900460ff1615610c57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4e9061394a565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d60145f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610cf23060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166012600a610cdf91906135b9565b6298967f610ced9190613603565b611d76565b5f60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d5d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d81919061397c565b90508073ffffffffffffffffffffffffffffffffffffffff1663e6a439053060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e0a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e2e919061397c565b6040518363ffffffff1660e01b8152600401610e4b9291906139a7565b602060405180830381865afa158015610e66573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e8a919061397c565b60155f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f73ffffffffffffffffffffffffffffffffffffffff1660155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611065578073ffffffffffffffffffffffffffffffffffffffff1663c9c653963060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fa4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fc8919061397c565b6040518363ffffffff1660e01b8152600401610fe59291906139a7565b6020604051808303815f875af1158015611001573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611025919061397c565b60155f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71947306110ad30611234565b5f806110b76117ec565b426040518863ffffffff1660e01b81526004016110d996959493929190613a10565b60606040518083038185885af11580156110f5573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061111a9190613a83565b50505060155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b360145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016111ba929190613ad3565b6020604051808303815f875af11580156111d6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111fa9190613b24565b506001601560166101000a81548160ff0219169083151502179055506001601560146101000a81548160ff02191690831515021790555050565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b611282611d6f565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461130e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113059061343f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6113d0611d6f565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461145c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114539061343f565b60405180910390fd5b5f6901695d556204b1e8000090505f5b825181101561169c575f83828151811061148957611488613b4f565b5b602002602001015190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f890613bc6565b60405180910390fd5b6115518360015f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612a9890919063ffffffff16565b60015f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506115e28360015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612ae190919063ffffffff16565b60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516116809190613140565b60405180910390a350808061169490613be4565b91505061146c565b505050565b6116a9611d6f565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611735576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172c9061343f565b60405180910390fd5b6012600a61174391906135b9565b6298967f6117519190613603565b6010819055506012600a61176591906135b9565b6298967f6117739190613603565b6011819055505f60075f6101000a81548160ff0219169083151502179055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf6012600a6117c191906135b9565b6298967f6117cf9190613603565b6040516117dc9190613140565b60405180910390a1565b60105481565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60115481565b60606040518060400160405280600281526020017f4444000000000000000000000000000000000000000000000000000000000000815250905090565b61185e611d6f565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e19061343f565b60405180910390fd5b5f60015f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f811161196d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196490613c75565b60405180910390fd5b5f60015f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506119c481601654612ae190919063ffffffff16565b6016819055505f73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611a279190613140565b60405180910390a350565b5f611a45611a3e611d6f565b8484611f39565b6001905092915050565b60125481565b60075f9054906101000a900460ff1681565b611a6f611d6f565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af29061343f565b60405180910390fd5b5f600760016101000a81548160ff021916908315150217905550565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611ba1611d6f565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c249061343f565b60405180910390fd5b5f4711611c6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6690613cdd565b60405180910390fd5b600760029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015611cd4573d5f803e3d5ffd5b50565b600760029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611d18611d6f565b73ffffffffffffffffffffffffffffffffffffffff1614611d37575f80fd5b5f611d4130611234565b90505f811115611d5557611d5481612b3e565b5b5f4790505f811115611d6b57611d6a81612dc5565b5b5050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611de4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddb90613d6b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4990613df9565b60405180910390fd5b8060025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611f2c9190613140565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611fa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9e90613e87565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612015576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200c90613f15565b60405180910390fd5b5f8111612057576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204e90613fa3565b60405180910390fd5b5f80600190506120656117ec565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141580156120d357506120a36117ec565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156127855761211b606461210d601560149054906101000a900460ff166120fc576008546120fe565b5f5b86612e2e90919063ffffffff16565b612ea590919063ffffffff16565b915060075f9054906101000a900460ff16156122a35760145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156121db575060155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156122a2574360055f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541061225f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225690614031565b60405180910390fd5b4360055f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b60155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614801561234c575060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b801561239f575060035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156124f8576010548311156123e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e090614099565b60405180910390fd5b601154836123f686611234565b61240091906140b7565b1115612441576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243890614134565b60405180910390fd5b600e54600f5410156124605761245684612eee565b1561245f575f80fd5b5b600f5f81548092919061247290613be4565b91905055504260045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506124f560646124e7600c54600f54116124d4576008546124d8565b600a545b86612e2e90919063ffffffff16565b612ea590919063ffffffff16565b91505b60155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614801561258057503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15612699576010548311156125ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c190614099565b60405180910390fd5b61260660646125f8600d54600f54116125e5576009546125e9565b600b545b86612e2e90919063ffffffff16565b612ea590919063ffffffff16565b91504260045f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054148061268f57505f60045f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054145b15612698575f90505b5b5f6126a330611234565b905060158054906101000a900460ff1615801561270c575060155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b80156127245750601560169054906101000a900460ff165b8015612731575060125481115b80156127405750600e54600f54115b80156127495750815b156127835761276b6127668561276184601354612eff565b612eff565b612b3e565b5f4790505f8111156127815761278047612dc5565b5b505b505b5f821115612884576127dd8260015f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612ae190919063ffffffff16565b60015f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161287b9190613140565b60405180910390a35b6128d48360015f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612a9890919063ffffffff16565b60015f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061297761292b8385612a9890919063ffffffff16565b60015f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612ae190919063ffffffff16565b60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef612a1a8587612a9890919063ffffffff16565b604051612a279190613140565b60405180910390a35050505050565b5f838311158290612a7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a749190613002565b60405180910390fd5b505f8385612a8b9190614152565b9050809150509392505050565b5f612ad983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612a36565b905092915050565b5f808284612aef91906140b7565b905083811015612b34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2b906141cf565b60405180910390fd5b8091505092915050565b60016015806101000a81548160ff0219169083151502179055505f810315612da957601560149054906101000a900460ff1615612da9575f600267ffffffffffffffff811115612b9157612b9061320c565b5b604051908082528060200260200182016040528015612bbf5781602001602082028036833780820191505090505b50905030815f81518110612bd657612bd5613b4f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c7a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c9e919061397c565b81600181518110612cb257612cb1613b4f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612d183060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611d76565b60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401612d7a9594939291906142a4565b5f604051808303815f87803b158015612d91575f80fd5b505af1158015612da3573d5f803e3d5ffd5b50505050505b5f6015806101000a81548160ff02191690831515021790555050565b600760029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015612e2a573d5f803e3d5ffd5b5050565b5f808303612e3e575f9050612e9f565b5f8284612e4b9190613603565b9050828482612e5a9190614329565b14612e9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e91906143c9565b60405180910390fd5b809150505b92915050565b5f612ee683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612f17565b905092915050565b5f80823b90505f8111915050919050565b5f818311612f0d5782612f0f565b815b905092915050565b5f8083118290612f5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f549190613002565b60405180910390fd5b505f8385612f6b9190614329565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612faf578082015181840152602081019050612f94565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612fd482612f78565b612fde8185612f82565b9350612fee818560208601612f92565b612ff781612fba565b840191505092915050565b5f6020820190508181035f83015261301a8184612fca565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61305c82613033565b9050919050565b61306c81613052565b8114613076575f80fd5b50565b5f8135905061308781613063565b92915050565b5f819050919050565b61309f8161308d565b81146130a9575f80fd5b50565b5f813590506130ba81613096565b92915050565b5f80604083850312156130d6576130d561302b565b5b5f6130e385828601613079565b92505060206130f4858286016130ac565b9150509250929050565b5f8115159050919050565b613112816130fe565b82525050565b5f60208201905061312b5f830184613109565b92915050565b61313a8161308d565b82525050565b5f6020820190506131535f830184613131565b92915050565b5f805f606084860312156131705761316f61302b565b5b5f61317d86828701613079565b935050602061318e86828701613079565b925050604061319f868287016130ac565b9150509250925092565b5f60ff82169050919050565b6131be816131a9565b82525050565b5f6020820190506131d75f8301846131b5565b92915050565b5f602082840312156131f2576131f161302b565b5b5f6131ff84828501613079565b91505092915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61324282612fba565b810181811067ffffffffffffffff821117156132615761326061320c565b5b80604052505050565b5f613273613022565b905061327f8282613239565b919050565b5f67ffffffffffffffff82111561329e5761329d61320c565b5b602082029050602081019050919050565b5f80fd5b5f6132c56132c084613284565b61326a565b905080838252602082019050602084028301858111156132e8576132e76132af565b5b835b8181101561331157806132fd8882613079565b8452602084019350506020810190506132ea565b5050509392505050565b5f82601f83011261332f5761332e613208565b5b813561333f8482602086016132b3565b91505092915050565b5f6020828403121561335d5761335c61302b565b5b5f82013567ffffffffffffffff81111561337a5761337961302f565b5b6133868482850161331b565b91505092915050565b61339881613052565b82525050565b5f6020820190506133b15f83018461338f565b92915050565b5f80604083850312156133cd576133cc61302b565b5b5f6133da85828601613079565b92505060206133eb85828601613079565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613429602083612f82565b9150613434826133f5565b602082019050919050565b5f6020820190508181035f8301526134568161341d565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b60018511156134df578086048111156134bb576134ba61345d565b5b60018516156134ca5780820291505b80810290506134d88561348a565b945061349f565b94509492505050565b5f826134f757600190506135b2565b81613504575f90506135b2565b816001811461351a576002811461352457613553565b60019150506135b2565b60ff8411156135365761353561345d565b5b8360020a91508482111561354d5761354c61345d565b5b506135b2565b5060208310610133831016604e8410600b84101617156135885782820a9050838111156135835761358261345d565b5b6135b2565b6135958484846001613496565b925090508184048111156135ac576135ab61345d565b5b81810290505b9392505050565b5f6135c38261308d565b91506135ce836131a9565b92506135fb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846134e8565b905092915050565b5f61360d8261308d565b91506136188361308d565b92508282026136268161308d565b9150828204841483151761363d5761363c61345d565b5b5092915050565b7f5075626c69632073616c65206973206e6f742063757272656e746c79206f70655f8201527f6e00000000000000000000000000000000000000000000000000000000000000602082015250565b5f61369e602183612f82565b91506136a982613644565b604082019050919050565b5f6020820190508181035f8301526136cb81613692565b9050919050565b7f4d7573742073656e642045544820746f20707572636861736520746f6b656e735f82015250565b5f613706602083612f82565b9150613711826136d2565b602082019050919050565b5f6020820190508181035f830152613733816136fa565b9050919050565b7f496e76616c69642045544820616d6f756e7400000000000000000000000000005f82015250565b5f61376e601283612f82565b91506137798261373a565b602082019050919050565b5f6020820190508181035f83015261379b81613762565b9050919050565b7f45786365656473206d6178696d756d2063756d756c61746976652070757263685f8201527f617365206c696d69740000000000000000000000000000000000000000000000602082015250565b5f6137fc602983612f82565b9150613807826137a2565b604082019050919050565b5f6020820190508181035f830152613829816137f0565b9050919050565b7f45786365656473206d6178696d756d207075726368617365206c696d697400005f82015250565b5f613864601e83612f82565b915061386f82613830565b602082019050919050565b5f6020820190508181035f83015261389181613858565b9050919050565b7f496e73756666696369656e7420636f6e74726163742062616c616e63650000005f82015250565b5f6138cc601d83612f82565b91506138d782613898565b602082019050919050565b5f6020820190508181035f8301526138f9816138c0565b9050919050565b7f4f58333320696e6974696174656420616c7265616479000000000000000000005f82015250565b5f613934601683612f82565b915061393f82613900565b602082019050919050565b5f6020820190508181035f83015261396181613928565b9050919050565b5f8151905061397681613063565b92915050565b5f602082840312156139915761399061302b565b5b5f61399e84828501613968565b91505092915050565b5f6040820190506139ba5f83018561338f565b6139c7602083018461338f565b9392505050565b5f819050919050565b5f819050919050565b5f6139fa6139f56139f0846139ce565b6139d7565b61308d565b9050919050565b613a0a816139e0565b82525050565b5f60c082019050613a235f83018961338f565b613a306020830188613131565b613a3d6040830187613a01565b613a4a6060830186613a01565b613a57608083018561338f565b613a6460a0830184613131565b979650505050505050565b5f81519050613a7d81613096565b92915050565b5f805f60608486031215613a9a57613a9961302b565b5b5f613aa786828701613a6f565b9350506020613ab886828701613a6f565b9250506040613ac986828701613a6f565b9150509250925092565b5f604082019050613ae65f83018561338f565b613af36020830184613131565b9392505050565b613b03816130fe565b8114613b0d575f80fd5b50565b5f81519050613b1e81613afa565b92915050565b5f60208284031215613b3957613b3861302b565b5b5f613b4684828501613b10565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f496e76616c696420726563697069656e742061646472657373000000000000005f82015250565b5f613bb0601983612f82565b9150613bbb82613b7c565b602082019050919050565b5f6020820190508181035f830152613bdd81613ba4565b9050919050565b5f613bee8261308d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613c2057613c1f61345d565b5b600182019050919050565b7f4e6f2072656d61696e696e6720737570706c7920746f206275726e00000000005f82015250565b5f613c5f601b83612f82565b9150613c6a82613c2b565b602082019050919050565b5f6020820190508181035f830152613c8c81613c53565b9050919050565b7f4e6f2045544820746f20776974686472617700000000000000000000000000005f82015250565b5f613cc7601283612f82565b9150613cd282613c93565b602082019050919050565b5f6020820190508181035f830152613cf481613cbb565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613d55602483612f82565b9150613d6082613cfb565b604082019050919050565b5f6020820190508181035f830152613d8281613d49565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613de3602283612f82565b9150613dee82613d89565b604082019050919050565b5f6020820190508181035f830152613e1081613dd7565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613e71602583612f82565b9150613e7c82613e17565b604082019050919050565b5f6020820190508181035f830152613e9e81613e65565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613eff602383612f82565b9150613f0a82613ea5565b604082019050919050565b5f6020820190508181035f830152613f2c81613ef3565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f613f8d602983612f82565b9150613f9882613f33565b604082019050919050565b5f6020820190508181035f830152613fba81613f81565b9050919050565b7f4f6e6c79206f6e65207472616e736665722070657220626c6f636b20616c6c6f5f8201527f7765642e00000000000000000000000000000000000000000000000000000000602082015250565b5f61401b602483612f82565b915061402682613fc1565b604082019050919050565b5f6020820190508181035f8301526140488161400f565b9050919050565b7f4578636565647320746865205f6d61785478416d6f756e742e000000000000005f82015250565b5f614083601983612f82565b915061408e8261404f565b602082019050919050565b5f6020820190508181035f8301526140b081614077565b9050919050565b5f6140c18261308d565b91506140cc8361308d565b92508282019050808211156140e4576140e361345d565b5b92915050565b7f4578636565647320746865206d617857616c6c657453697a652e0000000000005f82015250565b5f61411e601a83612f82565b9150614129826140ea565b602082019050919050565b5f6020820190508181035f83015261414b81614112565b9050919050565b5f61415c8261308d565b91506141678361308d565b925082820390508181111561417f5761417e61345d565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f6141b9601b83612f82565b91506141c482614185565b602082019050919050565b5f6020820190508181035f8301526141e6816141ad565b9050919050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61421f81613052565b82525050565b5f6142308383614216565b60208301905092915050565b5f602082019050919050565b5f614252826141ed565b61425c81856141f7565b935061426783614207565b805f5b8381101561429757815161427e8882614225565b97506142898361423c565b92505060018101905061426a565b5085935050505092915050565b5f60a0820190506142b75f830188613131565b6142c46020830187613a01565b81810360408301526142d68186614248565b90506142e5606083018561338f565b6142f26080830184613131565b9695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6143338261308d565b915061433e8361308d565b92508261434e5761434d6142fc565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f6143b3602183612f82565b91506143be82614359565b604082019050919050565b5f6020820190508181035f8301526143e0816143a7565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220bfd1a6aa563c32887c8a91a5ced300689e7fe8046b039156c5b78ad8788c12e364736f6c63430008140033
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.